From e7522bf1c30c035bb43beefa2acaae43d12639ec Mon Sep 17 00:00:00 2001 From: kjunge <kai.junge@epfl.ch> Date: Sat, 22 Jan 2022 01:47:34 +0100 Subject: [PATCH] Organised comms_wrapper.py --- .gitignore | 2 +- comms_wrapper.py | 116 +++++++++++++++++++++-------------------- pyComms/pyComms.ino | 3 +- pyComms/pyCommsLib.cpp | 1 + 4 files changed, 63 insertions(+), 59 deletions(-) diff --git a/.gitignore b/.gitignore index c18dd8d..ba0430d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -__pycache__/ +__pycache__/ \ No newline at end of file diff --git a/comms_wrapper.py b/comms_wrapper.py index 363dc20..49ceb6f 100644 --- a/comms_wrapper.py +++ b/comms_wrapper.py @@ -4,7 +4,6 @@ from threading import Thread import time from pynput import keyboard - ######## ### Arduino communication ######## @@ -23,6 +22,7 @@ class Arduino: self.handshakeStatus = False + # Private methods def _serial_readline(self): while 1: try: @@ -42,7 +42,7 @@ class Arduino: self.arduino.write(bytes(msg, 'utf-8')) - def add_new_message_name(self, msgName): + def _add_new_message_name(self, msgName): if msgName in self.receivedMessages: print("!! Message name ", msgName, " already exists so it cannot be added. !!") else: @@ -50,14 +50,6 @@ class Arduino: self.messageNames = list(self.receivedMessages.keys()) - def delete_message_name(self, msgName): - if msgName in self.receivedMessages: - del self.receivedMessages[msgName] - self.messageNames = list(self.receivedMessages.keys()) - else: - print("!! Message name ", msgName, " does not exist so it cannot be deleted. !!") - - def _just_connect(self): # Connect to the arduino device try: @@ -76,8 +68,45 @@ class Arduino: self.arduino.dtr = False - def disconnect_arduino(self): - self.arduino.close() + def _disect_and_save_message(self, msg): + + receivedMessageTemp = self.receivedMessages + + if msg[-2] != ":": + return False + + msg = msg[1:-2] + splitMsg = msg.split(":") + for singleMsg in splitMsg: + if len(singleMsg.split(";")) == 2: + msgName = singleMsg.split(";")[0] + msgPayload = singleMsg.split(";")[1] + + if msgName not in self.messageNames: + return False + + receivedMessageTemp[msgName] = msgPayload + + else: + return False + + self.receivedMessages = receivedMessageTemp + return True + + + def _list_connected_serial_devices(): + devices = list(serial.tools.list_ports.comports()) + for device in devices: + print(device) + + + # Public methods + def define_message_names(self, msgNames): + if type(msgNames) == list: + for msg in msgNames: + self._add_new_message_name(msg) + else: + print("Argument should be of type 'list'") def connect_and_handshake(self): @@ -124,11 +153,15 @@ class Arduino: return self.handshakeStatus + def disconnect_arduino(self): + self.arduino.close() + + def send_message(self, msg): self._serial_write( msg + "\n") - def receive_message(self): + def receive_message(self, showOutput = False, verbose = False): if not self.handshakeStatus: print("!! Handshake not completed !!") return False @@ -144,40 +177,20 @@ class Arduino: except: isMessageValid = False if isMessageValid: - isMessageValid = self.disect_and_save_message(msg) + isMessageValid = self._disect_and_save_message(msg) else: pass + if showOutput: + if verbose: + print("Raw message received: ", self._rawReceivedMessage, " | Segmented message: ", self.receivedMessages) + else: + print("Received: ", self.receivedMessages) + time.sleep(0.000001) return True - def disect_and_save_message(self, msg): - - receivedMessageTemp = self.receivedMessages - - if msg[-2] != ":": - return False - - msg = msg[1:-2] - splitMsg = msg.split(":") - for singleMsg in splitMsg: - if len(singleMsg.split(";")) == 2: - msgName = singleMsg.split(";")[0] - msgPayload = singleMsg.split(";")[1] - - if msgName not in self.messageNames: - return False - - receivedMessageTemp[msgName] = msgPayload - - else: - return False - - self.receivedMessages = receivedMessageTemp - return True - - ######## ### Key commands ######## @@ -186,34 +199,23 @@ class Key(): def __init__(self): self.keyPressValue = None self.keyReleaseValue = None - self.start_keyboard_listener() + self._start_keyboard_listener() - def on_press(self, key): + def _on_press(self, key): try: self.keyPressValue = key.char except AttributeError: self.keyPressValue = key - def on_release(self, key): + def _on_release(self, key): try: self.keyReleaseValue = key.char except AttributeError: self.keyReleaseValue = key - def start_keyboard_listener(self): - listener = keyboard.Listener(on_press=self.on_press, on_release=self.on_release) + def _start_keyboard_listener(self): + listener = keyboard.Listener(on_press=self._on_press, on_release=self._on_release) listener.start() - print("keyboard listener started") - - - -######## -### Other useful functions -######## - -def list_connected_serial_devices(): - devices = list(serial.tools.list_ports.comports()) - for device in devices: - print(device) \ No newline at end of file + print("keyboard listener started") \ No newline at end of file diff --git a/pyComms/pyComms.ino b/pyComms/pyComms.ino index ca36684..7cc0304 100644 --- a/pyComms/pyComms.ino +++ b/pyComms/pyComms.ino @@ -12,7 +12,7 @@ String msgName[] = {"item1", "item2", "item3"}; // An array of strings which will be the payload // Each element corresponds to the message defined in msgName // Make sure the array length of msgName and Data match -String Data[] = {"Null", "Null", "Null"}; +String dataCarrier[] = {"Null", "Null", "Null"}; // The length of the msgName and Data array const int numOfMsg = 3; @@ -31,6 +31,7 @@ void setup() { void loop() { + //////////////////// // RECEIVING DATA //////////////////// diff --git a/pyComms/pyCommsLib.cpp b/pyComms/pyCommsLib.cpp index f7cd0bf..d5fd277 100644 --- a/pyComms/pyCommsLib.cpp +++ b/pyComms/pyCommsLib.cpp @@ -1,6 +1,7 @@ #include "pyCommsLib.h" #include "Arduino.h" + void send_msg(String* msgName, String* msg, int numOfMsg) { // If we have the same number of data compared to the message String payload = "<"; -- GitLab