1
1
#!/usr/bin/env python
2
- VERSION = "1.2.3 "
2
+ VERSION = "1.2.5 "
3
3
4
4
# Copyright (c) 2019, Pycom Limited.
5
5
#
@@ -67,6 +67,7 @@ def special_print(self, msg, flush=None, end='\n'):
67
67
print (msg , flush = flush , end = end )
68
68
69
69
def read_rsp (self , size = None , timeout = - 1 ):
70
+ time .sleep (.25 )
70
71
if timeout < 0 :
71
72
timeout = 20000
72
73
elif timeout is None :
@@ -338,15 +339,17 @@ def __get_wait_msg(self, load_fff=True):
338
339
339
340
340
341
341
- def __run (self , file_path = None , baudrate = 921600 , port = None , resume = False , load_ffh = False , mirror = False , switch_ffh = False , bootrom = False , rgbled = 0x050505 , debug = False , pkgdebug = False , atneg = True , max_try = 10 , direct = True , atneg_only = False , info_only = False , expected_smod = None , verbose = False , load_fff = False ):
342
+ def __run (self , file_path = None , baudrate = 921600 , port = None , resume = False , load_ffh = False , mirror = False , switch_ffh = False , bootrom = False , rgbled = 0x050505 , debug = False , pkgdebug = False , atneg = True , max_try = 10 , direct = True , atneg_only = False , info_only = False , expected_smod = None , verbose = False , load_fff = False , mtools = False ):
342
343
self .__wait_msg = False
343
344
mirror = True if atneg_only else mirror
344
345
recover = True if atneg_only else load_ffh
345
346
resume = True if mirror or recover or atneg_only or info_only else resume
346
347
verbose = True if debug else verbose
347
348
load_fff = False if bootrom and switch_ffh else load_fff
349
+ target_baudrate = baudrate
348
350
baudrate = self .__modem_speed if self .__speed_detected else baudrate
349
351
if debug : print ('mirror? {} recover? {} resume? {} direct? {} atneg_only? {} bootrom? {} load_fff? {}' .format (mirror , recover , resume , direct , atneg_only , bootrom , load_fff ))
352
+ if debug : print ('baudrate: {} target_baudrate: {}' .format (baudrate , target_baudrate ))
350
353
abort = True
351
354
external = False
352
355
self .__serial = None
@@ -416,7 +419,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
416
419
if not self .wakeup_modem (baudrate , port , 10 , 1 , debug ):
417
420
return False
418
421
419
- if not resume :
422
+ if ( not resume ) or mtools :
420
423
421
424
# bind to AT channel
422
425
self .__serial .write (b"AT+BIND=AT\r \n " )
@@ -430,17 +433,42 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
430
433
response = self .read_rsp (size = 100 )
431
434
if debug : print ("ATE0 returned {}" .format (response ))
432
435
433
- self .__serial .read (100 )
436
+ self .__serial .read ()
434
437
if debug : print ('Entering upgrade mode...' )
435
438
439
+ if verbose : print ("Sending AT+SMLOG?" )
440
+ self .__serial .write (b'AT+SMLOG?\r \n ' )
441
+ response = self .read_rsp (size = 100 )
442
+ if verbose : print ("AT+SMLOG? returned {}" .format (response ))
443
+
436
444
self .__serial .write (b"AT+SMOD?\r \n " )
437
445
response = self .return_pretty_response (self .read_rsp (size = 7 ))
438
- self .__serial .read (100 )
439
446
if debug : print ("AT+SMOD? returned {}" .format (response ))
440
447
448
+ if verbose : print ('Sending AT+FSRDFILE="/fs/crashdump"' )
449
+ self .__serial .write (b'AT+FSRDFILE="/fs/crashdump"\r \n ' )
450
+ response = self .read_rsp (size = 100 )
451
+ if verbose : print ('AT+FSRDFILE="/fs/crashdump" returned {}' .format (response ))
452
+ self .__serial .read ()
453
+
441
454
self .__serial .write (b"AT+SQNSUPGRADENTF=\" started\" \r \n " )
455
+ response = self .read_rsp (size = 100 )
456
+ if verbose : print ('AT+SQNSUPGRADENTF="started" returned {}' .format (response ))
442
457
self .wait_for_modem ()
443
- if not load_fff :
458
+
459
+ if verbose : print ('Sending AT+SQNWL="sqndcc",2' )
460
+ self .__serial .write (b'AT+SQNWL="sqndcc",2\r \n ' )
461
+ response = self .read_rsp (size = 100 )
462
+ if verbose : print ('AT+SQNWL="sqndcc",2 returned {}' .format (response ))
463
+ self .__serial .read (100 )
464
+
465
+ if verbose : print ("Sending AT+CFUN=4" )
466
+ self .__serial .write (b'AT+CFUN=4\r \n ' )
467
+ response = self .read_rsp (size = 100 )
468
+ if verbose : print ("AT+CFUN=4 returned {}" .format (response ))
469
+ self .__serial .read (100 )
470
+
471
+ if not (load_fff or mtools ):
444
472
self .__serial .write (b"AT+SMSWBOOT=3,1\r \n " )
445
473
resp = self .read_rsp (100 )
446
474
if debug : print ('AT+SMSWBOOT=3,1 returned: {}' .format (resp ))
@@ -463,6 +491,23 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
463
491
self .wait_for_modem ()
464
492
self .__serial .write (b"AT\r \n " )
465
493
494
+ if verbose : print ("Sending AT+CFUN=4" )
495
+ self .__serial .write (b'AT+CFUN=4\r \n ' )
496
+ response = self .read_rsp (size = 100 )
497
+ if verbose : print ("AT+CFUN=4 returned {}" .format (response ))
498
+
499
+ if verbose : print ("Sending AT+SMLOG?" )
500
+ self .__serial .write (b'AT+SMLOG?\r \n ' )
501
+ response = self .read_rsp (size = 100 )
502
+ if verbose : print ("AT+SMLOG? returned {}" .format (response ))
503
+
504
+ if verbose : print ('Sending AT+FSRDFILE="/fs/crashdump"' )
505
+ self .__serial .write (b'AT+FSRDFILE="/fs/crashdump"\r \n ' )
506
+ response = self .read_rsp (size = 100 )
507
+ if verbose : print ('AT+FSRDFILE="/fs/crashdump" returned {}' .format (response ))
508
+ self .__serial .read ()
509
+
510
+
466
511
else :
467
512
self .__serial .read (100 )
468
513
if debug : print ('Entering recovery mode' )
@@ -492,10 +537,6 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
492
537
print ('Starting STP ON_THE_FLY' )
493
538
494
539
self .__serial .read (100 )
495
- if verbose : print ("Sending AT+CFUN=4" )
496
- resonse = self .__serial .write (b'AT+CFUN=4\r \n ' )
497
- if verbose : print ("AT+CFUN=4 returned {}" .format (response ))
498
- self .__serial .read (100 )
499
540
500
541
if load_fff :
501
542
if debug : print ("Sending AT+SMSTPU" )
@@ -512,8 +553,11 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
512
553
self .__serial .read ()
513
554
elif recover and (not direct ):
514
555
if atneg :
515
- result = self .at_negotiation (baudrate , port , max_try , mirror , atneg_only , debug )
556
+ result = self .at_negotiation (baudrate , port , max_try , mirror , atneg_only , debug , target_baudrate )
516
557
if result :
558
+ baudrate = target_baudrate
559
+ self .__modem_speed = target_baudrate
560
+ self .__speed_detected = True
517
561
if atneg_only :
518
562
return True
519
563
if mirror :
@@ -671,7 +715,15 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
671
715
time .sleep (0.5 )
672
716
673
717
if 'success' in sqnup_result :
718
+ if verbose : print ('Sending AT+SQNSUPGRADENTF="success"' )
674
719
self .__serial .write (b"AT+SQNSUPGRADENTF=\" success\" \r \n " )
720
+ resonse = self .read_rsp (100 )
721
+ if verbose : print ('AT+SQNSUPGRADENTF="success" returned {}' .format (response ))
722
+ time .sleep (.25 )
723
+ if verbose : print ('Sending AT+FSRDFILE="/fs/crashdump"' )
724
+ self .__serial .write (b'AT+FSRDFILE="/fs/crashdump"\r \n ' )
725
+ resonse = self .read_rsp (100 )
726
+ if verbose : print ('AT+FSRDFILE="/fs/crashdump" returned {}' .format (response ))
675
727
self .__serial .read ()
676
728
return True
677
729
elif sqnup_result is None :
@@ -712,7 +764,11 @@ def wakeup_modem(self, baudrate, port, max_try, delay, debug, msg='Attempting AT
712
764
MAX_TRY = max_try
713
765
count = 0
714
766
if msg is not None :
715
- print (msg )
767
+ if debug :
768
+ print (msg + ' [{}]' .format (baudrate ))
769
+ else :
770
+ print (msg )
771
+
716
772
self .__serial .read ()
717
773
self .__serial .write (b"AT\r \n " )
718
774
response = self .read_rsp (size = 25 )
@@ -729,10 +785,13 @@ def wakeup_modem(self, baudrate, port, max_try, delay, debug, msg='Attempting AT
729
785
self .__serial = UART (1 , baudrate = baudrate , pins = self .__pins , timeout_chars = 100 )
730
786
return count < MAX_TRY
731
787
732
- def at_negotiation (self , baudrate , port , max_try , mirror , atneg_only , debug ):
788
+ def at_negotiation (self , baudrate , port , max_try , mirror , atneg_only , debug , target_baudrate ):
733
789
MAX_TRY = max_try
734
790
count = 0
735
- print ('Attempting AT auto-negotiation...' )
791
+ if debug :
792
+ print ('Attempting AT auto-negotiation... with baudrate {} and target_baudrate {}' .format (baudrate , target_baudrate ))
793
+ else :
794
+ print ('Attempting AT auto-negotiation...' )
736
795
self .__serial .write (b"AT\r \n " )
737
796
response = self .read_rsp (size = 20 )
738
797
if debug : print ('{}' .format (response ))
@@ -746,19 +805,21 @@ def at_negotiation(self, baudrate, port, max_try, mirror, atneg_only, debug):
746
805
if debug : print ('{}' .format (response ))
747
806
if b'OK' in response :
748
807
self .__serial .read ()
749
- cmd = "AT+IPR=%d\n " % baudrate
750
- if debug : print ('Setting baudrate to {}' .format (baudrate ))
808
+ cmd = "AT+IPR=%d\n " % target_baudrate
809
+ if debug : print ('Setting baudrate to {}' .format (target_baudrate ))
751
810
self .__serial .write (cmd .encode ())
752
811
response = self .read_rsp (size = 6 )
753
812
if debug : print ('{}' .format (response ))
754
813
if b'OK' in response :
814
+ self .__modem_speed = target_baudrate
815
+ self .__speed_detected = True
755
816
if atneg_only :
756
817
return True
757
818
if 'FiPy' in self .__sysname or 'GPy' in self .__sysname :
758
- self .__serial = UART (1 , baudrate = baudrate , pins = self .__pins , timeout_chars = 100 )
819
+ self .__serial = UART (1 , baudrate = target_baudrate , pins = self .__pins , timeout_chars = 100 )
759
820
else :
760
821
self .__serial = None
761
- self .__serial = serial .Serial (port , baudrate , bytesize = serial .EIGHTBITS , timeout = 0.1 )
822
+ self .__serial = serial .Serial (port , target_baudrate , bytesize = serial .EIGHTBITS , timeout = 0.1 )
762
823
self .__serial .reset_input_buffer ()
763
824
self .__serial .reset_output_buffer ()
764
825
self .__serial .flush ()
@@ -774,7 +835,7 @@ def at_negotiation(self, baudrate, port, max_try, mirror, atneg_only, debug):
774
835
print ('ERROR in AT+SMOD returned {}' .format (response ))
775
836
return False
776
837
else :
777
- print ('ERROR in AT+IPR={} returned {}' .format (baudrate , response ))
838
+ print ('ERROR in AT+IPR={} returned {}' .format (target_baudrate , response ))
778
839
return False
779
840
else :
780
841
print ('ERROR sending AT command... no response? {}' .format (response ))
@@ -794,7 +855,7 @@ def success_message(self, port=None, verbose=False, debug=False):
794
855
print ("Here is the current firmware version:\n " )
795
856
self .show_info (port = port , verbose = verbose , debug = debug )
796
857
797
- def upgrade (self , ffile , mfile = None , baudrate = 921600 , retry = False , resume = False , debug = False , pkgdebug = False , verbose = False , load_fff = True , load_only = False ):
858
+ def upgrade (self , ffile , mfile = None , baudrate = 921600 , retry = False , resume = False , debug = False , pkgdebug = False , verbose = False , load_fff = True , load_only = False , mtools = False ):
798
859
success = True
799
860
if not retry and mfile is not None :
800
861
if resume or self .__check_br (br_only = True , verbose = verbose , debug = debug ):
@@ -819,7 +880,7 @@ def upgrade(self, ffile, mfile=None, baudrate=921600, retry=False, resume=False,
819
880
print ('Unable to upgrade bootrom.' )
820
881
if debug : print ('Success2? {}' .format (success ))
821
882
if success :
822
- if self .__run (file_path = ffile , resume = True if mfile is not None else resume , baudrate = baudrate , direct = False , debug = debug , pkgdebug = pkgdebug , verbose = verbose , load_fff = False if mfile else load_fff ):
883
+ if self .__run (file_path = ffile , resume = True if mfile is not None else resume , baudrate = baudrate , direct = False , debug = debug , pkgdebug = pkgdebug , verbose = verbose , load_fff = False if mfile else load_fff , mtools = mtools ):
823
884
if self .__check_br (verbose = verbose , debug = debug ):
824
885
self .__run (bootrom = True , debug = debug , direct = False , pkgdebug = pkgdebug , verbose = verbose , load_fff = True )
825
886
self .success_message (verbose = verbose , debug = debug )
@@ -839,8 +900,15 @@ def upgrade_uart(self, ffh_mode=False, mfile=None, retry=False, resume=False, co
839
900
print ('Preparing modem for upgrade...' )
840
901
if not retry and ffh_mode :
841
902
success = False
842
- success = self .__run (bootrom = True , resume = resume , switch_ffh = True , direct = False , debug = debug , pkgdebug = pkgdebug , verbose = verbose )
843
- time .sleep (1 )
903
+ if self .__check_br (verbose = verbose , debug = debug ):
904
+ success = self .__run (bootrom = True , resume = resume , switch_ffh = True , direct = False , debug = debug , pkgdebug = pkgdebug , verbose = verbose )
905
+ time .sleep (1 )
906
+ else :
907
+ print ('FFH mode is not necessary... ignoring!' )
908
+ print ('Do not specify updater.elf when updating!' )
909
+ mfile = None
910
+ ffh_mode = False
911
+ success = True
844
912
if success :
845
913
if mfile is not None :
846
914
success = False
@@ -904,6 +972,7 @@ def run(ffile, mfile=None, baudrate=921600, verbose=False, debug=False, load_fff
904
972
print_welcome ()
905
973
retry = False
906
974
resume = False
975
+ mtools = False
907
976
sqnup = sqnsupgrade ()
908
977
if sqnup .check_files (ffile , mfile , debug ):
909
978
state = sqnup .detect_modem_state (debug = debug , hangup = hangup )
@@ -916,11 +985,13 @@ def run(ffile, mfile=None, baudrate=921600, verbose=False, debug=False, load_fff
916
985
print ('Your modem is in recovery mode. Please specify updater.elf file' )
917
986
reconnect_uart ()
918
987
sys .exit (1 )
919
- elif state == 4 or state == 1 :
988
+ elif state == 4 :
920
989
resume = True
990
+ elif state == 1 :
991
+ mtools = True
921
992
elif state == - 1 :
922
993
detect_error ()
923
- sqnup .upgrade (ffile = ffile , mfile = mfile , baudrate = baudrate , retry = retry , resume = resume , debug = debug , pkgdebug = False , verbose = verbose , load_fff = load_fff )
994
+ sqnup .upgrade (ffile = ffile , mfile = mfile , baudrate = baudrate , retry = retry , resume = resume , debug = debug , pkgdebug = False , verbose = verbose , load_fff = load_fff , mtools = mtools )
924
995
reconnect_uart ()
925
996
926
997
def uart (ffh_mode = False , mfile = None , color = 0x050505 , verbose = False , debug = False , hangup = True ):
0 commit comments