Source code for spinnman.processes.read_router_diagnostics_process

from spinnman.messages.scp.impl import ReadMemory
from spinnman.model import RouterDiagnostics
from .abstract_multi_connection_process import AbstractMultiConnectionProcess

import struct

_N_REGISTERS = 16


[docs]class ReadRouterDiagnosticsProcess(AbstractMultiConnectionProcess): def __init__(self, connection_selector): AbstractMultiConnectionProcess.__init__(self, connection_selector) self._control_register = None self._error_status = None self._register_values = [0] * _N_REGISTERS
[docs] def handle_control_register_response(self, response): self._control_register = struct.unpack_from( "<I", response.data, response.offset)[0]
[docs] def handle_error_status_response(self, response): self._error_status = struct.unpack_from( "<I", response.data, response.offset)[0]
[docs] def handle_register_response(self, response): for register in range(_N_REGISTERS): self._register_values[register] = struct.unpack_from( "<I", response.data, response.offset + (register * 4))[0]
[docs] def get_router_diagnostics(self, x, y): self._send_request(ReadMemory(x, y, 0xe1000000, 4), self.handle_control_register_response) self._send_request(ReadMemory(x, y, 0xe1000014, 4), self.handle_error_status_response) self._send_request(ReadMemory(x, y, 0xe1000300, 16 * 4), self.handle_register_response) self._finish() self.check_for_error() return RouterDiagnostics(self._control_register, self._error_status, self._register_values)