| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- /*
- *
- * Copyright (c) 2020 Project CHIP Authors
- * All rights reserved.
- *
- * 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.
- */
- #include "AllClustersCommandDelegate.h"
- #include "WindowCoveringManager.h"
- #include "air-quality-instance.h"
- #include "dishwasher-mode.h"
- #include "include/tv-callbacks.h"
- #include "laundry-washer-controls-delegate-impl.h"
- #include "laundry-washer-mode.h"
- #include "operational-state-delegate-impl.h"
- #include "resource-monitoring-delegates.h"
- #include "rvc-modes.h"
- #include "tcc-mode.h"
- #include <app-common/zap-generated/attributes/Accessors.h>
- #include <app/CommandHandler.h>
- #include <app/att-storage.h>
- #include <app/clusters/identify-server/identify-server.h>
- #include <app/clusters/laundry-washer-controls-server/laundry-washer-controls-server.h>
- #include <app/clusters/mode-base-server/mode-base-server.h>
- #include <app/server/Server.h>
- #include <app/util/af.h>
- #include <app/util/attribute-storage.h>
- #include <lib/support/CHIPMem.h>
- #include <new>
- #include <platform/DeviceInstanceInfoProvider.h>
- #include <platform/DiagnosticDataProvider.h>
- #include <platform/PlatformManager.h>
- #include <static-supported-temperature-levels.h>
- #include <system/SystemPacketBuffer.h>
- #include <transport/SessionManager.h>
- #include <transport/raw/PeerAddress.h>
- #include <Options.h>
- using namespace chip;
- using namespace chip::app;
- using namespace chip::DeviceLayer;
- namespace {
- constexpr const char kChipEventFifoPathPrefix[] = "/tmp/chip_all_clusters_fifo_";
- LowPowerManager sLowPowerManager;
- NamedPipeCommands sChipNamedPipeCommands;
- AllClustersCommandDelegate sAllClustersCommandDelegate;
- Clusters::WindowCovering::WindowCoveringManager sWindowCoveringManager;
- Clusters::TemperatureControl::AppSupportedTemperatureLevelsDelegate sAppSupportedTemperatureLevelsDelegate;
- // Please refer to https://github.com/CHIP-Specifications/connectedhomeip-spec/blob/master/src/namespaces
- constexpr const uint8_t kNamespaceCommon = 7;
- // Common Number Namespace: 7, tag 0 (Zero)
- constexpr const uint8_t kTagCommonZero = 0;
- // Common Number Namespace: 7, tag 1 (One)
- constexpr const uint8_t kTagCommonOne = 1;
- // Common Number Namespace: 7, tag 2 (Two)
- constexpr const uint8_t kTagCommonTwo = 2;
- constexpr const uint8_t kNamespacePosition = 8;
- // Common Position Namespace: 8, tag: 0 (Left)
- constexpr const uint8_t kTagPositionLeft = 0;
- // Common Position Namespace: 8, tag: 1 (Right)
- constexpr const uint8_t kTagPositionRight = 1;
- // Common Position Namespace: 8, tag: 3 (Bottom)
- constexpr const uint8_t kTagPositionBottom = 3;
- const Clusters::Descriptor::Structs::SemanticTagStruct::Type gEp0TagList[] = {
- { .namespaceID = kNamespaceCommon, .tag = kTagCommonZero }, { .namespaceID = kNamespacePosition, .tag = kTagPositionBottom }
- };
- const Clusters::Descriptor::Structs::SemanticTagStruct::Type gEp1TagList[] = {
- { .namespaceID = kNamespaceCommon, .tag = kTagCommonOne }, { .namespaceID = kNamespacePosition, .tag = kTagPositionLeft }
- };
- const Clusters::Descriptor::Structs::SemanticTagStruct::Type gEp2TagList[] = {
- { .namespaceID = kNamespaceCommon, .tag = kTagCommonTwo }, { .namespaceID = kNamespacePosition, .tag = kTagPositionRight }
- };
- } // namespace
- #ifdef EMBER_AF_PLUGIN_DISHWASHER_ALARM_SERVER
- extern void MatterDishwasherAlarmServerInit();
- #endif
- void OnIdentifyStart(::Identify *)
- {
- ChipLogProgress(Zcl, "OnIdentifyStart");
- }
- void OnIdentifyStop(::Identify *)
- {
- ChipLogProgress(Zcl, "OnIdentifyStop");
- }
- void OnTriggerEffect(::Identify * identify)
- {
- switch (identify->mCurrentEffectIdentifier)
- {
- case Clusters::Identify::EffectIdentifierEnum::kBlink:
- ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBlink");
- break;
- case Clusters::Identify::EffectIdentifierEnum::kBreathe:
- ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kBreathe");
- break;
- case Clusters::Identify::EffectIdentifierEnum::kOkay:
- ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kOkay");
- break;
- case Clusters::Identify::EffectIdentifierEnum::kChannelChange:
- ChipLogProgress(Zcl, "Clusters::Identify::EffectIdentifierEnum::kChannelChange");
- break;
- default:
- ChipLogProgress(Zcl, "No identifier effect");
- return;
- }
- }
- static Identify gIdentify0 = {
- chip::EndpointId{ 0 }, OnIdentifyStart, OnIdentifyStop, Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator,
- OnTriggerEffect,
- };
- static Identify gIdentify1 = {
- chip::EndpointId{ 1 }, OnIdentifyStart, OnIdentifyStop, Clusters::Identify::IdentifyTypeEnum::kVisibleIndicator,
- OnTriggerEffect,
- };
- namespace {
- class ExampleDeviceInstanceInfoProvider : public DeviceInstanceInfoProvider
- {
- public:
- void Init(DeviceInstanceInfoProvider * defaultProvider) { mDefaultProvider = defaultProvider; }
- CHIP_ERROR GetVendorName(char * buf, size_t bufSize) override { return mDefaultProvider->GetVendorName(buf, bufSize); }
- CHIP_ERROR GetVendorId(uint16_t & vendorId) override { return mDefaultProvider->GetVendorId(vendorId); }
- CHIP_ERROR GetProductName(char * buf, size_t bufSize) override { return mDefaultProvider->GetProductName(buf, bufSize); }
- CHIP_ERROR GetProductId(uint16_t & productId) override { return mDefaultProvider->GetProductId(productId); }
- CHIP_ERROR GetPartNumber(char * buf, size_t bufSize) override { return mDefaultProvider->GetPartNumber(buf, bufSize); }
- CHIP_ERROR GetProductURL(char * buf, size_t bufSize) override { return mDefaultProvider->GetPartNumber(buf, bufSize); }
- CHIP_ERROR GetProductLabel(char * buf, size_t bufSize) override { return mDefaultProvider->GetProductLabel(buf, bufSize); }
- CHIP_ERROR GetSerialNumber(char * buf, size_t bufSize) override { return mDefaultProvider->GetSerialNumber(buf, bufSize); }
- CHIP_ERROR GetManufacturingDate(uint16_t & year, uint8_t & month, uint8_t & day) override
- {
- return mDefaultProvider->GetManufacturingDate(year, month, day);
- }
- CHIP_ERROR GetHardwareVersion(uint16_t & hardwareVersion) override
- {
- return mDefaultProvider->GetHardwareVersion(hardwareVersion);
- }
- CHIP_ERROR GetHardwareVersionString(char * buf, size_t bufSize) override
- {
- return mDefaultProvider->GetHardwareVersionString(buf, bufSize);
- }
- CHIP_ERROR GetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) override
- {
- return mDefaultProvider->GetRotatingDeviceIdUniqueId(uniqueIdSpan);
- }
- CHIP_ERROR GetProductFinish(Clusters::BasicInformation::ProductFinishEnum * finish) override;
- CHIP_ERROR GetProductPrimaryColor(Clusters::BasicInformation::ColorEnum * primaryColor) override;
- private:
- DeviceInstanceInfoProvider * mDefaultProvider;
- };
- CHIP_ERROR ExampleDeviceInstanceInfoProvider::GetProductFinish(Clusters::BasicInformation::ProductFinishEnum * finish)
- {
- // Our example device claims to have a Satin finish for now. We can make
- // this configurable as needed.
- *finish = Clusters::BasicInformation::ProductFinishEnum::kSatin;
- return CHIP_NO_ERROR;
- }
- CHIP_ERROR ExampleDeviceInstanceInfoProvider::GetProductPrimaryColor(Clusters::BasicInformation::ColorEnum * primaryColor)
- {
- // Our example device claims to have a nice purple color for now. We can
- // make this configurable as needed.
- *primaryColor = Clusters::BasicInformation::ColorEnum::kPurple;
- return CHIP_NO_ERROR;
- }
- ExampleDeviceInstanceInfoProvider gExampleDeviceInstanceInfoProvider;
- } // namespace
- void ApplicationInit()
- {
- std::string path = kChipEventFifoPathPrefix + std::to_string(getpid());
- if (sChipNamedPipeCommands.Start(path, &sAllClustersCommandDelegate) != CHIP_NO_ERROR)
- {
- ChipLogError(NotSpecified, "Failed to start CHIP NamedPipeCommands");
- sChipNamedPipeCommands.Stop();
- }
- auto * defaultProvider = GetDeviceInstanceInfoProvider();
- if (defaultProvider != &gExampleDeviceInstanceInfoProvider)
- {
- gExampleDeviceInstanceInfoProvider.Init(defaultProvider);
- SetDeviceInstanceInfoProvider(&gExampleDeviceInstanceInfoProvider);
- }
- #ifdef EMBER_AF_PLUGIN_DISHWASHER_ALARM_SERVER
- MatterDishwasherAlarmServerInit();
- #endif
- Clusters::TemperatureControl::SetInstance(&sAppSupportedTemperatureLevelsDelegate);
- SetTagList(/* endpoint= */ 0, Span<const Clusters::Descriptor::Structs::SemanticTagStruct::Type>(gEp0TagList));
- SetTagList(/* endpoint= */ 1, Span<const Clusters::Descriptor::Structs::SemanticTagStruct::Type>(gEp1TagList));
- SetTagList(/* endpoint= */ 2, Span<const Clusters::Descriptor::Structs::SemanticTagStruct::Type>(gEp2TagList));
- }
- void ApplicationShutdown()
- {
- // These may have been initialised via the emberAfXxxClusterInitCallback methods. We need to destroy them before shutdown.
- Clusters::DishwasherMode::Shutdown();
- Clusters::LaundryWasherMode::Shutdown();
- Clusters::RvcCleanMode::Shutdown();
- Clusters::RvcRunMode::Shutdown();
- Clusters::RefrigeratorAndTemperatureControlledCabinetMode::Shutdown();
- Clusters::HepaFilterMonitoring::Shutdown();
- Clusters::ActivatedCarbonFilterMonitoring::Shutdown();
- Clusters::AirQuality::Shutdown();
- Clusters::OperationalState::Shutdown();
- Clusters::RvcOperationalState::Shutdown();
- if (sChipNamedPipeCommands.Stop() != CHIP_NO_ERROR)
- {
- ChipLogError(NotSpecified, "Failed to stop CHIP NamedPipeCommands");
- }
- }
- using namespace chip::app::Clusters::LaundryWasherControls;
- void emberAfLaundryWasherControlsClusterInitCallback(EndpointId endpoint)
- {
- LaundryWasherControlsServer::SetDefaultDelegate(endpoint, &LaundryWasherControlDelegate::getLaundryWasherControlDelegate());
- }
- void emberAfLowPowerClusterInitCallback(EndpointId endpoint)
- {
- ChipLogProgress(NotSpecified, "Setting LowPower default delegate to global manager");
- Clusters::LowPower::SetDefaultDelegate(endpoint, &sLowPowerManager);
- }
- void emberAfWindowCoveringClusterInitCallback(chip::EndpointId endpoint)
- {
- sWindowCoveringManager.Init(endpoint);
- Clusters::WindowCovering::SetDefaultDelegate(endpoint, &sWindowCoveringManager);
- Clusters::WindowCovering::ConfigStatusUpdateFeatures(endpoint);
- }
|