Index: leahi_dialin/fp/filtration_purification.py =================================================================== diff -u -r79697500614904bafb56f3d33e368b954ba78f7d -r71aa6b52bc7749b98067a2ab93ba2da2840a1156 --- leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision 79697500614904bafb56f3d33e368b954ba78f7d) +++ leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision 71aa6b52bc7749b98067a2ab93ba2da2840a1156) @@ -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 = 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 @@ -123,6 +127,15 @@ 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 +163,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 +220,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_get_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