ktime.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2023-07-10 xqyjlj The first version.
  9. */
  10. #ifndef __KTIME_H__
  11. #define __KTIME_H__
  12. #include <stdint.h>
  13. #include <sys/time.h>
  14. #include "rtthread.h"
  15. #define RT_KTIME_RESMUL (1000000UL)
  16. struct rt_ktime_hrtimer
  17. {
  18. struct rt_object parent; /**< inherit from rt_object */
  19. rt_list_t row;
  20. void *parameter;
  21. unsigned long init_cnt;
  22. unsigned long timeout_cnt;
  23. rt_err_t error;
  24. struct rt_semaphore sem;
  25. void (*timeout_func)(void *parameter);
  26. };
  27. typedef struct rt_ktime_hrtimer *rt_ktime_hrtimer_t;
  28. /**
  29. * @brief Get boottime with us precision
  30. *
  31. * @param tv: timeval
  32. * @return rt_err_t
  33. */
  34. rt_err_t rt_ktime_boottime_get_us(struct timeval *tv);
  35. /**
  36. * @brief Get boottime with s precision
  37. *
  38. * @param t: time_t
  39. * @return rt_err_t
  40. */
  41. rt_err_t rt_ktime_boottime_get_s(time_t *t);
  42. /**
  43. * @brief Get boottime with ns precision
  44. *
  45. * @param ts: timespec
  46. * @return rt_err_t
  47. */
  48. rt_err_t rt_ktime_boottime_get_ns(struct timespec *ts);
  49. /**
  50. * @brief Get cputimer resolution
  51. *
  52. * @return (resolution * RT_KTIME_RESMUL)
  53. */
  54. unsigned long rt_ktime_cputimer_getres(void);
  55. /**
  56. * @brief Get cputimer frequency
  57. *
  58. * @return frequency
  59. */
  60. unsigned long rt_ktime_cputimer_getfrq(void);
  61. /**
  62. * @brief Get cputimer the value of the cnt counter
  63. *
  64. * @return cnt
  65. */
  66. unsigned long rt_ktime_cputimer_getcnt(void);
  67. /**
  68. * @brief Get cputimer the cnt value corresponding to 1 os tick
  69. *
  70. * @return step
  71. */
  72. unsigned long rt_ktime_cputimer_getstep(void);
  73. /**
  74. * @brief Init cputimer
  75. *
  76. */
  77. void rt_ktime_cputimer_init(void);
  78. /**
  79. * @brief Get hrtimer resolution
  80. *
  81. * @return (resolution * RT_KTIME_RESMUL)
  82. */
  83. unsigned long rt_ktime_hrtimer_getres(void);
  84. /**
  85. * @brief Get hrtimer frequency
  86. *
  87. * @return frequency
  88. */
  89. unsigned long rt_ktime_hrtimer_getfrq(void);
  90. /**
  91. * @brief Get hrtimer the value of the cnt counter
  92. *
  93. * @return cnt
  94. */
  95. unsigned long rt_ktime_hrtimer_getcnt(void);
  96. /**
  97. * @brief set hrtimer timeout, when timeout, the timer callback will call timeout
  98. *
  99. * @param cnt: hrtimer requires a timing cnt value
  100. * @param timeout: timeout callback
  101. * @param param: parameter
  102. * @return rt_err_t
  103. */
  104. rt_err_t rt_ktime_hrtimer_settimeout(unsigned long cnt, void (*timeout)(void *param), void *param);
  105. void rt_ktime_hrtimer_init(rt_ktime_hrtimer_t timer,
  106. const char *name,
  107. unsigned long cnt,
  108. rt_uint8_t flag,
  109. void (*timeout)(void *parameter),
  110. void *parameter);
  111. rt_err_t rt_ktime_hrtimer_start(rt_ktime_hrtimer_t timer);
  112. rt_err_t rt_ktime_hrtimer_stop(rt_ktime_hrtimer_t timer);
  113. rt_err_t rt_ktime_hrtimer_control(rt_ktime_hrtimer_t timer, int cmd, void *arg);
  114. rt_err_t rt_ktime_hrtimer_detach(rt_ktime_hrtimer_t timer);
  115. rt_inline void rt_ktime_hrtimer_keep_errno(rt_ktime_hrtimer_t timer, rt_err_t err)
  116. {
  117. RT_ASSERT(timer != RT_NULL);
  118. timer->error = err;
  119. }
  120. /**
  121. * @brief sleep by the cputimer cnt value
  122. *
  123. * @param cnt: the cputimer cnt value
  124. * @return rt_err_t
  125. */
  126. rt_err_t rt_ktime_hrtimer_sleep(unsigned long cnt);
  127. /**
  128. * @brief sleep by ns
  129. *
  130. * @param ns: ns
  131. * @return rt_err_t
  132. */
  133. rt_err_t rt_ktime_hrtimer_ndelay(unsigned long ns);
  134. /**
  135. * @brief sleep by us
  136. *
  137. * @param us: us
  138. * @return rt_err_t
  139. */
  140. rt_err_t rt_ktime_hrtimer_udelay(unsigned long us);
  141. /**
  142. * @brief sleep by ms
  143. *
  144. * @param ms: ms
  145. * @return rt_err_t
  146. */
  147. rt_err_t rt_ktime_hrtimer_mdelay(unsigned long ms);
  148. #endif