| /* |
| * Copyright (c) 2022 Nordic Semiconductor |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #define LOG_MODULE_NAME app_fw_update |
| #include <zephyr/logging/log.h> |
| LOG_MODULE_REGISTER(LOG_MODULE_NAME); |
| |
| #include <zephyr/net/lwm2m.h> |
| #include "modules.h" |
| |
| static uint8_t firmware_buf[64]; |
| |
| /* Array with supported PULL firmware update protocols */ |
| static uint8_t supported_protocol[1]; |
| |
| static int firmware_update_cb(uint16_t obj_inst_id, |
| uint8_t *args, uint16_t args_len) |
| { |
| LOG_DBG("UPDATE"); |
| |
| /* TODO: kick off update process */ |
| |
| /* If success, set the update result as RESULT_SUCCESS. |
| * In reality, it should be set at function lwm2m_setup() |
| */ |
| lwm2m_engine_set_u8("5/0/3", STATE_IDLE); |
| lwm2m_engine_set_u8("5/0/5", RESULT_SUCCESS); |
| return 0; |
| } |
| |
| static void *firmware_get_buf(uint16_t obj_inst_id, uint16_t res_id, |
| uint16_t res_inst_id, size_t *data_len) |
| { |
| *data_len = sizeof(firmware_buf); |
| return firmware_buf; |
| } |
| |
| static int firmware_block_received_cb(uint16_t obj_inst_id, |
| uint16_t res_id, uint16_t res_inst_id, |
| uint8_t *data, uint16_t data_len, |
| bool last_block, size_t total_size) |
| { |
| LOG_INF("FIRMWARE: BLOCK RECEIVED: len:%u last_block:%d", |
| data_len, last_block); |
| return 0; |
| } |
| |
| void init_firmware_update(void) |
| { |
| /* setup data buffer for block-wise transfer */ |
| lwm2m_engine_register_pre_write_callback("5/0/0", firmware_get_buf); |
| lwm2m_firmware_set_write_cb(firmware_block_received_cb); |
| |
| if (IS_ENABLED(CONFIG_LWM2M_FIRMWARE_UPDATE_PULL_SUPPORT)) { |
| lwm2m_engine_create_res_inst("5/0/8/0"); |
| lwm2m_engine_set_res_buf("5/0/8/0", &supported_protocol[0], |
| sizeof(supported_protocol[0]), |
| sizeof(supported_protocol[0]), 0); |
| |
| lwm2m_firmware_set_update_cb(firmware_update_cb); |
| } |
| } |