From 0dab361ed40a6c4c7a9982011970ef443691689b Mon Sep 17 00:00:00 2001 From: liyashuai Date: Fri, 11 Nov 2022 14:12:10 +0800 Subject: [PATCH] ESP32: add RegulatoryLocation and LocationCapability value init --- .../ESP32/ConfigurationManagerImpl.cpp | 48 +++++++++++++++++++ src/platform/ESP32/ConfigurationManagerImpl.h | 2 + src/platform/ESP32/ESP32Config.cpp | 1 + src/platform/ESP32/ESP32Config.h | 1 + 4 files changed, 52 insertions(+) diff --git a/src/platform/ESP32/ConfigurationManagerImpl.cpp b/src/platform/ESP32/ConfigurationManagerImpl.cpp index 5a6f548d055820..360be45c5f8ef1 100644 --- a/src/platform/ESP32/ConfigurationManagerImpl.cpp +++ b/src/platform/ESP32/ConfigurationManagerImpl.cpp @@ -159,6 +159,20 @@ CHIP_ERROR ConfigurationManagerImpl::Init() // TODO: Initialize the global GroupKeyStore object here (#1266) + if (!ESP32Config::ConfigValueExists(ESP32Config::kConfigKey_RegulatoryLocation)) + { + uint32_t location = to_underlying(chip::app::Clusters::GeneralCommissioning::RegulatoryLocationType::kIndoor); + err = WriteConfigValue(ESP32Config::kConfigKey_RegulatoryLocation, location); + SuccessOrExit(err); + } + + if (!ESP32Config::ConfigValueExists(ESP32Config::kConfigKey_LocationCapability)) + { + uint32_t location = to_underlying(chip::app::Clusters::GeneralCommissioning::RegulatoryLocationType::kIndoor); + err = WriteConfigValue(ESP32Config::kConfigKey_LocationCapability, location); + SuccessOrExit(err); + } + err = CHIP_NO_ERROR; exit: @@ -201,6 +215,40 @@ CHIP_ERROR ConfigurationManagerImpl::GetSoftwareVersion(uint32_t & softwareVer) return CHIP_NO_ERROR; } +CHIP_ERROR ConfigurationManagerImpl::GetRegulatoryLocation(uint8_t & location) +{ +#if CHIP_DISABLE_PLATFORM_KVS + return CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE; +#else // CHIP_DISABLE_PLATFORM_KVS + uint32_t value = 0; + + CHIP_ERROR err = ReadConfigValue(ESP32Config::kConfigKey_RegulatoryLocation, value); + + if (err == CHIP_NO_ERROR) + { + VerifyOrReturnError(value <= UINT8_MAX, CHIP_ERROR_INVALID_INTEGER_VALUE); + location = static_cast(value); + } + + return err; +#endif // CHIP_DISABLE_PLATFORM_KVS +} + +CHIP_ERROR ConfigurationManagerImpl::GetLocationCapability(uint8_t & location) +{ + uint32_t value = 0; + + CHIP_ERROR err = ReadConfigValue(ESP32Config::kConfigKey_LocationCapability, value); + + if (err == CHIP_NO_ERROR) + { + VerifyOrReturnError(value <= UINT8_MAX, CHIP_ERROR_INVALID_INTEGER_VALUE); + location = static_cast(value); + } + + return err; +} + CHIP_ERROR ConfigurationManagerImpl::GetPrimaryWiFiMACAddress(uint8_t * buf) { #if CHIP_DEVICE_CONFIG_ENABLE_WIFI diff --git a/src/platform/ESP32/ConfigurationManagerImpl.h b/src/platform/ESP32/ConfigurationManagerImpl.h index d7aacbb1809925..2dd15cd3e3bacf 100644 --- a/src/platform/ESP32/ConfigurationManagerImpl.h +++ b/src/platform/ESP32/ConfigurationManagerImpl.h @@ -55,6 +55,8 @@ class ConfigurationManagerImpl : public Internal::GenericConfigurationManagerImp CHIP_ERROR StoreTotalOperationalHours(uint32_t totalOperationalHours) override; CHIP_ERROR GetSoftwareVersionString(char * buf, size_t bufSize); CHIP_ERROR GetSoftwareVersion(uint32_t & softwareVer) override; + CHIP_ERROR GetRegulatoryLocation(uint8_t & location) override; + CHIP_ERROR GetLocationCapability(uint8_t & location) override; static ConfigurationManagerImpl & GetDefaultInstance(); private: diff --git a/src/platform/ESP32/ESP32Config.cpp b/src/platform/ESP32/ESP32Config.cpp index 92c8946b75fc75..86f87a9009c50e 100644 --- a/src/platform/ESP32/ESP32Config.cpp +++ b/src/platform/ESP32/ESP32Config.cpp @@ -86,6 +86,7 @@ const ESP32Config::Key ESP32Config::kConfigKey_LastUsedEpochKeyId = { kConfigNam const ESP32Config::Key ESP32Config::kConfigKey_FailSafeArmed = { kConfigNamespace_ChipConfig, "fail-safe-armed" }; const ESP32Config::Key ESP32Config::kConfigKey_WiFiStationSecType = { kConfigNamespace_ChipConfig, "sta-sec-type" }; const ESP32Config::Key ESP32Config::kConfigKey_RegulatoryLocation = { kConfigNamespace_ChipConfig, "reg-location" }; +const ESP32Config::Key ESP32Config::kConfigKey_LocationCapability = { kConfigNamespace_ChipConfig, "loc-capability"}; const ESP32Config::Key ESP32Config::kConfigKey_CountryCode = { kConfigNamespace_ChipConfig, "country-code" }; const ESP32Config::Key ESP32Config::kConfigKey_UniqueId = { kConfigNamespace_ChipConfig, "unique-id" }; diff --git a/src/platform/ESP32/ESP32Config.h b/src/platform/ESP32/ESP32Config.h index f884af85c3da46..85afc0bf37d51b 100644 --- a/src/platform/ESP32/ESP32Config.h +++ b/src/platform/ESP32/ESP32Config.h @@ -88,6 +88,7 @@ class ESP32Config static const Key kConfigKey_FailSafeArmed; static const Key kConfigKey_WiFiStationSecType; static const Key kConfigKey_RegulatoryLocation; + static const Key kConfigKey_LocationCapability; static const Key kConfigKey_CountryCode; static const Key kConfigKey_UniqueId;