Index: leahi_dialin/common/msg_ids.py =================================================================== diff -u -r71aa6b52bc7749b98067a2ab93ba2da2840a1156 -r14384c5ff396d5ed7ad6952f86842f79e95f6802 --- leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision 71aa6b52bc7749b98067a2ab93ba2da2840a1156) +++ leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision 14384c5ff396d5ed7ad6952f86842f79e95f6802) @@ -132,6 +132,22 @@ MSG_ID_DD_DATE_AND_TIME_REQUEST = 0x6E MSG_ID_DD_DATE_AND_TIME_RESPONSE = 0x6F MSG_ID_FP_RO_REJECTION_RATIO_DATA = 0x71 + MSG_ID_UI_PRESSURE_LIMITS_CHANGE_REQUEST = 0x72 + MSG_ID_TD_PRESSURE_LIMITS_CHANGE_RESPONSE = 0x73 + MSG_ID_UI_BOLUS_VOLUME_CHANGE_REQUEST = 0x74 + MSG_ID_TD_BOLUS_VOLUME_CHANGE_RESPONSE = 0x75 + MSG_ID_UI_DURATION_VALIDATE_REQUEST = 0x76 + MSG_ID_TD_DURATION_VALIDATE_RESPONSE = 0x77 + MSG_ID_UI_DURATION_CONFIRM_REQUEST = 0x78 + MSG_ID_TD_DURATION_CONFIRM_RESPONSE = 0x79 + MSG_ID_UI_TREATMENT_SET_POINTS_CHANGE_REQUEST = 0x7A + MSG_ID_TD_TREATMENT_SET_POINTS_CHANGE_RESPONSE = 0x7B + MSG_ID_UI_TREATMENT_SET_POINT_BLOOD_FLOW_CHANGE_REQUEST = 0x7C + MSG_ID_TD_TREATMENT_SET_POINT_BLOOD_FLOW_CHANGE_RESPONSE = 0x7D + MSG_ID_UI_TREATMENT_SET_POINT_DIALYSATE_FLOW_CHANGE_REQUEST = 0x7E + MSG_ID_TD_TREATMENT_SET_POINT_DIALYSATE_FLOW_CHANGE_RESPONSE = 0x7F + MSG_ID_UI_TREATMENT_SET_POINT_DIALYSATE_TEMPERATURE_CHANGE_REQUEST = 0x80 + MSG_ID_TD_TREATMENT_SET_POINT_DIALYSATE_TEMPERATURE_CHANGE_RESPONSE = 0x81 MSG_ID_TD_INSTITUTIONAL_RECORD_REQUEST = 0x82 MSG_ID_TD_INSTITUTIONAL_RECORD_RESPONSE = 0x83 MSG_ID_TD_ADJUST_INSTITUTIONAL_RECORD_REQUEST = 0x84 @@ -148,6 +164,11 @@ MSG_ID_DD_PISTON_PUMP_CONTROL_DATA = 0xF0 + MSG_ID_UI_ADJUST_DISPOSABLES_CONFIRM_REQUEST = 0X92 + MSG_ID_TD_ADJUST_DISPOSABLES_CONFIRM_RESPONSE = 0X93 + MSG_ID_UI_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_REQUEST = 0X94 + MSG_ID_TD_ADJUST_DISPOSABLES_REMOVAL_CONFIRM_RESPONSE = 0X95 + MSG_ID_TD_TESTER_LOGIN_REQUEST = 0x8000 MSG_ID_TD_SOFTWARE_RESET_REQUEST = 0x8001 MSG_ID_TD_SEND_TEST_CONFIGURATION = 0x8002 @@ -371,4 +392,4 @@ MSG_ID_FP_DEBUG_EVENT = 0xFFF3 - MSG_ID_ACK_MESSAGE_THAT_REQUIRES_ACK = 0xFFFF \ No newline at end of file + MSG_ID_ACK_MESSAGE_THAT_REQUIRES_ACK = 0xFFFF Index: leahi_dialin/fp/filtration_purification.py =================================================================== diff -u -r55d97b27c73f8e08994328881d3f56cbc7f00e29 -r14384c5ff396d5ed7ad6952f86842f79e95f6802 --- leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision 55d97b27c73f8e08994328881d3f56cbc7f00e29) +++ leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision 14384c5ff396d5ed7ad6952f86842f79e95f6802) @@ -79,26 +79,30 @@ # register handler for FP operation mode broadcast messages if self.can_interface is not None: channel_id = DenaliChannels.fp_sync_broadcast_ch_id - self.msg_id_fp_op_mode_data = MsgIds.MSG_ID_FP_OP_MODE_DATA.value - self.can_interface.register_receiving_publication_function(channel_id, self.msg_id_fp_op_mode_data, + self.can_interface.register_receiving_publication_function(channel_id, + MsgIds.MSG_ID_FP_OP_MODE_DATA.value, self._handler_fp_op_mode_sync) - self.msg_id_fp_version_response = MsgIds.MSG_ID_FP_VERSION_RESPONSE.value self.can_interface.register_receiving_publication_function(channel_id, - self.msg_id_fp_version_response, + MsgIds.MSG_ID_FP_VERSION_RESPONSE.value, self._handler_fp_version_response_sync) - self.msg_id_fp_debug_event = MsgIds.MSG_ID_FP_DEBUG_EVENT.value self.can_interface.register_receiving_publication_function(channel_id, - self.msg_id_fp_debug_event, + MsgIds.MSG_ID_FP_DEBUG_EVENT.value, self._handler_fp_debug_event_sync) + + self.can_interface.register_receiving_publication_function(channel_id, + MsgIds.MSG_ID_FP_DEF_STATUS_RESPONSE.value, + self._handler_fp_defeatured_response) # create properties + self.fp_defeatured_timestamp = 0.0 self.fp_op_mode_timestamp = 0.0 self.fp_debug_events_timestamp = 0.0 self.fp_version_response_timestamp = 0.0 self.fp_operation_mode = fp_enum_repository.FPOpModes.MODE_INIT.value self.fp_operation_sub_mode = 0 + self.fp_defeatured = None self.fp_logged_in = False self.fp_set_logged_in_status(False) self.fp_version = None @@ -122,7 +126,17 @@ self.test_configs = FPTestConfig(self.can_interface, self.logger) self.valves = FPValves(self.can_interface, self.logger) self.dd_proxy = DDProxy(self.can_interface, self.logger) + + def fp_set_logged_in_status(self, logged_in: bool = False): + """ + Callback for fp logged in status change. + @param logged_in boolean logged in status for FP + @return: none + """ + self.fp_logged_in = logged_in + + @publish(["msg_id_fp_debug_event", "fp_debug_events_timestamp","fp_debug_events"]) def _handler_fp_debug_event_sync(self, message, timestamp = 0.0): """ @@ -150,14 +164,6 @@ if self.fp_debug_event_index == self._FP_DEBUG_EVENT_LIST_COUNT: self.fp_debug_event_index = 0 - @publish(["fp_logged_in"]) - def fp_set_logged_in_status(self, logged_in: bool = False): - """ - Callback for fp logged in status change. - @param logged_in boolean logged in status for FP - @return: none - """ - self.fp_logged_in = logged_in @publish(["msg_id_fp_version_response", "fp_version, fp_fpga_version"]) def _handler_fp_version_response_sync(self,message, timestamp = 0.0): @@ -215,6 +221,46 @@ self.fp_operation_sub_mode = smode[0] self.fp_op_mode_timestamp = timestamp + + @publish(["msg_id_fp_def_status_response", "is_fp_defeatured"]) + def _handler_fp_defeatured_response(self, message, timestamp = 0.0): + """ + Handler for response from FP regarding its defeatured status. + + @param message: defeatured respnse from FP + @return: None + """ + self.fp_defeatured = struct.unpack('?', bytearray( + message['message'][MsgFieldPositions.START_POS_FIELD_1:MsgFieldPositions.END_POS_FIELD_1])) + + self.fp_defeatured_timestamp = timestamp + + + def cmd_request_defeatured_status(self) -> int: + """ + Constructs and sends the FP defeatured status request + Constraints: + Must be logged into FP. + + @return: 1 if successful, zero otherwise + """ + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_fp_ch_id, + message_id=MsgIds.MSG_ID_FP_DEF_STATUS_REQUEST.value) + + self.logger.debug('Getting FP defeatured status') + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + self.logger.debug("Received FW ACK after requesting FP defeatured configuration record.") + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False + + def cmd_log_in_to_fp(self, resend: bool = False) -> int: """ Constructs and sends a login command via CAN bus. Login required before \n @@ -237,6 +283,7 @@ if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: self.logger.debug("Success: Logged In") self.fp_set_logged_in_status(True) + self.cmd_request_defeatured_status() #self._send_ro_checkin_message() # Timer starts interval first #self.can_interface.transmit_interval_dictionary[self.callback_id].start() else: