Source code for spinnman.model.chip_summary_info

import struct

from spinnman.model.enums import CPUState


[docs]class ChipSummaryInfo(object): """ Represents the chip summary information read via an SCP command """ def __init__(self, chip_summary_data, offset, x, y): """ :param chip_summary_data: The data from the SCP response :type chip_summary_data: bytearray :param offset: The offset into the data where the data starts :type offset: int :param x: The x-coordinate of the chip that this data is from :param y: The y-coordinate of the chip that this data is from """ (chip_summary_flags, self._largest_free_sdram_block, self._largest_free_sram_block) = struct.unpack_from( "<3I", chip_summary_data, offset) self._n_cores = chip_summary_flags & 0x1F self._working_links = [ link for link in range(0, 6) if chip_summary_flags >> (8 + link) & 1 != 0] self._n_free_multicast_routing_entries = \ (chip_summary_flags >> 14) & 0x7FF self._is_ethernet_available = bool(chip_summary_flags & (1 << 25)) data_offset = offset + 12 self._core_states = [ CPUState(state) for state in struct.unpack_from("<18B", chip_summary_data, data_offset)] data_offset += 18 self._x = x self._y = y self._nearest_ethernet_x = None self._nearest_ethernet_y = None self._ethernet_ip_address = None (self._nearest_ethernet_y, self._nearest_ethernet_x) = \ struct.unpack_from( "<BB", chip_summary_data, data_offset) data_offset += 2 ip_data = struct.unpack_from( "<4B", chip_summary_data, data_offset) ethernet_ip_address = "{}.{}.{}.{}".format( ip_data[0], ip_data[1], ip_data[2], ip_data[3]) if self._is_ethernet_available: self._ethernet_ip_address = ethernet_ip_address data_offset += 4 @property def x(self): """ The x-coordinate of the chip that this data is from :rtype: int """ return self._x @property def y(self): """ The y-coordinate of the chip that this data is from :rtype: int """ return self._y @property def n_cores(self): """ The number of cores working on the chip (including monitors) :rtype: int """ return self._n_cores @property def core_states(self): """ The state of the cores on the chip (list of one per core) :rtype: list of `py:class:spinnman.model.cpu_state.CPUState` """ return self._core_states @property def working_links(self): """ The ids of the working links outgoing from this chip :rtype: list of int """ return self._working_links @property def is_ethernet_available(self): """ Determines if the Ethernet connection is available on this chip :rtype: bool """ return self._is_ethernet_available @property def n_free_multicast_routing_entries(self): """ The number of multicast routing entries free on this chip :rtype: int """ return self._n_free_multicast_routing_entries @property def largest_free_sdram_block(self): """ The size of the largest block of free SDRAM in bytes :rtype: int """ return self._largest_free_sdram_block @property def largest_free_sram_block(self): """ The size of the largest block of free SRAM in bytes :rtype: int """ return self._largest_free_sram_block @property def nearest_ethernet_x(self): """ The x coordinate of the nearest Ethernet chip :rtype: int """ return self._nearest_ethernet_x @property def nearest_ethernet_y(self): """ The y coordinate of the nearest Ethernet chip :rtype: int """ return self._nearest_ethernet_y @property def ethernet_ip_address(self): """ The IP address of the Ethernet if up, or None if not :rtype: str """ return self._ethernet_ip_address