esp_event_api.hpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #ifndef ESP_EVENT_API_HPP_
  2. #define ESP_EVENT_API_HPP_
  3. #include "esp_event.h"
  4. namespace idf {
  5. namespace event {
  6. /**
  7. * Abstract interface for direct calls to esp_event C-API.
  8. * This is generally not intended to be used directly.
  9. * It's main purpose is to provide ESPEventLoop a unified API not dependent on whether the default event loop or a
  10. * custom event loop is used.
  11. * The interface resembles the C-API, have a look there for further documentation.
  12. */
  13. class ESPEventAPI {
  14. public:
  15. virtual ~ESPEventAPI() { }
  16. virtual esp_err_t handler_register(esp_event_base_t event_base,
  17. int32_t event_id,
  18. esp_event_handler_t event_handler,
  19. void* event_handler_arg,
  20. esp_event_handler_instance_t *instance) = 0;
  21. virtual esp_err_t handler_unregister(esp_event_base_t event_base,
  22. int32_t event_id,
  23. esp_event_handler_instance_t instance) = 0;
  24. virtual esp_err_t post(esp_event_base_t event_base,
  25. int32_t event_id,
  26. void* event_data,
  27. size_t event_data_size,
  28. TickType_t ticks_to_wait) = 0;
  29. };
  30. /**
  31. * @brief API version with default event loop.
  32. *
  33. * It will direct calls to the default event loop API.
  34. */
  35. class ESPEventAPIDefault : public ESPEventAPI {
  36. public:
  37. ESPEventAPIDefault();
  38. virtual ~ESPEventAPIDefault();
  39. /**
  40. * Copying would lead to deletion of event loop through destructor.
  41. */
  42. ESPEventAPIDefault(const ESPEventAPIDefault &o) = delete;
  43. ESPEventAPIDefault& operator=(const ESPEventAPIDefault&) = delete;
  44. esp_err_t handler_register(esp_event_base_t event_base,
  45. int32_t event_id,
  46. esp_event_handler_t event_handler,
  47. void* event_handler_arg,
  48. esp_event_handler_instance_t *instance) override;
  49. esp_err_t handler_unregister(esp_event_base_t event_base,
  50. int32_t event_id,
  51. esp_event_handler_instance_t instance) override;
  52. esp_err_t post(esp_event_base_t event_base,
  53. int32_t event_id,
  54. void* event_data,
  55. size_t event_data_size,
  56. TickType_t ticks_to_wait) override;
  57. };
  58. /**
  59. * @brief API version with custom event loop.
  60. *
  61. * It will direct calls to the custom event loop API.
  62. * The loop parameters are given in the constructor the same way it's done in esp_event_loop_create() in event.h.
  63. * This class also provides a run method in case the custom event loop was created without its own task.
  64. */
  65. class ESPEventAPICustom : public ESPEventAPI {
  66. public:
  67. /**
  68. * @param event_loop_args the event loop arguments, refer to esp_event_loop_create() in event.h.
  69. */
  70. ESPEventAPICustom(const esp_event_loop_args_t &event_loop_args);
  71. virtual ~ESPEventAPICustom();
  72. /**
  73. * Copying would lead to deletion of event loop through destructor.
  74. */
  75. ESPEventAPICustom(const ESPEventAPICustom &o) = delete;
  76. ESPEventAPICustom& operator=(const ESPEventAPICustom&) = delete;
  77. esp_err_t handler_register(esp_event_base_t event_base,
  78. int32_t event_id,
  79. esp_event_handler_t event_handler,
  80. void* event_handler_arg,
  81. esp_event_handler_instance_t *instance) override;
  82. esp_err_t handler_unregister(esp_event_base_t event_base,
  83. int32_t event_id,
  84. esp_event_handler_instance_t instance) override;
  85. esp_err_t post(esp_event_base_t event_base,
  86. int32_t event_id,
  87. void* event_data,
  88. size_t event_data_size,
  89. TickType_t ticks_to_wait) override;
  90. /**
  91. * Run the event loop. The behavior is the same as esp_event_loop_run in esp_event.h.
  92. */
  93. esp_err_t run(TickType_t ticks_to_run);
  94. private:
  95. esp_event_loop_handle_t event_loop;
  96. };
  97. } // event
  98. } // idf
  99. #endif // ESP_EVENT_API_HPP_