ESP32-Mesh-OTA/main/Blinky_LED.c

124 lines
3.0 KiB
C
Raw Normal View History

2021-01-16 00:23:02 +01:00
#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);
}
}