task_msg_bus.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. rt_err_t task_msg_bus_init(rt_uint32_t stack_size, rt_uint8_t priority, rt_uint32_t tick);
  61. rt_err_t task_msg_subscribe(enum task_msg_name msg_name, void(*callback)(task_msg_args_t msg_args));
  62. rt_err_t task_msg_unsubscribe(enum task_msg_name msg_name, void(*callback)(task_msg_args_t msg_args));
  63. rt_err_t task_msg_publish(enum task_msg_name msg_name, const char *msg_text);
  64. rt_err_t task_msg_publish_obj(enum task_msg_name msg_name, void *msg_obj, rt_size_t msg_size);
  65. int task_msg_subscriber_create(enum task_msg_name msg_name);
  66. int task_msg_subscriber_create2(const enum task_msg_name *msg_name_list, rt_uint8_t msg_name_list_len);
  67. void task_msg_subscriber_delete(int subscriber_id);
  68. rt_err_t task_msg_wait_until(int subscriber_id, rt_int32_t timeout_ms, struct task_msg_args **out_args);
  69. void task_msg_release(task_msg_args_t args);
  70. #endif /* TASK_MSG_BUS_H_ */