11#!/usr/bin/env python
2- VERSION = "1.2.4 "
2+ VERSION = "1.2.5 "
33
44# Copyright (c) 2019, Pycom Limited.
55#
@@ -67,6 +67,7 @@ def special_print(self, msg, flush=None, end='\n'):
6767 print (msg , flush = flush , end = end )
6868
6969 def read_rsp (self , size = None , timeout = - 1 ):
70+ time .sleep (.25 )
7071 if timeout < 0 :
7172 timeout = 20000
7273 elif timeout is None :
@@ -338,7 +339,7 @@ def __get_wait_msg(self, load_fff=True):
338339
339340
340341
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 ):
342343 self .__wait_msg = False
343344 mirror = True if atneg_only else mirror
344345 recover = True if atneg_only else load_ffh
@@ -418,7 +419,7 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
418419 if not self .wakeup_modem (baudrate , port , 10 , 1 , debug ):
419420 return False
420421
421- if not resume :
422+ if ( not resume ) or mtools :
422423
423424 # bind to AT channel
424425 self .__serial .write (b"AT+BIND=AT\r \n " )
@@ -432,17 +433,42 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
432433 response = self .read_rsp (size = 100 )
433434 if debug : print ("ATE0 returned {}" .format (response ))
434435
435- self .__serial .read (100 )
436+ self .__serial .read ()
436437 if debug : print ('Entering upgrade mode...' )
437438
438439 self .__serial .write (b"AT+SMOD?\r \n " )
439440 response = self .return_pretty_response (self .read_rsp (size = 7 ))
440- self .__serial .read (100 )
441441 if debug : print ("AT+SMOD? returned {}" .format (response ))
442442
443+ if verbose : print ("Sending AT+SMLOG?" )
444+ self .__serial .write (b'AT+SMLOG?\r \n ' )
445+ response = self .read_rsp (size = 100 )
446+ if verbose : print ("AT+SMLOG? returned {}" .format (response ))
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+
443454 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 ))
444457 self .wait_for_modem ()
445- if not load_fff :
458+
459+ if verbose : print ('Sending AT+SQNWL="sqndcc"' )
460+ self .__serial .write (b'AT+SQNWL="sqndcc"\r \n ' )
461+ response = self .read_rsp (size = 100 )
462+ if verbose : print ('AT+SQNWL="sqndcc" 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 ):
446472 self .__serial .write (b"AT+SMSWBOOT=3,1\r \n " )
447473 resp = self .read_rsp (100 )
448474 if debug : print ('AT+SMSWBOOT=3,1 returned: {}' .format (resp ))
@@ -465,6 +491,23 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
465491 self .wait_for_modem ()
466492 self .__serial .write (b"AT\r \n " )
467493
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+
468511 else :
469512 self .__serial .read (100 )
470513 if debug : print ('Entering recovery mode' )
@@ -494,10 +537,6 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
494537 print ('Starting STP ON_THE_FLY' )
495538
496539 self .__serial .read (100 )
497- if verbose : print ("Sending AT+CFUN=4" )
498- resonse = self .__serial .write (b'AT+CFUN=4\r \n ' )
499- if verbose : print ("AT+CFUN=4 returned {}" .format (response ))
500- self .__serial .read (100 )
501540
502541 if load_fff :
503542 if debug : print ("Sending AT+SMSTPU" )
@@ -676,7 +715,15 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
676715 time .sleep (0.5 )
677716
678717 if 'success' in sqnup_result :
718+ if verbose : print ('Sending AT+SQNSUPGRADENTF="success"' )
679719 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 ))
680727 self .__serial .read ()
681728 return True
682729 elif sqnup_result is None :
@@ -718,7 +765,7 @@ def wakeup_modem(self, baudrate, port, max_try, delay, debug, msg='Attempting AT
718765 count = 0
719766 if msg is not None :
720767 if debug :
721- print (msg + 'with baudrate {} ' .format (baudrate ))
768+ print (msg + ' [{}] ' .format (baudrate ))
722769 else :
723770 print (msg )
724771
@@ -808,7 +855,7 @@ def success_message(self, port=None, verbose=False, debug=False):
808855 print ("Here is the current firmware version:\n " )
809856 self .show_info (port = port , verbose = verbose , debug = debug )
810857
811- 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 ):
812859 success = True
813860 if not retry and mfile is not None :
814861 if resume or self .__check_br (br_only = True , verbose = verbose , debug = debug ):
@@ -833,7 +880,7 @@ def upgrade(self, ffile, mfile=None, baudrate=921600, retry=False, resume=False,
833880 print ('Unable to upgrade bootrom.' )
834881 if debug : print ('Success2? {}' .format (success ))
835882 if success :
836- 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 ):
837884 if self .__check_br (verbose = verbose , debug = debug ):
838885 self .__run (bootrom = True , debug = debug , direct = False , pkgdebug = pkgdebug , verbose = verbose , load_fff = True )
839886 self .success_message (verbose = verbose , debug = debug )
@@ -925,6 +972,7 @@ def run(ffile, mfile=None, baudrate=921600, verbose=False, debug=False, load_fff
925972 print_welcome ()
926973 retry = False
927974 resume = False
975+ mtools = False
928976 sqnup = sqnsupgrade ()
929977 if sqnup .check_files (ffile , mfile , debug ):
930978 state = sqnup .detect_modem_state (debug = debug , hangup = hangup )
@@ -937,11 +985,13 @@ def run(ffile, mfile=None, baudrate=921600, verbose=False, debug=False, load_fff
937985 print ('Your modem is in recovery mode. Please specify updater.elf file' )
938986 reconnect_uart ()
939987 sys .exit (1 )
940- elif state == 4 or state == 1 :
988+ elif state == 4 :
941989 resume = True
990+ elif state == 1 :
991+ mtools = True
942992 elif state == - 1 :
943993 detect_error ()
944- 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 )
945995 reconnect_uart ()
946996
947997 def uart (ffh_mode = False , mfile = None , color = 0x050505 , verbose = False , debug = False , hangup = True ):
0 commit comments