@@ -61,51 +61,58 @@ namespace particle {
6161namespace services {
6262
6363const system_tick_t NCP_FW_MODEM_POWER_ON_TIMEOUT = 60000 ;
64+ const system_tick_t NCP_FW_MODEM_INSTALL_ATOK_INTERVAL = 10000 ;
6465const system_tick_t NCP_FW_MODEM_INSTALL_START_TIMEOUT = 5 * 60000 ;
6566const system_tick_t NCP_FW_MODEM_INSTALL_FINISH_TIMEOUT = 30 * 60000 ;
6667const system_tick_t NCP_FW_MODEM_CLOUD_CONNECT_TIMEOUT = 5 * 60000 ;
67- const uint32_t NCP_FW_UBLOX_R510_ENG_VERSION = 100000000 ;
68+ const system_tick_t NCP_FW_MODEM_CLOUD_DISCONNECT_TIMEOUT = 1 * 60000 ;
69+ const system_tick_t NCP_FW_MODEM_CELLULAR_CONNECT_TIMEOUT = 10 * 60000 ;
70+ const int NCP_FW_UBLOX_DEFAULT_CID = 1 ;
6871const int NCP_FW_UUFWINSTALL_COMPLETE = 128 ;
6972
7073enum NcpFwUpdateState {
7174 FW_UPDATE_IDLE_STATE = 0 ,
7275 FW_UPDATE_QUALIFY_FLAGS_STATE = 1 ,
73- FW_UPDATE_QUALIFY_MODEM_ON_STATE = 2 ,
74- FW_UPDATE_QUALIFY_RETRY_STATE = 3 ,
75- FW_UPDATE_SETUP_CLOUD_CONNECT_STATE = 4 ,
76- FW_UPDATE_SETUP_CLOUD_CONNECTING_STATE = 5 ,
77- FW_UPDATE_SETUP_CLOUD_CONNECTED_STATE = 6 ,
78- FW_UPDATE_DOWNLOAD_CLOUD_DISCONNECT_STATE = 7 ,
79- FW_UPDATE_DOWNLOAD_CELL_DISCONNECTING_STATE = 8 ,
80- FW_UPDATE_DOWNLOAD_CELL_CONNECTING_STATE = 9 ,
81- FW_UPDATE_DOWNLOAD_HTTPS_SETUP_STATE = 10 ,
82- FW_UPDATE_DOWNLOAD_READY_STATE = 11 ,
83- FW_UPDATE_INSTALL_CELL_DISCONNECTING_STATE = 12 ,
84- FW_UPDATE_INSTALL_CELL_DISCONNECTED_STATE = 13 ,
85- FW_UPDATE_INSTALL_STATE_STARTING = 14 ,
86- FW_UPDATE_INSTALL_STATE_WAITING = 15 ,
87- FW_UPDATE_FINISHED_POWER_OFF_STATE = 16 ,
88- FW_UPDATE_FINISHED_POWERING_OFF_STATE = 17 ,
89- FW_UPDATE_FINISHED_CLOUD_CONNECTING_STATE = 18 ,
90- FW_UPDATE_FINISHED_CLOUD_CONNECTED_STATE = 19 ,
91- FW_UPDATE_FINISHED_IDLE_STATE = 20 ,
76+ FW_UPDATE_SETUP_CLOUD_CONNECT_STATE = 2 ,
77+ FW_UPDATE_SETUP_CLOUD_CONNECTING_STATE = 3 ,
78+ FW_UPDATE_SETUP_CLOUD_CONNECTED_STATE = 4 ,
79+ FW_UPDATE_DOWNLOAD_CLOUD_DISCONNECT_STATE = 5 ,
80+ FW_UPDATE_DOWNLOAD_CELL_DISCONNECTING_STATE = 6 ,
81+ FW_UPDATE_DOWNLOAD_CELL_CONNECTING_STATE = 7 ,
82+ FW_UPDATE_DOWNLOAD_HTTPS_SETUP_STATE = 8 ,
83+ FW_UPDATE_DOWNLOAD_READY_STATE = 9 ,
84+ FW_UPDATE_INSTALL_CELL_DISCONNECTING_STATE = 10 ,
85+ FW_UPDATE_INSTALL_STATE_STARTING = 11 ,
86+ FW_UPDATE_INSTALL_STATE_WAITING = 12 ,
87+ FW_UPDATE_FINISHED_POWER_OFF_STATE = 13 ,
88+ FW_UPDATE_FINISHED_POWERING_OFF_STATE = 14 ,
89+ FW_UPDATE_FINISHED_CLOUD_CONNECTING_STATE = 15 ,
90+ FW_UPDATE_FINISHED_CLOUD_CONNECTED_STATE = 16 ,
91+ FW_UPDATE_FINISHED_IDLE_STATE = 17 ,
9292};
9393
9494enum NcpFwUpdateStatus {
95- FW_UPDATE_IDLE_STATUS = 0 ,
96- FW_UPDATE_DOWNLOADING_STATUS = 1 ,
97- FW_UPDATE_UPDATING_STATUS = 2 ,
98- FW_UPDATE_SUCCESS_STATUS = 3 ,
99- FW_UPDATE_NONE_STATUS = -1 , // for diagnostics
100- FW_UPDATE_FAILED_STATUS = -2 ,
101- FW_UPDATE_FAILED_DOWNLOAD_RETRY_MAX_STATUS = -3 ,
102- FW_UPDATE_FAILED_START_INSTALL_TIMEOUT_STATUS = -4 ,
103- FW_UPDATE_FAILED_INSTALL_AT_ERROR_STATUS = -5 ,
104- FW_UPDATE_FAILED_SAME_VERSION_STATUS = -6 ,
105- FW_UPDATE_FAILED_INSTALL_TIMEOUT_STATUS = -7 ,
106- FW_UPDATE_FAILED_POWER_OFF_TIMEOUT_STATUS = -8 ,
107- FW_UPDATE_FAILED_CLOUD_CONNECT_TIMEOUT_STATUS = -9 ,
108- FW_UPDATE_FAILED_PUBLISH_RESULT_STATUS = -10 ,
95+ FW_UPDATE_IDLE_STATUS = 0 ,
96+ FW_UPDATE_DOWNLOADING_STATUS = 1 ,
97+ FW_UPDATE_UPDATING_STATUS = 2 ,
98+ FW_UPDATE_SUCCESS_STATUS = 3 ,
99+ FW_UPDATE_NONE_STATUS = -1 , // for diagnostics
100+ FW_UPDATE_FAILED_STATUS = -2 ,
101+ FW_UPDATE_FAILED_QUALIFY_FLAGS_STATUS = -3 ,
102+ FW_UPDATE_FAILED_CLOUD_CONNECT_ON_ENTRY_TIMEOUT_STATUS = -4 ,
103+ FW_UPDATE_FAILED_PUBLISH_START_STATUS = -5 ,
104+ FW_UPDATE_FAILED_SETUP_CELLULAR_DISCONNECT_TIMEOUT_STATUS = -6 ,
105+ FW_UPDATE_FAILED_CELLULAR_CONNECT_TIMEOUT_STATUS = -7 ,
106+ FW_UPDATE_FAILED_HTTPS_SETUP_STATUS = -8 ,
107+ FW_UPDATE_FAILED_DOWNLOAD_RETRY_MAX_STATUS = -9 ,
108+ FW_UPDATE_FAILED_INSTALL_CELLULAR_DISCONNECT_TIMEOUT_STATUS = -10 ,
109+ FW_UPDATE_FAILED_START_INSTALL_TIMEOUT_STATUS = -11 ,
110+ FW_UPDATE_FAILED_INSTALL_AT_ERROR_STATUS = -12 ,
111+ FW_UPDATE_FAILED_SAME_VERSION_STATUS = -13 ,
112+ FW_UPDATE_FAILED_INSTALL_TIMEOUT_STATUS = -14 ,
113+ FW_UPDATE_FAILED_POWER_OFF_TIMEOUT_STATUS = -15 ,
114+ FW_UPDATE_FAILED_CLOUD_CONNECT_ON_EXIT_TIMEOUT_STATUS = -16 ,
115+ FW_UPDATE_FAILED_PUBLISH_RESULT_STATUS = -17 ,
109116};
110117
111118struct HTTPSresponse {
@@ -126,12 +133,13 @@ struct NcpFwUpdateData {
126133 int firmwareVersion; // 0;
127134 int startingFirmwareVersion; // 0;
128135 int updateVersion; // 0;
136+ uint8_t updateAvailable; // SYSTEM_NCP_FW_UPDATE_STATUS_UNKNOWN;
129137 uint8_t isUserConfig; // 0;
130138 NcpFwUpdateConfig userConfigData; // 0;
131139 uint32_t footer; // NCP_FW_DATA_FOOTER;
132140};
133141
134- /* *
142+ /* *
135143 * struct NcpFwUpdateConfig {
136144 * const uint32_t start_version;
137145 * const uint32_t end_version;
@@ -155,28 +163,31 @@ class NcpFwUpdate {
155163 */
156164 static NcpFwUpdate* instance ();
157165
158- NcpFwUpdate ();
159- ~NcpFwUpdate ();
160-
161- int checkUpdate (const NcpFwUpdateConfig* userConfigData);
162166 void init (NcpFwUpdateCallbacks* callbacks);
163167 int process ();
164168 int getStatusDiagnostics ();
169+ int setConfig (const NcpFwUpdateConfig* userConfigData = nullptr );
170+ int checkUpdate (uint32_t version = 0 );
171+ int enableUpdates ();
172+ int updateStatus ();
165173
166174private:
175+ NcpFwUpdate ();
176+ ~NcpFwUpdate ();
167177
168178 NcpFwUpdateState ncpFwUpdateState_;
169179 NcpFwUpdateStatus ncpFwUpdateStatus_;
170180 NcpFwUpdateStatus ncpFwUpdateStatusDiagnostics_;
171181 int foatReady_;
172- system_tick_t startInstallTimer_ ;
182+ system_tick_t startTimer_ ;
173183 system_tick_t atOkCheckTimer_;
174184 int lastRespCode_;
175185 int atResp_;
176186 int atResponsive_;
177187 int startingFirmwareVersion_;
178188 int firmwareVersion_;
179189 int updateVersion_;
190+ int updateAvailable_;
180191 bool isUserConfig_;
181192 system_tick_t cooldownTimer_;
182193 system_tick_t cooldownTimeout_;
@@ -198,6 +209,7 @@ class NcpFwUpdate {
198209 static int cbUPSND_ (int type, const char * buf, int len, int * data);
199210 static int cbCOPS_ (int type, const char * buf, int len, int * data);
200211 static int httpRespCallback_ (AtResponseReader* reader, const char * prefix, void * data);
212+ static int cgevCallback_ (AtResponseReader* reader, const char * prefix, void * data);
201213 uint32_t getAppFirmwareVersion_ ();
202214 int setupHTTPSProperties_ ();
203215 void cooldown_ (system_tick_t timer);
0 commit comments