blob: 8983d78b05797bd8d257fe4473e52bb957e10289 [file] [log] [blame]
/*
* 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_set_u8(&LWM2M_OBJ(5, 0, 3), STATE_IDLE);
lwm2m_set_u8(&LWM2M_OBJ(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_register_pre_write_callback(&LWM2M_OBJ(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_create_res_inst(&LWM2M_OBJ(5, 0, 8, 0));
lwm2m_set_res_buf(&LWM2M_OBJ(5, 0, 8, 0), &supported_protocol[0],
sizeof(supported_protocol[0]),
sizeof(supported_protocol[0]), 0);
lwm2m_firmware_set_update_cb(firmware_update_cb);
}
}