From 42764ed1ede81222571f3589cd3340a390561c27 Mon Sep 17 00:00:00 2001 From: "Christian Y. Brenninkmeijer" Date: Mon, 31 Jul 2023 10:42:06 +0100 Subject: [PATCH 1/8] only support one bmp_name --- spinnman/board_test_configuration.py | 4 ++-- spinnman/transceiver.py | 16 +++++++--------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/spinnman/board_test_configuration.py b/spinnman/board_test_configuration.py index b936c8603..93c197c88 100644 --- a/spinnman/board_test_configuration.py +++ b/spinnman/board_test_configuration.py @@ -57,8 +57,8 @@ def set_up_remote_board(self): if self.bmp_names == "None": self.bmp_names = None else: - self.bmp_names = [BMPConnectionData( - 0, 0, self.bmp_names, [0], None)] + self.bmp_names = BMPConnectionData( + 0, 0, self.bmp_names, [0], None) self.auto_detect_bmp = \ self._config.getboolean("Machine", "auto_detect_bmp") self.localport = _PORT diff --git a/spinnman/transceiver.py b/spinnman/transceiver.py index 7487bd6e6..a5ad07c9c 100644 --- a/spinnman/transceiver.py +++ b/spinnman/transceiver.py @@ -109,7 +109,7 @@ def create_transceiver_from_hostname( :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: + :param 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 @@ -136,17 +136,15 @@ def create_transceiver_from_hostname( # 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)] + 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) + bmp_connection = BMPConnection(bmp_connection_data) + connections.append(bmp_connection) + logger.info("Transceiver using BMP: {}", + bmp_connection.remote_ip_address) connections.append(SCAMPConnection(remote_host=hostname)) From 91cd4a50e44ab52fa24110a8f0c9810ca715dd9a Mon Sep 17 00:00:00 2001 From: "Christian Y. Brenninkmeijer" Date: Mon, 31 Jul 2023 10:57:02 +0100 Subject: [PATCH 2/8] no longer support cabinet and frame --- spinnman/board_test_configuration.py | 3 +-- spinnman/model/bmp_connection_data.py | 12 ++++-------- spinnman/utilities/utility_functions.py | 2 +- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/spinnman/board_test_configuration.py b/spinnman/board_test_configuration.py index 93c197c88..0f68101d1 100644 --- a/spinnman/board_test_configuration.py +++ b/spinnman/board_test_configuration.py @@ -57,8 +57,7 @@ def set_up_remote_board(self): if self.bmp_names == "None": self.bmp_names = None else: - self.bmp_names = BMPConnectionData( - 0, 0, self.bmp_names, [0], None) + self.bmp_names = BMPConnectionData(self.bmp_names, [0], None) self.auto_detect_bmp = \ self._config.getboolean("Machine", "auto_detect_bmp") self.localport = _PORT diff --git a/spinnman/model/bmp_connection_data.py b/spinnman/model/bmp_connection_data.py index 0439fd6ca..3206b5bdc 100644 --- a/spinnman/model/bmp_connection_data.py +++ b/spinnman/model/bmp_connection_data.py @@ -19,15 +19,11 @@ class BMPConnectionData(object): """ __slots__ = [ "_boards", - "_cabinet", - "_frame", "_ip_address", "_port_num"] - def __init__(self, cabinet, frame, ip_address, boards, port_num): + def __init__(self, ip_address, boards, port_num): # pylint: disable=too-many-arguments - self._cabinet = cabinet - self._frame = frame self._ip_address = ip_address self._boards = boards self._port_num = port_num @@ -39,7 +35,7 @@ def cabinet(self): :rtype: int """ - return self._cabinet + return 0 @property def frame(self): @@ -48,7 +44,7 @@ def frame(self): :rtype: int """ - return self._frame + return 0 @property def ip_address(self): @@ -78,7 +74,7 @@ def port_num(self): return self._port_num def __str__(self): - return (f"{self._cabinet}:{self._frame}:{self._ip_address}:" + return (f"{self._ip_address}:" f"{self._boards}:{self._port_num}") def __repr__(self): diff --git a/spinnman/utilities/utility_functions.py b/spinnman/utilities/utility_functions.py index 31320dcbc..014b670c5 100644 --- a/spinnman/utilities/utility_functions.py +++ b/spinnman/utilities/utility_functions.py @@ -50,7 +50,7 @@ def work_out_bmp_from_machine_details(hostname, number_of_boards): board_range = range(number_of_boards) # Assume a single board with no cabinet or frame specified - return BMPConnectionData(cabinet=0, frame=0, ip_address=bmp_ip_address, + return BMPConnectionData(ip_address=bmp_ip_address, boards=board_range, port_num=SCP_SCAMP_PORT) From c2218e3565825a9dc41fb9a1e645ba7e845cd4ab Mon Sep 17 00:00:00 2001 From: "Christian Y. Brenninkmeijer" Date: Mon, 31 Jul 2023 12:22:53 +0100 Subject: [PATCH 3/8] one bmp --- spinnman/transceiver.py | 123 +++++++++++++++++----------------------- 1 file changed, 51 insertions(+), 72 deletions(-) diff --git a/spinnman/transceiver.py b/spinnman/transceiver.py index a5ad07c9c..34c2119cf 100644 --- a/spinnman/transceiver.py +++ b/spinnman/transceiver.py @@ -172,8 +172,8 @@ class Transceiver(AbstractContextManager): """ __slots__ = [ "_all_connections", - "_bmp_connection_selectors", - "_bmp_connections", + "_bmp_connection_selector", + "_bmp_connection", "_boot_send_connection", "_chip_execute_lock_condition", "_chip_execute_locks", @@ -232,10 +232,10 @@ def __init__( self._scamp_connections = list() # The BMP connections - self._bmp_connections = list() + self._bmp_connection = None # build connection selectors for the processes. - self._bmp_connection_selectors = dict() + self._bmp_connection_selector = None self._scamp_connection_selector = \ self.__identify_connections(connections) @@ -248,9 +248,6 @@ def __init__( self._chip_execute_lock_condition = Condition() self._n_chip_execute_locks = 0 - # Check that the BMP connections are valid - self.__check_bmp_connections() - self._machine_off = False def _where_is_xy(self, x, y): @@ -285,10 +282,13 @@ def __identify_connections(self, connections): # Locate any connections that talk to a BMP if isinstance(conn, BMPConnection): + if self._bmp_connection is not None: + raise NotImplementedError( + "Only one BMP connection is supported") # If it is a BMP conn, add it here - self._bmp_connections.append(conn) - self._bmp_connection_selectors[conn.cabinet, conn.frame] =\ - FixedConnectionSelector(conn) + self._bmp_connection = conn + self._bmp_connection_selector = FixedConnectionSelector(conn) + self.__check_bmp_connection() # Otherwise, check if it can send and receive SCP (talk to SCAMP) elif isinstance(conn, SCAMPConnection): self._scamp_connections.append(conn) @@ -296,7 +296,7 @@ def __identify_connections(self, connections): # update the transceiver with the conn selectors. return MostDirectConnectionSelector(self._scamp_connections) - def __check_bmp_connections(self): + def __check_bmp_connection(self): """ Check that the BMP connections are actually connected to valid BMPs. @@ -304,37 +304,35 @@ def __check_bmp_connections(self): """ # check that the UDP BMP conn is actually connected to a BMP # via the sver command - for conn in self._bmp_connections: - - # try to send a BMP sver to check if it responds as expected - try: - version_info = self._get_scamp_version( - conn.chip_x, conn.chip_y, - self._bmp_connection_selectors[conn.cabinet, conn.frame]) - fail_version_name = version_info.name != _BMP_NAME - fail_version_num = \ - version_info.version_number[0] not in _BMP_MAJOR_VERSIONS - if fail_version_name or fail_version_num: - raise SpinnmanIOException( - f"The BMP at {conn.remote_ip_address} is running " - f"{version_info.name} {version_info.version_string} " - "which is incompatible with this transceiver, required" - f" version is {_BMP_NAME} {_BMP_MAJOR_VERSIONS}") - - logger.info("Using BMP at {} with version {} {}", - conn.remote_ip_address, version_info.name, - version_info.version_string) - - # If it fails to respond due to timeout, maybe that the connection - # isn't valid - except SpinnmanTimeoutException as e: - raise SpinnmanException( - f"BMP connection to {conn.remote_ip_address} is " - "not responding") from e - except Exception: - logger.exception("Failed to speak to BMP at {}", - conn.remote_ip_address) - raise + conn = self._bmp_connection + # try to send a BMP sver to check if it responds as expected + try: + version_info = self._get_scamp_version( + conn.chip_x, conn.chip_y, self._bmp_connection_selector) + fail_version_name = version_info.name != _BMP_NAME + fail_version_num = \ + version_info.version_number[0] not in _BMP_MAJOR_VERSIONS + if fail_version_name or fail_version_num: + raise SpinnmanIOException( + f"The BMP at {conn.remote_ip_address} is running " + f"{version_info.name} {version_info.version_string} " + "which is incompatible with this transceiver, required" + f" version is {_BMP_NAME} {_BMP_MAJOR_VERSIONS}") + + logger.info("Using BMP at {} with version {} {}", + conn.remote_ip_address, version_info.name, + version_info.version_string) + + # If it fails to respond due to timeout, maybe that the connection + # isn't valid + except SpinnmanTimeoutException as e: + raise SpinnmanException( + f"BMP connection to {conn.remote_ip_address} is " + "not responding") from e + except Exception: + logger.exception("Failed to speak to BMP at {}", + conn.remote_ip_address) + raise def _check_connection( self, connection_selector, chip_x, chip_y): @@ -689,7 +687,7 @@ def ensure_board_is_ready( width, height, extra_boot_values) # If we fail to get a SCAMP version this time, try other things - if version_info is None and self._bmp_connections: + if version_info is None and self._bmp_connection: # start by powering up each BMP connection logger.info("Attempting to power on machine") @@ -1081,12 +1079,10 @@ def _power_on_machine(self): :rtype bool :return success of failure to power on machine """ - if not self._bmp_connections: + if self._bmp_connection is None: logger.warning("No BMP connections, so can't power on") return False - for bmp_connection in self._bmp_connections: - self.power_on(bmp_connection.boards, bmp_connection.cabinet, - bmp_connection.frame) + self.power_on(self._bmp_connection.boards) return True def power_on(self, boards=0, cabinet=0, frame=0): @@ -1099,7 +1095,7 @@ def power_on(self, boards=0, cabinet=0, frame=0): :param int frame: the ID of the frame in the cabinet containing the board(s), or 0 if the board is not in a frame """ - self._power(PowerCommand.POWER_ON, boards, cabinet, frame) + self._power(PowerCommand.POWER_ON, boards) def power_off_machine(self): """ @@ -1108,13 +1104,11 @@ def power_off_machine(self): :rtype bool :return success or failure to power off the machine """ - if not self._bmp_connections: + if self._bmp_connection is None: logger.warning("No BMP connections, so can't power off") return False logger.info("Turning off machine") - for bmp_connection in self._bmp_connections: - self.power_off(bmp_connection.boards, bmp_connection.cabinet, - bmp_connection.frame) + self.power_off(self._bmp_connection.boards) return True def power_off(self, boards=0, cabinet=0, frame=0): @@ -1127,20 +1121,7 @@ def power_off(self, boards=0, cabinet=0, frame=0): :param int frame: the ID of the frame in the cabinet containing the board(s), or 0 if the board is not in a frame """ - self._power(PowerCommand.POWER_OFF, boards, cabinet, frame) - - def _bmp_connection(self, cabinet, frame): - """ - :param int cabinet: - :param int frame: - :rtype: FixedConnectionSelector - """ - key = (cabinet, frame) - if key not in self._bmp_connection_selectors: - raise SpinnmanInvalidParameterException( - "cabinet and frame", f"{cabinet} and {frame}", - "Unknown combination") - return self._bmp_connection_selectors[key] + self._power(PowerCommand.POWER_OFF, boards) def _power(self, power_command, boards=0, cabinet=0, frame=0): """ @@ -1153,7 +1134,7 @@ def _power(self, power_command, boards=0, cabinet=0, frame=0): :param int frame: the ID of the frame in the cabinet containing the board(s), or 0 if the board is not in a frame """ - connection_selector = self._bmp_connection(cabinet, frame) + connection_selector = self._bmp_connection_selector timeout = ( BMP_POWER_ON_TIMEOUT if power_command == PowerCommand.POWER_ON @@ -1183,7 +1164,7 @@ def read_fpga_register(self, fpga_num, register, cabinet, frame, board): :rtype: int """ process = SendSingleCommandProcess( - self._bmp_connection(cabinet, frame), timeout=1.0) + self._bmp_connection_selector, timeout=1.0) response = process.execute( ReadFPGARegister(fpga_num, register, board)) return response.fpga_register # pylint: disable=no-member @@ -1203,8 +1184,7 @@ def write_fpga_register(self, fpga_num, register, value, cabinet, frame, :param int frame: the frame this is targeting :param int board: which board to write the FPGA register to """ - process = SendSingleCommandProcess( - self._bmp_connection(cabinet, frame)) + process = SendSingleCommandProcess(self._bmp_connection_selector) process.execute( WriteFPGARegister(fpga_num, register, value, board)) @@ -1217,8 +1197,7 @@ def read_bmp_version(self, board, cabinet, frame): :param int board: which board to request the data from :return: the sver from the BMP """ - process = SendSingleCommandProcess( - self._bmp_connection(cabinet, frame)) + process = SendSingleCommandProcess(self._bmp_connection_selector) response = process.execute(BMPGetVersion(board)) return response.version_info # pylint: disable=no-member From 11023bc2753b7751104cfd7a913892ef2c253433 Mon Sep 17 00:00:00 2001 From: "Christian Y. Brenninkmeijer" Date: Mon, 31 Jul 2023 12:27:36 +0100 Subject: [PATCH 4/8] cabinet and frame where never not 0 --- spinnman/transceiver.py | 31 ++++++------------------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/spinnman/transceiver.py b/spinnman/transceiver.py index 34c2119cf..715344029 100644 --- a/spinnman/transceiver.py +++ b/spinnman/transceiver.py @@ -1085,15 +1085,11 @@ def _power_on_machine(self): self.power_on(self._bmp_connection.boards) return True - def power_on(self, boards=0, cabinet=0, frame=0): + def power_on(self, boards=0): """ Power on a set of boards in the machine. :param int boards: The board or boards to power on - :param int cabinet: the ID of the cabinet containing the frame, or 0 - if the frame is not in a cabinet - :param int frame: the ID of the frame in the cabinet containing the - board(s), or 0 if the board is not in a frame """ self._power(PowerCommand.POWER_ON, boards) @@ -1111,28 +1107,20 @@ def power_off_machine(self): self.power_off(self._bmp_connection.boards) return True - def power_off(self, boards=0, cabinet=0, frame=0): + def power_off(self, boards=0): """ Power off a set of boards in the machine. :param int boards: The board or boards to power off - :param int cabinet: the ID of the cabinet containing the frame, or 0 - if the frame is not in a cabinet - :param int frame: the ID of the frame in the cabinet containing the - board(s), or 0 if the board is not in a frame """ self._power(PowerCommand.POWER_OFF, boards) - def _power(self, power_command, boards=0, cabinet=0, frame=0): + def _power(self, power_command, boards=0): """ Send a power request to the machine. :param PowerCommand power_command: The power command to send :param boards: The board or boards to send the command to - :param int cabinet: the ID of the cabinet containing the frame, or 0 - if the frame is not in a cabinet - :param int frame: the ID of the frame in the cabinet containing the - board(s), or 0 if the board is not in a frame """ connection_selector = self._bmp_connection_selector timeout = ( @@ -1148,7 +1136,7 @@ def _power(self, power_command, boards=0, cabinet=0, frame=0): if not self._machine_off: time.sleep(BMP_POST_POWER_ON_SLEEP_TIME) - def read_fpga_register(self, fpga_num, register, cabinet, frame, board): + def read_fpga_register(self, fpga_num, register, board): """ Read a register on a FPGA of a board. The meaning of the register's contents will depend on the FPGA's configuration. @@ -1157,8 +1145,6 @@ def read_fpga_register(self, fpga_num, register, cabinet, frame, board): :param int register: Register address to read to (will be rounded down to the nearest 32-bit word boundary). - :param int cabinet: cabinet: the cabinet this is targeting - :param int frame: the frame this is targeting :param int board: which board to request the FPGA register from :return: the register data :rtype: int @@ -1169,8 +1155,7 @@ def read_fpga_register(self, fpga_num, register, cabinet, frame, board): ReadFPGARegister(fpga_num, register, board)) return response.fpga_register # pylint: disable=no-member - def write_fpga_register(self, fpga_num, register, value, cabinet, frame, - board): + def write_fpga_register(self, fpga_num, register, value, board): """ Write a register on a FPGA of a board. The meaning of setting the register's contents will depend on the FPGA's configuration. @@ -1180,20 +1165,16 @@ def write_fpga_register(self, fpga_num, register, value, cabinet, frame, Register address to read to (will be rounded down to the nearest 32-bit word boundary). :param int value: the value to write into the FPGA register - :param int cabinet: cabinet: the cabinet this is targeting - :param int frame: the frame this is targeting :param int board: which board to write the FPGA register to """ process = SendSingleCommandProcess(self._bmp_connection_selector) process.execute( WriteFPGARegister(fpga_num, register, value, board)) - def read_bmp_version(self, board, cabinet, frame): + def read_bmp_version(self, board): """ Read the BMP version. - :param int cabinet: cabinet: the cabinet this is targeting - :param int frame: the frame this is targeting :param int board: which board to request the data from :return: the sver from the BMP """ From f6feafe973b24355d9688ae28288f481dbfef313 Mon Sep 17 00:00:00 2001 From: "Christian Y. Brenninkmeijer" Date: Mon, 31 Jul 2023 13:00:04 +0100 Subject: [PATCH 5/8] fix extended --- spinnman/extended/extended_transceiver.py | 24 ++++------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/spinnman/extended/extended_transceiver.py b/spinnman/extended/extended_transceiver.py index f2120267f..e591172a1 100644 --- a/spinnman/extended/extended_transceiver.py +++ b/spinnman/extended/extended_transceiver.py @@ -450,8 +450,7 @@ def set_led(self, led, action, board, cabinet, frame): """ warn_once(logger, "The set_led method is deprecated and " "untested due to no known use.") - process = SendSingleCommandProcess( - self._bmp_connection(cabinet, frame)) + process = SendSingleCommandProcess(self._bmp_connection_selector) process.execute(BMPSetLed(led, action, board)) def read_adc_data(self, board, cabinet, frame): @@ -471,8 +470,7 @@ def read_adc_data(self, board, cabinet, frame): """ warn_once(logger, "The read_adc_data method is deprecated and " "untested due to no known use.") - process = SendSingleCommandProcess( - self._bmp_connection(cabinet, frame)) + process = SendSingleCommandProcess(self._bmp_connection_selector) response = process.execute(ReadADC(board)) return response.adc_info # pylint: disable=no-member @@ -792,26 +790,12 @@ def number_of_boards_located(self): warn_once(logger, "The number_of_boards_located method is deprecated " "and likely to be removed.") boards = 0 - for bmp_connection in self._bmp_connections: - boards += len(bmp_connection.boards) + if self._bmp_connection: + boards += len(self._bmp_connection.boards) # if no BMPs are available, then there's still at least one board return max(1, boards) - @property - def bmp_connection(self): - """ - The BMP connections. - - .. warning:: - This property is currently deprecated and likely to be removed. - - :rtype: dict(tuple(int,int),MostDirectConnectionSelector) - """ - warn_once(logger, "The bmp_connection property is deprecated and " - "likely to be removed.") - return self._bmp_connection_selectors - def get_heap(self, x, y, heap=SystemVariableDefinition.sdram_heap_address): """ Get the contents of the given heap on a given chip. From c0327fad8bfd27dfc549383f99fa4367b17b69f2 Mon Sep 17 00:00:00 2001 From: "Christian Y. Brenninkmeijer" Date: Mon, 31 Jul 2023 13:06:51 +0100 Subject: [PATCH 6/8] fix bug --- spinnman/transceiver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spinnman/transceiver.py b/spinnman/transceiver.py index 715344029..8dcc31099 100644 --- a/spinnman/transceiver.py +++ b/spinnman/transceiver.py @@ -1963,7 +1963,7 @@ def close(self): """ Close the transceiver and any threads that are running. """ - if self._bmp_connections: + if self._bmp_connection: if get_config_bool("Machine", "turn_off_machine"): self.power_off_machine() From 4581ce6e10a45b4a3ea4900d3bc7120ee3ec04a0 Mon Sep 17 00:00:00 2001 From: "Christian Y. Brenninkmeijer" Date: Mon, 31 Jul 2023 13:07:10 +0100 Subject: [PATCH 7/8] cabinet, frame never used --- spinnman/extended/extended_transceiver.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/spinnman/extended/extended_transceiver.py b/spinnman/extended/extended_transceiver.py index e591172a1..48b44aee6 100644 --- a/spinnman/extended/extended_transceiver.py +++ b/spinnman/extended/extended_transceiver.py @@ -427,7 +427,7 @@ def execute_application(self, executable_targets, app_id): # Send a signal telling the application to start self.send_signal(app_id, Signal.START) - def set_led(self, led, action, board, cabinet, frame): + def set_led(self, led, action, board): """ Set the LED state of a board in the machine. @@ -445,15 +445,13 @@ def set_led(self, led, action, board, cabinet, frame): also be an iterable of multiple boards (in the same frame). The command will actually be sent to the first board in the iterable. :type board: int or iterable(int) - :param int cabinet: the cabinet this is targeting - :param int frame: the frame this is targeting """ warn_once(logger, "The set_led method is deprecated and " "untested due to no known use.") process = SendSingleCommandProcess(self._bmp_connection_selector) process.execute(BMPSetLed(led, action, board)) - def read_adc_data(self, board, cabinet, frame): + def read_adc_data(self, board): """ Read the BMP ADC data. @@ -462,8 +460,6 @@ def read_adc_data(self, board, cabinet, frame): known use. Same functionality provided by ybug and bmpc. Retained in case needed for hardware debugging. - :param int cabinet: cabinet: the cabinet this is targeting - :param int frame: the frame this is targeting :param int board: which board to request the ADC data from :return: the FPGA's ADC data object :rtype: ADCInfo From 7175f8a5ade0f825455dc621ac15c9f4471bfe5c Mon Sep 17 00:00:00 2001 From: "Christian Y. Brenninkmeijer" Date: Mon, 31 Jul 2023 14:46:56 +0100 Subject: [PATCH 8/8] remove frame and cabinet properties --- .../udp_packet_connections/bmp_connection.py | 24 +------------------ spinnman/model/bmp_connection_data.py | 18 -------------- 2 files changed, 1 insertion(+), 41 deletions(-) diff --git a/spinnman/connections/udp_packet_connections/bmp_connection.py b/spinnman/connections/udp_packet_connections/bmp_connection.py index 458327a99..11c728fb1 100644 --- a/spinnman/connections/udp_packet_connections/bmp_connection.py +++ b/spinnman/connections/udp_packet_connections/bmp_connection.py @@ -29,9 +29,7 @@ class BMPConnection(UDPConnection, AbstractSCPConnection): A BMP connection which supports queries to the BMP of a SpiNNaker machine. """ __slots__ = [ - "_boards", - "_cabinet", - "_frame"] + "_boards"] def __init__(self, connection_data): """ @@ -42,28 +40,8 @@ def __init__(self, connection_data): else connection_data.port_num super().__init__( remote_host=connection_data.ip_address, remote_port=port) - self._cabinet = connection_data.cabinet - self._frame = connection_data.frame self._boards = connection_data.boards - @property - def cabinet(self): - """ - The cabinet ID of the BMP. - - :rtype: int - """ - return self._cabinet - - @property - def frame(self): - """ - The frame ID of the BMP. - - :rtype: int - """ - return self._frame - @property def boards(self): """ diff --git a/spinnman/model/bmp_connection_data.py b/spinnman/model/bmp_connection_data.py index 3206b5bdc..642e43df1 100644 --- a/spinnman/model/bmp_connection_data.py +++ b/spinnman/model/bmp_connection_data.py @@ -28,24 +28,6 @@ def __init__(self, ip_address, boards, port_num): self._boards = boards self._port_num = port_num - @property - def cabinet(self): - """ - The cabinet number. - - :rtype: int - """ - return 0 - - @property - def frame(self): - """ - The frame number. - - :rtype: int - """ - return 0 - @property def ip_address(self): """