Index: leahi_dialin/common/fp_defs.py =================================================================== diff -u -rbfc16802b17ae93c46555ff4fbf9ee7ddcb05523 -r57aed15d5b38f236deaea49daba706ce352162d2 --- leahi_dialin/common/fp_defs.py (.../fp_defs.py) (revision bfc16802b17ae93c46555ff4fbf9ee7ddcb05523) +++ leahi_dialin/common/fp_defs.py (.../fp_defs.py) (revision 57aed15d5b38f236deaea49daba706ce352162d2) @@ -131,7 +131,7 @@ FP_PRE_GENP_CONCENTRATE_FLUSH = 3 # FP Pre Gen Permeate Concentrate Flush State FP_PRE_GENP_VERIFY_WATER = 4 # FP Pre Gen Permeate Verify Water State FP_PRE_GENP_PAUSED = 5 # FP Pre Gen Permeate Paused State - NUM_OF_FP_PRE_GENP_MODE_STATES = 7 # Number of Pre-Gen Permeate mode states + NUM_OF_FP_PRE_GENP_MODE_STATES = 6 # Number of Pre-Gen Permeate mode states FPPreGenPermeateStates._str_list = { # Official Name : Accepted strings Index: leahi_dialin/common/msg_ids.py =================================================================== diff -u -r010ae5ad615ce1206e2ce2996e5ff4e945e82ebc -r57aed15d5b38f236deaea49daba706ce352162d2 --- leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision 010ae5ad615ce1206e2ce2996e5ff4e945e82ebc) +++ leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision 57aed15d5b38f236deaea49daba706ce352162d2) @@ -429,6 +429,7 @@ MSG_ID_FP_DEF_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST = 0xB043 MSG_ID_FP_DEF_STATUS_REQUEST = 0xB044 MSG_ID_FP_DEF_STATUS_RESPONSE = 0xB045 + MSG_ID_FP_SET_OP_SUB_MODE_REQUEST = 0xB046 MSG_ID_FP_CONDUCTIVITY_SENSOR_RESISTANCE_OVERRIDE_REQUEST = 0xB100 Index: leahi_dialin/fp/filtration_purification.py =================================================================== diff -u -r20c821bd230fc7689a0275a2918981669ff5cc19 -r57aed15d5b38f236deaea49daba706ce352162d2 --- leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision 20c821bd230fc7689a0275a2918981669ff5cc19) +++ leahi_dialin/fp/filtration_purification.py (.../filtration_purification.py) (revision 57aed15d5b38f236deaea49daba706ce352162d2) @@ -345,6 +345,46 @@ 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 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 self.fp_operation_mode == 0: + new_mode_enum = fp_enum_repository.FPFaultStates(new_mode) + elif self.fp_operation_mode == fp_enum_repository.FPOpModes.MODE_PRE_GENP.value: + new_mode_enum = fp_enum_repository.FPPreGenPermeateStates(new_mode) + elif self.fp_operation_mode == fp_enum_repository.FPOpModes.MODE_GENP.value: + new_mode_enum = fp_enum_repository.FPGenPermeateStates(new_mode) + elif self.fp_operation_mode == fp_enum_repository.FPOpModes.MODE_DPGP.value: + new_mode_enum = fp_enum_repository.FPPreGenPDefStates(new_mode) + elif self.fp_operation_mode == fp_enum_repository.FPOpModes.MODE_DEGP.value: + new_mode_enum = fp_enum_repository.FPGenPermeateDefStates(new_mode) + else: + new_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_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.