Skip to content

Commit 66e0ff0

Browse files
committed
Disconnection button functionality added.(csv->lsl->apps)
1 parent 4a5e804 commit 66e0ff0

File tree

2 files changed

+56
-22
lines changed

2 files changed

+56
-22
lines changed

chords_serial.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,31 +123,30 @@ def read_data(self):
123123
else:
124124
del self.buffer[:sync_index + 1]
125125
except serial.SerialException:
126-
print("Serial device disconnected!")
127126
self.cleanup()
128127

129128
def start_streaming(self):
130129
self.send_command('START')
130+
self.streaming_active = True
131131
try:
132-
while True:
132+
while self.streaming_active:
133133
self.read_data()
134134
except KeyboardInterrupt:
135135
print("KeyboardInterrupt received.")
136136
self.cleanup()
137137

138+
def stop_streaming(self):
139+
self.streaming_active = False
140+
self.send_command('STOP')
141+
138142
def cleanup(self):
143+
self.stop_streaming()
139144
try:
140145
if self.ser and self.ser.is_open:
141-
self.send_command('STOP')
142-
time.sleep(1)
143146
self.ser.close()
144-
print("Serial port closed.")
145147
except Exception as e:
146148
print(f"Error during cleanup: {e}")
147149

148-
print("Cleanup Completed.")
149-
sys.exit(0)
150-
151150
def signal_handler(self, sig, frame):
152151
self.cleanup()
153152

connection.py

Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
import asyncio
99
import csv
1010
from datetime import datetime
11+
import threading
1112

1213
class Connection:
1314
def __init__(self):
1415
self.ble_connection = None
1516
self.wifi_connection = None
17+
self.usb_connection = None
1618
self.lsl_connection = None
1719
self.stream_name = "BioAmpDataStream"
1820
self.stream_type = "EXG"
@@ -153,24 +155,28 @@ def notification_handler(sender, data):
153155
return False
154156

155157
def connect_usb(self):
156-
serial_connection = Chords_USB()
157-
if serial_connection.detect_hardware():
158-
self.num_channels = serial_connection.num_channels
159-
sampling_rate = serial_connection.supported_boards[serial_connection.board]["sampling_rate"]
158+
self.usb_connection = Chords_USB()
159+
if self.usb_connection.detect_hardware():
160+
self.num_channels = self.usb_connection.num_channels
161+
sampling_rate = self.usb_connection.supported_boards[self.usb_connection.board]["sampling_rate"]
160162

161163
self.setup_lsl(self.num_channels, sampling_rate)
162164

163-
original_read_data = serial_connection.read_data
165+
original_read_data = self.usb_connection.read_data
164166
def wrapped_read_data():
165167
original_read_data()
166-
if hasattr(serial_connection, 'data') and self.lsl_connection:
167-
sample = serial_connection.data[:, -1]
168+
if hasattr(self.usb_connection, 'data') and self.lsl_connection:
169+
sample = self.usb_connection.data[:, -1]
168170
self.lsl_connection.push_sample(sample)
169171
if self.recording_active:
170172
self.log_to_csv(sample.tolist())
171173

172-
serial_connection.read_data = wrapped_read_data
173-
serial_connection.start_streaming()
174+
self.usb_connection.read_data = wrapped_read_data
175+
176+
# Start streaming in a separate thread
177+
self.usb_thread = threading.Thread(target=self.usb_connection.start_streaming)
178+
self.usb_thread.daemon = True
179+
self.usb_thread.start()
174180
return True
175181
return False
176182

@@ -214,13 +220,42 @@ def connect_wifi(self):
214220

215221
def cleanup(self):
216222
self.stop_csv_recording()
217-
self.stream_active = False
218-
if self.ble_connection:
219-
self.ble_connection.disconnect()
220-
if self.wifi_connection:
221-
self.wifi_connection.disconnect()
223+
222224
if self.lsl_connection:
223225
self.lsl_connection = None
226+
print("LSL stream stopped")
227+
228+
if self.usb_connection:
229+
try:
230+
self.usb_connection.cleanup()
231+
print("USB connection closed")
232+
if hasattr(self, 'usb_thread') and self.usb_thread.is_alive():
233+
self.usb_thread.join(timeout=1) # Wait for thread to finish
234+
except Exception as e:
235+
print(f"Error closing USB connection: {str(e)}")
236+
finally:
237+
self.usb_connection = None
238+
239+
if self.ble_connection:
240+
try:
241+
self.ble_connection.disconnect()
242+
print("BLE connection closed")
243+
except Exception as e:
244+
print(f"Error closing BLE connection: {str(e)}")
245+
finally:
246+
self.ble_connection = None
247+
248+
if self.wifi_connection:
249+
try:
250+
self.wifi_connection.disconnect()
251+
print("WiFi connection closed")
252+
except Exception as e:
253+
print(f"Error closing WiFi connection: {str(e)}")
254+
finally:
255+
self.wifi_connection = None
256+
257+
self.stream_active = False
258+
self.recording_active = False
224259

225260
def __del__(self):
226261
self.cleanup()

0 commit comments

Comments
 (0)