Skip to content

Commit 06134f9

Browse files
committed
adds system_errors and diagnostics
1 parent c2abf3f commit 06134f9

File tree

6 files changed

+538
-379
lines changed

6 files changed

+538
-379
lines changed

services/inc/diagnostics.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#define DIAG_NAME_NETWORK_CELLULAR_CELL_GLOBAL_IDENTITY_LOCATION_AREA_CODE "net:cell:cgi:lac"
5050
#define DIAG_NAME_NETWORK_CELLULAR_CELL_GLOBAL_IDENTITY_CELL_ID "net:cell:cgi:ci"
5151
#define DIAG_NAME_NETWORK_NCP_FW_UPDATE_STATUS "net:ncpfw:stat"
52+
#define DIAG_NAME_NETWORK_NCP_FW_UPDATE_ERROR_CODE "net:ncpfw:err"
5253
#define DIAG_NAME_CLOUD_CONNECTION_STATUS "cloud:stat"
5354
#define DIAG_NAME_CLOUD_CONNECTION_ERROR_CODE "cloud:err"
5455
#define DIAG_NAME_CLOUD_DISCONNECTS "cloud:dconn"
@@ -97,6 +98,7 @@ typedef enum diag_id {
9798
DIAG_ID_NETWORK_CELLULAR_CELL_GLOBAL_IDENTITY_LOCATION_AREA_CODE = 42, // net:cell:cgi:lac
9899
DIAG_ID_NETWORK_CELLULAR_CELL_GLOBAL_IDENTITY_CELL_ID = 43, // net:cell:cgi:ci
99100
DIAG_ID_NETWORK_NCP_FW_UPDATE_STATUS = 50, // net:nfu:stat
101+
DIAG_ID_NETWORK_NCP_FW_UPDATE_ERROR_CODE = 51, // net:nfu:err
100102
DIAG_ID_CLOUD_CONNECTION_STATUS = 10, // cloud:stat
101103
DIAG_ID_CLOUD_CONNECTION_ERROR_CODE = 13, // cloud:err
102104
DIAG_ID_CLOUD_DISCONNECTS = 14, // cloud:dconn

services/inc/ncp_fw_update.h

Lines changed: 51 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@
3636

3737
#if HAL_PLATFORM_NCP_FW_UPDATE
3838

39+
// Change to 0 for debugging faster
40+
#define SARA_NCP_FW_UPDATE_ENABLE_DOWNLOAD (1)
41+
#define SARA_NCP_FW_UPDATE_ENABLE_INSTALL (1)
42+
43+
// Change to 1 for debugging
44+
#define SARA_NCP_FW_UPDATE_ENABLE_DEBUG_LOGGING (0)
45+
3946
struct SaraNcpFwUpdateCallbacks {
4047
uint16_t size;
4148
uint16_t reserved;
@@ -54,7 +61,7 @@ struct SaraNcpFwUpdateCallbacks {
5461
PARTICLE_STATIC_ASSERT(SaraNcpFwUpdateCallbacks_size, sizeof(SaraNcpFwUpdateCallbacks) == (sizeof(void*) * 6));
5562

5663
#ifdef UNIT_TEST
57-
int setupHTTPSProperties_impl(void);
64+
system_error_t setupHTTPSProperties_impl(void);
5865
int sendCommandWithArgs(_CALLBACKPTR_MDM cb, void* param, system_tick_t timeout_ms, const char* format, va_list args);
5966
#endif
6067

@@ -63,52 +70,36 @@ namespace particle {
6370
namespace services {
6471

6572
enum SaraNcpFwUpdateState {
66-
FW_UPDATE_STATE_IDLE = 0,
67-
FW_UPDATE_STATE_QUALIFY_FLAGS = 1,
68-
FW_UPDATE_STATE_SETUP_CLOUD_CONNECT = 2,
69-
FW_UPDATE_STATE_SETUP_CLOUD_CONNECTING = 3,
70-
FW_UPDATE_STATE_SETUP_CLOUD_CONNECTED = 4,
71-
FW_UPDATE_STATE_DOWNLOAD_CLOUD_DISCONNECT = 5,
72-
FW_UPDATE_STATE_DOWNLOAD_CELL_DISCONNECTING = 6,
73-
FW_UPDATE_STATE_DOWNLOAD_CELL_CONNECTING = 7,
74-
FW_UPDATE_STATE_DOWNLOAD_HTTPS_SETUP = 8,
75-
FW_UPDATE_STATE_DOWNLOAD_READY = 9,
76-
FW_UPDATE_STATE_INSTALL_CELL_DISCONNECTING = 10,
77-
FW_UPDATE_STATE_INSTALL_STARTING = 11,
78-
FW_UPDATE_STATE_INSTALL_WAITING = 12,
79-
FW_UPDATE_STATE_FINISHED_POWER_OFF = 13,
80-
FW_UPDATE_STATE_FINISHED_POWERING_OFF = 14,
81-
FW_UPDATE_STATE_FINISHED_CLOUD_CONNECTING = 15,
82-
FW_UPDATE_STATE_FINISHED_CLOUD_CONNECTED = 16,
83-
FW_UPDATE_STATE_FINISHED_IDLE = 17,
73+
FW_UPDATE_STATE_IDLE = 0,
74+
FW_UPDATE_STATE_QUALIFY_FLAGS = 1,
75+
FW_UPDATE_STATE_SETUP_CLOUD_CONNECT = 2,
76+
FW_UPDATE_STATE_SETUP_CLOUD_CONNECTING = 3,
77+
FW_UPDATE_STATE_SETUP_CLOUD_CONNECTED = 4,
78+
FW_UPDATE_STATE_DOWNLOAD_CLOUD_DISCONNECT = 5,
79+
FW_UPDATE_STATE_DOWNLOAD_CELL_DISCONNECTING = 6,
80+
FW_UPDATE_STATE_DOWNLOAD_CELL_CONNECTING = 7,
81+
FW_UPDATE_STATE_DOWNLOAD_HTTPS_SETUP = 8,
82+
FW_UPDATE_STATE_DOWNLOAD_READY = 9,
83+
FW_UPDATE_STATE_INSTALL_CELL_DISCONNECTING = 10,
84+
FW_UPDATE_STATE_INSTALL_STARTING = 11,
85+
FW_UPDATE_STATE_INSTALL_WAITING = 12,
86+
FW_UPDATE_STATE_FINISHED_POWER_OFF = 13,
87+
FW_UPDATE_STATE_FINISHED_POWERING_OFF = 14,
88+
FW_UPDATE_STATE_FINISHED_CLOUD_CONNECTING = 15,
89+
FW_UPDATE_STATE_FINISHED_CLOUD_CONNECTED = 16,
90+
FW_UPDATE_STATE_FINISHED_IDLE = 17,
8491
};
8592
static_assert(FW_UPDATE_STATE_IDLE == 0 && FW_UPDATE_STATE_FINISHED_IDLE == 17, "SaraNcpFwUpdateState size changed!");
8693

8794
enum SaraNcpFwUpdateStatus {
88-
FW_UPDATE_STATUS_IDLE = 0,
89-
FW_UPDATE_STATUS_DOWNLOADING = 1,
90-
FW_UPDATE_STATUS_UPDATING = 2,
91-
FW_UPDATE_STATUS_SUCCESS = 3,
92-
FW_UPDATE_STATUS_NONE = -1, // for diagnostics
93-
FW_UPDATE_STATUS_FAILED = -2,
94-
FW_UPDATE_STATUS_FAILED_QUALIFY_FLAGS = -3,
95-
FW_UPDATE_STATUS_FAILED_CLOUD_CONNECT_ON_ENTRY_TIMEOUT = -4,
96-
FW_UPDATE_STATUS_FAILED_PUBLISH_START = -5,
97-
FW_UPDATE_STATUS_FAILED_SETUP_CELLULAR_DISCONNECT_TIMEOUT = -6,
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,
95+
FW_UPDATE_STATUS_IDLE = 0,
96+
FW_UPDATE_STATUS_DOWNLOADING = 1,
97+
FW_UPDATE_STATUS_UPDATING = 2,
98+
FW_UPDATE_STATUS_SUCCESS = 3,
99+
FW_UPDATE_STATUS_FAILED = 4,
100+
FW_UPDATE_STATUS_NONE = 5, // for diagnostics
110101
};
111-
static_assert(FW_UPDATE_STATUS_IDLE == 0 && FW_UPDATE_STATUS_FAILED_PUBLISH_RESULT == -18, "SaraNcpFwUpdateStatus size changed!");
102+
static_assert(FW_UPDATE_STATUS_IDLE == 0 && FW_UPDATE_STATUS_NONE == 5, "SaraNcpFwUpdateStatus size changed!");
112103

113104
const system_tick_t NCP_FW_MODEM_INSTALL_ATOK_INTERVAL = 10000;
114105
const system_tick_t NCP_FW_MODEM_INSTALL_START_TIMEOUT = 5 * 60000;
@@ -142,6 +133,7 @@ struct __attribute__((packed)) SaraNcpFwUpdateData {
142133
uint16_t size; // sizeof(SaraNcpFwUpdateData)
143134
SaraNcpFwUpdateState state; // FW_UPDATE_STATE_IDLE;
144135
SaraNcpFwUpdateStatus status; // FW_UPDATE_STATUS_IDLE;
136+
system_error_t error; // SYSTEM_ERROR_NONE;
145137
uint32_t firmwareVersion; // 0;
146138
uint32_t startingFirmwareVersion; // 0;
147139
uint32_t updateVersion; // 0;
@@ -173,6 +165,7 @@ class SaraNcpFwUpdate {
173165
void init(SaraNcpFwUpdateCallbacks callbacks);
174166
int process();
175167
int getStatusDiagnostics();
168+
int getErrorDiagnostics();
176169
int setConfig(const SaraNcpFwUpdateConfig* userConfigData = nullptr);
177170
int checkUpdate(uint32_t version = 0);
178171
int enableUpdates();
@@ -185,7 +178,9 @@ class SaraNcpFwUpdate {
185178
SaraNcpFwUpdateState saraNcpFwUpdateState_;
186179
SaraNcpFwUpdateState saraNcpFwUpdateLastState_;
187180
SaraNcpFwUpdateStatus saraNcpFwUpdateStatus_;
181+
system_error_t saraNcpFwUpdateError_;
188182
SaraNcpFwUpdateStatus saraNcpFwUpdateStatusDiagnostics_;
183+
system_error_t saraNcpFwUpdateErrorDiagnostics_;
189184
uint32_t startingFirmwareVersion_;
190185
uint32_t firmwareVersion_;
191186
uint32_t updateVersion_;
@@ -211,7 +206,7 @@ class SaraNcpFwUpdate {
211206
static int httpRespCallback(AtResponseReader* reader, const char* prefix, void* data);
212207
static int cgevCallback(AtResponseReader* reader, const char* prefix, void* data);
213208
uint32_t getNcpFirmwareVersion();
214-
int setupHTTPSProperties();
209+
system_error_t setupHTTPSProperties();
215210
void cooldown(system_tick_t timer);
216211
void updateCooldown();
217212
bool inCooldown();
@@ -225,9 +220,9 @@ class SaraNcpFwUpdate {
225220
};
226221

227222
#ifndef UNIT_TEST
228-
class NcpFwUpdateDiagnostics: public AbstractUnsignedIntegerDiagnosticData {
223+
class NcpFwUpdateStatusDiagnostics: public AbstractUnsignedIntegerDiagnosticData {
229224
public:
230-
NcpFwUpdateDiagnostics() :
225+
NcpFwUpdateStatusDiagnostics() :
231226
AbstractUnsignedIntegerDiagnosticData(DIAG_ID_NETWORK_NCP_FW_UPDATE_STATUS, DIAG_NAME_NETWORK_NCP_FW_UPDATE_STATUS) {
232227
}
233228

@@ -236,6 +231,17 @@ class NcpFwUpdateDiagnostics: public AbstractUnsignedIntegerDiagnosticData {
236231
return 0; // OK
237232
}
238233
};
234+
class NcpFwUpdateErrorDiagnostics: public AbstractIntegerDiagnosticData {
235+
public:
236+
NcpFwUpdateErrorDiagnostics() :
237+
AbstractIntegerDiagnosticData(DIAG_ID_NETWORK_NCP_FW_UPDATE_ERROR_CODE, DIAG_NAME_NETWORK_NCP_FW_UPDATE_ERROR_CODE) {
238+
}
239+
240+
virtual int get(IntType& val) override {
241+
val = particle::services::SaraNcpFwUpdate::instance()->getErrorDiagnostics();
242+
return 0; // OK
243+
}
244+
};
239245
#endif // UNIT_TEST
240246

241247
} // namespace services

services/inc/system_defs.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -160,26 +160,26 @@ typedef enum system_flag_t {
160160
} system_flag_t;
161161

162162
/**
163-
* NCP Firmware Update Available Status for Cellular Wiring API Cellular.updateStatus()
163+
* NCP Firmware Update Available for Cellular Wiring API Cellular.updateStatus()
164164
*/
165-
typedef enum NcpFwUpdateAvailableStatus {
165+
typedef enum system_ncp_fw_update_available_t {
166166
/**
167167
* The system will check locally for firmware updates when the modem is initialized.
168168
*/
169-
SYSTEM_NCP_FW_UPDATE_STATUS_UNKNOWN = 0,
169+
SYSTEM_NCP_FW_UPDATE_UNKNOWN = 0,
170170
/**
171171
* No firmware update available.
172172
*/
173-
SYSTEM_NCP_FW_UPDATE_STATUS_NOT_AVAILABLE = 1,
173+
SYSTEM_NCP_FW_UPDATE_NOT_AVAILABLE = 1,
174174
/**
175175
* A firmware update is available.
176176
*/
177-
SYSTEM_NCP_FW_UPDATE_STATUS_PENDING = 2,
177+
SYSTEM_NCP_FW_UPDATE_PENDING = 2,
178178
/**
179179
* A firmware update is in progress.
180180
*/
181-
SYSTEM_NCP_FW_UPDATE_STATUS_IN_PROGRESS = 3
182-
} NcpFwUpdateAvailableStatus;
181+
SYSTEM_NCP_FW_UPDATE_IN_PROGRESS = 3
182+
} system_ncp_fw_update_available_t;
183183

184184
#ifdef __cplusplus
185185

services/inc/system_error.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,30 @@
5050
(BAD_DATA, "Invalid data format", -280), \
5151
(OUT_OF_RANGE, "Out of range", -290), \
5252
(DEPRECATED, "Deprecated", -300), \
53+
(SARA_NCP_FW_UPDATE_QUALIFY_FLAGS, "Qualify flags", -400), /* -499 ... -400: SaraNcpFwUpdate errors */ \
54+
(SARA_NCP_FW_UPDATE_CLOUD_CONNECT_ON_ENTRY_TIMEOUT, "Cloud conn. on entry timeout", -405), \
55+
(SARA_NCP_FW_UPDATE_PUBLISH_START, "Publish start err", -410), \
56+
(SARA_NCP_FW_UPDATE_SETUP_CELLULAR_DISCONNECT_TIMEOUT, "Setup cell disconn. timeout", -415), \
57+
(SARA_NCP_FW_UPDATE_SETUP_CELLULAR_STILL_CONNECTED, "Setup cell still conn.", -420), \
58+
(SARA_NCP_FW_UPDATE_SETUP_CELLULAR_CONNECT_TIMEOUT, "Setup cell conn. timeout", -425), \
59+
(SARA_NCP_FW_UPDATE_HTTPS_SETUP_1, "HTTPS err 1", -430), \
60+
(SARA_NCP_FW_UPDATE_HTTPS_SETUP_2, "HTTPS err 2", -431), \
61+
(SARA_NCP_FW_UPDATE_HTTPS_SETUP_3, "HTTPS err 3", -432), \
62+
(SARA_NCP_FW_UPDATE_HTTPS_SETUP_4, "HTTPS err 4", -433), \
63+
(SARA_NCP_FW_UPDATE_HTTPS_SETUP_5, "HTTPS err 5", -434), \
64+
(SARA_NCP_FW_UPDATE_HTTPS_SETUP_6, "HTTPS err 6", -435), \
65+
(SARA_NCP_FW_UPDATE_HTTPS_SETUP_7, "HTTPS err 7", -436), \
66+
(SARA_NCP_FW_UPDATE_HTTPS_SETUP_8, "HTTPS err 8", -437), \
67+
(SARA_NCP_FW_UPDATE_HTTPS_SETUP_9, "HTTPS err 9", -438), \
68+
(SARA_NCP_FW_UPDATE_DOWNLOAD_RETRY_MAX, "DL retry max err", -440), \
69+
(SARA_NCP_FW_UPDATE_INSTALL_CELLULAR_DISCONNECT_TIMEOUT,"Install cell disconn. timeout",-445), \
70+
(SARA_NCP_FW_UPDATE_START_INSTALL_TIMEOUT, "Install start timeout", -450), \
71+
(SARA_NCP_FW_UPDATE_INSTALL_AT_ERROR, "Install AT err", -455), \
72+
(SARA_NCP_FW_UPDATE_SAME_VERSION, "Same version err", -460), \
73+
(SARA_NCP_FW_UPDATE_INSTALL_TIMEOUT, "Install timeout", -465), \
74+
(SARA_NCP_FW_UPDATE_POWER_OFF_TIMEOUT, "Power off timeout", -470), \
75+
(SARA_NCP_FW_UPDATE_CLOUD_CONNECT_ON_EXIT_TIMEOUT, "Cloud conn. on exit timeout", -475), \
76+
(SARA_NCP_FW_UPDATE_PUBLISH_RESULT, "Publish result err", -480), \
5377
(COAP, "CoAP error", -1000), /* -1199 ... -1000: CoAP errors */ \
5478
(COAP_4XX, "CoAP: 4xx", -1100), \
5579
(COAP_5XX, "CoAP: 5xx", -1132), \

0 commit comments

Comments
 (0)