Index: leahi_dialin/fp/filtration_purification.py =================================================================== diff -u -ra291930ba38e329e2b373f6d2b2a7564a6b7a09a -rc5bfcf84ed942ca5841bf9de155aa0f495b4d28d --- leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision a291930ba38e329e2b373f6d2b2a7564a6b7a09a) +++ leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision c5bfcf84ed942ca5841bf9de155aa0f495b4d28d) @@ -33,7 +33,7 @@ from .proxies.dd_proxy import DDProxy from ..common.constants import NO_RESET -from ..common.fp_defs import FPOpModes +from ..common.fp_defs import fp_enum_repository from ..common.msg_defs import MsgIds, MsgFieldPositions, MsgFieldPositionsFWVersions from ..common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from ..protocols.CAN import DenaliMessage, DenaliCanMessenger, DenaliChannels @@ -78,26 +78,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_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 @@ -219,6 +223,46 @@ 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_op_mode_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the measured op mode broadcast interval override command @@ -261,6 +305,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: @@ -290,7 +335,7 @@ channel_id = DenaliChannels.dialin_to_fp_ch_id, msg_id = MsgIds.MSG_ID_FP_SET_OP_MODE_REQUEST, entity_name = 'FP Operation Mode', - override_text = FPOpModes(new_mode).name, + override_text = fp_enum_repository.FPOpModes(new_mode).name, logger = self.logger, can_interface = self.can_interface)