Index: DialityCoreSerialProtocol.py =================================================================== diff -u -rabd93c1d800178a5ee618b9bba83532b853e3c96 -r5f23b5ca87b6211702df8aa805fa767026862b77 --- DialityCoreSerialProtocol.py (.../DialityCoreSerialProtocol.py) (revision abd93c1d800178a5ee618b9bba83532b853e3c96) +++ DialityCoreSerialProtocol.py (.../DialityCoreSerialProtocol.py) (revision 5f23b5ca87b6211702df8aa805fa767026862b77) @@ -25,19 +25,26 @@ class DSM_State(Enum): """ - \brief defines 3 states of search + defines 3 states of search """ - SEARCHING_FOR_START_BYTE = 0 # ///< search for start byte - SEARCHING_FOR_PACKET_LENGTH = 1 # ///< search for the end of packet - SEARCHING_FOR_CRC = 2 # ///< search and check for CRC + SEARCHING_FOR_START_BYTE = 0 + SEARCHING_FOR_PACKET_LENGTH = 1 + SEARCHING_FOR_CRC = 2 class DialitySerialMessenger: START_BYTE = b'\xA5' def __init__(self, serial_port='/dev/ttyUSB0'): + """ + DialitySerialMesseger constructor + \param serial_port - string containing the serial port, e.g., '/dev/ttyUSB69" + + \returns DialitySerialMessenger object + """ + self.__serialConnection = serial.Serial(serial_port, baudrate=115200) self.__dialitySerialByteBuffer = bytearray() @@ -49,6 +56,7 @@ self.__sendRID = -1 self.__sendEvent = threading.Event() self.responseFunction = None + self.__run = False if self.__serialConnection is not None: self.__serialListenerThread = threading.Thread(target=self.__listener) @@ -57,22 +65,38 @@ print("Serial connection is not valid") def start(self): + """ + after an object is create, you need to "start" serial communication. + """ + if self.__serialConnection is None: print("Cannot start serial listener.") return else: - print("Serial listener has started.") + self.__run = True self.__serialListenerThread.start() + print("Serial", self.__serialConnection.port, "listener has started.") + def stop(self): + """ + stop serial listener thread + + """ + self.__run = False + print("Serial", self.__serialConnection.port, "listener has stopped.") + @staticmethod def __getRequestID(message): return int.from_bytes(message[1:3], byteorder='big', signed=False) def __listener(self): + """ + private method used as a thread. + """ - while True: + while self.__run: num_of_bytes_in_serial_port = self.__serialConnection.in_waiting @@ -169,6 +193,9 @@ sleep(0.001) def __denaliPacketCRC(self): + """ + utility method used to calculate incoming message CRC + """ return sum(self.__dialityPacket[0:self.__dialityPacketLength - 1]) % 256 @@ -196,14 +223,14 @@ @staticmethod def getCRC(message): - """ \brief getCRC returns a message with its CRC """ + """ getCRC returns a message with its CRC """ message_cargo_length = message[3] return sum(message[0:4 + message_cargo_length]) % 256 @staticmethod def buildPacket(request_id=0, cargo=bytearray()): - """ \brief buildPacket builds a Diality Packet + """ buildPacket builds a Diality Packet \param @@ -249,11 +276,13 @@ if __name__ == "__main__": - # the_messenger = DialitySerialMessenger(serial_port="/dev/ttyUSB0") - # the_messenger.start() - test = DialityPacket.buildPacket(request_id=8000, cargo=b'123') - print(test) + the_messenger = DialitySerialMessenger(serial_port="/dev/ttyUSB0") + the_messenger.start() + the_messenger.stop() - test1 = DialityPacket.buildPacket(request_id=8000, cargo=b'12345') - print(test1) + the_test = DialityPacket.buildPacket(request_id=8000, cargo=b'123') + print(the_test) + + the_test1 = DialityPacket.buildPacket(request_id=8000, cargo=b'12345') + print(the_test1)