Load prefs in sensor from queue
This commit is contained in:
+35
-8
@@ -59,6 +59,9 @@ QueueHandle_t stateForWebserverQueue = xQueueCreate(2, sizeof(CurrentState));
|
||||
// Queue for sending preferences from main to webserver
|
||||
QueueHandle_t prefsForWebserverQueue = xQueueCreate(2, sizeof(DataMessage));
|
||||
|
||||
// Queue for sending preferences from main to sensor task
|
||||
QueueHandle_t prefsForSensorQueue = xQueueCreate(2, sizeof(DataMessage));
|
||||
|
||||
void setup()
|
||||
{
|
||||
Logger.registerSerial(MYLOG, ELOG_LEVEL_DEBUG, "Serial");
|
||||
@@ -66,8 +69,8 @@ void setup()
|
||||
prefs.begin("waterlevel", false);
|
||||
Serial.begin(115200);
|
||||
|
||||
// Read initial preferences and send to webserver
|
||||
if (prefsForWebserverQueue != NULL) {
|
||||
// Read initial preferences and send to webserver and sensor
|
||||
if (prefsForWebserverQueue != NULL || prefsForSensorQueue != NULL) {
|
||||
DataMessage prefsMessage;
|
||||
prefsMessage.type = DATA_TYPE_PREFERENCES;
|
||||
prefsMessage.data.preferencesData.level_sensor_range = prefs.getFloat(level_sensor_range_key, 200);
|
||||
@@ -79,10 +82,22 @@ void setup()
|
||||
strncpy(prefsMessage.data.preferencesData.wifi_password, prefs.getString(wifi_password_key, "").c_str(), sizeof(prefsMessage.data.preferencesData.wifi_password) - 1);
|
||||
prefsMessage.data.preferencesData.wifi_password[sizeof(prefsMessage.data.preferencesData.wifi_password) - 1] = '\0';
|
||||
|
||||
if (xQueueSend(prefsForWebserverQueue, &prefsMessage, 100 / portTICK_PERIOD_MS) != pdTRUE) {
|
||||
LOG(ELOG_LEVEL_ERROR, "Failed to send initial preferences to webserver queue");
|
||||
} else {
|
||||
LOG(ELOG_LEVEL_DEBUG, "Sent initial preferences to webserver");
|
||||
// Send to webserver
|
||||
if (prefsForWebserverQueue != NULL) {
|
||||
if (xQueueSend(prefsForWebserverQueue, &prefsMessage, 100 / portTICK_PERIOD_MS) != pdTRUE) {
|
||||
LOG(ELOG_LEVEL_ERROR, "Failed to send initial preferences to webserver queue");
|
||||
} else {
|
||||
LOG(ELOG_LEVEL_DEBUG, "Sent initial preferences to webserver");
|
||||
}
|
||||
}
|
||||
|
||||
// Send to sensor task
|
||||
if (prefsForSensorQueue != NULL) {
|
||||
if (xQueueSend(prefsForSensorQueue, &prefsMessage, 100 / portTICK_PERIOD_MS) != pdTRUE) {
|
||||
LOG(ELOG_LEVEL_ERROR, "Failed to send initial preferences to sensor queue");
|
||||
} else {
|
||||
LOG(ELOG_LEVEL_DEBUG, "Sent initial preferences to sensor");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +123,12 @@ void setup()
|
||||
} else {
|
||||
xTaskCreate(ethernet_task, "EthernetTask", 1024 * 4, dataQueue, 1, NULL);
|
||||
xTaskCreate(wifi_task, "WiFiTask", 1024 * 4, dataQueue, 1, NULL);
|
||||
xTaskCreate(read_sensor_task, "ReadSensorTask", 1024 * 4, dataQueue, 1, NULL);
|
||||
// Create sensor queues struct
|
||||
SensorQueues sensorQueues = {
|
||||
.dataQueue = dataQueue,
|
||||
.prefsQueue = prefsForSensorQueue
|
||||
};
|
||||
xTaskCreate(read_sensor_task, "ReadSensorTask", 1024 * 4, &sensorQueues, 1, NULL);
|
||||
xTaskCreate(collect_internal_telemetry_task, "InternalTelemetryTask", 1024 * 2, dataQueue, 1, NULL);
|
||||
xTaskCreate(display_task, "DisplayTask", 1024 * 2, NULL, 1, NULL);
|
||||
xTaskCreate(get_time_task, "GetTimeTask", 1024 * 2, NULL, 1, NULL);
|
||||
@@ -187,7 +207,14 @@ void loop()
|
||||
LOG(ELOG_LEVEL_ERROR, "Failed to forward preferences to webserver queue");
|
||||
}
|
||||
}
|
||||
LOG(ELOG_LEVEL_DEBUG, "Stored preferences and forwarded to webserver");
|
||||
|
||||
// Forward to sensor task so it can update its local copy
|
||||
if (prefsForSensorQueue != NULL) {
|
||||
if (xQueueSend(prefsForSensorQueue, &dataMessage, 100 / portTICK_PERIOD_MS) != pdTRUE) {
|
||||
LOG(ELOG_LEVEL_ERROR, "Failed to forward preferences to sensor queue");
|
||||
}
|
||||
}
|
||||
LOG(ELOG_LEVEL_DEBUG, "Stored preferences and forwarded to tasks");
|
||||
break;
|
||||
default:
|
||||
LOG(ELOG_LEVEL_ERROR, "Unknown data type received");
|
||||
|
||||
Reference in New Issue
Block a user