interface_kernel.h 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. #include <rtdef.h>
  2. #include <rtthread.h>
  3. /* RT-Thread kernel component guid */
  4. #define RTTHREAD_GUID_KERNEL 1000
  5. #define RTTHREAD_GUID_KSERVICE RTTHREAD_GUID_KERNEL
  6. #define RTTHREAD_GUID_THREAD (RTTHREAD_GUID_KERNEL + 1)
  7. #define RTTHREAD_GUID_SEMAPHORE (RTTHREAD_GUID_KERNEL + 2)
  8. #define RTTHREAD_GUID_MUTEX (RTTHREAD_GUID_KERNEL + 3)
  9. #define RTTHREAD_GUID_MAILBOX (RTTHREAD_GUID_KERNEL + 4)
  10. #define RTTHREAD_GUID_MESSAGEQUEUE (RTTHREAD_GUID_KERNEL + 5)
  11. #define RTTHREAD_GUID_MEMPOOL (RTTHREAD_GUID_KERNEL + 6)
  12. #define RTTHREAD_GUID_DEVICE (RTTHREAD_GUID_KERNEL + 7)
  13. #define RTTHREAD_GUID_TIMER (RTTHREAD_GUID_KERNEL + 8)
  14. /* file system component guid */
  15. #define RTTHREAD_GUID_FILESYSTEM 2000
  16. /* net component guid */
  17. #define RTTHREAD_GUID_NET 3000
  18. /* gui component guid */
  19. #define RTTHREAD_GUID_GUI 4000
  20. /* application guid */
  21. #define RTTHREAD_GUID_APP_START 10000
  22. /* service guid */
  23. #define RTTHREAD_GUID_SEVICE_START 20000
  24. /*
  25. * kservice interface
  26. */
  27. struct rt_kservice_interface
  28. {
  29. void (*rt_kprintf)(const char *fmt, ...);
  30. };
  31. typedef struct rt_kservice_interface* rt_kservice_interface_t;
  32. /*
  33. * thread interface
  34. */
  35. struct rt_thread_interface
  36. {
  37. rt_err_t (*rt_thread_init)(struct rt_thread* thread,
  38. const char* name,
  39. void (*entry)(void* parameter), void* parameter,
  40. void* stack_start, rt_uint32_t stack_size,
  41. rt_uint8_t priority, rt_uint32_t tick);
  42. rt_err_t (*rt_thread_detach)(rt_thread_t thread);
  43. rt_thread_t (*rt_thread_create)(const char* name,
  44. void (*entry)(void* parameter), void* parameter,
  45. rt_uint32_t stack_size,
  46. rt_uint8_t priority,
  47. rt_uint32_t tick);
  48. rt_thread_t (*rt_thread_self)(void);
  49. rt_thread_t (*rt_thread_find)(char* name);
  50. rt_err_t (*rt_thread_startup)(rt_thread_t thread);
  51. rt_err_t (*rt_thread_delete)(rt_thread_t thread);
  52. rt_err_t (*rt_thread_yield)(void);
  53. rt_err_t (*rt_thread_delay)(rt_tick_t tick);
  54. rt_err_t (*rt_thread_control)(rt_thread_t thread, rt_uint8_t cmd, void* arg);
  55. rt_err_t (*rt_thread_suspend)(rt_thread_t thread);
  56. rt_err_t (*rt_thread_resume)(rt_thread_t thread);
  57. void (*rt_thread_timeout)(void* parameter);
  58. };
  59. typedef struct rt_thread_interface* rt_thread_interface_t;
  60. #ifdef RT_USING_SEMAPHORE
  61. /*
  62. * semaphore interface
  63. */
  64. struct rt_sem_interface
  65. {
  66. rt_err_t (*rt_sem_init)(rt_sem_t sem, const char* name, rt_uint32_t value, rt_uint8_t flag);
  67. rt_err_t (*rt_sem_detach)(rt_sem_t sem);
  68. rt_sem_t (*rt_sem_create)(const char* name, rt_uint32_t value, rt_uint8_t flag);
  69. rt_err_t (*rt_sem_delete)(rt_sem_t sem);
  70. rt_err_t (*rt_sem_take)(rt_sem_t sem, rt_int32_t time);
  71. rt_err_t (*rt_sem_trytake)(rt_sem_t sem);
  72. rt_err_t (*rt_sem_release)(rt_sem_t sem);
  73. rt_err_t (*rt_sem_control)(rt_sem_t sem, rt_uint8_t cmd, void* arg);
  74. };
  75. typedef struct rt_sem_interface* rt_sem_interface_t;
  76. #endif
  77. #ifdef RT_USING_MUTEX
  78. /*
  79. * mutex interface
  80. */
  81. struct rt_mutex_interface
  82. {
  83. rt_err_t (*rt_mutex_init) (rt_mutex_t mutex, const char* name, rt_uint8_t flag);
  84. rt_err_t (*rt_mutex_detach)(rt_mutex_t mutex);
  85. rt_mutex_t (*rt_mutex_create)(const char* name, rt_uint8_t flag);
  86. rt_err_t (*rt_mutex_delete)(rt_mutex_t mutex);
  87. rt_err_t (*rt_mutex_take)(rt_mutex_t mutex, rt_int32_t time);
  88. rt_err_t (*rt_mutex_release)(rt_mutex_t mutex);
  89. rt_err_t (*rt_mutex_control)(rt_mutex_t mutex, rt_uint8_t cmd, void* arg);
  90. };
  91. typedef struct rt_mutex_interface* rt_mutex_interface_t;
  92. #endif
  93. #ifdef RT_USING_EVENT
  94. /*
  95. * event interface
  96. */
  97. struct rt_event_interface
  98. {
  99. rt_err_t (*rt_event_init)(rt_event_t event, const char* name, rt_uint8_t flag);
  100. rt_err_t (*rt_event_detach)(rt_event_t event);
  101. rt_event_t (*rt_event_create)(const char* name, rt_uint8_t flag);
  102. rt_err_t (*rt_event_delete)(rt_event_t event);
  103. rt_err_t (*rt_event_send)(rt_event_t event, rt_uint32_t set);
  104. rt_err_t (*rt_event_recv)(rt_event_t event, rt_uint32_t set, rt_uint8_t option, rt_int32_t timeout, rt_uint32_t* recved);
  105. rt_err_t (*rt_event_control)(rt_event_t event, rt_uint8_t cmd, void* arg);
  106. };
  107. typedef struct rt_event_interface* rt_event_interface_t;
  108. #endif
  109. #ifdef RT_USING_MAILBOX
  110. /*
  111. * mailbox interface
  112. */
  113. struct rt_mb_interface
  114. {
  115. rt_err_t (*rt_mb_init)(rt_mailbox_t mb, const char* name, void* msgpool, rt_size_t size, rt_uint8_t flag);
  116. rt_err_t (*rt_mb_detach)(rt_mailbox_t mb);
  117. rt_mailbox_t (*rt_mb_create)(const char* name, rt_size_t size, rt_uint8_t flag);
  118. rt_err_t (*rt_mb_delete)(rt_mailbox_t mb);
  119. rt_err_t (*rt_mb_send)(rt_mailbox_t mb, rt_uint32_t value);
  120. rt_err_t (*rt_mb_recv)(rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout);
  121. rt_err_t (*rt_mb_control)(rt_mailbox_t mb, rt_uint8_t cmd, void* arg);
  122. };
  123. typedef struct rt_mb_interface* rt_mb_interface_t;
  124. #endif
  125. #ifdef RT_USING_MESSAGEQUEUE
  126. /*
  127. * message queue interface
  128. */
  129. struct rt_mq_interface
  130. {
  131. rt_err_t (*rt_mq_init)(rt_mq_t mq, const char* name, void *msgpool, rt_size_t msg_size, rt_size_t pool_size, rt_uint8_t flag);
  132. rt_err_t (*rt_mq_detach)(rt_mq_t mq);
  133. rt_mq_t (*rt_mq_create)(const char* name, rt_size_t msg_size, rt_size_t max_msgs, rt_uint8_t flag);
  134. rt_err_t (*rt_mq_delete)(rt_mq_t mq);
  135. rt_err_t (*rt_mq_send)(rt_mq_t mq, void* buffer, rt_size_t size);
  136. rt_err_t (*rt_mq_urgent)(rt_mq_t mq, void* buffer, rt_size_t size);
  137. rt_err_t (*rt_mq_recv)(rt_mq_t mq, void* buffer, rt_size_t size, rt_int32_t timeout);
  138. rt_err_t (*rt_mq_control)(rt_mq_t mq, rt_uint8_t cmd, void* arg);
  139. };
  140. typedef struct rt_mq_interface* rt_mq_interface_t;
  141. #endif
  142. #ifdef RT_USING_MEMPOOL
  143. /*
  144. * memory pool interface
  145. */
  146. struct rt_mp_interface
  147. {
  148. rt_err_t (*rt_mp_init)(struct rt_mempool* mp, const char* name, void *start, rt_size_t size, rt_size_t block_size);
  149. rt_err_t (*rt_mp_detach)(struct rt_mempool* mp);
  150. rt_mp_t (*rt_mp_create)(const char* name, rt_size_t block_count, rt_size_t block_size);
  151. rt_err_t (*rt_mp_delete)(rt_mp_t mp);
  152. void* (*rt_mp_alloc)(rt_mp_t mp, rt_int32_t time);
  153. void (*rt_mp_free)(void *block);
  154. };
  155. typedef struct rt_mp_interface* rt_mp_interface_t;
  156. #endif
  157. #ifdef RT_USING_HEAP
  158. /*
  159. * heap memory interface
  160. */
  161. struct rt_heap_interface
  162. {
  163. void* (*rt_malloc)(rt_size_t size);
  164. void (*rt_free)(void *ptr);
  165. void* (*rt_realloc)(void *ptr, rt_size_t size);
  166. void* (*rt_calloc)(rt_size_t count, rt_size_t size);
  167. };
  168. typedef struct rt_heap_interface* rt_heap_interface_t;
  169. #endif
  170. #ifdef RT_USING_DEVICE
  171. /*
  172. * device interface
  173. */
  174. struct rt_device_interface
  175. {
  176. rt_err_t (*rt_device_register)(rt_device_t dev, const char* name, rt_uint16_t flags);
  177. rt_err_t (*rt_device_unregister)(rt_device_t dev);
  178. rt_err_t (*rt_device_init_all)(void);
  179. rt_device_t (*rt_device_find)(const char* name);
  180. rt_err_t (*rt_device_init)(rt_device_t dev);
  181. rt_err_t (*rt_device_open)(rt_device_t dev, rt_uint16_t oflag);
  182. rt_err_t (*rt_device_close)(rt_device_t dev);
  183. rt_size_t (*rt_device_read)(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size);
  184. rt_size_t (*rt_device_write)(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size);
  185. rt_err_t (*rt_device_control)(rt_device_t dev, rt_uint8_t cmd, void* arg);
  186. rt_err_t (*rt_device_set_rx_indicate)(rt_device_t dev, rt_err_t (*rx_ind )(rt_device_t dev, rt_size_t size));
  187. rt_err_t (*rt_device_set_tx_complete)(rt_device_t dev, rt_err_t (*tx_done)(rt_device_t dev, void *buffer));
  188. };
  189. typedef struct rt_device_interface* rt_device_interface_t;
  190. #endif
  191. /*
  192. * clock & timer interface
  193. */
  194. struct rt_timer_interface
  195. {
  196. rt_tick_t (*rt_tick_get)(void);
  197. rt_tick_t (*rt_tick_from_millisecond)(rt_uint32_t ms);
  198. void (*rt_system_timer_init)(void);
  199. void (*rt_system_timer_thread_init)(void);
  200. void (*rt_timer_init)(rt_timer_t timer,
  201. const char* name,
  202. void (*timeout)(void* parameter), void* parameter,
  203. rt_tick_t time, rt_uint8_t flag);
  204. rt_err_t (*rt_timer_detach)(rt_timer_t timer);
  205. rt_timer_t (*rt_timer_create)(const char* name, void (*timeout)(void* parameter), void* parameter, rt_tick_t time, rt_uint8_t flag);
  206. rt_err_t (*rt_timer_delete)(rt_timer_t timer);
  207. rt_err_t (*rt_timer_start)(rt_timer_t timer);
  208. rt_err_t (*rt_timer_stop)(rt_timer_t timer);
  209. rt_err_t (*rt_timer_control)(rt_timer_t timer, rt_uint8_t cmd, void* arg);
  210. };
  211. typedef struct rt_timer_interface* rt_timer_interface_t;
  212. /*
  213. * kernel interface
  214. */
  215. struct rt_shell
  216. {
  217. const rt_kservice_interface_t i_kservice;
  218. const rt_thread_interface_t i_thread;
  219. const rt_sem_interface_t i_sem;
  220. const rt_mutex_interface_t i_mutex;
  221. const rt_event_interface_t i_event;
  222. const rt_mb_interface_t i_mb;
  223. const rt_mq_interface_t i_mq;
  224. const rt_mp_interface_t i_mp;
  225. const rt_heap_interface_t i_heap;
  226. const rt_device_interface_t i_device;
  227. const rt_timer_interface_t i_timer;
  228. };
  229. typedef struct rt_shell* rt_shell_t;