Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit 3ce7552

Browse files
author
iwahdan88
committed
esp32/sqnsupgrade: Updated to V1.2.3
1 parent 937d4a4 commit 3ce7552

File tree

1 file changed

+98
-34
lines changed

1 file changed

+98
-34
lines changed

esp32/frozen/LTE/sqnsupgrade.py

Lines changed: 98 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/usr/bin/env python
2-
VERSION = "1.2.2"
2+
VERSION = "1.2.3"
33

44
# Copyright (c) 2019, Pycom Limited.
55
#
@@ -17,6 +17,7 @@
1717
import sqnstp as stp
1818

1919
release = None
20+
2021
try:
2122
sysname = os.uname().sysname
2223
if 'FiPy' in sysname or 'GPy' in sysname:
@@ -50,6 +51,8 @@ def __init__(self):
5051
self.__resp_921600 = False
5152
self.__serial = None
5253
self.__kill_ppp_ok = False
54+
self.__modem_speed = None
55+
self.__speed_detected = False
5356

5457
if 'GPy' in self.__sysname:
5558
self.__pins = ('P5', 'P98', 'P7', 'P99')
@@ -86,7 +89,8 @@ def read_rsp(self, size=None, timeout=-1):
8689
else:
8790
return b''
8891

89-
def print_pretty_response(self, rsp, flush=False):
92+
def print_pretty_response(self, rsp, flush=False, prefix=None):
93+
if prefix is not None: self.special_print(prefix, flush=flush, end=' ')
9094
lines = rsp.decode('ascii').split('\r\n')
9195
for line in lines:
9296
if 'OK' not in line and line!='':
@@ -222,17 +226,20 @@ def __hangup_modem(self, delay, debug):
222226
return False
223227

224228

225-
def detect_modem_state(self, retry=3, initial_delay=1000, debug=False):
229+
def detect_modem_state(self, retry=5, initial_delay=1000, hangup=True, debug=False):
226230
count = 0
227231
self.__serial = UART(1, baudrate=921600, pins=self.__pins, timeout_chars=1)
232+
self.__modem_speed = 921600
228233
self.__serial.read()
229234
while count < retry:
230235
count += 1
231236
delay = initial_delay * count
232237
if debug: print("The current delay is {}".format(delay))
233238
self.__serial = UART(1, baudrate=921600, pins=self.__pins, timeout_chars=10)
239+
self.__modem_speed = 921600
234240
#if True:
235-
if self.__hangup_modem(initial_delay, debug):
241+
if hangup and self.__hangup_modem(initial_delay, debug):
242+
self.__speed_detected = True
236243
self.__serial.write(b"AT+SMOD?\r\n")
237244
time.sleep_ms(delay)
238245
resp = self.__serial.read()
@@ -242,6 +249,7 @@ def detect_modem_state(self, retry=3, initial_delay=1000, debug=False):
242249
except:
243250
pass
244251
else:
252+
self.__modem_speed = 921600
245253
self.__serial = UART(1, baudrate=921600, pins=self.__pins, timeout_chars=1)
246254
self.__serial.read()
247255
self.__serial.write(b"AT\r\n")
@@ -250,6 +258,7 @@ def detect_modem_state(self, retry=3, initial_delay=1000, debug=False):
250258
self.__check_resp(resp)
251259
if debug: print('Response (AT #3) {}'.format(resp))
252260
if resp is not None and b'OK' in resp:
261+
self.__speed_detected = True
253262
self.__serial.write(b"AT+SMOD?\r\n")
254263
time.sleep_ms(delay)
255264
resp = self.__serial.read()
@@ -264,6 +273,7 @@ def detect_modem_state(self, retry=3, initial_delay=1000, debug=False):
264273
self.__check_resp(resp)
265274
if debug: print('Response (AT #4) {}'.format(resp))
266275
if resp is not None and b'OK' in resp:
276+
self.__speed_detected = True
267277
self.__serial.write(b"AT+SMOD?\r\n")
268278
time.sleep_ms(delay)
269279
resp = self.__serial.read()
@@ -274,12 +284,14 @@ def detect_modem_state(self, retry=3, initial_delay=1000, debug=False):
274284
pass
275285
else:
276286
if not self.__resp_921600:
287+
self.__modem_speed = 115200
277288
self.__serial = UART(1, baudrate=115200, pins=self.__pins, timeout_chars=10)
278289
self.__serial.write(b"AT\r\n")
279290
time.sleep_ms(delay)
280291
resp = self.__serial.read()
281292
if debug: print('Response (AT #1 @ 115200) {}'.format(resp))
282293
if resp is not None and b'OK' in resp:
294+
self.__speed_detected = True
283295
self.__serial.write(b"AT+SMOD?\r\n")
284296
time.sleep_ms(delay)
285297
resp = self.__serial.read()
@@ -293,6 +305,7 @@ def detect_modem_state(self, retry=3, initial_delay=1000, debug=False):
293305
resp = self.__serial.read()
294306
if debug: print('Response (AT #2 @ 115200) {}'.format(resp))
295307
if resp is not None and b'OK' in resp:
308+
self.__speed_detected = True
296309
self.__serial.write(b"AT+SMOD?\r\n")
297310
time.sleep_ms(delay)
298311
resp = self.__serial.read()
@@ -303,6 +316,14 @@ def detect_modem_state(self, retry=3, initial_delay=1000, debug=False):
303316
pass
304317
return None
305318

319+
def get_imei(self):
320+
self.__serial = UART(1, baudrate=921600, pins=self.__pins, timeout_chars=10)
321+
self.__serial.write(b"AT+CGSN\r\n")
322+
time.sleep(.5)
323+
imei_val = self.read_rsp(2000)
324+
return self.return_pretty_response(imei_val)
325+
326+
306327
def __get_power_warning(self):
307328
return "<<<=== DO NOT DISCONNECT POWER ===>>>"
308329

@@ -317,21 +338,22 @@ def __get_wait_msg(self, load_fff=True):
317338

318339

319340

320-
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, version_only=False, expected_smod=None, verbose=False, load_fff=False):
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):
321342
self.__wait_msg = False
322343
mirror = True if atneg_only else mirror
323344
recover = True if atneg_only else load_ffh
324-
resume = True if mirror or recover or atneg_only or version_only else resume
345+
resume = True if mirror or recover or atneg_only or info_only else resume
325346
verbose = True if debug else verbose
326347
load_fff = False if bootrom and switch_ffh else load_fff
348+
baudrate = self.__modem_speed if self.__speed_detected else baudrate
327349
if debug: print('mirror? {} recover? {} resume? {} direct? {} atneg_only? {} bootrom? {} load_fff? {}'.format(mirror, recover, resume, direct, atneg_only, bootrom, load_fff))
328350
abort = True
329351
external = False
330352
self.__serial = None
331353

332354
if 'FiPy' in self.__sysname or 'GPy' in self.__sysname:
333355

334-
self.__serial = UART(1, baudrate=115200 if recover else baudrate, pins=self.__pins, timeout_chars=100)
356+
self.__serial = UART(1, baudrate=115200 if recover and not self.__speed_detected else baudrate, pins=self.__pins, timeout_chars=100)
335357
self.__serial.read()
336358
else:
337359
if port is None:
@@ -340,15 +362,18 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
340362
external = True
341363
br = 115200 if recover and not direct else baudrate
342364
if debug: print('Setting baudrate to {}'.format(br))
343-
self.__serial = serial.Serial(port, br, bytesize=serial.EIGHTBITS, timeout=1 if version_only else 0.1)
365+
self.__serial = serial.Serial(port, br, bytesize=serial.EIGHTBITS, timeout=1 if info_only else 0.1)
344366
self.__serial.reset_input_buffer()
345367
self.__serial.reset_output_buffer()
346368

347-
if version_only:
369+
if info_only:
348370
self.__serial.read()
349371
self.__serial.write(b'AT\r\n')
350372
self.__serial.write(b'AT\r\n')
351373
self.__serial.read()
374+
self.__serial.write(b"AT+CGSN\r\n")
375+
time.sleep(.5)
376+
shimei = self.read_rsp(2000)
352377
if verbose:
353378
self.__serial.write(b"AT!=\"showver\"\r\n")
354379
else:
@@ -357,6 +382,8 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
357382
shver = self.read_rsp(2000)
358383
if shver is not None:
359384
self.print_pretty_response(shver)
385+
if shimei is not None:
386+
self.print_pretty_response(shimei, prefix='\nIMEI:')
360387
return True
361388

362389
if debug: print('Initial prepartion complete...')
@@ -391,9 +418,17 @@ def __run(self, file_path=None, baudrate=921600, port=None, resume=False, load_f
391418

392419
if not resume:
393420

421+
# bind to AT channel
422+
self.__serial.write(b"AT+BIND=AT\r\n")
423+
time.sleep(.5)
424+
response = self.read_rsp(size=100)
425+
if debug: print("AT+BIND=AT returned {}".format(response))
426+
394427
# disable echo
395428
self.__serial.write(b"ATE0\r\n")
396-
response = self.read_rsp(size=6)
429+
time.sleep(.5)
430+
response = self.read_rsp(size=100)
431+
if debug: print("ATE0 returned {}".format(response))
397432

398433
self.__serial.read(100)
399434
if debug: print('Entering upgrade mode...')
@@ -673,22 +708,22 @@ def __check_br(self, br_only=False, verbose=False, debug=False):
673708

674709
def wakeup_modem(self, baudrate, port, max_try, delay, debug, msg='Attempting AT wakeup...'):
675710
if 'FiPy' in self.__sysname or 'GPy' in self.__sysname:
676-
self.__serial = UART(1, baudrate=baudrate, pins=self.__pins, timeout_chars=1)
711+
self.__serial = UART(1, baudrate=baudrate, pins=self.__pins, timeout_chars=10)
677712
MAX_TRY = max_try
678713
count = 0
679714
if msg is not None:
680715
print(msg)
681716
self.__serial.read()
682717
self.__serial.write(b"AT\r\n")
683-
response = self.read_rsp(size=6)
718+
response = self.read_rsp(size=25)
684719
if debug: print('{}'.format(response))
685720
while (not b'OK' in response) and (count < MAX_TRY):
686721
count = count + 1
687722
if debug: print('count={}'.format(count))
688723
time.sleep(delay)
689724
self.__serial.read()
690725
self.__serial.write(b"AT\r\n")
691-
response = self.read_rsp(size=6)
726+
response = self.read_rsp(size=25)
692727
if debug: print('{}'.format(response))
693728
if 'FiPy' in sysname or 'GPy' in sysname:
694729
self.__serial = UART(1, baudrate=baudrate, pins=self.__pins, timeout_chars=100)
@@ -699,15 +734,15 @@ def at_negotiation(self, baudrate, port, max_try, mirror, atneg_only, debug):
699734
count = 0
700735
print('Attempting AT auto-negotiation...')
701736
self.__serial.write(b"AT\r\n")
702-
response = self.read_rsp(size=6)
737+
response = self.read_rsp(size=20)
703738
if debug: print('{}'.format(response))
704739
while (not b'OK' in response) and (count < MAX_TRY):
705740
count = count + 1
706741
if debug: print('count={}'.format(count))
707742
time.sleep(1)
708743
self.__serial.read()
709744
self.__serial.write(b"AT\r\n")
710-
response = self.read_rsp(size=6)
745+
response = self.read_rsp(size=20)
711746
if debug: print('{}'.format(response))
712747
if b'OK' in response:
713748
self.__serial.read()
@@ -757,9 +792,9 @@ def uart_mirror(self, color):
757792
def success_message(self, port=None, verbose=False, debug=False):
758793
print("Your modem has been successfully updated.")
759794
print("Here is the current firmware version:\n")
760-
self.show_version(port=port, verbose=verbose, debug=debug)
795+
self.show_info(port=port, verbose=verbose, debug=debug)
761796

762-
def upgrade(self, ffile, mfile=None, baudrate=921600, retry=False, resume=False, debug=False, pkgdebug=False, verbose=False, load_fff=True):
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):
763798
success = True
764799
if not retry and mfile is not None:
765800
if resume or self.__check_br(br_only=True, verbose=verbose, debug=debug):
@@ -776,6 +811,8 @@ def upgrade(self, ffile, mfile=None, baudrate=921600, retry=False, resume=False,
776811
success = False
777812
success = self.__run(file_path=mfile, load_ffh=True, direct=False, baudrate=baudrate, debug=debug, pkgdebug=pkgdebug, verbose=verbose)
778813
time.sleep(1)
814+
if load_only:
815+
return True
779816
else:
780817
success = True
781818
else:
@@ -818,8 +855,8 @@ def upgrade_uart(self, ffh_mode=False, mfile=None, retry=False, resume=False, co
818855
else:
819856
print('Unable to upgrade bootrom.')
820857

821-
def show_version(self, port=None, debug=False, verbose=False):
822-
self.__run(port=port, debug=debug, version_only=True, verbose=verbose)
858+
def show_info(self, port=None, debug=False, verbose=False):
859+
self.__run(port=port, debug=debug, info_only=True, verbose=verbose)
823860

824861
def upgrade_ext(self, port, ffile, mfile, resume=False, debug=False, pkgdebug=False, verbose=False, load_fff=True):
825862
success = True
@@ -847,13 +884,29 @@ def print_welcome():
847884

848885
if 'FiPy' in sysname or 'GPy' in sysname:
849886

850-
def run(ffile, mfile=None, baudrate=921600, verbose=False, debug=False, load_fff=True):
887+
def load(mfile, baudrate=921600, verbose=False, debug=False, hangup=False):
888+
print_welcome()
889+
sqnup = sqnsupgrade()
890+
if sqnup.check_files(mfile, None, debug):
891+
state = sqnup.detect_modem_state(debug=debug, hangup=hangup)
892+
if debug: print('Modem state: {}'.format(state))
893+
if state is None:
894+
detect_error()
895+
elif state == 0:
896+
sqnup.upgrade(ffile=None, mfile=mfile, baudrate=baudrate, retry=True, resume=False, debug=debug, pkgdebug=False, verbose=verbose, load_fff=False, load_only=True)
897+
elif state == -1:
898+
detect_error()
899+
else:
900+
print('Modem must be in recovery mode!')
901+
reconnect_uart()
902+
903+
def run(ffile, mfile=None, baudrate=921600, verbose=False, debug=False, load_fff=True, hangup=True):
851904
print_welcome()
852905
retry = False
853906
resume = False
854907
sqnup = sqnsupgrade()
855908
if sqnup.check_files(ffile, mfile, debug):
856-
state = sqnup.detect_modem_state(debug=debug)
909+
state = sqnup.detect_modem_state(debug=debug, hangup=hangup)
857910
if debug: print('Modem state: {}'.format(state))
858911
if state is None:
859912
detect_error()
@@ -863,19 +916,24 @@ def run(ffile, mfile=None, baudrate=921600, verbose=False, debug=False, load_fff
863916
print('Your modem is in recovery mode. Please specify updater.elf file')
864917
reconnect_uart()
865918
sys.exit(1)
866-
elif state == 4:
919+
elif state == 4 or state == 1:
867920
resume = True
868921
elif state == -1:
869922
detect_error()
870923
sqnup.upgrade(ffile=ffile, mfile=mfile, baudrate=baudrate, retry=retry, resume=resume, debug=debug, pkgdebug=False, verbose=verbose, load_fff=load_fff)
871924
reconnect_uart()
872925

873-
def uart(ffh_mode=False, mfile=None, color=0x050505, verbose=False, debug=False):
926+
def uart(ffh_mode=False, mfile=None, color=0x050505, verbose=False, debug=False, hangup=True):
874927
print_welcome()
875928
retry = False
876929
resume = False
930+
import pycom
931+
state = None
877932
sqnup = sqnsupgrade()
878-
state = sqnup.detect_modem_state(debug=debug)
933+
if verbose: print('Trying to detect modem state...')
934+
state = sqnup.detect_modem_state(debug=debug, hangup=hangup)
935+
if debug: print('Modem state: {}'.format(state))
936+
879937
if state is None:
880938
detect_error()
881939
elif state == 0:
@@ -888,22 +946,19 @@ def uart(ffh_mode=False, mfile=None, color=0x050505, verbose=False, debug=False)
888946
detect_error()
889947
sqnup.upgrade_uart(ffh_mode, mfile, retry, resume, color, debug, False, verbose)
890948

891-
def info(verbose=False, debug=False, retry=5):
949+
def info(verbose=False, debug=False, hangup=True):
892950
print_welcome()
893951
import pycom
894-
count = 0
952+
state = None
895953
sqnup = sqnsupgrade()
896-
while count < retry:
897-
count += 1
898-
if verbose: print('Trying to detect modem state [{}/{}]'.format(count, retry))
899-
state = sqnup.detect_modem_state(debug=debug)
900-
if debug: print('State: {} at count: {}'.format(state, count))
901-
if state is not None: break
954+
if verbose: print('Trying to detect modem state...')
955+
state = sqnup.detect_modem_state(debug=debug, hangup=hangup)
956+
if debug: print('Modem state: {}'.format(state))
902957

903958
if state is not None:
904959
if state == 2:
905960
print('Your modem is in application mode. Here is the current version:')
906-
sqnup.show_version(verbose=verbose, debug=debug)
961+
sqnup.show_info(verbose=verbose, debug=debug)
907962
elif state == 1:
908963
print('Your modem is in mTools mode.')
909964
elif state == 0:
@@ -918,6 +973,15 @@ def info(verbose=False, debug=False, retry=5):
918973
print('Cannot determine modem state!')
919974
reconnect_uart()
920975

976+
def imei(verbose=False, debug=False, retry=5, hangup=False):
977+
sqnup = sqnsupgrade()
978+
state = sqnup.detect_modem_state(debug=debug, hangup=hangup, retry=retry)
979+
return sqnup.get_imei() if state == 2 else None
980+
981+
def state(verbose=False, debug=False, retry=5, hangup=False):
982+
sqnup = sqnsupgrade()
983+
return sqnup.detect_modem_state(debug=debug, hangup=hangup, retry=retry)
984+
921985
else:
922986
def run(port, ffile, mfile=None, resume=False, debug=False, verbose=False, load_fff=True):
923987
print_welcome()
@@ -927,4 +991,4 @@ def run(port, ffile, mfile=None, resume=False, debug=False, verbose=False, load_
927991

928992
def version(port, verbose=False, debug=False):
929993
sqnup = sqnsupgrade()
930-
sqnup.show_version(port=port, debug=debug, verbose=verbose)
994+
sqnup.show_info(port=port, debug=debug, verbose=verbose)

0 commit comments

Comments
 (0)