How to totally reset the connection process state machine

Hello,

I am working on code that will attempt to reset the connection process and configure the modem to use a different Radio Access Technology (RAT) using the +URAT AT commands.

The problem is that I can’t find a way to reset the spark firmware connection state machine.

Using Particle.disconnect() , Cellular.disconnect() , Cellular.off() all fail to reset the WLAN_WD_TO, and the connection process timeout doesn’t seem to get reset on new firmware flash either (the WLAN timeout latest value must be stored in SRAM I guess).

This results in the following typical behaviour for my test program (also note that registration is denied by about 44 seconds in, but the firmware connection process doesn’t recognize this !!! :cold_sweat: )

=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2017.05.23 23:05:51 =~=~=~=~=~=~=~=~=~=~=~=
0000001555 [app.main] WARN: Waiting for serial input before proceeding
0000002055 [app.main] WARN: Waiting for serial input before proceeding
0000002556 [app.main] WARN: Waiting for serial input before proceeding
0000003056 [app.main] WARN: Waiting for serial input before proceeding
0000003556 [app.main] WARN: Received serial input, now proceeding!
0000003557 [app.main] INFO: Serial monitor open!  Now proceeding!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000003558 [app.main] WARN: !!!!! CALLING Particle.disconnect() !!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000003559 [app.main] WARN: !!!!! CALLING Cellular.disconnect() !!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000003560 [app.main] WARN: !!!!! CALLING Cellular.off() !!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000003561 [app.main] INFO: Changing state to: CELL_INITIAL_STATE
0000003561 [app.main] INFO: Initializing state machine for first time!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000003562 [app.main] INFO: Changing state to: CELL_RESPONSIVENESS_CHECK_STATE
0000003562 [app.cellHelper] INFO: Waiting for modem to be responsive
     3.563 AT send       4 "AT\r\n"
     6.073 AT send       4 "AT\r\n"
0000008583 [app.main] ERROR: Modem is not responding to AT commands!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000008583 [app.main] WARN: !!!!! CALLING Cellular.on() !!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000008584 [app.main] INFO: Changing state to: CELL_POWERUP_WAIT_STATE
[ ElectronSerialPipe::begin ] = = = = = = = =

[ Modem::powerOn ] = = = = = = = = = = = = = =
     8.896 AT send       4 "AT\r\n"
     8.906 AT read UNK   3 "AT\r"
     8.916 AT read OK    6 "\r\nOK\r\n"
     9.126 AT send       7 "AT E0\r\n"
     9.136 AT read UNK   6 "AT E0\r"
     9.146 AT read OK    6 "\r\nOK\r\n"
     9.146 AT send      11 "AT+CMEE=2\r\n"
     9.156 AT read OK    6 "\r\nOK\r\n"
     9.156 AT send      19 "AT+CMER=1,0,0,2,1\r\n"
     9.168 AT read OK    6 "\r\nOK\r\n"
     9.168 AT send      15 "AT+IPR=115200\r\n"
     9.178 AT read OK    6 "\r\nOK\r\n"
     9.278 AT send      10 "AT+CPIN?\r\n"
     9.288 AT read  +   16 "\r\n+CPIN: READY\r\n"
     9.298 AT read OK    6 "\r\nOK\r\n"
0000013585 [app.main] INFO: Done waiting for modem to power up!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000013585 [app.main] INFO: Changing state to: CELL_RESPONSIVENESS_CHECK_STATE
0000013586 [app.cellHelper] INFO: Waiting for modem to be responsive
    13.586 AT send       4 "AT\r\n"
    13.596 AT read OK    6 "\r\nOK\r\n"
0000013596 [app.main] INFO: Modem is now responsive!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000013597 [app.main] INFO: Changing state to: CELL_DETACHED_STATE
0000013597 [app.main] INFO: TODO: do pre-connection chores (check IMSI number, set APN credentials, etc)
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000013598 [app.main] INFO: Changing state to: CELL_INITIATE_REGISTRATION_STATE
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000013599 [app.main] WARN: !!!!! CALLING Cellular.connect() !!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000013600 [app.main] INFO: Changing state to: CELL_REGISTRATION_WAIT_STATE
0000013601 [system] INFO: Sim Ready
0000013601 [system] INFO: ARM_WLAN_WD 1

[ Modem::init ] = = = = = = = = = = = = = = =
    13.601 AT send       9 "AT+CGSN\r\n"
    13.623 AT read UNK  19 "\r\nXXXXXXXXXXXXXXXXX\r\n"
    13.633 AT read OK    6 "\r\nOK\r\n"
    13.633 AT send       9 "AT+CGMI\r\n"
    13.643 AT read UNK  10 "\r\nu-blox\r\n"
    13.653 AT read OK    6 "\r\nOK\r\n"
    13.653 AT send       9 "AT+CGMM\r\n"
    13.663 AT read UNK  13 "\r\nSARA-U260\r\n"
    13.673 AT read OK    6 "\r\nOK\r\n"
    13.673 AT send       9 "AT+CGMR\r\n"
    13.683 AT read UNK   9 "\r\n23.20\r\n"
    13.693 AT read OK    6 "\r\nOK\r\n"
    13.693 AT send       9 "AT+CCID\r\n"
    13.703 AT read  +   30 "\r\n+CCID: XXXXXXXXXXXXXXXXXXXXX\r\n"
    13.715 AT read OK    6 "\r\nOK\r\n"
    13.715 AT send      11 "AT+UPSV=1\r\n"
    13.725 AT read OK    6 "\r\nOK\r\n"
    13.725 AT send      11 "AT+CMGF=1\r\n"
    13.735 AT read OK    6 "\r\nOK\r\n"
    13.735 AT send      13 "AT+CNMI=2,1\r\n"
    13.745 AT read OK    6 "\r\nOK\r\n"
    13.745 AT send       9 "AT+CIMI\r\n"
    13.755 AT read UNK  19 "\r\XXXXXXXXX\r\n"
    13.765 AT read OK    6 "\r\nOK\r\n"

[ Modem::register ] = = = = = = = = = = = = = =
    13.765 AT send      10 "AT+CREG?\r\n"
    13.777 AT read  +   14 "\r\n+CREG: 0,0\r\n"
    13.787 AT read OK    6 "\r\nOK\r\n"
    13.787 AT send      11 "AT+CGREG?\r\n"
    13.797 AT read  +   15 "\r\n+CGREG: 0,0\r\n"
    13.807 AT read OK    6 "\r\nOK\r\n"
    13.807 AT send      12 "AT+CGREG=2\r\n"
    13.817 AT read OK    6 "\r\nOK\r\n"
    13.817 AT send      11 "AT+CREG=2\r\n"
    13.827 AT read OK    6 "\r\nOK\r\n"
    13.827 AT send      10 "AT+CREG?\r\n"
    13.837 AT read  +   14 "\r\n+CREG: 2,0\r\n"
    13.847 AT read OK    6 "\r\nOK\r\n"
    13.847 AT send      11 "AT+CGREG?\r\n"
    13.857 AT read  +   15 "\r\n+CGREG: 2,0\r\n"
    13.867 AT read OK    6 "\r\nOK\r\n"
    28.867 AT send      10 "AT+CREG?\r\n"
    28.867 AT read  +   12 "\r\n+CREG: 4\r\n"
    28.879 AT read  +   13 "\r\n+CGREG: 4\r\n"
    28.889 AT read  +   14 "\r\n+CIEV: 3,0\r\n"
    28.899 AT read  +   14 "\r\n+CIEV: 7,0\r\n"
    28.909 AT read  +   14 "\r\n+CIEV: 9,0\r\n"
CIEV matched: 9,0
    29.719 AT read  +   14 "\r\n+CREG: 2,4\r\n"
    29.729 AT read OK    6 "\r\nOK\r\n"
    29.729 AT send      11 "AT+CGREG?\r\n"
    29.739 AT read  +   15 "\r\n+CGREG: 2,4\r\n"
    29.749 AT read OK    6 "\r\nOK\r\n"
    44.749 AT send      10 "AT+CREG?\r\n"
    44.749 AT read  +   14 "\r\n+CIEV: 2,4\r\n"
    44.761 AT read  +   12 "\r\n+CREG: 3\r\n"
    44.771 AT read  +   13 "\r\n+CGREG: 3\r\n"
    44.781 AT read  +   14 "\r\n+CIEV: 9,1\r\n"
CIEV matched: 9,1
    46.551 AT read  +   14 "\r\n+CREG: 2,3\r\n"
    46.561 AT read OK    6 "\r\nOK\r\n"
    46.561 AT send      11 "AT+CGREG?\r\n"
    46.571 AT read  +   15 "\r\n+CGREG: 2,3\r\n"
    46.581 AT read OK    6 "\r\nOK\r\n"
    61.581 AT send      10 "AT+CREG?\r\n"
    63.381 AT read  +   14 "\r\n+CREG: 2,3\r\n"
    63.391 AT read OK    6 "\r\nOK\r\n"
    63.391 AT send      11 "AT+CGREG?\r\n"
    63.401 AT read  +   15 "\r\n+CGREG: 2,3\r\n"
    63.411 AT read OK    6 "\r\nOK\r\n"
    78.411 AT send      10 "AT+CREG?\r\n"
    80.211 AT read  +   14 "\r\n+CREG: 2,3\r\n"
    80.221 AT read OK    6 "\r\nOK\r\n"
    80.221 AT send      11 "AT+CGREG?\r\n"
    80.231 AT read  +   15 "\r\n+CGREG: 2,3\r\n"
    80.241 AT read OK    6 "\r\nOK\r\n"
    95.241 AT send      10 "AT+CREG?\r\n"
    97.041 AT read  +   14 "\r\n+CREG: 2,3\r\n"
    97.051 AT read OK    6 "\r\nOK\r\n"
    97.051 AT send      11 "AT+CGREG?\r\n"
    97.061 AT read  +   15 "\r\n+CGREG: 2,3\r\n"
    97.071 AT read OK    6 "\r\nOK\r\n"
0000103602 [app.main] ERROR: Waiting for cell to register to network timed out!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000103602 [app.main] INFO: Changing state to: CELL_REGISTRATION_TIMEOUT_STATE
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000103604 [app.main] INFO: Changing state to: CELL_INITIATE_RECONNECTION_STATE
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000103606 [app.main] WARN: !!!!! CALLING Particle.disconnect() !!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000104109 [app.main] WARN: !!!!! CALLING Cellular.disconnect() !!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~

[ Modem::cancel ] = = = = = = = = = = = = = = =
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000104111 [app.main] INFO: Changing state to: CELL_RECONNECTION_DETACH_WAIT_STATE
0000104112 [system] WARN: Resetting WLAN due to WLAN_WD_TO()

[ Modem::powerOff ] = = = = = = = = = = = = = =

[ Modem::resume ] = = = = = = = = = = = = = = =
   104.115 AT send      12 "AT+CPWROFF\r\n"
   104.265 AT read OK    6 "\r\nOK\r\n"

[ Modem::cancel ] = = = = = = = = = = = = = = =

[ Modem::powerOn ] = = = = = = = = = = = = = =

[ Modem::resume ] = = = = = = = = = = = = = = =
   104.577 AT send       4 "AT\r\n"
   105.897 AT send       4 "AT\r\n"
   107.217 AT send       4 "AT\r\n"
   108.537 AT send       4 "AT\r\n"
   108.547 AT read UNK   3 "AT\r"
   108.557 AT read OK    6 "\r\nOK\r\n"

[ Modem::cancel ] = = = = = = = = = = = = = = =
0000108557 [system] INFO: Sim Ready
0000108557 [system] INFO: ARM_WLAN_WD 1

[ Modem::init ] = = = = = = = = = = = = = = =
0000109112 [app.main] INFO: Done waiting for modem to detach from network
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000109112 [app.main] INFO: Changing state to: CELL_RECONNECTION_STAGING_STATE
0000109113 [app.main] INFO: Changing the radio access technology being used
0000109113 [app.cellHelper] INFO: Attempting to configure the set the radio access technology (RAT) being used.
0000109114 [app.cellHelper] ERROR: Couldn't detach from network!
0000109114 [app.cellHelper] INFO: Setting radio access technology:
 ===> radioAccessTechnologyConfig_t ||   mode = RAT_SINGLE_MODE  |  firstChoice = UTRAN 
0000109115 [app.cellHelper] INFO: Current Setting:
0000109115 [app.cellHelper] INFO: Confirm new setting:
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000109116 [app.main] WARN: !!!!! CALLING Cellular.off() !!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000109117 [app.main] INFO: Changing state to: CELL_POWERDOWN_WAIT_STATE

[ Modem::powerOff ] = = = = = = = = = = = = = =

[ Modem::resume ] = = = = = = = = = = = = = = =
   109.118 AT send      12 "AT+CPWROFF\r\n"
   109.200 AT read UNK  11 "AT+CPWROFF\r"
   109.210 AT read OK    6 "\r\nOK\r\n"

[ Modem::cancel ] = = = = = = = = = = = = = = =
0000114118 [app.main] INFO: Done waiting for modem to power down!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000114118 [app.main] WARN: !!!!! CALLING Cellular.on() !!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000114119 [app.main] INFO: Changing state to: CELL_POWERUP_WAIT_STATE

[ Modem::powerOn ] = = = = = = = = = = = = = =

[ Modem::resume ] = = = = = = = = = = = = = = =
   114.431 AT send       4 "AT\r\n"
   115.751 AT send       4 "AT\r\n"
   117.071 AT send       4 "AT\r\n"
   117.081 AT read UNK   3 "AT\r"
   117.091 AT read OK    6 "\r\nOK\r\n"

[ Modem::cancel ] = = = = = = = = = = = = = = =
0000119120 [app.main] INFO: Done waiting for modem to power up!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000119120 [app.main] INFO: Changing state to: CELL_RESPONSIVENESS_CHECK_STATE
0000119121 [app.cellHelper] INFO: Waiting for modem to be responsive
0000124121 [app.main] ERROR: Modem is not responding to AT commands!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000124121 [app.main] WARN: !!!!! CALLING Cellular.on() !!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000124122 [app.main] INFO: Changing state to: CELL_POWERUP_WAIT_STATE
0000129123 [app.main] INFO: Done waiting for modem to power up!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000129123 [app.main] INFO: Changing state to: CELL_RESPONSIVENESS_CHECK_STATE
0000129124 [app.cellHelper] INFO: Waiting for modem to be responsive
0000134124 [app.main] ERROR: Modem is not responding to AT commands!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000134124 [app.main] WARN: !!!!! CALLING Cellular.on() !!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~
0000134125 [app.main] INFO: Changing state to: CELL_POWERUP_WAIT_STATE
0000138626 [system] WARN: Resetting WLAN due to WLAN_WD_TO()

How can I nuke the Particle firmware connection process, and make it start right from the beginning of the state machine process again so that I can configure a different RAT? (I don’t care how fast it connects at this point).