default_event_loop.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. // Copyright 2018 Espressif Systems (Shanghai) PTE LTD
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #include "esp_event.h"
  15. #include "esp_event_internal.h"
  16. #include "esp_task.h"
  17. /* ------------------------- Static Variables ------------------------------- */
  18. static esp_event_loop_handle_t s_default_loop = NULL;
  19. /* ---------------------------- Public API ---------------------------------- */
  20. esp_err_t esp_event_handler_register(esp_event_base_t event_base, int32_t event_id,
  21. esp_event_handler_t event_handler, void* event_handler_arg)
  22. {
  23. if (s_default_loop == NULL) {
  24. return ESP_ERR_INVALID_STATE;
  25. }
  26. return esp_event_handler_register_with(s_default_loop, event_base, event_id,
  27. event_handler, event_handler_arg);
  28. }
  29. esp_err_t esp_event_handler_instance_register(esp_event_base_t event_base,
  30. int32_t event_id,
  31. esp_event_handler_t event_handler,
  32. void *event_handler_arg,
  33. esp_event_handler_instance_t *context)
  34. {
  35. if (s_default_loop == NULL) {
  36. return ESP_ERR_INVALID_STATE;
  37. }
  38. return esp_event_handler_instance_register_with(s_default_loop,
  39. event_base,
  40. event_id,
  41. event_handler,
  42. event_handler_arg,
  43. context);
  44. }
  45. esp_err_t esp_event_handler_unregister(esp_event_base_t event_base, int32_t event_id,
  46. esp_event_handler_t event_handler)
  47. {
  48. if (s_default_loop == NULL) {
  49. return ESP_ERR_INVALID_STATE;
  50. }
  51. return esp_event_handler_unregister_with(s_default_loop, event_base, event_id,
  52. event_handler);
  53. }
  54. esp_err_t esp_event_handler_instance_unregister(esp_event_base_t event_base,
  55. int32_t event_id,
  56. esp_event_handler_instance_t context)
  57. {
  58. if (s_default_loop == NULL) {
  59. return ESP_ERR_INVALID_STATE;
  60. }
  61. return esp_event_handler_instance_unregister_with(s_default_loop, event_base, event_id, context);
  62. }
  63. esp_err_t esp_event_post(esp_event_base_t event_base, int32_t event_id,
  64. void* event_data, size_t event_data_size, TickType_t ticks_to_wait)
  65. {
  66. if (s_default_loop == NULL) {
  67. return ESP_ERR_INVALID_STATE;
  68. }
  69. return esp_event_post_to(s_default_loop, event_base, event_id,
  70. event_data, event_data_size, ticks_to_wait);
  71. }
  72. #if CONFIG_ESP_EVENT_POST_FROM_ISR
  73. esp_err_t esp_event_isr_post(esp_event_base_t event_base, int32_t event_id,
  74. void* event_data, size_t event_data_size, BaseType_t* task_unblocked)
  75. {
  76. if (s_default_loop == NULL) {
  77. return ESP_ERR_INVALID_STATE;
  78. }
  79. return esp_event_isr_post_to(s_default_loop, event_base, event_id,
  80. event_data, event_data_size, task_unblocked);
  81. }
  82. #endif
  83. esp_err_t esp_event_loop_create_default(void)
  84. {
  85. if (s_default_loop) {
  86. return ESP_ERR_INVALID_STATE;
  87. }
  88. esp_event_loop_args_t loop_args = {
  89. .queue_size = CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE,
  90. .task_name = "sys_evt",
  91. .task_stack_size = ESP_TASKD_EVENT_STACK,
  92. .task_priority = ESP_TASKD_EVENT_PRIO,
  93. .task_core_id = 0
  94. };
  95. esp_err_t err;
  96. err = esp_event_loop_create(&loop_args, &s_default_loop);
  97. if (err != ESP_OK) {
  98. return err;
  99. }
  100. return ESP_OK;
  101. }
  102. esp_err_t esp_event_loop_delete_default(void)
  103. {
  104. if (!s_default_loop) {
  105. return ESP_ERR_INVALID_STATE;
  106. }
  107. esp_err_t err;
  108. err = esp_event_loop_delete(s_default_loop);
  109. if (err != ESP_OK) {
  110. return err;
  111. }
  112. s_default_loop = NULL;
  113. return ESP_OK;
  114. }
  115. /* Include the code to forward legacy system_event_t events to the this default
  116. * event loop.
  117. */
  118. #include "event_send_compat.inc"