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 "call-command-handler.h"
25 #include "cluster-id.h"
26 #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 emberAfContentLaunchClusterServerCommandParse(EmberAfClusterCommand * cmd);
37 EmberAfStatus emberAfDoorLockClusterServerCommandParse(EmberAfClusterCommand * cmd);
38 EmberAfStatus emberAfGeneralCommissioningClusterServerCommandParse(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 emberAfMediaPlaybackClusterServerCommandParse(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_CONTENT_LAUNCH_CLUSTER_ID:
105 result = emberAfContentLaunchClusterServerCommandParse(cmd);
107 case ZCL_DOOR_LOCK_CLUSTER_ID:
108 result = emberAfDoorLockClusterServerCommandParse(cmd);
110 case ZCL_GENERAL_COMMISSIONING_CLUSTER_ID:
111 result = emberAfGeneralCommissioningClusterServerCommandParse(cmd);
113 case ZCL_GROUPS_CLUSTER_ID:
114 result = emberAfGroupsClusterServerCommandParse(cmd);
116 case ZCL_IAS_ZONE_CLUSTER_ID:
117 result = emberAfIasZoneClusterServerCommandParse(cmd);
119 case ZCL_IDENTIFY_CLUSTER_ID:
120 result = emberAfIdentifyClusterServerCommandParse(cmd);
122 case ZCL_LEVEL_CONTROL_CLUSTER_ID:
123 result = emberAfLevelControlClusterServerCommandParse(cmd);
125 case ZCL_LOW_POWER_CLUSTER_ID:
126 result = emberAfLowPowerClusterServerCommandParse(cmd);
128 case ZCL_MEDIA_PLAYBACK_CLUSTER_ID:
129 result = emberAfMediaPlaybackClusterServerCommandParse(cmd);
131 case ZCL_ON_OFF_CLUSTER_ID:
132 result = emberAfOnOffClusterServerCommandParse(cmd);
134 case ZCL_SCENES_CLUSTER_ID:
135 result = emberAfScenesClusterServerCommandParse(cmd);
137 case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
138 // No commands are enabled for cluster Temperature Measurement
139 result = status(false, true, cmd->mfgSpecific);
142 // Unrecognized cluster ID, error status will apply.
149 // Cluster specific command parsing
151 EmberAfStatus emberAfBarrierControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
153 bool wasHandled = false;
155 if (!cmd->mfgSpecific)
157 switch (cmd->commandId)
159 case ZCL_BARRIER_CONTROL_GO_TO_PERCENT_COMMAND_ID: {
160 uint16_t payloadOffset = cmd->payloadStartIndex;
163 if (cmd->bufLen < payloadOffset + 1)
165 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
167 percentOpen = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
169 wasHandled = emberAfBarrierControlClusterBarrierControlGoToPercentCallback(percentOpen);
172 case ZCL_BARRIER_CONTROL_STOP_COMMAND_ID: {
173 wasHandled = emberAfBarrierControlClusterBarrierControlStopCallback();
177 // Unrecognized command ID, error status will apply.
182 return status(wasHandled, true, cmd->mfgSpecific);
184 EmberAfStatus emberAfBasicClusterServerCommandParse(EmberAfClusterCommand * cmd)
186 bool wasHandled = false;
188 if (cmd->mfgSpecific)
190 if (cmd->mfgCode == 4098 && cmd->commandId == ZCL_MFG_SPECIFIC_PING_COMMAND_ID)
192 wasHandled = emberAfBasicClusterMfgSpecificPingCallback();
197 switch (cmd->commandId)
199 case ZCL_RESET_TO_FACTORY_DEFAULTS_COMMAND_ID: {
200 wasHandled = emberAfBasicClusterResetToFactoryDefaultsCallback();
204 // Unrecognized command ID, error status will apply.
209 return status(wasHandled, true, cmd->mfgSpecific);
211 EmberAfStatus emberAfBindingClusterServerCommandParse(EmberAfClusterCommand * cmd)
213 bool wasHandled = false;
215 if (!cmd->mfgSpecific)
217 switch (cmd->commandId)
219 case ZCL_BIND_COMMAND_ID: {
220 uint16_t payloadOffset = cmd->payloadStartIndex;
222 chip::GroupId groupId;
223 chip::EndpointId endpointId;
224 chip::ClusterId clusterId;
226 if (cmd->bufLen < payloadOffset + 8)
228 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
230 nodeId = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
231 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
232 if (cmd->bufLen < payloadOffset + 2)
234 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
236 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
237 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
238 if (cmd->bufLen < payloadOffset + 1)
240 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
242 endpointId = 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 clusterId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
250 wasHandled = emberAfBindingClusterBindCallback(nodeId, groupId, endpointId, clusterId);
253 case ZCL_UNBIND_COMMAND_ID: {
254 uint16_t payloadOffset = cmd->payloadStartIndex;
256 chip::GroupId groupId;
257 chip::EndpointId endpointId;
258 chip::ClusterId clusterId;
260 if (cmd->bufLen < payloadOffset + 8)
262 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
264 nodeId = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
265 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
266 if (cmd->bufLen < payloadOffset + 2)
268 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
270 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
271 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
272 if (cmd->bufLen < payloadOffset + 1)
274 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
276 endpointId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
277 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
278 if (cmd->bufLen < payloadOffset + 2)
280 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
282 clusterId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
284 wasHandled = emberAfBindingClusterUnbindCallback(nodeId, groupId, endpointId, clusterId);
288 // Unrecognized command ID, error status will apply.
293 return status(wasHandled, true, cmd->mfgSpecific);
295 EmberAfStatus emberAfColorControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
297 bool wasHandled = false;
299 if (!cmd->mfgSpecific)
301 switch (cmd->commandId)
303 case ZCL_MOVE_COLOR_COMMAND_ID: {
304 uint16_t payloadOffset = cmd->payloadStartIndex;
308 uint8_t optionsOverride;
310 if (cmd->bufLen < payloadOffset + 2)
312 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
314 rateX = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
315 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
316 if (cmd->bufLen < payloadOffset + 2)
318 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
320 rateY = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
321 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
322 if (cmd->bufLen < payloadOffset + 1)
324 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
326 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
327 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
328 if (cmd->bufLen < payloadOffset + 1)
330 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
332 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
334 wasHandled = emberAfColorControlClusterMoveColorCallback(rateX, rateY, optionsMask, optionsOverride);
337 case ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID: {
338 uint16_t payloadOffset = cmd->payloadStartIndex;
341 uint16_t colorTemperatureMinimum;
342 uint16_t colorTemperatureMaximum;
344 uint8_t optionsOverride;
346 if (cmd->bufLen < payloadOffset + 1)
348 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
350 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
351 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
352 if (cmd->bufLen < payloadOffset + 2)
354 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
356 rate = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
357 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
358 if (cmd->bufLen < payloadOffset + 2)
360 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
362 colorTemperatureMinimum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
363 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
364 if (cmd->bufLen < payloadOffset + 2)
366 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
368 colorTemperatureMaximum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
369 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
370 if (cmd->bufLen < payloadOffset + 1)
372 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
374 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
375 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
376 if (cmd->bufLen < payloadOffset + 1)
378 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
380 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
382 wasHandled = emberAfColorControlClusterMoveColorTemperatureCallback(
383 moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
386 case ZCL_MOVE_HUE_COMMAND_ID: {
387 uint16_t payloadOffset = cmd->payloadStartIndex;
391 uint8_t optionsOverride;
393 if (cmd->bufLen < payloadOffset + 1)
395 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
397 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
398 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
399 if (cmd->bufLen < payloadOffset + 1)
401 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
403 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
404 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
405 if (cmd->bufLen < payloadOffset + 1)
407 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
409 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
410 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
411 if (cmd->bufLen < payloadOffset + 1)
413 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
415 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
417 wasHandled = emberAfColorControlClusterMoveHueCallback(moveMode, rate, optionsMask, optionsOverride);
420 case ZCL_MOVE_SATURATION_COMMAND_ID: {
421 uint16_t payloadOffset = cmd->payloadStartIndex;
425 uint8_t optionsOverride;
427 if (cmd->bufLen < payloadOffset + 1)
429 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
431 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
432 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
433 if (cmd->bufLen < payloadOffset + 1)
435 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
437 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
438 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
439 if (cmd->bufLen < payloadOffset + 1)
441 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
443 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
444 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
445 if (cmd->bufLen < payloadOffset + 1)
447 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
449 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
451 wasHandled = emberAfColorControlClusterMoveSaturationCallback(moveMode, rate, optionsMask, optionsOverride);
454 case ZCL_MOVE_TO_COLOR_COMMAND_ID: {
455 uint16_t payloadOffset = cmd->payloadStartIndex;
458 uint16_t transitionTime;
460 uint8_t optionsOverride;
462 if (cmd->bufLen < payloadOffset + 2)
464 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
466 colorX = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
467 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
468 if (cmd->bufLen < payloadOffset + 2)
470 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
472 colorY = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
473 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
474 if (cmd->bufLen < payloadOffset + 2)
476 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
478 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
479 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
480 if (cmd->bufLen < payloadOffset + 1)
482 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
484 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
485 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
486 if (cmd->bufLen < payloadOffset + 1)
488 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
490 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
493 emberAfColorControlClusterMoveToColorCallback(colorX, colorY, transitionTime, optionsMask, optionsOverride);
496 case ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID: {
497 uint16_t payloadOffset = cmd->payloadStartIndex;
498 uint16_t colorTemperature;
499 uint16_t transitionTime;
501 uint8_t optionsOverride;
503 if (cmd->bufLen < payloadOffset + 2)
505 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
507 colorTemperature = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
508 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
509 if (cmd->bufLen < payloadOffset + 2)
511 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
513 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
514 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
515 if (cmd->bufLen < payloadOffset + 1)
517 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
519 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
520 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
521 if (cmd->bufLen < payloadOffset + 1)
523 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
525 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
527 wasHandled = emberAfColorControlClusterMoveToColorTemperatureCallback(colorTemperature, transitionTime, optionsMask,
531 case ZCL_MOVE_TO_HUE_COMMAND_ID: {
532 uint16_t payloadOffset = cmd->payloadStartIndex;
535 uint16_t transitionTime;
537 uint8_t optionsOverride;
539 if (cmd->bufLen < payloadOffset + 1)
541 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
543 hue = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
544 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
545 if (cmd->bufLen < payloadOffset + 1)
547 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
549 direction = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
550 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
551 if (cmd->bufLen < payloadOffset + 2)
553 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
555 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
556 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
557 if (cmd->bufLen < payloadOffset + 1)
559 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
561 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
562 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
563 if (cmd->bufLen < payloadOffset + 1)
565 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
567 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
569 wasHandled = emberAfColorControlClusterMoveToHueCallback(hue, direction, transitionTime, optionsMask, optionsOverride);
572 case ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID: {
573 uint16_t payloadOffset = cmd->payloadStartIndex;
576 uint16_t transitionTime;
578 uint8_t optionsOverride;
580 if (cmd->bufLen < payloadOffset + 1)
582 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
584 hue = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
585 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
586 if (cmd->bufLen < payloadOffset + 1)
588 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
590 saturation = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
591 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
592 if (cmd->bufLen < payloadOffset + 2)
594 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
596 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
597 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
598 if (cmd->bufLen < payloadOffset + 1)
600 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
602 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
603 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
604 if (cmd->bufLen < payloadOffset + 1)
606 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
608 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
610 wasHandled = emberAfColorControlClusterMoveToHueAndSaturationCallback(hue, saturation, transitionTime, optionsMask,
614 case ZCL_MOVE_TO_SATURATION_COMMAND_ID: {
615 uint16_t payloadOffset = cmd->payloadStartIndex;
617 uint16_t transitionTime;
619 uint8_t optionsOverride;
621 if (cmd->bufLen < payloadOffset + 1)
623 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
625 saturation = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
626 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
627 if (cmd->bufLen < payloadOffset + 2)
629 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
631 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
632 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
633 if (cmd->bufLen < payloadOffset + 1)
635 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
637 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
638 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
639 if (cmd->bufLen < payloadOffset + 1)
641 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
643 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
646 emberAfColorControlClusterMoveToSaturationCallback(saturation, transitionTime, optionsMask, optionsOverride);
649 case ZCL_STEP_COLOR_COMMAND_ID: {
650 uint16_t payloadOffset = cmd->payloadStartIndex;
653 uint16_t transitionTime;
655 uint8_t optionsOverride;
657 if (cmd->bufLen < payloadOffset + 2)
659 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
661 stepX = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
662 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
663 if (cmd->bufLen < payloadOffset + 2)
665 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
667 stepY = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
668 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
669 if (cmd->bufLen < payloadOffset + 2)
671 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
673 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
674 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
675 if (cmd->bufLen < payloadOffset + 1)
677 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
679 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
680 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
681 if (cmd->bufLen < payloadOffset + 1)
683 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
685 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
687 wasHandled = emberAfColorControlClusterStepColorCallback(stepX, stepY, transitionTime, optionsMask, optionsOverride);
690 case ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID: {
691 uint16_t payloadOffset = cmd->payloadStartIndex;
694 uint16_t transitionTime;
695 uint16_t colorTemperatureMinimum;
696 uint16_t colorTemperatureMaximum;
698 uint8_t optionsOverride;
700 if (cmd->bufLen < payloadOffset + 1)
702 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
704 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
705 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
706 if (cmd->bufLen < payloadOffset + 2)
708 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
710 stepSize = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
711 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
712 if (cmd->bufLen < payloadOffset + 2)
714 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
716 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
717 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
718 if (cmd->bufLen < payloadOffset + 2)
720 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
722 colorTemperatureMinimum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
723 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
724 if (cmd->bufLen < payloadOffset + 2)
726 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
728 colorTemperatureMaximum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
729 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
730 if (cmd->bufLen < payloadOffset + 1)
732 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
734 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
735 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
736 if (cmd->bufLen < payloadOffset + 1)
738 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
740 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
742 wasHandled = emberAfColorControlClusterStepColorTemperatureCallback(
743 stepMode, stepSize, transitionTime, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
746 case ZCL_STEP_HUE_COMMAND_ID: {
747 uint16_t payloadOffset = cmd->payloadStartIndex;
750 uint8_t transitionTime;
752 uint8_t optionsOverride;
754 if (cmd->bufLen < payloadOffset + 1)
756 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
758 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
759 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
760 if (cmd->bufLen < payloadOffset + 1)
762 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
764 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
765 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
766 if (cmd->bufLen < payloadOffset + 1)
768 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
770 transitionTime = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
771 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
772 if (cmd->bufLen < payloadOffset + 1)
774 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
776 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
777 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
778 if (cmd->bufLen < payloadOffset + 1)
780 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
782 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
785 emberAfColorControlClusterStepHueCallback(stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
788 case ZCL_STEP_SATURATION_COMMAND_ID: {
789 uint16_t payloadOffset = cmd->payloadStartIndex;
792 uint8_t transitionTime;
794 uint8_t optionsOverride;
796 if (cmd->bufLen < payloadOffset + 1)
798 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
800 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
801 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
802 if (cmd->bufLen < payloadOffset + 1)
804 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
806 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
807 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
808 if (cmd->bufLen < payloadOffset + 1)
810 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
812 transitionTime = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
813 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
814 if (cmd->bufLen < payloadOffset + 1)
816 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
818 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
819 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
820 if (cmd->bufLen < payloadOffset + 1)
822 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
824 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
827 emberAfColorControlClusterStepSaturationCallback(stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
830 case ZCL_STOP_MOVE_STEP_COMMAND_ID: {
831 uint16_t payloadOffset = cmd->payloadStartIndex;
833 uint8_t optionsOverride;
835 if (cmd->bufLen < payloadOffset + 1)
837 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
839 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
840 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
841 if (cmd->bufLen < payloadOffset + 1)
843 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
845 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
847 wasHandled = emberAfColorControlClusterStopMoveStepCallback(optionsMask, optionsOverride);
851 // Unrecognized command ID, error status will apply.
856 return status(wasHandled, true, cmd->mfgSpecific);
858 EmberAfStatus emberAfContentLaunchClusterServerCommandParse(EmberAfClusterCommand * cmd)
860 bool wasHandled = false;
862 if (!cmd->mfgSpecific)
864 switch (cmd->commandId)
866 case ZCL_LAUNCH_CONTENT_COMMAND_ID: {
867 wasHandled = emberAfContentLaunchClusterLaunchContentCallback();
870 case ZCL_LAUNCH_URL_COMMAND_ID: {
871 wasHandled = emberAfContentLaunchClusterLaunchURLCallback();
875 // Unrecognized command ID, error status will apply.
880 return status(wasHandled, true, cmd->mfgSpecific);
882 EmberAfStatus emberAfDoorLockClusterServerCommandParse(EmberAfClusterCommand * cmd)
884 bool wasHandled = false;
886 if (!cmd->mfgSpecific)
888 switch (cmd->commandId)
890 case ZCL_CLEAR_ALL_PINS_COMMAND_ID: {
891 wasHandled = emberAfDoorLockClusterClearAllPinsCallback();
894 case ZCL_CLEAR_ALL_RFIDS_COMMAND_ID: {
895 wasHandled = emberAfDoorLockClusterClearAllRfidsCallback();
898 case ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID: {
899 uint16_t payloadOffset = cmd->payloadStartIndex;
902 if (cmd->bufLen < payloadOffset + 1)
904 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
906 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
908 wasHandled = emberAfDoorLockClusterClearHolidayScheduleCallback(scheduleId);
911 case ZCL_CLEAR_PIN_COMMAND_ID: {
912 uint16_t payloadOffset = cmd->payloadStartIndex;
915 if (cmd->bufLen < payloadOffset + 2)
917 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
919 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
921 wasHandled = emberAfDoorLockClusterClearPinCallback(userId);
924 case ZCL_CLEAR_RFID_COMMAND_ID: {
925 uint16_t payloadOffset = cmd->payloadStartIndex;
928 if (cmd->bufLen < payloadOffset + 2)
930 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
932 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
934 wasHandled = emberAfDoorLockClusterClearRfidCallback(userId);
937 case ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID: {
938 uint16_t payloadOffset = cmd->payloadStartIndex;
942 if (cmd->bufLen < payloadOffset + 1)
944 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
946 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
947 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
948 if (cmd->bufLen < payloadOffset + 2)
950 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
952 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
954 wasHandled = emberAfDoorLockClusterClearWeekdayScheduleCallback(scheduleId, userId);
957 case ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID: {
958 uint16_t payloadOffset = cmd->payloadStartIndex;
962 if (cmd->bufLen < payloadOffset + 1)
964 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
966 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
967 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
968 if (cmd->bufLen < payloadOffset + 2)
970 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
972 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
974 wasHandled = emberAfDoorLockClusterClearYeardayScheduleCallback(scheduleId, userId);
977 case ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID: {
978 uint16_t payloadOffset = cmd->payloadStartIndex;
981 if (cmd->bufLen < payloadOffset + 1)
983 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
985 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
987 wasHandled = emberAfDoorLockClusterGetHolidayScheduleCallback(scheduleId);
990 case ZCL_GET_LOG_RECORD_COMMAND_ID: {
991 uint16_t payloadOffset = cmd->payloadStartIndex;
994 if (cmd->bufLen < payloadOffset + 2)
996 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
998 logIndex = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1000 wasHandled = emberAfDoorLockClusterGetLogRecordCallback(logIndex);
1003 case ZCL_GET_PIN_COMMAND_ID: {
1004 uint16_t payloadOffset = cmd->payloadStartIndex;
1007 if (cmd->bufLen < payloadOffset + 2)
1009 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1011 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1013 wasHandled = emberAfDoorLockClusterGetPinCallback(userId);
1016 case ZCL_GET_RFID_COMMAND_ID: {
1017 uint16_t payloadOffset = cmd->payloadStartIndex;
1020 if (cmd->bufLen < payloadOffset + 2)
1022 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1024 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1026 wasHandled = emberAfDoorLockClusterGetRfidCallback(userId);
1029 case ZCL_GET_USER_TYPE_COMMAND_ID: {
1030 uint16_t payloadOffset = cmd->payloadStartIndex;
1033 if (cmd->bufLen < payloadOffset + 2)
1035 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1037 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1039 wasHandled = emberAfDoorLockClusterGetUserTypeCallback(userId);
1042 case ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID: {
1043 uint16_t payloadOffset = cmd->payloadStartIndex;
1047 if (cmd->bufLen < payloadOffset + 1)
1049 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1051 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1052 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1053 if (cmd->bufLen < payloadOffset + 2)
1055 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1057 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1059 wasHandled = emberAfDoorLockClusterGetWeekdayScheduleCallback(scheduleId, userId);
1062 case ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID: {
1063 uint16_t payloadOffset = cmd->payloadStartIndex;
1067 if (cmd->bufLen < payloadOffset + 1)
1069 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1071 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1072 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1073 if (cmd->bufLen < payloadOffset + 2)
1075 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1077 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1079 wasHandled = emberAfDoorLockClusterGetYeardayScheduleCallback(scheduleId, userId);
1082 case ZCL_LOCK_DOOR_COMMAND_ID: {
1083 uint16_t payloadOffset = cmd->payloadStartIndex;
1086 if (cmd->bufLen < payloadOffset + 1u)
1088 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1090 PIN = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1092 wasHandled = emberAfDoorLockClusterLockDoorCallback(PIN);
1095 case ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID: {
1096 uint16_t payloadOffset = cmd->payloadStartIndex;
1098 uint32_t localStartTime;
1099 uint32_t localEndTime;
1100 uint8_t operatingModeDuringHoliday;
1102 if (cmd->bufLen < payloadOffset + 1)
1104 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1106 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1107 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1108 if (cmd->bufLen < payloadOffset + 4)
1110 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1112 localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1113 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1114 if (cmd->bufLen < payloadOffset + 4)
1116 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1118 localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1119 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1120 if (cmd->bufLen < payloadOffset + 1)
1122 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1124 operatingModeDuringHoliday = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1126 wasHandled = emberAfDoorLockClusterSetHolidayScheduleCallback(scheduleId, localStartTime, localEndTime,
1127 operatingModeDuringHoliday);
1130 case ZCL_SET_PIN_COMMAND_ID: {
1131 uint16_t payloadOffset = cmd->payloadStartIndex;
1137 if (cmd->bufLen < payloadOffset + 2)
1139 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1141 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1142 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1143 if (cmd->bufLen < payloadOffset + 1)
1145 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1147 userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1148 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1149 if (cmd->bufLen < payloadOffset + 1)
1151 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1153 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1154 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1155 if (cmd->bufLen < payloadOffset + 1u)
1157 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1159 pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1161 wasHandled = emberAfDoorLockClusterSetPinCallback(userId, userStatus, userType, pin);
1164 case ZCL_SET_RFID_COMMAND_ID: {
1165 uint16_t payloadOffset = cmd->payloadStartIndex;
1171 if (cmd->bufLen < payloadOffset + 2)
1173 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1175 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1176 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1177 if (cmd->bufLen < payloadOffset + 1)
1179 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1181 userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1182 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1183 if (cmd->bufLen < payloadOffset + 1)
1185 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1187 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1188 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1189 if (cmd->bufLen < payloadOffset + 1u)
1191 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1193 id = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1195 wasHandled = emberAfDoorLockClusterSetRfidCallback(userId, userStatus, userType, id);
1198 case ZCL_SET_USER_TYPE_COMMAND_ID: {
1199 uint16_t payloadOffset = cmd->payloadStartIndex;
1203 if (cmd->bufLen < payloadOffset + 2)
1205 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1207 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1208 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1209 if (cmd->bufLen < payloadOffset + 1)
1211 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1213 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1215 wasHandled = emberAfDoorLockClusterSetUserTypeCallback(userId, userType);
1218 case ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID: {
1219 uint16_t payloadOffset = cmd->payloadStartIndex;
1224 uint8_t startMinute;
1228 if (cmd->bufLen < payloadOffset + 1)
1230 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1232 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1233 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1234 if (cmd->bufLen < payloadOffset + 2)
1236 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1238 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1239 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1240 if (cmd->bufLen < payloadOffset + 1)
1242 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1244 daysMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1245 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1246 if (cmd->bufLen < payloadOffset + 1)
1248 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1250 startHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1251 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1252 if (cmd->bufLen < payloadOffset + 1)
1254 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1256 startMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1257 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1258 if (cmd->bufLen < payloadOffset + 1)
1260 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1262 endHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1263 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1264 if (cmd->bufLen < payloadOffset + 1)
1266 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1268 endMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1270 wasHandled = emberAfDoorLockClusterSetWeekdayScheduleCallback(scheduleId, userId, daysMask, startHour, startMinute,
1271 endHour, endMinute);
1274 case ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID: {
1275 uint16_t payloadOffset = cmd->payloadStartIndex;
1278 uint32_t localStartTime;
1279 uint32_t localEndTime;
1281 if (cmd->bufLen < payloadOffset + 1)
1283 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1285 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1286 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1287 if (cmd->bufLen < payloadOffset + 2)
1289 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1291 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1292 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1293 if (cmd->bufLen < payloadOffset + 4)
1295 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1297 localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1298 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1299 if (cmd->bufLen < payloadOffset + 4)
1301 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1303 localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1305 wasHandled = emberAfDoorLockClusterSetYeardayScheduleCallback(scheduleId, userId, localStartTime, localEndTime);
1308 case ZCL_UNLOCK_DOOR_COMMAND_ID: {
1309 uint16_t payloadOffset = cmd->payloadStartIndex;
1312 if (cmd->bufLen < payloadOffset + 1u)
1314 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1316 PIN = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1318 wasHandled = emberAfDoorLockClusterUnlockDoorCallback(PIN);
1321 case ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID: {
1322 uint16_t payloadOffset = cmd->payloadStartIndex;
1323 uint16_t timeoutInSeconds;
1326 if (cmd->bufLen < payloadOffset + 2)
1328 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1330 timeoutInSeconds = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1331 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1332 if (cmd->bufLen < payloadOffset + 1u)
1334 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1336 pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1338 wasHandled = emberAfDoorLockClusterUnlockWithTimeoutCallback(timeoutInSeconds, pin);
1342 // Unrecognized command ID, error status will apply.
1347 return status(wasHandled, true, cmd->mfgSpecific);
1349 EmberAfStatus emberAfGeneralCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd)
1351 bool wasHandled = false;
1353 if (!cmd->mfgSpecific)
1355 switch (cmd->commandId)
1357 case ZCL_ARM_FAIL_SAFE_COMMAND_ID: {
1358 uint16_t payloadOffset = cmd->payloadStartIndex;
1359 uint16_t expiryLengthSeconds;
1360 uint64_t breadcrumb;
1363 if (cmd->bufLen < payloadOffset + 2)
1365 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1367 expiryLengthSeconds = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1368 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1369 if (cmd->bufLen < payloadOffset + 8)
1371 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1373 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1374 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1375 if (cmd->bufLen < payloadOffset + 4)
1377 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1379 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1381 wasHandled = emberAfGeneralCommissioningClusterArmFailSafeCallback(expiryLengthSeconds, breadcrumb, timeoutMs);
1384 case ZCL_COMMISSIONING_COMPLETE_COMMAND_ID: {
1385 wasHandled = emberAfGeneralCommissioningClusterCommissioningCompleteCallback();
1388 case ZCL_SET_FABRIC_COMMAND_ID: {
1389 uint16_t payloadOffset = cmd->payloadStartIndex;
1391 uint8_t * fabricSecret;
1392 uint64_t breadcrumb;
1395 if (cmd->bufLen < payloadOffset + 1u)
1397 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1399 fabricId = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1400 payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(fabricId) + 1u);
1401 if (cmd->bufLen < payloadOffset + 1u)
1403 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1405 fabricSecret = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1406 payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(fabricSecret) + 1u);
1407 if (cmd->bufLen < payloadOffset + 8)
1409 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1411 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1412 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1413 if (cmd->bufLen < payloadOffset + 4)
1415 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1417 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1419 wasHandled = emberAfGeneralCommissioningClusterSetFabricCallback(fabricId, fabricSecret, breadcrumb, timeoutMs);
1423 // Unrecognized command ID, error status will apply.
1428 return status(wasHandled, true, cmd->mfgSpecific);
1430 EmberAfStatus emberAfGroupsClusterServerCommandParse(EmberAfClusterCommand * cmd)
1432 bool wasHandled = false;
1434 if (!cmd->mfgSpecific)
1436 switch (cmd->commandId)
1438 case ZCL_ADD_GROUP_COMMAND_ID: {
1439 uint16_t payloadOffset = cmd->payloadStartIndex;
1441 uint8_t * groupName;
1443 if (cmd->bufLen < payloadOffset + 2)
1445 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1447 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1448 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1449 if (cmd->bufLen < payloadOffset + 1u)
1451 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1453 groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1455 wasHandled = emberAfGroupsClusterAddGroupCallback(groupId, groupName);
1458 case ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID: {
1459 uint16_t payloadOffset = cmd->payloadStartIndex;
1461 uint8_t * groupName;
1463 if (cmd->bufLen < payloadOffset + 2)
1465 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1467 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1468 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1469 if (cmd->bufLen < payloadOffset + 1u)
1471 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1473 groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1475 wasHandled = emberAfGroupsClusterAddGroupIfIdentifyingCallback(groupId, groupName);
1478 case ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID: {
1479 uint16_t payloadOffset = cmd->payloadStartIndex;
1481 /* TYPE WARNING: array array defaults to */ uint8_t * groupList;
1483 if (cmd->bufLen < payloadOffset + 1)
1485 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1487 groupCount = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1488 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1489 groupList = cmd->buffer + payloadOffset;
1491 wasHandled = emberAfGroupsClusterGetGroupMembershipCallback(groupCount, groupList);
1494 case ZCL_REMOVE_ALL_GROUPS_COMMAND_ID: {
1495 wasHandled = emberAfGroupsClusterRemoveAllGroupsCallback();
1498 case ZCL_REMOVE_GROUP_COMMAND_ID: {
1499 uint16_t payloadOffset = cmd->payloadStartIndex;
1502 if (cmd->bufLen < payloadOffset + 2)
1504 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1506 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1508 wasHandled = emberAfGroupsClusterRemoveGroupCallback(groupId);
1511 case ZCL_VIEW_GROUP_COMMAND_ID: {
1512 uint16_t payloadOffset = cmd->payloadStartIndex;
1515 if (cmd->bufLen < payloadOffset + 2)
1517 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1519 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1521 wasHandled = emberAfGroupsClusterViewGroupCallback(groupId);
1525 // Unrecognized command ID, error status will apply.
1530 return status(wasHandled, true, cmd->mfgSpecific);
1532 EmberAfStatus emberAfIasZoneClusterServerCommandParse(EmberAfClusterCommand * cmd)
1534 bool wasHandled = false;
1536 if (!cmd->mfgSpecific)
1538 switch (cmd->commandId)
1540 case ZCL_ZONE_ENROLL_RESPONSE_COMMAND_ID: {
1541 uint16_t payloadOffset = cmd->payloadStartIndex;
1542 uint8_t enrollResponseCode;
1545 if (cmd->bufLen < payloadOffset + 1)
1547 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1549 enrollResponseCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1550 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1551 if (cmd->bufLen < payloadOffset + 1)
1553 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1555 zoneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1557 wasHandled = emberAfIasZoneClusterZoneEnrollResponseCallback(enrollResponseCode, zoneId);
1561 // Unrecognized command ID, error status will apply.
1566 return status(wasHandled, true, cmd->mfgSpecific);
1568 EmberAfStatus emberAfIdentifyClusterServerCommandParse(EmberAfClusterCommand * cmd)
1570 bool wasHandled = false;
1572 if (!cmd->mfgSpecific)
1574 switch (cmd->commandId)
1576 case ZCL_IDENTIFY_COMMAND_ID: {
1577 uint16_t payloadOffset = cmd->payloadStartIndex;
1578 uint16_t identifyTime;
1580 if (cmd->bufLen < payloadOffset + 2)
1582 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1584 identifyTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1586 wasHandled = emberAfIdentifyClusterIdentifyCallback(identifyTime);
1589 case ZCL_IDENTIFY_QUERY_COMMAND_ID: {
1590 wasHandled = emberAfIdentifyClusterIdentifyQueryCallback();
1594 // Unrecognized command ID, error status will apply.
1599 return status(wasHandled, true, cmd->mfgSpecific);
1601 EmberAfStatus emberAfLevelControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
1603 bool wasHandled = false;
1605 if (!cmd->mfgSpecific)
1607 switch (cmd->commandId)
1609 case ZCL_MOVE_COMMAND_ID: {
1610 uint16_t payloadOffset = cmd->payloadStartIndex;
1614 uint8_t optionOverride;
1616 if (cmd->bufLen < payloadOffset + 1)
1618 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1620 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1621 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1622 if (cmd->bufLen < payloadOffset + 1)
1624 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1626 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1627 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1628 if (cmd->bufLen < payloadOffset + 1)
1630 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1632 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1633 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1634 if (cmd->bufLen < payloadOffset + 1)
1636 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1638 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1640 wasHandled = emberAfLevelControlClusterMoveCallback(moveMode, rate, optionMask, optionOverride);
1643 case ZCL_MOVE_TO_LEVEL_COMMAND_ID: {
1644 uint16_t payloadOffset = cmd->payloadStartIndex;
1646 uint16_t transitionTime;
1648 uint8_t optionOverride;
1650 if (cmd->bufLen < payloadOffset + 1)
1652 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1654 level = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1655 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1656 if (cmd->bufLen < payloadOffset + 2)
1658 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1660 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1661 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1662 if (cmd->bufLen < payloadOffset + 1)
1664 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1666 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1667 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1668 if (cmd->bufLen < payloadOffset + 1)
1670 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1672 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1674 wasHandled = emberAfLevelControlClusterMoveToLevelCallback(level, transitionTime, optionMask, optionOverride);
1677 case ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID: {
1678 uint16_t payloadOffset = cmd->payloadStartIndex;
1680 uint16_t transitionTime;
1682 if (cmd->bufLen < payloadOffset + 1)
1684 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1686 level = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1687 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1688 if (cmd->bufLen < payloadOffset + 2)
1690 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1692 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1694 wasHandled = emberAfLevelControlClusterMoveToLevelWithOnOffCallback(level, transitionTime);
1697 case ZCL_MOVE_WITH_ON_OFF_COMMAND_ID: {
1698 uint16_t payloadOffset = cmd->payloadStartIndex;
1702 if (cmd->bufLen < payloadOffset + 1)
1704 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1706 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1707 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1708 if (cmd->bufLen < payloadOffset + 1)
1710 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1712 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1714 wasHandled = emberAfLevelControlClusterMoveWithOnOffCallback(moveMode, rate);
1717 case ZCL_STEP_COMMAND_ID: {
1718 uint16_t payloadOffset = cmd->payloadStartIndex;
1721 uint16_t transitionTime;
1723 uint8_t optionOverride;
1725 if (cmd->bufLen < payloadOffset + 1)
1727 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1729 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1730 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1731 if (cmd->bufLen < payloadOffset + 1)
1733 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1735 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1736 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1737 if (cmd->bufLen < payloadOffset + 2)
1739 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1741 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1742 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1743 if (cmd->bufLen < payloadOffset + 1)
1745 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1747 optionMask = 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 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1755 wasHandled = emberAfLevelControlClusterStepCallback(stepMode, stepSize, transitionTime, optionMask, optionOverride);
1758 case ZCL_STEP_WITH_ON_OFF_COMMAND_ID: {
1759 uint16_t payloadOffset = cmd->payloadStartIndex;
1762 uint16_t transitionTime;
1764 if (cmd->bufLen < payloadOffset + 1)
1766 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1768 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1769 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1770 if (cmd->bufLen < payloadOffset + 1)
1772 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1774 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1775 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1776 if (cmd->bufLen < payloadOffset + 2)
1778 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1780 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1782 wasHandled = emberAfLevelControlClusterStepWithOnOffCallback(stepMode, stepSize, transitionTime);
1785 case ZCL_STOP_COMMAND_ID: {
1786 uint16_t payloadOffset = cmd->payloadStartIndex;
1788 uint8_t optionOverride;
1790 if (cmd->bufLen < payloadOffset + 1)
1792 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1794 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1795 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1796 if (cmd->bufLen < payloadOffset + 1)
1798 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1800 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1802 wasHandled = emberAfLevelControlClusterStopCallback(optionMask, optionOverride);
1805 case ZCL_STOP_WITH_ON_OFF_COMMAND_ID: {
1806 wasHandled = emberAfLevelControlClusterStopWithOnOffCallback();
1810 // Unrecognized command ID, error status will apply.
1815 return status(wasHandled, true, cmd->mfgSpecific);
1817 EmberAfStatus emberAfLowPowerClusterServerCommandParse(EmberAfClusterCommand * cmd)
1819 bool wasHandled = false;
1821 if (!cmd->mfgSpecific)
1823 switch (cmd->commandId)
1825 case ZCL_SLEEP_COMMAND_ID: {
1826 wasHandled = emberAfLowPowerClusterSleepCallback();
1830 // Unrecognized command ID, error status will apply.
1835 return status(wasHandled, true, cmd->mfgSpecific);
1837 EmberAfStatus emberAfMediaPlaybackClusterServerCommandParse(EmberAfClusterCommand * cmd)
1839 bool wasHandled = false;
1841 if (!cmd->mfgSpecific)
1843 switch (cmd->commandId)
1845 case ZCL_FAST_FORWARD_REQUEST_COMMAND_ID: {
1846 wasHandled = emberAfMediaPlaybackClusterFastForwardRequestCallback();
1849 case ZCL_NEXT_REQUEST_COMMAND_ID: {
1850 wasHandled = emberAfMediaPlaybackClusterNextRequestCallback();
1853 case ZCL_PAUSE_REQUEST_COMMAND_ID: {
1854 wasHandled = emberAfMediaPlaybackClusterPauseRequestCallback();
1857 case ZCL_PLAY_REQUEST_COMMAND_ID: {
1858 wasHandled = emberAfMediaPlaybackClusterPlayRequestCallback();
1861 case ZCL_PREVIOUS_REQUEST_COMMAND_ID: {
1862 wasHandled = emberAfMediaPlaybackClusterPreviousRequestCallback();
1865 case ZCL_REWIND_REQUEST_COMMAND_ID: {
1866 wasHandled = emberAfMediaPlaybackClusterRewindRequestCallback();
1869 case ZCL_SKIP_BACKWARD_REQUEST_COMMAND_ID: {
1870 wasHandled = emberAfMediaPlaybackClusterSkipBackwardRequestCallback();
1873 case ZCL_SKIP_FORWARD_REQUEST_COMMAND_ID: {
1874 wasHandled = emberAfMediaPlaybackClusterSkipForwardRequestCallback();
1877 case ZCL_START_OVER_REQUEST_COMMAND_ID: {
1878 wasHandled = emberAfMediaPlaybackClusterStartOverRequestCallback();
1881 case ZCL_STOP_REQUEST_COMMAND_ID: {
1882 wasHandled = emberAfMediaPlaybackClusterStopRequestCallback();
1886 // Unrecognized command ID, error status will apply.
1891 return status(wasHandled, true, cmd->mfgSpecific);
1893 EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd)
1895 bool wasHandled = false;
1897 if (!cmd->mfgSpecific)
1899 switch (cmd->commandId)
1901 case ZCL_OFF_COMMAND_ID: {
1902 wasHandled = emberAfOnOffClusterOffCallback();
1905 case ZCL_ON_COMMAND_ID: {
1906 wasHandled = emberAfOnOffClusterOnCallback();
1909 case ZCL_TOGGLE_COMMAND_ID: {
1910 wasHandled = emberAfOnOffClusterToggleCallback();
1914 // Unrecognized command ID, error status will apply.
1919 return status(wasHandled, true, cmd->mfgSpecific);
1921 EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand * cmd)
1923 bool wasHandled = false;
1925 if (!cmd->mfgSpecific)
1927 switch (cmd->commandId)
1929 case ZCL_ADD_SCENE_COMMAND_ID: {
1930 uint16_t payloadOffset = cmd->payloadStartIndex;
1933 uint16_t transitionTime;
1934 uint8_t * sceneName;
1935 /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets;
1937 if (cmd->bufLen < payloadOffset + 2)
1939 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1941 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1942 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1943 if (cmd->bufLen < payloadOffset + 1)
1945 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1947 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1948 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1949 if (cmd->bufLen < payloadOffset + 2)
1951 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1953 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1954 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1955 if (cmd->bufLen < payloadOffset + 1u)
1957 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1959 sceneName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1960 payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(sceneName) + 1u);
1961 extensionFieldSets = cmd->buffer + payloadOffset;
1963 wasHandled = emberAfScenesClusterAddSceneCallback(groupId, sceneId, transitionTime, sceneName, extensionFieldSets);
1966 case ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID: {
1967 uint16_t payloadOffset = cmd->payloadStartIndex;
1970 if (cmd->bufLen < payloadOffset + 2)
1972 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1974 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1976 wasHandled = emberAfScenesClusterGetSceneMembershipCallback(groupId);
1979 case ZCL_RECALL_SCENE_COMMAND_ID: {
1980 uint16_t payloadOffset = cmd->payloadStartIndex;
1983 uint16_t transitionTime;
1985 if (cmd->bufLen < payloadOffset + 2)
1987 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1989 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1990 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1991 if (cmd->bufLen < payloadOffset + 1)
1993 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1995 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1996 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1997 if (cmd->bufLen < payloadOffset + 2)
1999 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2001 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2003 wasHandled = emberAfScenesClusterRecallSceneCallback(groupId, sceneId, transitionTime);
2006 case ZCL_REMOVE_ALL_SCENES_COMMAND_ID: {
2007 uint16_t payloadOffset = cmd->payloadStartIndex;
2010 if (cmd->bufLen < payloadOffset + 2)
2012 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2014 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2016 wasHandled = emberAfScenesClusterRemoveAllScenesCallback(groupId);
2019 case ZCL_REMOVE_SCENE_COMMAND_ID: {
2020 uint16_t payloadOffset = cmd->payloadStartIndex;
2024 if (cmd->bufLen < payloadOffset + 2)
2026 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2028 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2029 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2030 if (cmd->bufLen < payloadOffset + 1)
2032 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2034 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2036 wasHandled = emberAfScenesClusterRemoveSceneCallback(groupId, sceneId);
2039 case ZCL_STORE_SCENE_COMMAND_ID: {
2040 uint16_t payloadOffset = cmd->payloadStartIndex;
2044 if (cmd->bufLen < payloadOffset + 2)
2046 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2048 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2049 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2050 if (cmd->bufLen < payloadOffset + 1)
2052 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2054 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2056 wasHandled = emberAfScenesClusterStoreSceneCallback(groupId, sceneId);
2059 case ZCL_VIEW_SCENE_COMMAND_ID: {
2060 uint16_t payloadOffset = cmd->payloadStartIndex;
2064 if (cmd->bufLen < payloadOffset + 2)
2066 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2068 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2069 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2070 if (cmd->bufLen < payloadOffset + 1)
2072 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2074 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2076 wasHandled = emberAfScenesClusterViewSceneCallback(groupId, sceneId);
2080 // Unrecognized command ID, error status will apply.
2085 return status(wasHandled, true, cmd->mfgSpecific);