net: lwm2m: Refactor RD client to be tickless
Call RD client service only when there is state transitioning. Remove periodic 500 ms timer. Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
This commit is contained in:
parent
2da8844d19
commit
518bbc1303
4 changed files with 75 additions and 47 deletions
|
@ -167,7 +167,6 @@ ZTEST(lwm2m_rd_client, test_start_registration_ok)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
@ -198,10 +197,8 @@ ZTEST(lwm2m_rd_client, test_timeout_resume_registration)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
||||
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
|
||||
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
|
||||
|
@ -228,7 +225,6 @@ ZTEST(lwm2m_rd_client, test_start_registration_timeout)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_timeout_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
@ -250,7 +246,6 @@ ZTEST(lwm2m_rd_client, test_start_registration_fail)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
@ -272,7 +267,6 @@ ZTEST(lwm2m_rd_client, test_start_registration_update)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
@ -300,7 +294,6 @@ ZTEST(lwm2m_rd_client, test_rx_off)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
@ -329,7 +322,6 @@ ZTEST(lwm2m_rd_client, test_start_registration_update_fail)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
@ -359,7 +351,6 @@ ZTEST(lwm2m_rd_client, test_registration_update_timeout)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
@ -376,12 +367,12 @@ ZTEST(lwm2m_rd_client, test_registration_update_timeout)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_timeout_cb_default);
|
||||
lwm2m_rd_client_update();
|
||||
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE, 2));
|
||||
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_TIMEOUT, 3),
|
||||
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE, 1));
|
||||
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_TIMEOUT, 2),
|
||||
NULL);
|
||||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 4),
|
||||
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 3),
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
@ -393,7 +384,6 @@ ZTEST(lwm2m_rd_client, test_deregistration_timeout)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
@ -421,7 +411,6 @@ ZTEST(lwm2m_rd_client, test_error_on_registration_update)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
@ -448,7 +437,6 @@ ZTEST(lwm2m_rd_client, test_network_error_on_registration)
|
|||
|
||||
(void)memset(&ctx, 0x0, sizeof(ctx));
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
@ -461,6 +449,8 @@ ZTEST(lwm2m_rd_client, test_network_error_on_registration)
|
|||
coap_packet_append_option_fake.custom_fake = coap_packet_append_option_fake_err;
|
||||
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
|
||||
NULL);
|
||||
wait_for_service(100);
|
||||
|
||||
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_NETWORK_ERROR, 0), NULL);
|
||||
}
|
||||
|
||||
|
@ -472,7 +462,6 @@ ZTEST(lwm2m_rd_client, test_suspend_resume_registration)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
@ -506,7 +495,6 @@ ZTEST(lwm2m_rd_client, test_socket_error)
|
|||
|
||||
test_prepare_pending_message_cb(&message_reply_cb_default);
|
||||
|
||||
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
|
||||
lwm2m_rd_client_init();
|
||||
test_lwm2m_engine_start_service();
|
||||
wait_for_service(1);
|
||||
|
|
|
@ -80,14 +80,14 @@ char *lwm2m_sprint_ip_addr_fake_default(const struct sockaddr *addr)
|
|||
|
||||
DEFINE_FAKE_VALUE_FUNC(int, lwm2m_server_short_id_to_inst, uint16_t);
|
||||
DEFINE_FAKE_VALUE_FUNC(int, lwm2m_security_index_to_inst_id, int);
|
||||
DEFINE_FAKE_VALUE_FUNC(int, lwm2m_engine_add_service, k_work_handler_t, uint32_t);
|
||||
|
||||
k_work_handler_t lwm2m_engine_add_service_service;
|
||||
uint32_t lwm2m_engine_add_service_period_ms = 20;
|
||||
int lwm2m_engine_add_service_fake_default(k_work_handler_t service, uint32_t period_ms)
|
||||
k_work_handler_t service;
|
||||
int64_t next;
|
||||
|
||||
int lwm2m_engine_call_at(k_work_handler_t work, int64_t timestamp)
|
||||
{
|
||||
lwm2m_engine_add_service_service = service;
|
||||
lwm2m_engine_add_service_period_ms = period_ms;
|
||||
service = work;
|
||||
next = timestamp ? timestamp : 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -97,18 +97,23 @@ void *(*pending_message_cb)();
|
|||
|
||||
static void service_work_fn(struct k_work *work)
|
||||
{
|
||||
while (lwm2m_engine_add_service_service != NULL) {
|
||||
while (true) {
|
||||
if (pending_message != NULL && pending_message_cb != NULL) {
|
||||
pending_message_cb(pending_message);
|
||||
pending_message = NULL;
|
||||
}
|
||||
|
||||
lwm2m_engine_add_service_service(work);
|
||||
k_sleep(K_MSEC(lwm2m_engine_add_service_period_ms));
|
||||
if (next && next < k_uptime_get()) {
|
||||
printk("Event!\n");
|
||||
next = 0;
|
||||
service(NULL);
|
||||
}
|
||||
k_sleep(K_MSEC(10));
|
||||
counter--;
|
||||
|
||||
/* avoid endless loop if rd client is stuck somewhere */
|
||||
if (counter == 0) {
|
||||
printk("Counter!\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -119,7 +124,7 @@ void wait_for_service(uint16_t cycles)
|
|||
uint16_t end = counter - cycles;
|
||||
|
||||
while (counter > end) {
|
||||
k_sleep(K_MSEC(1));
|
||||
k_sleep(K_MSEC(10));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -61,8 +61,6 @@ DECLARE_FAKE_VALUE_FUNC(char *, lwm2m_sprint_ip_addr, const struct sockaddr *);
|
|||
char *lwm2m_sprint_ip_addr_fake_default(const struct sockaddr *addr);
|
||||
DECLARE_FAKE_VALUE_FUNC(int, lwm2m_server_short_id_to_inst, uint16_t);
|
||||
DECLARE_FAKE_VALUE_FUNC(int, lwm2m_security_index_to_inst_id, int);
|
||||
DECLARE_FAKE_VALUE_FUNC(int, lwm2m_engine_add_service, k_work_handler_t, uint32_t);
|
||||
int lwm2m_engine_add_service_fake_default(k_work_handler_t service, uint32_t period_ms);
|
||||
void wait_for_service(uint16_t cycles);
|
||||
void test_lwm2m_engine_start_service(void);
|
||||
void test_lwm2m_engine_stop_service(void);
|
||||
|
@ -107,7 +105,6 @@ DECLARE_FAKE_VALUE_FUNC(int, do_register_op_link_format, struct lwm2m_message *)
|
|||
FUNC(lwm2m_sprint_ip_addr) \
|
||||
FUNC(lwm2m_server_short_id_to_inst) \
|
||||
FUNC(lwm2m_security_index_to_inst_id) \
|
||||
FUNC(lwm2m_engine_add_service) \
|
||||
FUNC(lwm2m_init_message) \
|
||||
FUNC(lwm2m_reset_message) \
|
||||
FUNC(lwm2m_send_message_async) \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue