Source code for spinn_front_end_common.interface.interface_functions.read_routing_tables_from_machine
# Copyright (c) 2017 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 spinn_utilities.progress_bar import ProgressBar
from pacman.model.routing_tables import MulticastRoutingTables
from pacman.model.routing_tables.compressed_multicast_routing_table import (
CompressedMulticastRoutingTable)
from spinn_front_end_common.data import FecDataView
[docs]def read_routing_tables_from_machine():
"""
Reads compressed routing tables from a SpiNNaker machine.
:rtype: ~pacman.model.routing_tables.MulticastRoutingTables
"""
routing_tables = FecDataView.get_uncompressed()
progress = ProgressBar(
routing_tables, "Reading Routing Tables from Machine")
machine_routing_tables = MulticastRoutingTables()
app_id = FecDataView.get_app_id()
transceiver = FecDataView.get_transceiver()
for routing_table in progress.over(routing_tables):
# get multicast entries from machine
machine_routing_table = _read_routing_table(
transceiver, routing_table, app_id)
machine_routing_tables.add_routing_table(machine_routing_table)
return machine_routing_tables
def _read_routing_table(transceiver, table, app_id):
"""
:param ~spinnman.transceiver.Transceiver transceiver:
:param ~.UnCompressedMulticastRoutingTable table:
:param int app_id:
"""
machine_routing_table = CompressedMulticastRoutingTable(table.x, table.y)
for routing_entry in transceiver.get_multicast_routes(
table.x, table.y, app_id):
machine_routing_table.add_multicast_routing_entry(routing_entry)
return machine_routing_table