Skip to content

Commit

Permalink
move Transceiver and create_transceiver_from_hostname
Browse files Browse the repository at this point in the history
  • Loading branch information
Christian-B committed Aug 1, 2023
1 parent 937e84b commit 3ced2f5
Show file tree
Hide file tree
Showing 10 changed files with 117 additions and 8 deletions.
2 changes: 1 addition & 1 deletion spinnman/data/spinnman_data_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from spinn_utilities.log import FormatAdapter
from spinn_utilities.overrides import overrides
from spinn_machine.data.machine_data_writer import MachineDataWriter
from spinnman.transceiver import Transceiver
from spinnman.transceiver.transceiver import Transceiver
from .spinnman_data_view import _SpiNNManDataModel, SpiNNManDataView

logger = FormatAdapter(logging.getLogger(__name__))
Expand Down
5 changes: 3 additions & 2 deletions spinnman/extended/extended_transceiver.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from spinn_utilities.logger_utils import warn_once
from spinn_machine import CoreSubsets
from spinnman.constants import SYSTEM_VARIABLE_BASE_ADDRESS
from spinnman.transceiver import Transceiver
from spinnman.transceiver.transceiver import Transceiver
from spinnman.constants import (
ROUTER_REGISTER_BASE_ADDRESS, ROUTER_FILTER_CONTROLS_OFFSET,
ROUTER_DIAGNOSTIC_FILTER_SIZE)
Expand All @@ -42,7 +42,8 @@
from spinnman.processes import (
GetHeapProcess, ReadMemoryProcess, SendSingleCommandProcess,
WriteMemoryProcess)
from spinnman.transceiver import _EXECUTABLE_ADDRESS, _ONE_BYTE, _ONE_WORD
from spinnman.transceiver.transceiver import (
_EXECUTABLE_ADDRESS, _ONE_BYTE, _ONE_WORD)
from spinnman.utilities.utility_functions import (
work_out_bmp_from_machine_details)

Expand Down
2 changes: 1 addition & 1 deletion spinnman/spalloc/spalloc_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
from spinnman.constants import SCP_SCAMP_PORT, UDP_BOOT_CONNECTION_DEFAULT_PORT
from spinnman.exceptions import SpinnmanTimeoutException
from spinnman.exceptions import SpallocException
from spinnman.transceiver import Transceiver
from spinnman.transceiver.transceiver import Transceiver
from .spalloc_state import SpallocState
from .proxy_protocol import ProxyProtocol
from .session import Session, SessionAware
Expand Down
2 changes: 1 addition & 1 deletion spinnman/spalloc/spalloc_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from spinn_utilities.abstract_base import AbstractBase, abstractmethod
from spinn_utilities.abstract_context_manager import AbstractContextManager
from spinnman.constants import SCP_SCAMP_PORT
from spinnman.transceiver import Transceiver
from spinnman.transceiver.transceiver import Transceiver
from spinnman.connections.udp_packet_connections import UDPConnection
from .spalloc_state import SpallocState
from .spalloc_boot_connection import SpallocBootConnection
Expand Down
18 changes: 18 additions & 0 deletions spinnman/transceiver/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright (c) 2021 The University of Manchester
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from spinnman.transceiver.transceiver_factory import (
create_transceiver_from_hostname)

__all__ = ["create_transceiver_from_hostname"]
File renamed without changes.
90 changes: 90 additions & 0 deletions spinnman/transceiver/transceiver_factory.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# Copyright (c) 2023 The University of Manchester
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import logging
from spinn_utilities.log import FormatAdapter
from spinnman.utilities.utility_functions import (
work_out_bmp_from_machine_details)
from spinnman.connections.udp_packet_connections import (
BMPConnection, BootConnection, SCAMPConnection)
from spinnman.transceiver.transceiver import Transceiver

logger = FormatAdapter(logging.getLogger(__name__))


def create_transceiver_from_hostname(
hostname, version, bmp_connection_data=None, number_of_boards=None,
auto_detect_bmp=False):
"""
Create a Transceiver by creating a :py:class:`~.UDPConnection` to the
given hostname on port 17893 (the default SCAMP port), and a
:py:class:`~.BootConnection` on port 54321 (the default boot port),
optionally discovering any additional links using the UDPConnection,
and then returning the transceiver created with the conjunction of
the created UDPConnection and the discovered connections.
:param hostname: The hostname or IP address of the board or `None` if
only the BMP connections are of interest
:type hostname: str or None
:param number_of_boards: a number of boards expected to be supported, or
``None``, which defaults to a single board
:type number_of_boards: int or None
:param int version: the type of SpiNNaker board used within the SpiNNaker
machine being used. If a Spinn-5 board, then the version will be 5,
Spinn-3 would equal 3 and so on.
:param list(BMPConnectionData) bmp_connection_data:
the details of the BMP connections used to boot multi-board systems
:param bool auto_detect_bmp:
``True`` if the BMP of version 4 or 5 boards should be
automatically determined from the board IP address
:param scamp_connections:
the list of connections used for SCAMP communications
:return: The created transceiver
:rtype: Transceiver
:raise SpinnmanIOException:
If there is an error communicating with the board
:raise SpinnmanInvalidPacketException:
If a packet is received that is not in the valid format
:raise SpinnmanInvalidParameterException:
If a packet is received that has invalid parameters
:raise SpinnmanUnexpectedResponseCodeException:
If a response indicates an error during the exchange
"""
if hostname is not None:
logger.info("Creating transceiver for {}", hostname)
connections = list()

# if no BMP has been supplied, but the board is a spinn4 or a spinn5
# machine, then an assumption can be made that the BMP is at -1 on the
# final value of the IP address
if (version >= 4 and auto_detect_bmp is True and
(bmp_connection_data is None or not bmp_connection_data)):
bmp_connection_data = [
work_out_bmp_from_machine_details(hostname, number_of_boards)]

# handle BMP connections
if bmp_connection_data is not None:
bmp_ip_list = list()
for conn_data in bmp_connection_data:
bmp_connection = BMPConnection(conn_data)
connections.append(bmp_connection)
bmp_ip_list.append(bmp_connection.remote_ip_address)
logger.info("Transceiver using BMPs: {}", bmp_ip_list)

connections.append(SCAMPConnection(remote_host=hostname))

# handle the boot connection
connections.append(BootConnection(remote_host=hostname))

return Transceiver(version, connections=connections)
2 changes: 1 addition & 1 deletion unittests/data/test_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from spinnman.config_setup import unittest_setup
from spinnman.data import SpiNNManDataView
from spinnman.data.spinnman_data_writer import SpiNNManDataWriter
from spinnman.transceiver import Transceiver
from spinnman.transceiver.transceiver import Transceiver


class MockTranceiver(Transceiver):
Expand Down
2 changes: 1 addition & 1 deletion unittests/test_transceiver.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from spinnman.config_setup import unittest_setup
from spinnman.data.spinnman_data_writer import SpiNNManDataWriter
from spinnman.extended.extended_transceiver import ExtendedTransceiver
from spinnman.transceiver import Transceiver
from spinnman.transceiver.transceiver import Transceiver
from spinnman import constants
from spinnman.messages.spinnaker_boot.system_variable_boot_values import (
SystemVariableDefinition)
Expand Down
2 changes: 1 addition & 1 deletion unittests/test_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import unittest
import spinn_utilities
import spinn_machine
from spinnman.transceiver import Transceiver, _SCAMP_VERSION
from spinnman.transceiver.transceiver import Transceiver, _SCAMP_VERSION
import spinnman
from spinnman.config_setup import unittest_setup

Expand Down

0 comments on commit 3ced2f5

Please sign in to comment.