Source code for spinnman.connections.abstract_classes.udp_senders.abstract_udp_scp_sender
from abc import ABCMeta
from abc import abstractmethod
from six import add_metaclass
from spinnman.connections.abstract_classes.abstract_scp_sender import \
AbstractSCPSender
from spinnman.data.little_endian_byte_array_byte_writer import \
LittleEndianByteArrayByteWriter
from spinnman.exceptions import SpinnmanIOException
from spinnman import constants
from spinnman.messages.udp_utils import udp_utils as utils
@add_metaclass(ABCMeta)
[docs]class AbstractUDPSCPSender(AbstractSCPSender):
""" A sender of SCP messages
"""
@abstractmethod
[docs] def is_udp_scp_sender(self):
pass
[docs] def send_scp_request(self, scp_request):
""" Sends an SCP request down this connection
Messages must have the following properties:
* source_port is None or 7
* source_cpu is None or 31
* source_chip_x is None or 0
* source_chip_y is None or 0
tag in the message is optional - if not set the default set in the\
constructor will be used.
sequence in the message is optional - if not set (sequence number\
last assigned + 1) % 65536 will be used
:param scp_request: message packet to send
:type scp_request:
:py:class:`spinnman.messages.scp.abstract_scp_request.AbstractSCPRequest`
:return: Nothing is returned
:rtype: None
:raise spinnman.exceptions.SpinnmanIOException: If there is an error\
sending the message
"""
if not self._can_send:
raise SpinnmanIOException("Not connected to a remote host")
# Update the SDP headers for this connection
utils.update_sdp_header(scp_request.sdp_header,
constants.DEFAULT_SDP_TAG)
# Update the sequence for this connection
if scp_request.scp_request_header.sequence is None:
scp_request.scp_request_header.sequence = self._scp_sequence
self._scp_sequence = (self._scp_sequence + 1) % 65536
# Create a writer for the mesage
writer = LittleEndianByteArrayByteWriter()
# Add the UDP padding
writer.write_short(0)
# Write the SCP message
scp_request.write_scp_request(writer)
# Send the packet
try:
self._socket.send(writer.data)
except Exception as e:
raise SpinnmanIOException(str(e))