🫏 Adds getter for state
This commit is contained in:
@@ -29,7 +29,7 @@ void APService::status(JsonObject &root) {
|
||||
APNetworkStatus APService::getAPNetworkStatus() {
|
||||
WiFiMode_t currentWiFiMode = WiFi.getMode();
|
||||
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 apActive ? APNetworkStatus::ACTIVE : APNetworkStatus::INACTIVE;
|
||||
@@ -55,8 +55,8 @@ void APService::loop() {
|
||||
|
||||
void APService::manageAP() {
|
||||
WiFiMode_t currentWiFiMode = WiFi.getMode();
|
||||
if (_state.provisionMode == AP_MODE_ALWAYS ||
|
||||
(_state.provisionMode == AP_MODE_DISCONNECTED && WiFi.status() != WL_CONNECTED) || _recoveryMode) {
|
||||
if (state().provisionMode == AP_MODE_ALWAYS ||
|
||||
(state().provisionMode == AP_MODE_DISCONNECTED && WiFi.status() != WL_CONNECTED) || _recoveryMode) {
|
||||
if (_reconfigureAp || currentWiFiMode == WIFI_OFF || currentWiFiMode == WIFI_STA) {
|
||||
startAP();
|
||||
}
|
||||
@@ -68,9 +68,10 @@ void APService::manageAP() {
|
||||
}
|
||||
|
||||
void APService::startAP() {
|
||||
ESP_LOGI(TAG, "Starting software access point: %s", _state.ssid.c_str());
|
||||
WiFi.softAPConfig(_state.localIP, _state.gatewayIP, _state.subnetMask);
|
||||
WiFi.softAP(_state.ssid.c_str(), _state.password.c_str(), _state.channel, _state.ssidHidden, _state.maxClients);
|
||||
ESP_LOGI(TAG, "Starting software access point: %s", state().ssid.c_str());
|
||||
WiFi.softAPConfig(state().localIP, state().gatewayIP, state().subnetMask);
|
||||
WiFi.softAP(state().ssid.c_str(), state().password.c_str(), state().channel, state().ssidHidden,
|
||||
state().maxClients);
|
||||
#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
|
||||
#endif
|
||||
|
||||
@@ -168,30 +168,30 @@ void CameraService::updateCamera() {
|
||||
safe_sensor_return();
|
||||
return;
|
||||
}
|
||||
s->set_pixformat(s, _state.pixformat);
|
||||
s->set_framesize(s, _state.framesize);
|
||||
s->set_brightness(s, _state.brightness);
|
||||
s->set_contrast(s, _state.contrast);
|
||||
s->set_saturation(s, _state.saturation);
|
||||
s->set_sharpness(s, _state.sharpness);
|
||||
s->set_denoise(s, _state.denoise);
|
||||
s->set_gainceiling(s, _state.gainceiling);
|
||||
s->set_quality(s, _state.quality);
|
||||
s->set_colorbar(s, _state.colorbar);
|
||||
s->set_awb_gain(s, _state.awb_gain);
|
||||
s->set_wb_mode(s, _state.wb_mode);
|
||||
s->set_aec2(s, _state.aec2);
|
||||
s->set_ae_level(s, _state.ae_level);
|
||||
s->set_aec_value(s, _state.aec_value);
|
||||
s->set_agc_gain(s, _state.agc_gain);
|
||||
s->set_bpc(s, _state.bpc);
|
||||
s->set_wpc(s, _state.wpc);
|
||||
s->set_special_effect(s, _state.special_effect);
|
||||
s->set_raw_gma(s, _state.raw_gma);
|
||||
s->set_lenc(s, _state.lenc);
|
||||
s->set_hmirror(s, _state.hmirror);
|
||||
s->set_vflip(s, _state.vflip);
|
||||
s->set_dcw(s, _state.dcw);
|
||||
s->set_pixformat(s, state().pixformat);
|
||||
s->set_framesize(s, state().framesize);
|
||||
s->set_brightness(s, state().brightness);
|
||||
s->set_contrast(s, state().contrast);
|
||||
s->set_saturation(s, state().saturation);
|
||||
s->set_sharpness(s, state().sharpness);
|
||||
s->set_denoise(s, state().denoise);
|
||||
s->set_gainceiling(s, state().gainceiling);
|
||||
s->set_quality(s, state().quality);
|
||||
s->set_colorbar(s, state().colorbar);
|
||||
s->set_awb_gain(s, state().awb_gain);
|
||||
s->set_wb_mode(s, state().wb_mode);
|
||||
s->set_aec2(s, state().aec2);
|
||||
s->set_ae_level(s, state().ae_level);
|
||||
s->set_aec_value(s, state().aec_value);
|
||||
s->set_agc_gain(s, state().agc_gain);
|
||||
s->set_bpc(s, state().bpc);
|
||||
s->set_wpc(s, state().wpc);
|
||||
s->set_special_effect(s, state().special_effect);
|
||||
s->set_raw_gma(s, state().raw_gma);
|
||||
s->set_lenc(s, state().lenc);
|
||||
s->set_hmirror(s, state().hmirror);
|
||||
s->set_vflip(s, state().vflip);
|
||||
s->set_dcw(s, state().dcw);
|
||||
safe_sensor_return();
|
||||
}
|
||||
|
||||
|
||||
@@ -97,8 +97,8 @@ class Peripherals : public StatefulService<PeripheralsConfiguration> {
|
||||
Wire.end();
|
||||
}
|
||||
|
||||
if (_state.sda != -1 && _state.scl != -1) {
|
||||
Wire.begin(_state.sda, _state.scl, _state.frequency);
|
||||
if (state().sda != -1 && state().scl != -1) {
|
||||
Wire.begin(state().sda, state().scl, state().frequency);
|
||||
i2c_active = true;
|
||||
}
|
||||
}
|
||||
@@ -107,8 +107,8 @@ class Peripherals : public StatefulService<PeripheralsConfiguration> {
|
||||
char output[150];
|
||||
JsonDocument doc;
|
||||
JsonObject root = doc.to<JsonObject>();
|
||||
root["sda"] = _state.sda;
|
||||
root["scl"] = _state.scl;
|
||||
root["sda"] = state().sda;
|
||||
root["scl"] = state().scl;
|
||||
JsonArray addresses = root["addresses"].to<JsonArray>();
|
||||
for (auto &address : addressList) {
|
||||
addresses.add(address);
|
||||
|
||||
@@ -96,7 +96,7 @@ class ServoController : public StatefulService<ServoSettings> {
|
||||
void updateServoState() {
|
||||
for (int i = 0; i < 12; i++) {
|
||||
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;
|
||||
uint16_t pwm = angle * servo.conversion + servo.centerPwm;
|
||||
if (pwm < 125 || pwm > 600) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <PsychicHttp.h>
|
||||
#include <template/stateful_endpoint.h>
|
||||
#include <template/stateful_service.h>
|
||||
|
||||
#include <functional>
|
||||
|
||||
|
||||
@@ -160,14 +160,14 @@ class StatefulService {
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
T &state() { return _state; }
|
||||
|
||||
private:
|
||||
T _state;
|
||||
|
||||
inline void beginTransaction() { xSemaphoreTakeRecursive(_accessMutex, portMAX_DELAY); }
|
||||
|
||||
inline void endTransaction() { xSemaphoreGiveRecursive(_accessMutex); }
|
||||
|
||||
private:
|
||||
SemaphoreHandle_t _accessMutex;
|
||||
std::list<StateUpdateHandlerInfo_t> _updateHandlers;
|
||||
std::list<StateHookHandlerInfo_t> _hookHandlers;
|
||||
|
||||
@@ -55,7 +55,7 @@ esp_err_t WiFiService::getNetworks(PsychicRequest *request) {
|
||||
}
|
||||
|
||||
void WiFiService::setupMDNS(const char *hostname) {
|
||||
MDNS.begin(_state.hostname.c_str());
|
||||
MDNS.begin(state().hostname.c_str());
|
||||
MDNS.setInstanceName(hostname);
|
||||
MDNS.addService("http", "tcp", 80);
|
||||
MDNS.addService("ws", "tcp", 80);
|
||||
@@ -106,13 +106,13 @@ void WiFiService::getNetworkStatus(JsonObject &root) {
|
||||
}
|
||||
|
||||
void WiFiService::manageSTA() {
|
||||
if (WiFi.isConnected() || _state.wifiSettings.empty()) return;
|
||||
if (WiFi.isConnected() || state().wifiSettings.empty()) return;
|
||||
if ((WiFi.getMode() & WIFI_STA) == 0) connectToWiFi();
|
||||
}
|
||||
|
||||
void WiFiService::connectToWiFi() {
|
||||
// reset availability flag for all stored networks
|
||||
for (auto &network : _state.wifiSettings) {
|
||||
for (auto &network : state().wifiSettings) {
|
||||
network.available = false;
|
||||
}
|
||||
|
||||
@@ -138,7 +138,7 @@ void WiFiService::connectToWiFi() {
|
||||
|
||||
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 (rssi_scan >= FACTORY_WIFI_RSSI_THRESHOLD) {
|
||||
network.available = true;
|
||||
@@ -151,15 +151,15 @@ void WiFiService::connectToWiFi() {
|
||||
}
|
||||
}
|
||||
|
||||
if (!_state.priorityBySignalStrength) {
|
||||
for (auto &network : _state.wifiSettings) {
|
||||
if (!state().priorityBySignalStrength) {
|
||||
for (auto &network : state().wifiSettings) {
|
||||
if (network.available == true) {
|
||||
ESP_LOGI("WiFiSettingsService", "Connecting to first available network: %s", network.ssid.c_str());
|
||||
configureNetwork(network);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (_state.priorityBySignalStrength && bestNetwork) {
|
||||
} else if (state().priorityBySignalStrength && bestNetwork) {
|
||||
ESP_LOGI("WiFiSettingsService", "Connecting to strongest network: %s", bestNetwork->ssid.c_str());
|
||||
configureNetwork(*bestNetwork);
|
||||
WiFi.begin(bestNetwork->ssid.c_str(), bestNetwork->password.c_str());
|
||||
@@ -179,7 +179,7 @@ void WiFiService::configureNetwork(wifi_settings_t &network) {
|
||||
// configure for DHCP
|
||||
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
|
||||
WiFi.begin(network.ssid.c_str(), network.password.c_str());
|
||||
|
||||
@@ -41,7 +41,7 @@ class WiFiService : public StatefulService<WiFiSettings> {
|
||||
|
||||
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 getNetworks(PsychicRequest *request);
|
||||
|
||||
Reference in New Issue
Block a user