From ec3ec8cd2a60ad48f42dab43b47f1bba9326e26d Mon Sep 17 00:00:00 2001 From: Seppo Takalo Date: Fri, 19 Jan 2024 16:14:37 +0200 Subject: [PATCH] net: lwm2m: Add LWM2M_ON_INIT() macro Add macro that allows registration of initialization functions that are called when LwM2M engine starts. On LwM2M engine starts up, it first executes all initialization functions in following priority order: 1. LWM2M_PRIO_ENGINE 2. LWM2M_PRIO_CORE, this is where all LwM2M core objects are initialized 3. LWM2M_PRIO_OBJ, this is where all other objects are initialized 4. LwM2M_PRIO_APP, application initialization. Now on the initialization phase, we could rely that certain objects have already been registered. For example custom objects can register callbacks to core objects. On application phase, we can initialize sensor objects and register their callbacks because objects have already been initialized. This LWM2M_ON_INIT() should replace all use of SYS_INIT() with the default CONFIG_KERNEL_INIT_PRIORITY_DEFAULT. Priority order is actually just alphabetical order of names, so the order is set on a linkin phase, and we don't need any runtime checking for it. Signed-off-by: Seppo Takalo --- subsys/net/lib/lwm2m/CMakeLists.txt | 2 + subsys/net/lib/lwm2m/ipso_accelerometer.c | 2 +- subsys/net/lib/lwm2m/ipso_buzzer.c | 2 +- subsys/net/lib/lwm2m/ipso_current_sensor.c | 3 +- subsys/net/lib/lwm2m/ipso_filling_sensor.c | 4 +- subsys/net/lib/lwm2m/ipso_generic_sensor.c | 3 +- subsys/net/lib/lwm2m/ipso_humidity_sensor.c | 3 +- subsys/net/lib/lwm2m/ipso_light_control.c | 3 +- subsys/net/lib/lwm2m/ipso_onoff_switch.c | 2 +- subsys/net/lib/lwm2m/ipso_pressure_sensor.c | 3 +- subsys/net/lib/lwm2m/ipso_push_button.c | 2 +- subsys/net/lib/lwm2m/ipso_temp_sensor.c | 3 +- subsys/net/lib/lwm2m/ipso_timer.c | 2 +- subsys/net/lib/lwm2m/ipso_voltage_sensor.c | 3 +- subsys/net/lib/lwm2m/iterables.ld | 1 + subsys/net/lib/lwm2m/lwm2m_engine.c | 9 ++- subsys/net/lib/lwm2m/lwm2m_engine.h | 60 +++++++++++++++++++ .../net/lib/lwm2m/lwm2m_obj_access_control.c | 2 +- .../net/lib/lwm2m/lwm2m_obj_binaryappdata.c | 2 +- subsys/net/lib/lwm2m/lwm2m_obj_connmon.c | 2 +- subsys/net/lib/lwm2m/lwm2m_obj_device.c | 2 +- subsys/net/lib/lwm2m/lwm2m_obj_event_log.c | 2 +- subsys/net/lib/lwm2m/lwm2m_obj_firmware.c | 2 +- subsys/net/lib/lwm2m/lwm2m_obj_gateway.c | 4 +- subsys/net/lib/lwm2m/lwm2m_obj_location.c | 2 +- subsys/net/lib/lwm2m/lwm2m_obj_portfolio.c | 2 +- subsys/net/lib/lwm2m/lwm2m_obj_security.c | 2 +- subsys/net/lib/lwm2m/lwm2m_obj_server.c | 3 +- subsys/net/lib/lwm2m/lwm2m_obj_swmgmt.c | 2 +- subsys/net/lib/lwm2m/lwm2m_rd_client.c | 4 +- subsys/net/lib/lwm2m/lwm2m_registry.c | 7 ++- subsys/net/lib/lwm2m/lwm2m_registry.h | 1 - subsys/net/lib/lwm2m/ucifi_battery.c | 2 +- subsys/net/lib/lwm2m/ucifi_lpwan.c | 2 +- .../net/lib/lwm2m/lwm2m_engine/CMakeLists.txt | 1 + .../lwm2m/lwm2m_registry/src/lwm2m_registry.c | 1 - 36 files changed, 105 insertions(+), 47 deletions(-) create mode 100644 subsys/net/lib/lwm2m/iterables.ld diff --git a/subsys/net/lib/lwm2m/CMakeLists.txt b/subsys/net/lib/lwm2m/CMakeLists.txt index 2e895ec381b..7246ff70999 100644 --- a/subsys/net/lib/lwm2m/CMakeLists.txt +++ b/subsys/net/lib/lwm2m/CMakeLists.txt @@ -127,4 +127,6 @@ zephyr_library_sources_ifdef(CONFIG_LWM2M_SHELL lwm2m_shell.c ) +zephyr_linker_sources(SECTIONS iterables.ld) + zephyr_library_link_libraries_ifdef(CONFIG_MBEDTLS mbedTLS) diff --git a/subsys/net/lib/lwm2m/ipso_accelerometer.c b/subsys/net/lib/lwm2m/ipso_accelerometer.c index 2458bf75321..0c1be988408 100644 --- a/subsys/net/lib/lwm2m/ipso_accelerometer.c +++ b/subsys/net/lib/lwm2m/ipso_accelerometer.c @@ -157,4 +157,4 @@ static int ipso_accel_init(void) return 0; } -SYS_INIT(ipso_accel_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_accel_init); diff --git a/subsys/net/lib/lwm2m/ipso_buzzer.c b/subsys/net/lib/lwm2m/ipso_buzzer.c index 4bd41735fa6..f679d7e4a60 100644 --- a/subsys/net/lib/lwm2m/ipso_buzzer.c +++ b/subsys/net/lib/lwm2m/ipso_buzzer.c @@ -258,4 +258,4 @@ static int ipso_buzzer_init(void) return 0; } -SYS_INIT(ipso_buzzer_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_buzzer_init); diff --git a/subsys/net/lib/lwm2m/ipso_current_sensor.c b/subsys/net/lib/lwm2m/ipso_current_sensor.c index 0684db94220..1268b7da56d 100644 --- a/subsys/net/lib/lwm2m/ipso_current_sensor.c +++ b/subsys/net/lib/lwm2m/ipso_current_sensor.c @@ -228,5 +228,4 @@ static int ipso_current_sensor_init(void) return 0; } -SYS_INIT(ipso_current_sensor_init, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_current_sensor_init); diff --git a/subsys/net/lib/lwm2m/ipso_filling_sensor.c b/subsys/net/lib/lwm2m/ipso_filling_sensor.c index 072d6d35bbb..96944e0c16a 100644 --- a/subsys/net/lib/lwm2m/ipso_filling_sensor.c +++ b/subsys/net/lib/lwm2m/ipso_filling_sensor.c @@ -228,7 +228,7 @@ static struct lwm2m_engine_obj_inst *filling_sensor_create(uint16_t obj_inst_id) return &inst[index]; } -static int init(void) +static int fill_sensor_init(void) { fill_sensor.obj_id = IPSO_OBJECT_ID; fill_sensor.version_major = FILLING_VERSION_MAJOR; @@ -243,4 +243,4 @@ static int init(void) return 0; } -SYS_INIT(init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(fill_sensor_init); diff --git a/subsys/net/lib/lwm2m/ipso_generic_sensor.c b/subsys/net/lib/lwm2m/ipso_generic_sensor.c index def650ce9e4..05a1afc9806 100644 --- a/subsys/net/lib/lwm2m/ipso_generic_sensor.c +++ b/subsys/net/lib/lwm2m/ipso_generic_sensor.c @@ -237,5 +237,4 @@ static int ipso_generic_sensor_init(void) return 0; } -SYS_INIT(ipso_generic_sensor_init, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_generic_sensor_init); diff --git a/subsys/net/lib/lwm2m/ipso_humidity_sensor.c b/subsys/net/lib/lwm2m/ipso_humidity_sensor.c index 24be33d37f2..b2d147060a0 100644 --- a/subsys/net/lib/lwm2m/ipso_humidity_sensor.c +++ b/subsys/net/lib/lwm2m/ipso_humidity_sensor.c @@ -218,5 +218,4 @@ static int ipso_humidity_sensor_init(void) return 0; } -SYS_INIT(ipso_humidity_sensor_init, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_humidity_sensor_init); diff --git a/subsys/net/lib/lwm2m/ipso_light_control.c b/subsys/net/lib/lwm2m/ipso_light_control.c index fc9a897461a..b7f727ff4a4 100644 --- a/subsys/net/lib/lwm2m/ipso_light_control.c +++ b/subsys/net/lib/lwm2m/ipso_light_control.c @@ -201,5 +201,4 @@ static int ipso_light_control_init(void) return 0; } -SYS_INIT(ipso_light_control_init, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_light_control_init); diff --git a/subsys/net/lib/lwm2m/ipso_onoff_switch.c b/subsys/net/lib/lwm2m/ipso_onoff_switch.c index 3bf8ba65c4e..3da496b2ca1 100644 --- a/subsys/net/lib/lwm2m/ipso_onoff_switch.c +++ b/subsys/net/lib/lwm2m/ipso_onoff_switch.c @@ -249,4 +249,4 @@ static int ipso_switch_init(void) return 0; } -SYS_INIT(ipso_switch_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_switch_init); diff --git a/subsys/net/lib/lwm2m/ipso_pressure_sensor.c b/subsys/net/lib/lwm2m/ipso_pressure_sensor.c index 87f87e4a277..7dca2ed3956 100644 --- a/subsys/net/lib/lwm2m/ipso_pressure_sensor.c +++ b/subsys/net/lib/lwm2m/ipso_pressure_sensor.c @@ -221,5 +221,4 @@ static int ipso_pressure_sensor_init(void) return 0; } -SYS_INIT(ipso_pressure_sensor_init, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_pressure_sensor_init); diff --git a/subsys/net/lib/lwm2m/ipso_push_button.c b/subsys/net/lib/lwm2m/ipso_push_button.c index 2cccd276aa9..07782a86756 100644 --- a/subsys/net/lib/lwm2m/ipso_push_button.c +++ b/subsys/net/lib/lwm2m/ipso_push_button.c @@ -186,4 +186,4 @@ static int ipso_button_init(void) return 0; } -SYS_INIT(ipso_button_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_button_init); diff --git a/subsys/net/lib/lwm2m/ipso_temp_sensor.c b/subsys/net/lib/lwm2m/ipso_temp_sensor.c index bdf59563833..ba843db0ebd 100644 --- a/subsys/net/lib/lwm2m/ipso_temp_sensor.c +++ b/subsys/net/lib/lwm2m/ipso_temp_sensor.c @@ -221,5 +221,4 @@ static int ipso_temp_sensor_init(void) return 0; } -SYS_INIT(ipso_temp_sensor_init, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_temp_sensor_init); diff --git a/subsys/net/lib/lwm2m/ipso_timer.c b/subsys/net/lib/lwm2m/ipso_timer.c index 6085d36d04c..833002e56c4 100644 --- a/subsys/net/lib/lwm2m/ipso_timer.c +++ b/subsys/net/lib/lwm2m/ipso_timer.c @@ -366,4 +366,4 @@ static int ipso_timer_init(void) return 0; } -SYS_INIT(ipso_timer_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_timer_init); diff --git a/subsys/net/lib/lwm2m/ipso_voltage_sensor.c b/subsys/net/lib/lwm2m/ipso_voltage_sensor.c index 55b45902234..ec1274d07ff 100644 --- a/subsys/net/lib/lwm2m/ipso_voltage_sensor.c +++ b/subsys/net/lib/lwm2m/ipso_voltage_sensor.c @@ -229,5 +229,4 @@ static int ipso_voltage_sensor_init(void) return 0; } -SYS_INIT(ipso_voltage_sensor_init, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ipso_voltage_sensor_init); diff --git a/subsys/net/lib/lwm2m/iterables.ld b/subsys/net/lib/lwm2m/iterables.ld new file mode 100644 index 00000000000..83ce9070ef0 --- /dev/null +++ b/subsys/net/lib/lwm2m/iterables.ld @@ -0,0 +1 @@ +ITERABLE_SECTION_ROM(lwm2m_init_func, 4) diff --git a/subsys/net/lib/lwm2m/lwm2m_engine.c b/subsys/net/lib/lwm2m/lwm2m_engine.c index bad54c521d7..ba408c1de8e 100644 --- a/subsys/net/lib/lwm2m/lwm2m_engine.c +++ b/subsys/net/lib/lwm2m/lwm2m_engine.c @@ -1330,9 +1330,12 @@ static int lwm2m_engine_init(void) (void)memset(output_block_contexts, 0, sizeof(output_block_contexts)); #endif - if (IS_ENABLED(CONFIG_LWM2M_RESOURCE_DATA_CACHE_SUPPORT)) { - /* Init data cache */ - lwm2m_engine_data_cache_init(); + STRUCT_SECTION_FOREACH(lwm2m_init_func, init) { + int ret = init->f(); + + if (ret) { + LOG_ERR("Init function %p returned %d", init, ret); + } } /* start sock receive thread */ diff --git a/subsys/net/lib/lwm2m/lwm2m_engine.h b/subsys/net/lib/lwm2m/lwm2m_engine.h index 81b28395662..bd96a380cf7 100644 --- a/subsys/net/lib/lwm2m/lwm2m_engine.h +++ b/subsys/net/lib/lwm2m/lwm2m_engine.h @@ -12,6 +12,7 @@ #include "lwm2m_object.h" #include "lwm2m_observation.h" #include "lwm2m_registry.h" +#include #define LWM2M_PROTOCOL_VERSION_MAJOR 1 #if defined(CONFIG_LWM2M_VERSION_1_1) @@ -30,6 +31,65 @@ /* length of time in milliseconds to wait for buffer allocations */ #define BUF_ALLOC_TIMEOUT K_SECONDS(1) +/** initialization function */ +struct lwm2m_init_func { + int (*f)(void); +}; +/** + * @defgroup LWM2M_PRIO LwM2M initialization priorities + * @{ + */ +#define LWM2M_PRIO_ENGINE 0 /**< Engine initialization */ +#define LWM2M_PRIO_CORE 1 /**< Core object initialization */ +#define LWM2M_PRIO_OBJ 2 /**< Object initializations */ +#define LwM2M_PRIO_APP 3 /**< Application logic initialization */ +/** @} */ + +/** + * @brief Declare an initialization function to be executed when LwM2M engine starts. + * + * When LwM2M engine starts up, it first executes all initialization functions in following + * priority order: + * 1. LWM2M_PRIO_ENGINE + * 2. LWM2M_PRIO_CORE, this is where all LwM2M core objects are initialized + * 3. LWM2M_PRIO_OBJ, this is where all other than core objects are initialized + * 4. LwM2M_PRIO_APP, application initialization. + * For example create sensor objects, and register object callbacks. + * + * @param[in] prio Priority, one of @ref LWM2M_PRIO macros. + * @param[in] init_function Initialization function + */ +#define LWM2M_ON_INIT(prio, init_function) \ + STRUCT_SECTION_ITERABLE(lwm2m_init_func, \ + CONCAT(LWM2M, prio, init_function)) = {.f = init_function} + +/** + * @brief Declare engine initialization function. + * @sa LWM2M_ON_INIT + * @param[in] init_function Initialization function + */ +#define LWM2M_ENGINE_INIT(init_function) LWM2M_ON_INIT(LWM2M_PRIO_ENGINE, init_function) + +/** + * @brief Declare core object initialization function. + * @sa LWM2M_ON_INIT + * @param[in] init_function Initialization function + */ +#define LWM2M_CORE_INIT(init_function) LWM2M_ON_INIT(LWM2M_PRIO_CORE, init_function) + +/** + * @brief Declare object initialization function. + * @sa LWM2M_ON_INIT + * @param[in] init_function Initialization function + */ +#define LWM2M_OBJ_INIT(init_function) LWM2M_ON_INIT(LWM2M_PRIO_OBJ, init_function) + +/** + * @brief Declare application specific initialization function. + * @sa LWM2M_ON_INIT + * @param[in] init_function Initialization function + */ +#define LWM2M_APP_INIT(init_function) LWM2M_ON_INIT(LWM2M_PRIO_APP, init_function) /** * @brief Validates that writing is a legal operation on the field given by the object in diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_access_control.c b/subsys/net/lib/lwm2m/lwm2m_obj_access_control.c index 383dbe9b539..e5eb8c56efb 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_access_control.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_access_control.c @@ -439,4 +439,4 @@ static int ac_control_init(void) return 0; } -SYS_INIT(ac_control_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_CORE_INIT(ac_control_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_binaryappdata.c b/subsys/net/lib/lwm2m/lwm2m_obj_binaryappdata.c index e9166f9e678..51e90b820ec 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_binaryappdata.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_binaryappdata.c @@ -122,4 +122,4 @@ static int lwm2m_binaryappdata_init(void) return ret; } -SYS_INIT(lwm2m_binaryappdata_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(lwm2m_binaryappdata_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_connmon.c b/subsys/net/lib/lwm2m/lwm2m_obj_connmon.c index 70309a0d3d6..a3cfaad8fa2 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_connmon.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_connmon.c @@ -222,4 +222,4 @@ static int lwm2m_connmon_init(void) return ret; } -SYS_INIT(lwm2m_connmon_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_CORE_INIT(lwm2m_connmon_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_device.c b/subsys/net/lib/lwm2m/lwm2m_obj_device.c index f5399fefc1e..c4abb72d506 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_device.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_device.c @@ -393,4 +393,4 @@ static int lwm2m_device_init(void) return ret; } -SYS_INIT(lwm2m_device_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_CORE_INIT(lwm2m_device_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_event_log.c b/subsys/net/lib/lwm2m/lwm2m_obj_event_log.c index 907dd596611..e80dfc10ee6 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_event_log.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_event_log.c @@ -103,4 +103,4 @@ static int lwm2m_event_log_init(void) return ret; } -SYS_INIT(lwm2m_event_log_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(lwm2m_event_log_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_firmware.c b/subsys/net/lib/lwm2m/lwm2m_obj_firmware.c index 1f0f6bb5b1e..082197c83a5 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_firmware.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_firmware.c @@ -506,4 +506,4 @@ static int lwm2m_firmware_init(void) return ret; } -SYS_INIT(lwm2m_firmware_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_CORE_INIT(lwm2m_firmware_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_gateway.c b/subsys/net/lib/lwm2m/lwm2m_obj_gateway.c index 5bb12f80f47..106ef951653 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_gateway.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_gateway.c @@ -206,7 +206,7 @@ static int lwm2m_gw_init(void) lwm2m_gw.obj_id = LWM2M_OBJECT_GATEWAY_ID; lwm2m_gw.version_major = GATEWAY_VERSION_MAJOR; lwm2m_gw.version_minor = GATEWAY_VERSION_MINOR; - lwm2m_gw.is_core = true; + lwm2m_gw.is_core = false; lwm2m_gw.fields = fields; lwm2m_gw.field_count = ARRAY_SIZE(fields); lwm2m_gw.max_instance_count = MAX_INSTANCE_COUNT; @@ -215,4 +215,4 @@ static int lwm2m_gw_init(void) return ret; } -SYS_INIT(lwm2m_gw_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(lwm2m_gw_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_location.c b/subsys/net/lib/lwm2m/lwm2m_obj_location.c index 73c43ff78eb..b7b9828982c 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_location.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_location.c @@ -117,4 +117,4 @@ static int ipso_location_init(void) return ret; } -SYS_INIT(ipso_location_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_CORE_INIT(ipso_location_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_portfolio.c b/subsys/net/lib/lwm2m/lwm2m_obj_portfolio.c index e5cdc2198e6..b77fc722130 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_portfolio.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_portfolio.c @@ -122,4 +122,4 @@ static int lwm2m_portfolio_init(void) return 0; } -SYS_INIT(lwm2m_portfolio_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(lwm2m_portfolio_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_security.c b/subsys/net/lib/lwm2m/lwm2m_obj_security.c index 00796648634..a926cb39b27 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_security.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_security.c @@ -261,4 +261,4 @@ static int lwm2m_security_init(void) return ret; } -SYS_INIT(lwm2m_security_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_CORE_INIT(lwm2m_security_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_server.c b/subsys/net/lib/lwm2m/lwm2m_obj_server.c index a9432340038..a7d3e541bbe 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_server.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_server.c @@ -18,6 +18,7 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME); #include "lwm2m_obj_server.h" #include "lwm2m_rd_client.h" #include "lwm2m_registry.h" +#include "lwm2m_engine.h" #define SERVER_VERSION_MAJOR 1 #if defined(CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1) @@ -458,4 +459,4 @@ static int lwm2m_server_init(void) return ret; } -SYS_INIT(lwm2m_server_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_CORE_INIT(lwm2m_server_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_obj_swmgmt.c b/subsys/net/lib/lwm2m/lwm2m_obj_swmgmt.c index a8376ea8621..1ccd22520b6 100644 --- a/subsys/net/lib/lwm2m/lwm2m_obj_swmgmt.c +++ b/subsys/net/lib/lwm2m/lwm2m_obj_swmgmt.c @@ -794,4 +794,4 @@ static int lwm2m_swmgmt_init(void) return 0; } -SYS_INIT(lwm2m_swmgmt_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(lwm2m_swmgmt_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_rd_client.c b/subsys/net/lib/lwm2m/lwm2m_rd_client.c index 22ce51e5248..99f673ce6b1 100644 --- a/subsys/net/lib/lwm2m/lwm2m_rd_client.c +++ b/subsys/net/lib/lwm2m/lwm2m_rd_client.c @@ -1791,6 +1791,4 @@ static int sys_lwm2m_rd_client_init(void) return lwm2m_rd_client_init(); } - -SYS_INIT(sys_lwm2m_rd_client_init, APPLICATION, - CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_ENGINE_INIT(sys_lwm2m_rd_client_init); diff --git a/subsys/net/lib/lwm2m/lwm2m_registry.c b/subsys/net/lib/lwm2m/lwm2m_registry.c index 1701b7f7412..6c1bab92b25 100644 --- a/subsys/net/lib/lwm2m/lwm2m_registry.c +++ b/subsys/net/lib/lwm2m/lwm2m_registry.c @@ -2234,9 +2234,9 @@ int lwm2m_engine_enable_cache(const char *resource_path, struct lwm2m_time_serie #endif /* CONFIG_LWM2M_RESOURCE_DATA_CACHE_SUPPORT */ } -int lwm2m_engine_data_cache_init(void) -{ #if defined(CONFIG_LWM2M_RESOURCE_DATA_CACHE_SUPPORT) +static int lwm2m_engine_data_cache_init(void) +{ int i; sys_slist_init(&lwm2m_timed_cache_list); @@ -2244,9 +2244,10 @@ int lwm2m_engine_data_cache_init(void) for (i = 0; i < ARRAY_SIZE(lwm2m_cache_entries); i++) { lwm2m_cache_entries[i].path.level = LWM2M_PATH_LEVEL_NONE; } -#endif return 0; } +LWM2M_ENGINE_INIT(lwm2m_engine_data_cache_init); +#endif bool lwm2m_cache_write(struct lwm2m_time_series_resource *cache_entry, struct lwm2m_time_series_elem *buf) diff --git a/subsys/net/lib/lwm2m/lwm2m_registry.h b/subsys/net/lib/lwm2m/lwm2m_registry.h index 0d817d00442..554babd93cd 100644 --- a/subsys/net/lib/lwm2m/lwm2m_registry.h +++ b/subsys/net/lib/lwm2m/lwm2m_registry.h @@ -242,7 +242,6 @@ struct lwm2m_cache_read_info { }; #endif -int lwm2m_engine_data_cache_init(void); struct lwm2m_time_series_resource * lwm2m_cache_entry_get_by_object(const struct lwm2m_obj_path *obj_path); bool lwm2m_cache_write(struct lwm2m_time_series_resource *cache_entry, diff --git a/subsys/net/lib/lwm2m/ucifi_battery.c b/subsys/net/lib/lwm2m/ucifi_battery.c index 11da0980967..468f4bbc4c3 100644 --- a/subsys/net/lib/lwm2m/ucifi_battery.c +++ b/subsys/net/lib/lwm2m/ucifi_battery.c @@ -150,4 +150,4 @@ static int ucifi_battery_init(void) return 0; } -SYS_INIT(ucifi_battery_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ucifi_battery_init); diff --git a/subsys/net/lib/lwm2m/ucifi_lpwan.c b/subsys/net/lib/lwm2m/ucifi_lpwan.c index 82878724405..0acbb0ecf3b 100644 --- a/subsys/net/lib/lwm2m/ucifi_lpwan.c +++ b/subsys/net/lib/lwm2m/ucifi_lpwan.c @@ -178,4 +178,4 @@ static int ucifi_lpwan_init(void) return 0; } -SYS_INIT(ucifi_lpwan_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); +LWM2M_OBJ_INIT(ucifi_lpwan_init); diff --git a/tests/net/lib/lwm2m/lwm2m_engine/CMakeLists.txt b/tests/net/lib/lwm2m/lwm2m_engine/CMakeLists.txt index 36e161c6b11..d4a60e2bb9c 100644 --- a/tests/net/lib/lwm2m/lwm2m_engine/CMakeLists.txt +++ b/tests/net/lib/lwm2m/lwm2m_engine/CMakeLists.txt @@ -10,6 +10,7 @@ set(APP_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) target_sources(app PRIVATE ${APP_SRC_DIR}/main.c) target_sources(app PRIVATE ${APP_SRC_DIR}/stubs.c) target_sources(app PRIVATE ${ZEPHYR_BASE}/subsys/net/lib/lwm2m/lwm2m_engine.c) +zephyr_linker_sources(SECTIONS ${ZEPHYR_BASE}/subsys/net/lib/lwm2m/iterables.ld) # Add includes directories target_include_directories(app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) diff --git a/tests/net/lib/lwm2m/lwm2m_registry/src/lwm2m_registry.c b/tests/net/lib/lwm2m/lwm2m_registry/src/lwm2m_registry.c index 8e99f666b7f..7763469bc4e 100644 --- a/tests/net/lib/lwm2m/lwm2m_registry/src/lwm2m_registry.c +++ b/tests/net/lib/lwm2m/lwm2m_registry/src/lwm2m_registry.c @@ -612,7 +612,6 @@ ZTEST(lwm2m_registry, test_resource_cache) struct lwm2m_time_series_elem e; /* Resource cache is turned off */ - zassert_equal(lwm2m_engine_data_cache_init(), 0); zassert_is_null(lwm2m_cache_entry_get_by_object(&path)); zassert_equal(lwm2m_enable_cache(&path, &e, 1), -ENOTSUP); /* deprecated */