/* * * Copyright (c) 2024 Project CHIP Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include namespace chip { namespace DeviceLayer { class StaticESP32DeviceInfoProvider : public ESP32DeviceInfoProvider { public: StaticESP32DeviceInfoProvider() = default; ~StaticESP32DeviceInfoProvider() override {} // Iterators FixedLabelIterator * IterateFixedLabel(EndpointId endpoint); SupportedLocalesIterator * IterateSupportedLocales(); SupportedCalendarTypesIterator * IterateSupportedCalendarTypes(); static StaticESP32DeviceInfoProvider & GetDefaultInstance(); struct FixedLabelEntry { EndpointId endpointId; CharSpan label; CharSpan value; }; /** * @brief API to set the supported calendar types * * @param[in] supportedCalendarTypes Span of type chip::app::Clusters::TimeFormatLocalization::CalendarTypeEnum * containing the supported calendar types. The underlying data must remain allocated throughout * the lifetime of the device, as the API does not make a copy. * * @return CHIP_ERROR indicating the success or failure of the operation. */ CHIP_ERROR SetSupportedCalendarTypes(const Span & supportedCalendarTypes) { VerifyOrReturnError(!supportedCalendarTypes.empty(), CHIP_ERROR_INVALID_ARGUMENT); mSupportedCalendarTypes = supportedCalendarTypes; return CHIP_NO_ERROR; } /** * @brief API to set the supported Locales * * @param[in] supportedLocales Span of type chip::CharSpan containing the supported locales. * The underlying data must remain allocated throughout the lifetime of the device, * as the API does not make a copy. * * @return CHIP_ERROR indicating the success or failure of the operation. */ CHIP_ERROR SetSupportedLocales(const Span & supportedLocales) { VerifyOrReturnError(!supportedLocales.empty(), CHIP_ERROR_INVALID_ARGUMENT); mSupportedLocales = supportedLocales; return CHIP_NO_ERROR; } /** * @brief API to set the fixed labels * * @param[in] fixedLabels Span of type chip::DeviceLayer::StaticESP32DeviceInfoProvider::FixedLabelEntry * containing the fixed labels for supported endpoints. * The underlying data must remain allocated throughout the lifetime of the device, * as the API does not make a copy. * * @return CHIP_ERROR indicating the success or failure of the operation. */ CHIP_ERROR SetFixedLabels(const Span & supportedFixedLabels) { VerifyOrReturnError(!supportedFixedLabels.empty(), CHIP_ERROR_INVALID_ARGUMENT); mFixedLabels = supportedFixedLabels; return CHIP_NO_ERROR; } protected: class StaticFixedLabelIteratorImpl : public FixedLabelIterator { public: StaticFixedLabelIteratorImpl(EndpointId endpoint, const Span & labels); size_t Count(); bool Next(FixedLabelType & output); void Release() { chip::Platform::Delete(this); } private: EndpointId mEndpoint = 0; size_t mIndex = 0; Span mLabels; }; class StaticSupportedLocalesIteratorImpl : public SupportedLocalesIterator { public: StaticSupportedLocalesIteratorImpl(const Span & locales); size_t Count(); bool Next(CharSpan & output); void Release() { chip::Platform::Delete(this); } private: size_t mIndex = 0; Span mLocales; }; class StaticSupportedCalendarTypesIteratorImpl : public SupportedCalendarTypesIterator { public: StaticSupportedCalendarTypesIteratorImpl(const Span & calendarTypes); size_t Count(); bool Next(CalendarType & output); void Release() { chip::Platform::Delete(this); } private: size_t mIndex = 0; Span mCalendarTypes; }; private: Span mSupportedCalendarTypes; Span mSupportedLocales; Span mFixedLabels; }; } // namespace DeviceLayer } // namespace chip