Index: leahi_dialin/common/msg_ids.py =================================================================== diff -u -r780b246f56ba5af6173f96b12917f077eceded71 -r79b09049832200d2adde2efd7d79a2407b57d09d --- leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision 780b246f56ba5af6173f96b12917f077eceded71) +++ leahi_dialin/common/msg_ids.py (.../msg_ids.py) (revision 79b09049832200d2adde2efd7d79a2407b57d09d) @@ -98,6 +98,7 @@ MSG_ID_DD_POST_GEN_DIALYSATE_STATE_DATA = 0x4B MSG_ID_DD_PRE_GEN_DIALYSATE_REQUEST_DATA = 0x4C MSG_ID_TD_EJECTOR_DATA = 0x4E + MSG_ID_DD_SERIAL_RESPONSE = 0x88 MSG_ID_TD_TEMPERATURE_DATA = 0x91 MSG_ID_TD_BATTERY_DATA = 0x94 MSG_ID_TD_SERIAL_RESPONSE = 0x99 Index: leahi_dialin/ui/dd_messaging.py =================================================================== diff -u --- leahi_dialin/ui/dd_messaging.py (revision 0) +++ leahi_dialin/ui/dd_messaging.py (revision 79b09049832200d2adde2efd7d79a2407b57d09d) @@ -0,0 +1,85 @@ +#!/bin/python3 + +from leahi_dialin.ui.utils import singleton_threadsafe +from leahi_dialin.utils import conversions +from leahi_dialin.protocols import CAN +from leahi_dialin.common import msg_ids + + +@singleton_threadsafe +class DD_Messaging(): + + def __init__(self): + + self.can_enabled: bool=False + self.can_Channel: str = "can0" + + class fakeLogger(): + def __init__(self): + pass + + def error(a1, a2): + pass + + def info(a1, a2): + pass + + self.can_interface = CAN.DenaliCanMessenger(can_interface=self.can_Channel, logger=fakeLogger() ) + self.can_interface.start() + + if self.can_interface is not None: + self.can_enabled = True + + + def dd_versions(self, major: int, minor: int, micro: int, build: int, + fpga_id: int, fpga_major: int, fpga_minor: int, fpga_lab: int, + compatibility_rev: int): + """ + Broadcasts the current dd Version Data + @param major: (uint) - Major version number + @param minor: (uint) - Minor version number + @param micro: (uint) - Micro version number + @param build: (uint) - Build version number + @param fpga_id: (int) - FPGA id version number + @param fpga_major: (int) - FPGA Major version number + @param fpga_minor: (int) - FPGA Minor version number + @param fpga_lab: (int) - FPGA Lab version number + @param compatibility_rev: (uint) - The FWs/UI compatibility revision + @return: None + """ + if not self.can_enabled: + raise ValueError("CAN Interface is not enabled") + + payload = conversions.unsigned_byte_to_bytearray (major ) + payload += conversions.unsigned_byte_to_bytearray (minor ) + payload += conversions.unsigned_byte_to_bytearray (micro ) + payload += conversions.unsigned_short_to_bytearray (build ) + payload += conversions.unsigned_byte_to_bytearray (fpga_id ) + payload += conversions.unsigned_byte_to_bytearray (fpga_major ) + payload += conversions.unsigned_byte_to_bytearray (fpga_minor ) + payload += conversions.unsigned_byte_to_bytearray (fpga_lab ) + payload += conversions.unsigned_integer_to_bytearray(compatibility_rev) + + message = CAN.DenaliMessage.build_message( + channel_id=CAN.DenaliChannels.dd_sync_broadcast_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_DD_VERSION_REPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) + + + def dd_serial(self, serial: str): + """ + the dd version serial response message method + @param serial: serial number + @return: None + """ + # TODO: replace with proper payload and message ID once message is defined + payload = bytes(serial, 'ascii') + b'\x00' + + message = CAN.DenaliMessage.build_message( + channel_id=CAN.DenaliChannels.dd_sync_broadcast_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_DD_SERIAL_RESPONSE.value, + payload=payload) + + self.can_interface.send(message, 0) \ No newline at end of file Index: leahi_dialin/ui/td_messaging.py =================================================================== diff -u -r780b246f56ba5af6173f96b12917f077eceded71 -r79b09049832200d2adde2efd7d79a2407b57d09d --- leahi_dialin/ui/td_messaging.py (.../td_messaging.py) (revision 780b246f56ba5af6173f96b12917f077eceded71) +++ leahi_dialin/ui/td_messaging.py (.../td_messaging.py) (revision 79b09049832200d2adde2efd7d79a2407b57d09d) @@ -108,7 +108,7 @@ self.can_interface.send(message, 0) - def td_air_trap(self, low_level: int, upper_level: int, lower_level_raw: int, upper_level_raw: int, valve_state: int, controlling: bool): + def td_air_trap(self, low_level: int, upper_level: int, lower_level_raw: int, upper_level_raw: int, valve_state: int, controlling: int): """ Broadcasts the current TD air trap data @param low_level : lower level value @@ -124,12 +124,12 @@ raise ValueError("CAN Interface is not enabled") - payload = conversions.integer_to_bytearray(low_level ) - payload += conversions.integer_to_bytearray(upper_level ) - payload += conversions.integer_to_bytearray(lower_level_raw ) - payload += conversions.integer_to_bytearray(upper_level_raw ) - payload += conversions.integer_to_bytearray(valve_state ) - payload += conversions.integer_to_bytearray(controlling ) + payload = conversions.unsigned_integer_to_bytearray(low_level ) + payload += conversions.unsigned_integer_to_bytearray(upper_level ) + payload += conversions.unsigned_integer_to_bytearray(lower_level_raw ) + payload += conversions.unsigned_integer_to_bytearray(upper_level_raw ) + payload += conversions.unsigned_integer_to_bytearray(valve_state ) + payload += conversions.unsigned_integer_to_bytearray(controlling ) message = CAN.DenaliMessage.build_message( channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, @@ -322,4 +322,16 @@ message_id=msg_ids.MsgIds.MSG_ID_TD_SERIAL_RESPONSE.value, payload=payload) + self.can_interface.send(message, 0) + + def td_request_ui_versions(self): + """ + the td request UI versions + + @return: None + """ + message = CAN.DenaliMessage.build_message( + channel_id=CAN.DenaliChannels.td_to_ui_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_UI_VERSION_INFO_REQUEST.value) + self.can_interface.send(message, 0) \ No newline at end of file