30
30
#endif
31
31
32
32
#include " esp_zigbee_core.h"
33
- #include " nvs_flash.h"
34
33
#include " freertos/FreeRTOS.h"
35
34
#include " freertos/task.h"
36
35
#include " ha/esp_zigbee_ha_standard.h"
@@ -237,48 +236,6 @@ static void switch_gpios_intr_enabled(bool enabled)
237
236
}
238
237
}
239
238
240
- // Tasks for checking the button event and debounce the switch state
241
- static void switch_button_detected (void *arg)
242
- {
243
- uint8_t pin = 0 ;
244
- switch_func_pair_t button_func_pair;
245
- static switch_state_t switch_state = SWITCH_IDLE;
246
- bool evt_flag = false ;
247
-
248
- for (;;) {
249
- /* check if there is any queue received, if yes read out the button_func_pair */
250
- if (xQueueReceive (gpio_evt_queue, &button_func_pair, portMAX_DELAY)) {
251
- pin = button_func_pair.pin ;
252
- switch_gpios_intr_enabled (false );
253
- evt_flag = true ;
254
- }
255
- while (evt_flag) {
256
- bool value = digitalRead (pin);
257
- switch (switch_state) {
258
- case SWITCH_IDLE:
259
- switch_state = (value == LOW) ? SWITCH_PRESS_DETECTED : SWITCH_IDLE;
260
- break ;
261
- case SWITCH_PRESS_DETECTED:
262
- switch_state = (value == LOW) ? SWITCH_PRESS_DETECTED : SWITCH_RELEASE_DETECTED;
263
- break ;
264
- case SWITCH_RELEASE_DETECTED:
265
- switch_state = SWITCH_IDLE;
266
- /* callback to button_handler */
267
- (*esp_zb_buttons_handler)(&button_func_pair);
268
- break ;
269
- default :
270
- break ;
271
- }
272
- if (switch_state == SWITCH_IDLE) {
273
- switch_gpios_intr_enabled (true );
274
- evt_flag = false ;
275
- break ;
276
- }
277
- vTaskDelay (10 / portTICK_PERIOD_MS);
278
- }
279
- }
280
- }
281
-
282
239
/* ******************** Arduino functions **************************/
283
240
void setup () {
284
241
// Init Zigbee
@@ -287,10 +244,8 @@ void setup() {
287
244
.host_config = ESP_ZB_DEFAULT_HOST_CONFIG (),
288
245
};
289
246
290
- ESP_ERROR_CHECK (nvs_flash_init ());
291
247
ESP_ERROR_CHECK (esp_zb_platform_config (&config));
292
248
293
- // switch_driver_init(button_func_pair, PAIR_SIZE(button_func_pair), esp_zb_buttons_handler);
294
249
// Init button switch
295
250
for (int i = 0 ; i < PAIR_SIZE (button_func_pair); i++) {
296
251
pinMode (button_func_pair[i].pin , INPUT_PULLUP);
@@ -305,12 +260,43 @@ void setup() {
305
260
306
261
// Start Zigbee task
307
262
xTaskCreate (esp_zb_task, " Zigbee_main" , 4096 , NULL , 5 , NULL );
308
-
309
- // Start GPIO task
310
- xTaskCreate (switch_button_detected, " button_detected" , 2048 , NULL , 10 , NULL );
311
-
312
263
}
313
264
314
265
void loop () {
315
- // empty, zigbee running in separate task
266
+ // Handle button switch in loop()
267
+ uint8_t pin = 0 ;
268
+ switch_func_pair_t button_func_pair;
269
+ static switch_state_t switch_state = SWITCH_IDLE;
270
+ bool evt_flag = false ;
271
+
272
+ /* check if there is any queue received, if yes read out the button_func_pair */
273
+ if (xQueueReceive (gpio_evt_queue, &button_func_pair, portMAX_DELAY)) {
274
+ pin = button_func_pair.pin ;
275
+ switch_gpios_intr_enabled (false );
276
+ evt_flag = true ;
277
+ }
278
+ while (evt_flag) {
279
+ bool value = digitalRead (pin);
280
+ switch (switch_state) {
281
+ case SWITCH_IDLE:
282
+ switch_state = (value == LOW) ? SWITCH_PRESS_DETECTED : SWITCH_IDLE;
283
+ break ;
284
+ case SWITCH_PRESS_DETECTED:
285
+ switch_state = (value == LOW) ? SWITCH_PRESS_DETECTED : SWITCH_RELEASE_DETECTED;
286
+ break ;
287
+ case SWITCH_RELEASE_DETECTED:
288
+ switch_state = SWITCH_IDLE;
289
+ /* callback to button_handler */
290
+ (*esp_zb_buttons_handler)(&button_func_pair);
291
+ break ;
292
+ default :
293
+ break ;
294
+ }
295
+ if (switch_state == SWITCH_IDLE) {
296
+ switch_gpios_intr_enabled (true );
297
+ evt_flag = false ;
298
+ break ;
299
+ }
300
+ vTaskDelay (10 / portTICK_PERIOD_MS);
301
+ }
316
302
}
0 commit comments