@@ -79,6 +79,7 @@ static struct lwm2m_engine_res_inst res_inst[MAX_INSTANCE_COUNT][RESOURCE_INSTAN
79
79
80
80
static lwm2m_engine_set_data_cb_t write_cb [MAX_INSTANCE_COUNT ];
81
81
static lwm2m_engine_execute_cb_t update_cb [MAX_INSTANCE_COUNT ];
82
+ static lwm2m_engine_user_cb_t cancel_cb [MAX_INSTANCE_COUNT ];
82
83
83
84
#ifdef CONFIG_LWM2M_FIRMWARE_UPDATE_PULL_SUPPORT
84
85
extern int lwm2m_firmware_start_transfer (uint16_t obj_inst_id , char * package_uri );
@@ -234,7 +235,8 @@ static int package_write_cb(uint16_t obj_inst_id, uint16_t res_id,
234
235
{
235
236
uint8_t state ;
236
237
int ret = 0 ;
237
- lwm2m_engine_set_data_cb_t callback ;
238
+ lwm2m_engine_set_data_cb_t write_callback ;
239
+ lwm2m_engine_user_cb_t cancel_callback ;
238
240
239
241
state = lwm2m_firmware_get_update_state_inst (obj_inst_id );
240
242
if (state == STATE_IDLE ) {
@@ -246,6 +248,10 @@ static int package_write_cb(uint16_t obj_inst_id, uint16_t res_id,
246
248
if (data_len == 0U || (data_len == 1U && data [0 ] == '\0' )) {
247
249
/* reset to state idle and result default */
248
250
lwm2m_firmware_set_update_result_inst (obj_inst_id , RESULT_DEFAULT );
251
+ cancel_callback = lwm2m_firmware_get_cancel_cb_inst (obj_inst_id );
252
+ if (cancel_callback ) {
253
+ ret = cancel_callback (obj_inst_id );
254
+ }
249
255
LOG_DBG ("Update canceled by writing %d bytes" , data_len );
250
256
return 0 ;
251
257
}
@@ -256,10 +262,10 @@ static int package_write_cb(uint16_t obj_inst_id, uint16_t res_id,
256
262
return - EPERM ;
257
263
}
258
264
259
- callback = lwm2m_firmware_get_write_cb_inst (obj_inst_id );
260
- if (callback ) {
261
- ret = callback (obj_inst_id , res_id , res_inst_id ,
262
- data , data_len , last_block , total_size );
265
+ write_callback = lwm2m_firmware_get_write_cb_inst (obj_inst_id );
266
+ if (write_callback ) {
267
+ ret = write_callback (obj_inst_id , res_id , res_inst_id , data , data_len , last_block ,
268
+ total_size );
263
269
}
264
270
265
271
if (ret >= 0 ) {
@@ -331,6 +337,16 @@ lwm2m_engine_execute_cb_t lwm2m_firmware_get_update_cb(void)
331
337
return lwm2m_firmware_get_update_cb_inst (0 );
332
338
}
333
339
340
+ void lwm2m_firmware_set_cancel_cb (lwm2m_engine_user_cb_t cb )
341
+ {
342
+ lwm2m_firmware_set_cancel_cb_inst (0 , cb );
343
+ }
344
+
345
+ lwm2m_engine_user_cb_t lwm2m_firmware_get_cancel_cb (void )
346
+ {
347
+ return lwm2m_firmware_get_cancel_cb_inst (0 );
348
+ }
349
+
334
350
void lwm2m_firmware_set_write_cb_inst (uint16_t obj_inst_id , lwm2m_engine_set_data_cb_t cb )
335
351
{
336
352
write_cb [obj_inst_id ] = cb ;
@@ -351,6 +367,16 @@ lwm2m_engine_execute_cb_t lwm2m_firmware_get_update_cb_inst(uint16_t obj_inst_id
351
367
return update_cb [obj_inst_id ];
352
368
}
353
369
370
+ void lwm2m_firmware_set_cancel_cb_inst (uint16_t obj_inst_id , lwm2m_engine_user_cb_t cb )
371
+ {
372
+ cancel_cb [obj_inst_id ] = cb ;
373
+ }
374
+
375
+ lwm2m_engine_user_cb_t lwm2m_firmware_get_cancel_cb_inst (uint16_t obj_inst_id )
376
+ {
377
+ return cancel_cb [obj_inst_id ];
378
+ }
379
+
354
380
static int firmware_update_cb (uint16_t obj_inst_id ,
355
381
uint8_t * args , uint16_t args_len )
356
382
{
0 commit comments