Added deinit() for esp now

This commit is contained in:
CommanderRedYT
2021-12-14 22:00:18 +01:00
parent 5903fc21b1
commit 16ebdfc795

View File

@ -7,6 +7,7 @@ constexpr const char * const TAG = "BOBBY_ESP_NOW";
#include <espchrono.h> #include <espchrono.h>
#include <esp_log.h> #include <esp_log.h>
#include <numberparsing.h> #include <numberparsing.h>
#include <espwifistack.h>
#include "globals.h" #include "globals.h"
#include "utils.h" #include "utils.h"
@ -53,7 +54,7 @@ void initESPNow()
if (initialized < 1) if (initialized < 1)
{ {
if (!settings.wifiSettings.wifiApEnabled && !settings.wifiSettings.wifiStaEnabled) if (!settings.wifiSettings.wifiApEnabled && (!settings.wifiSettings.wifiStaEnabled && wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::NO_SHIELD) || (wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_STA && wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_AP && wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_APSTA))
{ {
ESP_LOGW(TAG, "cannot execute esp_now_init(): tcp stack is down."); ESP_LOGW(TAG, "cannot execute esp_now_init(): tcp stack is down.");
return; return;
@ -106,15 +107,72 @@ void initESPNow()
} }
initialized = 255; initialized = 255;
ESP_LOGI(TAG, "Init done.");
} }
void handle() void handle()
{ {
if (initialized < 255 && (settings.wifiSettings.wifiApEnabled || settings.wifiSettings.wifiStaEnabled)) if (initialized < 255 && !(!settings.wifiSettings.wifiApEnabled && (!settings.wifiSettings.wifiStaEnabled && wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::NO_SHIELD) || (wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_STA && wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_AP && wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_APSTA)))
{ {
initESPNow(); initESPNow();
return; return;
} }
else if (!settings.wifiSettings.wifiApEnabled && (!settings.wifiSettings.wifiStaEnabled && wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::NO_SHIELD) || (wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_STA && wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_AP && wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_APSTA))
{
if (initialized > 0)
{
if (initialized >= 4) // peer
{
for (const auto &peer : peers)
{
if (const auto error = esp_now_del_peer(peer.peer_addr); error != ESP_OK)
{
ESP_LOGE(TAG, "esp_now_del_peer() failed with %s", esp_err_to_name(error));
return;
}
else if (error == ESP_ERR_ESPNOW_NOT_FOUND)
{
initialized = 0;
}
}
initialized--;
}
if (initialized >= 3) // callback
{
if (const auto error = esp_now_unregister_recv_cb(); error != ESP_OK)
{
ESP_LOGE(TAG, "esp_now_unregister_recv_cb() failed with %s", esp_err_to_name(error));
return;
}
else if (error == ESP_ERR_ESPNOW_NOT_FOUND)
{
initialized = 0;
}
else
initialized--;
}
if (initialized >= 2) // esp deinit
{
if (const auto error = esp_now_deinit(); error != ESP_OK)
{
ESP_LOGE(TAG, "esp_now_deinit() failed with %s", esp_err_to_name(error));
return;
}
else if (error == ESP_ERR_ESPNOW_NOT_FOUND)
{
initialized = 0;
}
else
initialized--;
}
initialized = 0;
ESP_LOGI(TAG, "Deinit done.");
}
return;
}
if(message_queue.size()) if(message_queue.size())
{ {