mirror of
https://github.com/xoseperez/espurna.git
synced 2026-02-27 21:14:18 +01:00
wifi: turned off on boot
This commit is contained in:
@@ -256,7 +256,7 @@ namespace internal {
|
||||
// current task and is free to take up another one. Allow to toggle OFF for the whole module,
|
||||
// discarding any actions involving an active WiFi. Default is ON
|
||||
|
||||
bool enabled { true };
|
||||
bool enabled { false };
|
||||
ActionsQueue actions;
|
||||
|
||||
} // namespace internal
|
||||
@@ -455,67 +455,11 @@ String NAME (size_t id) {\
|
||||
|
||||
EXACT_VALUE(sleep, settings::sleep)
|
||||
EXACT_VALUE(txPower, settings::txPower)
|
||||
EXACT_VALUE(forcedSleep, settings::forcedSleep)
|
||||
EXACT_VALUE(forcedSleepPin, settings::forcedSleepPin)
|
||||
EXACT_VALUE(forcedSleepLevel, settings::forcedSleepLevel)
|
||||
|
||||
} // namespace internal
|
||||
} // namespace query
|
||||
} // namespace settings
|
||||
|
||||
// ::forceSleepBegin() remembers the previous mode and ::forceSleepWake() calls station connect when it has STA in it :/
|
||||
// while we *do* set opmode to 0 to avoid this uncertainty, preper to call wake through SDK instead of the Arduino wrapper
|
||||
//
|
||||
// 0xFFFFFFF is a magic number per the NONOS API reference, 3.7.5 wifi_fpm_do_sleep:
|
||||
// > If sleep_time_in_us is 0xFFFFFFF, the ESP8266 will sleep till be woke up as below:
|
||||
// > • If wifi_fpm_set_sleep_type is set to be LIGHT_SLEEP_T, ESP8266 can wake up by GPIO.
|
||||
// > • If wifi_fpm_set_sleep_type is set to be MODEM_SLEEP_T, ESP8266 can wake up by wifi_fpm_do_wakeup.
|
||||
//
|
||||
// In our case, both sleep modes are indefinite when OFF action is executed.
|
||||
//
|
||||
// TODO(esp8266): Wake-up GPIO pin is set to INPUT, should it be PULLUP when target level is LOW?
|
||||
// Wake-up GPIO pin is *not registered* through usual means, so any overlaps needs to be handled manually.
|
||||
//
|
||||
// TODO(esp32): Null mode turns off radio, no need for MODEM sleep
|
||||
|
||||
bool sleep(sleep_type_t type) {
|
||||
if (!enabled() && (opmode() == OpmodeNull)) {
|
||||
if (type == LIGHT_SLEEP_T) {
|
||||
const auto pin = settings::forcedSleepPin();
|
||||
if (pin == GPIO_NONE) {
|
||||
return false;
|
||||
}
|
||||
|
||||
pinMode(pin, INPUT);
|
||||
gpio_pin_wakeup_enable(pin, settings::forcedSleepLevel());
|
||||
}
|
||||
|
||||
wifi_fpm_set_sleep_type(type);
|
||||
yield();
|
||||
wifi_fpm_open();
|
||||
yield();
|
||||
|
||||
if (0 == wifi_fpm_do_sleep(0xFFFFFFF)) {
|
||||
delay(10);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool wakeup() {
|
||||
if (wifi_fpm_get_sleep_type() != NONE_SLEEP_T) {
|
||||
wifi_fpm_do_wakeup();
|
||||
wifi_fpm_close();
|
||||
delay(10);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// We are guaranteed to have '\0' when <32 b/c the SDK zeroes out the data
|
||||
// But, these are byte arrays, not C strings. When ssid_len is available, use it.
|
||||
// When not, we are still expecting the <32 arrays to have '\0' at the end and we manually
|
||||
@@ -2739,7 +2683,6 @@ State handleAction(State& state, Action action) {
|
||||
case Action::TurnOn:
|
||||
if (!wifi::enabled()) {
|
||||
wifi::enable();
|
||||
wifi::wakeup();
|
||||
wifi::settings::configure();
|
||||
}
|
||||
break;
|
||||
@@ -2957,12 +2900,14 @@ void setup() {
|
||||
internal::init();
|
||||
|
||||
migrateVersion(settings::migrate);
|
||||
settings::configure();
|
||||
settings::query::setup();
|
||||
|
||||
action(wifi::Action::TurnOn);
|
||||
|
||||
#if SYSTEM_CHECK_ENABLED
|
||||
if (!systemCheck()) {
|
||||
actions() = wifi::ActionsQueue{};
|
||||
action(wifi::Action::TurnOn);
|
||||
action(wifi::Action::AccessPointStart);
|
||||
}
|
||||
#endif
|
||||
@@ -3042,6 +2987,18 @@ void wifiStartAp() {
|
||||
espurna::wifi::Action::AccessPointStart);
|
||||
}
|
||||
|
||||
bool wifiDisabled() {
|
||||
return espurna::wifi::opmode()
|
||||
== espurna::wifi::OpmodeNull;
|
||||
}
|
||||
|
||||
void wifiDisable() {
|
||||
espurna::wifi::ap::fallback::remove();
|
||||
espurna::wifi::sta::scan::periodic::stop();
|
||||
espurna::wifi::ensure_opmode(
|
||||
espurna::wifi::OpmodeNull);
|
||||
}
|
||||
|
||||
void wifiTurnOff() {
|
||||
espurna::wifi::action(
|
||||
espurna::wifi::Action::TurnOff);
|
||||
|
||||
@@ -97,6 +97,9 @@ void wifiToggleSta();
|
||||
void wifiDisconnect();
|
||||
|
||||
// Toggle WiFi modem
|
||||
bool wifiDisabled();
|
||||
void wifiDisable();
|
||||
|
||||
void wifiTurnOff();
|
||||
void wifiTurnOn();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user