45 #if LWM2M_QUEUE_MODE_ENABLED 55 #define LOG_MODULE "lwm2m-queue-mode" 56 #define LOG_LEVEL LOG_LEVEL_LWM2M 59 #define FIRST_REQUEST_MASK 0x01 60 #define HANDLER_FROM_NOTIFICATION_MASK 0x02 62 static uint16_t queue_mode_awake_time = LWM2M_QUEUE_MODE_DEFAULT_CLIENT_AWAKE_TIME;
63 static uint32_t queue_mode_sleep_time = LWM2M_QUEUE_MODE_DEFAULT_CLIENT_SLEEP_TIME;
66 static uint8_t waked_up_by_notification;
69 #if LWM2M_QUEUE_MODE_INCLUDE_DYNAMIC_ADAPTATION 70 static uint8_t queue_mode_dynamic_adaptation_flag = LWM2M_QUEUE_MODE_DEFAULT_DYNAMIC_ADAPTATION_FLAG;
73 uint16_t times_window[LWM2M_QUEUE_MODE_DYNAMIC_ADAPTATION_WINDOW_LENGTH] = { 0 };
74 uint8_t times_window_index = 0;
75 static uint8_t dynamic_adaptation_params = 0x00;
76 static uint64_t previous_request_time;
77 static inline void clear_first_request();
78 static inline uint8_t is_first_request();
79 static inline void clear_handler_from_notification();
80 static inline uint8_t get_handler_from_notification();
84 lwm2m_queue_mode_get_awake_time()
86 LOG_DBG(
"Client Awake Time: %d ms\n", (
int)queue_mode_awake_time);
87 return queue_mode_awake_time;
91 lwm2m_queue_mode_set_awake_time(uint16_t time)
93 queue_mode_awake_time = time;
97 lwm2m_queue_mode_get_sleep_time()
99 LOG_DBG(
"Client Sleep Time: %d ms\n", (
int)queue_mode_sleep_time);
100 return queue_mode_sleep_time;
104 lwm2m_queue_mode_set_sleep_time(uint32_t time)
106 queue_mode_sleep_time = time;
109 #if LWM2M_QUEUE_MODE_INCLUDE_DYNAMIC_ADAPTATION 111 lwm2m_queue_mode_get_dynamic_adaptation_flag()
113 LOG_DBG(
"Dynamic Adaptation Flag: %d ms\n", (
int)queue_mode_dynamic_adaptation_flag);
114 return queue_mode_dynamic_adaptation_flag;
118 lwm2m_queue_mode_set_dynamic_adaptation_flag(uint8_t flag)
120 queue_mode_dynamic_adaptation_flag = flag;
124 #if !UPDATE_WITH_MEAN 128 uint16_t max_time = 0;
130 for(i = 0; i < LWM2M_QUEUE_MODE_DYNAMIC_ADAPTATION_WINDOW_LENGTH; i++) {
131 if(times_window[i] > max_time) {
132 max_time = times_window[i];
143 uint16_t mean_time = 0;
145 for(i = 0; i < LWM2M_QUEUE_MODE_DYNAMIC_ADAPTATION_WINDOW_LENGTH; i++) {
147 mean_time = times_window[i];
149 if(times_window[i] != 0) {
150 mean_time = (mean_time + times_window[i]) / 2;
162 uint16_t mean_time = get_mean_time();
163 LOG_DBG(
"Dynamic Adaptation: updated awake time: %d ms\n", (
int)mean_time);
164 lwm2m_queue_mode_set_awake_time(mean_time + (mean_time >> 1));
167 uint16_t max_time = get_maximum_time();
168 LOG_DBG(
"Dynamic Adaptation: updated awake time: %d ms\n", (
int)max_time);
169 lwm2m_queue_mode_set_awake_time(max_time + (max_time >> 1));
175 lwm2m_queue_mode_add_time_to_window(uint16_t time)
177 if(times_window_index == LWM2M_QUEUE_MODE_DYNAMIC_ADAPTATION_WINDOW_LENGTH) {
178 times_window_index = 0;
180 times_window[times_window_index] = time;
181 times_window_index++;
186 lwm2m_queue_mode_is_waked_up_by_notification()
188 return waked_up_by_notification;
192 lwm2m_queue_mode_clear_waked_up_by_notification()
194 waked_up_by_notification = 0;
198 lwm2m_queue_mode_set_waked_up_by_notification()
200 waked_up_by_notification = 1;
204 lwm2m_queue_mode_request_received()
206 if(lwm2m_rd_client_is_client_awake()) {
207 lwm2m_rd_client_restart_client_awake_timer();
209 #if LWM2M_QUEUE_MODE_INCLUDE_DYNAMIC_ADAPTATION 210 if(lwm2m_queue_mode_get_dynamic_adaptation_flag() && !get_handler_from_notification()) {
211 if(is_first_request()) {
213 clear_first_request();
217 lwm2m_queue_mode_add_time_to_window(0xffff);
219 lwm2m_queue_mode_add_time_to_window(
coap_timer_uptime() - previous_request_time);
225 if(get_handler_from_notification()) {
226 clear_handler_from_notification();
231 #if LWM2M_QUEUE_MODE_INCLUDE_DYNAMIC_ADAPTATION 233 lwm2m_queue_mode_set_first_request()
235 dynamic_adaptation_params |= FIRST_REQUEST_MASK;
239 lwm2m_queue_mode_set_handler_from_notification()
241 dynamic_adaptation_params |= HANDLER_FROM_NOTIFICATION_MASK;
244 static inline uint8_t
247 return dynamic_adaptation_params & FIRST_REQUEST_MASK;
250 static inline uint8_t
251 get_handler_from_notification()
253 return (dynamic_adaptation_params & HANDLER_FROM_NOTIFICATION_MASK) != 0;
257 clear_first_request()
259 dynamic_adaptation_params &= ~FIRST_REQUEST_MASK;
263 clear_handler_from_notification()
265 dynamic_adaptation_params &= ~HANDLER_FROM_NOTIFICATION_MASK;
Linked list manipulation routines.
Header file for the Contiki OMA LWM2M Registration and Bootstrap Client.
Memory block allocation routines.
static uint64_t coap_timer_uptime(void)
Get the time since boot in milliseconds.
Header file for the Contiki OMA LWM2M Queue Mode implementation to manage the parameters ...
Header file for the Contiki OMA LWM2M engine