Index: .gitignore =================================================================== diff -u -r9d36fd7bbc0b883dab1140a7377f75fdca70e474 -r9f44c02ff3f40812ab9fd7f9c7346f649a114c19 --- .gitignore (.../.gitignore) (revision 9d36fd7bbc0b883dab1140a7377f75fdca70e474) +++ .gitignore (.../.gitignore) (revision 9f44c02ff3f40812ab9fd7f9c7346f649a114c19) @@ -1,5 +1,5 @@ # ignore folders -__pycache__/ +__pycache__ document/html/ document/latex/ .idea/ Index: leahi_dialin/ui/TD_Messaging.py =================================================================== diff -u --- leahi_dialin/ui/TD_Messaging.py (revision 0) +++ leahi_dialin/ui/TD_Messaging.py (revision 9f44c02ff3f40812ab9fd7f9c7346f649a114c19) @@ -0,0 +1,45 @@ +#!/bin/python3 + +from utils import singleton +from utils import conversions +from protocols import CAN +from common import msg_ids + + +@singleton +class TD_Messaging: + + + def __init__(self): + + self.can_enabled: bool=False + self.can_Channel: str = "can0" + + self.can_interface = CAN.DenaliCanMessenger(can_interface=self.can_Channel) + self.can_interface.start() + + if self.can_interface is not None: + self.can_enabled = True + + + def cmd_send_hd_operation_mode(self, op_mode: int, sub_mode: int = 0): + """ + Broadcasts the current HD operation mode + @param op_mode: hd operation mode + @param sub_mode: hd operation sub-mode + @return: None + """ + + if not self.can_enabled: + raise ValueError("CAN Interface is not enabled") + + + payload = conversions.integer_to_bytearray(op_mode ) + payload += conversions.integer_to_bytearray(sub_mode) + + message = CAN.DenaliMessage.build_message( + channel_id=CAN.DenaliChannels.td_sync_broadcast_ch_id, + message_id=msg_ids.MsgIds.MSG_ID_TD_OP_MODE_DATA.value, + payload=payload) + + self.can_interface.send(message, 0) Index: leahi_dialin/ui/utils.py =================================================================== diff -u -r9d36fd7bbc0b883dab1140a7377f75fdca70e474 -r9f44c02ff3f40812ab9fd7f9c7346f649a114c19 --- leahi_dialin/ui/utils.py (.../utils.py) (revision 9d36fd7bbc0b883dab1140a7377f75fdca70e474) +++ leahi_dialin/ui/utils.py (.../utils.py) (revision 9f44c02ff3f40812ab9fd7f9c7346f649a114c19) @@ -18,7 +18,22 @@ import struct from subprocess import check_output +def singleton(cls): + """ + This is a singleton decorator + Returns: + cls: as for defintion of the singleton, it created the class instance once and will return on each access, instead of the recreation. + """ + instances = {} + def get_instance(*args, **kwargs): + if cls not in instances: + instances[cls] = cls(*args, **kwargs) + return instances[cls] + + return get_instance + + def srsui(vstr=""): """ for user convenience if wanted to put a note for the SRSUI