wifi_sta.cpp
1 #include "wifi_internal.h" 2 3 #include <led.h> 4 #include <identity.h> 5 6 #include <Arduino.h> 7 #include <ESPmDNS.h> 8 #include <WiFi.h> 9 10 void networking::wifi::internal::configureMdnsServices(const char *hostname) { 11 MDNS.setInstanceName(hostname); 12 MDNS.addService("ssh", "tcp", config::ssh::PORT); 13 MDNS.addService("http", "tcp", config::http::PORT); 14 MDNS.addServiceTxt("http", "tcp", "path", "/"); 15 MDNS.addServiceTxt("http", "tcp", "fw", ESP.getSdkVersion()); 16 } 17 18 void networking::wifi::sta::initialize() { 19 static bool setup_done = false; 20 if (setup_done) return; 21 setup_done = true; 22 23 WiFi.setAutoReconnect(false); 24 WiFi.mode(WIFI_MODE_STA); 25 26 WiFi.onEvent([](arduino_event_id_t event, arduino_event_info_t info) { 27 switch (event) { 28 case ARDUINO_EVENT_WIFI_STA_CONNECTED: 29 Serial.printf("[wifi] %s\n", WiFi.eventName(event)); 30 break; 31 32 case ARDUINO_EVENT_WIFI_STA_DISCONNECTED: 33 Serial.printf("[wifi] %s reason: %s\n", 34 WiFi.eventName(event), 35 WiFi.disconnectReasonName( 36 (wifi_err_reason_t)info.wifi_sta_disconnected.reason)); 37 LED.set(colors::Yellow); 38 break; 39 40 case ARDUINO_EVENT_WIFI_STA_GOT_IP: 41 Serial.printf("[wifi] %s %s\n", WiFi.eventName(event), 42 WiFi.localIP().toString().c_str()); 43 LED.set(colors::Green); 44 if (!networking::wifi::internal::mdns_started && MDNS.begin(services::identity::access_hostname())) { 45 networking::wifi::internal::configureMdnsServices(services::identity::access_hostname()); 46 Serial.printf("[mdns] %s.local\n", services::identity::access_hostname()); 47 networking::wifi::internal::mdns_started = true; 48 } 49 break; 50 51 default: 52 break; 53 } 54 }); 55 } 56 57 void networking::wifi::configure_hostname(const char *hostname) { 58 if (!hostname || hostname[0] == '\0') return; 59 60 WiFi.setHostname(hostname); 61 62 if (networking::wifi::internal::mdns_started) { 63 MDNS.end(); 64 networking::wifi::internal::mdns_started = false; 65 } 66 67 if (WiFi.isConnected() && MDNS.begin(hostname)) { 68 networking::wifi::internal::configureMdnsServices(hostname); 69 networking::wifi::internal::mdns_started = true; 70 } 71 } 72 73 bool networking::wifi::sta::connect() { 74 WifiConnectCommand command = { 75 .request = { 76 .ssid = nullptr, 77 .password = nullptr, 78 .enable_ap_fallback = false, 79 }, 80 .result = {}, 81 }; 82 return networking::wifi::connect(&command); 83 }