#include "Blinky_LED.h" static const char *LOG_TAG = "blinky_led"; static bool bLEDisOn = true; xQueueHandle queueBlinkyLEDPackets; esp_err_t errBlinkyLEDInitialize() { esp_err_t err = ESP_OK; BaseType_t xReturned; vGPIOInitialize(); queueBlinkyLEDPackets = xQueueCreate(5, sizeof (BLINKY_PACKET_t)); if (queueBlinkyLEDPackets == 0) // Queue not created { ESP_LOGE(LOG_TAG, "Unable to create Queue for Application Packets"); err = ESP_FAIL; } if(err == ESP_OK) { xReturned = xTaskCreate(vTaskReadUserInput, "vTaskReadUserInput", 2048, NULL, 5, NULL); if(xReturned != pdPASS) { err = ESP_FAIL; } } if(err == ESP_OK) { xReturned = xTaskCreate(vTaskReceiveData, "vTaskReceiveData", 2048, NULL, 5, NULL); if(xReturned != pdPASS) { err = ESP_FAIL; } } return err; } void vGPIOInitialize() { gpio_config_t gpioConf; //LED as Output gpio_reset_pin(GPIO_LED); gpio_set_direction(GPIO_LED, GPIO_MODE_OUTPUT); //BTN as Input gpioConf.intr_type = GPIO_INTR_DISABLE; gpioConf.mode = GPIO_MODE_INPUT; gpioConf.pin_bit_mask = GPIO_INPUT_PIN_SEL; gpioConf.pull_down_en = 0; gpioConf.pull_up_en = 1; gpio_config(&gpioConf); } void vTaskReadUserInput(void *arg) { BLINKY_PACKET_t bTmpStateLED = LED_OFF; while(true) { if(gpio_get_level(GPIO_BOOT_BTN) == 0) { if(bLEDisOn == false) { ESP_LOGI(LOG_TAG,"switch ON"); bTmpStateLED = LED_ON; } else { ESP_LOGI(LOG_TAG,"switch OFF"); bTmpStateLED = LED_OFF; } if (xQueueSend(queueBlinkyLEDPackets, &bTmpStateLED, portMAX_DELAY) != pdPASS) { ESP_LOGE(LOG_TAG, "Unable to push packet into Queue"); } vTaskDelay(200 / portTICK_PERIOD_MS); } vTaskDelay(50 / portTICK_PERIOD_MS); } } void vTaskReceiveData(void *arg) { BLINKY_PACKET_t bTmpStateLED = LED_OFF; while (1) { if (xQueueReceive(queueBlinkyLEDPackets, &bTmpStateLED, portMAX_DELAY) != pdTRUE) { ESP_LOGE(LOG_TAG, "Unable to receive packet from Queue"); } else { //Successfully RECEIVED the packet switch (bTmpStateLED) { case LED_ON: bLEDisOn = true; gpio_set_level(GPIO_LED, 1); //switch on ESP_LOGI(LOG_TAG,"rec ON"); break; case LED_OFF: bLEDisOn = false; gpio_set_level(GPIO_LED, 0); //switch off ESP_LOGI(LOG_TAG,"rec OFF"); break; default: bLEDisOn = false; gpio_set_level(GPIO_LED, 0); //switch off break; } } vTaskDelay(200 / portTICK_PERIOD_MS); } }