Skip to content

Commit a3f5a84

Browse files
committed
Open connection to controller
1 parent 3eade55 commit a3f5a84

File tree

2 files changed

+35
-42
lines changed

2 files changed

+35
-42
lines changed

neobot/connector copy.py

Lines changed: 0 additions & 20 deletions
This file was deleted.

neobot/serial_connector.py

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
BAUD_RATE = 115200
2929
VALID_PACKET_LENGTH = 8
3030
RETRY = 10
31-
TIMEOUT = 0.1
31+
TIMEOUT = 0.4
32+
START_BYTES = bytearray([0xab, 0xcd])
3233

3334
class SerialConnector(object):
3435
def __init__(self, tag, connection_checker, loader=None):
@@ -59,7 +60,15 @@ def open(self, port_name=None):
5960
def _open_port(self, port_name):
6061
if port_name:
6162
try:
62-
s = serial.Serial(port_name, BAUD_RATE, rtscts=True, timeout=0.1)
63+
s = serial.Serial(
64+
port = port_name, # For example, '/dev/cu.SLAB_USBtoUART',
65+
baudrate = BAUD_RATE,
66+
parity = serial.PARITY_NONE,
67+
stopbits = serial.STOPBITS_ONE,
68+
bytesize = serial.EIGHTBITS,
69+
# Number of serial commands to accept before timing out
70+
timeout=0.1,
71+
)
6372
s.reset_input_buffer()
6473
s.reset_output_buffer()
6574
self._port_name = port_name
@@ -69,7 +78,7 @@ def _open_port(self, port_name):
6978
return result
7079
s.close()
7180
except:
72-
pass
81+
pass # pass SerialException
7382
return Result.NOT_AVAILABLE
7483

7584
def close(self):
@@ -95,28 +104,34 @@ def _set_connection_state(self, state):
95104
if self._found:
96105
if state == State.CONNECTED:
97106
address = self._address
98-
if len(address) >= 12:
107+
if len(address) >= 12 and address != '000000000000':
99108
self._print_message("Connected: {} {}:{}:{}:{}:{}:{}".format(self._port_name, address[10:12], address[8:10], address[6:8], address[4:6], address[2:4], address[0:2]))
100109
else:
101110
self._print_message("Connected: {}".format(self._port_name))
102111
elif state == State.CONNECTION_LOST:
103112
self._print_error("Connection lost")
104113

105-
def _read_line(self, serial, start_byte):
114+
def _read_line(self, serial, start_byte=None):
106115
try:
107116
line = bytearray()
108-
terminator = ord("\r")
117+
c = serial.read(1) # 1byte
109118
while True:
110-
c = serial.read()[0]
111-
line.append(c)
112-
if c == terminator: break
113-
return line.decode("utf-8")
119+
if c:
120+
# Checks for more bytes in the input buffer
121+
bufferBytes = serial.inWaiting()
122+
if bufferBytes:
123+
line = c + serial.read(bufferBytes)
124+
print('Recv: ', line) # For debug, temporary
125+
if line[:2] == start_byte:
126+
return line
127+
else:
128+
return ""
114129
except:
115130
return ""
116131

117132
def _read_packet(self, serial, start_byte=None):
118133
try:
119-
packet = self._read_line(serial)
134+
packet = self._read_line(serial, start_byte)
120135
if start_byte is None:
121136
return packet
122137
if packet[:2] == start_byte:
@@ -128,14 +143,15 @@ def _read_packet(self, serial, start_byte=None):
128143
def write(self, packet):
129144
if self._serial:
130145
try:
131-
self._serial.write(packet.encode())
146+
self._serial.write(bytes.fromhex(packet))
147+
print('Sent: ', bytes.fromhex(packet)) # For debug, temporary
132148
except:
133149
pass
134150

135151
def read(self):
136152
if self._serial:
137153
try:
138-
packet = self._read_line(self._serial)
154+
packet = self._read_line(self._serial, START_BYTES)
139155
if len(packet) == VALID_PACKET_LENGTH:
140156
if self._found == False:
141157
self._check_connection(self._serial)
@@ -156,15 +172,12 @@ def read(self):
156172
return None
157173

158174
def _check_port(self, serial):
159-
self._read_packet(serial)
160-
packet1 = self._read_packet(serial)
161-
packet2 = self._read_packet(serial)
162-
if packet1:
163-
if len(packet1) == VALID_PACKET_LENGTH:
164-
return self._check_connection(serial)
165-
elif packet1 and len(packet2) == 2:
166-
self._print_error("Not connected")
167-
return Result.NOT_CONNECTED
175+
for i in range(RETRY):
176+
packet = self._read_packet(serial, bytearray([0xab, 0xcd]))
177+
if packet:
178+
if len(packet) == VALID_PACKET_LENGTH:
179+
self._set_connection_state(State.CONNECTED)
180+
return Result.FOUND
168181
return Result.NOT_AVAILABLE
169182

170183
def _check_connection(self, serial):

0 commit comments

Comments
 (0)