Index: dialin/dg/sw_config.py =================================================================== diff -u -rd517baec135aaafcceb0142d83b9deb156dab283 -r4b8f0afb5aafc2409327ec47aad264ab500e69f7 --- dialin/dg/sw_config.py (.../sw_config.py) (revision d517baec135aaafcceb0142d83b9deb156dab283) +++ dialin/dg/sw_config.py (.../sw_config.py) (revision 4b8f0afb5aafc2409327ec47aad264ab500e69f7) @@ -14,14 +14,14 @@ @unique class SWConfigs(DialinEnum): + # NOTE: NUM_OF enum has been removed because it should be a part of the software configuration + # structure since the members of this class is for looped to create the dictionary automatically SW_CONFIG_DISABLE_HEATERS_MONITOR = 0 SW_CONFIG_THD_USING_TRO_CONNECTOR = 1 SW_CONFIG_DISABLE_CAL_CHECK = 2 SW_CONFIG_ALARMS_DEBUG = 3 SW_CONFIG_DISABLE_RO_PUMP_MONITOR = 4 SW_CONFIG_DISABLE_RO_RATIO_CHECK = 5 - SW_CONFIG_DISABLE_COND_SENSOR_CHECK = 6 - NUM_OF_SW_CONFIGS = 7 class DGSoftwareConfigs(AbstractSubSystem): @@ -94,7 +94,7 @@ # If there is content... if received_message is not None: - self.logger.debug("Received FW ACK after requesting DG service record.") + self.logger.debug("Received FW ACK after requesting DG software configuration record.") # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: Index: dialin/hd/alarms.py =================================================================== diff -u -rd517baec135aaafcceb0142d83b9deb156dab283 -r4b8f0afb5aafc2409327ec47aad264ab500e69f7 --- dialin/hd/alarms.py (.../alarms.py) (revision d517baec135aaafcceb0142d83b9deb156dab283) +++ dialin/hd/alarms.py (.../alarms.py) (revision 4b8f0afb5aafc2409327ec47aad264ab500e69f7) @@ -340,7 +340,8 @@ byteorder=DenaliMessage.BYTE_ORDER) # if no active alarms from HD, set all alarms (on Dialin side) to False in case we got out of sync - if self.alarm_top == 0: + #if self.alarm_top == 0: # TODO check this + if self.alarms_state == 0: for x in range(500): self.alarm_states[x] = False Index: dialin/hd/fans.py =================================================================== diff -u -radae506afce35a0063c6c2baf7e8580986f3bee7 -r4b8f0afb5aafc2409327ec47aad264ab500e69f7 --- dialin/hd/fans.py (.../fans.py) (revision adae506afce35a0063c6c2baf7e8580986f3bee7) +++ dialin/hd/fans.py (.../fans.py) (revision 4b8f0afb5aafc2409327ec47aad264ab500e69f7) @@ -57,6 +57,7 @@ self.target_rpm = 0.0 self.inlet_1_rpm = 0.0 self.rpm_alarm_time_offset = 0 + self.alarm_elapsed = 0 def get_fans_target_duty_cycle(self): """ @@ -82,7 +83,7 @@ """ return self.target_rpm - @publish(['duty_cycle', 'target_rpm', 'inlet_1_rpm', 'rpm_alarm_time_offset']) + @publish(['duty_cycle', 'target_rpm', 'inlet_1_rpm', 'rpm_alarm_time_offset', 'alarm_elapsed']) def _handler_fans_sync(self, message): """ Handles published thermistors message. @@ -98,6 +99,8 @@ message['message'][MsgFieldPositions.START_POS_FIELD_3:MsgFieldPositions.END_POS_FIELD_3]))[0] self.rpm_alarm_time_offset = struct.unpack('i', bytearray( message['message'][MsgFieldPositions.START_POS_FIELD_4:MsgFieldPositions.END_POS_FIELD_4]))[0] + self.alarm_elapsed = struct.unpack('i', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_5:MsgFieldPositions.END_POS_FIELD_5]))[0] def cmd_fans_rpm_override(self, fan: int, rpm: float, reset: int = NO_RESET) -> int: """ Index: dialin/utils/nv_ops_utils.py =================================================================== diff -u -rd517baec135aaafcceb0142d83b9deb156dab283 -r4b8f0afb5aafc2409327ec47aad264ab500e69f7 --- dialin/utils/nv_ops_utils.py (.../nv_ops_utils.py) (revision d517baec135aaafcceb0142d83b9deb156dab283) +++ dialin/utils/nv_ops_utils.py (.../nv_ops_utils.py) (revision 4b8f0afb5aafc2409327ec47aad264ab500e69f7) @@ -338,6 +338,9 @@ @return record (OrderedDict) the record with updated calibration time and crc """ for key, value in record.items(): + # Check if there is a CRC in the inner dictionary since some of the structures might not have it. + # For instance, the software configuration record does not have an inner CRC and it only has a global CRC + # with the padding if isinstance(value, dict): crc = NVOpsUtils.get_group_record_crc(value) value['crc'][1] = crc Fisheye: Tag a96c71099660bd5671204af134735f093c5ab700 refers to a dead (removed) revision in file `dialin/version.py'. Fisheye: No comparison available. Pass `N' to diff? Index: tests/dg_tests.py =================================================================== diff -u -rd517baec135aaafcceb0142d83b9deb156dab283 -r4b8f0afb5aafc2409327ec47aad264ab500e69f7 --- tests/dg_tests.py (.../dg_tests.py) (revision d517baec135aaafcceb0142d83b9deb156dab283) +++ tests/dg_tests.py (.../dg_tests.py) (revision 4b8f0afb5aafc2409327ec47aad264ab500e69f7) @@ -203,12 +203,14 @@ def get_hd_fans_info(): info = ('HD_Fan_DC, {:5.3f}, Target_HD_RPM, {:5.3f}, Inlet1_RPM, {:5.3f}, HD_Board_temp, {:5.3f}, ' 'HD_Power_supply, {:5.3f}, HD_FPGA_temp, {:5.3f}, PBA_ADC_temp, {:5.3f}, Venous_temp, {:5.3f}, ' + 'Elapsed, {:5.3f}, ' .format(hd.fans.duty_cycle, hd.fans.target_rpm, hd.fans.inlet_1_rpm, hd.temperatures.hd_temperatures[HDTemperaturesNames.THERMISTOR_ONBOARD_NTC.name], hd.temperatures.hd_temperatures[HDTemperaturesNames.THERMISTOR_POWER_SUPPLY_1.name], hd.temperatures.hd_temperatures[HDTemperaturesNames.TEMPSENSOR_FPGA_BOARD.name], hd.temperatures.hd_temperatures[HDTemperaturesNames.TEMPSENSOR_PBA_ADC_SENSOR.name], - hd.temperatures.hd_temperatures[HDTemperaturesNames.TEMPSENSOR_VENOUS_PRESS_TEMP.name])) + hd.temperatures.hd_temperatures[HDTemperaturesNames.TEMPSENSOR_VENOUS_PRESS_TEMP.name], + hd.fans.alarm_elapsed)) return info @@ -447,27 +449,43 @@ def test_fans_alarms(): - + f = open("/home/fw/projects/dialin/tests/fans_issues.log", "w") counter = 0 - while counter < 1: + while counter < 10: hd.cmd_hd_software_reset_request() + sleep(1) + hd.alarms.cmd_clear_all_alarms() while True: if hd.hd_operation_mode == HDOpModes.MODE_STAN.value: - - hd.alarms.cmd_alarm_info_broadcast_interval_override(50, reset=0) + hd.cmd_log_in_to_hd() sleep(1) - hd.fans.cmd_fans_rpm_override(0, 1200.0, reset=0) + hd.fans.cmd_fans_data_broadcast_interval_override(50, reset=0) + sleep(1) + hd.fans.cmd_fans_rpm_override(0, 1000.0, reset=0) start_time = datetime.now() - + i = 0 while True: + info = str(counter) + ', ' + str(datetime.now() - start_time) + ', ' + str(hd.fans.alarm_elapsed) \ + + ', ' + str(hd.fans.inlet_1_rpm) + ', ' + str(hd.fans.target_rpm) + ', ' + \ + str(hd.alarms.get_alarm_state(AlarmList.ALARM_ID_HD_FAN_RPM_OUT_OF_RANGE.value)) + ', ' + \ + str(hd.alarms.alarm_states[AlarmList.ALARM_ID_HD_FAN_RPM_OUT_OF_RANGE.value]) + '\r' + print(info) + f.write(info) + if hd.alarms.get_alarm_state(AlarmList.ALARM_ID_HD_FAN_RPM_OUT_OF_RANGE.value): - print(datetime.now() - start_time) + print(counter, datetime.now() - start_time) hd.ui.cmd_ui_user_alarm_response(3) break + #if i > 4000 / 50: + # hd.ui.cmd_ui_user_alarm_response(3) + # break + #i += 1 + sleep(0.05) + counter += 1 break Index: tests/peter/test_dg_records.py =================================================================== diff -u -rd517baec135aaafcceb0142d83b9deb156dab283 -r4b8f0afb5aafc2409327ec47aad264ab500e69f7 --- tests/peter/test_dg_records.py (.../test_dg_records.py) (revision d517baec135aaafcceb0142d83b9deb156dab283) +++ tests/peter/test_dg_records.py (.../test_dg_records.py) (revision 4b8f0afb5aafc2409327ec47aad264ab500e69f7) @@ -24,6 +24,7 @@ sys.path.append("../../") from dialin.dg.dialysate_generator import DG from dialin.utils.nv_ops_utils import NVOpsUtils +from dialin.dg.sw_config import SWConfigs from time import sleep """ @@ -174,16 +175,22 @@ dg = DG(log_level="DEBUG") if dg.cmd_log_in_to_dg(): - print(dg.cmd_ui_request_dg_version()) - dg.sw_configs.cmd_reset_dg_sw_config_record() + + #print(dg.cmd_ui_request_dg_version()) + #dg.sw_configs.cmd_reset_dg_sw_config_record() + + dg.sw_configs.cmd_request_dg_sw_config_record() observer = Observer("dg_sw_config_record") dg.sw_configs.attach(observer) while not observer.received: sleep(0.2) + dg.sw_configs.dg_sw_config_record['sw_configs'][SWConfigs.SW_CONFIG_DISABLE_HEATERS_MONITOR.name][1] = 1 print(dg.sw_configs.dg_sw_config_record) + dg.sw_configs.cmd_set_dg_sw_config_record(dg.sw_configs.dg_sw_config_record) + def test_dg_calibration_record(): dg = DG(log_level="DEBUG") @@ -241,16 +248,21 @@ dg = DG(log_level="DEBUG") if dg.cmd_log_in_to_dg(): - dg.calibration_record.cmd_reset_dg_calibration_record() - sleep(0.25) - print(dg.calibration_record.dg_calibration_record) - dg.scheduled_runs_record.cmd_reset_dg_calibration_record() - sleep(0.25) + #dg.calibration_record.cmd_reset_dg_calibration_record() + #sleep(0.25) + #print(dg.calibration_record.dg_calibration_record) + + #dg.scheduled_runs_record.cmd_reset_dg_calibration_record() + #sleep(0.25) dg.system_record.cmd_reset_dg_system_record() sleep(0.25) + print(dg.system_record.dg_system_record) dg.service_record.cmd_reset_dg_service_record() + sleep(0.25) + print(dg.service_record.dg_service_record) + def test_dg_service_record(): dg = DG(log_level="DEBUG") if dg.cmd_log_in_to_dg():