Lines Matching refs:timer
95 static esp_err_t timer_insert(esp_timer_handle_t timer, bool without_update_alarm);
96 static esp_err_t timer_remove(esp_timer_handle_t timer);
97 static bool timer_armed(esp_timer_handle_t timer);
102 static void timer_insert_inactive(esp_timer_handle_t timer);
103 static void timer_remove_inactive(esp_timer_handle_t timer);
170 esp_err_t IRAM_ATTR esp_timer_restart(esp_timer_handle_t timer, uint64_t timeout_us) in esp_timer_restart() argument
174 if (timer == NULL) { in esp_timer_restart()
182 esp_timer_dispatch_t dispatch_method = timer->flags & FL_ISR_DISPATCH_METHOD; in esp_timer_restart()
185 if (!timer_armed(timer)) { in esp_timer_restart()
191 const uint64_t period = timer->period; in esp_timer_restart()
196 ret = timer_remove(timer); in esp_timer_restart()
205 timer->alarm = now + new_period; in esp_timer_restart()
206 timer->period = new_period; in esp_timer_restart()
209 timer->alarm = now + timeout_us; in esp_timer_restart()
210 timer->period = 0; in esp_timer_restart()
212 ret = timer_insert(timer, false); in esp_timer_restart()
220 esp_err_t IRAM_ATTR esp_timer_start_once(esp_timer_handle_t timer, uint64_t timeout_us) in esp_timer_start_once() argument
222 if (timer == NULL) { in esp_timer_start_once()
229 esp_timer_dispatch_t dispatch_method = timer->flags & FL_ISR_DISPATCH_METHOD; in esp_timer_start_once()
239 if (timer_armed(timer)) { in esp_timer_start_once()
242 timer->alarm = alarm; in esp_timer_start_once()
243 timer->period = 0; in esp_timer_start_once()
245 timer->times_armed++; in esp_timer_start_once()
247 err = timer_insert(timer, false); in esp_timer_start_once()
254 esp_err_t IRAM_ATTR esp_timer_start_periodic(esp_timer_handle_t timer, uint64_t period_us) in esp_timer_start_periodic() argument
256 if (timer == NULL) { in esp_timer_start_periodic()
264 esp_timer_dispatch_t dispatch_method = timer->flags & FL_ISR_DISPATCH_METHOD; in esp_timer_start_periodic()
269 if (timer_armed(timer)) { in esp_timer_start_periodic()
272 timer->alarm = alarm; in esp_timer_start_periodic()
273 timer->period = period_us; in esp_timer_start_periodic()
275 timer->times_armed++; in esp_timer_start_periodic()
276 timer->times_skipped = 0; in esp_timer_start_periodic()
278 err = timer_insert(timer, false); in esp_timer_start_periodic()
285 esp_err_t IRAM_ATTR esp_timer_stop(esp_timer_handle_t timer) in esp_timer_stop() argument
290 esp_timer_dispatch_t dispatch_method = timer->flags & FL_ISR_DISPATCH_METHOD; in esp_timer_stop()
296 if (!timer_armed(timer)) { in esp_timer_stop()
299 err = timer_remove(timer); in esp_timer_stop()
305 esp_err_t esp_timer_delete(esp_timer_handle_t timer) in esp_timer_delete() argument
307 if (timer == NULL) { in esp_timer_delete()
315 if (timer_armed(timer)) { in esp_timer_delete()
322 timer->flags &= ~FL_ISR_DISPATCH_METHOD; in esp_timer_delete()
323 timer->event_id = EVENT_ID_DELETE_TIMER; in esp_timer_delete()
324 timer->alarm = alarm; in esp_timer_delete()
325 timer->period = 0; in esp_timer_delete()
326 err = timer_insert(timer, false); in esp_timer_delete()
332 static IRAM_ATTR esp_err_t timer_insert(esp_timer_handle_t timer, bool without_update_alarm) in timer_insert() argument
335 timer_remove_inactive(timer); in timer_insert()
338 esp_timer_dispatch_t dispatch_method = timer->flags & FL_ISR_DISPATCH_METHOD; in timer_insert()
340 LIST_INSERT_HEAD(&s_timers[dispatch_method], timer, list_entry); in timer_insert()
343 if (timer->alarm < it->alarm) { in timer_insert()
344 LIST_INSERT_BEFORE(it, timer, list_entry); in timer_insert()
351 LIST_INSERT_AFTER(last, timer, list_entry); in timer_insert()
354 if (without_update_alarm == false && timer == LIST_FIRST(&s_timers[dispatch_method])) { in timer_insert()
355 esp_timer_impl_set_alarm_id(timer->alarm, dispatch_method); in timer_insert()
360 static IRAM_ATTR esp_err_t timer_remove(esp_timer_handle_t timer) in timer_remove() argument
362 esp_timer_dispatch_t dispatch_method = timer->flags & FL_ISR_DISPATCH_METHOD; in timer_remove()
364 LIST_REMOVE(timer, list_entry); in timer_remove()
365 timer->alarm = 0; in timer_remove()
366 timer->period = 0; in timer_remove()
367 if (timer == first_timer) { // if this timer was the first in the list. in timer_remove()
376 timer_insert_inactive(timer); in timer_remove()
383 static IRAM_ATTR void timer_insert_inactive(esp_timer_handle_t timer) in timer_insert_inactive() argument
385 esp_timer_dispatch_t dispatch_method = timer->flags & FL_ISR_DISPATCH_METHOD; in timer_insert_inactive()
388 LIST_INSERT_HEAD(&s_inactive_timers[dispatch_method], timer, list_entry); in timer_insert_inactive()
393 LIST_INSERT_BEFORE(head, timer, list_entry); in timer_insert_inactive()
397 static IRAM_ATTR void timer_remove_inactive(esp_timer_handle_t timer) in timer_remove_inactive() argument
399 LIST_REMOVE(timer, list_entry); in timer_remove_inactive()
404 static IRAM_ATTR bool timer_armed(esp_timer_handle_t timer) in timer_armed() argument
406 return timer->alarm > 0; in timer_armed()
751 esp_err_t IRAM_ATTR esp_timer_get_period(esp_timer_handle_t timer, uint64_t *period)
753 if (timer == NULL || period == NULL) {
757 esp_timer_dispatch_t dispatch_method = timer->flags & FL_ISR_DISPATCH_METHOD;
760 *period = timer->period;
766 esp_err_t IRAM_ATTR esp_timer_get_expiry_time(esp_timer_handle_t timer, uint64_t *expiry)
768 if (timer == NULL || expiry == NULL) {
772 if (timer->period > 0) {
777 esp_timer_dispatch_t dispatch_method = timer->flags & FL_ISR_DISPATCH_METHOD;
780 *expiry = timer->alarm;
786 bool IRAM_ATTR esp_timer_is_active(esp_timer_handle_t timer)
788 return timer_armed(timer);