diff options
author | Samuel O'Brien <sam.obrien@ni.com> | 2020-07-21 12:43:55 -0500 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2020-10-28 15:25:48 -0500 |
commit | bd278a4b936f3e30f51d7cb9ff489f3ff7215379 (patch) | |
tree | 0001f604bf57831c8b760f7c135f134d91e950c2 /mpm/python/usrp_mpm/simulator | |
parent | d42ddc804118b2e9120c84efd477f9f4b3f8472e (diff) | |
download | uhd-bd278a4b936f3e30f51d7cb9ff489f3ff7215379.tar.gz uhd-bd278a4b936f3e30f51d7cb9ff489f3ff7215379.tar.bz2 uhd-bd278a4b936f3e30f51d7cb9ff489f3ff7215379.zip |
sim: Support Configuration Files
This commit adds support for configuration files to the simulator. As of
now, these files only change the source and sink of data samples, but
they are easily extensible to add more configuration to the simulator.
Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
Diffstat (limited to 'mpm/python/usrp_mpm/simulator')
-rw-r--r-- | mpm/python/usrp_mpm/simulator/CMakeLists.txt | 1 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/simulator/chdr_endpoint.py | 12 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/simulator/config.py | 52 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/simulator/sample_source.py | 1 |
4 files changed, 58 insertions, 8 deletions
diff --git a/mpm/python/usrp_mpm/simulator/CMakeLists.txt b/mpm/python/usrp_mpm/simulator/CMakeLists.txt index e95709249..21f281e52 100644 --- a/mpm/python/usrp_mpm/simulator/CMakeLists.txt +++ b/mpm/python/usrp_mpm/simulator/CMakeLists.txt @@ -21,6 +21,7 @@ set(USRP_MPM_SIMULATOR_FILES ${CMAKE_CURRENT_SOURCE_DIR}/chdr_stream.py ${CMAKE_CURRENT_SOURCE_DIR}/rfnoc_common.py ${CMAKE_CURRENT_SOURCE_DIR}/stream_endpoint_node.py + ${CMAKE_CURRENT_SOURCE_DIR}/config.py ) list(APPEND USRP_MPM_FILES ${USRP_MPM_SIMULATOR_FILES}) set(USRP_MPM_FILES ${USRP_MPM_FILES} PARENT_SCOPE) diff --git a/mpm/python/usrp_mpm/simulator/chdr_endpoint.py b/mpm/python/usrp_mpm/simulator/chdr_endpoint.py index 303f3268d..17d707ae7 100644 --- a/mpm/python/usrp_mpm/simulator/chdr_endpoint.py +++ b/mpm/python/usrp_mpm/simulator/chdr_endpoint.py @@ -15,7 +15,6 @@ import select from uhd.chdr import ChdrPacket, ChdrWidth from .rfnoc_graph import XbarNode, XportNode, StreamEndpointNode, RFNoCGraph, NodeType from .chdr_stream import SendWrapper, ChdrOutputStream, ChdrInputStream, SelectableQueue -from .sample_source import NullSamples CHDR_W = ChdrWidth.W64 @@ -25,14 +24,13 @@ class ChdrEndpoint: traffic to the appropriate destination, and responding to said traffic. - The extra_args parameter is passed in from the periph_manager, and - coresponds to the --default_args flag of usrp_hwd.py on the - command line + The config parameter is a Config object (see simulator/config.py) """ - def __init__(self, log, extra_args): + def __init__(self, log, config): self.log = log.getChild("ChdrEndpoint") - self.source_gen = NullSamples - self.sink_gen = NullSamples + self.config = config + self.source_gen = config.source_gen + self.sink_gen = config.sink_gen self.xport_map = {} self.send_queue = SelectableQueue() diff --git a/mpm/python/usrp_mpm/simulator/config.py b/mpm/python/usrp_mpm/simulator/config.py new file mode 100644 index 000000000..a5f07950d --- /dev/null +++ b/mpm/python/usrp_mpm/simulator/config.py @@ -0,0 +1,52 @@ +# +# Copyright 2020 Ettus Research, a National Instruments Brand +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +""" +This module contains the logic to read configuration files from the +filesystem and parse configuration data from them. This data includes +anything from the serial number of the radio to the type of hardware +it identifies itself as. +""" + +import configparser +from .sample_source import sinks, sources, NullSamples + +class Config: + """This class represents a configuration file for the usrp simulator. + This file should conform to the .ini format defined by the + configparser module + + It should have a [sample.source] section and a [sample.sink] section. + Each section should have a 'class' key, which gives the name of the + Source/Sink class to instanitate (see the decorators in + sample_source.py). The other key value pairs in the section are + passed to the source/sink constructor as strings through **kwargs + """ + def __init__(self, source_gen, sink_gen): + self.source_gen = source_gen + self.sink_gen = sink_gen + + @classmethod + def from_path(cls, path): + """Parse a config .ini file from a path""" + parser = configparser.ConfigParser() + parser.read(path) + source_gen = Config._read_sample_section(parser['sample.source'], sources) + sink_gen = Config._read_sample_section(parser['sample.sink'], sinks) + return cls(source_gen, sink_gen) + + @staticmethod + def _read_sample_section(section, lookup): + args = dict(section) + class_name = args.pop("class") + constructor = lookup[class_name] + def section_gen(): + return constructor(**args) + return section_gen + + @classmethod + def default(cls): + """Return a default config""" + return cls(NullSamples, NullSamples) diff --git a/mpm/python/usrp_mpm/simulator/sample_source.py b/mpm/python/usrp_mpm/simulator/sample_source.py index 184649994..36278efd8 100644 --- a/mpm/python/usrp_mpm/simulator/sample_source.py +++ b/mpm/python/usrp_mpm/simulator/sample_source.py @@ -8,7 +8,6 @@ This module contains the interface for providing data to a simulator stream and receiving data from a simulator stream. """ -#TODO: This is currently unused, as the cli is largely incomplete sources = {} sinks = {} |