diff options
author | Andrej Rode <andrej.rode@ettus.com> | 2017-03-21 19:46:50 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2017-12-22 15:03:44 -0800 |
commit | ef6326a174e6880be5e2eaeac26a2c5de0768807 (patch) | |
tree | c949545e02390745c3a373e657bcf2404e62e191 /mpm/python/usrp_mpm/periph_manager | |
parent | b29246a9e2d7ed1e03e44cfc6804615fcfa5a5d8 (diff) | |
download | uhd-ef6326a174e6880be5e2eaeac26a2c5de0768807.tar.gz uhd-ef6326a174e6880be5e2eaeac26a2c5de0768807.tar.bz2 uhd-ef6326a174e6880be5e2eaeac26a2c5de0768807.zip |
mpm: python refactoring
Diffstat (limited to 'mpm/python/usrp_mpm/periph_manager')
-rw-r--r-- | mpm/python/usrp_mpm/periph_manager/__init__.py | 29 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/periph_manager/base.py | 75 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/periph_manager/n310.py | 46 |
3 files changed, 150 insertions, 0 deletions
diff --git a/mpm/python/usrp_mpm/periph_manager/__init__.py b/mpm/python/usrp_mpm/periph_manager/__init__.py new file mode 100644 index 000000000..96eecf62e --- /dev/null +++ b/mpm/python/usrp_mpm/periph_manager/__init__.py @@ -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 <http://www.gnu.org/licenses/>. +# +""" +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/base.py b/mpm/python/usrp_mpm/periph_manager/base.py new file mode 100644 index 000000000..f19265a05 --- /dev/null +++ b/mpm/python/usrp_mpm/periph_manager/base.py @@ -0,0 +1,75 @@ +# +# 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 <http://www.gnu.org/licenses/>. +# +""" +Mboard implementation base class +""" + +import re +import os +from . import lib +from . import types +from . import dboard_manager + + +class periph_manager(object): + # stores discovered device information in dicts + dboards = {} + mboard_if_addrs = {} + mboard_overlays = {} + # this information has to be provided by + # the specific periph_manager implementation + mboard_eeprom_addr = "" + dboard_eeprom_addrs = {} + dboard_spimaster_addrs = {} + + def __init__(self): + # I know my EEPROM address, lets use it + helper = lib.udev_helper.udev_helper() + (self._eeprom_head, self._eeprom_rawdata) = types.eeprom().read_eeprom(helper.get_eeprom(self.mboard_eeprom_addr)) + self._dboard_eeproms = {} + for dboard_slot, eeprom_addr in self.dboard_eeprom_addrs.iteritems(): + spi_devices = [] + # I know EEPROM adresses for my dboard slots + eeprom_data = types.eeprom().read(helper.get_eeprom(eeprom_addr)) + # I know spidev masters on the dboard slots + hw_pid = eeprom_data.get("hw_pid", 0) + if hw_pid in dboards.hw_pids: + spi_devices = helper.get_spidev_nodes(self.dboard_spimaster_addrs.get(dboard_slot)) + dboard = dboards.hw_pids.get(hw_pid, dboards.unknown) + self.dboards.update({dboard_slot: dboard(spi_devices, eeprom_data)}) + + def get_overlays(self): + self.mboard_overlays = [] + for f in os.listdir("/lib/firmware/"): + if f.endswith(".dtbo"): + self.mboard_overlays.append(f.strip(".dtbo")) + + def check_overlay(self): + for f in os.listdir("/sys/kernel/device-tree/overlays/"): + pass #do stuff + + def get_serial(self): + return self._serial + + def load_fpga_image(self, target=None): + pass + + def init_device(self, *args, **kwargs): + # Load FPGA + # Init dboards + pass + diff --git a/mpm/python/usrp_mpm/periph_manager/n310.py b/mpm/python/usrp_mpm/periph_manager/n310.py new file mode 100644 index 000000000..e270387f6 --- /dev/null +++ b/mpm/python/usrp_mpm/periph_manager/n310.py @@ -0,0 +1,46 @@ +# +# 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 <http://www.gnu.org/licenses/>. +# +""" +N310 implementation module +""" +from base import periph_manager +import struct + + +class n310(periph_manager): + hw_pids = "1" + mboard_eeprom_addr = "e0007000.spi:ec@0:i2c-tunnel" + dboard_eeprom_addrs = {"A": "something", "B": "else"} + dboard_spimaster_addrs = {"A": "something", "B": "else"} + + def __init__(self, eeprom_device, *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) + print(data) + # if header.get("dataversion", 0) == 1: + + def read_eeprom_v1(self, data): + # data_version contains + # 6 bytes mac_addr0 + # 2 bytes pad + # 6 bytes mac_addr1 + # 2 bytes pad + # 6 bytes mac_addr2 + # 2 bytes pad + # 8 bytes serial + return struct.unpack_from("6s 2x 6s 2x 6s 2x 8s", data) |