🫏 Adds getter for state
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user