diff --git a/src/edgepi/adc/edgepi_adc.py b/src/edgepi/adc/edgepi_adc.py index dfd95667..963d2afe 100644 --- a/src/edgepi/adc/edgepi_adc.py +++ b/src/edgepi/adc/edgepi_adc.py @@ -223,7 +223,7 @@ def __init__( # Load eeprom data and generate dictionary of calibration dataclass eeprom = EdgePiEEPROM() eeprom_data = eeprom.get_edgepi_reserved_data() - self.adc_calib_params = eeprom_data.adc_calib_parms + self.adc_calib_params = eeprom_data.adc_calib_params self.adc_ops = ADCCommands() self.gpio = EdgePiGPIO() diff --git a/src/edgepi/calibration/edgepi_eeprom.py b/src/edgepi/calibration/edgepi_eeprom.py index ff7574aa..b5a427a8 100644 --- a/src/edgepi/calibration/edgepi_eeprom.py +++ b/src/edgepi/calibration/edgepi_eeprom.py @@ -1,13 +1,17 @@ '''Helper class to access on board eeprom''' +# pylint: disable=no-name-in-module +# https://github.com/protocolbuffers/protobuf/issues/10372 + import logging import math from edgepi.calibration.eeprom_constants import ( EEPROMInfo, EdgePiMemoryInfo, - MessageFieldNumber, - EdgePiEEPROMData) + MessageFieldNumber + ) +from edgepi.calibration.protobuf_mapping import EdgePiEEPROMData from edgepi.calibration.eeprom_mapping_pb2 import EepromLayout from edgepi.peripherals.i2c import I2CDevice @@ -20,6 +24,7 @@ class EdgePiEEPROM(I2CDevice): def __init__(self): self.log = logging.getLogger(__name__) + self.log.info("Initializing EEPROM Access") self.eeprom_layout = EepromLayout() super().__init__(self.__dev_path) @@ -98,16 +103,7 @@ def get_edgepi_reserved_data(self): """ # pylint: disable=no-member self.eeprom_layout.ParseFromString(self.__read_edgepi_reserved_memory()) - eeprom_data = EdgePiEEPROMData() - eeprom_data.dac_calib_parms=eeprom_data.message_to_dict(self.eeprom_layout.dac) - eeprom_data.adc_calib_parms=eeprom_data.message_to_dict(self.eeprom_layout.adc) - eeprom_data.rtd_calib_parms=eeprom_data.message_to_dict(self.eeprom_layout.rtd) - eeprom_data.tc_calib_parms=eeprom_data.message_to_dict(self.eeprom_layout.tc) - eeprom_data.config_key=eeprom_data.keys_to_str(self.eeprom_layout.config_key) - eeprom_data.data_key=eeprom_data.keys_to_str(self.eeprom_layout.data_key) - eeprom_data.serial= self.eeprom_layout.serial_number - eeprom_data.model= self.eeprom_layout.model - eeprom_data.client_id= self.eeprom_layout.client_id + eeprom_data = EdgePiEEPROMData(self.eeprom_layout) return eeprom_data def sequential_read(self, mem_addr: int = None, length: int = None): @@ -124,9 +120,9 @@ def sequential_read(self, mem_addr: int = None, length: int = None): page_addr, byte_addr = self.__byte_address_generation(mem_addr) mem_addr_list = self.__pack_mem_address(page_addr, byte_addr) msg = self.set_read_msg(mem_addr_list, [0x00]*length) - self.log.debug(f'Reading Address {mem_addr}, {length} bytes, {msg[1].data}') + self.log.debug(f'Reading Address {mem_addr}, {length} bytes') read_result = self.transfer(EEPROMInfo.DEV_ADDR.value, msg) - self.log.debug(f'Read data: {msg[1].data}') + self.log.debug(f'Read data: {len(msg[1].data)}') return read_result diff --git a/src/edgepi/calibration/eeprom_constants.py b/src/edgepi/calibration/eeprom_constants.py index 76c52d23..aabb9821 100644 --- a/src/edgepi/calibration/eeprom_constants.py +++ b/src/edgepi/calibration/eeprom_constants.py @@ -1,9 +1,6 @@ '''Address map of eeprom''' from enum import Enum -from dataclasses import dataclass -from edgepi.calibration.eeprom_mapping_pb2 import EepromLayout -from edgepi.calibration.calibration_constants import CalibParam class EEPROMInfo(Enum): """ @@ -28,6 +25,8 @@ class EdgePiMemoryInfo(Enum): """ USED_SPACE = 0x00 BUFF_START = 0x02 + USER_SPACE_START = 0x100 + USER_SPACE_END = 0x1FF class MessageFieldNumber(Enum): """ @@ -43,60 +42,3 @@ class MessageFieldNumber(Enum): SERIAL=7 MODEL=8 CLIENT_ID=9 - -@dataclass -class Keys: - """ - Dataclass to store key strings - """ - certificate: str = None - private: str = None - -@dataclass -class EdgePiEEPROMData: - # pylint: disable=too-many-instance-attributes - """ - Dataclass to store edgepi reserved values - dac_calib_parms (dict): list of calibration parameters - adc_calib_parms (dict): list of calibration parameters - rtd_calib_parms (dict): list of calibration parameters - tc_calib_parms (dict): list of calibration parameters - config_key (Keys): dataclass - data_key (Keys): dataclass - serial (str) - model (str) - client_id (str) - """ - dac_calib_parms: dict = None - adc_calib_parms: dict = None - rtd_calib_parms: dict = None - tc_calib_parms: dict = None - config_key: Keys = None - data_key: Keys = None - serial: str = None - model: str = None - client_id: str = None - - def message_to_dict(self, data_to_unpack: EepromLayout = None): - """ - Function to unpack message to list - Args: - data_to_unpack: EepromLayout message modules - Returns: - calib_list: 1-D array - """ - calib_dict={} - for indx, ch in enumerate(data_to_unpack.calibs): - calib_dict[indx] = CalibParam(gain=ch.gain, - offset=ch.offset) - return calib_dict - - def keys_to_str(self, data_to_unpack: EepromLayout = None): - """ - Function to unpack message to string - Args: - data_to_unpack: EepromLayout message keys - Returns: - Keys (dataclass): keys values - """ - return Keys(certificate = data_to_unpack.certificate, private = data_to_unpack.private_key) diff --git a/src/edgepi/calibration/eeprom_mapping.proto b/src/edgepi/calibration/eeprom_mapping.proto index 3c5dd1a1..c11f4b52 100644 --- a/src/edgepi/calibration/eeprom_mapping.proto +++ b/src/edgepi/calibration/eeprom_mapping.proto @@ -2,11 +2,15 @@ syntax = "proto3"; message EepromLayout{ message ModuleCalibParams{ - message ChannelCalib { + message ChannelCalib{ optional float gain = 1; optional float offset = 2; } + message HardwareValue{ + optional float ref_resistor = 1; + } repeated ChannelCalib calibs = 1; + repeated HardwareValue hw_val = 2; } message AwsKey{ string private_key = 1; diff --git a/src/edgepi/calibration/eeprom_mapping_pb2.py b/src/edgepi/calibration/eeprom_mapping_pb2.py index f5fac852..fa74c91b 100644 --- a/src/edgepi/calibration/eeprom_mapping_pb2.py +++ b/src/edgepi/calibration/eeprom_mapping_pb2.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: eeprom_mapping.proto - +"""Generated protocol buffer code.""" # pylint: skip-file +from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database # @@protoc_insertion_point(imports) @@ -14,271 +14,21 @@ -DESCRIPTOR = _descriptor.FileDescriptor( - name='eeprom_mapping.proto', - package='', - syntax='proto3', - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x14\x65\x65prom_mapping.proto\"\xa4\x04\n\x0c\x45\x65promLayout\x12,\n\x03\x64\x61\x63\x18\x01 \x01(\x0b\x32\x1f.EepromLayout.ModuleCalibParams\x12,\n\x03\x61\x64\x63\x18\x02 \x01(\x0b\x32\x1f.EepromLayout.ModuleCalibParams\x12,\n\x03rtd\x18\x03 \x01(\x0b\x32\x1f.EepromLayout.ModuleCalibParams\x12+\n\x02tc\x18\x04 \x01(\x0b\x32\x1f.EepromLayout.ModuleCalibParams\x12(\n\nconfig_key\x18\x05 \x01(\x0b\x32\x14.EepromLayout.AwsKey\x12&\n\x08\x64\x61ta_key\x18\x06 \x01(\x0b\x32\x14.EepromLayout.AwsKey\x12\x15\n\rserial_number\x18\x07 \x01(\t\x12\r\n\x05model\x18\x08 \x01(\t\x12\x11\n\tclient_id\x18\t \x01(\t\x1a\x9d\x01\n\x11ModuleCalibParams\x12<\n\x06\x63\x61libs\x18\x01 \x03(\x0b\x32,.EepromLayout.ModuleCalibParams.ChannelCalib\x1aJ\n\x0c\x43hannelCalib\x12\x11\n\x04gain\x18\x01 \x01(\x02H\x00\x88\x01\x01\x12\x13\n\x06offset\x18\x02 \x01(\x02H\x01\x88\x01\x01\x42\x07\n\x05_gainB\t\n\x07_offset\x1a\x32\n\x06\x41wsKey\x12\x13\n\x0bprivate_key\x18\x01 \x01(\t\x12\x13\n\x0b\x63\x65rtificate\x18\x02 \x01(\tb\x06proto3' -) - - - - -_EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB = _descriptor.Descriptor( - name='ChannelCalib', - full_name='EepromLayout.ModuleCalibParams.ChannelCalib', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='gain', full_name='EepromLayout.ModuleCalibParams.ChannelCalib.gain', index=0, - number=1, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='offset', full_name='EepromLayout.ModuleCalibParams.ChannelCalib.offset', index=1, - number=2, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='_gain', full_name='EepromLayout.ModuleCalibParams.ChannelCalib._gain', - index=0, containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[]), - _descriptor.OneofDescriptor( - name='_offset', full_name='EepromLayout.ModuleCalibParams.ChannelCalib._offset', - index=1, containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[]), - ], - serialized_start=447, - serialized_end=521, -) - -_EEPROMLAYOUT_MODULECALIBPARAMS = _descriptor.Descriptor( - name='ModuleCalibParams', - full_name='EepromLayout.ModuleCalibParams', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='calibs', full_name='EepromLayout.ModuleCalibParams.calibs', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[_EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=364, - serialized_end=521, -) - -_EEPROMLAYOUT_AWSKEY = _descriptor.Descriptor( - name='AwsKey', - full_name='EepromLayout.AwsKey', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='private_key', full_name='EepromLayout.AwsKey.private_key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='certificate', full_name='EepromLayout.AwsKey.certificate', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=523, - serialized_end=573, -) - -_EEPROMLAYOUT = _descriptor.Descriptor( - name='EepromLayout', - full_name='EepromLayout', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='dac', full_name='EepromLayout.dac', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='adc', full_name='EepromLayout.adc', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='rtd', full_name='EepromLayout.rtd', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='tc', full_name='EepromLayout.tc', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='config_key', full_name='EepromLayout.config_key', index=4, - number=5, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data_key', full_name='EepromLayout.data_key', index=5, - number=6, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='serial_number', full_name='EepromLayout.serial_number', index=6, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model', full_name='EepromLayout.model', index=7, - number=8, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='client_id', full_name='EepromLayout.client_id', index=8, - number=9, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[_EEPROMLAYOUT_MODULECALIBPARAMS, _EEPROMLAYOUT_AWSKEY, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=25, - serialized_end=573, -) - -_EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB.containing_type = _EEPROMLAYOUT_MODULECALIBPARAMS -_EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB.oneofs_by_name['_gain'].fields.append( - _EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB.fields_by_name['gain']) -_EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB.fields_by_name['gain'].containing_oneof = _EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB.oneofs_by_name['_gain'] -_EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB.oneofs_by_name['_offset'].fields.append( - _EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB.fields_by_name['offset']) -_EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB.fields_by_name['offset'].containing_oneof = _EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB.oneofs_by_name['_offset'] -_EEPROMLAYOUT_MODULECALIBPARAMS.fields_by_name['calibs'].message_type = _EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB -_EEPROMLAYOUT_MODULECALIBPARAMS.containing_type = _EEPROMLAYOUT -_EEPROMLAYOUT_AWSKEY.containing_type = _EEPROMLAYOUT -_EEPROMLAYOUT.fields_by_name['dac'].message_type = _EEPROMLAYOUT_MODULECALIBPARAMS -_EEPROMLAYOUT.fields_by_name['adc'].message_type = _EEPROMLAYOUT_MODULECALIBPARAMS -_EEPROMLAYOUT.fields_by_name['rtd'].message_type = _EEPROMLAYOUT_MODULECALIBPARAMS -_EEPROMLAYOUT.fields_by_name['tc'].message_type = _EEPROMLAYOUT_MODULECALIBPARAMS -_EEPROMLAYOUT.fields_by_name['config_key'].message_type = _EEPROMLAYOUT_AWSKEY -_EEPROMLAYOUT.fields_by_name['data_key'].message_type = _EEPROMLAYOUT_AWSKEY -DESCRIPTOR.message_types_by_name['EepromLayout'] = _EEPROMLAYOUT -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -EepromLayout = _reflection.GeneratedProtocolMessageType('EepromLayout', (_message.Message,), { - - 'ModuleCalibParams' : _reflection.GeneratedProtocolMessageType('ModuleCalibParams', (_message.Message,), { - - 'ChannelCalib' : _reflection.GeneratedProtocolMessageType('ChannelCalib', (_message.Message,), { - 'DESCRIPTOR' : _EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB, - '__module__' : 'eeprom_mapping_pb2' - # @@protoc_insertion_point(class_scope:EepromLayout.ModuleCalibParams.ChannelCalib) - }) - , - 'DESCRIPTOR' : _EEPROMLAYOUT_MODULECALIBPARAMS, - '__module__' : 'eeprom_mapping_pb2' - # @@protoc_insertion_point(class_scope:EepromLayout.ModuleCalibParams) - }) - , - - 'AwsKey' : _reflection.GeneratedProtocolMessageType('AwsKey', (_message.Message,), { - 'DESCRIPTOR' : _EEPROMLAYOUT_AWSKEY, - '__module__' : 'eeprom_mapping_pb2' - # @@protoc_insertion_point(class_scope:EepromLayout.AwsKey) - }) - , - 'DESCRIPTOR' : _EEPROMLAYOUT, - '__module__' : 'eeprom_mapping_pb2' - # @@protoc_insertion_point(class_scope:EepromLayout) - }) -_sym_db.RegisterMessage(EepromLayout) -_sym_db.RegisterMessage(EepromLayout.ModuleCalibParams) -_sym_db.RegisterMessage(EepromLayout.ModuleCalibParams.ChannelCalib) -_sym_db.RegisterMessage(EepromLayout.AwsKey) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x65\x65prom_mapping.proto\"\xa0\x05\n\x0c\x45\x65promLayout\x12,\n\x03\x64\x61\x63\x18\x01 \x01(\x0b\x32\x1f.EepromLayout.ModuleCalibParams\x12,\n\x03\x61\x64\x63\x18\x02 \x01(\x0b\x32\x1f.EepromLayout.ModuleCalibParams\x12,\n\x03rtd\x18\x03 \x01(\x0b\x32\x1f.EepromLayout.ModuleCalibParams\x12+\n\x02tc\x18\x04 \x01(\x0b\x32\x1f.EepromLayout.ModuleCalibParams\x12(\n\nconfig_key\x18\x05 \x01(\x0b\x32\x14.EepromLayout.AwsKey\x12&\n\x08\x64\x61ta_key\x18\x06 \x01(\x0b\x32\x14.EepromLayout.AwsKey\x12\x15\n\rserial_number\x18\x07 \x01(\t\x12\r\n\x05model\x18\x08 \x01(\t\x12\x11\n\tclient_id\x18\t \x01(\t\x1a\x99\x02\n\x11ModuleCalibParams\x12<\n\x06\x63\x61libs\x18\x01 \x03(\x0b\x32,.EepromLayout.ModuleCalibParams.ChannelCalib\x12=\n\x06hw_val\x18\x02 \x03(\x0b\x32-.EepromLayout.ModuleCalibParams.HardwareValue\x1aJ\n\x0c\x43hannelCalib\x12\x11\n\x04gain\x18\x01 \x01(\x02H\x00\x88\x01\x01\x12\x13\n\x06offset\x18\x02 \x01(\x02H\x01\x88\x01\x01\x42\x07\n\x05_gainB\t\n\x07_offset\x1a;\n\rHardwareValue\x12\x19\n\x0cref_resistor\x18\x01 \x01(\x02H\x00\x88\x01\x01\x42\x0f\n\r_ref_resistor\x1a\x32\n\x06\x41wsKey\x12\x13\n\x0bprivate_key\x18\x01 \x01(\t\x12\x13\n\x0b\x63\x65rtificate\x18\x02 \x01(\tb\x06proto3') +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'eeprom_mapping_pb2', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + DESCRIPTOR._options = None + _EEPROMLAYOUT._serialized_start=25 + _EEPROMLAYOUT._serialized_end=697 + _EEPROMLAYOUT_MODULECALIBPARAMS._serialized_start=364 + _EEPROMLAYOUT_MODULECALIBPARAMS._serialized_end=645 + _EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB._serialized_start=510 + _EEPROMLAYOUT_MODULECALIBPARAMS_CHANNELCALIB._serialized_end=584 + _EEPROMLAYOUT_MODULECALIBPARAMS_HARDWAREVALUE._serialized_start=586 + _EEPROMLAYOUT_MODULECALIBPARAMS_HARDWAREVALUE._serialized_end=645 + _EEPROMLAYOUT_AWSKEY._serialized_start=647 + _EEPROMLAYOUT_AWSKEY._serialized_end=697 # @@protoc_insertion_point(module_scope) diff --git a/src/edgepi/calibration/protobuf_mapping.py b/src/edgepi/calibration/protobuf_mapping.py new file mode 100644 index 00000000..4446cbc2 --- /dev/null +++ b/src/edgepi/calibration/protobuf_mapping.py @@ -0,0 +1,80 @@ +"""module to map protobuf data to a class""" + +# pylint: disable=no-name-in-module +# https://github.com/protocolbuffers/protobuf/issues/10372 +from dataclasses import dataclass +from edgepi.calibration.eeprom_mapping_pb2 import EepromLayout +from edgepi.calibration.calibration_constants import CalibParam + +@dataclass +class Keys: + """ + Dataclass to store key strings + """ + certificate: str = None + private: str = None + + +class EdgePiEEPROMData: + # pylint: disable=too-many-instance-attributes + """ + Dataclass to store edgepi reserved values + dac_calib_parms (dict): list of calibration parameters + adc_calib_parms (dict): list of calibration parameters + rtd_calib_parms (dict): list of calibration parameters + tc_calib_parms (dict): list of calibration parameters + config_key (Keys): dataclass + data_key (Keys): dataclass + serial (str) + model (str) + client_id (str) + """ + def __init__(self, data_to_unpack: EepromLayout = None): + self.dac_calib_params = self.calib_message_to_dict(data_to_unpack.dac) + self.adc_calib_params = self.calib_message_to_dict(data_to_unpack.adc) + self.rtd_calib_params = self.calib_message_to_dict(data_to_unpack.rtd) + self.rtd_hw_params = self.hw_message_to_dict(data_to_unpack.rtd) + self.tc_calib_params = self.calib_message_to_dict(data_to_unpack.tc) + self.tc_hw_params = self.hw_message_to_dict(data_to_unpack.tc) + self.config_key = self.keys_to_dataclass(data_to_unpack.config_key) + self.data_key = self.keys_to_dataclass(data_to_unpack.data_key) + self.serial = data_to_unpack.serial_number + self.model = data_to_unpack.model + self.client_id = data_to_unpack.client_id + + def calib_message_to_dict(self, data_to_unpack: EepromLayout = None): + """ + Function to unpack message to list + Args: + data_to_unpack: EepromLayout message modules + Returns: + calib_dict: calib param to dictionary + """ + calib_dict={} + for indx, ch in enumerate(data_to_unpack.calibs): + calib_dict[indx] = CalibParam(gain=ch.gain, + offset=ch.offset) + return calib_dict + + def hw_message_to_dict(self, data_to_unpack: EepromLayout = None): + """ + Function to unpack message to list + Args: + data_to_unpack: EepromLayout message modules + Returns: + hw_params: hardware param to dictionary + """ + hw_dict={} + for indx, ch in enumerate(data_to_unpack.hw_val): + hw_dict[indx] = ch.ref_resistor + return hw_dict + + def keys_to_dataclass(self, data_to_unpack: EepromLayout = None): + """ + Function to unpack message and populate into Keys dataclass in string format + Args: + data_to_unpack: EepromLayout message keys + Returns: + Keys (dataclass): keys values + """ + return Keys(certificate = data_to_unpack.certificate, private = data_to_unpack.private_key) diff --git a/src/edgepi/dac/edgepi_dac.py b/src/edgepi/dac/edgepi_dac.py index 1d6c145b..4038cbda 100644 --- a/src/edgepi/dac/edgepi_dac.py +++ b/src/edgepi/dac/edgepi_dac.py @@ -44,7 +44,7 @@ def __init__(self): # Read edgepi reserved data and generate calibration parameter dictionary eeprom = EdgePiEEPROM() eeprom_data = eeprom.get_edgepi_reserved_data() - dac_calib_params = eeprom_data.dac_calib_parms + dac_calib_params = eeprom_data.dac_calib_params self.dac_ops = DACCommands(dac_calib_params) self.gpio = EdgePiGPIO() diff --git a/src/edgepi/peripherals/i2c.py b/src/edgepi/peripherals/i2c.py index 3b2b1450..e3b77887 100644 --- a/src/edgepi/peripherals/i2c.py +++ b/src/edgepi/peripherals/i2c.py @@ -4,17 +4,21 @@ Classes: I2CDevice """ +import logging from typing import Union from periphery import I2C +_logger = logging.getLogger(__name__) + class I2CDevice(): ''' I2C Device class ''' def __init__(self, fd: str = None): self.fd = fd - self.i2cdev = I2C(fd) + _logger.debug(f"Initialized I2C device with path '{self.fd}'") + self.i2cdev = I2C(devpath=fd) def set_read_msg(self, addr:Union[int,list] = None, msg:list = None): ''' diff --git a/src/test_edgepi/unit_tests/test_calibration/serializedFile b/src/test_edgepi/unit_tests/test_calibration/serializedFile index 492c80d2..95e38689 100644 Binary files a/src/test_edgepi/unit_tests/test_calibration/serializedFile and b/src/test_edgepi/unit_tests/test_calibration/serializedFile differ diff --git a/src/test_edgepi/unit_tests/test_calibration/test_access_eeprom.py b/src/test_edgepi/unit_tests/test_calibration/test_access_eeprom.py index 44cbbbc9..f4058cad 100644 --- a/src/test_edgepi/unit_tests/test_calibration/test_access_eeprom.py +++ b/src/test_edgepi/unit_tests/test_calibration/test_access_eeprom.py @@ -1,7 +1,8 @@ '''unit test for access eeprom''' # pylint: disable=C0413 - +# pylint: disable=no-name-in-module +# https://github.com/protocolbuffers/protobuf/issues/10372 from unittest import mock import os @@ -12,6 +13,7 @@ import pytest from edgepi.calibration.eeprom_constants import MessageFieldNumber from edgepi.calibration.edgepi_eeprom import EdgePiEEPROM +from edgepi.calibration.calibration_constants import CalibParam from edgepi.calibration.eeprom_mapping_pb2 import EepromLayout @pytest.fixture(name="eeprom") @@ -107,6 +109,54 @@ def test_get_message_of_interest(mocker, msg, eeprom): msg_of_interest = eeprom.get_message_of_interest(msg) assert msg_of_interest == memory_contents.ListFields()[msg.value -1][1] + +dac_dict_calib = {0:CalibParam(gain = 1.02383653, offset=-0.0164757), + 1:CalibParam(gain = 1.02283154, offset=-0.018963), + 2:CalibParam(gain = 1.02610898, offset=-0.0153855), + 3:CalibParam(gain = 1.02465811, offset=-0.0182012), + 4:CalibParam(gain = 1.02623188, offset=-0.0179865), + 5:CalibParam(gain = 1.02696733, offset=-0.0169919), + 6:CalibParam(gain = 1.0248366, offset=-0.0195936), + 7:CalibParam(gain = 1.02198715, offset=-0.0179717)} + +adc_dict_calib = {0:CalibParam(gain = 0.998441907, offset=0.035948182), + 1:CalibParam(gain = 0.998551392, offset=0.03190953), + 2:CalibParam(gain = 1.004123580, offset=-0.039846713), + 3:CalibParam(gain = 0.996197528, offset=0.05191299), + 4:CalibParam(gain = 1.000529260, offset=0.00375247), + 5:CalibParam(gain = 0.995760365, offset=0.05806301), + 6:CalibParam(gain = 0.993060022, offset=0.09193925), + 7:CalibParam(gain = 0.997010247, offset=0.04080028), + 8:CalibParam(gain = 0.998583581, offset=-0.004391864), + 9:CalibParam(gain = 0.996344494, offset=0.09228059), + 10:CalibParam(gain = 0.995856966, offset=0.05618589), + 11:CalibParam(gain = 0.997157199, offset=-0.049672102)} + +rtd_dict_calib = {0:CalibParam(gain = 1, offset=0)} +rtd_dict_hw= {0:1985.60} +tc_dict_calib = {0:CalibParam(gain = 1.024272873, offset=-0.018334615)} +tc_dict_hw = {0:1} + + +KEYS = '-----BEGIN RSA PRIVATE KEY-----\r\nMIIEpQIBAAKCAQEAnwu+S/OI3Hl0BCNQASv0HU5Jc4KUT2X4/tLykG+T\ +mZQcd6pE\r\nv7fji6ZoW/dl8dKwwdi/cfSS/J5Iv+5FwQU4KGNBbhVAnmJeLd+PMUT4bQTf9rVF\r\nHsDoIPoQLDH7jmBu8ai\ +7jQ0hY5SqPbynPGELFrk/vEpHwg/8fO4lbw1YxwgGc0SR\r\n8k1tFdi4On7NymBiv88HOsrrziAPGCd7Hc07s+SdFQF+nDPidy\ +M1pMqvUC25c5Sk\r\ncsrBlMgmcSRY8y6MJFPObg0ahLsI/YT+jT2G6AioQOz9ZJ89DSzjEfoFK9KlIzq1\r\n46THPR8Tdc9qu\ +chsqfX1zvxKdrQPbdtC7ZnMhQIDAQABAoIBAQCccv3PUpGXZzVz\r\neJUTgfwQ89iW8qUXcVS8vh7za35CvYo/QFN+T9JapefU\ +R4mVlk5fcOnpm88XBlDD\r\n1AvzskGqoPBU7DzzUAoaj+YYbiL9gqUY1vlWJiZxgep0vvoX9M5Nk1BikL7+aNgK\r\nANB1OXS\ +h9ro2as8pm3YgIlbaZcOli7doqtDM4kzxpKOhSAwtQqAS15GwMsKyhs1q\r\nvN6BqTBQE7XjdO5k1GCT4+vWEnptKMlLxi/zj1\ +uAXuAmujKHf3FcNqnrmNQ2v5+g\r\nNmuFCiknrtK5p5va67g6JgWqy45EG5CJLupIpM31xmewFXtlsfh3/fYSzkZqK9jX\r\nH\ +g/Wq7ShAoGBAMqzZTr2kjxtP0UjN4S5L0da7k4UX+4GEJRrQgG6RUgrL5eq4tfc\r\nT4DU7mp7SAb7FVwZmJ5kXZ33aQBF6UYR\ +uIpzUWRT+QOfzeTeJSQGAR8Ng/STNaUt\r\nD9XalRJSYn49LMGTgFebKJakIUC7lZ0ZZxpP1yFZbmYtJN1xFB/jhfGdAoGBAMj\ +d\r\nwuzc5VPJV5fQte6lTcnTzkqnPXnSvpf4sK+22i/1xGi0kbdimQiXHPj2xnwQmygN\r\n3a+l2ysChimOx2qqVdeFQbAveK\ +wYYSk41R10PmsQE14CgREN3r1XcXGz4mqXpL8l\r\n7Ry2HOIDQjTRVye2YdRO0zu3+egdFz4UTnxE8yYJAoGBAIM5+MNfdfTg1\ +SExV3P5\r\nX35WhAjQb/psurcbaTQtH0VFkB4kZ49P9bh2IZOWFF9Qldd2SrPgTitCTRv8JrVS\r\nK6KWXY8SPhf2kRkmJ+1W\ +ZctwuIjR9Nzme2X7iJ6/7zvC5wK7N0+AB5rezxhVWNrH\r\n41PJdIEGoM5NU5x45IpwhfqRAoGANpYdbOUy5SwoQ7eSWYJOu3R\ +18U+1oy+kYART\r\nb80PSk1NzO6VUvLWh8EZPIdDtV+F6sKp5hv6jZun/g8xHkmf/mvWSBz+fDY74Uny\r\nkIiQlePOf5PKo2\ +nTiD0FNVMfSrxfJxsVbuIGw10DVvs05jPoLhwlx2rd3ThaoqI+\r\nGgNa2JECgYEAwEEEq7dxGXYmlIhTs5IiEleLjBydQ9B1P\ +8zIIApLJdHuu50K7ifq\r\nVYWC0QMrAr4lWmJ3ZAmewtrgDh4/6JBWKdpKfX6qm88MpID0arS+jJkQBuMNIafI\r\nGqnLR1sn\ +5N91UjPItE3NPhYX5LvQMjIuHt8AiyNepTxS32VzVTx2z+A=\r\n-----END RSA PRIVATE KEY-----\r\n' + def test_get_edgepi_reserved_data(mocker, eeprom): # pylint: disable=protected-access mocker.patch( @@ -114,13 +164,27 @@ def test_get_edgepi_reserved_data(mocker, eeprom): return_value = read_binfile()) memory_contents = EepromLayout() memory_contents.ParseFromString(read_binfile()) - edgepi_eeprom_dataclass = eeprom.get_edgepi_reserved_data() - assert edgepi_eeprom_dataclass.dac_calib_parms is not None - assert edgepi_eeprom_dataclass.adc_calib_parms is not None - assert edgepi_eeprom_dataclass.rtd_calib_parms is not None - assert edgepi_eeprom_dataclass.tc_calib_parms is not None - assert edgepi_eeprom_dataclass.config_key is not None - assert edgepi_eeprom_dataclass.data_key is not None - assert edgepi_eeprom_dataclass.serial is not None - assert edgepi_eeprom_dataclass.model is not None - assert edgepi_eeprom_dataclass.client_id is not None + eeprom_data = eeprom.get_edgepi_reserved_data() + for key, value in eeprom_data.dac_calib_params.items(): + assert value.gain == pytest.approx(dac_dict_calib[key].gain) + assert value.offset == pytest.approx(dac_dict_calib[key].offset) + for key, value in eeprom_data.adc_calib_params.items(): + assert value.gain == pytest.approx(adc_dict_calib[key].gain) + assert value.offset == pytest.approx(adc_dict_calib[key].offset) + for key, value in eeprom_data.tc_calib_params.items(): + assert value.gain == pytest.approx(tc_dict_calib[key].gain) + assert value.offset == pytest.approx(tc_dict_calib[key].offset) + for key, value in eeprom_data.tc_hw_params.items(): + assert value == pytest.approx(tc_dict_hw[key]) + for key, value in eeprom_data.rtd_calib_params.items(): + assert value.gain == pytest.approx(rtd_dict_calib[key].gain) + assert value.offset == pytest.approx(rtd_dict_calib[key].offset) + for key, value in eeprom_data.rtd_hw_params.items(): + assert value == pytest.approx(rtd_dict_hw[key]) + assert eeprom_data.serial == '20221110-021' + assert eeprom_data.model == 'EdgePi-Bearbone' + assert eeprom_data.client_id == 'SO-2022-1023' + assert eeprom_data.config_key.certificate == KEYS + assert eeprom_data.config_key.private == KEYS + assert eeprom_data.data_key.certificate == KEYS + assert eeprom_data.data_key.certificate == KEYS diff --git a/src/test_edgepi/unit_tests/test_calibration/test_eeprom_constants.py b/src/test_edgepi/unit_tests/test_calibration/test_eeprom_constants.py deleted file mode 100644 index 3d693060..00000000 --- a/src/test_edgepi/unit_tests/test_calibration/test_eeprom_constants.py +++ /dev/null @@ -1,53 +0,0 @@ -'''unit test for access eeprom''' -# pylint: disable=C0413 -# pylint: disable=no-member -from unittest import mock -import os -PATH = os.path.dirname(os.path.abspath(__file__)) -import sys -sys.modules['periphery'] = mock.MagicMock() - -from edgepi.calibration.eeprom_constants import EdgePiEEPROMData, Keys -from edgepi.calibration.eeprom_mapping_pb2 import EepromLayout - -def read_binfile(): - """Read the dummy serializedFile and return byte string""" - with open(PATH+"/serializedFile","rb") as fd: - b_string = fd.read() - return b_string - -def test_edgepi_eeprom_data(): - memory_map = EepromLayout() - memory_map.ParseFromString(read_binfile()) - eeprom_data = EdgePiEEPROMData() - eeprom_data.dac_calib_parms=eeprom_data.message_to_dict(memory_map.dac) - eeprom_data.adc_calib_parms=eeprom_data.message_to_dict(memory_map.adc) - eeprom_data.rtd_calib_parms=eeprom_data.message_to_dict(memory_map.rtd) - eeprom_data.tc_calib_parms=eeprom_data.message_to_dict(memory_map.tc) - eeprom_data.config_key=eeprom_data.keys_to_str(memory_map.config_key) - eeprom_data.data_key=eeprom_data.keys_to_str(memory_map.data_key) - eeprom_data.serial=memory_map.serial_number - eeprom_data.model=memory_map.model - eeprom_data.client_id=memory_map.client_id - assert isinstance(eeprom_data.dac_calib_parms, dict) - assert isinstance(eeprom_data.adc_calib_parms, dict) - assert isinstance(eeprom_data.rtd_calib_parms, dict) - assert isinstance(eeprom_data.tc_calib_parms, dict) - assert isinstance(eeprom_data.config_key, Keys) - assert isinstance(eeprom_data.config_key, Keys) - assert isinstance(eeprom_data.data_key, Keys) - assert isinstance(eeprom_data.data_key, Keys) - assert isinstance(eeprom_data.serial, str) - assert isinstance(eeprom_data.model, str) - assert isinstance(eeprom_data.client_id, str) - assert eeprom_data.dac_calib_parms == eeprom_data.message_to_dict(memory_map.dac) - assert eeprom_data.adc_calib_parms==eeprom_data.message_to_dict(memory_map.adc) - assert eeprom_data.rtd_calib_parms==eeprom_data.message_to_dict(memory_map.rtd) - assert eeprom_data.tc_calib_parms==eeprom_data.message_to_dict(memory_map.tc) - assert eeprom_data.config_key.certificate == memory_map.config_key.certificate - assert eeprom_data.config_key.private == memory_map.config_key.private_key - assert eeprom_data.data_key.certificate == memory_map.data_key.certificate - assert eeprom_data.data_key.private == memory_map.data_key.private_key - assert eeprom_data.serial == memory_map.serial_number - assert eeprom_data.model == memory_map.model - assert eeprom_data.client_id == memory_map.client_id diff --git a/src/test_edgepi/unit_tests/test_calibration/test_protobuf_mapping.py b/src/test_edgepi/unit_tests/test_calibration/test_protobuf_mapping.py new file mode 100644 index 00000000..8a0d7d52 --- /dev/null +++ b/src/test_edgepi/unit_tests/test_calibration/test_protobuf_mapping.py @@ -0,0 +1,96 @@ +'''unit test for access eeprom''' +# pylint: disable=C0413 +# pylint: disable=no-member +# pylint: disable=no-name-in-module +# https://github.com/protocolbuffers/protobuf/issues/10372 +from unittest import mock +import os +PATH = os.path.dirname(os.path.abspath(__file__)) +import sys +sys.modules['periphery'] = mock.MagicMock() + +import pytest +from edgepi.calibration.protobuf_mapping import EdgePiEEPROMData +from edgepi.calibration.calibration_constants import CalibParam +from edgepi.calibration.eeprom_mapping_pb2 import EepromLayout + +def read_binfile(): + """Read the dummy serializedFile and return byte string""" + with open(PATH+"/serializedFile","rb") as fd: + b_string = fd.read() + return b_string + +dac_dict_calib = {0:CalibParam(gain = 1.02383653, offset=-0.0164757), + 1:CalibParam(gain = 1.02283154, offset=-0.018963), + 2:CalibParam(gain = 1.02610898, offset=-0.0153855), + 3:CalibParam(gain = 1.02465811, offset=-0.0182012), + 4:CalibParam(gain = 1.02623188, offset=-0.0179865), + 5:CalibParam(gain = 1.02696733, offset=-0.0169919), + 6:CalibParam(gain = 1.0248366, offset=-0.0195936), + 7:CalibParam(gain = 1.02198715, offset=-0.0179717)} + +adc_dict_calib = {0:CalibParam(gain = 0.998441907, offset=0.035948182), + 1:CalibParam(gain = 0.998551392, offset=0.03190953), + 2:CalibParam(gain = 1.004123580, offset=-0.039846713), + 3:CalibParam(gain = 0.996197528, offset=0.05191299), + 4:CalibParam(gain = 1.000529260, offset=0.00375247), + 5:CalibParam(gain = 0.995760365, offset=0.05806301), + 6:CalibParam(gain = 0.993060022, offset=0.09193925), + 7:CalibParam(gain = 0.997010247, offset=0.04080028), + 8:CalibParam(gain = 0.998583581, offset=-0.004391864), + 9:CalibParam(gain = 0.996344494, offset=0.09228059), + 10:CalibParam(gain = 0.995856966, offset=0.05618589), + 11:CalibParam(gain = 0.997157199, offset=-0.049672102)} + +rtd_dict_calib = {0:CalibParam(gain = 1, offset=0)} +rtd_dict_hw= {0:1985.60} +tc_dict_calib = {0:CalibParam(gain = 1.024272873, offset=-0.018334615)} +tc_dict_hw = {0:1} + + +KEYS = '-----BEGIN RSA PRIVATE KEY-----\r\nMIIEpQIBAAKCAQEAnwu+S/OI3Hl0BCNQASv0HU5Jc4KUT2X4/tLykG+T\ +mZQcd6pE\r\nv7fji6ZoW/dl8dKwwdi/cfSS/J5Iv+5FwQU4KGNBbhVAnmJeLd+PMUT4bQTf9rVF\r\nHsDoIPoQLDH7jmBu8ai\ +7jQ0hY5SqPbynPGELFrk/vEpHwg/8fO4lbw1YxwgGc0SR\r\n8k1tFdi4On7NymBiv88HOsrrziAPGCd7Hc07s+SdFQF+nDPidy\ +M1pMqvUC25c5Sk\r\ncsrBlMgmcSRY8y6MJFPObg0ahLsI/YT+jT2G6AioQOz9ZJ89DSzjEfoFK9KlIzq1\r\n46THPR8Tdc9qu\ +chsqfX1zvxKdrQPbdtC7ZnMhQIDAQABAoIBAQCccv3PUpGXZzVz\r\neJUTgfwQ89iW8qUXcVS8vh7za35CvYo/QFN+T9JapefU\ +R4mVlk5fcOnpm88XBlDD\r\n1AvzskGqoPBU7DzzUAoaj+YYbiL9gqUY1vlWJiZxgep0vvoX9M5Nk1BikL7+aNgK\r\nANB1OXS\ +h9ro2as8pm3YgIlbaZcOli7doqtDM4kzxpKOhSAwtQqAS15GwMsKyhs1q\r\nvN6BqTBQE7XjdO5k1GCT4+vWEnptKMlLxi/zj1\ +uAXuAmujKHf3FcNqnrmNQ2v5+g\r\nNmuFCiknrtK5p5va67g6JgWqy45EG5CJLupIpM31xmewFXtlsfh3/fYSzkZqK9jX\r\nH\ +g/Wq7ShAoGBAMqzZTr2kjxtP0UjN4S5L0da7k4UX+4GEJRrQgG6RUgrL5eq4tfc\r\nT4DU7mp7SAb7FVwZmJ5kXZ33aQBF6UYR\ +uIpzUWRT+QOfzeTeJSQGAR8Ng/STNaUt\r\nD9XalRJSYn49LMGTgFebKJakIUC7lZ0ZZxpP1yFZbmYtJN1xFB/jhfGdAoGBAMj\ +d\r\nwuzc5VPJV5fQte6lTcnTzkqnPXnSvpf4sK+22i/1xGi0kbdimQiXHPj2xnwQmygN\r\n3a+l2ysChimOx2qqVdeFQbAveK\ +wYYSk41R10PmsQE14CgREN3r1XcXGz4mqXpL8l\r\n7Ry2HOIDQjTRVye2YdRO0zu3+egdFz4UTnxE8yYJAoGBAIM5+MNfdfTg1\ +SExV3P5\r\nX35WhAjQb/psurcbaTQtH0VFkB4kZ49P9bh2IZOWFF9Qldd2SrPgTitCTRv8JrVS\r\nK6KWXY8SPhf2kRkmJ+1W\ +ZctwuIjR9Nzme2X7iJ6/7zvC5wK7N0+AB5rezxhVWNrH\r\n41PJdIEGoM5NU5x45IpwhfqRAoGANpYdbOUy5SwoQ7eSWYJOu3R\ +18U+1oy+kYART\r\nb80PSk1NzO6VUvLWh8EZPIdDtV+F6sKp5hv6jZun/g8xHkmf/mvWSBz+fDY74Uny\r\nkIiQlePOf5PKo2\ +nTiD0FNVMfSrxfJxsVbuIGw10DVvs05jPoLhwlx2rd3ThaoqI+\r\nGgNa2JECgYEAwEEEq7dxGXYmlIhTs5IiEleLjBydQ9B1P\ +8zIIApLJdHuu50K7ifq\r\nVYWC0QMrAr4lWmJ3ZAmewtrgDh4/6JBWKdpKfX6qm88MpID0arS+jJkQBuMNIafI\r\nGqnLR1sn\ +5N91UjPItE3NPhYX5LvQMjIuHt8AiyNepTxS32VzVTx2z+A=\r\n-----END RSA PRIVATE KEY-----\r\n' + +def test_edgepi_eeprom_data(): + memory_map = EepromLayout() + memory_map.ParseFromString(read_binfile()) + eeprom_data = EdgePiEEPROMData(memory_map) + for key, value in eeprom_data.dac_calib_params.items(): + assert value.gain == pytest.approx(dac_dict_calib[key].gain) + assert value.offset == pytest.approx(dac_dict_calib[key].offset) + for key, value in eeprom_data.adc_calib_params.items(): + assert value.gain == pytest.approx(adc_dict_calib[key].gain) + assert value.offset == pytest.approx(adc_dict_calib[key].offset) + for key, value in eeprom_data.tc_calib_params.items(): + assert value.gain == pytest.approx(tc_dict_calib[key].gain) + assert value.offset == pytest.approx(tc_dict_calib[key].offset) + for key, value in eeprom_data.tc_hw_params.items(): + assert value == pytest.approx(tc_dict_hw[key]) + for key, value in eeprom_data.rtd_calib_params.items(): + assert value.gain == pytest.approx(rtd_dict_calib[key].gain) + assert value.offset == pytest.approx(rtd_dict_calib[key].offset) + for key, value in eeprom_data.rtd_hw_params.items(): + assert value == pytest.approx(rtd_dict_hw[key]) + assert eeprom_data.serial == '20221110-021' + assert eeprom_data.model == 'EdgePi-Bearbone' + assert eeprom_data.client_id == 'SO-2022-1023' + assert eeprom_data.config_key.certificate == KEYS + assert eeprom_data.config_key.private == KEYS + assert eeprom_data.data_key.certificate == KEYS + assert eeprom_data.data_key.certificate == KEYS diff --git a/src/test_edgepi/unit_tests/test_dac/test_dac_commands.py b/src/test_edgepi/unit_tests/test_dac/test_dac_commands.py index 54cc0e1a..3703839a 100644 --- a/src/test_edgepi/unit_tests/test_dac/test_dac_commands.py +++ b/src/test_edgepi/unit_tests/test_dac/test_dac_commands.py @@ -19,7 +19,7 @@ def fixture_test_dac_ops(mocker): return_value = read_binfile()) eeprom = EdgePiEEPROM() eeprom_data = eeprom.get_edgepi_reserved_data() - dac_calib_params = eeprom_data.dac_calib_parms + dac_calib_params = eeprom_data.dac_calib_params dac_ops = DACCommands(dac_calib_params) return dac_ops @@ -109,7 +109,7 @@ def test_dac_generate_write_and_update_command(a, b, c, dac_ops): @pytest.mark.parametrize("ch, expected, dac_gain, result", - [(1, 2.345, 1, 30282), (0, 2.345, 2, 15285), (3, 2.345, 1, 30341)]) + [(1, 2.345, 1, 30293), (0, 2.345, 2, 15221), (3, 2.345, 1, 30229)]) def test_dac_voltage_to_code(ch, expected, dac_gain, result, dac_ops): assert dac_ops.voltage_to_code(ch, expected, dac_gain) == result @@ -118,8 +118,8 @@ def test_dac_voltage_to_code(ch, expected, dac_gain, result, dac_ops): "ch, code, dac_gain, result", [ (1, 33798, 1, 2.619), - (0, 33798, 2, 5.239), - (3, 33798, 1, 2.614), + (0, 33798, 2, 5.263), + (3, 33798, 1, 2.624), ], ) def test_dac_code_to_voltage(ch, code, dac_gain, result, dac_ops): diff --git a/src/test_edgepi/unit_tests/test_dac/test_edgepi_dac.py b/src/test_edgepi/unit_tests/test_dac/test_edgepi_dac.py index b7ba2e0d..7fa795ac 100644 --- a/src/test_edgepi/unit_tests/test_dac/test_edgepi_dac.py +++ b/src/test_edgepi/unit_tests/test_dac/test_edgepi_dac.py @@ -8,6 +8,8 @@ sys.modules['periphery'] = mock.MagicMock() # pylint: disable=wrong-import-position +# pylint: disable=no-name-in-module +# https://github.com/protocolbuffers/protobuf/issues/10372 # pylint: disable=protected-access import pytest @@ -19,8 +21,10 @@ EdgePiDacCom as COM, ) from edgepi.dac.edgepi_dac import EdgePiDAC -from edgepi.calibration.eeprom_constants import EdgePiEEPROMData from edgepi.calibration.calibration_constants import CalibParam +from edgepi.calibration.protobuf_mapping import EdgePiEEPROMData +from edgepi.calibration.eeprom_mapping_pb2 import EepromLayout +from test_edgepi.unit_tests.test_calibration.read_serialized import read_binfile dummy_calib_param_dict = {0:CalibParam(gain=1,offset=0), 1:CalibParam(gain=1,offset=0), @@ -35,17 +39,25 @@ def fixture_test_dac(mocker): mocker.patch("edgepi.peripherals.spi.SPI") mocker.patch("edgepi.dac.edgepi_dac.EdgePiGPIO") + eelayout= EepromLayout() + eelayout.ParseFromString(read_binfile()) mocker.patch("edgepi.dac.edgepi_dac.EdgePiEEPROM.get_edgepi_reserved_data", - return_value = EdgePiEEPROMData(dac_calib_parms=dummy_calib_param_dict)) - yield EdgePiDAC() + return_value = EdgePiEEPROMData(eelayout)) + dac = EdgePiDAC() + dac.dac_ops.dict_calib_param = dummy_calib_param_dict + yield dac @pytest.fixture(name="dac_mock_periph") def fixture_test_dac_write_voltage(mocker): mocker.patch("edgepi.peripherals.spi.SPI") mocker.patch("edgepi.peripherals.i2c.I2C") + eelayout= EepromLayout() + eelayout.ParseFromString(read_binfile()) mocker.patch("edgepi.dac.edgepi_dac.EdgePiEEPROM.get_edgepi_reserved_data", - return_value = EdgePiEEPROMData(dac_calib_parms=dummy_calib_param_dict)) - yield EdgePiDAC() + return_value = EdgePiEEPROMData(eelayout)) + dac = EdgePiDAC() + dac.dac_ops.dict_calib_param = dummy_calib_param_dict + yield dac _default_power_modes = { @@ -178,9 +190,12 @@ def test_dac_send_to_gpio_pins(mocker, analog_out, pin_name, voltage, mock_name) mocker.patch("edgepi.gpio.edgepi_gpio_expander.I2CDevice") mock_set = mocker.patch("edgepi.dac.edgepi_dac.EdgePiGPIO.set_expander_pin") mock_clear = mocker.patch("edgepi.dac.edgepi_dac.EdgePiGPIO.clear_expander_pin") + eelayout= EepromLayout() + eelayout.ParseFromString(read_binfile()) mocker.patch("edgepi.dac.edgepi_dac.EdgePiEEPROM.get_edgepi_reserved_data", - return_value = EdgePiEEPROMData(dac_calib_parms=dummy_calib_param_dict)) + return_value = EdgePiEEPROMData(eelayout)) dac = EdgePiDAC() + dac.dac_ops.dict_calib_param = dummy_calib_param_dict dac._EdgePiDAC__send_to_gpio_pins(analog_out, voltage) # check correct clause is entered depending on voltage written if voltage > 0: @@ -237,9 +252,12 @@ def test_enable_dac_gain(mocker, enable, result, mocker_values): return_value = (mocker_values[0], mocker_values[1], mocker_values[2])) set_dac_gain = mocker.patch("edgepi.dac.edgepi_dac.EdgePiGPIO.set_expander_pin") clear_dac_gain = mocker.patch("edgepi.dac.edgepi_dac.EdgePiGPIO.clear_expander_pin") + eelayout= EepromLayout() + eelayout.ParseFromString(read_binfile()) mocker.patch("edgepi.dac.edgepi_dac.EdgePiEEPROM.get_edgepi_reserved_data", - return_value = EdgePiEEPROMData(dac_calib_parms=dummy_calib_param_dict)) + return_value = EdgePiEEPROMData(eelayout)) dac = EdgePiDAC() + dac.dac_ops.dict_calib_param = dummy_calib_param_dict # pylint: disable=expression-not-assigned assert dac.enable_dac_gain(enable) == result set_dac_gain.assert_called_once_with("DAC_GAIN") if enable \ @@ -260,9 +278,12 @@ def test_get_state(mocker, analog_out, code, voltage, gain, result, mock_val): mocker.patch("edgepi.gpio.edgepi_gpio_expander.I2CDevice") mocker.patch("edgepi.dac.edgepi_dac.EdgePiGPIO.get_pin_direction", return_value = mock_val[3]) mocker.patch("edgepi.peripherals.spi.SpiDevice.transfer", return_value=mock_val[0:3]) + eelayout= EepromLayout() + eelayout.ParseFromString(read_binfile()) mocker.patch("edgepi.dac.edgepi_dac.EdgePiEEPROM.get_edgepi_reserved_data", - return_value = EdgePiEEPROMData(dac_calib_parms=dummy_calib_param_dict)) + return_value = EdgePiEEPROMData(eelayout)) dac = EdgePiDAC() + dac.dac_ops.dict_calib_param = dummy_calib_param_dict code_val, voltage_val, gain_state = dac.get_state(analog_out, code, voltage, gain) assert code_val == result[0] assert pytest.approx(voltage_val, 1e-3) == voltage_val