1 /*
2 * SPDX-FileCopyrightText: 2018-2022 Espressif Systems (Shanghai) CO LTD
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include "esp_event.h"
8 #include "esp_event_internal.h"
9 #include "esp_task.h"
10
11 /* ------------------------- Static Variables ------------------------------- */
12
13 static esp_event_loop_handle_t s_default_loop = NULL;
14
15 /* ---------------------------- Public API ---------------------------------- */
16
esp_event_handler_register(esp_event_base_t event_base,int32_t event_id,esp_event_handler_t event_handler,void * event_handler_arg)17 esp_err_t esp_event_handler_register(esp_event_base_t event_base, int32_t event_id,
18 esp_event_handler_t event_handler, void* event_handler_arg)
19 {
20 if (s_default_loop == NULL) {
21 return ESP_ERR_INVALID_STATE;
22 }
23
24 return esp_event_handler_register_with(s_default_loop, event_base, event_id,
25 event_handler, event_handler_arg);
26 }
27
esp_event_handler_instance_register(esp_event_base_t event_base,int32_t event_id,esp_event_handler_t event_handler,void * event_handler_arg,esp_event_handler_instance_t * context)28 esp_err_t esp_event_handler_instance_register(esp_event_base_t event_base,
29 int32_t event_id,
30 esp_event_handler_t event_handler,
31 void *event_handler_arg,
32 esp_event_handler_instance_t *context)
33 {
34 if (s_default_loop == NULL) {
35 return ESP_ERR_INVALID_STATE;
36 }
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_event_handler_unregister(esp_event_base_t event_base,int32_t event_id,esp_event_handler_t event_handler)46 esp_err_t esp_event_handler_unregister(esp_event_base_t event_base, int32_t event_id,
47 esp_event_handler_t event_handler)
48 {
49 if (s_default_loop == NULL) {
50 return ESP_ERR_INVALID_STATE;
51 }
52
53 return esp_event_handler_unregister_with(s_default_loop, event_base, event_id,
54 event_handler);
55 }
56
esp_event_handler_instance_unregister(esp_event_base_t event_base,int32_t event_id,esp_event_handler_instance_t context)57 esp_err_t esp_event_handler_instance_unregister(esp_event_base_t event_base,
58 int32_t event_id,
59 esp_event_handler_instance_t context)
60 {
61 if (s_default_loop == NULL) {
62 return ESP_ERR_INVALID_STATE;
63 }
64
65 return esp_event_handler_instance_unregister_with(s_default_loop, event_base, event_id, context);
66 }
67
esp_event_post(esp_event_base_t event_base,int32_t event_id,const void * event_data,size_t event_data_size,TickType_t ticks_to_wait)68 esp_err_t esp_event_post(esp_event_base_t event_base, int32_t event_id,
69 const void* event_data, size_t event_data_size, TickType_t ticks_to_wait)
70 {
71 if (s_default_loop == NULL) {
72 return ESP_ERR_INVALID_STATE;
73 }
74
75 return esp_event_post_to(s_default_loop, event_base, event_id,
76 event_data, event_data_size, ticks_to_wait);
77 }
78
79
80 #if CONFIG_ESP_EVENT_POST_FROM_ISR
esp_event_isr_post(esp_event_base_t event_base,int32_t event_id,const void * event_data,size_t event_data_size,BaseType_t * task_unblocked)81 esp_err_t esp_event_isr_post(esp_event_base_t event_base, int32_t event_id,
82 const void* event_data, size_t event_data_size, BaseType_t* task_unblocked)
83 {
84 if (s_default_loop == NULL) {
85 return ESP_ERR_INVALID_STATE;
86 }
87
88 return esp_event_isr_post_to(s_default_loop, event_base, event_id,
89 event_data, event_data_size, task_unblocked);
90 }
91 #endif
92
93
esp_event_loop_create_default(void)94 esp_err_t esp_event_loop_create_default(void)
95 {
96 if (s_default_loop) {
97 return ESP_ERR_INVALID_STATE;
98 }
99
100 esp_event_loop_args_t loop_args = {
101 .queue_size = CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE,
102 .task_name = "sys_evt",
103 .task_stack_size = ESP_TASKD_EVENT_STACK,
104 .task_priority = ESP_TASKD_EVENT_PRIO,
105 .task_core_id = 0
106 };
107
108 esp_err_t err;
109
110 err = esp_event_loop_create(&loop_args, &s_default_loop);
111 if (err != ESP_OK) {
112 return err;
113 }
114
115 return ESP_OK;
116 }
117
esp_event_loop_delete_default(void)118 esp_err_t esp_event_loop_delete_default(void)
119 {
120 if (!s_default_loop) {
121 return ESP_ERR_INVALID_STATE;
122 }
123
124 esp_err_t err;
125
126 err = esp_event_loop_delete(s_default_loop);
127
128 if (err != ESP_OK) {
129 return err;
130 }
131
132 s_default_loop = NULL;
133
134 return ESP_OK;
135 }
136