| /** |
| * @file lwm2m_event_log.c |
| * @brief |
| * |
| * Copyright (c) 2022 Kickmaker |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /* |
| * Event Log |
| * https://raw.githubusercontent.com/OpenMobileAlliance/lwm2m-registry/prod/20.xml |
| */ |
| |
| #define LOG_MODULE_NAME net_lwm2m_event_log |
| #define LOG_LEVEL CONFIG_LWM2M_LOG_LEVEL |
| |
| #include <zephyr/logging/log.h> |
| LOG_MODULE_REGISTER(LOG_MODULE_NAME); |
| |
| #include <string.h> |
| #include <zephyr/init.h> |
| |
| #include "lwm2m_object.h" |
| #include "lwm2m_engine.h" |
| #include "lwm2m_obj_event_log.h" |
| |
| #define EVENT_LOG_VERSION_MAJOR 1 |
| #define EVENT_LOG_VERSION_MINOR 0 |
| #define EVENT_LOG_MAX_ID 6 |
| |
| /* |
| * Calculate resource instances as follows: |
| * start with EVENT_LOG_MAX_ID |
| * subtract EXEC resources (2) |
| */ |
| #define RESOURCE_INSTANCE_COUNT (EVENT_LOG_MAX_ID - 2) |
| |
| struct lwm2m_event_log_obj { |
| uint8_t log_class; |
| uint8_t log_status; |
| uint8_t log_data_format; |
| }; |
| |
| static struct lwm2m_engine_obj lwm2m_event_log; |
| static struct lwm2m_engine_obj_field fields[] = { |
| OBJ_FIELD_DATA(LWM2M_EVENT_LOG_CLASS_ID, RW_OPT, U8), |
| OBJ_FIELD_EXECUTE_OPT(LWM2M_EVENT_LOG_START_ID), |
| OBJ_FIELD_EXECUTE_OPT(LWM2M_EVENT_LOG_STOP_ID), |
| OBJ_FIELD_DATA(LWM2M_EVENT_LOG_STATUS_ID, R_OPT, U8), |
| OBJ_FIELD_DATA(LWM2M_EVENT_LOG_DATA_ID, R, OPAQUE), |
| OBJ_FIELD_DATA(LWM2M_EVENT_LOG_DATAFORMAT_ID, RW_OPT, U8), |
| }; |
| |
| static struct lwm2m_engine_obj_inst inst; |
| static struct lwm2m_engine_res res[EVENT_LOG_MAX_ID]; |
| static struct lwm2m_engine_res_inst res_inst[RESOURCE_INSTANCE_COUNT]; |
| |
| static struct lwm2m_engine_obj_inst *lwm2m_event_log_create(uint16_t obj_inst_id) |
| { |
| int i = 0, j = 0; |
| |
| init_res_instance(res_inst, ARRAY_SIZE(res_inst)); |
| |
| /* initialize instance resource data */ |
| INIT_OBJ_RES_OPTDATA(LWM2M_EVENT_LOG_CLASS_ID, res, i, res_inst, j); |
| INIT_OBJ_RES_EXECUTE(LWM2M_EVENT_LOG_START_ID, res, i, NULL); |
| INIT_OBJ_RES_EXECUTE(LWM2M_EVENT_LOG_STOP_ID, res, i, NULL); |
| INIT_OBJ_RES_OPTDATA(LWM2M_EVENT_LOG_STATUS_ID, res, i, res_inst, j); |
| INIT_OBJ_RES_OPT(LWM2M_EVENT_LOG_DATA_ID, res, i, res_inst, j, 1, |
| false, true, NULL, NULL, NULL, NULL, NULL); |
| INIT_OBJ_RES_OPTDATA(LWM2M_EVENT_LOG_DATAFORMAT_ID, res, i, res_inst, j); |
| |
| inst.resources = res; |
| inst.resource_count = i; |
| |
| LOG_DBG("Created LWM2M event log instance: %d", obj_inst_id); |
| return &inst; |
| } |
| |
| static int lwm2m_event_log_init(const struct device *dev) |
| { |
| struct lwm2m_engine_obj_inst *obj_inst = NULL; |
| int ret = 0; |
| |
| /* initialize the Event Log field data */ |
| lwm2m_event_log.obj_id = LWM2M_OBJECT_EVENT_LOG_ID; |
| lwm2m_event_log.version_major = EVENT_LOG_VERSION_MAJOR; |
| lwm2m_event_log.version_minor = EVENT_LOG_VERSION_MINOR; |
| lwm2m_event_log.is_core = false; |
| lwm2m_event_log.fields = fields; |
| lwm2m_event_log.field_count = ARRAY_SIZE(fields); |
| lwm2m_event_log.max_instance_count = 1U; |
| lwm2m_event_log.create_cb = lwm2m_event_log_create; |
| lwm2m_register_obj(&lwm2m_event_log); |
| |
| /* auto create the first instance */ |
| ret = lwm2m_create_obj_inst(LWM2M_OBJECT_EVENT_LOG_ID, 0, &obj_inst); |
| if (ret < 0) { |
| LOG_ERR("Create LWM2M Event Log instance 0 error: %d", ret); |
| } |
| |
| return ret; |
| } |
| |
| SYS_INIT(lwm2m_event_log_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); |