Добавлено энергосбережение для увеличения работы от аккума:
- через 60 сек экран выключается и есп уходит в сон - слейв в ожидании мастера прослушивает не постоянно 20мс/100мс
This commit is contained in:
@@ -55,9 +55,39 @@ void Radio::end() {
|
||||
if (queue_) xQueueReset(queue_);
|
||||
if (heartbeatQueue_) xQueueReset(heartbeatQueue_);
|
||||
if (instance_ == this) instance_ = nullptr;
|
||||
windowedReceive_ = false;
|
||||
Log::event("ESP-NOW", "stopped");
|
||||
}
|
||||
|
||||
bool Radio::setWindowedReceive(bool enabled) {
|
||||
if (!active_) return false;
|
||||
if (windowedReceive_ == enabled) return true;
|
||||
|
||||
const uint16_t window = enabled ? SLAVE_LISTEN_WINDOW_MS : UINT16_MAX;
|
||||
const uint16_t interval = enabled ? SLAVE_LISTEN_INTERVAL_MS :
|
||||
ESP_WIFI_CONNECTIONLESS_INTERVAL_DEFAULT_MODE;
|
||||
const esp_err_t windowResult = esp_now_set_wake_window(window);
|
||||
const esp_err_t intervalResult = esp_wifi_connectionless_module_set_wake_interval(interval);
|
||||
const bool sleepResult = WiFi.setSleep(enabled);
|
||||
const bool ok = windowResult == ESP_OK && intervalResult == ESP_OK && sleepResult;
|
||||
|
||||
bool continuousRestored = true;
|
||||
if (!ok) {
|
||||
continuousRestored = esp_now_set_wake_window(UINT16_MAX) == ESP_OK;
|
||||
continuousRestored =
|
||||
esp_wifi_connectionless_module_set_wake_interval(
|
||||
ESP_WIFI_CONNECTIONLESS_INTERVAL_DEFAULT_MODE) == ESP_OK && continuousRestored;
|
||||
continuousRestored = WiFi.setSleep(false) && continuousRestored;
|
||||
windowedReceive_ = false;
|
||||
} else windowedReceive_ = enabled;
|
||||
|
||||
Log::printf("ESP-NOW", "RX power-save %s window=%ums interval=%ums %s%s",
|
||||
enabled ? "ON" : "OFF", window, interval,
|
||||
ok ? "OK" : "FAILED; continuous RX restore ",
|
||||
ok ? "" : (continuousRestored ? "OK" : "FAILED"));
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool Radio::ensurePeer(const uint8_t mac[6]) {
|
||||
if (esp_now_is_peer_exist(mac)) return true;
|
||||
esp_now_peer_info_t peer = {};
|
||||
@@ -80,7 +110,8 @@ bool Radio::sendTo(const uint8_t mac[6], ProtocolPacket p) {
|
||||
finalizePacket(p);
|
||||
const bool ok = esp_now_send(mac, reinterpret_cast<const uint8_t *>(&p), sizeof(p)) == ESP_OK;
|
||||
const MessageType type = static_cast<MessageType>(p.type);
|
||||
if (type != MessageType::HEARTBEAT && type != MessageType::HEARTBEAT_ACK && type != MessageType::PROGRESS)
|
||||
if (type != MessageType::DISCOVER && type != MessageType::HEARTBEAT &&
|
||||
type != MessageType::HEARTBEAT_ACK && type != MessageType::PROGRESS)
|
||||
Log::printf("ESP-NOW", "TX %s to %s session=%08lX stage=%u seq=%u %s",
|
||||
messageName(type), peer, p.session, p.stage, p.sequence, ok ? "QUEUED" : "FAILED");
|
||||
return ok;
|
||||
|
||||
Reference in New Issue
Block a user