Skip to content

Commit 2b0fa24

Browse files
committed
Set serial port read timeout
1 parent edfbf62 commit 2b0fa24

File tree

1 file changed

+27
-21
lines changed

1 file changed

+27
-21
lines changed

pymycobot/common.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ def _encode_int16(self, data):
153153
return sum([list(struct.pack('>h', elem)) for elem in data], [])
154154

155155
def _decode_int8(self, data):
156-
return struct.unpack("b", data)[0]
156+
return struct.unpack("B", data)[0]
157157

158158
def _decode_int16(self, data):
159159
return struct.unpack(">h", data)[0]
@@ -192,7 +192,6 @@ def _is_frame_header(self, data, pos1, pos2):
192192
return data[pos1] == ProtocolCode.HEADER and data[pos2] == ProtocolCode.HEADER
193193

194194
def _process_received(self, data, genre):
195-
print(data)
196195
if genre == 177:
197196
data = str(data)[2:-1].split(": ")
198197
return data[1][0:-9], data[-1]
@@ -288,26 +287,33 @@ def read(self):
288287
data_len = -1
289288
k = 0
290289
pre = 0
291-
while True:
292-
data = self._serial_port.read()
293-
k+=1
294-
if data_len == 1 and data == b'\xfa':
295-
datas += data
296-
break
297-
elif len(datas) == 2:
298-
data_len = struct.unpack("b",data)[0]
299-
datas += data
300-
elif len(datas)>2 and data_len>0:
301-
datas += data
302-
data_len -= 1
303-
elif data == b'\xfe':
304-
if datas == b'':
290+
t = time.time()
291+
while True and time.time() - t < 0.1:
292+
try:
293+
data = self._serial_port.read()
294+
k+=1
295+
if data_len == 1 and data == b'\xfa':
296+
datas += data
297+
break
298+
elif len(datas) == 2:
299+
data_len = struct.unpack("b",data)[0]
305300
datas += data
306-
pre = k
307-
else:
308-
if k-1 == pre:
301+
elif len(datas)>2 and data_len>0:
302+
datas += data
303+
data_len -= 1
304+
elif data == b'\xfe':
305+
if datas == b'':
309306
datas += data
307+
pre = k
310308
else:
311-
datas = b'\xfe'
312-
pre = k
309+
if k-1 == pre:
310+
datas += data
311+
else:
312+
datas = b'\xfe'
313+
pre = k
314+
except:
315+
datas = None
316+
break
317+
else:
318+
datas = None
313319
return datas

0 commit comments

Comments
 (0)