Index: dialin/common/msg_ids.py =================================================================== diff -u -r0e68ec6bb733a8ab7b21a82f8b571f1678f9d2cd -rde91e248f2fa117580b0a863fdc13b39b9427148 --- dialin/common/msg_ids.py (.../msg_ids.py) (revision 0e68ec6bb733a8ab7b21a82f8b571f1678f9d2cd) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision de91e248f2fa117580b0a863fdc13b39b9427148) @@ -360,6 +360,8 @@ MSG_ID_HD_DIAL_OUT_SET_PWM = 0x8087 MSG_ID_DIALYSATE_INLET_PUMP_ROTOR_COUNT_OVERRIDE = 0x8088 MSG_ID_HD_NV_RECORD_CRC_OVERRIDE = 0x8089 + MSD_ID_HD_RTC_CTL_REG1_STATUS_OVERRIDE = 0x808A + MSD_ID_HD_RTC_CTL_REG3_STATUS_OVERRIDE = 0x808B MSG_ID_DG_TESTER_LOGIN_REQUEST = 0xA000 MSG_ID_DG_ALARM_STATE_OVERRIDE = 0xA001 @@ -457,6 +459,8 @@ MSG_ID_DG_CONC_PUMP_PARK_FAULT_STATUS_OVERRIDE = 0xA05F MSG_ID_DG_CONC_PUMP_PARK_COMMAND = 0xA060 MSG_ID_DG_HEATERS_DUTY_CYCLE_OVERRIDE = 0xA061 + MSD_ID_DG_RTC_CTL_REG1_STATUS_OVERRIDE = 0xA062 + MSD_ID_DG_RTC_CTL_REG3_STATUS_OVERRIDE = 0xA063 MSG_ID_HD_DEBUG_EVENT = 0xFFF1 MSG_ID_DG_DEBUG_EVENT = 0xFFF2 Index: dialin/dg/rtc.py =================================================================== diff -u -racd09d02879e8add4cf7f694f5db8e423a76c341 -rde91e248f2fa117580b0a863fdc13b39b9427148 --- dialin/dg/rtc.py (.../rtc.py) (revision acd09d02879e8add4cf7f694f5db8e423a76c341) +++ dialin/dg/rtc.py (.../rtc.py) (revision de91e248f2fa117580b0a863fdc13b39b9427148) @@ -18,6 +18,7 @@ from logging import Logger from ..common.msg_defs import MsgIds +from .constants import RESET, NO_RESET from ..protocols.CAN import DenaliMessage, DenaliChannels from ..utils.base import AbstractSubSystem, publish from ..utils.conversions import integer_to_bytearray @@ -135,3 +136,95 @@ else: self.logger.debug("Timeout!!!!") return False + def cmd_rtc_ctl_reg1_status_override(self, status: int = 0, reset: int = NO_RESET) -> int: + """ + Constructs and sends the DG RTC control register 1 status override command + Constraints: + Must be logged into DG. + + @param status: status is a bit map containing a set of bits that represent status + from the RTC status register. Specified below + + RTC_REG_1_12_HOUR_MODE_MASK = 0x0004 ( 4 ) + RTC_REG_1_PORO = 0x0008 ( 8 ) + RTC_REG_1_CLK_STOPPED_MASK = 0x0020 ( 32 ) + RTC_REG_1_UNUSED_MASK = 0x0040 ( 64 ) + RTC_REG_1_EXT_CLK_MODE_MASK = 0x0080 ( 128 ) + + more than one status bit can be sent. + Ex: to set RTC_REG_1_PORO and RTC_REG_1_CLK_STOPPED_MASK, status should be 40 (0x0028). + + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + rst = integer_to_bytearray(reset) + sts = integer_to_bytearray(status & 0x0000FFFF) + payload = rst + sts + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=MsgIds.MSD_ID_DG_RTC_CTL_REG1_STATUS_OVERRIDE.value, + payload=payload) + + self.logger.debug("override DG RTC Control Register 1 status") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + if reset == RESET: + str_res = "reset back to normal: " + else: + str_res = str(status) + self.logger.debug("DG RTC Control Register 1 status overridden to " + str_res + + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False + + def cmd_rtc_ctl_reg3_status_override(self, status: int = 0, reset: int = NO_RESET) -> int: + """ + Constructs and sends the DG RTC control register 3 status override command + Constraints: + Must be logged into DG. + + @param status: status is a bit map containing a set of bits that represent status + from the RTC status register. Specified below + + RTC_REG_3_BLF_MASK = 0x0004 ( 4 ) + + more than one status bit can be sent + + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + rst = integer_to_bytearray(reset) + sts = integer_to_bytearray(status & 0x0000FFFF) + payload = rst + sts + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=MsgIds.MSD_ID_DG_RTC_CTL_REG3_STATUS_OVERRIDE.value, + payload=payload) + + self.logger.debug("override DG RTC Control Register 3 status") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + if reset == RESET: + str_res = "reset back to normal: " + else: + str_res = str(status) + self.logger.debug("DG RTC Control Register 3 status status overridden to " + str_res + + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False \ No newline at end of file Index: dialin/hd/rtc.py =================================================================== diff -u -racd09d02879e8add4cf7f694f5db8e423a76c341 -rde91e248f2fa117580b0a863fdc13b39b9427148 --- dialin/hd/rtc.py (.../rtc.py) (revision acd09d02879e8add4cf7f694f5db8e423a76c341) +++ dialin/hd/rtc.py (.../rtc.py) (revision de91e248f2fa117580b0a863fdc13b39b9427148) @@ -20,7 +20,7 @@ from ..utils.conversions import integer_to_bytearray from ..common.msg_defs import MsgIds, MsgFieldPositions from logging import Logger - +from .constants import RESET, NO_RESET from ..common.msg_defs import MsgIds from ..protocols.CAN import DenaliMessage, DenaliChannels from ..utils.base import AbstractSubSystem, publish @@ -140,3 +140,96 @@ else: self.logger.debug("Timeout!!!!") return False + + def cmd_rtc_ctl_reg1_status_override(self, status: int = 0, reset: int = NO_RESET) -> int: + """ + Constructs and sends the HD RTC control register 1 status override command + Constraints: + Must be logged into HD. + + @param status: status is a bit map containing a set of bits that represent status + from the RTC status register. Specified below + + RTC_REG_1_12_HOUR_MODE_MASK = 0x0004 ( 4 ) + RTC_REG_1_PORO = 0x0008 ( 8 ) + RTC_REG_1_CLK_STOPPED_MASK = 0x0020 ( 32 ) + RTC_REG_1_UNUSED_MASK = 0x0040 ( 64 ) + RTC_REG_1_EXT_CLK_MODE_MASK = 0x0080 ( 128 ) + + more than one status bit can be sent. + Ex: to set RTC_REG_1_PORO and RTC_REG_1_CLK_STOPPED_MASK, status should be 40 (0x0028). + + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + rst = integer_to_bytearray(reset) + sts = integer_to_bytearray(status & 0x0000FFFF) + payload = rst + sts + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=MsgIds.MSD_ID_HD_RTC_CTL_REG1_STATUS_OVERRIDE.value, + payload=payload) + + self.logger.debug("override HD RTC Control Register 1 status") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + if reset == RESET: + str_res = "reset back to normal: " + else: + str_res = str(status) + self.logger.debug("HD RTC Control Register 1 status overridden to " + str_res + + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False + + def cmd_rtc_ctl_reg3_status_override(self, status: int = 0, reset: int = NO_RESET) -> int: + """ + Constructs and sends the HD RTC control register 3 status override command + Constraints: + Must be logged into HD. + + @param status: status is a bit map containing a set of bits that represent status + from the RTC status register. Specified below + + RTC_REG_3_BLF_MASK = 0x0004 ( 4 ) + + more than one status bit can be sent + + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + rst = integer_to_bytearray(reset) + sts = integer_to_bytearray(status & 0x0000FFFF) + payload = rst + sts + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=MsgIds.MSD_ID_HD_RTC_CTL_REG3_STATUS_OVERRIDE.value, + payload=payload) + + self.logger.debug("override HD RTC Control Register 3 status") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + if reset == RESET: + str_res = "reset back to normal: " + else: + str_res = str(status) + self.logger.debug("HD RTC Control Register 3 status status overridden to " + str_res + + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False \ No newline at end of file