Index: dialin/common/hd_defs.py =================================================================== diff -u -r7ea4b936cef531b2cde9053ae58b7119a3bf0e6c -r945e735ddde4a49e00d30dbcedba4999cf5564bb --- dialin/common/hd_defs.py (.../hd_defs.py) (revision 7ea4b936cef531b2cde9053ae58b7119a3bf0e6c) +++ dialin/common/hd_defs.py (.../hd_defs.py) (revision 945e735ddde4a49e00d30dbcedba4999cf5564bb) @@ -99,17 +99,14 @@ class PreTreatmentNoCartSelfTestStates(DialinEnum): NO_CART_SELF_TESTS_START_STATE = 0 NO_CART_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE = 1 - NO_CART_SELF_TESTS_OCCLUSION_SENSORS_STATE = 2 - NO_CART_SELF_TESTS_BLOOD_FLOW_METERS_STATE = 3 - NO_CART_SELF_TESTS_DIALYSATE_FLOW_METERS_STATE = 4 - NO_CART_SELF_TESTS_PUMPS_STATE = 5 - NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE = 6 - NO_CART_SELF_TESTS_BOARD_TEMPERATURE_STATE = 7 - NO_CART_SELF_TESTS_DOOR_SWITCH_STATE = 8 - NO_CART_SELF_TESTS_HOME_VALVES_AND_PUMPS_STATE = 9 - NO_CART_SELF_TESTS_HOME_IDLE_STATE = 10 - NO_CART_SELF_TESTS_STOPPED_STATE = 11 - NO_CART_SELF_TESTS_COMPLETE_STATE = 12 + NO_CART_SELF_TESTS_PRESSURE_CHECKS_STATE = 2 + NO_CART_SELF_TESTS_PUMPS_STATE = 3 + NO_CART_SELF_TESTS_LEAK_DETECTORS_STATE = 4 + NO_CART_SELF_TESTS_DOOR_SWITCH_STATE = 5 + NO_CART_SELF_TESTS_HOME_VALVES_AND_PUMPS_STATE = 6 + NO_CART_SELF_TESTS_HOME_IDLE_STATE = 7 + NO_CART_SELF_TESTS_STOPPED_STATE = 8 + NO_CART_SELF_TESTS_COMPLETE_STATE = 9 @unique Index: dialin/dg/chemical_disinfect.py =================================================================== diff -u -r1bf1193409e2c8b723e52a2eabc6c532e0e64215 -r945e735ddde4a49e00d30dbcedba4999cf5564bb --- dialin/dg/chemical_disinfect.py (.../chemical_disinfect.py) (revision 1bf1193409e2c8b723e52a2eabc6c532e0e64215) +++ dialin/dg/chemical_disinfect.py (.../chemical_disinfect.py) (revision 945e735ddde4a49e00d30dbcedba4999cf5564bb) @@ -7,8 +7,8 @@ # # @file chemical_disinfect.py # -# @author (last) Quang Nguyen -# @date (last) 05-Aug-2021 +# @author (last) Dara Navaei +# @date (last) 14-Mar-2022 # @author (original) Dara Navaei # @date (original) 02-May-2021 # @@ -63,7 +63,7 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_chemical_disinfect_to_ui_sync) - @publish(["chemical_disinfect_count_down_time", "chemical_disinfect_elapsed_time"]) + @publish(["chemical_disinfect_elapsed_time", "chemical_disinfect_target_time"]) def _handler_chemical_disinfect_to_ui_sync(self, message): """ Handles published chemical disinfect message @@ -78,7 +78,7 @@ disinfect_elapsed_time, index = bytearray_to_integer(payload, index, False) self.chemical_disinfect_target_time = int(disinfect_target_time / 1000) - self.chemical_disinfect_count_down_time = int(disinfect_elapsed_time / 1000) + self.chemical_disinfect_elapsed_time = int(disinfect_elapsed_time / 1000) @publish(["chemical_disinfect_state", "overall_elapsed_time", "state_elapsed_time", "cancellation_mode", "r1_level", "r2_level", "target_post_rinse_count", "current_post_rinse_count", Index: dialin/hd/alarms.py =================================================================== diff -u -r7ea4b936cef531b2cde9053ae58b7119a3bf0e6c -r945e735ddde4a49e00d30dbcedba4999cf5564bb --- dialin/hd/alarms.py (.../alarms.py) (revision 7ea4b936cef531b2cde9053ae58b7119a3bf0e6c) +++ dialin/hd/alarms.py (.../alarms.py) (revision 945e735ddde4a49e00d30dbcedba4999cf5564bb) @@ -38,7 +38,7 @@ HD_ALARM_LAMP_PATTERN_LOW = 5 HD_ALARM_LAMP_PATTERN_MANUAL = 6 - # Alarm states + # Alarm priority states HD_ALARM_STATE_NONE = 0 HD_ALARM_STATE_LOW = 1 HD_ALARM_STATE_MEDIUM = 2 @@ -99,6 +99,12 @@ self.alarm_states = [False] * 500 # alarm condition states based on received HD alarm activation and clear condition messages self.alarm_conditions = [False] * 500 + # alarm priorities based on received HD alarm activation messages + self.alarm_priorities = [0] * 500 + # alarm ranks based on received HD alarm activation messages + self.alarm_ranks = [0] * 500 + # alarm clear top only properties based on received HD alarm activation messages + self.alarm_clr_top_only = [False] * 500 # alarm information self.alarm_volume = 0 @@ -107,9 +113,9 @@ self.alarm_backup_audio_curr = 0.0 self.safety_shutdown_active = False - def get_current_alarms_state(self): + def get_current_alarm_priority(self): """ - Gets the current alarms state. + Gets the current alarms priority state. None, Low, Medium, or High @return: (str) the current alarms state in text form. @@ -126,7 +132,7 @@ return result - def get_alarm_states(self): + def get_all_alarm_states(self): """ Gets all states for all alarms @@ -150,6 +156,30 @@ """ return self.alarm_states[alarm_id] + def get_alarm_priority(self, alarm_id): + """ + Gets alarm priority for given alarm + + @return: Alarm priority + """ + return self.alarm_priorities[alarm_id] + + def get_alarm_rank(self, alarm_id): + """ + Gets alarm rank for given alarm + + @return: Alarm rank + """ + return self.alarm_ranks[alarm_id] + + def get_alarm_clear_top_only(self, alarm_id): + """ + Gets clear top only property for given alarm + + @return: Clear top only property (T/F) + """ + return self.alarm_clr_top_only[alarm_id] + def get_alarms_top(self): """ Gets the top alarm @@ -186,14 +216,14 @@ No Resume = result & 8 No Rinseback = result & 16 No End Treatment = result & 32 - No New Treatment = result & 64 - User Must ACK = result & 128 + TBD = result & 64 + Ok Button Only = result & 128 Alarms to Escalate = result & 256 Alarms Silenced = result & 512 Alarm Lamp On = result & 1024 TBD = result & 2048 TBD = result & 4096 - TBD = result & 8192 + No Dialysate Recirc= result & 8192 No Minimize = result & 16384 Condition Detected = result & 32768 @@ -289,14 +319,30 @@ """ return (self.alarms_flags & 32) > 0 - def get_alarm_flag_no_new_treatment(self) -> bool: + def get_alarm_flag_okay_button_only(self) -> bool: """ - Gets the alarm flag no new treatment. + Gets the alarm flag Ok button only. - @return: (bool) Alarm flag no new treatment (T/F) + @return: (bool) Alarm flag Ok button only (T/F) """ - return (self.alarms_flags & 64) > 0 + return (self.alarms_flags & 128) > 0 + def get_alarm_flag_alarm_to_escalate(self) -> bool: + """ + Gets the alarm flag to escalate. + + @return: (bool) Alarm flag indicating an active alarm is due to escalate (T/F) + """ + return (self.alarms_flags & 256) > 0 + + def get_alarm_flag_is_alarm_silenced(self) -> bool: + """ + Gets the alarm flag alarm silence + + @return: (bool) Alarm flag indicating alarms are currently silenced (T/F) + """ + return (self.alarms_flags & 512) > 0 + def get_alarm_flag_lamp_on(self) -> bool: """ Gets the alarm flag lamp on. @@ -305,6 +351,14 @@ """ return (self.alarms_flags & 1024) > 0 + def get_alarm_flag_no_dialysate_recirculation(self) -> bool: + """ + Gets the alarm flag no dialysate recirculation. + + @return: (bool) Alarm flag indicating dialysate recirculation is disabled (T/F) + """ + return (self.alarms_flags & 8192) > 0 + def get_alarm_flag_no_minimize(self) -> bool: """ Gets the alarm flag no minimize. @@ -313,6 +367,15 @@ """ return (self.alarms_flags & 16384) > 0 + def get_alarm_flag_top_condition(self) -> bool: + """ + Gets the alarm flag top condition. + + @return: (bool) Top Alarm's condition is still being detected + """ + + return (self.alarms_flags & 32768) > 0 + def clear_dialin_alarms(self): """ Clears the alarms states in Dialin. @@ -331,8 +394,7 @@ @param message: published blood flow data message @return: none """ - - self.alarms_state = int.from_bytes(bytearray( + self.alarms_priority_state = int.from_bytes(bytearray( message['message'][self.START_POS_ALARM_STATE:self.END_POS_ALARM_STATE]), byteorder=DenaliMessage.BYTE_ORDER) self.alarm_top = int.from_bytes(bytearray( @@ -358,9 +420,15 @@ """ self.logger.debug("Alarm activated!") - alarm_id = struct.unpack(' None: + fpga_id: int, fpga_major: int, fpga_minor: int, fpga_lab: int, + compatibility_rev: int) -> None: """ + [0x1E00] # 30 0x080 Rsp Y DG All + DG f/w version + U08=Major + U08=Minor + U08=Micro + U16=Build + U08=FPGA ID + U08=FPGA Major + U08=FPGA Minor + U08=FPGA Lab + U32=compatibility rev + --- the dg version response message method - @param major: integer - Major version number - @param minor: integer - Minor version number - @param micro: integer - Micro version number - @param build: integer - Build version number - @param fpga_id: integer - FPGA id version number - @param fpga_major: integer - FPGA Major version number - @param fpga_minor: integer - FPGA Minor version number - @param fpga_lab: integer - FPGA Lab version number + @param major: (uint) - Major version number + @param minor: (uint) - Minor version number + @param micro: (uint) - Micro version number + @param build: (uint) - Build version number + @param fpga_id: (int) - FPGA id version number + @param fpga_major: (int) - FPGA Major version number + @param fpga_minor: (int) - FPGA Minor version number + @param fpga_lab: (int) - FPGA Lab version number + @param compatibility_rev: (uint) - The FWs/UI compatibility revision @return: None """ - payload = byte_to_bytearray(major) - payload += byte_to_bytearray(minor) - payload += byte_to_bytearray(micro) - payload += short_to_bytearray(build) - payload += byte_to_bytearray(fpga_id) - payload += byte_to_bytearray(fpga_major) - payload += byte_to_bytearray(fpga_minor) - payload += byte_to_bytearray(fpga_lab) + payload = unsigned_byte_to_bytearray(major) + payload += unsigned_byte_to_bytearray(minor) + payload += unsigned_byte_to_bytearray(micro) + payload += unsigned_short_to_bytearray(build) + payload += unsigned_byte_to_bytearray(fpga_id) + payload += unsigned_byte_to_bytearray(fpga_major) + payload += unsigned_byte_to_bytearray(fpga_minor) + payload += unsigned_byte_to_bytearray(fpga_lab) + payload += unsigned_integer_to_bytearray(compatibility_rev) message = DenaliMessage.build_message(channel_id=DenaliChannels.dg_sync_broadcast_ch_id, message_id=MsgIds.MSG_ID_DG_VERSION.value, @@ -591,7 +606,7 @@ has_parameters: bool = False, parameters_payload: any = 0x00) -> None: """ - a general method to send any standard response message, by it's id and list of paramters. + a general method to send any standard response message, by it's id and list of parameters. @param message_id: the id of the message @param accepted: the standard accepted parameter of any response message @param reason: the standard rejection reason parameter of any response message @@ -607,7 +622,7 @@ payload += integer_to_bytearray(reason) if has_parameters: - payload += parameters_payload + payload = parameters_payload message = DenaliMessage.build_message(channel_id=DenaliChannels.dg_to_ui_ch_id, message_id=message_id,