From 8ac9014d5c30836665378d2d088b5c602162f8ac Mon Sep 17 00:00:00 2001 From: Andrej Rode Date: Mon, 27 Mar 2017 17:07:44 -0700 Subject: mpm: CMake cleanup, Python code enhancements - Send user defined data in ping - Improve rpc_shell, add mpm_debug.py, fix tracebacks in multiprocessing --- mpm/python/usrp_mpm/periph_manager/CMakeLists.txt | 28 ++++++++++ mpm/python/usrp_mpm/periph_manager/__init__.py | 29 ----------- mpm/python/usrp_mpm/periph_manager/__init__.py.in | 29 +++++++++++ mpm/python/usrp_mpm/periph_manager/n310.py | 2 +- mpm/python/usrp_mpm/periph_manager/test.py | 63 +++++++++++++++++++++++ 5 files changed, 121 insertions(+), 30 deletions(-) create mode 100644 mpm/python/usrp_mpm/periph_manager/CMakeLists.txt delete mode 100644 mpm/python/usrp_mpm/periph_manager/__init__.py create mode 100644 mpm/python/usrp_mpm/periph_manager/__init__.py.in create mode 100644 mpm/python/usrp_mpm/periph_manager/test.py (limited to 'mpm/python/usrp_mpm/periph_manager') diff --git a/mpm/python/usrp_mpm/periph_manager/CMakeLists.txt b/mpm/python/usrp_mpm/periph_manager/CMakeLists.txt new file mode 100644 index 000000000..879ac20c1 --- /dev/null +++ b/mpm/python/usrp_mpm/periph_manager/CMakeLists.txt @@ -0,0 +1,28 @@ +# +# Copyright 2017 Ettus Research (National Instruments) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +######################################################################## +# This file included, use CMake directory variables +######################################################################## +SET(USRP_MPM_FILES ${USRP_MPM_FILES}) +SET(USRP_MPM_PERIPHMGR_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.in + ${CMAKE_CURRENT_SOURCE_DIR}/base.py + ${CMAKE_CURRENT_SOURCE_DIR}/n310.py + ) +LIST(APPEND USRP_MPM_FILES ${USRP_MPM_TOP_FILES}) +SET(USRP_MPM_FILES ${USRP_MPM_FILES} PARENT_SCOPE) diff --git a/mpm/python/usrp_mpm/periph_manager/__init__.py b/mpm/python/usrp_mpm/periph_manager/__init__.py deleted file mode 100644 index 96eecf62e..000000000 --- a/mpm/python/usrp_mpm/periph_manager/__init__.py +++ /dev/null @@ -1,29 +0,0 @@ -# -# Copyright 2017 Ettus Research (National Instruments) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -""" -periph_manager __init__.py -""" - -# This is where the import magic happens -from .. import libpyusrp_periphs as lib -from .. import dboard_manager -from .. import types - -try: - from n310 import n310 as periph_manager -except ImportError: - raise("Could not import n310") diff --git a/mpm/python/usrp_mpm/periph_manager/__init__.py.in b/mpm/python/usrp_mpm/periph_manager/__init__.py.in new file mode 100644 index 000000000..0956b849e --- /dev/null +++ b/mpm/python/usrp_mpm/periph_manager/__init__.py.in @@ -0,0 +1,29 @@ +# +# Copyright 2017 Ettus Research (National Instruments) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +""" +periph_manager __init__.py +""" + +# This is where the import magic happens +from .. import libpyusrp_periphs as lib +from .. import dboard_manager +from .. import types + +try: + from ${MPM_DEVICE} import ${MPM_DEVICE} as periph_manager +except ImportError: + raise Exception("Could not import ${MPM_DEVICE}") diff --git a/mpm/python/usrp_mpm/periph_manager/n310.py b/mpm/python/usrp_mpm/periph_manager/n310.py index e270387f6..d1c31540b 100644 --- a/mpm/python/usrp_mpm/periph_manager/n310.py +++ b/mpm/python/usrp_mpm/periph_manager/n310.py @@ -27,7 +27,7 @@ class n310(periph_manager): dboard_eeprom_addrs = {"A": "something", "B": "else"} dboard_spimaster_addrs = {"A": "something", "B": "else"} - def __init__(self, eeprom_device, *args, **kwargs): + def __init__(self, *args, **kwargs): # First initialize parent class - will populate self._eeprom_head and self._eeprom_rawdata super(n310, self).__init__(*args, **kwargs) data = self.read_eeprom_v1(self._eeprom_rawdata) diff --git a/mpm/python/usrp_mpm/periph_manager/test.py b/mpm/python/usrp_mpm/periph_manager/test.py new file mode 100644 index 000000000..c9cbc1f3f --- /dev/null +++ b/mpm/python/usrp_mpm/periph_manager/test.py @@ -0,0 +1,63 @@ +# +# Copyright 2017 Ettus Research (National Instruments) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +""" +test periph_manager implementation module +""" +from base import periph_manager +from . import dboard_manager +import random +import string +import struct + + +class test(periph_manager): + hw_pids = "42" + mboard_eeprom_addr = None + dboard_eeprom_addrs = {"A": "something", "B": "else"} + dboard_spimaster_addrs = {"A": "something", "B": "else"} + + def __init__(self, *args, **kwargs): + # First initialize parent class - will populate self._eeprom_head and self._eeprom_rawdata + # super(n310, self).__init__(*args, **kwargs) + # if header.get("dataversion", 0) == 1: + self._eeprom = self.read_eeprom_fake() + self._serial = "AABBCCDDEEFF" + + # I'm the test periph_manager, I know I have test dboards attached + self.dboards = { + "A": dboard_manager.test(self.read_db_eeprom_random()), + "B": dboard_manager.test(self.read_db_eeprom_random()) + } + + def read_eeprom_fake(self): + fake_eeprom = { + "magic": 42, + "crc": 4242, + "data_version": 42, + "hw_pid": 42, + "hw_rev": 5 + } + + return fake_eeprom + + def read_db_eeprom_random(self): + fake_eeprom = { + "serial": ''.join( + random.choice("ABCDEF" + string.digits) + for _ in range(16)) + } + return fake_eeprom -- cgit v1.2.3