@@ -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