1
1
#!/usr/bin/env python
2
- VERSION = "1.2.5 "
2
+ VERSION = "1.2.6 "
3
3
4
4
# Copyright (c) 2019, Pycom Limited.
5
5
#
@@ -339,7 +339,7 @@ def __get_wait_msg(self, load_fff=True):
339
339
340
340
341
341
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
+ 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 , fc = False ):
343
343
self .__wait_msg = False
344
344
mirror = True if atneg_only else mirror
345
345
recover = True if atneg_only else load_ffh
@@ -365,7 +365,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
365
365
external = True
366
366
br = 115200 if recover and not direct else baudrate
367
367
if debug : print ('Setting baudrate to {}' .format (br ))
368
- self .__serial = serial .Serial (port , br , bytesize = serial .EIGHTBITS , timeout = 1 if info_only else 0.1 )
368
+ self .__serial = serial .Serial (port , br , bytesize = serial .EIGHTBITS , timeout = 1 if info_only else 0.1 , rtscts = fc )
369
369
self .__serial .reset_input_buffer ()
370
370
self .__serial .reset_output_buffer ()
371
371
@@ -408,7 +408,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
408
408
if blobsize < 128 :
409
409
print ('Firmware file is too small!' )
410
410
reconnect_uart ()
411
- sys . exit ( 1 )
411
+ return False
412
412
if blobsize > 4194304 :
413
413
if load_fff :
414
414
print ("Firmware file is too big to load via FFF method. Using ON_THE_FLY" )
@@ -447,7 +447,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
447
447
448
448
if verbose : print ('Sending AT+FSRDFILE="/fs/crashdump"' )
449
449
self .__serial .write (b'AT+FSRDFILE="/fs/crashdump"\r \n ' )
450
- response = self .read_rsp (size = 100 )
450
+ response = self .read_rsp (size = 1024 )
451
451
if verbose : print ('AT+FSRDFILE="/fs/crashdump" returned {}' .format (response ))
452
452
self .__serial .read ()
453
453
@@ -484,7 +484,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
484
484
else :
485
485
print ('Received ERROR from AT+SMSWBOOT=3,1! Aborting!' )
486
486
reconnect_uart ()
487
- sys . exit ( 1 )
487
+ return False
488
488
time .sleep (3 )
489
489
resp = self .__serial .read ()
490
490
if debug : print ("Response after reset: {}" .format (resp ))
@@ -548,7 +548,10 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
548
548
response = self .read_rsp (size = 4 )
549
549
if response != b'OK\r \n ' and response != b'\r \n OK' and response != b'\n OK' :
550
550
raise OSError ("Invalid answer '%s' from the device" % response )
551
- blob .close ()
551
+ try :
552
+ blob .close ()
553
+ except :
554
+ pass
552
555
553
556
self .__serial .read ()
554
557
elif recover and (not direct ):
@@ -571,7 +574,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
571
574
if not b'OK' in response :
572
575
print ('Failed to start STP mode!' )
573
576
reconnect_uart ()
574
- sys . exit ( 1 )
577
+ return False
575
578
else :
576
579
print ('AT auto-negotiation failed! Exiting.' )
577
580
return False
@@ -582,13 +585,18 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
582
585
if not b'OK' in response :
583
586
print ('Failed to start STP mode!' )
584
587
reconnect_uart ()
585
- sys . exit ( 1 )
588
+ return False
586
589
587
590
try :
588
591
if debug :
589
592
if verbose : print ('Starting STP code upload' )
590
- if stp .start (blob , blobsize , self .__serial , baudrate , AT = False , debug = debug , pkgdebug = pkgdebug ):
591
- blob .close ()
593
+ start = stp .start (blob , blobsize , self .__serial , baudrate , AT = False , debug = debug , pkgdebug = pkgdebug )
594
+ if debug : print ('start returned {} type {}' .format (start , type (start )))
595
+ if start == True :
596
+ try :
597
+ blob .close ()
598
+ except :
599
+ pass
592
600
self .__serial .read ()
593
601
if switch_ffh :
594
602
if verbose : print ('Bootrom updated successfully, switching to recovery mode' )
@@ -602,12 +610,19 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
602
610
if verbose : print ('Code download done, returning to user mode' )
603
611
abort = recover
604
612
else :
605
- blob .close ()
606
- print ('Code download failed, aborting!' )
613
+ try :
614
+ blob .close ()
615
+ except :
616
+ pass
617
+ print ('Code download failed[1], aborting!' )
607
618
return False
608
- except :
609
- blob .close ()
610
- print ('Code download failed, aborting!' )
619
+ except Exception as ex :
620
+ try :
621
+ blob .close ()
622
+ except :
623
+ pass
624
+ print ('Exception: {}' .format (ex ))
625
+ print ('Code download failed [2], aborting!' )
611
626
abort = True
612
627
613
628
time .sleep (1.5 )
@@ -638,7 +653,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
638
653
if not self .wakeup_modem (baudrate , port , 100 , 1 , debug , self .__get_wait_msg (load_fff = load_fff )):
639
654
print ("Timeout while waiting for modem to finish updating!" )
640
655
reconnect_uart ()
641
- sys . exit ( 1 )
656
+ return False
642
657
643
658
start = time .time ()
644
659
while True :
@@ -708,7 +723,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
708
723
else :
709
724
print ("Invalid response after upgrade... aborting." )
710
725
reconnect_uart ()
711
- sys . exit ( 1 )
726
+ return False
712
727
713
728
self .__serial .write (b"AT\r \n " )
714
729
self .__serial .write (b"AT\r \n " )
@@ -819,7 +834,7 @@ def at_negotiation(self, baudrate, port, max_try, mirror, atneg_only, debug, tar
819
834
self .__serial = UART (1 , baudrate = target_baudrate , pins = self .__pins , timeout_chars = 100 )
820
835
else :
821
836
self .__serial = None
822
- self .__serial = serial .Serial (port , target_baudrate , bytesize = serial .EIGHTBITS , timeout = 0.1 )
837
+ self .__serial = serial .Serial (port , target_baudrate , bytesize = serial .EIGHTBITS , timeout = 0.1 , rtscts = fc )
823
838
self .__serial .reset_input_buffer ()
824
839
self .__serial .reset_output_buffer ()
825
840
self .__serial .flush ()
@@ -882,10 +897,11 @@ def upgrade(self, ffile, mfile=None, baudrate=921600, retry=False, resume=False,
882
897
if success :
883
898
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 ):
884
899
if self .__check_br (verbose = verbose , debug = debug ):
885
- self .__run (bootrom = True , debug = debug , direct = False , pkgdebug = pkgdebug , verbose = verbose , load_fff = True )
900
+ success = self .__run (bootrom = True , debug = debug , direct = False , pkgdebug = pkgdebug , verbose = verbose , load_fff = True )
886
901
self .success_message (verbose = verbose , debug = debug )
887
902
else :
888
903
print ('Unable to load updater from {}' .format (mfile ))
904
+ return success
889
905
890
906
def upgrade_uart (self , ffh_mode = False , mfile = None , retry = False , resume = False , color = 0x050505 , debug = False , pkgdebug = False , verbose = False , load_fff = True ):
891
907
success = False
@@ -896,7 +912,7 @@ def upgrade_uart(self, ffh_mode=False, mfile=None, retry=False, resume=False, co
896
912
if not success :
897
913
print ('Firmware does not support LTE.modem_upgrade_mode()!' )
898
914
reconnect_uart ()
899
- sys . exit ( 1 )
915
+ return False
900
916
print ('Preparing modem for upgrade...' )
901
917
if not retry and ffh_mode :
902
918
success = False
@@ -923,16 +939,16 @@ def upgrade_uart(self, ffh_mode=False, mfile=None, retry=False, resume=False, co
923
939
else :
924
940
print ('Unable to upgrade bootrom.' )
925
941
926
- def show_info (self , port = None , debug = False , verbose = False ):
927
- self .__run (port = port , debug = debug , info_only = True , verbose = verbose )
942
+ def show_info (self , port = None , debug = False , verbose = False , fc = False ):
943
+ self .__run (port = port , debug = debug , info_only = True , verbose = verbose , fc = fc )
928
944
929
- def upgrade_ext (self , port , ffile , mfile , resume = False , debug = False , pkgdebug = False , verbose = False , load_fff = True ):
945
+ def upgrade_ext (self , port , ffile , mfile , resume = False , debug = False , pkgdebug = False , verbose = False , load_fff = True , fc = False ):
930
946
success = True
931
947
if mfile is not None :
932
948
success = False
933
- success = self .__run (file_path = mfile , load_ffh = True , port = port , debug = debug , pkgdebug = pkgdebug , verbose = verbose )
949
+ success = self .__run (file_path = mfile , load_ffh = True , port = port , debug = debug , pkgdebug = pkgdebug , verbose = verbose , fc = fc )
934
950
if success :
935
- if self .__run (file_path = ffile , resume = True if mfile is not None else resume , direct = False , port = port , debug = debug , pkgdebug = pkgdebug , verbose = verbose , load_fff = load_fff ):
951
+ if self .__run (file_path = ffile , resume = True if mfile is not None else resume , direct = False , port = port , debug = debug , pkgdebug = pkgdebug , verbose = verbose , load_fff = load_fff , fc = fc ):
936
952
self .success_message (port = port , verbose = verbose , debug = debug )
937
953
else :
938
954
print ('Unable to load updater from {}' .format (mfile ))
@@ -941,7 +957,7 @@ def detect_error():
941
957
print ('Could not detect your modem!' )
942
958
print ('Please try to power off your device and restart in safeboot mode.' )
943
959
reconnect_uart ()
944
- sys . exit ( 1 )
960
+ return False
945
961
946
962
def print_welcome ():
947
963
print ('<<< Welcome to the SQN3330 firmware updater [{}] >>>' .format (VERSION ))
@@ -973,6 +989,7 @@ def run(ffile, mfile=None, baudrate=921600, verbose=False, debug=False, load_fff
973
989
retry = False
974
990
resume = False
975
991
mtools = False
992
+ success = False
976
993
sqnup = sqnsupgrade ()
977
994
if sqnup .check_files (ffile , mfile , debug ):
978
995
state = sqnup .detect_modem_state (debug = debug , hangup = hangup )
@@ -984,15 +1001,16 @@ def run(ffile, mfile=None, baudrate=921600, verbose=False, debug=False, load_fff
984
1001
if mfile is None :
985
1002
print ('Your modem is in recovery mode. Please specify updater.elf file' )
986
1003
reconnect_uart ()
987
- sys . exit ( 1 )
1004
+ return False
988
1005
elif state == 4 :
989
1006
resume = True
990
1007
elif state == 1 :
991
1008
mtools = True
992
1009
elif state == - 1 :
993
1010
detect_error
1CF5
span>()
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 )
1011
+ success = sqnup .upgrade (ffile = ffile , mfile = mfile , baudrate = baudrate , retry = retry , resume = resume , debug = debug , pkgdebug = False , verbose = verbose , load_fff = load_fff , mtools = mtools )
995
1012
reconnect_uart ()
1013
+ return success
996
1014
997
1015
def uart (ffh_mode = False , mfile = None , color = 0x050505 , verbose = False , debug = False , hangup = True ):
998
1016
print_welcome ()
@@ -1054,12 +1072,12 @@ def state(verbose=False, debug=False, retry=5, hangup=False):
1054
1072
return sqnup .detect_modem_state (debug = debug , hangup = hangup , retry = retry )
1055
1073
1056
1074
else :
1057
- def run (port , ffile , mfile = None , resume = False , debug = False , verbose = False , load_fff = True ):
1075
+ def run (port , ffile , mfile = None , resume = False , debug = False , verbose = False , load_fff = True , fc = False ):
1058
1076
print_welcome ()
1059
1077
sqnup = sqnsupgrade ()
1060
1078
if sqnup .check_files (ffile , mfile , debug ):
1061
1079
sqnup .upgrade_ext (port = port , ffile = ffile , mfile = mfile , resume = resume , debug = debug , pkgdebug = False , verbose = verbose , load_fff = load_fff )
1062
1080
1063
- def version (port , verbose = False , debug = False ):
1081
+ def version (port , verbose = False , debug = False , fc = False ):
1064
1082
sqnup = sqnsupgrade ()
1065
1083
sqnup .show_info (port = port , debug = debug , verbose = verbose )
0 commit comments