luat_timer_rtt.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "luat_base.h"
  2. #include "luat_malloc.h"
  3. #include "luat_msgbus.h"
  4. #include "luat_timer.h"
  5. #include "rtthread.h"
  6. static char timer_name[32];
  7. static void rt_timer_callback(void *param) {
  8. //rt_kprintf("rt_timer_callback begin!!\n");
  9. rtos_msg_t msg;
  10. luat_timer_t *timer = (luat_timer_t*)param;
  11. msg.handler = timer->func;
  12. msg.ptr = param;
  13. luat_msgbus_put(&msg, 1);
  14. //rt_kprintf("rt_timer_callback end!! id=%ld msg=%ld\n", timer->id, param);
  15. }
  16. int luat_timer_start(luat_timer_t* timer) {
  17. // luat_printf("rtt timer id=%ld\n", timer->id);
  18. // luat_printf("rtt timer timeout=%ld\n", timer->timeout);
  19. // luat_printf("rtt timer repeat=%ld\n", timer->repeat);
  20. rt_sprintf(timer_name, "t%ld", timer->id);
  21. //luat_printf("rtt timer name=%s\n", timer_name);
  22. rt_tick_t time = timer->timeout;
  23. rt_uint8_t flag = timer->repeat ? RT_TIMER_FLAG_PERIODIC : RT_TIMER_FLAG_ONE_SHOT;
  24. rt_timer_t r_timer = rt_timer_create(timer_name, rt_timer_callback, timer, time, flag);
  25. if (r_timer == NULL) {
  26. //rt_kprintf("rt_timer_create FAIL\n");
  27. return 1;
  28. }
  29. if (rt_timer_start(r_timer) != RT_EOK) {
  30. //rt_kprintf("rt_timer_start FAIL\n");
  31. rt_timer_delete(r_timer);
  32. return 1;
  33. };
  34. timer->os_timer = r_timer;
  35. //rt_kprintf("rt_timer_start complete!!\n");
  36. return 0;
  37. }
  38. int luat_timer_stop(luat_timer_t* timer) {
  39. if (!timer)
  40. return 0;
  41. if (!timer->os_timer)
  42. return 0;
  43. rt_timer_stop((rt_timer_t)timer->os_timer);
  44. rt_timer_delete((rt_timer_t)timer->os_timer);
  45. return 0;
  46. }
  47. int luat_timer_mdelay(size_t ms) {
  48. if (ms > 0)
  49. rt_thread_mdelay(ms);
  50. return 0;
  51. }