@@ -168,6 +168,7 @@ class ProtocolCode(object):
168168 GET_SERVO_STATUS = 0xE4
169169 GET_SERVO_TEMPS = 0xE5
170170 GET_SERVO_LASTPDI = 0xE6
171+ SERVO_RESTORE = 0xE7
171172
172173 GET_BASE_COORDS = 0xF0
173174 BASE_TO_SINGLE_COORDS = 0xF1
@@ -211,6 +212,7 @@ class ProtocolCode(object):
211212 LOCK_SERVOS = "M18"
212213 GET_CURRENT_COORD_INFO = "M114"
213214 GET_BACK_ZERO_STATUS = "M119"
215+ IS_MOVING_END = "M9"
214216
215217
216218class DataProcessor (object ):
@@ -313,7 +315,7 @@ def _process_received(self, data, genre, arm=6):
313315 header_i , header_j = 0 , 1
314316 while header_j < data_len - 4 :
315317 if self ._is_frame_header (data , header_i , header_j ):
316- if arm == 6 :
318+ if arm in [ 6 , 7 ] :
317319 cmd_id = data [header_i + 3 ]
318320 elif arm == 12 :
319321 cmd_id = data [header_i + 4 ]
@@ -324,7 +326,7 @@ def _process_received(self, data, genre, arm=6):
324326 header_j += 1
325327 else :
326328 return []
327- if arm == 6 :
329+ if arm in [ 6 , 7 ] :
328330 data_len = data [header_i + 2 ] - 2
329331 elif arm == 12 :
330332 data_len = data [header_i + 3 ] - 2
@@ -337,7 +339,7 @@ def _process_received(self, data, genre, arm=6):
337339 data_pos = header_i + 5
338340 data_len -= 1
339341 else :
340- if arm == 6 :
342+ if arm in [ 6 , 7 ] :
341343 data_pos = header_i + 4
342344 elif arm == 12 :
343345 data_pos = header_i + 5
@@ -346,11 +348,11 @@ def _process_received(self, data, genre, arm=6):
346348
347349 # process valid data
348350 res = []
349- if genre in [ProtocolCode .GET_SERVO_VOLTAGES , ProtocolCode .GET_SERVO_STATUS , ProtocolCode .GET_SERVO_TEMPS ]:
351+ if genre in [ProtocolCode .GET_SERVO_VOLTAGES , ProtocolCode .GET_SERVO_STATUS , ProtocolCode .GET_SERVO_TEMPS , ProtocolCode . GO_ZERO ]:
350352 for i in valid_data :
351353 res .append (i )
352- return res
353- if data_len in [6 , 8 , 12 , 14 , 24 , 60 ]:
354+ return res
355+ if data_len in [6 , 8 , 12 , 14 , 24 , 26 , 60 ]:
354356 for header_i in range (0 , len (valid_data ), 2 ):
355357 one = valid_data [header_i : header_i + 2 ]
356358 res .append (self ._decode_int16 (one ))
@@ -423,13 +425,15 @@ def write(self, command, method=None):
423425 self ._serial_port .flush ()
424426
425427
426- def read (self , genre , method = None ):
428+ def read (self , genre , method = None , command = None ):
427429 datas = b""
428430 data_len = - 1
429431 k = 0
430432 pre = 0
431433 t = time .time ()
432434 wait_time = 0.1
435+ if genre == ProtocolCode .GO_ZERO :
436+ wait_time = 120
433437 if method is not None :
434438 if genre == 177 :
435439 while True :
@@ -462,6 +466,12 @@ def read(self, genre, method=None):
462466 k += 1
463467 if data_len == 1 and data == b"\xfa " :
464468 datas += data
469+ if [i for i in datas ] == command :
470+ datas = b''
471+ data_len = - 1
472+ k = 0
473+ pre = 0
474+ continue
465475 break
466476 elif len (datas ) == 2 :
467477 data_len = struct .unpack ("b" , data )[0 ]
0 commit comments