--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main/task_dcf.c Fri Oct 20 15:57:56 2023 +0200 @@ -0,0 +1,72 @@ +/** + * @file task_dcf.c + * @brief DCF77 task. + */ + + +#include "dcf77tx.h" + + +static const char *TAG = "task_dcf"; + + +SemaphoreHandle_t xSemaphoreDCF = NULL; ///< Semaphore DCF task. +EventGroupHandle_t xEventGroupDCF; ///< Events DCF task. +DCF_State *dcf_state = NULL; ///< Public state for other tasks. + +#define LED1 CONFIG_LED1_PIN +#define LED2 CONFIG_LED2_PIN + + +const int TASK_DCF_REQUEST_START = BIT0; +const int TASK_DCF_REQUEST_STOP = BIT1; + +const int TASK_DCF_RUN = BIT2; + + +bool ready_DCF(void) +{ + return dcf_state->DCF_running; +} + + + +void request_DCF(bool run) +{ +} + + + +void task_DCF(void *pvParameters) +{ + ESP_LOGI(TAG, "Starting DCF77"); + + xEventGroupDCF = xEventGroupCreate(); + xSemaphoreDCF = xSemaphoreCreateMutex(); + dcf_state = malloc(sizeof(DCF_State)); + memset(dcf_state, 0x00, sizeof(DCF_State)); + + gpio_reset_pin(LED1); + gpio_reset_pin(LED2); + gpio_set_direction(LED1, GPIO_MODE_OUTPUT); + gpio_set_direction(LED2, GPIO_MODE_OUTPUT); + + xEventGroupClearBits(xEventGroupDCF, TASK_DCF_RUN); + EventBits_t uxBits; + + for (;;) { + uxBits = xEventGroupWaitBits(xEventGroupDCF, TASK_DCF_REQUEST_START | TASK_DCF_REQUEST_STOP, pdFALSE, pdFALSE, portMAX_DELAY ); + + if (uxBits & TASK_DCF_REQUEST_START) { + if (dcf_state->DCF_running) { + /* Already running */ + xEventGroupClearBits(xEventGroupDCF, TASK_DCF_REQUEST_START); + } + + } else if (uxBits & TASK_DCF_REQUEST_STOP) { + + } + } /* for(;;) */ +} + +