Index: leahi_dialin/common/alarm_defs.py =================================================================== diff -u -r6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1 -r155002a8a797c462b346dccf1abd47428230e16b --- leahi_dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 6d104d3185ac3ed7c18c97ecdc13fd59bf53a8d1) +++ leahi_dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 155002a8a797c462b346dccf1abd47428230e16b) @@ -20,173 +20,209 @@ # Branch: staging @unique class AlarmList(AlarmEnum): - ALARM_ID_NO_ALARM = 0 # Indication for when no alarms is a possible situation - ALARM_ID_TD_SOFTWARE_FAULT = 1 # TD Software fault. Software found itself in an unexpected state - ALARM_ID_DD_SOFTWARE_FAULT = 2 # DD software fault. Software found itself in an unexpected state - ALARM_ID_FP_SOFTWARE_FAULT = 3 # FP software fault. Software found itself in an unexpected state - ALARM_ID_TD_FPGA_POST_TEST_FAILED = 4 # TD FPGA POST failure - ALARM_ID_TD_WATCHDOG_POST_TEST_FAILED = 5 # TD Watchdog POST failure - ALARM_ID_TD_UI_COMM_POST_FAILED = 6 # TD UI communication POST failure. UI failed to communicate within a reasonable time after power up - ALARM_ID_TD_FPGA_CLOCK_SPEED_CHECK_FAILURE = 7 # TD processor clock speed checks against FPGA clock failure - ALARM_ID_TD_FPGA_COMM_TIMEOUT = 8 # TD FPGA communication down for too long - ALARM_ID_TD_UI_COMM_TIMEOUT = 9 # TD UI communication timeout - ALARM_ID_TD_DD_COMM_TIMEOUT = 10 # TD DD communication timeout - ALARM_ID_TD_COMM_TOO_MANY_BAD_CRCS = 11 # TD too many bad communications CRC - ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_UI = 12 # TD didn't get ACK on message to UI that required acknowledgment - ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_DD = 13 # TD didn't get ACK on message to DD that required acknowledgment - ALARM_ID_TD_CRITICAL_DATA_ERROR = 14 # TD critical data integrity check failed - ALARM_ID_DD_CRITICAL_DATA_ERROR = 15 # DD critical data integrity check failed - ALARM_ID_TD_WATCHDOG_EXPIRED = 16 # TD watchdog expired - ALARM_ID_DD_WATCHDOG_EXPIRED = 17 # DD watchdog expired - ALARM_ID_DD_COMM_TOO_MANY_BAD_CRCS = 18 # DD too many bad communications CRC - ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_FP = 19 # DD didn't get ACK on message to FP that required acknowledgment - ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_TD = 20 # DD didn't get ACK on message to TD that required acknowledgment - ALARM_ID_DD_FPGA_POST_TEST_FAILED = 21 # DD FPGA POST failure - ALARM_ID_DD_FPGA_CLOCK_SPEED_CHECK_FAILURE = 22 # DD processor clock speed checks against FPGA clock failure - ALARM_ID_DD_FPGA_COMM_TIMEOUT = 23 # DD FPGA communication down for too long - ALARM_ID_TD_ALARM_AUDIO_SELF_TEST_FAILURE = 24 # TD alarm audio failed POST - ALARM_ID_DD_VALVE_CONTROL_FAILURE = 25 # DD FPGA not accepting commanded valve states - ALARM_ID_TD_ARTERIAL_SENSOR_TIMEOUT_FAULT = 26 # TD arterial pressure sensor freshness/error timeout fault - ALARM_ID_TD_VENOUS_SENSOR_TIMEOUT_FAULT = 27 # TD venous pressure sensor freshness/error timeout fault - ALARM_ID_TD_TMP_PRESSURE_LOW = 28 # TD TMP pressure low - ALARM_ID_TD_TMP_PRESSURE_HIGH = 29 # TD TMP pressure high - ALARM_ID_AVAILABLE_30 = 30 # Available alarms - ALARM_ID_AVAILABLE_31 = 31 # Available alarms - ALARM_ID_AVAILABLE_32 = 32 # Available alarms - ALARM_ID_TD_VOLTAGE_OUT_OF_RANGE = 33 # TD voltage out of range fault - ALARM_ID_TD_AC_POWER_LOST = 34 # TD AC power lost - ALARM_ID_TD_AC_POWER_LOST_IN_TREATMENT = 35 # TD AC power lost during treatment - ALARM_ID_DD_D17_COND_SENSOR_FPGA_FAULT = 36 # DD CD1 conductivity sensor freshness/error timeout fault - ALARM_ID_DD_D27_COND_SENSOR_FPGA_FAULT = 37 # DD CD2 conductivity sensor freshness/error timeout fault - ALARM_ID_DD_D29_COND_SENSOR_FPGA_FAULT = 38 # DD CD3 conductivity sensor freshness/error timeout fault - ALARM_ID_DD_D43_COND_SENSOR_FPGA_FAULT = 39 # DD CD4 conductivity sensor freshness/error timeout fault - ALARM_ID_TD_VENOUS_BUBBLE_DETECTED = 40 # TD venous bubble detected - ALARM_ID_TD_CARTRIDGE_DOOR_OPENED = 41 # TD front door open - ALARM_ID_TD_STUCK_BUTTON_TEST_FAILED = 42 # TD stuck button self test failure - ALARM_ID_TD_ARTERIAL_PRESSURE_LOW = 43 # TD arterial pressure low - ALARM_ID_TD_ARTERIAL_PRESSURE_HIGH = 44 # TD arterial pressure high - ALARM_ID_TD_ARTERIAL_PRESSURE_OUT_OF_RANGE = 45 # TD arterial pressure out of range fault - ALARM_ID_TD_ARTERIAL_PRESSURE_SELF_TEST_FAILURE = 46 # TD arterial pressure self-test failure - ALARM_ID_TD_VENOUS_PRESSURE_LOW = 47 # TD venous pressure low - ALARM_ID_TD_VENOUS_PRESSURE_HIGH = 48 # TD venous pressure high - ALARM_ID_TD_VENOUS_PRESSURE_OUT_OF_RANGE = 49 # TD venous pressure out of range fault - ALARM_ID_TD_VENOUS_PRESSURE_SELF_TEST_FAILURE = 50 # TD venous pressure self-test failure - ALARM_ID_TD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE = 51 # TD set pressure offset is out or range fault - ALARM_ID_DD_D11_PUMP_SPEED_CONTROL_ERROR = 52 # DD concentrate pump D11_PUMP speed control error - ALARM_ID_DD_D10_PUMP_SPEED_CONTROL_ERROR = 53 # DD concentrate pump D10_PUMP speed control error - ALARM_ID_DD_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE = 54 # DD concentrate pumps hall sensor out of range - ALARM_ID_DD_CONCENTRATE_PUMP_FAULT = 55 # DD concentrate pump fault - ALARM_ID_DD_TEMPERATURE_SENSOR_OUT_OF_RANGE = 56 # DD temperature sensor out of range - ALARM_ID_DD_RTD_SENSORS_FPGA_FAULT = 57 # DD temperature sensors freshness timeout fault - ALARM_ID_AVAILABLE_58 = 58 # DD Available alarms - ALARM_ID_DD_BAROMETRIC_SENSOR_COEFFS_BAD_CRC = 59 # DD barometric sensor coefficients bad CRC - ALARM_ID_DD_D12_PUMP_RPM_OUT_OF_RANGE = 60 # DD fresh dialysate pump RPM out of range - ALARM_ID_DD_D12_PUMP_OFF_FAULT = 61 # DD fresh dialysate pump running when it is not commanded to run - ALARM_ID_DD_D12_PUMP_CURRENT_OUT_OF_RANGE = 62 # DD fresh dialysate pump current out of range - ALARM_ID_DD_D12_PUMP_DIRECTION_INVALID = 63 # DD fresh dialysate pump invalid direction - ALARM_ID_DD_D12_PUMP_DIRECTION_FPGA_FAULT = 64 # DD fresh dialysate pump direction error count FPGA fault - ALARM_ID_DD_D48_PUMP_RPM_OUT_OF_RANGE = 65 # DD spent dialysate pump RPM out of range - ALARM_ID_DD_D48_PUMP_OFF_FAULT = 66 # DD spent dialysate pump running when it is not commanded to run - ALARM_ID_DD_D48_PUMP_CURRENT_OUT_OF_RANGE = 67 # DD spent dialysate pump current out of range - ALARM_ID_DD_D48_PUMP_DIRECTION_INVALID = 68 # DD spent dialysate pump invalid direction - ALARM_ID_DD_D48_PUMP_DIRECTION_FPGA_FAULT = 69 # DD spent dialysate pump direction error count FPGA fault - ALARM_ID_DD_FLUID_TOO_LOW_WHILE_D5_HEAT_IS_ON = 70 # DD primary heater is On when no fluid is present - ALARM_ID_DD_FLUID_TOO_LOW_WHILE_D45_HEAT_IS_ON = 71 # DD trimmer heater is On when no fluid is present - ALARM_ID_TD_BAROMETRIC_SENSOR_COEFFS_BAD_CRC = 72 # TD barometric sensor coefficients bad CRC - ALARM_ID_TD_BARO_PRESSURE_OUT_OF_RANGE = 73 # TD barometric sensor pressure out of range - ALARM_ID_DD_D76_PUMP_SPEED_CONTROL_ERROR = 74 # DD UF pump speed control error - ALARM_ID_DD_SC_STATE1_FILL_START_PRESSURE_OUT_OF_RANGE = 75 # DD spent chamber state 1 fill pressure out of range - ALARM_ID_DD_SC_STATE2_FILL_START_PRESSURE_OUT_OF_RANGE = 76 # DD spent chamber state 2 fill pressure out of range - ALARM_ID_DD_SC_FILL_TIMEOUT_FAULT = 77 # DD spent chamber fill timeout fault - ALARM_ID_TD_AIR_TRAP_FILL_TIMEOUT = 78 # TD air trap fill timeout - ALARM_ID_TD_AIR_TRAP_ILLEGAL_LEVELS = 79 # TD air trap illegal levels - ALARM_ID_TD_PINCH_VALVE_FAULT = 80 # TD pinch valve fault - ALARM_ID_TD_VALVE_HOMING_FAILED = 81 # TD pinch valve homing fault - ALARM_ID_TD_VALVE_TRANSITION_TIMEOUT = 82 # TD pinch valve transition timeout - ALARM_ID_FP_CAN_MESSAGE_NOT_ACKED_BY_DD = 83 # FP can message not acked by DD fault - ALARM_ID_FP_FPGA_COMM_TIMEOUT = 84 # FP FPGA communication timeout - ALARM_ID_FP_COMM_TOO_MANY_BAD_CRCS = 85 # FP too many bad crcs - ALARM_ID_FP_VALVE_CONTROL_FAILURE = 86 # FP valve control failure - ALARM_ID_DD_BC_STATE1_FILL_START_PRESSURE_OUT_OF_RANGE = 87 # DD balance chamber state1 fill start pressure not in range - ALARM_ID_DD_BC_STATE1_FILL_END_PRESSURE_OUT_OF_RANGE = 88 # DD balance chamber state1 fill end pressure not in range - ALARM_ID_DD_BC_STATE2_FILL_START_PRESSURE_OUT_OF_RANGE = 89 # DD balance chamber state2 fill start pressure not in range - ALARM_ID_DD_BC_STATE2_FILL_END_PRESSURE_OUT_OF_RANGE = 90 # DD balance chamber state2 fill end pressure not in range - ALARM_ID_DD_GEND_HYD_CHAMBER_PRESS_OUT_OF_RANGE = 91 # DD generate dialysate hydraulics chamber ngative pressure out of range - ALARM_ID_DD_BICARB_FILL_TIMEOUT_FAULT = 92 # DD spent chamber fill timeout fault - ALARM_ID_DD_D79_RINSE_PUMP_SPEED_OUT_OF_RANGE = 93 # DD D79 rinse pump commanded vs measured speed out of tolerance - ALARM_ID_DD_BC_STATE1_FILL_PRESSURE_DROP_OUT_OF_RANGE = 94 # DD balance chamber state1 fill initiated and pressure drop is not in range - ALARM_ID_DD_BC_STATE2_FILL_PRESSURE_DROP_OUT_OF_RANGE = 95 # DD balance chamber state2 fill initiated and pressure drop is not in range - ALARM_ID_TD_TREATMENT_STOPPED_BY_USER = 96 # TD treatment paused by user - ALARM_ID_DD_D74_COND_SENSOR_FPGA_FAULT = 97 # DD D74 bicarb conductivity sensor freshness/error timeout fault - ALARM_ID_TD_BLOOD_SITTING_WARNING = 98 # TD blood sitting too long warning - ALARM_ID_TD_BLOOD_SITTING_TOO_LONG = 99 # TD blood sitting too long alarm; no resume; no rinseback - # Added 30 TD-UI Alarms +1 TD only from 100 to 130 with some reserved IDs - ALARM_ID_TD_COMM_TIMEOUT = 100 # TD communication timeout - ALARM_ID_UI_POST_FAILURE_OS_VERSION = 101 # UI POST OS version compatibility failure - ALARM_ID_UI_POST_FAILURE_SHASUM = 102 # UI POST Application Integrity (Sha256Sum) failure - ALARM_ID_UI_POST_FAILURE_CANBUS = 103 # UI POST CANBus failure - ALARM_ID_UI_POST_FAILURE_DISPLAY = 104 # UI POST Display failure - ALARM_ID_UI_POST_FAILURE_TOUCH = 105 # UI POST Touch failure - ALARM_ID_UI_POST_FAILURE_SDCARD = 106 # UI POST SD-Card failure - ALARM_ID_UI_POST_FAILURE_RTC = 107 # UI POST RTC failure - ALARM_ID_UI_POST_FAILURE_WIFI = 108 # UI POST WiFi failure - ALARM_ID_UI_POST_FAILURE_BLUETOOTH = 109 # UI POST Bluetooth failure - ALARM_ID_UI_POST_FAILURE_ETHERNET = 110 # UI POST Ethernet failure - ALARM_ID_UI_POST_FAILURE_SOUND = 111 # UI POST Sound failure - ALARM_ID_UI_POST_FAILURE_CLOUDSYNC = 112 # UI POST CloudSync failure - ALARM_ID_UI_POST_FAILURE_INVALID_YEAR = 113 # UI POST Year check failure - ALARM_ID_UI_POST_FAILURE_SETTINGS_BAD = 114 # UI POST Configuration check failure - ALARM_ID_UI_EVNT_FAILURE_SDCARD = 115 # UI EVNT SD-Card failure - ALARM_ID_UI_RESERVED_116 = 116 # UI Reserved failure - ALARM_ID_UI_RESERVED_117 = 117 # UI Reserved failure - ALARM_ID_UI_RESERVED_118 = 118 # UI Reserved failure - ALARM_ID_UI_RESERVED_119 = 119 # UI Reserved failure - ALARM_ID_UI_RESERVED_120 = 120 # UI Reserved failure - ALARM_ID_UI_RESERVED_121 = 121 # UI Reserved failure - ALARM_ID_UI_RESERVED_122 = 122 # UI Reserved failure - ALARM_ID_UI_RESERVED_123 = 123 # UI Reserved failure - ALARM_ID_UI_RESERVED_124 = 124 # UI Reserved failure - ALARM_ID_UI_RESERVED_125 = 125 # UI Reserved failure - ALARM_ID_UI_RESERVED_126 = 126 # UI Reserved failure - ALARM_ID_UI_RESERVED_127 = 127 # UI Reserved failure - ALARM_ID_UI_RESERVED_128 = 128 # UI Reserved failure - ALARM_ID_UI_RESERVED_129 = 129 # UI Reserved failure - ALARM_ID_UI_RESERVED_130 = 130 # UI Reserved failure - ALARM_ID_BATTERY_LOW = 131 # TD Battery Low warning - ALARM_ID_DD_DIALYSATE_TEMP_ABOVE_SAFETY_TEMP = 132 # DD dialysate temperature above safety - ALARM_ID_DD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP = 133 # DD dialysate temperature high - ALARM_ID_DD_DIALYSATE_TEMP_BELOW_TARGET_TEMP = 134 # DD dialysate temperature low - ALARM_ID_FP_PRESSURE_RELIEF_OUT_LOW_RANGE = 135 # FP Pressure relief valve low - ALARM_ID_FP_PRESSURE_RELIEF_OUT_HIGH_RANGE = 136 # FP Pressure relief valve high - ALARM_ID_FP_POWER_BUDGET_OUT_OF_RANGE = 137 # FP Power budget exceeded - ALARM_ID_FP_FLOW_RATE_LOW_RANGE = 138 # FP flow rate low - ALARM_ID_FP_INLET_TEMPERATURE_OUT_LOW_RANGE = 139 # FP inlet water temperature low - ALARM_ID_FP_INLET_TEMPERATURE_OUT_HIGH_RANGE = 140 # FP inlet water temperature high - ALARM_ID_FP_INLET_PRESSURE_OUT_LOW_RANGE = 141 # FP inlet pressure low - ALARM_ID_FP_INLET_PRESSURE_OUT_HIGH_RANGE = 142 # FP inlet pressure high - ALARM_ID_FP_INLET_CONDUCTIVITY_OUT_HIGH_RANGE = 143 # FP inlet conductivity high - ALARM_ID_FP_INLET_CONDUCTIVITY_OUT_LOW_RANGE = 144 # FP inlet conductivty low - ALARM_ID_FP_RO_INLET_PRESSURE_OUT_HIGH_RANGE = 145 # FP pump inlet pressure high - ALARM_ID_FP_RO_OUTLET_CONDUCTIVITY_HIGH_RANGE = 146 # FP pump outlet conductivity high - ALARM_ID_FP_RO_INLET_CONDUCTIVITY_HIGH_RANGE = 147 # FP pump inlet conductivity high - ALARM_ID_FP_REJECTION_RATIO_LOW_RANGE = 148 # FP rejection ratio low - ALARM_ID_FP_INLET_PRESSURE_REGULATOR_OUT_OF_RANGE = 149 # FP inlet pressure regulator out of range - ALARM_ID_FP_INLET_TEMPERATURE_OUT_CRITICAL_RANGE = 150 # FP inlet temperature above 40C during filters flush - ALARM_ID_FP_PERMEATE_FLUSH_CONDUCTIVITY_TIMEOUT = 151 # FP membrane flush timeout - ALARM_ID_FP_CONCENTRATE_FLUSH_TANK_FULL_TIMEOUT = 152 # FP concentrate flush tank full timeout - ALARM_ID_FP_GEN_PERMEATE_TANK_FULL_TIMEOUT = 153 # FP tank full time out alarm - ALARM_ID_DD_DIALYSATE_TEMPERATURE_SENSORS_OUT_OF_RANGE = 154 # DD dialysate temperature sensors out of range - ALARM_ID_DD_BLOOD_LEAK_DETECTED = 155 # DD blood leak detected - ALARM_ID_DD_BLOOD_LEAK_INVALID_CAL_RECORD = 156 # DD blood leak invalid calibration record - ALARM_ID_DD_BLOOD_LEAK_SENSOR_EMBEDDED_MODE_FAILURE = 157 # DD blood leak sensor embedded mode failure - ALARM_ID_DD_BLOOD_LEAK_SENSOR_SET_POINT_SET_FAILURE = 158 # DD blood leak sensor set point failure - ALARM_ID_DD_BLOOD_LEAK_RECOVERING_PLEASE_WAIT = 159 # DD blood leak sensor recovering please wait - ALARM_ID_FP_GEN_PERMEATE_TANK_FILL_TIMEOUT = 160 # FP tank fill time out alarm. - ALARM_ID_FP_INLET_PRESSURE_CRITICAL_OUT_RANGE = 161 # FP inlet pressure high fault - ALARM_ID_FP_PERMEATE_FLOW_OUT_HIGH_RANGE = 162 # FP permeate flow high fault - ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE = 163 # FP permeate flow low fault - ALARM_ID_FP_INLET_PRESSURE_LOW_RANGE = 164 # FP inlet pressure low fault - ALARM_ID_TD_AIR_TRAP_LOWER_TIMEOUT = 165 # TD air trap lower timeout - NUM_OF_ALARM_IDS = 166 # Number of alarms - - + ALARM_ID_NO_ALARM = 0 # Indication for when no alarms is a possible situation + ALARM_ID_TD_SOFTWARE_FAULT = 1 # TD Software fault. Software found itself in an unexpected state + ALARM_ID_DD_SOFTWARE_FAULT = 2 # DD software fault. Software found itself in an unexpected state + ALARM_ID_FP_SOFTWARE_FAULT = 3 # FP software fault. Software found itself in an unexpected state + ALARM_ID_TD_FPGA_POST_TEST_FAILED = 4 # TD FPGA POST failure + ALARM_ID_TD_WATCHDOG_POST_TEST_FAILED = 5 # TD Watchdog POST failure + ALARM_ID_TD_UI_COMM_POST_FAILED = 6 # TD UI communication POST failure. UI failed to communicate within a reasonable time after power up + ALARM_ID_TD_FPGA_CLOCK_SPEED_CHECK_FAILURE = 7 # TD processor clock speed checks against FPGA clock failure + ALARM_ID_TD_FPGA_COMM_TIMEOUT = 8 # TD FPGA communication down for too long + ALARM_ID_TD_UI_COMM_TIMEOUT = 9 # TD UI communication timeout + ALARM_ID_TD_DD_COMM_TIMEOUT = 10 # TD DD communication timeout + ALARM_ID_TD_COMM_TOO_MANY_BAD_CRCS = 11 # TD too many bad communications CRC + ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_UI = 12 # TD didn't get ACK on message to UI that required acknowledgment + ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_DD = 13 # TD didn't get ACK on message to DD that required acknowledgment + ALARM_ID_TD_CRITICAL_DATA_ERROR = 14 # TD critical data integrity check failed + ALARM_ID_DD_CRITICAL_DATA_ERROR = 15 # DD critical data integrity check failed + ALARM_ID_TD_WATCHDOG_EXPIRED = 16 # TD watchdog expired + ALARM_ID_DD_WATCHDOG_EXPIRED = 17 # DD watchdog expired + ALARM_ID_DD_COMM_TOO_MANY_BAD_CRCS = 18 # DD too many bad communications CRC + ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_FP = 19 # DD didn't get ACK on message to FP that required acknowledgment + ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_TD = 20 # DD didn't get ACK on message to TD that required acknowledgment + ALARM_ID_DD_FPGA_POST_TEST_FAILED = 21 # DD FPGA POST failure + ALARM_ID_DD_FPGA_CLOCK_SPEED_CHECK_FAILURE = 22 # DD processor clock speed checks against FPGA clock failure + ALARM_ID_DD_FPGA_COMM_TIMEOUT = 23 # DD FPGA communication down for too long + ALARM_ID_TD_ALARM_AUDIO_SELF_TEST_FAILURE = 24 # TD alarm audio failed POST + ALARM_ID_DD_VALVE_CONTROL_FAILURE = 25 # DD FPGA not accepting commanded valve states + ALARM_ID_TD_ARTERIAL_SENSOR_TIMEOUT_FAULT = 26 # TD arterial pressure sensor freshness/error timeout fault + ALARM_ID_TD_VENOUS_SENSOR_TIMEOUT_FAULT = 27 # TD venous pressure sensor freshness/error timeout fault + ALARM_ID_TD_TMP_PRESSURE_LOW = 28 # TD TMP pressure low + ALARM_ID_TD_TMP_PRESSURE_HIGH = 29 # TD TMP pressure high + ALARM_ID_TD_VENOUS_BUBBLE_SELF_TEST_FAILURE = 30 # TD venous bubble self-test failure. + ALARM_ID_TD_BLOOD_PRIME_PAUSE_WARNING = 31 # TD blood prime pause warning + ALARM_ID_TD_BLOOD_PRIME_PAUSE_TIMEOUT = 32 # TD blood prime pause timeout + ALARM_ID_TD_VOLTAGE_OUT_OF_RANGE = 33 # TD voltage out of range fault + ALARM_ID_TD_AC_POWER_LOST = 34 # TD AC power lost + ALARM_ID_TD_AC_POWER_LOST_IN_TREATMENT = 35 # TD AC power lost during treatment + ALARM_ID_DD_D17_COND_SENSOR_FPGA_FAULT = 36 # DD CD1 conductivity sensor freshness/error timeout fault + ALARM_ID_DD_D27_COND_SENSOR_FPGA_FAULT = 37 # DD CD2 conductivity sensor freshness/error timeout fault + ALARM_ID_DD_D29_COND_SENSOR_FPGA_FAULT = 38 # DD CD3 conductivity sensor freshness/error timeout fault + ALARM_ID_DD_D43_COND_SENSOR_FPGA_FAULT = 39 # DD CD4 conductivity sensor freshness/error timeout fault + ALARM_ID_TD_VENOUS_BUBBLE_DETECTED = 40 # TD venous bubble detected + ALARM_ID_TD_CARTRIDGE_DOOR_OPENED = 41 # TD front door open + ALARM_ID_TD_STUCK_BUTTON_TEST_FAILED = 42 # TD stuck button self test failure + ALARM_ID_TD_ARTERIAL_PRESSURE_LOW = 43 # TD arterial pressure low + ALARM_ID_TD_ARTERIAL_PRESSURE_HIGH = 44 # TD arterial pressure high + ALARM_ID_TD_ARTERIAL_PRESSURE_OUT_OF_RANGE = 45 # TD arterial pressure out of range fault + ALARM_ID_TD_ARTERIAL_PRESSURE_SELF_TEST_FAILURE = 46 # TD arterial pressure self-test failure + ALARM_ID_TD_VENOUS_PRESSURE_LOW = 47 # TD venous pressure low + ALARM_ID_TD_VENOUS_PRESSURE_HIGH = 48 # TD venous pressure high + ALARM_ID_TD_VENOUS_PRESSURE_OUT_OF_RANGE = 49 # TD venous pressure out of range fault + ALARM_ID_TD_VENOUS_PRESSURE_SELF_TEST_FAILURE = 50 # TD venous pressure self-test failure + ALARM_ID_TD_PRE_TREATMENT_DRY_PRESSURE_TEST_FAILURE = 51 # TD set pressure offset is out or range fault + ALARM_ID_DD_D11_PUMP_SPEED_CONTROL_ERROR = 52 # DD concentrate pump D11_PUMP speed control error + ALARM_ID_DD_D10_PUMP_SPEED_CONTROL_ERROR = 53 # DD concentrate pump D10_PUMP speed control error + ALARM_ID_DD_CONC_PUMP_HALL_SENSOR_OUT_OF_RANGE = 54 # DD concentrate pumps hall sensor out of range + ALARM_ID_DD_CONCENTRATE_PUMP_FAULT = 55 # DD concentrate pump fault + ALARM_ID_DD_TEMPERATURE_SENSOR_OUT_OF_RANGE = 56 # DD temperature sensor out of range + ALARM_ID_DD_RTD_SENSORS_FPGA_FAULT = 57 # DD temperature sensors freshness timeout fault + ALARM_ID_DD_BC_FILL_TIMEOUT_FAULT = 58 # DD balancing chamber fill timeout fault + ALARM_ID_DD_BAROMETRIC_SENSOR_COEFFS_BAD_CRC = 59 # DD barometric sensor coefficients bad CRC + ALARM_ID_DD_D12_PUMP_RPM_OUT_OF_RANGE = 60 # DD fresh dialysate pump RPM out of range + ALARM_ID_DD_D12_PUMP_OFF_FAULT = 61 # DD fresh dialysate pump running when it is not commanded to run + ALARM_ID_DD_D12_PUMP_CURRENT_OUT_OF_RANGE = 62 # DD fresh dialysate pump current out of range + ALARM_ID_DD_D12_PUMP_DIRECTION_INVALID = 63 # DD fresh dialysate pump invalid direction + ALARM_ID_DD_D12_PUMP_DIRECTION_FPGA_FAULT = 64 # DD fresh dialysate pump direction error count FPGA fault + ALARM_ID_DD_D48_PUMP_RPM_OUT_OF_RANGE = 65 # DD spent dialysate pump RPM out of range + ALARM_ID_DD_D48_PUMP_OFF_FAULT = 66 # DD spent dialysate pump running when it is not commanded to run + ALARM_ID_DD_D48_PUMP_CURRENT_OUT_OF_RANGE = 67 # DD spent dialysate pump current out of range + ALARM_ID_DD_D48_PUMP_DIRECTION_INVALID = 68 # DD spent dialysate pump invalid direction + ALARM_ID_DD_D48_PUMP_DIRECTION_FPGA_FAULT = 69 # DD spent dialysate pump direction error count FPGA fault + ALARM_ID_DD_FLUID_TOO_LOW_WHILE_D5_HEAT_IS_ON = 70 # DD primary heater is On when no fluid is present + ALARM_ID_DD_FLUID_TOO_LOW_WHILE_D45_HEAT_IS_ON = 71 # DD trimmer heater is On when no fluid is present + ALARM_ID_TD_BAROMETRIC_SENSOR_COEFFS_BAD_CRC = 72 # TD barometric sensor coefficients bad CRC + ALARM_ID_TD_BARO_PRESSURE_OUT_OF_RANGE = 73 # TD barometric sensor pressure out of range + ALARM_ID_DD_D76_PUMP_SPEED_CONTROL_ERROR = 74 # DD UF pump speed control error + ALARM_ID_DD_SC_STATE1_FILL_START_PRESSURE_OUT_OF_RANGE = 75 # DD spent chamber state 1 fill pressure out of range + ALARM_ID_DD_SC_STATE2_FILL_START_PRESSURE_OUT_OF_RANGE = 76 # DD spent chamber state 2 fill pressure out of range + ALARM_ID_DD_SC_FILL_TIMEOUT_FAULT = 77 # DD spent chamber fill timeout fault + ALARM_ID_TD_AIR_TRAP_FILL_TIMEOUT = 78 # TD air trap fill timeout + ALARM_ID_TD_AIR_TRAP_ILLEGAL_LEVELS = 79 # TD air trap illegal levels + ALARM_ID_TD_PINCH_VALVE_FAULT = 80 # TD pinch valve fault + ALARM_ID_TD_VALVE_HOMING_FAILED = 81 # TD pinch valve homing fault + ALARM_ID_TD_VALVE_TRANSITION_TIMEOUT = 82 # TD pinch valve transition timeout + ALARM_ID_FP_CAN_MESSAGE_NOT_ACKED_BY_DD = 83 # FP can message not acked by DD fault + ALARM_ID_FP_FPGA_COMM_TIMEOUT = 84 # FP FPGA communication timeout + ALARM_ID_FP_COMM_TOO_MANY_BAD_CRCS = 85 # FP too many bad crcs + ALARM_ID_FP_VALVE_CONTROL_FAILURE = 86 # FP valve control failure + ALARM_ID_DD_BC_STATE1_FILL_START_PRESSURE_OUT_OF_RANGE = 87 # DD balance chamber state1 fill start pressure not in range + ALARM_ID_DD_AVAILABLE_1 = 88 # Available alarm ID 1 + ALARM_ID_DD_BC_STATE2_FILL_START_PRESSURE_OUT_OF_RANGE = 89 # DD balance chamber state2 fill start pressure not in range + ALARM_ID_DD_AVAILABLE_2 = 90 # Available alarm ID 2 + ALARM_ID_DD_GEND_HYD_CHAMBER_PRESS_OUT_OF_RANGE = 91 # DD generate dialysate hydraulics chamber ngative pressure out of range + ALARM_ID_DD_BICARB_FILL_TIMEOUT_FAULT = 92 # DD spent chamber fill timeout fault + ALARM_ID_DD_D79_RINSE_PUMP_SPEED_OUT_OF_RANGE = 93 # DD D79 rinse pump commanded vs measured speed out of tolerance + ALARM_ID_DD_BC_STATE1_FILL_PRESSURE_DROP_OUT_OF_RANGE = 94 # DD balance chamber state1 fill initiated and pressure drop is not in range + ALARM_ID_DD_BC_STATE2_FILL_PRESSURE_DROP_OUT_OF_RANGE = 95 # DD balance chamber state2 fill initiated and pressure drop is not in range + ALARM_ID_TD_TREATMENT_STOPPED_BY_USER = 96 # TD treatment paused by user + ALARM_ID_DD_D74_COND_SENSOR_FPGA_FAULT = 97 # DD D74 bicarb conductivity sensor freshness/error timeout fault + ALARM_ID_TD_BLOOD_SITTING_WARNING = 98 # TD blood sitting too long warning + ALARM_ID_TD_BLOOD_SITTING_TOO_LONG = 99 # TD blood sitting too long alarm; no resume; no rinseback + ALARM_ID_TD_COMM_TIMEOUT = 100 # TD communication timeout + ALARM_ID_UI_POST_FAILURE_OS_VERSION = 101 # UI POST OS version compatibility failure + ALARM_ID_UI_POST_FAILURE_SHASUM = 102 # UI POST Application Integrity (Sha256Sum) failure + ALARM_ID_UI_POST_FAILURE_CANBUS = 103 # UI POST CANBus failure + ALARM_ID_UI_POST_FAILURE_DISPLAY = 104 # UI POST Display failure + ALARM_ID_UI_POST_FAILURE_TOUCH = 105 # UI POST Touch failure + ALARM_ID_UI_POST_FAILURE_SDCARD = 106 # UI POST SD-Card failure + ALARM_ID_UI_POST_FAILURE_RTC = 107 # UI POST RTC failure + ALARM_ID_UI_POST_FAILURE_WIFI = 108 # UI POST WiFi failure + ALARM_ID_UI_POST_FAILURE_BLUETOOTH = 109 # UI POST Bluetooth failure + ALARM_ID_UI_POST_FAILURE_ETHERNET = 110 # UI POST Ethernet failure + ALARM_ID_UI_POST_FAILURE_SOUND = 111 # UI POST Sound failure + ALARM_ID_UI_POST_FAILURE_CLOUDSYNC = 112 # UI POST CloudSync failure + ALARM_ID_UI_POST_FAILURE_INVALID_YEAR = 113 # UI POST Year check failure + ALARM_ID_UI_POST_FAILURE_SETTINGS_BAD = 114 # UI POST Configuration check failure + ALARM_ID_UI_EVNT_FAILURE_SDCARD = 115 # UI EVNT SD-Card failure + ALARM_ID_UI_RESERVED_116 = 116 # UI Reserved failure + ALARM_ID_UI_RESERVED_117 = 117 # UI Reserved failure + ALARM_ID_UI_RESERVED_118 = 118 # UI Reserved failure + ALARM_ID_UI_RESERVED_119 = 119 # UI Reserved failure + ALARM_ID_UI_RESERVED_120 = 120 # UI Reserved failure + ALARM_ID_UI_RESERVED_121 = 121 # UI Reserved failure + ALARM_ID_UI_RESERVED_122 = 122 # UI Reserved failure + ALARM_ID_UI_RESERVED_123 = 123 # UI Reserved failure + ALARM_ID_UI_RESERVED_124 = 124 # UI Reserved failure + ALARM_ID_UI_RESERVED_125 = 125 # UI Reserved failure + ALARM_ID_UI_RESERVED_126 = 126 # UI Reserved failure + ALARM_ID_UI_RESERVED_127 = 127 # UI Reserved failure + ALARM_ID_UI_RESERVED_128 = 128 # UI Reserved failure + ALARM_ID_UI_RESERVED_129 = 129 # UI Reserved failure + ALARM_ID_UI_RESERVED_130 = 130 # UI Reserved failure + ALARM_ID_BATTERY_LOW = 131 # TD Battery Low warning + ALARM_ID_DD_DIALYSATE_TEMP_ABOVE_SAFETY_TEMP = 132 # DD dialysate temperature above safety + ALARM_ID_DD_DIALYSATE_TEMP_ABOVE_TARGET_TEMP = 133 # DD dialysate temperature high + ALARM_ID_DD_DIALYSATE_TEMP_BELOW_TARGET_TEMP = 134 # DD dialysate temperature low + ALARM_ID_FP_PRESSURE_RELIEF_OUT_LOW_RANGE = 135 # FP Pressure relief valve low + ALARM_ID_FP_PRESSURE_RELIEF_OUT_HIGH_RANGE = 136 # FP Pressure relief valve high + ALARM_ID_FP_POWER_BUDGET_OUT_OF_RANGE = 137 # FP Power budget exceeded + ALARM_ID_FP_FLOW_RATE_LOW_RANGE = 138 # FP flow rate low + ALARM_ID_FP_INLET_TEMPERATURE_OUT_LOW_RANGE = 139 # FP inlet water temperature low + ALARM_ID_FP_INLET_TEMPERATURE_OUT_HIGH_RANGE = 140 # FP inlet water temperature high + ALARM_ID_FP_INLET_PRESSURE_OUT_LOW_RANGE = 141 # FP inlet pressure low + ALARM_ID_FP_INLET_PRESSURE_OUT_HIGH_RANGE = 142 # FP inlet pressure high + ALARM_ID_FP_INLET_CONDUCTIVITY_OUT_HIGH_RANGE = 143 # FP inlet conductivity high + ALARM_ID_FP_INLET_CONDUCTIVITY_OUT_LOW_RANGE = 144 # FP inlet conductivty low + ALARM_ID_FP_RO_INLET_PRESSURE_OUT_HIGH_RANGE = 145 # FP pump inlet pressure high + ALARM_ID_FP_RO_OUTLET_CONDUCTIVITY_HIGH_RANGE = 146 # FP pump outlet conductivity high + ALARM_ID_FP_RO_INLET_CONDUCTIVITY_HIGH_RANGE = 147 # FP pump inlet conductivity high + ALARM_ID_FP_REJECTION_RATIO_LOW_RANGE = 148 # FP rejection ratio low + ALARM_ID_FP_INLET_PRESSURE_REGULATOR_OUT_OF_RANGE = 149 # FP inlet pressure regulator out of range + ALARM_ID_FP_INLET_TEMPERATURE_OUT_CRITICAL_RANGE = 150 # FP inlet temperature above 40C during filters flush + ALARM_ID_FP_PERMEATE_FLUSH_CONDUCTIVITY_TIMEOUT = 151 # FP membrane flush timeout + ALARM_ID_FP_CONCENTRATE_FLUSH_TANK_FULL_TIMEOUT = 152 # FP concentrate flush tank full timeout + ALARM_ID_FP_GEN_PERMEATE_TANK_FULL_TIMEOUT = 153 # FP tank full time out alarm + ALARM_ID_DD_DIALYSATE_TEMPERATURE_SENSORS_OUT_OF_RANGE = 154 # DD dialysate temperature sensors out of range + ALARM_ID_DD_BLOOD_LEAK_DETECTED = 155 # DD blood leak detected + ALARM_ID_DD_BLOOD_LEAK_INVALID_CAL_RECORD = 156 # DD blood leak invalid calibration record + ALARM_ID_DD_BLOOD_LEAK_SENSOR_EMBEDDED_MODE_FAILURE = 157 # DD blood leak sensor embedded mode failure + ALARM_ID_DD_BLOOD_LEAK_SENSOR_SET_POINT_SET_FAILURE = 158 # DD blood leak sensor set point failure + ALARM_ID_DD_BLOOD_LEAK_RECOVERING_PLEASE_WAIT = 159 # DD blood leak sensor recovering please wait + ALARM_ID_FP_GEN_PERMEATE_TANK_FILL_TIMEOUT = 160 # FP tank fill time out alarm. + ALARM_ID_FP_INLET_PRESSURE_CRITICAL_OUT_RANGE = 161 # FP inlet pressure high fault + ALARM_ID_FP_PERMEATE_FLOW_OUT_HIGH_RANGE = 162 # FP permeate flow high fault + ALARM_ID_FP_PERMEATE_FLOW_OUT_LOW_RANGE = 163 # FP permeate flow low fault + ALARM_ID_FP_INLET_PRESSURE_LOW_RANGE = 164 # FP inlet pressure low fault + ALARM_ID_TD_AIR_TRAP_LOWER_TIMEOUT = 165 # TD air trap lower timeout + ALARM_ID_TD_SYRINGE_PUMP_SELF_TEST_FAILURE = 166 # TD syringe pump self-test failure alarm + ALARM_ID_TD_SYRINGE_PUMP_RUNNING_WHILE_BP_OFF_ERROR = 167 # TD syringe pump is running while the BP is off + ALARM_ID_TD_SYRINGE_PUMP_FPGA_ADC_FAULT = 168 # TD syringe pump ADC FPGA fault + ALARM_ID_TD_SYRINGE_PUMP_FAULT = 169 # TD syringe pump fault reported by FPGA + ALARM_ID_TD_SYRINGE_PUMP_DAC_WRITE_ERROR = 170 # TD syringe pump DAC write failure + ALARM_ID_TD_SYRINGE_PUMP_SPEED_ERROR = 171 # TD syringe pump speed check error + ALARM_ID_TD_SYRINGE_PUMP_VOLUME_ERROR = 172 # TD syringe pump volume check error + ALARM_ID_TD_SYRINGE_PUMP_OVER_TRAVEL_ERROR = 173 # TD syringe pump over travel error + ALARM_ID_TD_SYRINGE_PUMP_NOT_STOPPED_ERROR = 174 # TD syringe pump not stopped in off state error + ALARM_ID_TD_SYRINGE_PUMP_ENCODER_DIRECTION_ERROR = 175 # TD syringe pump direction (from encoder) error + ALARM_ID_TD_SYRINGE_PUMP_CONTROLLER_DIRECTION_ERROR = 176 # TD syringe pump direction (from controller) error + ALARM_ID_TD_SYRINGE_PUMP_SYRINGE_EMPTY = 177 # TD syringe empty alarm + ALARM_ID_TD_SYRINGE_PUMP_SYRINGE_REMOVED = 178 # TD syringe pump syringe removed alarm + ALARM_ID_TD_SYRINGE_PUMP_STALL = 179 # TD syringe pump stall alarm + ALARM_ID_TD_HEPARIN_FORCE_SENSOR_INVALID_CAL_RECORD = 180 # TD heparin force sensor invalid calibration record + ALARM_ID_TD_SYRINGE_DETECTED = 181 # TD syringe detected alarm + ALARM_ID_TD_SYRINGE_PUMP_NOT_ENOUGH_HEPARIN_ALARM = 182 # TD syringe pump not enough Heparin alarm + ALARM_ID_TD_SYRINGE_PUMP_OCCLUSION = 183 # TD syringe pump occlusion alarm + ALARM_ID_TD_SYRINGE_PUMP_PRIME_TIMEOUT = 184 # TD syringe pump prime timeout + ALARM_ID_FP_P9_COND_SENSOR_FPGA_FAULT = 185 # FP P9 conductivity sensor fpga fault + ALARM_ID_FP_P18_COND_SENSOR_FPGA_FAULT = 186 # FP P18 conductivity sensor fpga fault + ALARM_ID_TD_AUTO_LOAD_EJECT_BP_TIMEOUT = 187 # TD blood pump timeout during auto-load\eject operation + ALARM_ID_TD_AUTO_EJECT_EJECTOR_TIMEOUT = 188 # TD ejector failed to extend or retract during auto-eject operation + ALARM_ID_TD_EJECTOR_POST_TEST_FAILED = 189 # TD ejector POST homing failure + ALARM_ID_TD_AUTO_LOAD_EJECT_HIGH_BP_TORQUE = 190 # TD high blood pump torque during auto-load\eject operation + ALARM_ID_TD_AIR_PUMP_STALL = 191 # TD air pump stall detected + ALARM_ID_TD_INVALID_TUBING_SET = 192 # TD invalid tubing set + ALARM_ID_TD_INSTALL_NEW_BLOOD_TUBING_SET = 193 # TD install new blood tubing set + ALARM_ID_TD_TUBING_SET_NOT_DETECTED = 194 # TD no tubing set detected + ALARM_ID_TD_TUBING_SET_AUTHENTICATION_TIMEOUT = 195 # TD tubing set authentication timeout + ALARM_ID_TD_PRESSURE_TOO_HIGH_TO_ZERO = 196 # TD pressure too high to zero + ALARM_ID_TD_VENOUS_PRESSURIZATION_TIMEOUT = 197 # TD venous pressurization timeout + ALARM_ID_TD_VENOUS_PRESSURE_DECAY = 198 # TD venous pressure decay failure + ALARM_ID_TD_VENOUS_PRESSURE_LEAK = 199 # TD venous pressure leak + ALARM_ID_TD_VENOUS_PRESSURE_RELIEF = 200 # TD venous pressure relief failure + ALARM_ID_TD_ARTERIAL_PRESSURIZATION_TIMEOUT = 201 # TD arterial pressurization timeout + ALARM_ID_TD_ARTERIAL_PRESSURE_DECAY = 202 # TD arterial pressure decay failure + ALARM_ID_TD_ARTERIAL_PRESSURE_LEAK = 203 # TD arterial pressure leak + ALARM_ID_TD_ARTERIAL_PRESSURE_RELIEF = 204 # TD arterial pressure relief failure + NUM_OF_ALARM_IDS = 205 # Number of alarms \ No newline at end of file Index: leahi_dialin/td/modules/alarms.py =================================================================== diff -u -r1f2bf6d939eb4033dbedb7d7005494cc12fccbc6 -r155002a8a797c462b346dccf1abd47428230e16b --- leahi_dialin/td/modules/alarms.py (.../alarms.py) (revision 1f2bf6d939eb4033dbedb7d7005494cc12fccbc6) +++ leahi_dialin/td/modules/alarms.py (.../alarms.py) (revision 155002a8a797c462b346dccf1abd47428230e16b) @@ -146,6 +146,13 @@ self.ui_alarm_list_timestamp = 0.0 #: The timestamp of the last Alarm List + def get_active_alarms(self): + result = [] + for alarm in AlarmList: + if self.alarm_states[alarm.value]: + result.append(alarm) + return result + def clear_dialin_alarms(self): """ Clears the alarms states in Dialin. Index: leahi_dialin/td/proxies/ui_proxy.py =================================================================== diff -u -r1f2bf6d939eb4033dbedb7d7005494cc12fccbc6 -r155002a8a797c462b346dccf1abd47428230e16b --- leahi_dialin/td/proxies/ui_proxy.py (.../ui_proxy.py) (revision 1f2bf6d939eb4033dbedb7d7005494cc12fccbc6) +++ leahi_dialin/td/proxies/ui_proxy.py (.../ui_proxy.py) (revision 155002a8a797c462b346dccf1abd47428230e16b) @@ -431,3 +431,35 @@ override_text = 'N/A', logger = self.logger, can_interface = self.can_interface) + + + def cmd_send_ui_cartridge_install_confirm_response (self) -> None: + """ + Constructs and sends a UI response for confirming cartridge installation. + + :return: none + """ + cmd_generic_override(payload = None, + reset = None, + channel_id = DenaliChannels.ui_to_td_ch_id, + msg_id = MsgIds.MSG_ID_UI_ADJUST_DISPOSABLES_CONFIRM_REQUEST, + entity_name = 'UI Confirm Cartridge Installation response', + override_text = 'N/A', + logger = self.logger, + can_interface = self.can_interface) + + + def cmd_send_ui_cartridge_removal_confirm_response (self) -> None: + """ + Constructs and sends a UI response for confirming cartridge removal. + + :return: none + """ + cmd_generic_override(payload = None, + reset = None, + channel_id = DenaliChannels.ui_to_td_ch_id, + msg_id = MsgIds.MSG_ID_UI_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_REQUEST, + entity_name = 'UI Confirm Cartridge Removal response', + override_text = 'N/A', + logger = self.logger, + can_interface = self.can_interface) Index: leahi_dialin/td/treatment_delivery.py =================================================================== diff -u -r791907258a7a4c789451e62745ae6d96f3f0fd24 -r155002a8a797c462b346dccf1abd47428230e16b --- leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision 791907258a7a4c789451e62745ae6d96f3f0fd24) +++ leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision 155002a8a797c462b346dccf1abd47428230e16b) @@ -8,7 +8,7 @@ # @file treatment_delivery.py # # @author (last) Zoltan Miskolci -# @date (last) 08-Jan-2026 +# @date (last) 05-May-2026 # @author (original) Peter Lucia # @date (original) 02-Apr-2020 # @@ -41,11 +41,13 @@ from .proxies.ui_proxy import UIProxy from ..common.constants import NO_RESET -from ..common.msg_defs import MsgIds, MsgFieldPositions, MsgFieldPositionsFWVersions +from ..common.msg_defs import MsgIds, MsgFieldPositions from ..common import td_enum_repository +from ..common.generic_defs import DataTypes from ..common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override -from ..protocols.CAN import DenaliMessage, DenaliCanMessenger, DenaliChannels -from ..utils.base import AbstractSubSystem, publish, LogManager +from ..protocols.CAN import CanMessage, CanMessenger, CanChannels +from ..utils.abstract_classes import AbstractSubSystem +from ..utils.base import publish, LogManager from ..utils.conversions import integer_to_bytearray, bytearray_to_byte @@ -80,31 +82,28 @@ self.logger = self._log_manager.logger # Create listener - self.can_interface = DenaliCanMessenger(can_interface=can_interface, + self.can_interface = CanMessenger(can_interface=can_interface, logger=self.logger) self.can_interface.start() self.callback_id = None # register handler for TD operation mode broadcast messages if self.can_interface is not None: - channel_id = DenaliChannels.td_sync_broadcast_ch_id - self.msg_id_td_op_mode_data = MsgIds.MSG_ID_TD_OP_MODE_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_td_op_mode_data, - self._handler_td_op_mode_sync) + self.can_interface.register_receiving_publication_function(channel_id = CanChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_OP_MODE_DATA.value, + function = self._handler_td_op_mode_sync) - self.msg_id_td_debug_event = MsgIds.MSG_ID_TD_DEBUG_EVENT.value - self.can_interface.register_receiving_publication_function(channel_id, - self.msg_id_td_debug_event, - self._handler_td_debug_event_sync) + self.can_interface.register_receiving_publication_function(channel_id = CanChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_DEBUG_EVENT.value, + function = self._handler_td_debug_event_sync) - self.msg_id_td_version_response = MsgIds.MSG_ID_TD_VERSION_RESPONSE.value - self.can_interface.register_receiving_publication_function(channel_id, - self.msg_id_td_version_response, - self._handler_td_version_response_sync) + self.can_interface.register_receiving_publication_function(channel_id = CanChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_TD_VERSION_RESPONSE.value, + function = self._handler_td_version_response_sync) - self.msg_id_ui_version_info_response = MsgIds.MSG_ID_UI_VERSION_INFO_RESPONSE.value - self.can_interface.register_receiving_publication_function(DenaliChannels.ui_to_td_ch_id, - self.msg_id_ui_version_info_response, - self._handler_ui_version_response_sync) + self.can_interface.register_receiving_publication_function(channel_id = CanChannels.td_sync_broadcast_ch_id, + message_id = MsgIds.MSG_ID_UI_VERSION_INFO_RESPONSE.value, + function = self._handler_ui_version_response_sync) + # Dialin will send a login message during construction. This is for the leahi subsystems to start # publishing CAN data when there is no UI connected as the UI typically does this job. self.cmd_log_in_to_td() @@ -191,13 +190,12 @@ @param message: published TD operation mode broadcast message @return: None """ - mode = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) - smode = struct.unpack('i', bytearray( - message['message'][MsgFieldPositions.START_POS_FIELD_2:MsgFieldPositions.END_POS_FIELD_2])) + msg_list = [] + msg_list.append(('self.td_operation_mode', DataTypes.U32)) + msg_list.append(('self.td_operation_sub_mode', DataTypes.U32)) - self.td_operation_mode = mode[0] - self.td_operation_sub_mode = smode[0] + self.process_into_vars(decoder_list = msg_list, + message = message) self.td_op_mode_timestamp = timestamp @@ -210,33 +208,28 @@ @return: None if not successful, the version string if unpacked successfully """ - major = struct.unpack(' 0 for each in [major, minor, micro, build, compatibility]]): - self.td_version = f"v{major[0]}.{minor[0]}.{micro[0]}-{build[0]}.{compatibility[0]}" - self.logger.debug(f"TD VERSION: {self.td_version}") + result = self.process_into_vars(decoder_list = msg_list, + message = message) - if all([len(each) > 0 for each in [fpga_id, fpga_major, fpga_minor, fpga_lab]]): - self.td_fpga_version = f"v{fpga_id[0]}.{fpga_major[0]}.{fpga_minor[0]}-{fpga_lab[0]}" - self.logger.debug(f"TD FPGA VERSION: {self.td_fpga_version}") + if all([len(each) > 0 for each in [result['major'], result['minor'], result['micro'], result['build'], result['compatibility']]]): + self.td_version = f"v{result['major']}.{result['minor']}.{result['micro']}-{result['build']}.{result['compatibility']}" + self.logger.debug(f'TD VERSION: {self.td_version}') + if all([len(each) > 0 for each in [result['fpga_id'], result['fpga_major'], result['fpga_minor'], result['fpga_lab']]]): + self.td_fpga_version = f"v{result['fpga_id']}.{result['fpga_major']}.{result['fpga_minor']}-{result['fpga_lab']}" + self.logger.debug(f'TD FPGA VERSION: {self.td_fpga_version}') + self.td_version_response_timestamp = timestamp @@ -254,28 +247,24 @@ @return: None if not successful, the version string if unpacked successfully """ - major = struct.unpack(' 0 for each in [major, minor, micro, build, compatibility]]): - self.ui_version = f"v{major[0]}.{minor[0]}.{micro[0]}-{build[0]}.{compatibility[0]}" - self.logger.debug(f"UI VERSION: {self.ui_version}") - + if all([len(each) > 0 for each in [result['major'], result['minor'], result['micro'], result['build'], result['compatibility']]]): + self.ui_version = f"v{result['major']}.{result['minor']}.{result['micro']}-{result['build']}.{result['compatibility']}" + self.logger.debug(f'UI VERSION: {self.ui_version}') else: self.ui_version = None self.logger.debug("Failed to retrieve UI Version.") + self.ui_version_info_response_timestamp = timestamp - def cmd_op_mode_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the measured op mode broadcast interval override command @@ -290,7 +279,7 @@ return cmd_generic_broadcast_interval_override( ms = ms, reset = reset, - channel_id = DenaliChannels.dialin_to_td_ch_id, + channel_id = CanChannels.dialin_to_td_ch_id, msg_id = MsgIds.MSG_ID_TD_OP_MODE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, module_name = 'TD Operation Mode', logger = self.logger, @@ -305,7 +294,7 @@ @param resend: (bool) if False (default), try to login once. Otherwise, tries to login indefinitely @return: 1 if logged in, 0 if log in failed """ - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_td_ch_id, + message = CanMessage.build_message(channel_id=CanChannels.dialin_to_td_ch_id, message_id=MsgIds.MSG_ID_TD_TESTER_LOGIN_REQUEST.value, payload=list(map(int, map(ord, self.TD_LOGIN_PASSWORD)))) @@ -315,14 +304,14 @@ received_message = self.can_interface.send(message, resend=resend) if received_message is not None: - if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: + if received_message['message'][CanMessage.PAYLOAD_START_INDEX] == 1: self.logger.debug("Success: Logged In") self.td_set_logged_in_status(True) #self._send_td_checkin_message() # Timer starts interval first #self.can_interface.transmit_interval_dictionary[self.callback_id].start() else: self.logger.debug("Failure: Log In Failed.") - return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + return received_message['message'][CanMessage.PAYLOAD_START_INDEX] else: self.logger.debug("Login Timeout!!!!") return False @@ -353,7 +342,7 @@ return cmd_generic_override( payload = payload, reset = NO_RESET, - channel_id = DenaliChannels.dialin_to_td_ch_id, + channel_id = CanChannels.dialin_to_td_ch_id, msg_id = MsgIds.MSG_ID_TD_OP_MODE_OVERRIDE_REQUEST, entity_name = 'TD Operation Mode', override_text = td_enum_repository.TDOpModes(new_mode).name, @@ -372,7 +361,7 @@ resp = cmd_generic_override( payload = None, reset = NO_RESET, - channel_id = DenaliChannels.dialin_to_td_ch_id, + channel_id = CanChannels.dialin_to_td_ch_id, msg_id = MsgIds.MSG_ID_TD_SOFTWARE_RESET_REQUEST, entity_name = 'TD Software Reset', override_text = '', @@ -401,7 +390,7 @@ return cmd_generic_override( payload = payload, reset = NO_RESET, - channel_id = DenaliChannels.dialin_to_td_ch_id, + channel_id = CanChannels.dialin_to_td_ch_id, msg_id = MsgIds.MSG_ID_TD_SAFETY_SHUTDOWN_OVERRIDE_REQUEST, entity_name = 'TD Safety Shutdown', override_text = str(active), @@ -415,7 +404,7 @@ @return: none """ - message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_td_ch_id, + message = CanMessage.build_message(channel_id=CanChannels.dialin_to_td_ch_id, message_id=MsgIds.MSG_ID_TD_UI_VERSION_INFO_REQUEST.value) self.logger.debug("Sending an UI version request to the TD.") @@ -437,7 +426,7 @@ return cmd_generic_override( payload = payload, reset = reset, - channel_id = DenaliChannels.dialin_to_td_ch_id, + channel_id = CanChannels.dialin_to_td_ch_id, msg_id = MsgIds.MSG_ID_TD_TRAINING_TEST_OVERRIDE_REQUEST, entity_name = 'TD Training Test Override', override_text = str(value),