Skip to content

Commit 40ffedf

Browse files
authored
[Ameba] Add clusters and modifications (project-chip#32220)
* [Ameba] Add devices, observers, and modified ConfigurationManagerImpl.cpp and AmebaTestEventTriggerDelegate.h/cpp * [Ameba] restyle-diff.sh * [Ameba] Fix build for Ameba D with cmake * [Ameba] Added Manual Operation for Oven Cavity Operational State
1 parent 5f08cdb commit 40ffedf

File tree

8 files changed

+169
-8
lines changed

8 files changed

+169
-8
lines changed

examples/all-clusters-app/ameba/chip_main.cmake

+11
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ endif (matter_enable_ota_requestor)
153153
list(
154154
APPEND ${list_chip_main_sources}
155155

156+
${chip_dir}/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp
157+
156158
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/bridged-actions-stub.cpp
157159
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/air-quality-instance.cpp
158160
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/concentration-measurement-instances.cpp
@@ -161,6 +163,7 @@ list(
161163
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/energy-preference-delegate.cpp
162164
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/fan-stub.cpp
163165
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/oven-modes.cpp
166+
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/laundry-dryer-controls-delegate-impl.cpp
164167
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/laundry-washer-controls-delegate-impl.cpp
165168
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/resource-monitoring-delegates.cpp
166169
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/rvc-modes.cpp
@@ -169,6 +172,10 @@ list(
169172
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/static-supported-temperature-levels.cpp
170173
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/operational-state-delegate-impl.cpp
171174
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/rvc-operational-state-delegate-impl.cpp
175+
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/microwave-oven-mode.cpp
176+
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/oven-modes.cpp
177+
${chip_dir}/examples/all-clusters-app/all-clusters-common/src/oven-operational-state-delegate.cpp
178+
172179
${chip_dir}/examples/all-clusters-app/ameba/main/chipinterface.cpp
173180
${chip_dir}/examples/all-clusters-app/ameba/main/BindingHandler.cpp
174181
${chip_dir}/examples/all-clusters-app/ameba/main/DeviceCallbacks.cpp
@@ -178,6 +185,8 @@ list(
178185
${chip_dir}/examples/all-clusters-app/ameba/main/ManualOperationCommand.cpp
179186
${chip_dir}/examples/all-clusters-app/ameba/main/SmokeCOAlarmManager.cpp
180187

188+
${chip_dir}/examples/microwave-oven-app/microwave-oven-common/src/microwave-oven-device.cpp
189+
181190
${chip_dir}/examples/energy-management-app/energy-management-common/src/DeviceEnergyManagementDelegateImpl.cpp
182191
${chip_dir}/examples/energy-management-app/energy-management-common/src/DeviceEnergyManagementManager.cpp
183192
${chip_dir}/examples/energy-management-app/energy-management-common/src/ElectricalPowerMeasurementDelegate.cpp
@@ -228,6 +237,8 @@ target_include_directories(
228237
${chip_dir}/zzz_generated/app-common
229238
${chip_dir}/examples/all-clusters-app/all-clusters-common
230239
${chip_dir}/examples/all-clusters-app/all-clusters-common/include
240+
${chip_dir}/examples/microwave-oven-app/microwave-oven-common
241+
${chip_dir}/examples/microwave-oven-app/microwave-oven-common/include
231242
${chip_dir}/examples/energy-management-app/energy-management-common/include
232243
${chip_dir}/examples/all-clusters-app/ameba/main/include
233244
${chip_dir}/examples/platform/ameba

examples/all-clusters-app/ameba/main/ManualOperationCommand.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ static void RegisterManualOperationCommands()
7979
{ &ManualRVCCommandHandler, "rvc", " Usage: manual rvc <subcommand>" },
8080
{ &ManualRefrigeratorAlarmCommandHandler, "refalm", " Usage: manual refalm <subcommand>" },
8181
{ &ManualDishWasherAlarmCommandHandler, "dishalm", " Usage: manual dishalm <subcommand>" },
82+
{ &ManualOvenCavityOperationalStateCommandHandler, "oven-opstate", " Usage: manual dishalm <subcommand>" },
8283
};
8384

8485
static const shell_command_t sManualOperationalStateSubCommands[] = {
@@ -123,6 +124,14 @@ static void RegisterManualOperationCommands()
123124
{ &ManualDishWasherAlarmSetLowerCommandHandler, "lower", "lower Usage: manual dishalm lower" },
124125
};
125126

127+
static const shell_command_t sManualOvenCavityOperationalStateSubCommands[] = {
128+
{ &ManualOvenCavityOperationalStateCommandHelpHandler, "help", "Usage: manual oven-opstate <subcommand>" },
129+
{ &ManualOvenCavityOperationalStateSetStateCommandHandler, "set-state",
130+
"set-state Usage: manual oven-opstate set-state <state>" },
131+
{ &ManualOvenCavityOperationalStateSetErrorCommandHandler, "set-error",
132+
"set-error Usage: manual oven-opstate set-error <error>" },
133+
};
134+
126135
static const shell_command_t sManualOperationCommand = { &ManualOperationCommandHandler, "manual",
127136
"Manual Operation commands. Usage: manual <subcommand>" };
128137

@@ -139,6 +148,8 @@ static void RegisterManualOperationCommands()
139148
ArraySize(sManualRefrigeratorAlarmStateSubCommands));
140149
sShellManualDishWasherAlarmStateSubCommands.RegisterCommands(sManualDishWasherAlarmSubCommands,
141150
ArraySize(sManualDishWasherAlarmSubCommands));
151+
sShellManualOvenCavityOperationalStateSubCommands.RegisterCommands(sManualOvenCavityOperationalStateSubCommands,
152+
ArraySize(sManualOvenCavityOperationalStateSubCommands));
142153

143154
Engine::Root().RegisterCommands(&sManualOperationCommand, 1);
144155
}

examples/all-clusters-app/ameba/main/chipinterface.cpp

+19-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include <platform_stdlib.h>
1919

20+
#include "AmebaObserver.h"
2021
#include "BindingHandler.h"
2122
#include "CHIPDeviceManager.h"
2223
#include "DeviceCallbacks.h"
@@ -28,13 +29,16 @@
2829
#include <lwip_netconf.h>
2930

3031
#include <app/clusters/identify-server/identify-server.h>
32+
#include <app/clusters/laundry-dryer-controls-server/laundry-dryer-controls-server.h>
3133
#include <app/clusters/laundry-washer-controls-server/laundry-washer-controls-server.h>
3234
#include <app/clusters/network-commissioning/network-commissioning.h>
3335
#include <app/server/OnboardingCodesUtil.h>
3436
#include <app/server/Server.h>
3537
#include <app/util/af.h>
38+
#include <laundry-dryer-controls-delegate-impl.h>
3639
#include <laundry-washer-controls-delegate-impl.h>
3740
#include <lib/core/ErrorStr.h>
41+
#include <microwave-oven-device.h>
3842
#include <platform/Ameba/AmebaConfig.h>
3943
#include <platform/Ameba/NetworkCommissioningDriver.h>
4044
#include <platform/CHIPDeviceLayer.h>
@@ -43,6 +47,7 @@
4347
#include <static-supported-temperature-levels.h>
4448
#include <support/CHIPMem.h>
4549
#if CONFIG_ENABLE_AMEBA_TEST_EVENT_TRIGGER
50+
#include <app/clusters/smoke-co-alarm-server/SmokeCOTestEventTriggerHandler.h>
4651
#include <test_event_trigger/AmebaTestEventTriggerDelegate.h>
4752
#endif
4853

@@ -140,11 +145,11 @@ static void InitServer(intptr_t context)
140145
static chip::CommonCaseDeviceServerInitParams initParams;
141146

142147
#if CONFIG_ENABLE_AMEBA_TEST_EVENT_TRIGGER
143-
// TODO(#31723): Show to customers that they can do `Server::GetInstance().GetTestEventTriggerDelegate().AddHandler(xxx)`
144-
// to add custom handlers during their app init, after InitServer.
145148
static AmebaTestEventTriggerDelegate sTestEventTriggerDelegate{ ByteSpan(sTestEventTriggerEnableKey) };
146149
initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
147150
#endif
151+
static AmebaObserver sAmebaObserver;
152+
initParams.appDelegate = &sAmebaObserver;
148153

149154
initParams.InitializeStaticResourcesBeforeServerInit();
150155

@@ -166,6 +171,12 @@ static void InitServer(intptr_t context)
166171
InitManualOperation();
167172
#endif
168173
app::Clusters::TemperatureControl::SetInstance(&sAppSupportedTemperatureLevelsDelegate);
174+
MatterMicrowaveOvenServerInit();
175+
#if CONFIG_ENABLE_AMEBA_TEST_EVENT_TRIGGER
176+
static SmokeCOTestEventTriggerHandler sSmokeCOTestEventTriggerHandler;
177+
Server::GetInstance().GetTestEventTriggerDelegate()->AddHandler(&sSmokeCOTestEventTriggerHandler);
178+
#endif
179+
chip::Server::GetInstance().GetFabricTable().AddFabricDelegate(&sAmebaObserver);
169180
}
170181

171182
extern "C" void ChipTest(void)
@@ -213,3 +224,9 @@ void emberAfLaundryWasherControlsClusterInitCallback(EndpointId endpoint)
213224
{
214225
LaundryWasherControlsServer::SetDefaultDelegate(endpoint, &LaundryWasherControlDelegate::getLaundryWasherControlDelegate());
215226
}
227+
228+
using namespace chip::app::Clusters::LaundryDryerControls;
229+
void emberAfLaundryDryerControlsClusterInitCallback(EndpointId endpoint)
230+
{
231+
LaundryDryerControlsServer::SetDefaultDelegate(endpoint, &LaundryDryerControlDelegate::getLaundryDryerControlDelegate());
232+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
*
3+
* Copyright (c) 2022 Project CHIP Authors
4+
* All rights reserved.
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
#pragma once
20+
21+
#include <app/server/AppDelegate.h>
22+
#include <app/server/Server.h>
23+
#include <credentials/FabricTable.h>
24+
25+
namespace chip {
26+
27+
class AmebaObserver : public AppDelegate, public FabricTable::Delegate
28+
{
29+
public:
30+
// Commissioning Observer
31+
void OnCommissioningSessionEstablishmentError(CHIP_ERROR err) override
32+
{
33+
ChipLogProgress(DeviceLayer, "Ameba Observer: Commissioning error (0x%x)", err);
34+
// Handle commissioning errror here
35+
}
36+
// Fabric Observer
37+
void OnFabricRemoved(const FabricTable & fabricTable, FabricIndex fabricIndex) override
38+
{
39+
ChipLogProgress(DeviceLayer, "Ameba Observer: Fabric 0x%x has been Removed", fabricIndex);
40+
if (chip::Server::GetInstance().GetFabricTable().FabricCount() == 0)
41+
{
42+
// Customer code
43+
}
44+
}
45+
};
46+
47+
} // namespace chip

examples/all-clusters-app/ameba/main/include/ManualOperationalStateCommand.h

+69
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "controller/InvokeInteraction.h"
2020
#include "controller/ReadInteraction.h"
2121
#include "operational-state-delegate-impl.h"
22+
#include "oven-operational-state-delegate.h"
2223
#include "rvc-operational-state-delegate-impl.h"
2324

2425
#if CONFIG_ENABLE_CHIP_SHELL
@@ -39,6 +40,7 @@ using Shell::streamer_printf;
3940

4041
Engine sShellManualOperationalStateSubCommands;
4142
Engine sShellManualRVCOperationalStateSubCommands;
43+
Engine sShellManualOvenCavityOperationalStateSubCommands;
4244
#endif // defined(ENABLE_CHIP_SHELL)
4345

4446
#if CONFIG_ENABLE_CHIP_SHELL
@@ -183,4 +185,71 @@ CHIP_ERROR ManualRVCOperationalStateSetErrorCommandHandler(int argc, char ** arg
183185

184186
return CHIP_NO_ERROR;
185187
}
188+
189+
/********************************************************
190+
* Oven Cavity Operational State Functions
191+
*********************************************************/
192+
193+
CHIP_ERROR ManualOvenCavityOperationalStateCommandHelpHandler(int argc, char ** argv)
194+
{
195+
sShellManualOvenCavityOperationalStateSubCommands.ForEachCommand(Shell::PrintCommandHelp, nullptr);
196+
return CHIP_NO_ERROR;
197+
}
198+
199+
CHIP_ERROR ManualOvenCavityOperationalStateCommandHandler(int argc, char ** argv)
200+
{
201+
if (argc == 0)
202+
{
203+
return ManualOvenCavityOperationalStateCommandHelpHandler(argc, argv);
204+
}
205+
206+
return sShellManualOvenCavityOperationalStateSubCommands.ExecCommand(argc, argv);
207+
}
208+
209+
CHIP_ERROR ManualOvenCavityOperationalStateSetStateCommandHandler(int argc, char ** argv)
210+
{
211+
if (argc != 1)
212+
{
213+
return ManualOvenCavityOperationalStateCommandHelpHandler(argc, argv);
214+
}
215+
uint32_t state = atoi(argv[0]);
216+
217+
CHIP_ERROR err;
218+
err = OvenCavityOperationalState::GetOperationalStateInstance()->SetOperationalState(state);
219+
220+
if (err != CHIP_NO_ERROR)
221+
{
222+
ChipLogError(DeviceLayer, "ManualOvenCavityOperationalStateSetStateCommandHandler Failed!\r\n");
223+
}
224+
225+
return err;
226+
}
227+
228+
CHIP_ERROR ManualOvenCavityOperationalStateSetErrorCommandHandler(int argc, char ** argv)
229+
{
230+
if (argc != 1)
231+
{
232+
return ManualOvenCavityOperationalStateCommandHelpHandler(argc, argv);
233+
}
234+
235+
GenericOperationalError err(to_underlying(ErrorStateEnum::kNoError));
236+
uint32_t error = atoi(argv[0]);
237+
238+
switch (error)
239+
{
240+
case to_underlying(OvenCavityOperationalState::ErrorStateEnum::kNoError): // 0x00, 0
241+
case to_underlying(OvenCavityOperationalState::ErrorStateEnum::kUnableToStartOrResume): // 0x01, 1
242+
case to_underlying(OvenCavityOperationalState::ErrorStateEnum::kUnableToCompleteOperation): // 0x02, 2
243+
case to_underlying(OvenCavityOperationalState::ErrorStateEnum::kCommandInvalidInState): // 0x03, 3
244+
err.errorStateID = error;
245+
break;
246+
default:
247+
err.errorStateID = to_underlying(OvenCavityOperationalState::ErrorStateEnum::kUnknownEnumValue); // 0x04, 4
248+
break;
249+
}
250+
251+
OvenCavityOperationalState::GetOperationalStateInstance()->OnOperationalErrorDetected(err);
252+
253+
return CHIP_NO_ERROR;
254+
}
186255
#endif // CONFIG_ENABLE_CHIP_SHELL

examples/platform/ameba/test_event_trigger/AmebaTestEventTriggerDelegate.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@
2121

2222
using namespace ::chip::DeviceLayer;
2323

24+
bool AmebaHandleGlobalTestEventTrigger(uint64_t eventTrigger)
25+
{
26+
// Customer can trigger action on the Ameba layer based on the eventTrigger
27+
ChipLogProgress(Support, "[AmebaHandleGlobalTestEventTrigger] Received Event Trigger: 0x%016llx", eventTrigger);
28+
return false;
29+
}
30+
2431
namespace chip {
2532

2633
bool AmebaTestEventTriggerDelegate::DoesEnableKeyMatch(const ByteSpan & enableKey) const

examples/platform/ameba/test_event_trigger/AmebaTestEventTriggerDelegate.h

+2-4
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,10 @@
3434
*
3535
* @warning *** DO NOT USE FOR STANDARD CLUSTER EVENT TRIGGERS ***
3636
*
37-
* TODO(#31723): Rename `emberAfHandleEventTrigger` to `AmebaHandleGlobalTestEventTrigger`
38-
*
3937
* @retval true on success
4038
* @retval false if error happened
4139
*/
42-
bool emberAfHandleEventTrigger(uint64_t eventTrigger);
40+
bool AmebaHandleGlobalTestEventTrigger(uint64_t eventTrigger);
4341

4442
namespace chip {
4543

@@ -61,7 +59,7 @@ class AmebaTestEventTriggerDelegate : public TestEventTriggerDelegate, TestEvent
6159
CHIP_ERROR HandleEventTrigger(uint64_t eventTrigger) override
6260
{
6361
// WARNING: LEGACY SUPPORT ONLY, DO NOT EXTEND FOR STANDARD CLUSTERS
64-
return (emberAfHandleEventTrigger(eventTrigger)) ? CHIP_NO_ERROR : CHIP_ERROR_INVALID_ARGUMENT;
62+
return (AmebaHandleGlobalTestEventTrigger(eventTrigger)) ? CHIP_NO_ERROR : CHIP_ERROR_INVALID_ARGUMENT;
6563
}
6664

6765
private:

src/platform/Ameba/ConfigurationManagerImpl.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@ CHIP_ERROR ConfigurationManagerImpl::GetPrimaryWiFiMACAddress(uint8_t * buf)
158158

159159
char temp[32];
160160
uint32_t mac[ETH_ALEN];
161-
char * token = strtok(temp, ":");
162-
int i = 0;
161+
char * token;
162+
int i = 0;
163163

164164
error = matter_wifi_get_mac_address(temp);
165165
err = AmebaUtils::MapError(error, AmebaErrorType::kWiFiError);
@@ -169,6 +169,7 @@ CHIP_ERROR ConfigurationManagerImpl::GetPrimaryWiFiMACAddress(uint8_t * buf)
169169
goto exit;
170170
}
171171

172+
token = strtok(temp, ":");
172173
while (token != NULL)
173174
{
174175
mac[i] = (uint32_t) strtol(token, NULL, 16);

0 commit comments

Comments
 (0)