From 0ac22484c88cd3eae37da9b6138e92202a54220e Mon Sep 17 00:00:00 2001 From: WanqQixiang Date: Mon, 21 Jun 2021 15:09:01 +0800 Subject: [PATCH] fix get wrong MAC on SoftAP mode --- .../ESP32/ConfigurationManagerImpl.cpp | 23 ++++++++++++++++++- src/platform/ESP32/ConfigurationManagerImpl.h | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/platform/ESP32/ConfigurationManagerImpl.cpp b/src/platform/ESP32/ConfigurationManagerImpl.cpp index 2008bfc5d0ecf0..8e2ac4c8c3819e 100644 --- a/src/platform/ESP32/ConfigurationManagerImpl.cpp +++ b/src/platform/ESP32/ConfigurationManagerImpl.cpp @@ -102,7 +102,28 @@ CHIP_ERROR ConfigurationManagerImpl::_Init() CHIP_ERROR ConfigurationManagerImpl::_GetPrimaryWiFiMACAddress(uint8_t * buf) { - return esp_wifi_get_mac(WIFI_IF_STA, buf); + wifi_mode_t mode; + esp_wifi_get_mode(&mode); + if ((mode == WIFI_MODE_AP) || (mode == WIFI_MODE_APSTA)) + return MapConfigError(esp_wifi_get_mac(WIFI_IF_AP, buf)); + else + return MapConfigError(esp_wifi_get_mac(WIFI_IF_STA, buf)); +} + +CHIP_ERROR ConfigurationManagerImpl::MapConfigError(esp_err_t error) +{ + switch (error) + { + case ESP_OK: + return CHIP_NO_ERROR; + case ESP_ERR_WIFI_NOT_INIT: + return CHIP_ERROR_WELL_UNINITIALIZED; + case ESP_ERR_INVALID_ARG: + case ESP_ERR_WIFI_IF: + return CHIP_ERROR_INVALID_ARGUMENT; + default: + return CHIP_ERROR_INTERNAL; + } } bool ConfigurationManagerImpl::_CanFactoryReset() diff --git a/src/platform/ESP32/ConfigurationManagerImpl.h b/src/platform/ESP32/ConfigurationManagerImpl.h index 71c30b809de453..6dc1adc7617de1 100644 --- a/src/platform/ESP32/ConfigurationManagerImpl.h +++ b/src/platform/ESP32/ConfigurationManagerImpl.h @@ -67,6 +67,7 @@ class ConfigurationManagerImpl final : public ConfigurationManager, CHIP_ERROR _GetPrimaryWiFiMACAddress(uint8_t * buf); bool _CanFactoryReset(void); void _InitiateFactoryReset(void); + CHIP_ERROR MapConfigError(esp_err_t error); CHIP_ERROR _ReadPersistedStorageValue(::chip::Platform::PersistedStorage::Key key, uint32_t & value); CHIP_ERROR _WritePersistedStorageValue(::chip::Platform::PersistedStorage::Key key, uint32_t value);