Index: leahi_dialin/fp/filtration_purification.py =================================================================== diff -u -rfc671af6d1a18c900812e68c42ca14da3280e4f1 -r5da31bc941a76297a8285323af9ff5d497ebe230 --- leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision fc671af6d1a18c900812e68c42ca14da3280e4f1) +++ leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision 5da31bc941a76297a8285323af9ff5d497ebe230) @@ -338,6 +338,49 @@ can_interface = self.can_interface) + def cmd_fp_set_operation_sub_mode(self, new_mode: int = 0, new_sub_mode: int = 0) -> int: + """ + Constructs and sends a set operation sub mode request command via CAN bus. + Constraints: + Must be logged into FP. + Transition from current to requested op sub mode must be legal. + NOTE: for POST the FP device shall be in Standby Mode + + @param new_mode: ID of operation mode to transition to + @param new_sub_mode: ID of operation sub mode to transition to + + @return: 1 if successful, zero otherwise + """ + mode = integer_to_bytearray(new_mode) + sub_mode = integer_to_bytearray(new_sub_mode) + payload = mode + sub_mode + + if new_mode == 0: + new_sub_mode_enum = fp_enum_repository.FPFaultStates(new_sub_mode) + elif new_mode == fp_enum_repository.FPOpModes.MODE_STAN.value: + new_sub_mode_enum = fp_enum_repository.FPStandbyStates(new_sub_mode) + elif new_mode == fp_enum_repository.FPOpModes.MODE_PRE_GENP.value: + new_sub_mode_enum = fp_enum_repository.FPPreGenPermeateStates(new_sub_mode) + elif new_mode == fp_enum_repository.FPOpModes.MODE_GENP.value: + new_sub_mode_enum = fp_enum_repository.FPGenPermeateStates(new_sub_mode) + elif new_mode == fp_enum_repository.FPOpModes.MODE_DPGP.value: + new_sub_mode_enum = fp_enum_repository.FPPreGenPDefStates(new_sub_mode) + elif new_mode == fp_enum_repository.FPOpModes.MODE_DEGP.value: + new_sub_mode_enum = fp_enum_repository.FPGenPermeateDefStates(new_sub_mode) + else: + new_sub_mode_enum = fp_enum_repository.FPOpModes.MODE_NLEG + + return cmd_generic_override( + payload = payload, + reset = NO_RESET, + channel_id = DenaliChannels.dialin_to_fp_ch_id, + msg_id = MsgIds.MSG_ID_FP_SET_OP_SUB_MODE_REQUEST, + entity_name = 'FP Operation Sub Mode', + override_text = new_sub_mode_enum.name, + logger = self.logger, + can_interface = self.can_interface) + + def cmd_fp_software_reset_request(self) -> None: """ Constructs and sends an FP software reset request via CAN bus.