From 701f56dc318434f75a9da893dd7168e36a2bbe64 Mon Sep 17 00:00:00 2001 From: Johnathon Slightham Date: Sun, 15 Jun 2025 12:14:17 -0400 Subject: [PATCH] Various wifi improvements --- components/config/ConfigManager.cpp | 4 ++-- components/rpc/TCPServer.cpp | 6 ++---- components/rpc/WifiManager.cpp | 3 ++- components/rpc/include/mDNSDiscoveryService.h | 7 +++++-- components/rpc/mDNSDiscoveryService.cpp | 12 ++++++++++-- main/main.cpp | 2 +- 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/components/config/ConfigManager.cpp b/components/config/ConfigManager.cpp index 1863e06..3079f80 100644 --- a/components/config/ConfigManager.cpp +++ b/components/config/ConfigManager.cpp @@ -14,12 +14,12 @@ void ConfigManager::init_config() { nvs_open(NVS_FLASH_NAMESPACE, NVS_READWRITE, &config_handle); uint16_t id; - if (ESP_ERR_NVS_NOT_FOUND == nvs_get_u16(config_handle, "id", &id)) { + if (ESP_ERR_NVS_NOT_FOUND == nvs_get_u16(config_handle, MODULE_ID_KEY, &id)) { nvs_set_u16(config_handle, MODULE_ID_KEY, DEFAULT_MODULE_ID); } uint16_t type; - if (ESP_ERR_NVS_NOT_FOUND == nvs_get_u16(config_handle, "id", &type)) { + if (ESP_ERR_NVS_NOT_FOUND == nvs_get_u16(config_handle, MODULE_TYPE_KEY, &type)) { nvs_set_u16(config_handle, MODULE_TYPE_KEY, DEFAULT_MODULE_TYPE); } diff --git a/components/rpc/TCPServer.cpp b/components/rpc/TCPServer.cpp index 7feb778..cf06472 100644 --- a/components/rpc/TCPServer.cpp +++ b/components/rpc/TCPServer.cpp @@ -18,13 +18,12 @@ // todo: - add message routing to correct client // - authenticate (don't just return true from the auth function) +// - tx from board TCPServer::TCPServer(const int port) { this->m_port = port; this->m_mutex = xSemaphoreCreateMutex(); this->m_clients = std::unordered_set(); - - this->m_task = nullptr; this->m_rx_task = nullptr; this->m_tx_task = nullptr; @@ -123,7 +122,6 @@ TCPServer::~TCPServer() { auto that = static_cast(args); while (true) { - printf("top of loop\n"); fd_set readfds; FD_ZERO(&readfds); int max_fd = -1; @@ -154,7 +152,7 @@ TCPServer::~TCPServer() { close(sock); to_remove.emplace_back(sock); } else { - // todo: send to rx queue + // todo: send to rx queue instead of printing buffer[len] = 0; // temp: Null-terminate whatever is received and treat it like a string printf("TCP Server Received %d bytes: %s\n", len, buffer); } diff --git a/components/rpc/WifiManager.cpp b/components/rpc/WifiManager.cpp index 638943c..b0a0fa3 100644 --- a/components/rpc/WifiManager.cpp +++ b/components/rpc/WifiManager.cpp @@ -12,6 +12,7 @@ WifiManager::WifiManager() { esp_netif_init(); + esp_wifi_set_storage(WIFI_STORAGE_RAM); esp_event_loop_create_default(); this->m_mutex = xSemaphoreCreateMutex(); @@ -103,10 +104,10 @@ int WifiManager::init_connection() { } }; + esp_wifi_set_mode(WIFI_MODE_STA); esp_wifi_set_config(static_cast(ESP_IF_WIFI_STA), &wifi_configuration); esp_wifi_start(); - esp_wifi_set_mode(WIFI_MODE_STA); esp_wifi_connect(); return 0; diff --git a/components/rpc/include/mDNSDiscoveryService.h b/components/rpc/include/mDNSDiscoveryService.h index 1cccdd1..1071818 100644 --- a/components/rpc/include/mDNSDiscoveryService.h +++ b/components/rpc/include/mDNSDiscoveryService.h @@ -5,9 +5,12 @@ #ifndef DISCOVERYSERVICE_H #define DISCOVERYSERVICE_H -class mDNSDiscoveryService { +class mDNSDiscoveryService final { public: - mDNSDiscoveryService(); + mDNSDiscoveryService() = delete; + ~mDNSDiscoveryService() = delete; + + static void setup(); }; #endif //DISCOVERYSERVICE_H diff --git a/components/rpc/mDNSDiscoveryService.cpp b/components/rpc/mDNSDiscoveryService.cpp index d4afb97..2d2c9a6 100644 --- a/components/rpc/mDNSDiscoveryService.cpp +++ b/components/rpc/mDNSDiscoveryService.cpp @@ -13,12 +13,20 @@ #include #include -// todo: clean this up (strange to be a constructor) also need to add more details -mDNSDiscoveryService::mDNSDiscoveryService() { +// todo: clean this up (strange to be a constructor) also need to add more details, need to add to routing table +void mDNSDiscoveryService::setup() { mdns_init(); mdns_hostname_set(std::format("botchain-{}", ConfigManager::get_module_id()).c_str()); mdns_instance_name_set(std::format("BotChain Robot Module {}", ConfigManager::get_module_id()).c_str()); mdns_service_add(nullptr, "_robotcontrol", "_tcp", TCP_PORT, nullptr, 0); mdns_service_instance_name_set("_robotcontrol", "_tcp", "Robot Control TCP Server"); + + mdns_txt_item_t service_txt_data[3] = { + {"module_id",std::to_string(ConfigManager::get_module_id()).c_str()}, + {"module_type",std::to_string(ConfigManager::get_module_type()).c_str()}, + {"connected_modules","2,3,4,5,6,7,8,9"}, + }; + + mdns_service_txt_set("_robotcontrol", "_tcp", service_txt_data, 3); } diff --git a/main/main.cpp b/main/main.cpp index de5485e..b8decc2 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -17,7 +17,7 @@ extern "C" [[noreturn]] void app_main(void) { const auto manager = std::make_unique(); manager->connect(); - const auto discovery = std::make_unique(); + mDNSDiscoveryService::setup(); const auto tcp_server = std::make_unique(TCP_PORT);