@@ -50,11 +50,13 @@ struct SaraNcpFwUpdateCallbacks {
5050
5151 // system_cloud_internal.h
5252 bool (*publishEvent)(const char * event, const char * data, unsigned flags);
53-
54- // system_mode.h
55- System_Mode_TypeDef (*system_mode)(void );
5653};
57- PARTICLE_STATIC_ASSERT (SaraNcpFwUpdateCallbacks_size, sizeof (SaraNcpFwUpdateCallbacks) == (sizeof (void *) * 7));
54+ PARTICLE_STATIC_ASSERT (SaraNcpFwUpdateCallbacks_size, sizeof (SaraNcpFwUpdateCallbacks) == (sizeof (void *) * 6));
55+
56+ #ifdef UNIT_TEST
57+ int setupHTTPSProperties_impl (void );
58+ int sendCommandWithArgs (_CALLBACKPTR_MDM cb, void * param, system_tick_t timeout_ms, const char * format, va_list args);
59+ #endif
5860
5961namespace particle {
6062
@@ -93,19 +95,60 @@ enum SaraNcpFwUpdateStatus {
9395 FW_UPDATE_STATUS_FAILED_CLOUD_CONNECT_ON_ENTRY_TIMEOUT = -4 ,
9496 FW_UPDATE_STATUS_FAILED_PUBLISH_START = -5 ,
9597 FW_UPDATE_STATUS_FAILED_SETUP_CELLULAR_DISCONNECT_TIMEOUT = -6 ,
96- FW_UPDATE_STATUS_FAILED_CELLULAR_CONNECT_TIMEOUT = -7 ,
97- FW_UPDATE_STATUS_FAILED_HTTPS_SETUP = -8 ,
98- FW_UPDATE_STATUS_FAILED_DOWNLOAD_RETRY_MAX = -9 ,
99- FW_UPDATE_STATUS_FAILED_INSTALL_CELLULAR_DISCONNECT_TIMEOUT = -10 ,
100- FW_UPDATE_STATUS_FAILED_START_INSTALL_TIMEOUT = -11 ,
101- FW_UPDATE_STATUS_FAILED_INSTALL_AT_ERROR = -12 ,
102- FW_UPDATE_STATUS_FAILED_SAME_VERSION = -13 ,
103- FW_UPDATE_STATUS_FAILED_INSTALL_TIMEOUT = -14 ,
104- FW_UPDATE_STATUS_FAILED_POWER_OFF_TIMEOUT = -15 ,
105- FW_UPDATE_STATUS_FAILED_CLOUD_CONNECT_ON_EXIT_TIMEOUT = -16 ,
106- FW_UPDATE_STATUS_FAILED_PUBLISH_RESULT = -17 ,
98+ FW_UPDATE_STATUS_FAILED_SETUP_CELLULAR_STILL_CONNECTED = -7 ,
99+ FW_UPDATE_STATUS_FAILED_CELLULAR_CONNECT_TIMEOUT = -8 ,
100+ FW_UPDATE_STATUS_FAILED_HTTPS_SETUP = -9 ,
101+ FW_UPDATE_STATUS_FAILED_DOWNLOAD_RETRY_MAX = -10 ,
102+ FW_UPDATE_STATUS_FAILED_INSTALL_CELLULAR_DISCONNECT_TIMEOUT = -11 ,
103+ FW_UPDATE_STATUS_FAILED_START_INSTALL_TIMEOUT = -12 ,
104+ FW_UPDATE_STATUS_FAILED_INSTALL_AT_ERROR = -13 ,
105+ FW_UPDATE_STATUS_FAILED_SAME_VERSION = -14 ,
106+ FW_UPDATE_STATUS_FAILED_INSTALL_TIMEOUT = -15 ,
107+ FW_UPDATE_STATUS_FAILED_POWER_OFF_TIMEOUT = -16 ,
108+ FW_UPDATE_STATUS_FAILED_CLOUD_CONNECT_ON_EXIT_TIMEOUT = -17 ,
109+ FW_UPDATE_STATUS_FAILED_PUBLISH_RESULT = -18 ,
110+ };
111+ static_assert (FW_UPDATE_STATUS_IDLE == 0 && FW_UPDATE_STATUS_FAILED_PUBLISH_RESULT == -18 , " SaraNcpFwUpdateStatus size changed!" );
112+
113+ const system_tick_t NCP_FW_MODEM_INSTALL_ATOK_INTERVAL = 10000 ;
114+ const system_tick_t NCP_FW_MODEM_INSTALL_START_TIMEOUT = 5 * 60000 ;
115+ const system_tick_t NCP_FW_MODEM_INSTALL_FINISH_TIMEOUT = 30 * 60000 ;
116+ const system_tick_t NCP_FW_MODEM_CLOUD_CONNECT_TIMEOUT = 5 * 60000 ;
117+ const system_tick_t NCP_FW_MODEM_CLOUD_DISCONNECT_TIMEOUT = 1 * 60000 ;
118+ const system_tick_t NCP_FW_MODEM_CELLULAR_CONNECT_TIMEOUT = 10 * 60000 ;
119+ const system_tick_t NCP_FW_MODEM_DOWNLOAD_TIMEOUT = 5 * 60000 ;
120+ const system_tick_t NCP_FW_MODEM_POWER_OFF_TIMEOUT = 1 * 60000 ;
121+ const int NCP_FW_UBLOX_DEFAULT_CID = 1 ;
122+ const int NCP_FW_UUFWINSTALL_COMPLETE = 128 ;
123+
124+ /* *
125+ * struct SaraNcpFwUpdateConfig {
126+ * uint16_t size;
127+ * uint32_t start_version;
128+ * uint32_t end_version;
129+ * char filename[256];
130+ * char md5sum[32];
131+ * };
132+ */
133+ const SaraNcpFwUpdateConfig SARA_NCP_FW_UPDATE_CONFIG[] = {
134+ // { sizeof(SaraNcpFwUpdateConfig), 31400010, 31400011, "SARA-R510S-01B-00-ES-0314A0001_SARA-R510S-01B-00-XX-0314ENG0099A0001.upd", "09c1a98d03c761bcbea50355f9b2a50f" },
135+ // { sizeof(SaraNcpFwUpdateConfig), 31400011, 31400010, "SARA-R510S-01B-00-XX-0314ENG0099A0001_SARA-R510S-01B-00-ES-0314A0001.upd", "136caf2883457093c9e41fda3c6a44e3" },
136+ // { sizeof(SaraNcpFwUpdateConfig), 20600010, 990100010, "SARA-R510S-00B-01_FW02.06_A00.01_IP_SARA-R510S-00B-01_FW99.01_A00.01.upd", "ccfdc48c0a45198d6e168b30d0740959" },
137+ // { sizeof(SaraNcpFwUpdateConfig), 990100010, 20600010, "SARA-R510S-00B-01_FW99.01_A00.01_SARA-R510S-00B-01_FW02.06_A00.01_IP.upd", "5fd6c0d3d731c097605895b86f28c2cf" },
138+ };
139+ const size_t SARA_NCP_FW_UPDATE_CONFIG_SIZE = sizeof (SARA_NCP_FW_UPDATE_CONFIG) / sizeof (SARA_NCP_FW_UPDATE_CONFIG[0 ]);
140+
141+ struct __attribute__ ((packed)) SaraNcpFwUpdateData {
142+ uint16_t size; // sizeof(SaraNcpFwUpdateData)
143+ SaraNcpFwUpdateState state; // FW_UPDATE_STATE_IDLE;
144+ SaraNcpFwUpdateStatus status; // FW_UPDATE_STATUS_IDLE;
145+ uint32_t firmwareVersion; // 0;
146+ uint32_t startingFirmwareVersion; // 0;
147+ uint32_t updateVersion; // 0;
148+ uint8_t updateAvailable; // SYSTEM_NCP_FW_UPDATE_STATUS_UNKNOWN;
149+ uint8_t isUserConfig; // 0;
150+ SaraNcpFwUpdateConfig userConfigData; // 0;
107151};
108- static_assert (FW_UPDATE_STATUS_IDLE == 0 && FW_UPDATE_STATUS_FAILED_PUBLISH_RESULT == -17 , " SaraNcpFwUpdateStatus size changed!" );
109152
110153struct HTTPSresponse {
111154 volatile bool valid;
@@ -136,18 +179,6 @@ class SaraNcpFwUpdate {
136179 int updateStatus ();
137180
138181protected:
139- struct SaraNcpFwUpdateData {
140- uint16_t size; // sizeof(SaraNcpFwUpdateData)
141- SaraNcpFwUpdateState state; // FW_UPDATE_STATE_IDLE;
142- SaraNcpFwUpdateStatus status; // FW_UPDATE_STATUS_IDLE;
143- uint32_t firmwareVersion; // 0;
144- uint32_t startingFirmwareVersion; // 0;
145- uint32_t updateVersion; // 0;
146- uint8_t updateAvailable; // SYSTEM_NCP_FW_UPDATE_STATUS_UNKNOWN;
147- uint8_t isUserConfig; // 0;
148- SaraNcpFwUpdateConfig userConfigData; // 0;
149- }; // Not using __attribute__((packed)) so that we can obtain a pointer to the address;
150-
151182 SaraNcpFwUpdate ();
152183 ~SaraNcpFwUpdate () = default ;
153184
@@ -177,16 +208,14 @@ class SaraNcpFwUpdate {
177208
178209 static int cbUHTTPER (int type, const char * buf, int len, HTTPSerror* data);
179210 static int cbULSTFILE (int type, const char * buf, int len, int * data);
180- static int cbUPSND (int type, const char * buf, int len, int * data);
181- static int cbCOPS (int type, const char * buf, int len, bool * data);
182211 static int httpRespCallback (AtResponseReader* reader, const char * prefix, void * data);
183212 static int cgevCallback (AtResponseReader* reader, const char * prefix, void * data);
184213 uint32_t getNcpFirmwareVersion ();
185214 int setupHTTPSProperties ();
186215 void cooldown (system_tick_t timer);
187216 void updateCooldown ();
188217 bool inCooldown ();
189- void validateSaraNcpFwUpdateData ();
218+ int validateSaraNcpFwUpdateData ();
190219 int firmwareUpdateForVersion (uint32_t version);
191220 int getConfigData (SaraNcpFwUpdateConfig& configData);
192221 int saveSaraNcpFwUpdateData ();
0 commit comments