Source code for ska_low_sps_tpm_api.base.spi

import xml.etree.ElementTree as eTree

from ska_low_sps_tpm_api import LibraryError, SPIDeviceInfo


[docs] class SPI: """A class which handles information on SPI devices"""
[docs] def __init__(self, xml_string): """ class constructor. :param xml_string: XML string containing SPI device information """ # SPI device list self.spi_map = {} # SPI selection self.spi_address = None self.spi_address_mask = None self.write_data = None self.write_data_mask = None self.read_data = None self.read_data_mask = None self.chip_select = None self.chip_select_mask = None self.sclk = None self.sclk_mask = None self.cmd_address = None self.cmd_start_mask = None self.cmd_rnw_mask = None # Process xml string self._process_xml_string(xml_string)
[docs] def clear(self): """Clear SPI map""" self.spi_map = {}
def _process_xml_string(self, xml_string): """ Process xml string containing SPI device information. :param xml_string: XML string containing SPI device information """ # Parse string and get root tree = eTree.fromstring(xml_string) self.clear() # Iterate through all child node to get SPI devices for device_node in tree: # Get device information try: device_id = device_node.attrib["id"] device = SPIDeviceInfo( name=device_id, spi_en=int(device_node.attrib["spi_en"]), spi_sclk=int(device_node.attrib["spi_sclk"]), ) self.spi_map[device_id] = device except: raise LibraryError("Missing information in SPI file")
[docs] def has_device(self, device): """ Check if spi map contains specified device. :param device: Device to check """ return device in list(self.spi_map.keys())
def __getitem__(self, key): """Override __getitem__, return SPI device information for specified register""" # If no spi map exists, return None if len(self.spi_map) == 0: raise LibraryError("Cannot get device from uninitialised SPI map") if key not in list(self.spi_map.keys()): raise LibraryError("Specified SPI device {}, does not exist in SPI map") # Register found, return information return self.spi_map[key] def __len__(self): return len(self.spi_map)