task_msg_bus.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * Copyright (c) 2006-2020, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2020-03-22 sly_ant the first version
  9. */
  10. #ifndef TASK_MSG_BUS_H_
  11. #define TASK_MSG_BUS_H_
  12. #include <rtthread.h>
  13. #include <rtdevice.h>
  14. #include "task_msg_bus_def.h"
  15. struct task_msg_args
  16. {
  17. enum task_msg_name msg_name;
  18. void *msg_obj;
  19. };
  20. typedef struct task_msg_args *task_msg_args_t;
  21. struct task_msg_ref_node
  22. {
  23. task_msg_args_t args;
  24. int ref_count;
  25. rt_slist_t slist;
  26. };
  27. typedef struct task_msg_ref_node *task_msg_ref_node_t;
  28. struct task_msg_args_node
  29. {
  30. task_msg_args_t args;
  31. rt_slist_t slist;
  32. };
  33. typedef struct task_msg_args_node *task_msg_args_node_t;
  34. struct task_msg_callback_node
  35. {
  36. void (*callback)(const task_msg_args_t msg_args);
  37. rt_slist_t slist;
  38. };
  39. typedef struct task_msg_callback_node *task_msg_callback_node_t;
  40. struct task_msg_subscriber_node
  41. {
  42. int subscriber_id;
  43. enum task_msg_name msg_name;
  44. rt_sem_t sem;
  45. rt_slist_t slist;
  46. };
  47. typedef struct task_msg_subscriber_node *task_msg_subscriber_node_t;
  48. struct task_msg_wait_node
  49. {
  50. task_msg_subscriber_node_t subscriber;
  51. task_msg_args_t args;
  52. rt_slist_t slist;
  53. };
  54. typedef struct task_msg_wait_node *task_msg_wait_node_t;
  55. struct task_msg_release_hook
  56. {
  57. enum task_msg_name msg_name;
  58. void (*hook)(void *args);
  59. };
  60. struct task_msg_loop
  61. {
  62. enum task_msg_name msg_name;
  63. void *msg_obj;
  64. rt_uint32_t msg_size;
  65. rt_timer_t timer;
  66. };
  67. typedef struct task_msg_loop *task_msg_loop_t;
  68. rt_err_t task_msg_subscribe(enum task_msg_name msg_name, void (*callback)(task_msg_args_t msg_args));
  69. rt_err_t task_msg_unsubscribe(enum task_msg_name msg_name, void (*callback)(task_msg_args_t msg_args));
  70. rt_err_t task_msg_publish(enum task_msg_name msg_name, const char *msg_text);
  71. rt_err_t task_msg_publish_obj(enum task_msg_name msg_name, void *msg_obj, rt_size_t msg_size);
  72. rt_err_t task_msg_delay_publish(rt_uint32_t delay_ms, enum task_msg_name msg_name, const char *msg_text);
  73. rt_err_t task_msg_delay_publish_obj(rt_uint32_t delay_ms, enum task_msg_name msg_name, void *msg_obj,
  74. rt_size_t msg_size);
  75. task_msg_loop_t task_msg_loop_create(rt_uint32_t delay_ms, enum task_msg_name msg_name, void *msg_obj,
  76. rt_size_t msg_size);
  77. rt_err_t task_msg_loop_delete(task_msg_loop_t msg_timing);
  78. rt_err_t task_msg_loop_start(task_msg_loop_t msg_timing);
  79. rt_err_t task_msg_loop_stop(task_msg_loop_t msg_timing);
  80. int task_msg_subscriber_create(enum task_msg_name msg_name);
  81. int task_msg_subscriber_create2(const enum task_msg_name *msg_name_list, rt_uint8_t msg_name_list_len);
  82. void task_msg_subscriber_delete(int subscriber_id);
  83. rt_err_t task_msg_wait_until(int subscriber_id, rt_int32_t timeout_ms, struct task_msg_args **out_args);
  84. void task_msg_release(task_msg_args_t args);
  85. #endif /* TASK_MSG_BUS_H_ */