Skip to content

Commit c2abf3f

Browse files
committed
adds SaraNcpFwUpdate unit tests
1 parent 5941996 commit c2abf3f

File tree

7 files changed

+1523
-254
lines changed

7 files changed

+1523
-254
lines changed

services/inc/ncp_fw_update.h

Lines changed: 60 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

5961
namespace 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

110153
struct HTTPSresponse {
111154
volatile bool valid;
@@ -136,18 +179,6 @@ class SaraNcpFwUpdate {
136179
int updateStatus();
137180

138181
protected:
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

Comments
 (0)