aboutsummaryrefslogtreecommitdiffstats
path: root/mpm
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2018-01-15 15:42:15 -0800
committerMartin Braun <martin.braun@ettus.com>2018-02-08 22:18:14 +0100
commit832cbe095ae5e851aadddce66e1510d33a4430f3 (patch)
tree72ce19679463547f074dea956249ad8d78cdc650 /mpm
parent44533fb035d4e9629d62f79a95ea9eb0487dcfef (diff)
downloaduhd-832cbe095ae5e851aadddce66e1510d33a4430f3.tar.gz
uhd-832cbe095ae5e851aadddce66e1510d33a4430f3.tar.bz2
uhd-832cbe095ae5e851aadddce66e1510d33a4430f3.zip
mpm: Use prefs API for periph manager
- Allow to set default args via config file - Read them from prefs API - override-db-pids uses the same APIs now ([overrides] section in config file, prefs API, and same dictionary as --default-args when used on the command line
Diffstat (limited to 'mpm')
-rwxr-xr-xmpm/python/usrp_hwd.py18
-rw-r--r--mpm/python/usrp_mpm/periph_manager/base.py39
-rw-r--r--mpm/python/usrp_mpm/periph_manager/n310.py6
-rw-r--r--mpm/python/usrp_mpm/prefs.py3
-rw-r--r--mpm/python/usrp_mpm/rpc_server.py2
5 files changed, 52 insertions, 16 deletions
diff --git a/mpm/python/usrp_hwd.py b/mpm/python/usrp_hwd.py
index b4d556cfd..2a597c789 100755
--- a/mpm/python/usrp_hwd.py
+++ b/mpm/python/usrp_hwd.py
@@ -73,10 +73,6 @@ def parse_args():
Return a fully parse args object
"""
args = setup_arg_parser().parse_args()
- if args.override_db_pids is not None:
- args.override_db_pids = [
- int(x, 0) for x in args.override_db_pids.split(",")
- ]
args.default_args = args.default_args or ''
try:
args.default_args = {
@@ -110,7 +106,7 @@ def kill_time(sig, frame):
log.info("System exiting")
sys.exit(0)
-def init_only(log, args):
+def init_only(log, default_args):
"""
Run the full initialization immediately and return
"""
@@ -124,11 +120,11 @@ def init_only(log, args):
from usrp_mpm.periph_manager import periph_manager
log.info("Spawning periph manager...")
ctor_time_start = time.time()
- mgr = periph_manager(args)
+ mgr = periph_manager(default_args)
ctor_duration = time.time() - ctor_time_start
log.info("Ctor Duration: {:.02f} s".format(ctor_duration))
init_time_start = time.time()
- init_result = mgr.init(args.default_args)
+ init_result = mgr.init(default_args)
init_duration = time.time() - init_time_start
if init_result:
log.info("Initialization successful! Duration: {:.02f} s"
@@ -147,7 +143,8 @@ def spawn_processes(log, args):
shared = SharedState()
log.info("Spawning RPC process...")
_PROCESSES.append(
- mpm.spawn_rpc_process(mpm.mpmtypes.MPM_RPC_PORT, shared, args))
+ mpm.spawn_rpc_process(
+ mpm.mpmtypes.MPM_RPC_PORT, shared, args.default_args))
log.debug("RPC process has PID: %d", _PROCESSES[-1].pid)
if watchdog.has_watchdog():
watchdog.transfer_control(_PROCESSES[-1].pid)
@@ -173,8 +170,11 @@ def main():
log = mpm.get_main_logger(
log_default_delta=args.verbose-args.quiet
).getChild('main')
+ if args.override_db_pids is not None:
+ log.warning('Overriding daughterboard PIDs!')
+ args.default_args['override_db_pids'] = args.override_db_pids
if args.init_only:
- return init_only(log, args)
+ return init_only(log, args.default_args)
return spawn_processes(log, args)
if __name__ == '__main__':
diff --git a/mpm/python/usrp_mpm/periph_manager/base.py b/mpm/python/usrp_mpm/periph_manager/base.py
index 69a20c369..384be99f3 100644
--- a/mpm/python/usrp_mpm/periph_manager/base.py
+++ b/mpm/python/usrp_mpm/periph_manager/base.py
@@ -22,6 +22,7 @@ from usrp_mpm.sys_utils.udev import get_spidev_nodes
from usrp_mpm.sys_utils import dtoverlay
from usrp_mpm import eeprom
from usrp_mpm.rpc_server import no_claim, no_rpc
+from usrp_mpm import prefs
def get_dboard_class_from_pid(pid):
"""
@@ -132,17 +133,28 @@ class PeriphManagerBase(object):
# Device initialization (at MPM startup)
###########################################################################
def __init__(self, args):
- # First, make some checks to see if the child class is correctly set up:
+ # Note: args is a dictionary.
assert len(self.pids) > 0
assert self.mboard_eeprom_magic is not None
# Set up logging
self.log = get_logger('PeriphManager')
self.claimed = False
+ # The _init_args are a check for the args that passed into init(). This
+ # should always be a dictionary (or dictionary-like object).
self._init_args = {}
try:
self._init_mboard_with_eeprom()
- self._init_mboard_overlays(self._eeprom_head, args)
- self._init_dboards(args.override_db_pids, args)
+ self._default_args = self._update_default_args(args)
+ self.log.debug("Using default args: {}".format(self._default_args))
+ self._init_mboard_overlays(self._eeprom_head, self._default_args)
+ override_db_pids_str = self._default_args.get('override_db_pids')
+ if override_db_pids_str:
+ override_db_pids = [
+ int(x, 0) for x in override_db_pids_str.split(",")
+ ]
+ else:
+ override_db_pids = []
+ self._init_dboards(override_db_pids, self._default_args)
self._device_initialized = True
self._initialization_status = "No errors."
except Exception as ex:
@@ -212,6 +224,24 @@ class PeriphManagerBase(object):
self.log.info("Device serial number: {}"
.format(self.mboard_info.get('serial', 'n/a')))
+ def _update_default_args(self, default_args):
+ """
+ Pipe the default_args (that get passed into us from the RPC server)
+ through the prefs API. This way, we respect both the config file and
+ command line arguments.
+ """
+ prefs_cache = prefs.get_prefs()
+ periph_section_name = None
+ if prefs_cache.has_section(self.mboard_info.get('product')):
+ periph_section_name = self.mboard_info.get('product')
+ elif prefs_cache.has_section(self.mboard_info.get('type')):
+ periph_section_name = self.mboard_info.get('type')
+ if periph_section_name is not None:
+ prefs_cache.read_dict({periph_section_name: default_args})
+ return dict(prefs_cache[periph_section_name])
+ else:
+ return default_args
+
def _init_mboard_overlays(self, eeprom_md, device_args):
"""
Load all required overlays for this motherboard
@@ -235,6 +265,9 @@ class PeriphManagerBase(object):
"""
# Go, go, go!
override_dboard_pids = override_dboard_pids or []
+ if override_dboard_pids:
+ self.log.warning("Overriding daughterboard PIDs! {}"
+ .format(override_dboard_pids))
dboard_eeprom_addrs = self.dboard_eeprom_addr \
if isinstance(self.dboard_eeprom_addr, list) \
else [self.dboard_eeprom_addr]
diff --git a/mpm/python/usrp_mpm/periph_manager/n310.py b/mpm/python/usrp_mpm/periph_manager/n310.py
index be18228a1..0e4f8e0ce 100644
--- a/mpm/python/usrp_mpm/periph_manager/n310.py
+++ b/mpm/python/usrp_mpm/periph_manager/n310.py
@@ -537,12 +537,12 @@ class n310(PeriphManagerBase):
self.enable_1g_ref_clock()
self.enable_gps(
enable=str2bool(
- args.default_args.get('enable_gps', N3XX_DEFAULT_ENABLE_GPS)
+ args.get('enable_gps', N3XX_DEFAULT_ENABLE_GPS)
)
)
self.enable_fp_gpio(
enable=str2bool(
- args.default_args.get(
+ args.get(
'enable_fp_gpio',
N3XX_DEFAULT_ENABLE_FPGPIO
)
@@ -557,7 +557,7 @@ class n310(PeriphManagerBase):
# Init clocking
self.enable_ref_clock(enable=True)
self._ext_clock_freq = None
- self._init_ref_clock_and_time(args.default_args)
+ self._init_ref_clock_and_time(args)
self._init_meas_clock()
# Init CHDR transports
self._xport_mgrs = {
diff --git a/mpm/python/usrp_mpm/prefs.py b/mpm/python/usrp_mpm/prefs.py
index d244a0b42..8ed6f13ff 100644
--- a/mpm/python/usrp_mpm/prefs.py
+++ b/mpm/python/usrp_mpm/prefs.py
@@ -37,6 +37,9 @@ class _MPMPrefs(configparser.ConfigParser):
'log_level': MPM_DEFAULT_LOG_LEVEL,
'log_buf_size': MPM_DEFAULT_LOG_BUF_SIZE,
},
+ 'overrides': {
+ 'override_db_pids': '',
+ },
}
def __init__(self):
diff --git a/mpm/python/usrp_mpm/rpc_server.py b/mpm/python/usrp_mpm/rpc_server.py
index 062396082..abb3b4327 100644
--- a/mpm/python/usrp_mpm/rpc_server.py
+++ b/mpm/python/usrp_mpm/rpc_server.py
@@ -63,7 +63,7 @@ class MPMServer(RPCServer):
# Setting this to True will disable an unclaim on timeout. Use with
# care, and make sure to set it to False again when finished.
self._disable_timeouts = False
- self._timeout_interval = float(default_args.default_args.get(
+ self._timeout_interval = float(default_args.get(
"rpc_timeout_interval",
TIMEOUT_INTERVAL
))