task_msg_bus.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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_dump_release_hook
  56. {
  57. enum task_msg_name msg_name;
  58. void *(*dump)(void *args);
  59. void (*release)(void *args);
  60. };
  61. struct task_msg_loop
  62. {
  63. enum task_msg_name msg_name;
  64. void *msg_obj;
  65. rt_uint32_t msg_size;
  66. rt_timer_t timer;
  67. };
  68. typedef struct task_msg_loop *task_msg_loop_t;
  69. rt_err_t task_msg_subscribe(enum task_msg_name msg_name, void (*callback)(task_msg_args_t msg_args));
  70. rt_err_t task_msg_unsubscribe(enum task_msg_name msg_name, void (*callback)(task_msg_args_t msg_args));
  71. rt_err_t task_msg_publish(enum task_msg_name msg_name, const char *msg_text);
  72. rt_err_t task_msg_publish_obj(enum task_msg_name msg_name, void *msg_obj, rt_size_t msg_size);
  73. rt_err_t task_msg_delay_publish(rt_uint32_t delay_ms, enum task_msg_name msg_name, const char *msg_text);
  74. rt_err_t task_msg_delay_publish_obj(rt_uint32_t delay_ms, enum task_msg_name msg_name, void *msg_obj,
  75. rt_size_t msg_size);
  76. task_msg_loop_t task_msg_loop_create(void);
  77. rt_err_t task_msg_loop_delete(task_msg_loop_t msg_loop);
  78. rt_err_t task_msg_loop_start(task_msg_loop_t msg_loop, rt_uint32_t delay_ms, enum task_msg_name msg_name, void *msg_obj,
  79. rt_size_t msg_size);
  80. rt_err_t task_msg_loop_stop(task_msg_loop_t msg_loop);
  81. int task_msg_subscriber_create(enum task_msg_name msg_name);
  82. int task_msg_subscriber_create2(const enum task_msg_name *msg_name_list, rt_uint8_t msg_name_list_len);
  83. void task_msg_subscriber_delete(int subscriber_id);
  84. rt_err_t task_msg_wait_until(int subscriber_id, rt_int32_t timeout_ms, struct task_msg_args **out_args);
  85. void task_msg_release(task_msg_args_t args);
  86. #endif /* TASK_MSG_BUS_H_ */