Index: leahi_dialin/common/msg_ids.py =================================================================== diff -u -r000435fa368dd45c129d30c5f1083c21cfe0e31c -rb0527bdf20a053b81f4c3771b2b31bb066c9a5a7 --- leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision 000435fa368dd45c129d30c5f1083c21cfe0e31c) +++ leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision b0527bdf20a053b81f4c3771b2b31bb066c9a5a7) @@ -287,6 +287,7 @@ MSG_ID_FP_BOOST_PUMP_TARGET_PWM_OVERRIDE_REQUEST = 0xB026 MSG_ID_FP_BOOST_PUMP_STOP_REQUEST = 0xB027 MSG_ID_FP_RO_PUMP_STOP_REQUEST = 0xB028 + MSG_ID_FP_SAFETY_SHUTDOWN_OVERRIDE_REQUEST = 0xB029 MSG_ID_TD_DEBUG_EVENT = 0xFFF1 MSG_ID_DD_DEBUG_EVENT = 0xFFF2 Index: leahi_dialin/dd/dialysate_delivery.py =================================================================== diff -u -rc587268b85d4b16b4102869d2841be84f3a2a23f -rb0527bdf20a053b81f4c3771b2b31bb066c9a5a7 --- leahi_dialin/dd/dialysate_delivery.py (.../dialysate_delivery.py) (revision c587268b85d4b16b4102869d2841be84f3a2a23f) +++ leahi_dialin/dd/dialysate_delivery.py (.../dialysate_delivery.py) (revision b0527bdf20a053b81f4c3771b2b31bb066c9a5a7) @@ -19,6 +19,7 @@ from .modules.balancing_chamber import DDBalancingChamber from .modules.concentrate_pump import DDConcentratePumps from .modules.conductivity_sensors import DDConductivitySensors +from .modules.constants import NO_RESET, RESET from .modules.dialysate_pump import DDDialysatePumps from .modules.gen_dialysate import DDGenDialysate from .modules.heaters import DDHeaters @@ -298,3 +299,37 @@ self.dd_set_logged_in_status(False) + def cmd_dd_safety_shutdown_override(self, active: int, reset: int = NO_RESET) -> int: + """ + Constructs and sends an DD safety shutdown override command via CAN bus. + Constraints: + Must be logged into DD. + + @param active: int - True to activate safety shutdown, False to deactivate + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + + """ + + rst = integer_to_bytearray(reset) + saf = integer_to_bytearray(active) + payload = rst + saf + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, + message_id=MsgIds.MSG_ID_DD_SAFETY_SHUTDOWN_OVERRIDE_REQUEST.value, + payload=payload) + + self.logger.debug("overriding FP safety shutdown") + + # Send message + received_message = self.can_interface.send(message) + + if received_message is not None: + if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: + self.logger.debug("Safety shutdown signal overridden") + else: + self.logger.debug("Safety shutdown signal override failed.") + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False \ No newline at end of file Index: leahi_dialin/fp/filtration_purification.py =================================================================== diff -u -r028086f4e594e25b8e693242fdce1cc41c8b0312 -rb0527bdf20a053b81f4c3771b2b31bb066c9a5a7 --- leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision 028086f4e594e25b8e693242fdce1cc41c8b0312) +++ leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision b0527bdf20a053b81f4c3771b2b31bb066c9a5a7) @@ -336,4 +336,37 @@ self.logger.debug("Timeout!!!!") return False + def cmd_fp_safety_shutdown_override(self, active: int, reset: int = NO_RESET) -> int: + """ + Constructs and sends an FP safety shutdown override command via CAN bus. + Constraints: + Must be logged into FP. + @param active: int - True to activate safety shutdown, False to deactivate + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + + """ + + rst = integer_to_bytearray(reset) + saf = integer_to_bytearray(active) + payload = rst + saf + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_fp_ch_id, + message_id=MsgIds.MSG_ID_FP_SAFETY_SHUTDOWN_OVERRIDE.value, + payload=payload) + + self.logger.debug("overriding FP safety shutdown") + + # Send message + received_message = self.can_interface.send(message) + + if received_message is not None: + if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: + self.logger.debug("Safety shutdown signal overridden") + else: + self.logger.debug("Safety shutdown signal override failed.") + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False Index: leahi_dialin/td/treatment_delivery.py =================================================================== diff -u -r028086f4e594e25b8e693242fdce1cc41c8b0312 -rb0527bdf20a053b81f4c3771b2b31bb066c9a5a7 --- leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision 028086f4e594e25b8e693242fdce1cc41c8b0312) +++ leahi_dialin/td/treatment_delivery.py (.../treatment_delivery.py) (revision b0527bdf20a053b81f4c3771b2b31bb066c9a5a7) @@ -401,5 +401,39 @@ self.logger.debug("Timeout!!!!") return False + def cmd_td_safety_shutdown_override(self, active: int, reset: int = NO_RESET) -> int: + """ + Constructs and sends an TD safety shutdown override command via CAN bus. + Constraints: + Must be logged into TD. + @param active: int - True to activate safety shutdown, False to deactivate + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + rst = integer_to_bytearray(reset) + saf = integer_to_bytearray(active) + payload = rst + saf + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_td_ch_id, + message_id=MsgIds.MSG_ID_TD_SAFETY_SHUTDOWN_OVERRIDE.value, + payload=payload) + + self.logger.debug("overriding TD safety shutdown") + + # Send message + received_message = self.can_interface.send(message) + + if received_message is not None: + if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: + self.logger.debug("Safety shutdown signal overridden") + else: + self.logger.debug("Safety shutdown signal override failed.") + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False + +