Source code for spinnman.model.version_info
from spinnman.exceptions import SpinnmanInvalidParameterException
from spinnman._utils import _get_int_from_little_endian_bytearray
from spinnman._utils import _get_short_from_little_endian_bytearray
from time import localtime
from time import asctime
def _get_int_from_bytearray(array, offset):
""" Wrapper function in case the endianness changes
"""
return _get_int_from_little_endian_bytearray(array, offset)
def _get_short_from_bytearray(array, offset):
""" Wrapper function in case the endianness changes
"""
return _get_short_from_little_endian_bytearray(array, offset)
[docs]class VersionInfo(object):
""" Decodes SC&MP/SARK version information as returned by the SVER command
"""
def __init__(self, version_data):
"""
:param version_data: bytes from an SCP packet containing version\
information
:type version_data: bytearray
:raise spinnman.exceptions.SpinnmanInvalidParameterException: If the\
message does not contain valid version information
"""
if len(version_data) < 13:
raise SpinnmanInvalidParameterException(
"len(version_data)", len(version_data),
"The length of the version data is too short")
self._p = version_data[0]
self._y = version_data[2]
self._x = version_data[3]
self._version_number = (_get_short_from_bytearray(version_data, 6)
/ 100.0)
self._build_date = _get_int_from_bytearray(version_data, 8)
self._version_string = version_data[12:-1].decode("ascii")
try:
self._name, self._hardware = self._version_string.split("/")
except ValueError as exception:
raise SpinnmanInvalidParameterException(
"version_string", self._version_string,
"Incorrect format: {}".format(exception))
@property
def name(self):
""" The name of the software
:return: The name
:rtype: str
"""
return self._name
@property
def version_number(self):
""" The version number of the software
:return: The version
:rtype: float
"""
return self._version_number
@property
def hardware(self):
""" The hardware being run on
:return: The hardware
:rtype: str
"""
return self._hardware
@property
def x(self):
""" The x-coordinate of the chip where the information was obtained
:return: the x-coordinate
:rtype: int
"""
return self._x
@property
def y(self):
""" The y-coordinate of the chip where the information was obtained
:return: The y-coordinate
:rtype: int
"""
return self._y
@property
def p(self):
""" The processor id of the processor where the information was\
obtained
:return: the processor id
:rtype: int
"""
return self._p
@property
def build_date(self):
""" The build date of the software
:return: The number of seconds since 1st January 1970
:rtype: long
"""
return self._build_date
@property
def version_string(self):
""" The version information as text
:return: The version information
:rtype: str
"""
return self._version_string
def __str__(self):
return "[Version: {} {} at {}:{}:{}:{} (built {})]".format(self._name,
self._version_number, self._hardware, self._x, self._y,
self._p, asctime(localtime(self._build_date)))