task_msg_bus.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. rt_uint32_t msg_size;
  20. };
  21. typedef struct task_msg_args *task_msg_args_t;
  22. struct task_msg_ref_node
  23. {
  24. task_msg_args_t args;
  25. int ref_count;
  26. rt_slist_t slist;
  27. };
  28. typedef struct task_msg_ref_node *task_msg_ref_node_t;
  29. struct task_msg_args_node
  30. {
  31. task_msg_args_t args;
  32. rt_slist_t slist;
  33. };
  34. typedef struct task_msg_args_node *task_msg_args_node_t;
  35. struct task_msg_callback_node
  36. {
  37. void (*callback)(const task_msg_args_t msg_args);
  38. rt_slist_t slist;
  39. };
  40. typedef struct task_msg_callback_node *task_msg_callback_node_t;
  41. struct task_msg_subscriber_node
  42. {
  43. int subscriber_id;
  44. enum task_msg_name msg_name;
  45. rt_sem_t sem;
  46. rt_slist_t slist;
  47. };
  48. typedef struct task_msg_subscriber_node *task_msg_subscriber_node_t;
  49. struct task_msg_wait_node
  50. {
  51. task_msg_subscriber_node_t subscriber;
  52. task_msg_args_t args;
  53. rt_slist_t slist;
  54. };
  55. typedef struct task_msg_wait_node *task_msg_wait_node_t;
  56. struct task_msg_dup_release_hook
  57. {
  58. enum task_msg_name msg_name;
  59. void *(*dup)(void *args);
  60. void (*release)(void *args);
  61. };
  62. struct task_msg_timer_node
  63. {
  64. task_msg_args_t args;
  65. struct rt_timer timer;
  66. rt_uint32_t repeat;
  67. rt_uint32_t do_count;
  68. rt_bool_t stop;
  69. rt_tick_t interval;
  70. rt_slist_t slist;
  71. };
  72. typedef struct task_msg_timer_node *task_msg_timer_node_t;
  73. int task_msg_bus_init(void);
  74. rt_err_t task_msg_subscribe(enum task_msg_name msg_name, void (*callback)(task_msg_args_t msg_args));
  75. rt_err_t task_msg_unsubscribe(enum task_msg_name msg_name, void (*callback)(task_msg_args_t msg_args));
  76. rt_err_t task_msg_publish(enum task_msg_name msg_name, const char *msg_text);
  77. rt_err_t task_msg_publish_obj(enum task_msg_name msg_name, void *msg_obj, rt_size_t msg_size);
  78. rt_err_t task_msg_scheduled_append(enum task_msg_name msg_name, void *msg_obj, rt_size_t msg_size);
  79. rt_err_t task_msg_scheduled_start(enum task_msg_name msg_name, int delay_ms, rt_uint32_t repeat, int interval_ms);
  80. rt_err_t task_msg_scheduled_restart(enum task_msg_name msg_name);
  81. rt_err_t task_msg_scheduled_stop(enum task_msg_name msg_name);
  82. void task_msg_scheduled_delete(enum task_msg_name msg_name);
  83. int task_msg_subscriber_create(enum task_msg_name msg_name);
  84. int task_msg_subscriber_create2(const enum task_msg_name *msg_name_list, rt_uint8_t msg_name_list_len);
  85. void task_msg_subscriber_delete(int subscriber_id);
  86. rt_err_t task_msg_wait_until(int subscriber_id, rt_int32_t timeout_ms, struct task_msg_args **out_args);
  87. void task_msg_release(task_msg_args_t args);
  88. #endif /* TASK_MSG_BUS_H_ */