diff --git a/src/platform/ESP32/ConfigurationManagerImpl.cpp b/src/platform/ESP32/ConfigurationManagerImpl.cpp index 2008bfc5d0ecf0..ee2ff02b2e1c86 100644 --- a/src/platform/ESP32/ConfigurationManagerImpl.cpp +++ b/src/platform/ESP32/ConfigurationManagerImpl.cpp @@ -102,9 +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_NOT_IMPLEMENTED; + } } - bool ConfigurationManagerImpl::_CanFactoryReset() { // TODO: query the application to determine if factory reset is allowed. 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);