From 984582b521aec3d79d2393b9caf39d76254aa781 Mon Sep 17 00:00:00 2001 From: David Schinazi Date: Sun, 22 Dec 2024 18:11:03 -0800 Subject: [PATCH] Fix MAC address initialization order --- src/jazzlights/networks/arduino_esp_wifi.cpp | 15 +++++++++------ src/jazzlights/networks/arduino_ethernet.cpp | 2 ++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/jazzlights/networks/arduino_esp_wifi.cpp b/src/jazzlights/networks/arduino_esp_wifi.cpp index 33f93fca..fda469d0 100644 --- a/src/jazzlights/networks/arduino_esp_wifi.cpp +++ b/src/jazzlights/networks/arduino_esp_wifi.cpp @@ -97,7 +97,15 @@ std::string WiFiReasonToString(uint8_t reason) { } } // namespace -ArduinoEspWiFiNetwork::ArduinoEspWiFiNetwork(const char* ssid, const char* pass) : creds_{ssid, pass} {} +ArduinoEspWiFiNetwork::ArduinoEspWiFiNetwork(const char* ssid, const char* pass) : creds_{ssid, pass} { + uint8_t macAddress[6] = {}; + if (WiFi.macAddress(&macAddress[0]) == nullptr) { + uint64_t efuseMac64 = ESP.getEfuseMac(); + if (efuseMac64 == 0) { jll_fatal("%u Wi-Fi failed to read MAC address from both Wi-Fi and EFUSE", timeMillis()); } + memcpy(macAddress, &efuseMac64, sizeof(macAddress)); + } + localDeviceId_ = NetworkDeviceId(macAddress); +} void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info) { switch (event) { @@ -163,11 +171,6 @@ NetworkStatus ArduinoEspWiFiNetwork::update(NetworkStatus status, Milliseconds c WiFi.onEvent(WiFiEvent, ARDUINO_EVENT_WIFI_STA_LOST_IP); WiFi.onEvent(WiFiEvent, ARDUINO_EVENT_WIFI_STA_DISCONNECTED); wl_status_t beginWiFiStatus = WiFi.begin(creds_.ssid, creds_.pass); - uint8_t macAddress[6] = {}; - if (WiFi.macAddress(&macAddress[0]) == nullptr) { - jll_fatal("%u Wi-Fi failed to read MAC address", timeMillis()); - } - localDeviceId_ = NetworkDeviceId(macAddress); jll_info("%u %s Wi-Fi " DEVICE_ID_FMT " begin to %s returned %s", currentTime, networkName(), DEVICE_ID_HEX(localDeviceId_), creds_.ssid, WiFiStatusToString(beginWiFiStatus).c_str()); return CONNECTING; diff --git a/src/jazzlights/networks/arduino_ethernet.cpp b/src/jazzlights/networks/arduino_ethernet.cpp index 34f113aa..5f669e53 100644 --- a/src/jazzlights/networks/arduino_ethernet.cpp +++ b/src/jazzlights/networks/arduino_ethernet.cpp @@ -36,6 +36,8 @@ std::string EthernetHardwareStatusToString(EthernetHardwareStatus hwStatus) { } // namespace ArduinoEthernetNetwork::ArduinoEthernetNetwork(NetworkDeviceId localDeviceId) : localDeviceId_(localDeviceId) { + jll_info("%u %s Starting Ethernet with MAC address " DEVICE_ID_FMT, timeMillis(), networkName(), + DEVICE_ID_HEX(localDeviceId_)); #if JL_CORE2AWS_ETHERNET // These pins work with the M5Stack Core2AWS connected to the Ethernet W5500 module. // https://docs.m5stack.com/en/core/core2_for_aws