@@ -58,6 +58,11 @@ def __init__(self, parent=None):
58
58
self .timer .timeout .connect (self .on_timer )
59
59
self .timer .start (20 ) # poll at 50 Hz
60
60
61
+ self .soft_reset = False # disable by default, enable if no LEGO device is detected
62
+
63
+ def set_soft_reset (self , mode ):
64
+ self .soft_reset = mode
65
+
61
66
def send_console (self , str ):
62
67
self .queue .put ( ( "console" , str ) )
63
68
@@ -97,10 +102,10 @@ def probe(self, device):
97
102
board .serial .timeout = 1
98
103
99
104
try :
100
- board .enter_raw_repl ()
105
+ board .enter_raw_repl (self . soft_reset )
101
106
except Exception as e :
102
107
try :
103
- board .enter_raw_repl ()
108
+ board .enter_raw_repl (self . soft_reset )
104
109
except Exception as e :
105
110
board .close ()
106
111
return None
@@ -257,7 +262,7 @@ def version(self):
257
262
258
263
def func (self , cmd ):
259
264
self .reply_parser () # reset parser
260
- self .board .enter_raw_repl ()
265
+ self .board .enter_raw_repl (self . soft_reset )
261
266
self .board .exec_ (cmd , data_consumer = self .reply_parser_ast )
262
267
self .board .exit_raw_repl ()
263
268
self .send_result (True , self .result )
@@ -267,27 +272,27 @@ def func_ls(self):
267
272
# of parsable python, so it can be eval'uated on PC side
268
273
self .func (
269
274
"import uos\n "
270
- "def list (d):\n "
275
+ "def _list (d):\n "
271
276
" print('[',end='')\n "
272
277
" first=True\n "
273
278
" for f in uos.ilistdir(d if d else '/'):\n "
274
279
# make sure we have a comma before anything but the first entry
275
280
" if first: first=False\n "
276
281
" else: print(',',end='')\n "
277
282
" print('(\" {}\" ,'.format(f[0]), end='')\n "
278
- " if f[1]&0x4000: list (d+'/'+f[0])\n "
283
+ " if f[1]&0x4000: _list (d+'/'+f[0])\n "
279
284
" else: print('{}'.format(f[3] if len(f)>3 else 0), end='')\n "
280
285
" print(')', end='')\n "
281
286
" print(']',end='')\n "
282
- "list ('')\n "
287
+ "_list ('')\n "
283
288
)
284
289
285
290
def ls (self ):
286
291
self .do_in_thread (self .func_ls )
287
292
288
293
def func_get (self , src , size , reply_parms , chunk_size = 256 ):
289
294
self .reply_parser () # reset parser
290
- self .board .enter_raw_repl ()
295
+ self .board .enter_raw_repl (self . soft_reset )
291
296
292
297
self .board .exec_ ("f=open('%s','rb')\n r=f.read" % src )
293
298
result = bytearray ()
@@ -313,33 +318,14 @@ def func_get(self, src, size, reply_parms, chunk_size=256):
313
318
reply_parms ["code" ] = result # add data read to reply
314
319
self .send_result (True , reply_parms )
315
320
316
- def func_get_old (self , name , size , reply_parms ):
317
- self .reply_parser () # reset parser
318
- self .board .enter_raw_repl ()
319
-
320
- # transfer data "binhexlified" to make sure even binary
321
- # data can be passed without problems
322
- command = ("import sys, ubinascii\n "
323
- "with open('{0}', 'rb') as infile:\n "
324
- " while True:\n "
325
- " result = infile.read(32)\n "
326
- " if result == b'': break\n "
327
- " sys.stdout.write(ubinascii.hexlify(result))\n " ).format (name )
328
-
329
- data = self .board .exec_ (command )
330
- self .board .exit_raw_repl ()
331
-
332
- reply_parms ["code" ] = binascii .unhexlify (data )
333
- self .send_result (True , reply_parms )
334
-
335
321
def get (self , name , size , reply_parms ):
336
322
self .progress .emit (0 )
337
323
self .status .emit (self .tr ("Reading {}" .format (name .split ("/" )[- 1 ])))
338
324
self .do_in_thread (self .func_get , ( name , size , reply_parms ) )
339
325
340
326
def func_put (self , all_data , dest , chunk_size = 256 ):
341
327
self .reply_parser () # reset parser
342
- self .board .enter_raw_repl ()
328
+ self .board .enter_raw_repl (self . soft_reset )
343
329
size = len (all_data )
344
330
sent = 0
345
331
@@ -369,7 +355,7 @@ def put(self, data, name):
369
355
370
356
def func_run (self , name , code ):
371
357
self .reply_parser () # reset parser
372
- self .board .enter_raw_repl ()
358
+ self .board .enter_raw_repl (self . soft_reset )
373
359
374
360
self .board .exec_raw_no_follow (code )
375
361
self .queue .put ( ( "downloaded" , ) )
@@ -413,7 +399,7 @@ def forceStop(self):
413
399
self .board ._interrupt = True
414
400
415
401
def replDo (self , cmd ):
416
- self .board .enter_raw_repl ()
402
+ self .board .enter_raw_repl (self . soft_reset )
417
403
self .board .exec_ (cmd )
418
404
self .board .exit_raw_repl ()
419
405
@@ -497,7 +483,7 @@ def cmd(self, cmd, cb, parms = None):
497
483
if cmd == Board .SCAN :
498
484
self .scan ()
499
485
500
- elif cmd == Board .GET_VERSION :
486
+ elif cmd == Board .GET_VERSION :
501
487
self .version ()
502
488
503
489
elif cmd == Board .LISTDIR :
0 commit comments