mirror of
https://github.com/alexhopeoconnor/firmware.git
synced 2026-10-19 01:41:30 +10:00
* Add missed include * Another Warning fix * Add another HAS_SCREEN * Namespace fixes * Removed depricated destination types and re-factored destination screen * Get rid of Arduino Strings * Clean up after Copilot * SixthLine Def, Screen Rename Added Sixth Line Definition Screen Rename, and Automatic Line Adjustment * Consistency is hard - fixed "Sixth" * System Frame Updates Adjusted line construction to ensure we fit maximum content per screen. * Fix up notifications * Add a couple more ifdef HAS_SCREEN lines * Add screen->isOverlayBannerShowing() * Don't forget the invert! * Adjust Nodelist Center Divider Adjust Nodelist Center Divider * Fix variable casting * Fix entryText variable as empty before update to fix validation * Altitude is int32_t * Update PowerTelemetry to have correct data type * Fix cppcheck warnings (#6945) * Fix cppcheck warnings * Adjust logic in Power.cpp for power sensor --------- Co-authored-by: Jason P <applewiz@mac.com> * More pixel wrangling so things line up NodeList edition * Adjust NodeList alignments and plumb some background padding for a possible title fix * Better alignment for banner notifications * Move title into drawCommonHeader; initial screen tested * Fonts make spacing items difficult * Improved beeping booping and other buzzer based feedback (#6947) * Improved beeping booping and other buzzer based feedback * audible button feedback (#6949) * Refactor --------- Co-authored-by: todd-herbert <herbert.todd@gmail.com> * Sandpapered the corners of the notification popup * Finalize drawCommonHeader migration * Update Title of Favorite Node Screens * Update node metric alignment on LoRa screen * Update the border for popups to separate it from background * Update PaxcounterModule.cpp with CommonHeader * Update WiFi screen with CommonHeader and related data reflow * It was not, in fact, pointing up * Fix build on wismeshtap * T-deck trackball debounce * Fix uptime on Device Focused page to actually detail * Update Sys screen for new uptime, add label to Freq/Chan on LoRa * Don't display DOP any longer, make Uptime consistent * Revert Uptime change on Favorites, Apply to Device Focused * Label the satelite number to avoid confusion * Boop boop boop boop * Correct GPS positioning and string consistency across strings for GPS * Fix GPS text alignment * Enable canned messages by default * Don't wake screen on new nodes * Cannedmessage list emote support added * Fn+e emote picker for freetext screen * Actually block CannedInput actions while display is shown * Add selection menu to bannerOverlay * Off by one * Move to unified text layouts and spacing * Still my Fav without an "e" * Fully remove EVENT_NODEDB_UPDATED * Simply LoRa screen * Make some char pointers const to fix compilation on native targets * Update drawCompassNorth to include radius * Fix warning * button thread cleanup * Pull OneButton handling from PowerFSM and add MUI switch (#6973) * Trunk * Onebutton Menu Support * Add temporary clock icon * Add gps location to fsi * Banner message state reset * Cast to char to satisfy compiler * Better fast handling of input during banner * Fix warning * Derp * oops * Update ref * Wire buzzer_mode * remove legacy string->print() * Only init screen if one found * Unsigned Char * More buttonThread cleaning * screen.cpp button handling cleanup * The Great Event Rename of 2025 * Fix the Radiomaster * Missed trackball type change * Remove unused function * Make ButtonThread an InputBroker * Coffee hadn't kicked in yet * Add clock icon for Navigation Bar * Restore clock screen definition code - whoops * ExternalNotifications now observe inputBroker * Clock rework (#6992) * Move Clock bits into ClockRenderer space * Rework clock into all device navigation * T-Watch Actually Builds Different * Compile fix --------- Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> * Add AM/PM to Digital Clock * Flip Seconds and AM/PM on Clock Display * Tik-tok pixels are hard * Fix builds on Thinknode M1 * Check for GPS and don't crash * Don't endif til the end * Rework the OneButton thread to be much less of a mess. (#6997) * Rework the OneButton thread to be much less of a mess. And break lots of targets temporarily * Update src/input/ButtonThread.h Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix GPS toggle * Send the shutdown event, not just the kbchar * Honor the back button in a notificaiton popup * Draw the right size box for popup with options * Try to un-break all the things --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * 24-hour Clock Should have leading zero, but not 12-hour * Fixup some compile errors * Add intRoutine to ButtonThread init, to get more responsive user button back * Add Timezone picker * Fix Warning * Optionally set the initial selection for the chooser popup * Make back buttons work in canned messages * Drop the wrapper classes * LonPressTime now configurable * Clock Frame can not longer be blank; just add valid time * Back buttons everywhere! * Key Verification confirm banner * Make Elecrow M* top button a back button * Add settings saves * EInk responsiveness fixes * Linux Input Fixes * Add Native Trackball/Joystick support, and move UserButton to Input * No Flight Stick Mode * Send input event * Add Channel Utilization to Device Focused frame * Don't shift screens when we draw new ones * Add showOverlayBanner arguments to no-op * trunk * Default Native trackball to NC * Fix crash in simulator mode * Add longLong button press * Get the args right * Adjust Bluetooth Pairing Screen to account for bottom navigation. * Trackball everywhere, and unPhone buttons * Remap visionmaster secondary button to TB_UP * Kill ScanAndSelect * trunk * No longer need the canned messages input filter * All Canned All the time * Fix stm32 compile error regarding inputBroker * Unify tft lineheights (#7033) * Create variable line heights based upon SCREEN_HEIGHT * Refactor textPositions into method -> getTextPositions * Update SharedUIDisplay.h --------- Co-authored-by: Jason P <applewiz@mac.com> * Adjust top distance for larger displays * Adjust icon sizes for larger displays * Fix Paxcounter compile errors after code updates * Pixel wrangling to make larger screens fit better * Alert frame has precedence over banner -- for now * Unify on ALT_BUTTON * Align AM/PM to the digit, not the segment on larger displays * Move some global pin defines into configuration.h * Scaffolding for BMM150 9-axis gyro * Alt button behavior * Don't add the blank GPS frames without HAS_GPS * EVENT_NODEDB_UPDATED has been retired * Clean out LOG_WARN messages from debugging * Add dismiss message function * Minor buttonThread cleanup * Add BMM150 support * Clean up last warning from dev * Simplify bmm150 init return logic * Add option to reply to messages * Add minimal menu upon selecting home screen * Move Messages to slot 2, rename GPS to Position, move variables nearer functional usage in Screen.cpp * Properly dismiss message * T-Deck Trackball press is not user button * Add select on favorite frame to launch cannedMessage DM * Minor wording change * Less capital letters * Fix empty message check, time isn't reliable * drop dead code * Make UIRenderer a static class instead of namespace * Fix the select on favorite * Check if message is empty early and then 'return' * Add kb_found, and show the option to launch freetype if appropriate * Ignore impossible touchscreen touches * Auto scroll fix * Move linebreak after "from" for banners to maximize screen usage. * Center "No messages to show" on Message frame * Start consolidating buzzer behavior * Fixed signed / unsigned warning * Cast second parameter of max() to make some targets happy * Cast kbchar to (char) to make arduino string happy * Shorten the notice of "No messages" * Add buzzer mode chooser * Add regionPicker to Lora icon * Reduce line spacing and reorder Position screen to resolve overlapping issues * Update message titles, fix GPS icons, add Back options * Leftover boops * Remove chirp * Make the region selection dismissable when a region is already set * Add read-aloud functionality on messages w/ esp8266sam * "Last Heard" is a better label * tweak the beep * 5 options * properly tear down freetext upon cancel * de-convelute canned messages just a bit * Correct height of Mail icon in navigation bar * Remove unused warning * Consolidate time methods into TimeFormatters * Oops * Change LoRa Picker Cancel to Back * Tweak selection characters on Banner * Message render not scrolling on 5th line * More fixes for message scrolling * Remove the safety next on text overflow - we found that root cause * Add pin definitions to fix compilation for obscure target * Don't let the touchscreen send unitialized kbchar values * Make virtual KB just a bit quicker * No more double tap, swipe! * Left is left, and Right is right * Update horizontal lightning bolt design * Move from solid to dashed separator for Message Frame * Single emote feature fix * Manually sort overlapping elements for now * Freetext and clearer choices * Fix ESP32 InkHUD builds on the unify-tft branch (#7087) * Remove BaseUI branding * Capitalization is fun * Revert Meshtastic Boot Frame Changes * Add ANZ_433 LoRa region to picker * Update settings.json --------- Co-authored-by: HarukiToreda <116696711+HarukiToreda@users.noreply.github.com> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Jason P <applewiz@mac.com> Co-authored-by: todd-herbert <herbert.todd@gmail.com> Co-authored-by: Thomas Göttgens <tgoettgens@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
508 lines
16 KiB
C++
508 lines
16 KiB
C++
#include "configuration.h"
|
|
#if HAS_WIFI
|
|
#include "NodeDB.h"
|
|
#include "RTC.h"
|
|
#include "concurrency/Periodic.h"
|
|
#include "mesh/wifi/WiFiAPClient.h"
|
|
|
|
#include "main.h"
|
|
#include "mesh/api/WiFiServerAPI.h"
|
|
#include "target_specific.h"
|
|
#include <WiFi.h>
|
|
|
|
#if HAS_ETHERNET && defined(USE_WS5500)
|
|
#include <ETHClass2.h>
|
|
#define ETH ETH2
|
|
#endif // HAS_ETHERNET
|
|
|
|
#include <WiFiUdp.h>
|
|
#ifdef ARCH_ESP32
|
|
#if !MESHTASTIC_EXCLUDE_WEBSERVER
|
|
#include "mesh/http/WebServer.h"
|
|
#endif
|
|
#include <ESPmDNS.h>
|
|
#include <esp_wifi.h>
|
|
static void WiFiEvent(WiFiEvent_t event);
|
|
#elif defined(ARCH_RP2040)
|
|
#include <SimpleMDNS.h>
|
|
#endif
|
|
|
|
#ifndef DISABLE_NTP
|
|
#include "Throttle.h"
|
|
#include <NTPClient.h>
|
|
#endif
|
|
|
|
using namespace concurrency;
|
|
|
|
// NTP
|
|
WiFiUDP ntpUDP;
|
|
|
|
#ifndef DISABLE_NTP
|
|
NTPClient timeClient(ntpUDP, config.network.ntp_server);
|
|
#endif
|
|
|
|
uint8_t wifiDisconnectReason = 0;
|
|
|
|
// Stores our hostname
|
|
char ourHost[16];
|
|
|
|
// To replace blocking wifi connect delay with a non-blocking sleep
|
|
static unsigned long wifiReconnectStartMillis = 0;
|
|
static bool wifiReconnectPending = false;
|
|
|
|
bool APStartupComplete = 0;
|
|
|
|
unsigned long lastrun_ntp = 0;
|
|
|
|
bool needReconnect = true; // If we create our reconnector, run it once at the beginning
|
|
bool isReconnecting = false; // If we are currently reconnecting
|
|
|
|
WiFiUDP syslogClient;
|
|
Syslog syslog(syslogClient);
|
|
|
|
Periodic *wifiReconnect;
|
|
|
|
#ifdef USE_WS5500
|
|
// Startup Ethernet
|
|
bool initEthernet()
|
|
{
|
|
if ((config.network.eth_enabled) && (ETH.begin(ETH_PHY_W5500, 1, ETH_CS_PIN, ETH_INT_PIN, ETH_RST_PIN, SPI3_HOST,
|
|
ETH_SCLK_PIN, ETH_MISO_PIN, ETH_MOSI_PIN))) {
|
|
WiFi.onEvent(WiFiEvent);
|
|
#if !MESHTASTIC_EXCLUDE_WEBSERVER
|
|
createSSLCert(); // For WebServer
|
|
#endif
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
static void onNetworkConnected()
|
|
{
|
|
if (!APStartupComplete) {
|
|
// Start web server
|
|
LOG_INFO("Start network services");
|
|
|
|
// start mdns
|
|
if (!MDNS.begin("Meshtastic")) {
|
|
LOG_ERROR("Error setting up MDNS responder!");
|
|
} else {
|
|
LOG_INFO("mDNS Host: Meshtastic.local");
|
|
MDNS.addService("meshtastic", "tcp", SERVER_API_DEFAULT_PORT);
|
|
#ifdef ARCH_ESP32
|
|
MDNS.addService("http", "tcp", 80);
|
|
MDNS.addService("https", "tcp", 443);
|
|
// ESP32 prints obtained IP address in WiFiEvent
|
|
#elif defined(ARCH_RP2040)
|
|
// ARCH_RP2040 does not support HTTPS
|
|
LOG_INFO("Obtained IP address: %s", WiFi.localIP().toString().c_str());
|
|
#endif
|
|
}
|
|
|
|
#ifndef DISABLE_NTP
|
|
LOG_INFO("Start NTP time client");
|
|
timeClient.begin();
|
|
timeClient.setUpdateInterval(60 * 60); // Update once an hour
|
|
#endif
|
|
|
|
if (config.network.rsyslog_server[0]) {
|
|
LOG_INFO("Start Syslog client");
|
|
// Defaults
|
|
int serverPort = 514;
|
|
const char *serverAddr = config.network.rsyslog_server;
|
|
String server = String(serverAddr);
|
|
int delimIndex = server.indexOf(':');
|
|
if (delimIndex > 0) {
|
|
String port = server.substring(delimIndex + 1, server.length());
|
|
server[delimIndex] = 0;
|
|
serverPort = port.toInt();
|
|
serverAddr = server.c_str();
|
|
}
|
|
syslog.server(serverAddr, serverPort);
|
|
syslog.deviceHostname(getDeviceName());
|
|
syslog.appName("Meshtastic");
|
|
syslog.defaultPriority(LOGLEVEL_USER);
|
|
syslog.enable();
|
|
}
|
|
|
|
#if defined(ARCH_ESP32) && !MESHTASTIC_EXCLUDE_WEBSERVER
|
|
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) {
|
|
initWebServer();
|
|
}
|
|
#endif
|
|
#if !MESHTASTIC_EXCLUDE_SOCKETAPI
|
|
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) {
|
|
initApiServer();
|
|
}
|
|
#endif
|
|
APStartupComplete = true;
|
|
}
|
|
|
|
#if HAS_UDP_MULTICAST
|
|
if (udpHandler && config.network.enabled_protocols & meshtastic_Config_NetworkConfig_ProtocolFlags_UDP_BROADCAST) {
|
|
udpHandler->start();
|
|
}
|
|
#endif
|
|
}
|
|
|
|
static int32_t reconnectWiFi()
|
|
{
|
|
const char *wifiName = config.network.wifi_ssid;
|
|
const char *wifiPsw = config.network.wifi_psk;
|
|
|
|
if (config.network.wifi_enabled && needReconnect) {
|
|
|
|
if (!*wifiPsw) // Treat empty password as no password
|
|
wifiPsw = NULL;
|
|
|
|
needReconnect = false;
|
|
isReconnecting = true;
|
|
|
|
// Make sure we clear old connection credentials
|
|
#ifdef ARCH_ESP32
|
|
WiFi.disconnect(false, true);
|
|
#elif defined(ARCH_RP2040)
|
|
WiFi.disconnect(false);
|
|
#endif
|
|
LOG_INFO("Reconnecting to WiFi access point %s", wifiName);
|
|
|
|
// Start the non-blocking wait for 5 seconds
|
|
wifiReconnectStartMillis = millis();
|
|
wifiReconnectPending = true;
|
|
// Do not attempt to connect yet, wait for the next invocation
|
|
return 5000; // Schedule next check soon
|
|
}
|
|
|
|
// Check if we are ready to proceed with the WiFi connection after the 5s wait
|
|
if (wifiReconnectPending) {
|
|
if (millis() - wifiReconnectStartMillis >= 5000) {
|
|
if (!WiFi.isConnected()) {
|
|
#ifdef CONFIG_IDF_TARGET_ESP32C3
|
|
WiFi.mode(WIFI_MODE_NULL);
|
|
WiFi.useStaticBuffers(true);
|
|
WiFi.mode(WIFI_STA);
|
|
#endif
|
|
WiFi.begin(wifiName, wifiPsw);
|
|
}
|
|
isReconnecting = false;
|
|
wifiReconnectPending = false;
|
|
} else {
|
|
// Still waiting for 5s to elapse
|
|
return 100; // Check again soon
|
|
}
|
|
}
|
|
|
|
#ifndef DISABLE_NTP
|
|
if (WiFi.isConnected() && (!Throttle::isWithinTimespanMs(lastrun_ntp, 43200000) || (lastrun_ntp == 0))) { // every 12 hours
|
|
LOG_DEBUG("Update NTP time from %s", config.network.ntp_server);
|
|
if (timeClient.update()) {
|
|
LOG_DEBUG("NTP Request Success - Setting RTCQualityNTP if needed");
|
|
|
|
struct timeval tv;
|
|
tv.tv_sec = timeClient.getEpochTime();
|
|
tv.tv_usec = 0;
|
|
|
|
perhapsSetRTC(RTCQualityNTP, &tv);
|
|
lastrun_ntp = millis();
|
|
} else {
|
|
LOG_DEBUG("NTP Update failed");
|
|
}
|
|
}
|
|
#endif
|
|
|
|
if (config.network.wifi_enabled && !WiFi.isConnected()) {
|
|
#ifdef ARCH_RP2040 // (ESP32 handles this in WiFiEvent)
|
|
needReconnect = APStartupComplete;
|
|
#endif
|
|
return 1000; // check once per second
|
|
} else {
|
|
#ifdef ARCH_RP2040
|
|
onNetworkConnected(); // will only do anything once
|
|
#endif
|
|
return 300000; // every 5 minutes
|
|
}
|
|
}
|
|
|
|
bool isWifiAvailable()
|
|
{
|
|
|
|
if (config.network.wifi_enabled && (config.network.wifi_ssid[0])) {
|
|
return true;
|
|
#ifdef USE_WS5500
|
|
} else if (config.network.eth_enabled) {
|
|
return true;
|
|
#endif
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Disable WiFi
|
|
void deinitWifi()
|
|
{
|
|
LOG_INFO("WiFi deinit");
|
|
|
|
if (isWifiAvailable()) {
|
|
#ifdef ARCH_ESP32
|
|
WiFi.disconnect(true, false);
|
|
#elif defined(ARCH_RP2040)
|
|
WiFi.disconnect(true);
|
|
#endif
|
|
WiFi.mode(WIFI_OFF);
|
|
LOG_INFO("WiFi Turned Off");
|
|
// WiFi.printDiag(Serial);
|
|
}
|
|
}
|
|
|
|
// Startup WiFi
|
|
bool initWifi()
|
|
{
|
|
if (config.network.wifi_enabled && config.network.wifi_ssid[0]) {
|
|
|
|
const char *wifiName = config.network.wifi_ssid;
|
|
const char *wifiPsw = config.network.wifi_psk;
|
|
|
|
#ifndef ARCH_RP2040
|
|
#if !MESHTASTIC_EXCLUDE_WEBSERVER
|
|
createSSLCert(); // For WebServer
|
|
#endif
|
|
WiFi.persistent(false); // Disable flash storage for WiFi credentials
|
|
#endif
|
|
if (!*wifiPsw) // Treat empty password as no password
|
|
wifiPsw = NULL;
|
|
|
|
if (*wifiName) {
|
|
uint8_t dmac[6];
|
|
getMacAddr(dmac);
|
|
snprintf(ourHost, sizeof(ourHost), "Meshtastic-%02x%02x", dmac[4], dmac[5]);
|
|
|
|
WiFi.mode(WIFI_STA);
|
|
WiFi.setHostname(ourHost);
|
|
|
|
if (config.network.address_mode == meshtastic_Config_NetworkConfig_AddressMode_STATIC &&
|
|
config.network.ipv4_config.ip != 0) {
|
|
#ifdef ARCH_ESP32
|
|
WiFi.config(config.network.ipv4_config.ip, config.network.ipv4_config.gateway, config.network.ipv4_config.subnet,
|
|
config.network.ipv4_config.dns);
|
|
#elif defined(ARCH_RP2040)
|
|
WiFi.config(config.network.ipv4_config.ip, config.network.ipv4_config.dns, config.network.ipv4_config.gateway,
|
|
config.network.ipv4_config.subnet);
|
|
#endif
|
|
}
|
|
#ifdef ARCH_ESP32
|
|
WiFi.onEvent(WiFiEvent);
|
|
WiFi.setAutoReconnect(true);
|
|
WiFi.setSleep(false);
|
|
|
|
// This is needed to improve performance.
|
|
esp_wifi_set_ps(WIFI_PS_NONE); // Disable radio power saving
|
|
|
|
WiFi.onEvent(
|
|
[](WiFiEvent_t event, WiFiEventInfo_t info) {
|
|
LOG_WARN("WiFi lost connection. Reason: %d", info.wifi_sta_disconnected.reason);
|
|
|
|
/*
|
|
If we are disconnected from the AP for some reason,
|
|
save the error code.
|
|
|
|
For a reference to the codes:
|
|
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/wifi.html#wi-fi-reason-code
|
|
*/
|
|
wifiDisconnectReason = info.wifi_sta_disconnected.reason;
|
|
},
|
|
WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
|
|
#endif
|
|
LOG_DEBUG("JOINING WIFI soon: ssid=%s", wifiName);
|
|
wifiReconnect = new Periodic("WifiConnect", reconnectWiFi);
|
|
}
|
|
return true;
|
|
} else {
|
|
LOG_INFO("Not using WIFI");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
#ifdef ARCH_ESP32
|
|
// Called by the Espressif SDK to
|
|
static void WiFiEvent(WiFiEvent_t event)
|
|
{
|
|
LOG_DEBUG("Network-Event %d: ", event);
|
|
|
|
switch (event) {
|
|
case ARDUINO_EVENT_WIFI_READY:
|
|
LOG_INFO("WiFi interface ready");
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_SCAN_DONE:
|
|
LOG_INFO("Completed scan for access points");
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_STA_START:
|
|
LOG_INFO("WiFi station started");
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_STA_STOP:
|
|
LOG_INFO("WiFi station stopped");
|
|
syslog.disable();
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_STA_CONNECTED:
|
|
LOG_INFO("Connected to access point");
|
|
#ifdef WIFI_LED
|
|
digitalWrite(WIFI_LED, HIGH);
|
|
#endif
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
|
|
LOG_INFO("Disconnected from WiFi access point");
|
|
#ifdef WIFI_LED
|
|
digitalWrite(WIFI_LED, LOW);
|
|
#endif
|
|
if (!isReconnecting) {
|
|
WiFi.disconnect(false, true);
|
|
syslog.disable();
|
|
needReconnect = true;
|
|
wifiReconnect->setIntervalFromNow(1000);
|
|
}
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE:
|
|
LOG_INFO("Authentication mode of access point has changed");
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_STA_GOT_IP:
|
|
LOG_INFO("Obtained IP address: %s", WiFi.localIP().toString().c_str());
|
|
onNetworkConnected();
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
|
|
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0)
|
|
LOG_INFO("Obtained Local IP6 address: %s", WiFi.linkLocalIPv6().toString().c_str());
|
|
LOG_INFO("Obtained GlobalIP6 address: %s", WiFi.globalIPv6().toString().c_str());
|
|
#else
|
|
LOG_INFO("Obtained IP6 address: %s", WiFi.localIPv6().toString().c_str());
|
|
#endif
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_STA_LOST_IP:
|
|
LOG_INFO("Lost IP address and IP address is reset to 0");
|
|
if (!isReconnecting) {
|
|
WiFi.disconnect(false, true);
|
|
syslog.disable();
|
|
needReconnect = true;
|
|
wifiReconnect->setIntervalFromNow(1000);
|
|
}
|
|
break;
|
|
case ARDUINO_EVENT_WPS_ER_SUCCESS:
|
|
LOG_INFO("WiFi Protected Setup (WPS): succeeded in enrollee mode");
|
|
break;
|
|
case ARDUINO_EVENT_WPS_ER_FAILED:
|
|
LOG_INFO("WiFi Protected Setup (WPS): failed in enrollee mode");
|
|
break;
|
|
case ARDUINO_EVENT_WPS_ER_TIMEOUT:
|
|
LOG_INFO("WiFi Protected Setup (WPS): timeout in enrollee mode");
|
|
break;
|
|
case ARDUINO_EVENT_WPS_ER_PIN:
|
|
LOG_INFO("WiFi Protected Setup (WPS): pin code in enrollee mode");
|
|
break;
|
|
case ARDUINO_EVENT_WPS_ER_PBC_OVERLAP:
|
|
LOG_INFO("WiFi Protected Setup (WPS): push button overlap in enrollee mode");
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_AP_START:
|
|
LOG_INFO("WiFi access point started");
|
|
#ifdef WIFI_LED
|
|
digitalWrite(WIFI_LED, HIGH);
|
|
#endif
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_AP_STOP:
|
|
LOG_INFO("WiFi access point stopped");
|
|
#ifdef WIFI_LED
|
|
digitalWrite(WIFI_LED, LOW);
|
|
#endif
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_AP_STACONNECTED:
|
|
LOG_INFO("Client connected");
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED:
|
|
LOG_INFO("Client disconnected");
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
|
|
LOG_INFO("Assigned IP address to client");
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED:
|
|
LOG_INFO("Received probe request");
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_AP_GOT_IP6:
|
|
LOG_INFO("IPv6 is preferred");
|
|
break;
|
|
case ARDUINO_EVENT_WIFI_FTM_REPORT:
|
|
LOG_INFO("Fast Transition Management report");
|
|
break;
|
|
case ARDUINO_EVENT_ETH_START:
|
|
LOG_INFO("Ethernet started");
|
|
break;
|
|
case ARDUINO_EVENT_ETH_STOP:
|
|
syslog.disable();
|
|
LOG_INFO("Ethernet stopped");
|
|
break;
|
|
case ARDUINO_EVENT_ETH_CONNECTED:
|
|
LOG_INFO("Ethernet connected");
|
|
break;
|
|
case ARDUINO_EVENT_ETH_DISCONNECTED:
|
|
syslog.disable();
|
|
LOG_INFO("Ethernet disconnected");
|
|
break;
|
|
case ARDUINO_EVENT_ETH_GOT_IP:
|
|
#ifdef USE_WS5500
|
|
LOG_INFO("Obtained IP address: %s, %u Mbps, %s", ETH.localIP().toString().c_str(), ETH.linkSpeed(),
|
|
ETH.fullDuplex() ? "FULL_DUPLEX" : "HALF_DUPLEX");
|
|
onNetworkConnected();
|
|
#endif
|
|
break;
|
|
case ARDUINO_EVENT_ETH_GOT_IP6:
|
|
#ifdef USE_WS5500
|
|
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0)
|
|
LOG_INFO("Obtained Local IP6 address: %s", ETH.linkLocalIPv6().toString().c_str());
|
|
LOG_INFO("Obtained GlobalIP6 address: %s", ETH.globalIPv6().toString().c_str());
|
|
#else
|
|
LOG_INFO("Obtained IP6 address: %s", ETH.localIPv6().toString().c_str());
|
|
#endif
|
|
#endif
|
|
break;
|
|
case ARDUINO_EVENT_SC_SCAN_DONE:
|
|
LOG_INFO("SmartConfig: Scan done");
|
|
break;
|
|
case ARDUINO_EVENT_SC_FOUND_CHANNEL:
|
|
LOG_INFO("SmartConfig: Found channel");
|
|
break;
|
|
case ARDUINO_EVENT_SC_GOT_SSID_PSWD:
|
|
LOG_INFO("SmartConfig: Got SSID and password");
|
|
break;
|
|
case ARDUINO_EVENT_SC_SEND_ACK_DONE:
|
|
LOG_INFO("SmartConfig: Send ACK done");
|
|
break;
|
|
case ARDUINO_EVENT_PROV_INIT:
|
|
LOG_INFO("Provision Init");
|
|
break;
|
|
case ARDUINO_EVENT_PROV_DEINIT:
|
|
LOG_INFO("Provision Stopped");
|
|
break;
|
|
case ARDUINO_EVENT_PROV_START:
|
|
LOG_INFO("Provision Started");
|
|
break;
|
|
case ARDUINO_EVENT_PROV_END:
|
|
LOG_INFO("Provision End");
|
|
break;
|
|
case ARDUINO_EVENT_PROV_CRED_RECV:
|
|
LOG_INFO("Provision Credentials received");
|
|
break;
|
|
case ARDUINO_EVENT_PROV_CRED_FAIL:
|
|
LOG_INFO("Provision Credentials failed");
|
|
break;
|
|
case ARDUINO_EVENT_PROV_CRED_SUCCESS:
|
|
LOG_INFO("Provision Credentials success");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
uint8_t getWifiDisconnectReason()
|
|
{
|
|
return wifiDisconnectReason;
|
|
}
|
|
#endif // HAS_WIFI
|