Skip to content

Commit ad8f66a

Browse files
committed
More Network tidy
1 parent 9956d18 commit ad8f66a

File tree

4 files changed

+33
-37
lines changed

4 files changed

+33
-37
lines changed

wled00/json.cpp

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -912,14 +912,6 @@ String restartCode2Info(esp_reset_reason_t reason) {
912912
#endif
913913
// end WLEDMM
914914

915-
// Helper function to format the MAC address (BSSID) into a string
916-
String format_mac_address(const uint8_t* mac) {
917-
char mac_str[18];
918-
snprintf(mac_str, sizeof(mac_str), "%02X:%02X:%02X:%02X:%02X:%02X",
919-
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
920-
return String(mac_str);
921-
}
922-
923915
void serializeInfo(JsonObject root)
924916
{
925917
root[F("ver")] = versionString;
@@ -1039,7 +1031,7 @@ void serializeInfo(JsonObject root)
10391031
JsonObject wifi_obj = network_info.createNestedObject("wifi");
10401032
// Get local Wi-Fi MAC
10411033
if (esp_wifi_get_mac(WIFI_IF_STA, mac) == ESP_OK) {
1042-
wifi_obj["mac"] = format_mac_address(mac);
1034+
wifi_obj["mac"] = Network.format_mac_address(mac);
10431035
}
10441036
// Get local Wi-Fi IP
10451037
if (esp_netif_get_ip_info(wifi_netif, &ip_info) == ESP_OK && ip_info.ip.addr != 0) {
@@ -1053,7 +1045,7 @@ void serializeInfo(JsonObject root)
10531045
if (esp_wifi_sta_get_ap_info(&ap_info) == ESP_OK) {
10541046
JsonObject ap_obj = wifi_obj.createNestedObject("ap");
10551047
ap_obj["ssid"] = (char*)ap_info.ssid;
1056-
ap_obj["bssid"] = format_mac_address(ap_info.bssid);
1048+
ap_obj["bssid"] = Network.format_mac_address(ap_info.bssid);
10571049
ap_obj["rssi"] = ap_info.rssi;
10581050
ap_obj["signal"] = getSignalQuality(ap_info.rssi);
10591051
ap_obj["channel"] = ap_info.primary;
@@ -1165,7 +1157,7 @@ void serializeInfo(JsonObject root)
11651157
if (eth_netif && eth_handle) {
11661158
JsonObject eth_obj = network_info.createNestedObject("ethernet");
11671159
if (esp_netif_get_mac(eth_netif, mac) == ESP_OK) {
1168-
eth_obj["mac"] = format_mac_address(mac);
1160+
eth_obj["mac"] = Network.format_mac_address(mac);
11691161
}
11701162
if (esp_netif_get_ip_info(eth_netif, &ip_info) == ESP_OK && ip_info.ip.addr != 0) {
11711163
char ip_str[16];

wled00/src/dependencies/network/Network.cpp

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,13 @@ IPAddress NetworkClass::gatewayIP() {
4848
}
4949

5050
void NetworkClass::localMAC(uint8_t* MAC) {
51-
5251
memset(MAC, 0, 6);
53-
5452
esp_netif_t* default_netif = esp_netif_get_default_netif();
5553
if (default_netif == NULL) {
5654
return; // No default interface is active
5755
}
58-
5956
esp_netif_t* wifi_netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");
6057
esp_netif_t* eth_netif = esp_netif_get_handle_from_ifkey("ETH_DEF");
61-
6258
if (default_netif == wifi_netif) {
6359
esp_wifi_get_mac(WIFI_IF_STA, MAC);
6460
} else {
@@ -113,6 +109,32 @@ IPAddress NetworkClass::hostByName(const char* hostname) {
113109
return INADDR_NONE;
114110
}
115111

112+
String NetworkClass::format_mac_address(const uint8_t* mac) {
113+
char mac_str[18];
114+
snprintf(mac_str, sizeof(mac_str), "%02X:%02X:%02X:%02X:%02X:%02X",
115+
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
116+
return String(mac_str);
117+
}
118+
119+
esp_err_t NetworkClass::get_hardware_mac_address(uint8_t* mac_addr) {
120+
// This gets the MAC from the hardware, before any network init happens.
121+
esp_err_t err = esp_eth_ioctl(eth_handle, ETH_CMD_G_MAC_ADDR, mac_addr);
122+
if (err == ESP_OK) {
123+
return ESP_OK;
124+
}
125+
err = esp_wifi_get_mac(WIFI_IF_STA, mac_addr);
126+
return err;
127+
}
128+
129+
String NetworkClass::getEscapedMac() {
130+
uint8_t mac_addr[6];
131+
this->get_hardware_mac_address(mac_addr);
132+
String formatted_mac = this->format_mac_address(mac_addr);
133+
formatted_mac.replace(":", "");
134+
formatted_mac.toLowerCase();
135+
return formatted_mac;
136+
}
137+
116138
bool NetworkClass::isEthernet() {
117139
return eth_is_connected;
118140
}

wled00/src/dependencies/network/Network.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class NetworkClass
2222
bool isConnected();
2323
bool isEthernet();
2424
IPAddress hostByName(const char* hostname);
25+
String format_mac_address(const uint8_t* mac);
26+
esp_err_t get_hardware_mac_address(uint8_t* mac_addr);
27+
String getEscapedMac();
2528
};
2629

2730
#ifdef ARDUINO_ARCH_ESP32

wled00/wled.cpp

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,28 +1202,7 @@ void WLED::setup()
12021202
USER_PRINT(F("done Mounting FS; "));
12031203
USER_PRINT(((fsBytesTotal-fsBytesUsed)/1024)); USER_PRINTLN(F(" kB free.\n"));
12041204

1205-
// generate module IDs must be done before AP setup
1206-
#ifdef ARDUINO_ARCH_ESP32P4
1207-
#ifdef WLED_USE_ETHERNET
1208-
char buf[18];
1209-
uint8_t mac_addr[6];
1210-
esp_eth_ioctl(eth_handle, ETH_CMD_G_MAC_ADDR, mac_addr);
1211-
sprintf(buf,"%02X:%02X:%02X:%02X:%02X:%02X", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
1212-
USER_PRINTF("Ethernet Mac Address: %02X:%02X:%02X:%02X:%02X:%02X\n", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
1213-
escapedMac = buf;
1214-
#else
1215-
uint8_t mymac[6];
1216-
char buf[18];
1217-
esp_err_t result = esp_wifi_get_mac(WIFI_IF_STA, mymac);
1218-
sprintf(buf,"%02X:%02X:%02X:%02X:%02X:%02X", mymac[0], mymac[1], mymac[2], mymac[3], mymac[4], mymac[5]);
1219-
USER_PRINTF("WiFi Mac Address: %02X:%02X:%02X:%02X:%02X:%02X\n", mymac[0], mymac[1], mymac[2], mymac[3], mymac[4], mymac[5]);
1220-
escapedMac = buf;
1221-
#endif
1222-
#else
1223-
escapedMac = WiFi.macAddress();
1224-
#endif
1225-
escapedMac.replace(":", "");
1226-
escapedMac.toLowerCase();
1205+
escapedMac = Network.getEscapedMac();
12271206

12281207
WLED_SET_AP_SSID(); // otherwise it is empty on first boot until config is saved
12291208

0 commit comments

Comments
 (0)