improve stability

This commit is contained in:
2024-12-09 22:09:34 +01:00
parent 88aef600c8
commit 0fb6e34958
5 changed files with 119 additions and 54 deletions

View File

@ -5,9 +5,11 @@
#include "outputs.h"
static const char *TAG = "smart-oil-heater-control-system-outputs";
const uint8_t uCirculationPumpGpioPin = 27U;
const uint8_t uBurnerGpioPin = 14U;
static SemaphoreHandle_t xMutexAccessOutputs = NULL;
static eOutput sCirculationPumpState;
static eOutput sBurnerState;
@ -30,6 +32,13 @@ void initOutputs(void)
};
gpio_config(&ioConfCirculationPump);
gpio_config(&ioConfBurner);
xMutexAccessOutputs = xSemaphoreCreateBinary();
if (xMutexAccessOutputs == NULL)
{
ESP_LOGE(TAG, "Unable to create mutex");
}
xSemaphoreGive(xMutexAccessOutputs);
}
eOutput getCirculationPumpState(void)
@ -39,35 +48,49 @@ eOutput getCirculationPumpState(void)
void setCirculationPumpState(eOutput in)
{
sCirculationPumpState = in;
switch (sCirculationPumpState)
if (xSemaphoreTake(xMutexAccessOutputs, portMAX_DELAY) == pdTRUE)
{
case ENABLED:
gpio_set_level(uCirculationPumpGpioPin, 1U); // Switch on Circulation Pump
break;
case DISABLED:
gpio_set_level(uCirculationPumpGpioPin, 0U); // Switch off Circulation Pump
default:
break;
sCirculationPumpState = in;
switch (sCirculationPumpState)
{
case ENABLED:
gpio_set_level(uCirculationPumpGpioPin, 1U); // Switch on Circulation Pump
break;
case DISABLED:
gpio_set_level(uCirculationPumpGpioPin, 0U); // Switch off Circulation Pump
default:
break;
}
xSemaphoreGive(xMutexAccessOutputs);
}
}
eOutput getBurnerState(void)
{
return sBurnerState;
eOutput ret = ENABLED;
if (xSemaphoreTake(xMutexAccessOutputs, portMAX_DELAY) == pdTRUE)
{
ret = sBurnerState;
xSemaphoreGive(xMutexAccessOutputs);
}
return ret;
}
void setBurnerState(eOutput in)
{
sBurnerState = in;
switch (sBurnerState)
if (xSemaphoreTake(xMutexAccessOutputs, portMAX_DELAY) == pdTRUE)
{
case ENABLED:
gpio_set_level(uBurnerGpioPin, 0U); // Switch on Burner
break;
case DISABLED:
gpio_set_level(uBurnerGpioPin, 1U); // Switch off Burner
default:
break;
sBurnerState = in;
switch (sBurnerState)
{
case ENABLED:
gpio_set_level(uBurnerGpioPin, 0U); // Switch on Burner
break;
case DISABLED:
gpio_set_level(uBurnerGpioPin, 1U); // Switch off Burner
default:
break;
}
xSemaphoreGive(xMutexAccessOutputs);
}
}