3 * Copyright (c) 2021 Project CHIP Authors
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 // THIS FILE IS GENERATED BY ZAP
22 #include "af-structs.h"
23 #include "app/util/util.h"
24 #include "call-command-handler.h"
26 #include "cluster-id.h"
27 #include "command-id.h"
31 EmberAfStatus emberAfApplicationBasicClusterServerCommandParse(EmberAfClusterCommand * cmd);
32 EmberAfStatus emberAfBarrierControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
33 EmberAfStatus emberAfBasicClusterServerCommandParse(EmberAfClusterCommand * cmd);
34 EmberAfStatus emberAfBindingClusterServerCommandParse(EmberAfClusterCommand * cmd);
35 EmberAfStatus emberAfColorControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
36 EmberAfStatus emberAfDoorLockClusterServerCommandParse(EmberAfClusterCommand * cmd);
37 EmberAfStatus emberAfGeneralCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd);
38 EmberAfStatus emberAfGroupKeyManagementClusterServerCommandParse(EmberAfClusterCommand * cmd);
39 EmberAfStatus emberAfGroupsClusterServerCommandParse(EmberAfClusterCommand * cmd);
40 EmberAfStatus emberAfIasZoneClusterServerCommandParse(EmberAfClusterCommand * cmd);
41 EmberAfStatus emberAfIdentifyClusterServerCommandParse(EmberAfClusterCommand * cmd);
42 EmberAfStatus emberAfLevelControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
43 EmberAfStatus emberAfLowPowerClusterServerCommandParse(EmberAfClusterCommand * cmd);
44 EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd);
45 EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd);
46 EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand * cmd);
47 EmberAfStatus emberAfTemperatureMeasurementClusterServerCommandParse(EmberAfClusterCommand * cmd);
49 static EmberAfStatus status(bool wasHandled, bool clusterExists, bool mfgSpecific)
53 return EMBER_ZCL_STATUS_SUCCESS;
57 return EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND;
59 else if (clusterExists)
61 return EMBER_ZCL_STATUS_UNSUP_COMMAND;
65 return EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER;
69 // Main command parsing controller.
70 EmberAfStatus emberAfClusterSpecificCommandParse(EmberAfClusterCommand * cmd)
72 EmberAfStatus result = status(false, false, cmd->mfgSpecific);
73 if (cmd->direction == (uint8_t) ZCL_DIRECTION_SERVER_TO_CLIENT &&
74 emberAfContainsClientWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
76 switch (cmd->apsFrame->clusterId)
79 // Unrecognized cluster ID, error status will apply.
83 else if (cmd->direction == (uint8_t) ZCL_DIRECTION_CLIENT_TO_SERVER &&
84 emberAfContainsServerWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
86 switch (cmd->apsFrame->clusterId)
88 case ZCL_APPLICATION_BASIC_CLUSTER_ID:
89 // No commands are enabled for cluster Application Basic
90 result = status(false, true, cmd->mfgSpecific);
92 case ZCL_BARRIER_CONTROL_CLUSTER_ID:
93 result = emberAfBarrierControlClusterServerCommandParse(cmd);
95 case ZCL_BASIC_CLUSTER_ID:
96 result = emberAfBasicClusterServerCommandParse(cmd);
98 case ZCL_BINDING_CLUSTER_ID:
99 result = emberAfBindingClusterServerCommandParse(cmd);
101 case ZCL_COLOR_CONTROL_CLUSTER_ID:
102 result = emberAfColorControlClusterServerCommandParse(cmd);
104 case ZCL_DOOR_LOCK_CLUSTER_ID:
105 result = emberAfDoorLockClusterServerCommandParse(cmd);
107 case ZCL_GENERAL_COMMISSIONING_CLUSTER_ID:
108 result = emberAfGeneralCommissioningClusterServerCommandParse(cmd);
110 case ZCL_GROUP_KEY_MANAGEMENT_CLUSTER_ID:
111 // No commands are enabled for cluster Group Key Management
112 result = status(false, true, cmd->mfgSpecific);
114 case ZCL_GROUPS_CLUSTER_ID:
115 result = emberAfGroupsClusterServerCommandParse(cmd);
117 case ZCL_IAS_ZONE_CLUSTER_ID:
118 result = emberAfIasZoneClusterServerCommandParse(cmd);
120 case ZCL_IDENTIFY_CLUSTER_ID:
121 result = emberAfIdentifyClusterServerCommandParse(cmd);
123 case ZCL_LEVEL_CONTROL_CLUSTER_ID:
124 result = emberAfLevelControlClusterServerCommandParse(cmd);
126 case ZCL_LOW_POWER_CLUSTER_ID:
127 result = emberAfLowPowerClusterServerCommandParse(cmd);
129 case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
130 result = emberAfNetworkCommissioningClusterServerCommandParse(cmd);
132 case ZCL_ON_OFF_CLUSTER_ID:
133 result = emberAfOnOffClusterServerCommandParse(cmd);
135 case ZCL_SCENES_CLUSTER_ID:
136 result = emberAfScenesClusterServerCommandParse(cmd);
138 case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
139 // No commands are enabled for cluster Temperature Measurement
140 result = status(false, true, cmd->mfgSpecific);
143 // Unrecognized cluster ID, error status will apply.
150 // Cluster specific command parsing
152 EmberAfStatus emberAfBarrierControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
154 bool wasHandled = false;
156 if (!cmd->mfgSpecific)
158 switch (cmd->commandId)
160 case ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID: {
161 uint16_t payloadOffset = cmd->payloadStartIndex;
164 if (cmd->bufLen < payloadOffset + 1)
166 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
168 percentOpen = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
170 wasHandled = emberAfBarrierControlClusterBarrierControlGoToPercentCallback(percentOpen);
173 case ZCL_BARRIER_CONTROL_STOP_COMMAND_ID: {
174 wasHandled = emberAfBarrierControlClusterBarrierControlStopCallback();
178 // Unrecognized command ID, error status will apply.
183 return status(wasHandled, true, cmd->mfgSpecific);
185 EmberAfStatus emberAfBasicClusterServerCommandParse(EmberAfClusterCommand * cmd)
187 bool wasHandled = false;
189 if (cmd->mfgSpecific)
191 if (cmd->mfgCode == 4098 && cmd->commandId == ZCL_MFG_SPECIFIC_PING_COMMAND_ID)
193 wasHandled = emberAfBasicClusterMfgSpecificPingCallback();
198 switch (cmd->commandId)
201 // Unrecognized command ID, error status will apply.
206 return status(wasHandled, true, cmd->mfgSpecific);
208 EmberAfStatus emberAfBindingClusterServerCommandParse(EmberAfClusterCommand * cmd)
210 bool wasHandled = false;
212 if (!cmd->mfgSpecific)
214 switch (cmd->commandId)
216 case ZCL_BIND_COMMAND_ID: {
217 uint16_t payloadOffset = cmd->payloadStartIndex;
219 chip::GroupId groupId;
220 chip::EndpointId endpointId;
221 chip::ClusterId clusterId;
223 if (cmd->bufLen < payloadOffset + 8)
225 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
227 nodeId = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
228 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
229 if (cmd->bufLen < payloadOffset + 2)
231 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
233 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
234 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
235 if (cmd->bufLen < payloadOffset + 1)
237 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
239 endpointId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
240 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
241 if (cmd->bufLen < payloadOffset + 2)
243 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
245 clusterId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
247 wasHandled = emberAfBindingClusterBindCallback(nodeId, groupId, endpointId, clusterId);
250 case ZCL_UNBIND_COMMAND_ID: {
251 uint16_t payloadOffset = cmd->payloadStartIndex;
253 chip::GroupId groupId;
254 chip::EndpointId endpointId;
255 chip::ClusterId clusterId;
257 if (cmd->bufLen < payloadOffset + 8)
259 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
261 nodeId = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
262 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
263 if (cmd->bufLen < payloadOffset + 2)
265 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
267 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
268 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
269 if (cmd->bufLen < payloadOffset + 1)
271 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
273 endpointId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
274 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
275 if (cmd->bufLen < payloadOffset + 2)
277 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
279 clusterId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
281 wasHandled = emberAfBindingClusterUnbindCallback(nodeId, groupId, endpointId, clusterId);
285 // Unrecognized command ID, error status will apply.
290 return status(wasHandled, true, cmd->mfgSpecific);
292 EmberAfStatus emberAfColorControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
294 bool wasHandled = false;
296 if (!cmd->mfgSpecific)
298 switch (cmd->commandId)
300 case ZCL_MOVE_COLOR_COMMAND_ID: {
301 uint16_t payloadOffset = cmd->payloadStartIndex;
305 uint8_t optionsOverride;
307 if (cmd->bufLen < payloadOffset + 2)
309 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
311 rateX = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
312 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
313 if (cmd->bufLen < payloadOffset + 2)
315 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
317 rateY = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
318 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
319 if (cmd->bufLen < payloadOffset + 1)
321 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
323 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
324 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
325 if (cmd->bufLen < payloadOffset + 1)
327 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
329 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
331 wasHandled = emberAfColorControlClusterMoveColorCallback(rateX, rateY, optionsMask, optionsOverride);
334 case ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID: {
335 uint16_t payloadOffset = cmd->payloadStartIndex;
338 uint16_t colorTemperatureMinimum;
339 uint16_t colorTemperatureMaximum;
341 uint8_t optionsOverride;
343 if (cmd->bufLen < payloadOffset + 1)
345 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
347 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
348 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
349 if (cmd->bufLen < payloadOffset + 2)
351 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
353 rate = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
354 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
355 if (cmd->bufLen < payloadOffset + 2)
357 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
359 colorTemperatureMinimum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
360 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
361 if (cmd->bufLen < payloadOffset + 2)
363 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
365 colorTemperatureMaximum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
366 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
367 if (cmd->bufLen < payloadOffset + 1)
369 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
371 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
372 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
373 if (cmd->bufLen < payloadOffset + 1)
375 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
377 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
379 wasHandled = emberAfColorControlClusterMoveColorTemperatureCallback(
380 moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
383 case ZCL_MOVE_HUE_COMMAND_ID: {
384 uint16_t payloadOffset = cmd->payloadStartIndex;
388 uint8_t optionsOverride;
390 if (cmd->bufLen < payloadOffset + 1)
392 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
394 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
395 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
396 if (cmd->bufLen < payloadOffset + 1)
398 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
400 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
401 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
402 if (cmd->bufLen < payloadOffset + 1)
404 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
406 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
407 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
408 if (cmd->bufLen < payloadOffset + 1)
410 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
412 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
414 wasHandled = emberAfColorControlClusterMoveHueCallback(moveMode, rate, optionsMask, optionsOverride);
417 case ZCL_MOVE_SATURATION_COMMAND_ID: {
418 uint16_t payloadOffset = cmd->payloadStartIndex;
422 uint8_t optionsOverride;
424 if (cmd->bufLen < payloadOffset + 1)
426 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
428 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
429 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
430 if (cmd->bufLen < payloadOffset + 1)
432 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
434 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
435 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
436 if (cmd->bufLen < payloadOffset + 1)
438 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
440 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
441 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
442 if (cmd->bufLen < payloadOffset + 1)
444 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
446 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
448 wasHandled = emberAfColorControlClusterMoveSaturationCallback(moveMode, rate, optionsMask, optionsOverride);
451 case ZCL_MOVE_TO_COLOR_COMMAND_ID: {
452 uint16_t payloadOffset = cmd->payloadStartIndex;
455 uint16_t transitionTime;
457 uint8_t optionsOverride;
459 if (cmd->bufLen < payloadOffset + 2)
461 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
463 colorX = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
464 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
465 if (cmd->bufLen < payloadOffset + 2)
467 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
469 colorY = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
470 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
471 if (cmd->bufLen < payloadOffset + 2)
473 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
475 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
476 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
477 if (cmd->bufLen < payloadOffset + 1)
479 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
481 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
482 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
483 if (cmd->bufLen < payloadOffset + 1)
485 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
487 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
490 emberAfColorControlClusterMoveToColorCallback(colorX, colorY, transitionTime, optionsMask, optionsOverride);
493 case ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID: {
494 uint16_t payloadOffset = cmd->payloadStartIndex;
495 uint16_t colorTemperature;
496 uint16_t transitionTime;
498 uint8_t optionsOverride;
500 if (cmd->bufLen < payloadOffset + 2)
502 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
504 colorTemperature = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
505 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
506 if (cmd->bufLen < payloadOffset + 2)
508 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
510 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
511 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
512 if (cmd->bufLen < payloadOffset + 1)
514 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
516 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
517 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
518 if (cmd->bufLen < payloadOffset + 1)
520 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
522 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
524 wasHandled = emberAfColorControlClusterMoveToColorTemperatureCallback(colorTemperature, transitionTime, optionsMask,
528 case ZCL_MOVE_TO_HUE_COMMAND_ID: {
529 uint16_t payloadOffset = cmd->payloadStartIndex;
532 uint16_t transitionTime;
534 uint8_t optionsOverride;
536 if (cmd->bufLen < payloadOffset + 1)
538 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
540 hue = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
541 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
542 if (cmd->bufLen < payloadOffset + 1)
544 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
546 direction = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
547 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
548 if (cmd->bufLen < payloadOffset + 2)
550 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
552 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
553 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
554 if (cmd->bufLen < payloadOffset + 1)
556 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
558 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
559 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
560 if (cmd->bufLen < payloadOffset + 1)
562 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
564 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
566 wasHandled = emberAfColorControlClusterMoveToHueCallback(hue, direction, transitionTime, optionsMask, optionsOverride);
569 case ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID: {
570 uint16_t payloadOffset = cmd->payloadStartIndex;
573 uint16_t transitionTime;
575 uint8_t optionsOverride;
577 if (cmd->bufLen < payloadOffset + 1)
579 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
581 hue = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
582 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
583 if (cmd->bufLen < payloadOffset + 1)
585 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
587 saturation = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
588 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
589 if (cmd->bufLen < payloadOffset + 2)
591 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
593 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
594 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
595 if (cmd->bufLen < payloadOffset + 1)
597 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
599 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
600 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
601 if (cmd->bufLen < payloadOffset + 1)
603 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
605 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
607 wasHandled = emberAfColorControlClusterMoveToHueAndSaturationCallback(hue, saturation, transitionTime, optionsMask,
611 case ZCL_MOVE_TO_SATURATION_COMMAND_ID: {
612 uint16_t payloadOffset = cmd->payloadStartIndex;
614 uint16_t transitionTime;
616 uint8_t optionsOverride;
618 if (cmd->bufLen < payloadOffset + 1)
620 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
622 saturation = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
623 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
624 if (cmd->bufLen < payloadOffset + 2)
626 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
628 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
629 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
630 if (cmd->bufLen < payloadOffset + 1)
632 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
634 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
635 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
636 if (cmd->bufLen < payloadOffset + 1)
638 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
640 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
643 emberAfColorControlClusterMoveToSaturationCallback(saturation, transitionTime, optionsMask, optionsOverride);
646 case ZCL_STEP_COLOR_COMMAND_ID: {
647 uint16_t payloadOffset = cmd->payloadStartIndex;
650 uint16_t transitionTime;
652 uint8_t optionsOverride;
654 if (cmd->bufLen < payloadOffset + 2)
656 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
658 stepX = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
659 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
660 if (cmd->bufLen < payloadOffset + 2)
662 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
664 stepY = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
665 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
666 if (cmd->bufLen < payloadOffset + 2)
668 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
670 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
671 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
672 if (cmd->bufLen < payloadOffset + 1)
674 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
676 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
677 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
678 if (cmd->bufLen < payloadOffset + 1)
680 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
682 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
684 wasHandled = emberAfColorControlClusterStepColorCallback(stepX, stepY, transitionTime, optionsMask, optionsOverride);
687 case ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID: {
688 uint16_t payloadOffset = cmd->payloadStartIndex;
691 uint16_t transitionTime;
692 uint16_t colorTemperatureMinimum;
693 uint16_t colorTemperatureMaximum;
695 uint8_t optionsOverride;
697 if (cmd->bufLen < payloadOffset + 1)
699 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
701 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
702 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
703 if (cmd->bufLen < payloadOffset + 2)
705 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
707 stepSize = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
708 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
709 if (cmd->bufLen < payloadOffset + 2)
711 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
713 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
714 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
715 if (cmd->bufLen < payloadOffset + 2)
717 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
719 colorTemperatureMinimum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
720 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
721 if (cmd->bufLen < payloadOffset + 2)
723 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
725 colorTemperatureMaximum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
726 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
727 if (cmd->bufLen < payloadOffset + 1)
729 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
731 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
732 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
733 if (cmd->bufLen < payloadOffset + 1)
735 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
737 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
739 wasHandled = emberAfColorControlClusterStepColorTemperatureCallback(
740 stepMode, stepSize, transitionTime, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
743 case ZCL_STEP_HUE_COMMAND_ID: {
744 uint16_t payloadOffset = cmd->payloadStartIndex;
747 uint8_t transitionTime;
749 uint8_t optionsOverride;
751 if (cmd->bufLen < payloadOffset + 1)
753 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
755 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
756 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
757 if (cmd->bufLen < payloadOffset + 1)
759 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
761 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
762 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
763 if (cmd->bufLen < payloadOffset + 1)
765 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
767 transitionTime = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
768 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
769 if (cmd->bufLen < payloadOffset + 1)
771 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
773 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
774 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
775 if (cmd->bufLen < payloadOffset + 1)
777 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
779 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
782 emberAfColorControlClusterStepHueCallback(stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
785 case ZCL_STEP_SATURATION_COMMAND_ID: {
786 uint16_t payloadOffset = cmd->payloadStartIndex;
789 uint8_t transitionTime;
791 uint8_t optionsOverride;
793 if (cmd->bufLen < payloadOffset + 1)
795 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
797 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
798 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
799 if (cmd->bufLen < payloadOffset + 1)
801 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
803 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
804 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
805 if (cmd->bufLen < payloadOffset + 1)
807 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
809 transitionTime = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
810 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
811 if (cmd->bufLen < payloadOffset + 1)
813 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
815 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
816 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
817 if (cmd->bufLen < payloadOffset + 1)
819 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
821 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
824 emberAfColorControlClusterStepSaturationCallback(stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
827 case ZCL_STOP_MOVE_STEP_COMMAND_ID: {
828 uint16_t payloadOffset = cmd->payloadStartIndex;
830 uint8_t optionsOverride;
832 if (cmd->bufLen < payloadOffset + 1)
834 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
836 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
837 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
838 if (cmd->bufLen < payloadOffset + 1)
840 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
842 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
844 wasHandled = emberAfColorControlClusterStopMoveStepCallback(optionsMask, optionsOverride);
848 // Unrecognized command ID, error status will apply.
853 return status(wasHandled, true, cmd->mfgSpecific);
855 EmberAfStatus emberAfDoorLockClusterServerCommandParse(EmberAfClusterCommand * cmd)
857 bool wasHandled = false;
859 if (!cmd->mfgSpecific)
861 switch (cmd->commandId)
863 case ZCL_CLEAR_ALL_PINS_COMMAND_ID: {
864 wasHandled = emberAfDoorLockClusterClearAllPinsCallback();
867 case ZCL_CLEAR_ALL_RFIDS_COMMAND_ID: {
868 wasHandled = emberAfDoorLockClusterClearAllRfidsCallback();
871 case ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID: {
872 uint16_t payloadOffset = cmd->payloadStartIndex;
875 if (cmd->bufLen < payloadOffset + 1)
877 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
879 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
881 wasHandled = emberAfDoorLockClusterClearHolidayScheduleCallback(scheduleId);
884 case ZCL_CLEAR_PIN_COMMAND_ID: {
885 uint16_t payloadOffset = cmd->payloadStartIndex;
888 if (cmd->bufLen < payloadOffset + 2)
890 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
892 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
894 wasHandled = emberAfDoorLockClusterClearPinCallback(userId);
897 case ZCL_CLEAR_RFID_COMMAND_ID: {
898 uint16_t payloadOffset = cmd->payloadStartIndex;
901 if (cmd->bufLen < payloadOffset + 2)
903 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
905 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
907 wasHandled = emberAfDoorLockClusterClearRfidCallback(userId);
910 case ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID: {
911 uint16_t payloadOffset = cmd->payloadStartIndex;
915 if (cmd->bufLen < payloadOffset + 1)
917 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
919 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
920 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
921 if (cmd->bufLen < payloadOffset + 2)
923 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
925 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
927 wasHandled = emberAfDoorLockClusterClearWeekdayScheduleCallback(scheduleId, userId);
930 case ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID: {
931 uint16_t payloadOffset = cmd->payloadStartIndex;
935 if (cmd->bufLen < payloadOffset + 1)
937 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
939 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
940 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
941 if (cmd->bufLen < payloadOffset + 2)
943 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
945 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
947 wasHandled = emberAfDoorLockClusterClearYeardayScheduleCallback(scheduleId, userId);
950 case ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID: {
951 uint16_t payloadOffset = cmd->payloadStartIndex;
954 if (cmd->bufLen < payloadOffset + 1)
956 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
958 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
960 wasHandled = emberAfDoorLockClusterGetHolidayScheduleCallback(scheduleId);
963 case ZCL_GET_LOG_RECORD_COMMAND_ID: {
964 uint16_t payloadOffset = cmd->payloadStartIndex;
967 if (cmd->bufLen < payloadOffset + 2)
969 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
971 logIndex = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
973 wasHandled = emberAfDoorLockClusterGetLogRecordCallback(logIndex);
976 case ZCL_GET_PIN_COMMAND_ID: {
977 uint16_t payloadOffset = cmd->payloadStartIndex;
980 if (cmd->bufLen < payloadOffset + 2)
982 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
984 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
986 wasHandled = emberAfDoorLockClusterGetPinCallback(userId);
989 case ZCL_GET_RFID_COMMAND_ID: {
990 uint16_t payloadOffset = cmd->payloadStartIndex;
993 if (cmd->bufLen < payloadOffset + 2)
995 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
997 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
999 wasHandled = emberAfDoorLockClusterGetRfidCallback(userId);
1002 case ZCL_GET_USER_TYPE_COMMAND_ID: {
1003 uint16_t payloadOffset = cmd->payloadStartIndex;
1006 if (cmd->bufLen < payloadOffset + 2)
1008 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1010 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1012 wasHandled = emberAfDoorLockClusterGetUserTypeCallback(userId);
1015 case ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID: {
1016 uint16_t payloadOffset = cmd->payloadStartIndex;
1020 if (cmd->bufLen < payloadOffset + 1)
1022 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1024 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1025 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1026 if (cmd->bufLen < payloadOffset + 2)
1028 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1030 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1032 wasHandled = emberAfDoorLockClusterGetWeekdayScheduleCallback(scheduleId, userId);
1035 case ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID: {
1036 uint16_t payloadOffset = cmd->payloadStartIndex;
1040 if (cmd->bufLen < payloadOffset + 1)
1042 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1044 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1045 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1046 if (cmd->bufLen < payloadOffset + 2)
1048 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1050 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1052 wasHandled = emberAfDoorLockClusterGetYeardayScheduleCallback(scheduleId, userId);
1055 case ZCL_LOCK_DOOR_COMMAND_ID: {
1056 uint16_t payloadOffset = cmd->payloadStartIndex;
1059 if (cmd->bufLen < payloadOffset + 1u)
1061 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1063 PIN = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1065 wasHandled = emberAfDoorLockClusterLockDoorCallback(PIN);
1068 case ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID: {
1069 uint16_t payloadOffset = cmd->payloadStartIndex;
1071 uint32_t localStartTime;
1072 uint32_t localEndTime;
1073 uint8_t operatingModeDuringHoliday;
1075 if (cmd->bufLen < payloadOffset + 1)
1077 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1079 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1080 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1081 if (cmd->bufLen < payloadOffset + 4)
1083 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1085 localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1086 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1087 if (cmd->bufLen < payloadOffset + 4)
1089 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1091 localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1092 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1093 if (cmd->bufLen < payloadOffset + 1)
1095 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1097 operatingModeDuringHoliday = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1099 wasHandled = emberAfDoorLockClusterSetHolidayScheduleCallback(scheduleId, localStartTime, localEndTime,
1100 operatingModeDuringHoliday);
1103 case ZCL_SET_PIN_COMMAND_ID: {
1104 uint16_t payloadOffset = cmd->payloadStartIndex;
1110 if (cmd->bufLen < payloadOffset + 2)
1112 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1114 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1115 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1116 if (cmd->bufLen < payloadOffset + 1)
1118 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1120 userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1121 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1122 if (cmd->bufLen < payloadOffset + 1)
1124 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1126 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1127 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1128 if (cmd->bufLen < payloadOffset + 1u)
1130 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1132 pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1134 wasHandled = emberAfDoorLockClusterSetPinCallback(userId, userStatus, userType, pin);
1137 case ZCL_SET_RFID_COMMAND_ID: {
1138 uint16_t payloadOffset = cmd->payloadStartIndex;
1144 if (cmd->bufLen < payloadOffset + 2)
1146 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1148 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1149 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1150 if (cmd->bufLen < payloadOffset + 1)
1152 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1154 userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1155 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1156 if (cmd->bufLen < payloadOffset + 1)
1158 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1160 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1161 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1162 if (cmd->bufLen < payloadOffset + 1u)
1164 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1166 id = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1168 wasHandled = emberAfDoorLockClusterSetRfidCallback(userId, userStatus, userType, id);
1171 case ZCL_SET_USER_TYPE_COMMAND_ID: {
1172 uint16_t payloadOffset = cmd->payloadStartIndex;
1176 if (cmd->bufLen < payloadOffset + 2)
1178 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1180 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1181 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1182 if (cmd->bufLen < payloadOffset + 1)
1184 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1186 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1188 wasHandled = emberAfDoorLockClusterSetUserTypeCallback(userId, userType);
1191 case ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID: {
1192 uint16_t payloadOffset = cmd->payloadStartIndex;
1197 uint8_t startMinute;
1201 if (cmd->bufLen < payloadOffset + 1)
1203 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1205 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1206 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1207 if (cmd->bufLen < payloadOffset + 2)
1209 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1211 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1212 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1213 if (cmd->bufLen < payloadOffset + 1)
1215 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1217 daysMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1218 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1219 if (cmd->bufLen < payloadOffset + 1)
1221 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1223 startHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1224 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1225 if (cmd->bufLen < payloadOffset + 1)
1227 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1229 startMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1230 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1231 if (cmd->bufLen < payloadOffset + 1)
1233 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1235 endHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1236 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1237 if (cmd->bufLen < payloadOffset + 1)
1239 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1241 endMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1243 wasHandled = emberAfDoorLockClusterSetWeekdayScheduleCallback(scheduleId, userId, daysMask, startHour, startMinute,
1244 endHour, endMinute);
1247 case ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID: {
1248 uint16_t payloadOffset = cmd->payloadStartIndex;
1251 uint32_t localStartTime;
1252 uint32_t localEndTime;
1254 if (cmd->bufLen < payloadOffset + 1)
1256 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1258 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1259 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1260 if (cmd->bufLen < payloadOffset + 2)
1262 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1264 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1265 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1266 if (cmd->bufLen < payloadOffset + 4)
1268 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1270 localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1271 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1272 if (cmd->bufLen < payloadOffset + 4)
1274 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1276 localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1278 wasHandled = emberAfDoorLockClusterSetYeardayScheduleCallback(scheduleId, userId, localStartTime, localEndTime);
1281 case ZCL_UNLOCK_DOOR_COMMAND_ID: {
1282 uint16_t payloadOffset = cmd->payloadStartIndex;
1285 if (cmd->bufLen < payloadOffset + 1u)
1287 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1289 PIN = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1291 wasHandled = emberAfDoorLockClusterUnlockDoorCallback(PIN);
1294 case ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID: {
1295 uint16_t payloadOffset = cmd->payloadStartIndex;
1296 uint16_t timeoutInSeconds;
1299 if (cmd->bufLen < payloadOffset + 2)
1301 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1303 timeoutInSeconds = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1304 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1305 if (cmd->bufLen < payloadOffset + 1u)
1307 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1309 pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1311 wasHandled = emberAfDoorLockClusterUnlockWithTimeoutCallback(timeoutInSeconds, pin);
1315 // Unrecognized command ID, error status will apply.
1320 return status(wasHandled, true, cmd->mfgSpecific);
1322 EmberAfStatus emberAfGeneralCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd)
1324 bool wasHandled = false;
1326 if (!cmd->mfgSpecific)
1328 switch (cmd->commandId)
1330 case ZCL_ARM_FAIL_SAFE_COMMAND_ID: {
1331 uint16_t payloadOffset = cmd->payloadStartIndex;
1332 uint16_t expiryLengthSeconds;
1333 uint64_t breadcrumb;
1336 if (cmd->bufLen < payloadOffset + 2)
1338 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1340 expiryLengthSeconds = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1341 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1342 if (cmd->bufLen < payloadOffset + 8)
1344 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1346 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1347 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1348 if (cmd->bufLen < payloadOffset + 4)
1350 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1352 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1354 wasHandled = emberAfGeneralCommissioningClusterArmFailSafeCallback(expiryLengthSeconds, breadcrumb, timeoutMs);
1357 case ZCL_COMMISSIONING_COMPLETE_COMMAND_ID: {
1358 wasHandled = emberAfGeneralCommissioningClusterCommissioningCompleteCallback();
1361 case ZCL_SET_FABRIC_COMMAND_ID: {
1362 uint16_t payloadOffset = cmd->payloadStartIndex;
1363 chip::ByteSpan fabricId;
1364 chip::ByteSpan fabricSecret;
1365 uint64_t breadcrumb;
1368 if (cmd->bufLen < payloadOffset + 1u)
1370 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1373 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1374 fabricId = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1376 payloadOffset = static_cast<uint16_t>(payloadOffset + fabricId.size() + 1u);
1377 if (cmd->bufLen < payloadOffset + 1u)
1379 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1382 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1383 fabricSecret = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1385 payloadOffset = static_cast<uint16_t>(payloadOffset + fabricSecret.size() + 1u);
1386 if (cmd->bufLen < payloadOffset + 8)
1388 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1390 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1391 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1392 if (cmd->bufLen < payloadOffset + 4)
1394 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1396 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1398 wasHandled = emberAfGeneralCommissioningClusterSetFabricCallback(fabricId, fabricSecret, breadcrumb, timeoutMs);
1402 // Unrecognized command ID, error status will apply.
1407 return status(wasHandled, true, cmd->mfgSpecific);
1409 EmberAfStatus emberAfGroupsClusterServerCommandParse(EmberAfClusterCommand * cmd)
1411 bool wasHandled = false;
1413 if (!cmd->mfgSpecific)
1415 switch (cmd->commandId)
1417 case ZCL_ADD_GROUP_COMMAND_ID: {
1418 uint16_t payloadOffset = cmd->payloadStartIndex;
1420 uint8_t * groupName;
1422 if (cmd->bufLen < payloadOffset + 2)
1424 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1426 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1427 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1428 if (cmd->bufLen < payloadOffset + 1u)
1430 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1432 groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1434 wasHandled = emberAfGroupsClusterAddGroupCallback(groupId, groupName);
1437 case ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID: {
1438 uint16_t payloadOffset = cmd->payloadStartIndex;
1440 uint8_t * groupName;
1442 if (cmd->bufLen < payloadOffset + 2)
1444 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1446 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1447 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1448 if (cmd->bufLen < payloadOffset + 1u)
1450 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1452 groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1454 wasHandled = emberAfGroupsClusterAddGroupIfIdentifyingCallback(groupId, groupName);
1457 case ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID: {
1458 uint16_t payloadOffset = cmd->payloadStartIndex;
1460 /* TYPE WARNING: array array defaults to */ uint8_t * groupList;
1462 if (cmd->bufLen < payloadOffset + 1)
1464 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1466 groupCount = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1467 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1468 groupList = cmd->buffer + payloadOffset;
1470 wasHandled = emberAfGroupsClusterGetGroupMembershipCallback(groupCount, groupList);
1473 case ZCL_REMOVE_ALL_GROUPS_COMMAND_ID: {
1474 wasHandled = emberAfGroupsClusterRemoveAllGroupsCallback();
1477 case ZCL_REMOVE_GROUP_COMMAND_ID: {
1478 uint16_t payloadOffset = cmd->payloadStartIndex;
1481 if (cmd->bufLen < payloadOffset + 2)
1483 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1485 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1487 wasHandled = emberAfGroupsClusterRemoveGroupCallback(groupId);
1490 case ZCL_VIEW_GROUP_COMMAND_ID: {
1491 uint16_t payloadOffset = cmd->payloadStartIndex;
1494 if (cmd->bufLen < payloadOffset + 2)
1496 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1498 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1500 wasHandled = emberAfGroupsClusterViewGroupCallback(groupId);
1504 // Unrecognized command ID, error status will apply.
1509 return status(wasHandled, true, cmd->mfgSpecific);
1511 EmberAfStatus emberAfIasZoneClusterServerCommandParse(EmberAfClusterCommand * cmd)
1513 bool wasHandled = false;
1515 if (!cmd->mfgSpecific)
1517 switch (cmd->commandId)
1519 case ZCL_ZONE_ENROLL_RESPONSE_COMMAND_ID: {
1520 uint16_t payloadOffset = cmd->payloadStartIndex;
1521 uint8_t enrollResponseCode;
1524 if (cmd->bufLen < payloadOffset + 1)
1526 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1528 enrollResponseCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1529 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1530 if (cmd->bufLen < payloadOffset + 1)
1532 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1534 zoneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1536 wasHandled = emberAfIasZoneClusterZoneEnrollResponseCallback(enrollResponseCode, zoneId);
1540 // Unrecognized command ID, error status will apply.
1545 return status(wasHandled, true, cmd->mfgSpecific);
1547 EmberAfStatus emberAfIdentifyClusterServerCommandParse(EmberAfClusterCommand * cmd)
1549 bool wasHandled = false;
1551 if (!cmd->mfgSpecific)
1553 switch (cmd->commandId)
1555 case ZCL_IDENTIFY_COMMAND_ID: {
1556 uint16_t payloadOffset = cmd->payloadStartIndex;
1557 uint16_t identifyTime;
1559 if (cmd->bufLen < payloadOffset + 2)
1561 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1563 identifyTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1565 wasHandled = emberAfIdentifyClusterIdentifyCallback(identifyTime);
1568 case ZCL_IDENTIFY_QUERY_COMMAND_ID: {
1569 wasHandled = emberAfIdentifyClusterIdentifyQueryCallback();
1573 // Unrecognized command ID, error status will apply.
1578 return status(wasHandled, true, cmd->mfgSpecific);
1580 EmberAfStatus emberAfLevelControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
1582 bool wasHandled = false;
1584 if (!cmd->mfgSpecific)
1586 switch (cmd->commandId)
1588 case ZCL_MOVE_COMMAND_ID: {
1589 uint16_t payloadOffset = cmd->payloadStartIndex;
1593 uint8_t optionOverride;
1595 if (cmd->bufLen < payloadOffset + 1)
1597 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1599 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1600 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1601 if (cmd->bufLen < payloadOffset + 1)
1603 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1605 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1606 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1607 if (cmd->bufLen < payloadOffset + 1)
1609 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1611 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1612 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1613 if (cmd->bufLen < payloadOffset + 1)
1615 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1617 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1619 wasHandled = emberAfLevelControlClusterMoveCallback(moveMode, rate, optionMask, optionOverride);
1622 case ZCL_MOVE_TO_LEVEL_COMMAND_ID: {
1623 uint16_t payloadOffset = cmd->payloadStartIndex;
1625 uint16_t transitionTime;
1627 uint8_t optionOverride;
1629 if (cmd->bufLen < payloadOffset + 1)
1631 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1633 level = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1634 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1635 if (cmd->bufLen < payloadOffset + 2)
1637 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1639 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1640 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1641 if (cmd->bufLen < payloadOffset + 1)
1643 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1645 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1646 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1647 if (cmd->bufLen < payloadOffset + 1)
1649 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1651 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1653 wasHandled = emberAfLevelControlClusterMoveToLevelCallback(level, transitionTime, optionMask, optionOverride);
1656 case ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID: {
1657 uint16_t payloadOffset = cmd->payloadStartIndex;
1659 uint16_t transitionTime;
1661 if (cmd->bufLen < payloadOffset + 1)
1663 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1665 level = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1666 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1667 if (cmd->bufLen < payloadOffset + 2)
1669 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1671 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1673 wasHandled = emberAfLevelControlClusterMoveToLevelWithOnOffCallback(level, transitionTime);
1676 case ZCL_MOVE_WITH_ON_OFF_COMMAND_ID: {
1677 uint16_t payloadOffset = cmd->payloadStartIndex;
1681 if (cmd->bufLen < payloadOffset + 1)
1683 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1685 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1686 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1687 if (cmd->bufLen < payloadOffset + 1)
1689 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1691 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1693 wasHandled = emberAfLevelControlClusterMoveWithOnOffCallback(moveMode, rate);
1696 case ZCL_STEP_COMMAND_ID: {
1697 uint16_t payloadOffset = cmd->payloadStartIndex;
1700 uint16_t transitionTime;
1702 uint8_t optionOverride;
1704 if (cmd->bufLen < payloadOffset + 1)
1706 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1708 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1709 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1710 if (cmd->bufLen < payloadOffset + 1)
1712 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1714 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1715 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1716 if (cmd->bufLen < payloadOffset + 2)
1718 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1720 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1721 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1722 if (cmd->bufLen < payloadOffset + 1)
1724 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1726 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1727 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1728 if (cmd->bufLen < payloadOffset + 1)
1730 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1732 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1734 wasHandled = emberAfLevelControlClusterStepCallback(stepMode, stepSize, transitionTime, optionMask, optionOverride);
1737 case ZCL_STEP_WITH_ON_OFF_COMMAND_ID: {
1738 uint16_t payloadOffset = cmd->payloadStartIndex;
1741 uint16_t transitionTime;
1743 if (cmd->bufLen < payloadOffset + 1)
1745 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1747 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1748 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1749 if (cmd->bufLen < payloadOffset + 1)
1751 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1753 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1754 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1755 if (cmd->bufLen < payloadOffset + 2)
1757 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1759 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1761 wasHandled = emberAfLevelControlClusterStepWithOnOffCallback(stepMode, stepSize, transitionTime);
1764 case ZCL_STOP_COMMAND_ID: {
1765 uint16_t payloadOffset = cmd->payloadStartIndex;
1767 uint8_t optionOverride;
1769 if (cmd->bufLen < payloadOffset + 1)
1771 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1773 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1774 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1775 if (cmd->bufLen < payloadOffset + 1)
1777 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1779 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1781 wasHandled = emberAfLevelControlClusterStopCallback(optionMask, optionOverride);
1784 case ZCL_STOP_WITH_ON_OFF_COMMAND_ID: {
1785 wasHandled = emberAfLevelControlClusterStopWithOnOffCallback();
1789 // Unrecognized command ID, error status will apply.
1794 return status(wasHandled, true, cmd->mfgSpecific);
1796 EmberAfStatus emberAfLowPowerClusterServerCommandParse(EmberAfClusterCommand * cmd)
1798 bool wasHandled = false;
1800 if (!cmd->mfgSpecific)
1802 switch (cmd->commandId)
1804 case ZCL_SLEEP_COMMAND_ID: {
1805 wasHandled = emberAfLowPowerClusterSleepCallback();
1809 // Unrecognized command ID, error status will apply.
1814 return status(wasHandled, true, cmd->mfgSpecific);
1816 EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd)
1818 bool wasHandled = false;
1820 if (!cmd->mfgSpecific)
1822 switch (cmd->commandId)
1824 case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
1825 uint16_t payloadOffset = cmd->payloadStartIndex;
1826 chip::ByteSpan operationalDataset;
1827 uint64_t breadcrumb;
1830 if (cmd->bufLen < payloadOffset + 1u)
1832 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1835 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1836 operationalDataset = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1838 payloadOffset = static_cast<uint16_t>(payloadOffset + operationalDataset.size() + 1u);
1839 if (cmd->bufLen < payloadOffset + 8)
1841 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1843 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1844 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1845 if (cmd->bufLen < payloadOffset + 4)
1847 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1849 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1851 wasHandled = emberAfNetworkCommissioningClusterAddThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
1854 case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
1855 uint16_t payloadOffset = cmd->payloadStartIndex;
1856 chip::ByteSpan ssid;
1857 chip::ByteSpan credentials;
1858 uint64_t breadcrumb;
1861 if (cmd->bufLen < payloadOffset + 1u)
1863 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1866 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1867 ssid = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1869 payloadOffset = static_cast<uint16_t>(payloadOffset + ssid.size() + 1u);
1870 if (cmd->bufLen < payloadOffset + 1u)
1872 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1875 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1876 credentials = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1878 payloadOffset = static_cast<uint16_t>(payloadOffset + credentials.size() + 1u);
1879 if (cmd->bufLen < payloadOffset + 8)
1881 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1883 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1884 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1885 if (cmd->bufLen < payloadOffset + 4)
1887 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1889 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1891 wasHandled = emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
1894 case ZCL_DISABLE_NETWORK_COMMAND_ID: {
1895 uint16_t payloadOffset = cmd->payloadStartIndex;
1896 chip::ByteSpan networkID;
1897 uint64_t breadcrumb;
1900 if (cmd->bufLen < payloadOffset + 1u)
1902 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1905 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1906 networkID = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1908 payloadOffset = static_cast<uint16_t>(payloadOffset + networkID.size() + 1u);
1909 if (cmd->bufLen < payloadOffset + 8)
1911 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1913 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1914 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1915 if (cmd->bufLen < payloadOffset + 4)
1917 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1919 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1921 wasHandled = emberAfNetworkCommissioningClusterDisableNetworkCallback(networkID, breadcrumb, timeoutMs);
1924 case ZCL_ENABLE_NETWORK_COMMAND_ID: {
1925 uint16_t payloadOffset = cmd->payloadStartIndex;
1926 chip::ByteSpan networkID;
1927 uint64_t breadcrumb;
1930 if (cmd->bufLen < payloadOffset + 1u)
1932 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1935 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1936 networkID = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1938 payloadOffset = static_cast<uint16_t>(payloadOffset + networkID.size() + 1u);
1939 if (cmd->bufLen < payloadOffset + 8)
1941 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1943 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1944 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1945 if (cmd->bufLen < payloadOffset + 4)
1947 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1949 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1951 wasHandled = emberAfNetworkCommissioningClusterEnableNetworkCallback(networkID, breadcrumb, timeoutMs);
1954 case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
1955 uint16_t payloadOffset = cmd->payloadStartIndex;
1958 if (cmd->bufLen < payloadOffset + 4)
1960 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1962 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1964 wasHandled = emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
1967 case ZCL_REMOVE_NETWORK_COMMAND_ID: {
1968 uint16_t payloadOffset = cmd->payloadStartIndex;
1969 chip::ByteSpan NetworkID;
1970 uint64_t Breadcrumb;
1973 if (cmd->bufLen < payloadOffset + 1u)
1975 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1978 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1979 NetworkID = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1981 payloadOffset = static_cast<uint16_t>(payloadOffset + NetworkID.size() + 1u);
1982 if (cmd->bufLen < payloadOffset + 8)
1984 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1986 Breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1987 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1988 if (cmd->bufLen < payloadOffset + 4)
1990 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1992 TimeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1994 wasHandled = emberAfNetworkCommissioningClusterRemoveNetworkCallback(NetworkID, Breadcrumb, TimeoutMs);
1997 case ZCL_SCAN_NETWORKS_COMMAND_ID: {
1998 uint16_t payloadOffset = cmd->payloadStartIndex;
1999 chip::ByteSpan ssid;
2000 uint64_t breadcrumb;
2003 if (cmd->bufLen < payloadOffset + 1u)
2005 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2008 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
2009 ssid = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
2011 payloadOffset = static_cast<uint16_t>(payloadOffset + ssid.size() + 1u);
2012 if (cmd->bufLen < payloadOffset + 8)
2014 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2016 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
2017 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
2018 if (cmd->bufLen < payloadOffset + 4)
2020 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2022 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
2024 wasHandled = emberAfNetworkCommissioningClusterScanNetworksCallback(ssid, breadcrumb, timeoutMs);
2027 case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
2028 uint16_t payloadOffset = cmd->payloadStartIndex;
2029 chip::ByteSpan operationalDataset;
2030 uint64_t breadcrumb;
2033 if (cmd->bufLen < payloadOffset + 1u)
2035 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2038 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
2039 operationalDataset = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
2041 payloadOffset = static_cast<uint16_t>(payloadOffset + operationalDataset.size() + 1u);
2042 if (cmd->bufLen < payloadOffset + 8)
2044 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2046 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
2047 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
2048 if (cmd->bufLen < payloadOffset + 4)
2050 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2052 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
2054 wasHandled = emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
2057 case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
2058 uint16_t payloadOffset = cmd->payloadStartIndex;
2059 chip::ByteSpan ssid;
2060 chip::ByteSpan credentials;
2061 uint64_t breadcrumb;
2064 if (cmd->bufLen < payloadOffset + 1u)
2066 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2069 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
2070 ssid = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
2072 payloadOffset = static_cast<uint16_t>(payloadOffset + ssid.size() + 1u);
2073 if (cmd->bufLen < payloadOffset + 1u)
2075 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2078 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
2079 credentials = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
2081 payloadOffset = static_cast<uint16_t>(payloadOffset + credentials.size() + 1u);
2082 if (cmd->bufLen < payloadOffset + 8)
2084 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2086 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
2087 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
2088 if (cmd->bufLen < payloadOffset + 4)
2090 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2092 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
2094 wasHandled = emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
2098 // Unrecognized command ID, error status will apply.
2103 return status(wasHandled, true, cmd->mfgSpecific);
2105 EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd)
2107 bool wasHandled = false;
2109 if (!cmd->mfgSpecific)
2111 switch (cmd->commandId)
2113 case ZCL_OFF_COMMAND_ID: {
2114 wasHandled = emberAfOnOffClusterOffCallback();
2117 case ZCL_ON_COMMAND_ID: {
2118 wasHandled = emberAfOnOffClusterOnCallback();
2121 case ZCL_TOGGLE_COMMAND_ID: {
2122 wasHandled = emberAfOnOffClusterToggleCallback();
2126 // Unrecognized command ID, error status will apply.
2131 return status(wasHandled, true, cmd->mfgSpecific);
2133 EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand * cmd)
2135 bool wasHandled = false;
2137 if (!cmd->mfgSpecific)
2139 switch (cmd->commandId)
2141 case ZCL_ADD_SCENE_COMMAND_ID: {
2142 uint16_t payloadOffset = cmd->payloadStartIndex;
2145 uint16_t transitionTime;
2146 uint8_t * sceneName;
2147 /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets;
2149 if (cmd->bufLen < payloadOffset + 2)
2151 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2153 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2154 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2155 if (cmd->bufLen < payloadOffset + 1)
2157 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2159 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2160 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
2161 if (cmd->bufLen < payloadOffset + 2)
2163 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2165 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2166 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2167 if (cmd->bufLen < payloadOffset + 1u)
2169 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2171 sceneName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
2172 payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(sceneName) + 1u);
2173 extensionFieldSets = cmd->buffer + payloadOffset;
2175 wasHandled = emberAfScenesClusterAddSceneCallback(groupId, sceneId, transitionTime, sceneName, extensionFieldSets);
2178 case ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID: {
2179 uint16_t payloadOffset = cmd->payloadStartIndex;
2182 if (cmd->bufLen < payloadOffset + 2)
2184 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2186 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2188 wasHandled = emberAfScenesClusterGetSceneMembershipCallback(groupId);
2191 case ZCL_RECALL_SCENE_COMMAND_ID: {
2192 uint16_t payloadOffset = cmd->payloadStartIndex;
2195 uint16_t transitionTime;
2197 if (cmd->bufLen < payloadOffset + 2)
2199 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2201 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2202 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2203 if (cmd->bufLen < payloadOffset + 1)
2205 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2207 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2208 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
2209 if (cmd->bufLen < payloadOffset + 2)
2211 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2213 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2215 wasHandled = emberAfScenesClusterRecallSceneCallback(groupId, sceneId, transitionTime);
2218 case ZCL_REMOVE_ALL_SCENES_COMMAND_ID: {
2219 uint16_t payloadOffset = cmd->payloadStartIndex;
2222 if (cmd->bufLen < payloadOffset + 2)
2224 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2226 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2228 wasHandled = emberAfScenesClusterRemoveAllScenesCallback(groupId);
2231 case ZCL_REMOVE_SCENE_COMMAND_ID: {
2232 uint16_t payloadOffset = cmd->payloadStartIndex;
2236 if (cmd->bufLen < payloadOffset + 2)
2238 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2240 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2241 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2242 if (cmd->bufLen < payloadOffset + 1)
2244 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2246 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2248 wasHandled = emberAfScenesClusterRemoveSceneCallback(groupId, sceneId);
2251 case ZCL_STORE_SCENE_COMMAND_ID: {
2252 uint16_t payloadOffset = cmd->payloadStartIndex;
2256 if (cmd->bufLen < payloadOffset + 2)
2258 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2260 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2261 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2262 if (cmd->bufLen < payloadOffset + 1)
2264 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2266 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2268 wasHandled = emberAfScenesClusterStoreSceneCallback(groupId, sceneId);
2271 case ZCL_VIEW_SCENE_COMMAND_ID: {
2272 uint16_t payloadOffset = cmd->payloadStartIndex;
2276 if (cmd->bufLen < payloadOffset + 2)
2278 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2280 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2281 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2282 if (cmd->bufLen < payloadOffset + 1)
2284 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2286 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2288 wasHandled = emberAfScenesClusterViewSceneCallback(groupId, sceneId);
2292 // Unrecognized command ID, error status will apply.
2297 return status(wasHandled, true, cmd->mfgSpecific);