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 emberAfBarrierControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
33 EmberAfStatus emberAfBarrierControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
34 EmberAfStatus emberAfBasicClusterServerCommandParse(EmberAfClusterCommand * cmd);
35 EmberAfStatus emberAfColorControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
36 EmberAfStatus emberAfColorControlClusterServerCommandParse(EmberAfClusterCommand * cmd);
37 EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd);
38 EmberAfStatus emberAfDoorLockClusterServerCommandParse(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)
78 case ZCL_BARRIER_CONTROL_CLUSTER_ID:
79 // No commands are enabled for cluster Barrier Control
80 result = status(false, true, cmd->mfgSpecific);
82 case ZCL_COLOR_CONTROL_CLUSTER_ID:
83 // No commands are enabled for cluster Color Control
84 result = status(false, true, cmd->mfgSpecific);
86 case ZCL_DOOR_LOCK_CLUSTER_ID:
87 result = emberAfDoorLockClusterClientCommandParse(cmd);
90 // Unrecognized cluster ID, error status will apply.
94 else if (cmd->direction == (uint8_t) ZCL_DIRECTION_CLIENT_TO_SERVER &&
95 emberAfContainsServerWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
97 switch (cmd->apsFrame->clusterId)
99 case ZCL_APPLICATION_BASIC_CLUSTER_ID:
100 // No commands are enabled for cluster Application Basic
101 result = status(false, true, cmd->mfgSpecific);
103 case ZCL_BARRIER_CONTROL_CLUSTER_ID:
104 result = emberAfBarrierControlClusterServerCommandParse(cmd);
106 case ZCL_BASIC_CLUSTER_ID:
107 // No commands are enabled for cluster Basic
108 result = status(false, true, cmd->mfgSpecific);
110 case ZCL_COLOR_CONTROL_CLUSTER_ID:
111 result = emberAfColorControlClusterServerCommandParse(cmd);
113 case ZCL_DOOR_LOCK_CLUSTER_ID:
114 result = emberAfDoorLockClusterServerCommandParse(cmd);
116 case ZCL_GROUPS_CLUSTER_ID:
117 result = emberAfGroupsClusterServerCommandParse(cmd);
119 case ZCL_IAS_ZONE_CLUSTER_ID:
120 result = emberAfIasZoneClusterServerCommandParse(cmd);
122 case ZCL_IDENTIFY_CLUSTER_ID:
123 result = emberAfIdentifyClusterServerCommandParse(cmd);
125 case ZCL_LEVEL_CONTROL_CLUSTER_ID:
126 result = emberAfLevelControlClusterServerCommandParse(cmd);
128 case ZCL_LOW_POWER_CLUSTER_ID:
129 result = emberAfLowPowerClusterServerCommandParse(cmd);
131 case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
132 result = emberAfNetworkCommissioningClusterServerCommandParse(cmd);
134 case ZCL_ON_OFF_CLUSTER_ID:
135 result = emberAfOnOffClusterServerCommandParse(cmd);
137 case ZCL_SCENES_CLUSTER_ID:
138 result = emberAfScenesClusterServerCommandParse(cmd);
140 case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
141 // No commands are enabled for cluster Temperature Measurement
142 result = status(false, true, cmd->mfgSpecific);
145 // Unrecognized cluster ID, error status will apply.
152 // Cluster specific command parsing
154 EmberAfStatus emberAfBarrierControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
156 bool wasHandled = false;
158 if (!cmd->mfgSpecific)
160 switch (cmd->commandId)
162 case ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID: {
163 uint16_t payloadOffset = cmd->payloadStartIndex;
166 if (cmd->bufLen < payloadOffset + 1)
168 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
170 percentOpen = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
172 wasHandled = emberAfBarrierControlClusterBarrierControlGoToPercentCallback(percentOpen);
175 case ZCL_BARRIER_CONTROL_STOP_COMMAND_ID: {
176 wasHandled = emberAfBarrierControlClusterBarrierControlStopCallback();
180 // Unrecognized command ID, error status will apply.
185 return status(wasHandled, true, cmd->mfgSpecific);
187 EmberAfStatus emberAfColorControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
189 bool wasHandled = false;
191 if (!cmd->mfgSpecific)
193 switch (cmd->commandId)
195 case ZCL_MOVE_COLOR_COMMAND_ID: {
196 uint16_t payloadOffset = cmd->payloadStartIndex;
200 uint8_t optionsOverride;
202 if (cmd->bufLen < payloadOffset + 2)
204 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
206 rateX = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
207 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
208 if (cmd->bufLen < payloadOffset + 2)
210 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
212 rateY = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
213 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
214 if (cmd->bufLen < payloadOffset + 1)
216 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
218 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
219 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
220 if (cmd->bufLen < payloadOffset + 1)
222 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
224 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
226 wasHandled = emberAfColorControlClusterMoveColorCallback(rateX, rateY, optionsMask, optionsOverride);
229 case ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID: {
230 uint16_t payloadOffset = cmd->payloadStartIndex;
233 uint16_t colorTemperatureMinimum;
234 uint16_t colorTemperatureMaximum;
236 uint8_t optionsOverride;
238 if (cmd->bufLen < payloadOffset + 1)
240 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
242 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
243 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
244 if (cmd->bufLen < payloadOffset + 2)
246 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
248 rate = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
249 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
250 if (cmd->bufLen < payloadOffset + 2)
252 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
254 colorTemperatureMinimum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
255 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
256 if (cmd->bufLen < payloadOffset + 2)
258 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
260 colorTemperatureMaximum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
261 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
262 if (cmd->bufLen < payloadOffset + 1)
264 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
266 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
267 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
268 if (cmd->bufLen < payloadOffset + 1)
270 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
272 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
274 wasHandled = emberAfColorControlClusterMoveColorTemperatureCallback(
275 moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
278 case ZCL_MOVE_HUE_COMMAND_ID: {
279 uint16_t payloadOffset = cmd->payloadStartIndex;
283 uint8_t optionsOverride;
285 if (cmd->bufLen < payloadOffset + 1)
287 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
289 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
290 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
291 if (cmd->bufLen < payloadOffset + 1)
293 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
295 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
296 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
297 if (cmd->bufLen < payloadOffset + 1)
299 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
301 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
302 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
303 if (cmd->bufLen < payloadOffset + 1)
305 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
307 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
309 wasHandled = emberAfColorControlClusterMoveHueCallback(moveMode, rate, optionsMask, optionsOverride);
312 case ZCL_MOVE_SATURATION_COMMAND_ID: {
313 uint16_t payloadOffset = cmd->payloadStartIndex;
317 uint8_t optionsOverride;
319 if (cmd->bufLen < payloadOffset + 1)
321 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
323 moveMode = 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 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
330 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
331 if (cmd->bufLen < payloadOffset + 1)
333 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
335 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
336 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
337 if (cmd->bufLen < payloadOffset + 1)
339 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
341 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
343 wasHandled = emberAfColorControlClusterMoveSaturationCallback(moveMode, rate, optionsMask, optionsOverride);
346 case ZCL_MOVE_TO_COLOR_COMMAND_ID: {
347 uint16_t payloadOffset = cmd->payloadStartIndex;
350 uint16_t transitionTime;
352 uint8_t optionsOverride;
354 if (cmd->bufLen < payloadOffset + 2)
356 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
358 colorX = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
359 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
360 if (cmd->bufLen < payloadOffset + 2)
362 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
364 colorY = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
365 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
366 if (cmd->bufLen < payloadOffset + 2)
368 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
370 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
371 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
372 if (cmd->bufLen < payloadOffset + 1)
374 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
376 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
377 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
378 if (cmd->bufLen < payloadOffset + 1)
380 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
382 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
385 emberAfColorControlClusterMoveToColorCallback(colorX, colorY, transitionTime, optionsMask, optionsOverride);
388 case ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID: {
389 uint16_t payloadOffset = cmd->payloadStartIndex;
390 uint16_t colorTemperature;
391 uint16_t transitionTime;
393 uint8_t optionsOverride;
395 if (cmd->bufLen < payloadOffset + 2)
397 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
399 colorTemperature = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
400 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
401 if (cmd->bufLen < payloadOffset + 2)
403 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
405 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
406 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
407 if (cmd->bufLen < payloadOffset + 1)
409 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
411 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
412 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
413 if (cmd->bufLen < payloadOffset + 1)
415 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
417 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
419 wasHandled = emberAfColorControlClusterMoveToColorTemperatureCallback(colorTemperature, transitionTime, optionsMask,
423 case ZCL_MOVE_TO_HUE_COMMAND_ID: {
424 uint16_t payloadOffset = cmd->payloadStartIndex;
427 uint16_t transitionTime;
429 uint8_t optionsOverride;
431 if (cmd->bufLen < payloadOffset + 1)
433 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
435 hue = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
436 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
437 if (cmd->bufLen < payloadOffset + 1)
439 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
441 direction = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
442 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
443 if (cmd->bufLen < payloadOffset + 2)
445 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
447 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
448 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
449 if (cmd->bufLen < payloadOffset + 1)
451 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
453 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
454 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
455 if (cmd->bufLen < payloadOffset + 1)
457 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
459 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
461 wasHandled = emberAfColorControlClusterMoveToHueCallback(hue, direction, transitionTime, optionsMask, optionsOverride);
464 case ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID: {
465 uint16_t payloadOffset = cmd->payloadStartIndex;
468 uint16_t transitionTime;
470 uint8_t optionsOverride;
472 if (cmd->bufLen < payloadOffset + 1)
474 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
476 hue = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
477 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
478 if (cmd->bufLen < payloadOffset + 1)
480 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
482 saturation = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
483 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
484 if (cmd->bufLen < payloadOffset + 2)
486 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
488 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
489 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
490 if (cmd->bufLen < payloadOffset + 1)
492 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
494 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
495 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
496 if (cmd->bufLen < payloadOffset + 1)
498 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
500 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
502 wasHandled = emberAfColorControlClusterMoveToHueAndSaturationCallback(hue, saturation, transitionTime, optionsMask,
506 case ZCL_MOVE_TO_SATURATION_COMMAND_ID: {
507 uint16_t payloadOffset = cmd->payloadStartIndex;
509 uint16_t transitionTime;
511 uint8_t optionsOverride;
513 if (cmd->bufLen < payloadOffset + 1)
515 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
517 saturation = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
518 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
519 if (cmd->bufLen < payloadOffset + 2)
521 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
523 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
524 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
525 if (cmd->bufLen < payloadOffset + 1)
527 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
529 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
530 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
531 if (cmd->bufLen < payloadOffset + 1)
533 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
535 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
538 emberAfColorControlClusterMoveToSaturationCallback(saturation, transitionTime, optionsMask, optionsOverride);
541 case ZCL_STEP_COLOR_COMMAND_ID: {
542 uint16_t payloadOffset = cmd->payloadStartIndex;
545 uint16_t transitionTime;
547 uint8_t optionsOverride;
549 if (cmd->bufLen < payloadOffset + 2)
551 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
553 stepX = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
554 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
555 if (cmd->bufLen < payloadOffset + 2)
557 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
559 stepY = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
560 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
561 if (cmd->bufLen < payloadOffset + 2)
563 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
565 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
566 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
567 if (cmd->bufLen < payloadOffset + 1)
569 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
571 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
572 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
573 if (cmd->bufLen < payloadOffset + 1)
575 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
577 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
579 wasHandled = emberAfColorControlClusterStepColorCallback(stepX, stepY, transitionTime, optionsMask, optionsOverride);
582 case ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID: {
583 uint16_t payloadOffset = cmd->payloadStartIndex;
586 uint16_t transitionTime;
587 uint16_t colorTemperatureMinimum;
588 uint16_t colorTemperatureMaximum;
590 uint8_t optionsOverride;
592 if (cmd->bufLen < payloadOffset + 1)
594 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
596 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
597 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
598 if (cmd->bufLen < payloadOffset + 2)
600 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
602 stepSize = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
603 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
604 if (cmd->bufLen < payloadOffset + 2)
606 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
608 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
609 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
610 if (cmd->bufLen < payloadOffset + 2)
612 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
614 colorTemperatureMinimum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
615 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
616 if (cmd->bufLen < payloadOffset + 2)
618 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
620 colorTemperatureMaximum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
621 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
622 if (cmd->bufLen < payloadOffset + 1)
624 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
626 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
627 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
628 if (cmd->bufLen < payloadOffset + 1)
630 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
632 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
634 wasHandled = emberAfColorControlClusterStepColorTemperatureCallback(
635 stepMode, stepSize, transitionTime, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
638 case ZCL_STEP_HUE_COMMAND_ID: {
639 uint16_t payloadOffset = cmd->payloadStartIndex;
642 uint8_t transitionTime;
644 uint8_t optionsOverride;
646 if (cmd->bufLen < payloadOffset + 1)
648 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
650 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
651 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
652 if (cmd->bufLen < payloadOffset + 1)
654 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
656 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
657 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
658 if (cmd->bufLen < payloadOffset + 1)
660 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
662 transitionTime = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
663 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
664 if (cmd->bufLen < payloadOffset + 1)
666 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
668 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
669 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
670 if (cmd->bufLen < payloadOffset + 1)
672 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
674 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
677 emberAfColorControlClusterStepHueCallback(stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
680 case ZCL_STEP_SATURATION_COMMAND_ID: {
681 uint16_t payloadOffset = cmd->payloadStartIndex;
684 uint8_t transitionTime;
686 uint8_t optionsOverride;
688 if (cmd->bufLen < payloadOffset + 1)
690 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
692 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
693 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
694 if (cmd->bufLen < payloadOffset + 1)
696 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
698 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
699 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
700 if (cmd->bufLen < payloadOffset + 1)
702 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
704 transitionTime = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
705 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
706 if (cmd->bufLen < payloadOffset + 1)
708 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
710 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
711 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
712 if (cmd->bufLen < payloadOffset + 1)
714 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
716 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
719 emberAfColorControlClusterStepSaturationCallback(stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
722 case ZCL_STOP_MOVE_STEP_COMMAND_ID: {
723 uint16_t payloadOffset = cmd->payloadStartIndex;
725 uint8_t optionsOverride;
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 = emberAfColorControlClusterStopMoveStepCallback(optionsMask, optionsOverride);
743 // Unrecognized command ID, error status will apply.
748 return status(wasHandled, true, cmd->mfgSpecific);
750 EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd)
752 bool wasHandled = false;
754 if (!cmd->mfgSpecific)
756 switch (cmd->commandId)
758 case ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID: {
759 uint16_t payloadOffset = cmd->payloadStartIndex;
762 if (cmd->bufLen < payloadOffset + 1)
764 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
766 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
768 wasHandled = emberAfDoorLockClusterLockDoorResponseCallback(status);
771 case ZCL_UNLOCK_DOOR_RESPONSE_COMMAND_ID: {
772 uint16_t payloadOffset = cmd->payloadStartIndex;
775 if (cmd->bufLen < payloadOffset + 1)
777 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
779 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
781 wasHandled = emberAfDoorLockClusterUnlockDoorResponseCallback(status);
785 // Unrecognized command ID, error status will apply.
790 return status(wasHandled, true, cmd->mfgSpecific);
792 EmberAfStatus emberAfDoorLockClusterServerCommandParse(EmberAfClusterCommand * cmd)
794 bool wasHandled = false;
796 if (!cmd->mfgSpecific)
798 switch (cmd->commandId)
800 case ZCL_CLEAR_ALL_PINS_COMMAND_ID: {
801 wasHandled = emberAfDoorLockClusterClearAllPinsCallback();
804 case ZCL_CLEAR_ALL_RFIDS_COMMAND_ID: {
805 wasHandled = emberAfDoorLockClusterClearAllRfidsCallback();
808 case ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID: {
809 uint16_t payloadOffset = cmd->payloadStartIndex;
812 if (cmd->bufLen < payloadOffset + 1)
814 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
816 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
818 wasHandled = emberAfDoorLockClusterClearHolidayScheduleCallback(scheduleId);
821 case ZCL_CLEAR_PIN_COMMAND_ID: {
822 uint16_t payloadOffset = cmd->payloadStartIndex;
825 if (cmd->bufLen < payloadOffset + 2)
827 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
829 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
831 wasHandled = emberAfDoorLockClusterClearPinCallback(userId);
834 case ZCL_CLEAR_RFID_COMMAND_ID: {
835 uint16_t payloadOffset = cmd->payloadStartIndex;
838 if (cmd->bufLen < payloadOffset + 2)
840 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
842 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
844 wasHandled = emberAfDoorLockClusterClearRfidCallback(userId);
847 case ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID: {
848 uint16_t payloadOffset = cmd->payloadStartIndex;
852 if (cmd->bufLen < payloadOffset + 1)
854 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
856 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
857 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
858 if (cmd->bufLen < payloadOffset + 2)
860 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
862 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
864 wasHandled = emberAfDoorLockClusterClearWeekdayScheduleCallback(scheduleId, userId);
867 case ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID: {
868 uint16_t payloadOffset = cmd->payloadStartIndex;
872 if (cmd->bufLen < payloadOffset + 1)
874 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
876 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
877 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
878 if (cmd->bufLen < payloadOffset + 2)
880 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
882 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
884 wasHandled = emberAfDoorLockClusterClearYeardayScheduleCallback(scheduleId, userId);
887 case ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID: {
888 uint16_t payloadOffset = cmd->payloadStartIndex;
891 if (cmd->bufLen < payloadOffset + 1)
893 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
895 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
897 wasHandled = emberAfDoorLockClusterGetHolidayScheduleCallback(scheduleId);
900 case ZCL_GET_LOG_RECORD_COMMAND_ID: {
901 uint16_t payloadOffset = cmd->payloadStartIndex;
904 if (cmd->bufLen < payloadOffset + 2)
906 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
908 logIndex = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
910 wasHandled = emberAfDoorLockClusterGetLogRecordCallback(logIndex);
913 case ZCL_GET_PIN_COMMAND_ID: {
914 uint16_t payloadOffset = cmd->payloadStartIndex;
917 if (cmd->bufLen < payloadOffset + 2)
919 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
921 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
923 wasHandled = emberAfDoorLockClusterGetPinCallback(userId);
926 case ZCL_GET_RFID_COMMAND_ID: {
927 uint16_t payloadOffset = cmd->payloadStartIndex;
930 if (cmd->bufLen < payloadOffset + 2)
932 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
934 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
936 wasHandled = emberAfDoorLockClusterGetRfidCallback(userId);
939 case ZCL_GET_USER_TYPE_COMMAND_ID: {
940 uint16_t payloadOffset = cmd->payloadStartIndex;
943 if (cmd->bufLen < payloadOffset + 2)
945 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
947 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
949 wasHandled = emberAfDoorLockClusterGetUserTypeCallback(userId);
952 case ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID: {
953 uint16_t payloadOffset = cmd->payloadStartIndex;
957 if (cmd->bufLen < payloadOffset + 1)
959 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
961 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
962 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
963 if (cmd->bufLen < payloadOffset + 2)
965 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
967 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
969 wasHandled = emberAfDoorLockClusterGetWeekdayScheduleCallback(scheduleId, userId);
972 case ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID: {
973 uint16_t payloadOffset = cmd->payloadStartIndex;
977 if (cmd->bufLen < payloadOffset + 1)
979 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
981 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
982 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
983 if (cmd->bufLen < payloadOffset + 2)
985 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
987 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
989 wasHandled = emberAfDoorLockClusterGetYeardayScheduleCallback(scheduleId, userId);
992 case ZCL_LOCK_DOOR_COMMAND_ID: {
993 uint16_t payloadOffset = cmd->payloadStartIndex;
996 if (cmd->bufLen < payloadOffset + 1u)
998 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1000 PIN = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1002 wasHandled = emberAfDoorLockClusterLockDoorCallback(PIN);
1005 case ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID: {
1006 uint16_t payloadOffset = cmd->payloadStartIndex;
1008 uint32_t localStartTime;
1009 uint32_t localEndTime;
1010 uint8_t operatingModeDuringHoliday;
1012 if (cmd->bufLen < payloadOffset + 1)
1014 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1016 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1017 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1018 if (cmd->bufLen < payloadOffset + 4)
1020 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1022 localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1023 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1024 if (cmd->bufLen < payloadOffset + 4)
1026 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1028 localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1029 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1030 if (cmd->bufLen < payloadOffset + 1)
1032 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1034 operatingModeDuringHoliday = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1036 wasHandled = emberAfDoorLockClusterSetHolidayScheduleCallback(scheduleId, localStartTime, localEndTime,
1037 operatingModeDuringHoliday);
1040 case ZCL_SET_PIN_COMMAND_ID: {
1041 uint16_t payloadOffset = cmd->payloadStartIndex;
1047 if (cmd->bufLen < payloadOffset + 2)
1049 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1051 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1052 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1053 if (cmd->bufLen < payloadOffset + 1)
1055 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1057 userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1058 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1059 if (cmd->bufLen < payloadOffset + 1)
1061 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1063 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1064 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1065 if (cmd->bufLen < payloadOffset + 1u)
1067 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1069 pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1071 wasHandled = emberAfDoorLockClusterSetPinCallback(userId, userStatus, userType, pin);
1074 case ZCL_SET_RFID_COMMAND_ID: {
1075 uint16_t payloadOffset = cmd->payloadStartIndex;
1081 if (cmd->bufLen < payloadOffset + 2)
1083 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1085 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1086 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1087 if (cmd->bufLen < payloadOffset + 1)
1089 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1091 userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1092 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1093 if (cmd->bufLen < payloadOffset + 1)
1095 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1097 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1098 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1099 if (cmd->bufLen < payloadOffset + 1u)
1101 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1103 id = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1105 wasHandled = emberAfDoorLockClusterSetRfidCallback(userId, userStatus, userType, id);
1108 case ZCL_SET_USER_TYPE_COMMAND_ID: {
1109 uint16_t payloadOffset = cmd->payloadStartIndex;
1113 if (cmd->bufLen < payloadOffset + 2)
1115 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1117 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1118 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1119 if (cmd->bufLen < payloadOffset + 1)
1121 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1123 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1125 wasHandled = emberAfDoorLockClusterSetUserTypeCallback(userId, userType);
1128 case ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID: {
1129 uint16_t payloadOffset = cmd->payloadStartIndex;
1134 uint8_t startMinute;
1138 if (cmd->bufLen < payloadOffset + 1)
1140 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1142 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1143 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
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 daysMask = 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 startHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1161 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1162 if (cmd->bufLen < payloadOffset + 1)
1164 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1166 startMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1167 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1168 if (cmd->bufLen < payloadOffset + 1)
1170 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1172 endHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1173 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1174 if (cmd->bufLen < payloadOffset + 1)
1176 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1178 endMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1180 wasHandled = emberAfDoorLockClusterSetWeekdayScheduleCallback(scheduleId, userId, daysMask, startHour, startMinute,
1181 endHour, endMinute);
1184 case ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID: {
1185 uint16_t payloadOffset = cmd->payloadStartIndex;
1188 uint32_t localStartTime;
1189 uint32_t localEndTime;
1191 if (cmd->bufLen < payloadOffset + 1)
1193 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1195 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1196 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1197 if (cmd->bufLen < payloadOffset + 2)
1199 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1201 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1202 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1203 if (cmd->bufLen < payloadOffset + 4)
1205 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1207 localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1208 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1209 if (cmd->bufLen < payloadOffset + 4)
1211 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1213 localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1215 wasHandled = emberAfDoorLockClusterSetYeardayScheduleCallback(scheduleId, userId, localStartTime, localEndTime);
1218 case ZCL_UNLOCK_DOOR_COMMAND_ID: {
1219 uint16_t payloadOffset = cmd->payloadStartIndex;
1222 if (cmd->bufLen < payloadOffset + 1u)
1224 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1226 PIN = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1228 wasHandled = emberAfDoorLockClusterUnlockDoorCallback(PIN);
1231 case ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID: {
1232 uint16_t payloadOffset = cmd->payloadStartIndex;
1233 uint16_t timeoutInSeconds;
1236 if (cmd->bufLen < payloadOffset + 2)
1238 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1240 timeoutInSeconds = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1241 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1242 if (cmd->bufLen < payloadOffset + 1u)
1244 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1246 pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1248 wasHandled = emberAfDoorLockClusterUnlockWithTimeoutCallback(timeoutInSeconds, pin);
1252 // Unrecognized command ID, error status will apply.
1257 return status(wasHandled, true, cmd->mfgSpecific);
1259 EmberAfStatus emberAfGroupsClusterServerCommandParse(EmberAfClusterCommand * cmd)
1261 bool wasHandled = false;
1263 if (!cmd->mfgSpecific)
1265 switch (cmd->commandId)
1267 case ZCL_ADD_GROUP_COMMAND_ID: {
1268 uint16_t payloadOffset = cmd->payloadStartIndex;
1270 uint8_t * groupName;
1272 if (cmd->bufLen < payloadOffset + 2)
1274 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1276 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1277 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1278 if (cmd->bufLen < payloadOffset + 1u)
1280 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1282 groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1284 wasHandled = emberAfGroupsClusterAddGroupCallback(groupId, groupName);
1287 case ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID: {
1288 uint16_t payloadOffset = cmd->payloadStartIndex;
1290 uint8_t * groupName;
1292 if (cmd->bufLen < payloadOffset + 2)
1294 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1296 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1297 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1298 if (cmd->bufLen < payloadOffset + 1u)
1300 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1302 groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1304 wasHandled = emberAfGroupsClusterAddGroupIfIdentifyingCallback(groupId, groupName);
1307 case ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID: {
1308 uint16_t payloadOffset = cmd->payloadStartIndex;
1310 /* TYPE WARNING: array array defaults to */ uint8_t * groupList;
1312 if (cmd->bufLen < payloadOffset + 1)
1314 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1316 groupCount = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1317 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1318 groupList = cmd->buffer + payloadOffset;
1320 wasHandled = emberAfGroupsClusterGetGroupMembershipCallback(groupCount, groupList);
1323 case ZCL_REMOVE_ALL_GROUPS_COMMAND_ID: {
1324 wasHandled = emberAfGroupsClusterRemoveAllGroupsCallback();
1327 case ZCL_REMOVE_GROUP_COMMAND_ID: {
1328 uint16_t payloadOffset = cmd->payloadStartIndex;
1331 if (cmd->bufLen < payloadOffset + 2)
1333 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1335 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1337 wasHandled = emberAfGroupsClusterRemoveGroupCallback(groupId);
1340 case ZCL_VIEW_GROUP_COMMAND_ID: {
1341 uint16_t payloadOffset = cmd->payloadStartIndex;
1344 if (cmd->bufLen < payloadOffset + 2)
1346 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1348 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1350 wasHandled = emberAfGroupsClusterViewGroupCallback(groupId);
1354 // Unrecognized command ID, error status will apply.
1359 return status(wasHandled, true, cmd->mfgSpecific);
1361 EmberAfStatus emberAfIasZoneClusterServerCommandParse(EmberAfClusterCommand * cmd)
1363 bool wasHandled = false;
1365 if (!cmd->mfgSpecific)
1367 switch (cmd->commandId)
1369 case ZCL_ZONE_ENROLL_RESPONSE_COMMAND_ID: {
1370 uint16_t payloadOffset = cmd->payloadStartIndex;
1371 uint8_t enrollResponseCode;
1374 if (cmd->bufLen < payloadOffset + 1)
1376 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1378 enrollResponseCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1379 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1380 if (cmd->bufLen < payloadOffset + 1)
1382 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1384 zoneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1386 wasHandled = emberAfIasZoneClusterZoneEnrollResponseCallback(enrollResponseCode, zoneId);
1390 // Unrecognized command ID, error status will apply.
1395 return status(wasHandled, true, cmd->mfgSpecific);
1397 EmberAfStatus emberAfIdentifyClusterServerCommandParse(EmberAfClusterCommand * cmd)
1399 bool wasHandled = false;
1401 if (!cmd->mfgSpecific)
1403 switch (cmd->commandId)
1405 case ZCL_IDENTIFY_COMMAND_ID: {
1406 uint16_t payloadOffset = cmd->payloadStartIndex;
1407 uint16_t identifyTime;
1409 if (cmd->bufLen < payloadOffset + 2)
1411 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1413 identifyTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1415 wasHandled = emberAfIdentifyClusterIdentifyCallback(identifyTime);
1418 case ZCL_IDENTIFY_QUERY_COMMAND_ID: {
1419 wasHandled = emberAfIdentifyClusterIdentifyQueryCallback();
1423 // Unrecognized command ID, error status will apply.
1428 return status(wasHandled, true, cmd->mfgSpecific);
1430 EmberAfStatus emberAfLevelControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
1432 bool wasHandled = false;
1434 if (!cmd->mfgSpecific)
1436 switch (cmd->commandId)
1438 case ZCL_MOVE_COMMAND_ID: {
1439 uint16_t payloadOffset = cmd->payloadStartIndex;
1443 uint8_t optionOverride;
1445 if (cmd->bufLen < payloadOffset + 1)
1447 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1449 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1450 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1451 if (cmd->bufLen < payloadOffset + 1)
1453 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1455 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1456 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1457 if (cmd->bufLen < payloadOffset + 1)
1459 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1461 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1462 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1463 if (cmd->bufLen < payloadOffset + 1)
1465 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1467 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1469 wasHandled = emberAfLevelControlClusterMoveCallback(moveMode, rate, optionMask, optionOverride);
1472 case ZCL_MOVE_TO_LEVEL_COMMAND_ID: {
1473 uint16_t payloadOffset = cmd->payloadStartIndex;
1475 uint16_t transitionTime;
1477 uint8_t optionOverride;
1479 if (cmd->bufLen < payloadOffset + 1)
1481 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1483 level = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1484 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1485 if (cmd->bufLen < payloadOffset + 2)
1487 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1489 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1490 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1491 if (cmd->bufLen < payloadOffset + 1)
1493 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1495 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1496 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1497 if (cmd->bufLen < payloadOffset + 1)
1499 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1501 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1503 wasHandled = emberAfLevelControlClusterMoveToLevelCallback(level, transitionTime, optionMask, optionOverride);
1506 case ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID: {
1507 uint16_t payloadOffset = cmd->payloadStartIndex;
1509 uint16_t transitionTime;
1511 if (cmd->bufLen < payloadOffset + 1)
1513 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1515 level = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1516 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1517 if (cmd->bufLen < payloadOffset + 2)
1519 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1521 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1523 wasHandled = emberAfLevelControlClusterMoveToLevelWithOnOffCallback(level, transitionTime);
1526 case ZCL_MOVE_WITH_ON_OFF_COMMAND_ID: {
1527 uint16_t payloadOffset = cmd->payloadStartIndex;
1531 if (cmd->bufLen < payloadOffset + 1)
1533 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1535 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1536 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1537 if (cmd->bufLen < payloadOffset + 1)
1539 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1541 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1543 wasHandled = emberAfLevelControlClusterMoveWithOnOffCallback(moveMode, rate);
1546 case ZCL_STEP_COMMAND_ID: {
1547 uint16_t payloadOffset = cmd->payloadStartIndex;
1550 uint16_t transitionTime;
1552 uint8_t optionOverride;
1554 if (cmd->bufLen < payloadOffset + 1)
1556 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1558 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1559 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1560 if (cmd->bufLen < payloadOffset + 1)
1562 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1564 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1565 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1566 if (cmd->bufLen < payloadOffset + 2)
1568 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1570 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1571 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1572 if (cmd->bufLen < payloadOffset + 1)
1574 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1576 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1577 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1578 if (cmd->bufLen < payloadOffset + 1)
1580 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1582 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1584 wasHandled = emberAfLevelControlClusterStepCallback(stepMode, stepSize, transitionTime, optionMask, optionOverride);
1587 case ZCL_STEP_WITH_ON_OFF_COMMAND_ID: {
1588 uint16_t payloadOffset = cmd->payloadStartIndex;
1591 uint16_t transitionTime;
1593 if (cmd->bufLen < payloadOffset + 1)
1595 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1597 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1598 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1599 if (cmd->bufLen < payloadOffset + 1)
1601 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1603 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1604 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1605 if (cmd->bufLen < payloadOffset + 2)
1607 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1609 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1611 wasHandled = emberAfLevelControlClusterStepWithOnOffCallback(stepMode, stepSize, transitionTime);
1614 case ZCL_STOP_COMMAND_ID: {
1615 uint16_t payloadOffset = cmd->payloadStartIndex;
1617 uint8_t optionOverride;
1619 if (cmd->bufLen < payloadOffset + 1)
1621 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1623 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1624 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1625 if (cmd->bufLen < payloadOffset + 1)
1627 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1629 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1631 wasHandled = emberAfLevelControlClusterStopCallback(optionMask, optionOverride);
1634 case ZCL_STOP_WITH_ON_OFF_COMMAND_ID: {
1635 wasHandled = emberAfLevelControlClusterStopWithOnOffCallback();
1639 // Unrecognized command ID, error status will apply.
1644 return status(wasHandled, true, cmd->mfgSpecific);
1646 EmberAfStatus emberAfLowPowerClusterServerCommandParse(EmberAfClusterCommand * cmd)
1648 bool wasHandled = false;
1650 if (!cmd->mfgSpecific)
1652 switch (cmd->commandId)
1654 case ZCL_SLEEP_COMMAND_ID: {
1655 wasHandled = emberAfLowPowerClusterSleepCallback();
1659 // Unrecognized command ID, error status will apply.
1664 return status(wasHandled, true, cmd->mfgSpecific);
1666 EmberAfStatus emberAfNetworkCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd)
1668 bool wasHandled = false;
1670 if (!cmd->mfgSpecific)
1672 switch (cmd->commandId)
1674 case ZCL_ADD_THREAD_NETWORK_COMMAND_ID: {
1675 uint16_t payloadOffset = cmd->payloadStartIndex;
1676 chip::ByteSpan operationalDataset;
1677 uint64_t breadcrumb;
1680 if (cmd->bufLen < payloadOffset + 1u)
1682 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1685 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1686 operationalDataset = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1688 payloadOffset = static_cast<uint16_t>(payloadOffset + operationalDataset.size() + 1u);
1689 if (cmd->bufLen < payloadOffset + 8)
1691 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1693 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1694 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1695 if (cmd->bufLen < payloadOffset + 4)
1697 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1699 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1701 wasHandled = emberAfNetworkCommissioningClusterAddThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
1704 case ZCL_ADD_WI_FI_NETWORK_COMMAND_ID: {
1705 uint16_t payloadOffset = cmd->payloadStartIndex;
1706 chip::ByteSpan ssid;
1707 chip::ByteSpan credentials;
1708 uint64_t breadcrumb;
1711 if (cmd->bufLen < payloadOffset + 1u)
1713 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1716 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1717 ssid = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1719 payloadOffset = static_cast<uint16_t>(payloadOffset + ssid.size() + 1u);
1720 if (cmd->bufLen < payloadOffset + 1u)
1722 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1725 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1726 credentials = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1728 payloadOffset = static_cast<uint16_t>(payloadOffset + credentials.size() + 1u);
1729 if (cmd->bufLen < payloadOffset + 8)
1731 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1733 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1734 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1735 if (cmd->bufLen < payloadOffset + 4)
1737 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1739 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1741 wasHandled = emberAfNetworkCommissioningClusterAddWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
1744 case ZCL_DISABLE_NETWORK_COMMAND_ID: {
1745 uint16_t payloadOffset = cmd->payloadStartIndex;
1746 chip::ByteSpan networkID;
1747 uint64_t breadcrumb;
1750 if (cmd->bufLen < payloadOffset + 1u)
1752 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1755 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1756 networkID = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1758 payloadOffset = static_cast<uint16_t>(payloadOffset + networkID.size() + 1u);
1759 if (cmd->bufLen < payloadOffset + 8)
1761 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1763 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1764 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1765 if (cmd->bufLen < payloadOffset + 4)
1767 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1769 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1771 wasHandled = emberAfNetworkCommissioningClusterDisableNetworkCallback(networkID, breadcrumb, timeoutMs);
1774 case ZCL_ENABLE_NETWORK_COMMAND_ID: {
1775 uint16_t payloadOffset = cmd->payloadStartIndex;
1776 chip::ByteSpan networkID;
1777 uint64_t breadcrumb;
1780 if (cmd->bufLen < payloadOffset + 1u)
1782 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1785 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1786 networkID = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1788 payloadOffset = static_cast<uint16_t>(payloadOffset + networkID.size() + 1u);
1789 if (cmd->bufLen < payloadOffset + 8)
1791 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1793 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1794 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1795 if (cmd->bufLen < payloadOffset + 4)
1797 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1799 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1801 wasHandled = emberAfNetworkCommissioningClusterEnableNetworkCallback(networkID, breadcrumb, timeoutMs);
1804 case ZCL_GET_LAST_NETWORK_COMMISSIONING_RESULT_COMMAND_ID: {
1805 uint16_t payloadOffset = cmd->payloadStartIndex;
1808 if (cmd->bufLen < payloadOffset + 4)
1810 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1812 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1814 wasHandled = emberAfNetworkCommissioningClusterGetLastNetworkCommissioningResultCallback(timeoutMs);
1817 case ZCL_REMOVE_NETWORK_COMMAND_ID: {
1818 uint16_t payloadOffset = cmd->payloadStartIndex;
1819 chip::ByteSpan NetworkID;
1820 uint64_t Breadcrumb;
1823 if (cmd->bufLen < payloadOffset + 1u)
1825 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1828 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1829 NetworkID = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1831 payloadOffset = static_cast<uint16_t>(payloadOffset + NetworkID.size() + 1u);
1832 if (cmd->bufLen < payloadOffset + 8)
1834 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1836 Breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1837 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1838 if (cmd->bufLen < payloadOffset + 4)
1840 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1842 TimeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1844 wasHandled = emberAfNetworkCommissioningClusterRemoveNetworkCallback(NetworkID, Breadcrumb, TimeoutMs);
1847 case ZCL_SCAN_NETWORKS_COMMAND_ID: {
1848 uint16_t payloadOffset = cmd->payloadStartIndex;
1849 chip::ByteSpan ssid;
1850 uint64_t breadcrumb;
1853 if (cmd->bufLen < payloadOffset + 1u)
1855 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1858 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1859 ssid = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1861 payloadOffset = static_cast<uint16_t>(payloadOffset + ssid.size() + 1u);
1862 if (cmd->bufLen < payloadOffset + 8)
1864 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1866 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1867 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1868 if (cmd->bufLen < payloadOffset + 4)
1870 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1872 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1874 wasHandled = emberAfNetworkCommissioningClusterScanNetworksCallback(ssid, breadcrumb, timeoutMs);
1877 case ZCL_UPDATE_THREAD_NETWORK_COMMAND_ID: {
1878 uint16_t payloadOffset = cmd->payloadStartIndex;
1879 chip::ByteSpan operationalDataset;
1880 uint64_t breadcrumb;
1883 if (cmd->bufLen < payloadOffset + 1u)
1885 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1888 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1889 operationalDataset = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1891 payloadOffset = static_cast<uint16_t>(payloadOffset + operationalDataset.size() + 1u);
1892 if (cmd->bufLen < payloadOffset + 8)
1894 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1896 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1897 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1898 if (cmd->bufLen < payloadOffset + 4)
1900 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1902 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1904 wasHandled = emberAfNetworkCommissioningClusterUpdateThreadNetworkCallback(operationalDataset, breadcrumb, timeoutMs);
1907 case ZCL_UPDATE_WI_FI_NETWORK_COMMAND_ID: {
1908 uint16_t payloadOffset = cmd->payloadStartIndex;
1909 chip::ByteSpan ssid;
1910 chip::ByteSpan credentials;
1911 uint64_t breadcrumb;
1914 if (cmd->bufLen < payloadOffset + 1u)
1916 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1919 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1920 ssid = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1922 payloadOffset = static_cast<uint16_t>(payloadOffset + ssid.size() + 1u);
1923 if (cmd->bufLen < payloadOffset + 1u)
1925 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1928 uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1929 credentials = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
1931 payloadOffset = static_cast<uint16_t>(payloadOffset + credentials.size() + 1u);
1932 if (cmd->bufLen < payloadOffset + 8)
1934 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1936 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1937 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1938 if (cmd->bufLen < payloadOffset + 4)
1940 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1942 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1944 wasHandled = emberAfNetworkCommissioningClusterUpdateWiFiNetworkCallback(ssid, credentials, breadcrumb, timeoutMs);
1948 // Unrecognized command ID, error status will apply.
1953 return status(wasHandled, true, cmd->mfgSpecific);
1955 EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd)
1957 bool wasHandled = false;
1959 if (!cmd->mfgSpecific)
1961 switch (cmd->commandId)
1963 case ZCL_OFF_COMMAND_ID: {
1964 wasHandled = emberAfOnOffClusterOffCallback();
1967 case ZCL_ON_COMMAND_ID: {
1968 wasHandled = emberAfOnOffClusterOnCallback();
1971 case ZCL_TOGGLE_COMMAND_ID: {
1972 wasHandled = emberAfOnOffClusterToggleCallback();
1976 // Unrecognized command ID, error status will apply.
1981 return status(wasHandled, true, cmd->mfgSpecific);
1983 EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand * cmd)
1985 bool wasHandled = false;
1987 if (!cmd->mfgSpecific)
1989 switch (cmd->commandId)
1991 case ZCL_ADD_SCENE_COMMAND_ID: {
1992 uint16_t payloadOffset = cmd->payloadStartIndex;
1995 uint16_t transitionTime;
1996 uint8_t * sceneName;
1997 /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets;
1999 if (cmd->bufLen < payloadOffset + 2)
2001 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2003 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2004 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2005 if (cmd->bufLen < payloadOffset + 1)
2007 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2009 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2010 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
2011 if (cmd->bufLen < payloadOffset + 2)
2013 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2015 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2016 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2017 if (cmd->bufLen < payloadOffset + 1u)
2019 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2021 sceneName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
2022 payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(sceneName) + 1u);
2023 extensionFieldSets = cmd->buffer + payloadOffset;
2025 wasHandled = emberAfScenesClusterAddSceneCallback(groupId, sceneId, transitionTime, sceneName, extensionFieldSets);
2028 case ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID: {
2029 uint16_t payloadOffset = cmd->payloadStartIndex;
2032 if (cmd->bufLen < payloadOffset + 2)
2034 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2036 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2038 wasHandled = emberAfScenesClusterGetSceneMembershipCallback(groupId);
2041 case ZCL_RECALL_SCENE_COMMAND_ID: {
2042 uint16_t payloadOffset = cmd->payloadStartIndex;
2045 uint16_t transitionTime;
2047 if (cmd->bufLen < payloadOffset + 2)
2049 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2051 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2052 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2053 if (cmd->bufLen < payloadOffset + 1)
2055 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2057 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2058 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
2059 if (cmd->bufLen < payloadOffset + 2)
2061 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2063 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2065 wasHandled = emberAfScenesClusterRecallSceneCallback(groupId, sceneId, transitionTime);
2068 case ZCL_REMOVE_ALL_SCENES_COMMAND_ID: {
2069 uint16_t payloadOffset = cmd->payloadStartIndex;
2072 if (cmd->bufLen < payloadOffset + 2)
2074 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2076 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2078 wasHandled = emberAfScenesClusterRemoveAllScenesCallback(groupId);
2081 case ZCL_REMOVE_SCENE_COMMAND_ID: {
2082 uint16_t payloadOffset = cmd->payloadStartIndex;
2086 if (cmd->bufLen < payloadOffset + 2)
2088 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2090 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2091 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2092 if (cmd->bufLen < payloadOffset + 1)
2094 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2096 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2098 wasHandled = emberAfScenesClusterRemoveSceneCallback(groupId, sceneId);
2101 case ZCL_STORE_SCENE_COMMAND_ID: {
2102 uint16_t payloadOffset = cmd->payloadStartIndex;
2106 if (cmd->bufLen < payloadOffset + 2)
2108 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2110 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2111 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2112 if (cmd->bufLen < payloadOffset + 1)
2114 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2116 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2118 wasHandled = emberAfScenesClusterStoreSceneCallback(groupId, sceneId);
2121 case ZCL_VIEW_SCENE_COMMAND_ID: {
2122 uint16_t payloadOffset = cmd->payloadStartIndex;
2126 if (cmd->bufLen < payloadOffset + 2)
2128 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2130 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2131 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2132 if (cmd->bufLen < payloadOffset + 1)
2134 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2136 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2138 wasHandled = emberAfScenesClusterViewSceneCallback(groupId, sceneId);
2142 // Unrecognized command ID, error status will apply.
2147 return status(wasHandled, true, cmd->mfgSpecific);