🫏 Adds getter for state

This commit is contained in:
Rune Harlyk
2024-11-23 12:54:15 +01:00
parent 852ff91b7d
commit 8792c06e8a
8 changed files with 49 additions and 48 deletions
+7 -6
View File
@@ -29,7 +29,7 @@ void APService::status(JsonObject &root) {
APNetworkStatus APService::getAPNetworkStatus() { APNetworkStatus APService::getAPNetworkStatus() {
WiFiMode_t currentWiFiMode = WiFi.getMode(); WiFiMode_t currentWiFiMode = WiFi.getMode();
bool apActive = currentWiFiMode == WIFI_AP || currentWiFiMode == WIFI_AP_STA; bool apActive = currentWiFiMode == WIFI_AP || currentWiFiMode == WIFI_AP_STA;
if (apActive && _state.provisionMode != AP_MODE_ALWAYS && WiFi.status() == WL_CONNECTED) { if (apActive && state().provisionMode != AP_MODE_ALWAYS && WiFi.status() == WL_CONNECTED) {
return APNetworkStatus::LINGERING; return APNetworkStatus::LINGERING;
} }
return apActive ? APNetworkStatus::ACTIVE : APNetworkStatus::INACTIVE; return apActive ? APNetworkStatus::ACTIVE : APNetworkStatus::INACTIVE;
@@ -55,8 +55,8 @@ void APService::loop() {
void APService::manageAP() { void APService::manageAP() {
WiFiMode_t currentWiFiMode = WiFi.getMode(); WiFiMode_t currentWiFiMode = WiFi.getMode();
if (_state.provisionMode == AP_MODE_ALWAYS || if (state().provisionMode == AP_MODE_ALWAYS ||
(_state.provisionMode == AP_MODE_DISCONNECTED && WiFi.status() != WL_CONNECTED) || _recoveryMode) { (state().provisionMode == AP_MODE_DISCONNECTED && WiFi.status() != WL_CONNECTED) || _recoveryMode) {
if (_reconfigureAp || currentWiFiMode == WIFI_OFF || currentWiFiMode == WIFI_STA) { if (_reconfigureAp || currentWiFiMode == WIFI_OFF || currentWiFiMode == WIFI_STA) {
startAP(); startAP();
} }
@@ -68,9 +68,10 @@ void APService::manageAP() {
} }
void APService::startAP() { void APService::startAP() {
ESP_LOGI(TAG, "Starting software access point: %s", _state.ssid.c_str()); ESP_LOGI(TAG, "Starting software access point: %s", state().ssid.c_str());
WiFi.softAPConfig(_state.localIP, _state.gatewayIP, _state.subnetMask); WiFi.softAPConfig(state().localIP, state().gatewayIP, state().subnetMask);
WiFi.softAP(_state.ssid.c_str(), _state.password.c_str(), _state.channel, _state.ssidHidden, _state.maxClients); WiFi.softAP(state().ssid.c_str(), state().password.c_str(), state().channel, state().ssidHidden,
state().maxClients);
#if CONFIG_IDF_TARGET_ESP32C3 #if CONFIG_IDF_TARGET_ESP32C3
WiFi.setTxPower(WIFI_POWER_8_5dBm); // https://www.wemos.cc/en/latest/c3/c3_mini_1_0_0.html#about-wifi WiFi.setTxPower(WIFI_POWER_8_5dBm); // https://www.wemos.cc/en/latest/c3/c3_mini_1_0_0.html#about-wifi
#endif #endif
@@ -168,30 +168,30 @@ void CameraService::updateCamera() {
safe_sensor_return(); safe_sensor_return();
return; return;
} }
s->set_pixformat(s, _state.pixformat); s->set_pixformat(s, state().pixformat);
s->set_framesize(s, _state.framesize); s->set_framesize(s, state().framesize);
s->set_brightness(s, _state.brightness); s->set_brightness(s, state().brightness);
s->set_contrast(s, _state.contrast); s->set_contrast(s, state().contrast);
s->set_saturation(s, _state.saturation); s->set_saturation(s, state().saturation);
s->set_sharpness(s, _state.sharpness); s->set_sharpness(s, state().sharpness);
s->set_denoise(s, _state.denoise); s->set_denoise(s, state().denoise);
s->set_gainceiling(s, _state.gainceiling); s->set_gainceiling(s, state().gainceiling);
s->set_quality(s, _state.quality); s->set_quality(s, state().quality);
s->set_colorbar(s, _state.colorbar); s->set_colorbar(s, state().colorbar);
s->set_awb_gain(s, _state.awb_gain); s->set_awb_gain(s, state().awb_gain);
s->set_wb_mode(s, _state.wb_mode); s->set_wb_mode(s, state().wb_mode);
s->set_aec2(s, _state.aec2); s->set_aec2(s, state().aec2);
s->set_ae_level(s, _state.ae_level); s->set_ae_level(s, state().ae_level);
s->set_aec_value(s, _state.aec_value); s->set_aec_value(s, state().aec_value);
s->set_agc_gain(s, _state.agc_gain); s->set_agc_gain(s, state().agc_gain);
s->set_bpc(s, _state.bpc); s->set_bpc(s, state().bpc);
s->set_wpc(s, _state.wpc); s->set_wpc(s, state().wpc);
s->set_special_effect(s, _state.special_effect); s->set_special_effect(s, state().special_effect);
s->set_raw_gma(s, _state.raw_gma); s->set_raw_gma(s, state().raw_gma);
s->set_lenc(s, _state.lenc); s->set_lenc(s, state().lenc);
s->set_hmirror(s, _state.hmirror); s->set_hmirror(s, state().hmirror);
s->set_vflip(s, _state.vflip); s->set_vflip(s, state().vflip);
s->set_dcw(s, _state.dcw); s->set_dcw(s, state().dcw);
safe_sensor_return(); safe_sensor_return();
} }
@@ -97,8 +97,8 @@ class Peripherals : public StatefulService<PeripheralsConfiguration> {
Wire.end(); Wire.end();
} }
if (_state.sda != -1 && _state.scl != -1) { if (state().sda != -1 && state().scl != -1) {
Wire.begin(_state.sda, _state.scl, _state.frequency); Wire.begin(state().sda, state().scl, state().frequency);
i2c_active = true; i2c_active = true;
} }
} }
@@ -107,8 +107,8 @@ class Peripherals : public StatefulService<PeripheralsConfiguration> {
char output[150]; char output[150];
JsonDocument doc; JsonDocument doc;
JsonObject root = doc.to<JsonObject>(); JsonObject root = doc.to<JsonObject>();
root["sda"] = _state.sda; root["sda"] = state().sda;
root["scl"] = _state.scl; root["scl"] = state().scl;
JsonArray addresses = root["addresses"].to<JsonArray>(); JsonArray addresses = root["addresses"].to<JsonArray>();
for (auto &address : addressList) { for (auto &address : addressList) {
addresses.add(address); addresses.add(address);
@@ -96,7 +96,7 @@ class ServoController : public StatefulService<ServoSettings> {
void updateServoState() { void updateServoState() {
for (int i = 0; i < 12; i++) { for (int i = 0; i < 12; i++) {
angles[i] = lerp(angles[i], target_angles[i], 0.2); angles[i] = lerp(angles[i], target_angles[i], 0.2);
auto &servo = _state.servos[i]; auto &servo = state().servos[i];
float angle = servo.direction * angles[i] + servo.centerAngle; float angle = servo.direction * angles[i] + servo.centerAngle;
uint16_t pwm = angle * servo.conversion + servo.centerPwm; uint16_t pwm = angle * servo.conversion + servo.centerPwm;
if (pwm < 125 || pwm > 600) { if (pwm < 125 || pwm > 600) {
@@ -1,7 +1,7 @@
#pragma once #pragma once
#include <PsychicHttp.h> #include <PsychicHttp.h>
#include <template/stateful_endpoint.h> #include <template/stateful_service.h>
#include <functional> #include <functional>
@@ -160,14 +160,14 @@ class StatefulService {
} }
} }
protected: T &state() { return _state; }
private:
T _state; T _state;
inline void beginTransaction() { xSemaphoreTakeRecursive(_accessMutex, portMAX_DELAY); } inline void beginTransaction() { xSemaphoreTakeRecursive(_accessMutex, portMAX_DELAY); }
inline void endTransaction() { xSemaphoreGiveRecursive(_accessMutex); } inline void endTransaction() { xSemaphoreGiveRecursive(_accessMutex); }
private:
SemaphoreHandle_t _accessMutex; SemaphoreHandle_t _accessMutex;
std::list<StateUpdateHandlerInfo_t> _updateHandlers; std::list<StateUpdateHandlerInfo_t> _updateHandlers;
std::list<StateHookHandlerInfo_t> _hookHandlers; std::list<StateHookHandlerInfo_t> _hookHandlers;
+8 -8
View File
@@ -55,7 +55,7 @@ esp_err_t WiFiService::getNetworks(PsychicRequest *request) {
} }
void WiFiService::setupMDNS(const char *hostname) { void WiFiService::setupMDNS(const char *hostname) {
MDNS.begin(_state.hostname.c_str()); MDNS.begin(state().hostname.c_str());
MDNS.setInstanceName(hostname); MDNS.setInstanceName(hostname);
MDNS.addService("http", "tcp", 80); MDNS.addService("http", "tcp", 80);
MDNS.addService("ws", "tcp", 80); MDNS.addService("ws", "tcp", 80);
@@ -106,13 +106,13 @@ void WiFiService::getNetworkStatus(JsonObject &root) {
} }
void WiFiService::manageSTA() { void WiFiService::manageSTA() {
if (WiFi.isConnected() || _state.wifiSettings.empty()) return; if (WiFi.isConnected() || state().wifiSettings.empty()) return;
if ((WiFi.getMode() & WIFI_STA) == 0) connectToWiFi(); if ((WiFi.getMode() & WIFI_STA) == 0) connectToWiFi();
} }
void WiFiService::connectToWiFi() { void WiFiService::connectToWiFi() {
// reset availability flag for all stored networks // reset availability flag for all stored networks
for (auto &network : _state.wifiSettings) { for (auto &network : state().wifiSettings) {
network.available = false; network.available = false;
} }
@@ -138,7 +138,7 @@ void WiFiService::connectToWiFi() {
WiFi.getNetworkInfo(i, ssid_scan, sec_scan, rssi_scan, BSSID_scan, chan_scan); WiFi.getNetworkInfo(i, ssid_scan, sec_scan, rssi_scan, BSSID_scan, chan_scan);
for (auto &network : _state.wifiSettings) { for (auto &network : state().wifiSettings) {
if (ssid_scan == network.ssid) { if (ssid_scan == network.ssid) {
if (rssi_scan >= FACTORY_WIFI_RSSI_THRESHOLD) { if (rssi_scan >= FACTORY_WIFI_RSSI_THRESHOLD) {
network.available = true; network.available = true;
@@ -151,15 +151,15 @@ void WiFiService::connectToWiFi() {
} }
} }
if (!_state.priorityBySignalStrength) { if (!state().priorityBySignalStrength) {
for (auto &network : _state.wifiSettings) { for (auto &network : state().wifiSettings) {
if (network.available == true) { if (network.available == true) {
ESP_LOGI("WiFiSettingsService", "Connecting to first available network: %s", network.ssid.c_str()); ESP_LOGI("WiFiSettingsService", "Connecting to first available network: %s", network.ssid.c_str());
configureNetwork(network); configureNetwork(network);
break; break;
} }
} }
} else if (_state.priorityBySignalStrength && bestNetwork) { } else if (state().priorityBySignalStrength && bestNetwork) {
ESP_LOGI("WiFiSettingsService", "Connecting to strongest network: %s", bestNetwork->ssid.c_str()); ESP_LOGI("WiFiSettingsService", "Connecting to strongest network: %s", bestNetwork->ssid.c_str());
configureNetwork(*bestNetwork); configureNetwork(*bestNetwork);
WiFi.begin(bestNetwork->ssid.c_str(), bestNetwork->password.c_str()); WiFi.begin(bestNetwork->ssid.c_str(), bestNetwork->password.c_str());
@@ -179,7 +179,7 @@ void WiFiService::configureNetwork(wifi_settings_t &network) {
// configure for DHCP // configure for DHCP
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE); WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
} }
WiFi.setHostname(_state.hostname.c_str()); WiFi.setHostname(state().hostname.c_str());
// attempt to connect to the network // attempt to connect to the network
WiFi.begin(network.ssid.c_str(), network.password.c_str()); WiFi.begin(network.ssid.c_str(), network.password.c_str());
+1 -1
View File
@@ -41,7 +41,7 @@ class WiFiService : public StatefulService<WiFiSettings> {
void setupMDNS(const char *hostname); void setupMDNS(const char *hostname);
const char *getHostname() { return _state.hostname.c_str(); } const char *getHostname() { return state().hostname.c_str(); }
static esp_err_t handleScan(PsychicRequest *request); static esp_err_t handleScan(PsychicRequest *request);
static esp_err_t getNetworks(PsychicRequest *request); static esp_err_t getNetworks(PsychicRequest *request);