Index: leahi_dialin/common/generic_defs.py =================================================================== diff -u -r5d919ffa14be669314a6a1c233ea820e7302a44a -r9a7c9855e0dc86bb73adea21679b8820d56d83f0 --- leahi_dialin/common/generic_defs.py (.../generic_defs.py) (revision 5d919ffa14be669314a6a1c233ea820e7302a44a) +++ leahi_dialin/common/generic_defs.py (.../generic_defs.py) (revision 9a7c9855e0dc86bb73adea21679b8820d56d83f0) @@ -211,15 +211,19 @@ @unique class ServiceRecordFields(RecordsBaseEnum): - SERVICE_LOC = (0, DataTypes.U08) # DD service location - LAST_SERVICE_EPOCH_DATE = (1, DataTypes.U32) # DD last service date in epoch - SERVICE_INTERVAL_SECONDS = (2, DataTypes.U32) # DD service interval in seconds - LAST_RESET_TIME_EPOCH = (3, DataTypes.U32) # Last time the record was reset in epoch - CRC = (4, DataTypes.U16) # CRC - NUM_OF_SERVICE_RECORD_FIELDS = (5, DataTypes.NONE) # Number of Service Record Fields + IS_HDF_ONLINE_FLUID = (0, DataTypes.BOOL) # DD Is HDF Online + WATER_RECOVERY = (1, DataTypes.U32) # DD Water Recovery + SERVICE_LOC = (2, DataTypes.U08) # DD service location + LAST_SERVICE_EPOCH_DATE = (3, DataTypes.U32) # DD last service date in epoch + SERVICE_INTERVAL_SECONDS = (4, DataTypes.U32) # DD service interval in seconds + LAST_RESET_TIME_EPOCH = (5, DataTypes.U32) # Last time the record was reset in epoch + CRC = (6, DataTypes.U16) # CRC + NUM_OF_SERVICE_RECORD_FIELDS = (7, DataTypes.NONE) # Number of Service Record Fields ServiceRecordFields._str_list = { # Official Name : Accepted strings + 'IS_HDF_ONLINE_FLUID': [], + 'WATER_RECOVERY': [], 'SERVICE_LOC': [], 'LAST_SERVICE_EPOCH_DATE': [], 'SERVICE_INTERVAL_SECONDS': [], Index: leahi_dialin/dd/modules/records.py =================================================================== diff -u -re3abbf537274789164f2b5cdf7bded82d3533e8f -r9a7c9855e0dc86bb73adea21679b8820d56d83f0 --- leahi_dialin/dd/modules/records.py (.../records.py) (revision e3abbf537274789164f2b5cdf7bded82d3533e8f) +++ leahi_dialin/dd/modules/records.py (.../records.py) (revision 9a7c9855e0dc86bb73adea21679b8820d56d83f0) @@ -72,12 +72,6 @@ self.institutional_records = { } #: The Institutional Records data in dictionary format self.usage_info_records = { } #: The Usage Information Records data in dictionary format - self.pager_system_record = 0 - self.pager_service_record = 0 - self.pager_calibration_record = 0 - self.pager_institutional_record = 0 - self.pager_usage_info_record = 0 - for sys_record in dd_enum_repository.SystemRecordFields: self.system_records[sys_record.name] = None @@ -103,6 +97,13 @@ @param message: published data message @return: none """ + record_list = [] + for service_member in dd_enum_repository.ServiceRecordFields: + record_list.append((service_member.name, service_member.datatype)) + + self.process_into_dict(dict_to_update = self.service_records, + decoder_list = record_list, + message = message) # Get the payload related values msg_list =[] msg_list.append(('current_page', DataTypes.U32)) @@ -161,34 +162,13 @@ @param message: published data message @return: none """ - _generic_handler(self = self, - message = message, - service_name = dd_enum_repository.ServiceRecordFields, - pager_record = self.pager_service_record) - # # Get the payload related values - # msg_list =[] - # msg_list.append(('current_page', DataTypes.U32)) - # msg_list.append(('all_pages', DataTypes.U32)) - # msg_list.append(('payload_count', DataTypes.U32)) + record_list = [] + for member in dd_enum_repository.ServiceRecordFields: + record_list.append((member.name, member.datatype)) - # result = self.process_into_vars(decoder_list = msg_list, - # message = message) - - # # Get the record data - # record_list = [] - # for i in range(0, result['payload_count']): - # record = dd_enum_repository.ServiceRecordFields(i + self.pager_service_record) - # record_list.append((record.name, record.datatype)) - # self.process_into_dict(dict_to_update = self.service_records, - # decoder_list = record_list, - # message = message, - # start_from_byte = len(msg_list) * DataTypes.U32.size) - - # # Increase the pager by the payload count to know where the next message should resume, or reset when it's the last message - # if result['current_page'] == result['all_pages']: - # self.pager_service_record = 0 - # else: - # self.pager_service_record =+ result['payload_count'] + self.process_into_dict(dict_to_update = self.service_records, + decoder_list = record_list, + message = message) self.service_records_timestamp = timestamp @@ -202,11 +182,14 @@ @param message: published data message @return: none """ - dd_enum_repository.CalibrationRecordFields - _generic_handler(self = self, - message = message, - service_name = dd_enum_repository.CalibrationRecordFields, - pager_record = self.pager_calibration_record) + record_list = [] + for member in dd_enum_repository.CalibrationRecordFields: + record_list.append((member.name, member.datatype)) + + self.process_into_dict(dict_to_update = self.service_records, + decoder_list = record_list, + message = message) + self.calibration_records_timestamp = timestamp @@ -219,10 +202,22 @@ @param message: published data message @return: none """ - _generic_handler(self = self, - message = message, - service_name = dd_enum_repository.InstitutionalRecordFields, - pager_record = self.pager_institutional_record) + record_list = [('record_id', DataTypes.U08)] + results = self.process_into_vars(decoder_list = record_list, + message = message) + + record_id = int(results['record_id']) + member = dd_enum_repository.InstitutionalRecordFields(record_id) + + record_list = [] + record_list.append((member.name, member.datatype)) + record_list.append((dd_enum_repository.InstitutionalRecordFields.CALIBRATION_TIME.name, dd_enum_repository.InstitutionalRecordFields.CALIBRATION_TIME)) + + self.process_into_dict(dict_to_update = self.service_records, + decoder_list = record_list, + message = message, + start_from_byte = len(record_list) * DataTypes.U08.size) + self.institutional_records_timestamp = timestamp @@ -235,10 +230,14 @@ @param message: published data message @return: none """ - _generic_handler(self = self, - message = message, - service_name = dd_enum_repository.ServiceRecordFields, - pager_record = self.pager_usage_info_record) + record_list = [] + for member in dd_enum_repository.UsageInformationRecordFields: + record_list.append((member.name, member.datatype)) + + self.process_into_dict(dict_to_update = self.service_records, + decoder_list = record_list, + message = message) + self.usage_info_records_timestamp = timestamp @@ -275,7 +274,7 @@ @return: 1 if successful, zero otherwise """ - payload = integer_to_bytearray(dd_enum_repository.RecordTypes.SYSTEM_RECORD.value) + payload = byte_to_bytearray(dd_enum_repository.RecordTypes.SYSTEM_RECORD.value) return cmd_generic_override( payload = payload, @@ -297,7 +296,7 @@ @return: 1 if successful, zero otherwise """ - payload = integer_to_bytearray(dd_enum_repository.RecordTypes.SERVICE_RECORD.value) + payload = byte_to_bytearray(dd_enum_repository.RecordTypes.SERVICE_RECORD.value) return cmd_generic_override( payload = payload, @@ -319,7 +318,7 @@ @return: 1 if successful, zero otherwise """ - payload = integer_to_bytearray(dd_enum_repository.RecordTypes.CALIBRATION_RECORD.value) + payload = byte_to_bytearray(dd_enum_repository.RecordTypes.CALIBRATION_RECORD.value) return cmd_generic_override( payload = payload, @@ -341,7 +340,7 @@ @return: 1 if successful, zero otherwise """ - payload = integer_to_bytearray(dd_enum_repository.RecordTypes.INSTITUTIONAL_RECORD.value) + payload = byte_to_bytearray(dd_enum_repository.RecordTypes.INSTITUTIONAL_RECORD.value) return cmd_generic_override( payload = payload, @@ -363,7 +362,7 @@ @return: 1 if successful, zero otherwise """ - payload = integer_to_bytearray(dd_enum_repository.RecordTypes.USAGE_INFORMATION_RECORD.value) + payload = byte_to_bytearray(dd_enum_repository.RecordTypes.USAGE_INFORMATION_RECORD.value) return cmd_generic_override( payload = payload, @@ -461,6 +460,8 @@ can_interface = self.can_interface) + def get_calibration_record_list(self): + def cmd_set_calibration_records(self, calibration_records: dict) -> int: """ Constructs and sends a command for setting the Calibration Records. @@ -546,32 +547,6 @@ # ================================================= Private Methods ================================================= -def _generic_handler(self: DDRecords, message, service_name, pager_record): - # Get the payload related values - msg_list =[] - msg_list.append(('current_page', DataTypes.U32)) - msg_list.append(('all_pages', DataTypes.U32)) - msg_list.append(('payload_count', DataTypes.U32)) - result = self.process_into_vars(decoder_list = msg_list, - message = message) - - # Get the record data - record_list = [] - for i in range(0, result['payload_count']): - record = service_name(i + pager_record) - record_list.append((record.name, record.datatype)) - self.process_into_dict(dict_to_update = self.service_records, - decoder_list = record_list, - message = message, - start_from_byte = len(msg_list) * DataTypes.U32.size) - - # Increase the pager by the payload count to know where the next message should resume, or reset when it's the last message - if result['current_page'] == result['all_pages']: - pager_record = 0 - else: - pager_record =+ result['payload_count'] - - def crc16_modbus(data: bytes) -> int: """Calculate CRC-16 Modbus (Poly: 0xA001, Init: 0xFFFF, Reflected).""" crc = 0xFFFF