Index: dialin/common/msg_ids.py =================================================================== diff -u -r7ea4b936cef531b2cde9053ae58b7119a3bf0e6c -r099d6838f82efa3d596848922793d5e56dbd541b --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 7ea4b936cef531b2cde9053ae58b7119a3bf0e6c) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 099d6838f82efa3d596848922793d5e56dbd541b) @@ -415,6 +415,7 @@ MSG_ID_DG_GET_USAGE_INFO_RECORD = 0xA053 MSG_ID_DG_SET_USAGE_INFO_RECORD = 0xA054 MSG_ID_DG_SEND_USAGE_INFO_RECORD = 0xA055 + MSG_ID_DG_SET_OP_MODE_REQUEST = 0xA056 MSG_ID_HD_DEBUG_EVENT = 0xFFF1 MSG_ID_DG_DEBUG_EVENT = 0xFFF2 Index: dialin/dg/dialysate_generator.py =================================================================== diff -u -r7ea4b936cef531b2cde9053ae58b7119a3bf0e6c -r099d6838f82efa3d596848922793d5e56dbd541b --- dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 7ea4b936cef531b2cde9053ae58b7119a3bf0e6c) +++ dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 099d6838f82efa3d596848922793d5e56dbd541b) @@ -345,6 +345,51 @@ self.can_interface.send(message, 0) + def cmd_dg_set_operation_mode(self, new_mode: int = 0) -> int: + """ + Constructs and sends a set operation mode request command via CAN bus. + Constraints: + Must be logged into DG. + Transition from current to requested op mode must be legal. + + @param new_mode: ID of operation mode to transition to + DG_MODE_FAUL = 0 + DG_MODE_SERV = 1 + DG_MODE_INIT = 2 + DG_MODE_STAN = 3 + DG_MODE_SOLO = 4 + DG_MODE_GENE = 5 + DG_MODE_FILL = 6 + DG_MODE_DRAI = 7 + DG_MODE_FLUS = 8 + DG_MODE_HEAT = 9 + DG_MODE_CHEM = 10 + + @return: 1 if successful, zero otherwise + + """ + + payload = integer_to_bytearray(new_mode) + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=MsgIds.MSG_ID_DG_SET_OP_MODE_REQUEST.value, + payload=payload) + + self.logger.debug("Requesting DG mode change to " + str(new_mode)) + + # Send message + received_message = self.can_interface.send(message) + + if received_message is not None: + if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: + self.logger.debug("Success: Mode change accepted") + else: + self.logger.debug("Failure: Mode change rejected.") + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("DG mode change request Timeout!!!!") + return False + def cmd_dg_safety_shutdown_override(self) -> int: """ Constructs and sends an DG safety shutdown override command via CAN bus.