aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2017-04-26 17:25:23 -0700
committerMartin Braun <martin.braun@ettus.com>2017-12-22 15:03:52 -0800
commitaf6d2409499da5ffb0da1cb4d3d50293774937e8 (patch)
tree6408dc6254fb33e6e855fd3086ae9e7a6e41655f
parent658bdb71d89d1d8cd4be88f7f1b28c44682f5850 (diff)
downloaduhd-af6d2409499da5ffb0da1cb4d3d50293774937e8.tar.gz
uhd-af6d2409499da5ffb0da1cb4d3d50293774937e8.tar.bz2
uhd-af6d2409499da5ffb0da1cb4d3d50293774937e8.zip
mpm: Improved udev identification of SPI device nodes
-rw-r--r--mpm/python/usrp_mpm/dboard_manager/__init__.py4
-rw-r--r--mpm/python/usrp_mpm/dboard_manager/base.py2
-rw-r--r--mpm/python/usrp_mpm/dboard_manager/magnesium.py39
-rw-r--r--mpm/python/usrp_mpm/periph_manager/base.py4
-rw-r--r--mpm/python/usrp_mpm/periph_manager/udev.py2
5 files changed, 22 insertions, 29 deletions
diff --git a/mpm/python/usrp_mpm/dboard_manager/__init__.py b/mpm/python/usrp_mpm/dboard_manager/__init__.py
index f21e5258c..e1ae5d3e0 100644
--- a/mpm/python/usrp_mpm/dboard_manager/__init__.py
+++ b/mpm/python/usrp_mpm/dboard_manager/__init__.py
@@ -18,12 +18,12 @@
dboards module __init__.py
"""
from .. import libpyusrp_periphs as lib
-from .magnesium import magnesium
+from .magnesium import Magnesium
from .eiscat import eiscat
from .test import test
from .unknown import unknown
HW_PIDS = {
eiscat.hw_pid: eiscat,
- magnesium.hw_pid: magnesium,
+ Magnesium.hw_pid: Magnesium,
}
diff --git a/mpm/python/usrp_mpm/dboard_manager/base.py b/mpm/python/usrp_mpm/dboard_manager/base.py
index 0e8d1b7e4..52d2f22a3 100644
--- a/mpm/python/usrp_mpm/dboard_manager/base.py
+++ b/mpm/python/usrp_mpm/dboard_manager/base.py
@@ -17,7 +17,7 @@
"""
dboard base implementation module
"""
-import struct
+
from ..mpmlog import get_logger
class DboardManagerBase(object):
diff --git a/mpm/python/usrp_mpm/dboard_manager/magnesium.py b/mpm/python/usrp_mpm/dboard_manager/magnesium.py
index cee2f0915..9d645a354 100644
--- a/mpm/python/usrp_mpm/dboard_manager/magnesium.py
+++ b/mpm/python/usrp_mpm/dboard_manager/magnesium.py
@@ -20,55 +20,48 @@ magnesium dboard implementation module
import struct
import time
+from six import iteritems
from . import lib # Pulls in everything from C++-land
from .base import DboardManagerBase
from .. import nijesdcore
from ..uio import UIO
+from ..mpmlog import get_logger
-class magnesium(DboardManagerBase):
+class Magnesium(DboardManagerBase):
"""
Holds all dboard specific information and methods of the magnesium dboard
"""
hw_pid = 2
special_eeprom_addrs = {"special0": "something"}
- spi_chipselect = {"0": "lmk", "1": "mykonos",}
- spidevs = {}
- lmk = ""
- mykonos = ""
- random = ""
+ # Maps the chipselects to the corresponding devices:
+ spi_chipselect = {"lmk": 0, "mykonos": 1}
def __init__(self, spi_devices, eeprom_data, *args, **kwargs):
- super(magnesium, self).__init__(*args, **kwargs)
+ super(Magnesium, self).__init__(*args, **kwargs)
+ self.log = get_logger("Magnesium")
# eeprom_data is a tuple (head_dict, raw_data)
if len(spi_devices) != len(self.spi_chipselect):
self.log.error("Expected {0} spi devices, found {1} spi devices".format(
len(self.spi_chipselect), len(spi_devices),
))
- exit(1)
- for spi in spi_devices:
- device = self.spi_chipselect.get(spi[-1], None)
- # if self.chipselect is None:
- # self.log.error("Unexpected chipselect {0}".format(spi[-1]))
- # exit(1)
- setattr(self, device, spi)
- self.log.debug("Setting spi device for {device}: {spidev}".format(
- device=device, spidev=spi
- ))
+ raise RuntimeError("Not enough SPI devices found.")
+ self._spi_nodes = {}
+ for k, v in iteritems(self.spi_chipselect):
+ self._spi_nodes[k] = spi_devices[v]
+ self.log.debug("spidev device node map: {}".format(self._spi_nodes))
def init_device(self):
"""
Execute necessary init dance to bring up dboard
"""
- self.log.debug("initialize hardware")
+ self.log.debug("Loading C++ drivers...")
self._device = lib.dboards.magnesium_manager(
- # self.lmk.encode('ascii'), self.mykonos.encode('ascii')
- '/dev/spidev0.0',
- '/dev/spidev0.1',
+ self._spi_nodes['lmk'],
+ self._spi_nodes['mykonos'],
)
self.lmk = self._device.get_clock_ctrl()
self.mykonos = self._device.get_radio_ctrl()
-
- # uio_path, uio_size = get_uio_node("misc-enet-regs0")
+ self.log.debug("Loaded C++ drivers.")
self.log.debug("Getting Mg A uio...")
self.radio_regs = UIO(label="jesd204b-regs", read_only=False)
self.log.info("Radio-register UIO object successfully generated!")
diff --git a/mpm/python/usrp_mpm/periph_manager/base.py b/mpm/python/usrp_mpm/periph_manager/base.py
index 459f8833f..4815bd88d 100644
--- a/mpm/python/usrp_mpm/periph_manager/base.py
+++ b/mpm/python/usrp_mpm/periph_manager/base.py
@@ -77,8 +77,8 @@ class PeriphManagerBase(object):
# I know spidev masters on the dboard slots
hw_pid = 2
if hw_pid in dboard_manager.HW_PIDS:
- spi_devices = get_spidev_nodes("e0006000.spi")
- self.log.debug("found spidev nodes: {0}".format(spi_devices))
+ spi_devices = sorted(get_spidev_nodes("e0006000.spi"))
+ self.log.debug("Found spidev nodes: {0}".format(spi_devices))
dboard = dboard_manager.HW_PIDS.get(hw_pid, dboard_manager.unknown)
self.dboards.update({dboard_slot: dboard(spi_devices, eeprom_data)})
diff --git a/mpm/python/usrp_mpm/periph_manager/udev.py b/mpm/python/usrp_mpm/periph_manager/udev.py
index 6801d2163..9d64b1b64 100644
--- a/mpm/python/usrp_mpm/periph_manager/udev.py
+++ b/mpm/python/usrp_mpm/periph_manager/udev.py
@@ -38,7 +38,7 @@ def get_spidev_nodes(spi_master):
"""
context = pyudev.Context()
parent = pyudev.Device.from_name(context, "platform", spi_master)
- paths = [device.sys_path
+ paths = [device.device_node.encode('ascii')
for device in context.list_devices(parent=parent, subsystem="spidev")]
return paths