Source code for spinnman.messages.scp.scp_request_header

# Copyright (c) 2017-2019 The University of Manchester
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import struct

_TWO_SHORTS = struct.Struct("<2H")


[docs]class SCPRequestHeader(object): """ Represents the header of an SCP Request Each optional parameter in the constructor can be set to a value other\ than None once, after which it is immutable. It is an error to set a\ parameter that is not currently None. """ __slots__ = [ "_command", "_sequence"] def __init__(self, command, sequence=0): """ :param command: The SCP command :type command: :py:class:`spinnman.messages.scp.scp_command.SCPCommand` :param sequence: The number of the SCP packet in order of all packets\ sent or received, between 0 and 65535 :type sequence: int :raise spinnman.exceptions.SpinnmanInvalidParameterException: \ If one of the parameters is incorrect """ self._command = command self._sequence = sequence @property def command(self): """ The command of the SCP packet :return: The command :rtype: :py:class:`spinnman.messages.scp.scp_command.SCPCommand` """ return self._command @property def sequence(self): """ The sequence number of the SCP packet :return: The sequence number of the packet, between 0 and 65535 :rtype: int """ return self._sequence @sequence.setter def sequence(self, sequence): """ Set the sequence number of the SCP packet :param sequence: The sequence number to set, between 0 and 65535 :type sequence: int :return: Nothing is returned :rtype: None :raise spinnman.exceptions.SpinnmanInvalidParameterException: \ If the sequence is out of range, or if it has already been set """ self._sequence = sequence @property def bytestring(self): """ The header as a bytestring :return: The header as a bytestring :rtype: str """ return _TWO_SHORTS.pack(self._command.value, self._sequence)