Index: leahi_dialin/fp/proxies/dd_proxy.py =================================================================== diff -u -ra291930ba38e329e2b373f6d2b2a7564a6b7a09a -r9bfb4b489a4608541017c05660e111d8ef6b8b5f --- leahi_dialin/fp/proxies/dd_proxy.py (.../dd_proxy.py) (revision a291930ba38e329e2b373f6d2b2a7564a6b7a09a) +++ leahi_dialin/fp/proxies/dd_proxy.py (.../dd_proxy.py) (revision 9bfb4b489a4608541017c05660e111d8ef6b8b5f) @@ -17,6 +17,7 @@ from logging import Logger from leahi_dialin.common.msg_defs import MsgIds +from leahi_dialin.common.fp_defs import fp_enum_repository from leahi_dialin.protocols.CAN import DenaliMessage, DenaliCanMessenger, DenaliChannels from leahi_dialin.utils.base import AbstractSubSystem from leahi_dialin.utils.conversions import integer_to_bytearray, float_to_bytearray @@ -27,13 +28,14 @@ Filtration Purification (FP) Dialin API sub-class for DD proxy ( injection ) related commands. """ - def __init__(self, can_interface: DenaliCanMessenger, logger: Logger): + def __init__(self, can_interface: DenaliCanMessenger, logger: Logger, fp): """ ROProxy constructor @param can_interface: the Denali CAN interface object """ super().__init__() + self._fp = fp self.can_interface = can_interface self.logger = logger @@ -60,3 +62,25 @@ self.logger.debug("Sending DD start stop request to FP.") self.can_interface.send(message, 0) + + + def cmd_send_dd_mode_change_request(self, op_mode: int) -> int: + """ + Constructs and sends a set operation mode request command via internal CAN bus. + Constraints: + Must be logged into FP. + Transition from current to requested op mode must be legal. + NOTE: for POST the FP device shall be in Standby Mode + + @param op_mode: ID of operation mode to transition to + + @return: 1 if successful, zero otherwise + """ + + target_opmode = op_mode + if op_mode in [fp_enum_repository.FPOpModes.MODE_PRE_GENP, fp_enum_repository.FPOpModes.MODE_DPGP]: + target_opmode = fp_enum_repository.FPOpModes.MODE_DPGP if self._fp.fp_defeaturized else fp_enum_repository.FPOpModes.MODE_PRE_GENP + elif op_mode in [fp_enum_repository.FPOpModes.MODE_GENP, fp_enum_repository.FPOpModes.MODE_DEGP]: + target_opmode = fp_enum_repository.FPOpModes.MODE_DEGP if self._fp.fp_defeaturized else fp_enum_repository.FPOpModes.MODE_GENP + + return self._fp.cmd_fp_set_operation_mode(target_opmode)