improve stability
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user