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)
200 // Unrecognized command ID, error status will apply.
205 return status(wasHandled, true, cmd->mfgSpecific);
207 EmberAfStatus emberAfBindingClusterServerCommandParse(EmberAfClusterCommand * cmd)
209 bool wasHandled = false;
211 if (!cmd->mfgSpecific)
213 switch (cmd->commandId)
215 case ZCL_BIND_COMMAND_ID: {
216 uint16_t payloadOffset = cmd->payloadStartIndex;
218 chip::GroupId groupId;
219 chip::EndpointId endpointId;
220 chip::ClusterId clusterId;
222 if (cmd->bufLen < payloadOffset + 8)
224 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
226 nodeId = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
227 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
228 if (cmd->bufLen < payloadOffset + 2)
230 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
232 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
233 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
234 if (cmd->bufLen < payloadOffset + 1)
236 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
238 endpointId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
239 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
240 if (cmd->bufLen < payloadOffset + 2)
242 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
244 clusterId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
246 wasHandled = emberAfBindingClusterBindCallback(nodeId, groupId, endpointId, clusterId);
249 case ZCL_UNBIND_COMMAND_ID: {
250 uint16_t payloadOffset = cmd->payloadStartIndex;
252 chip::GroupId groupId;
253 chip::EndpointId endpointId;
254 chip::ClusterId clusterId;
256 if (cmd->bufLen < payloadOffset + 8)
258 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
260 nodeId = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
261 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
262 if (cmd->bufLen < payloadOffset + 2)
264 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
266 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
267 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
268 if (cmd->bufLen < payloadOffset + 1)
270 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
272 endpointId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
273 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
274 if (cmd->bufLen < payloadOffset + 2)
276 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
278 clusterId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
280 wasHandled = emberAfBindingClusterUnbindCallback(nodeId, groupId, endpointId, clusterId);
284 // Unrecognized command ID, error status will apply.
289 return status(wasHandled, true, cmd->mfgSpecific);
291 EmberAfStatus emberAfColorControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
293 bool wasHandled = false;
295 if (!cmd->mfgSpecific)
297 switch (cmd->commandId)
299 case ZCL_MOVE_COLOR_COMMAND_ID: {
300 uint16_t payloadOffset = cmd->payloadStartIndex;
304 uint8_t optionsOverride;
306 if (cmd->bufLen < payloadOffset + 2)
308 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
310 rateX = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
311 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
312 if (cmd->bufLen < payloadOffset + 2)
314 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
316 rateY = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
317 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
318 if (cmd->bufLen < payloadOffset + 1)
320 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
322 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
323 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
324 if (cmd->bufLen < payloadOffset + 1)
326 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
328 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
330 wasHandled = emberAfColorControlClusterMoveColorCallback(rateX, rateY, optionsMask, optionsOverride);
333 case ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID: {
334 uint16_t payloadOffset = cmd->payloadStartIndex;
337 uint16_t colorTemperatureMinimum;
338 uint16_t colorTemperatureMaximum;
340 uint8_t optionsOverride;
342 if (cmd->bufLen < payloadOffset + 1)
344 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
346 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
347 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
348 if (cmd->bufLen < payloadOffset + 2)
350 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
352 rate = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
353 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
354 if (cmd->bufLen < payloadOffset + 2)
356 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
358 colorTemperatureMinimum = 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 colorTemperatureMaximum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
365 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
366 if (cmd->bufLen < payloadOffset + 1)
368 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
370 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
371 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
372 if (cmd->bufLen < payloadOffset + 1)
374 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
376 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
378 wasHandled = emberAfColorControlClusterMoveColorTemperatureCallback(
379 moveMode, rate, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
382 case ZCL_MOVE_HUE_COMMAND_ID: {
383 uint16_t payloadOffset = cmd->payloadStartIndex;
387 uint8_t optionsOverride;
389 if (cmd->bufLen < payloadOffset + 1)
391 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
393 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
394 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
395 if (cmd->bufLen < payloadOffset + 1)
397 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
399 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
400 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
401 if (cmd->bufLen < payloadOffset + 1)
403 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
405 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
406 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
407 if (cmd->bufLen < payloadOffset + 1)
409 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
411 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
413 wasHandled = emberAfColorControlClusterMoveHueCallback(moveMode, rate, optionsMask, optionsOverride);
416 case ZCL_MOVE_SATURATION_COMMAND_ID: {
417 uint16_t payloadOffset = cmd->payloadStartIndex;
421 uint8_t optionsOverride;
423 if (cmd->bufLen < payloadOffset + 1)
425 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
427 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
428 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
429 if (cmd->bufLen < payloadOffset + 1)
431 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
433 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
434 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
435 if (cmd->bufLen < payloadOffset + 1)
437 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
439 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
440 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
441 if (cmd->bufLen < payloadOffset + 1)
443 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
445 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
447 wasHandled = emberAfColorControlClusterMoveSaturationCallback(moveMode, rate, optionsMask, optionsOverride);
450 case ZCL_MOVE_TO_COLOR_COMMAND_ID: {
451 uint16_t payloadOffset = cmd->payloadStartIndex;
454 uint16_t transitionTime;
456 uint8_t optionsOverride;
458 if (cmd->bufLen < payloadOffset + 2)
460 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
462 colorX = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
463 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
464 if (cmd->bufLen < payloadOffset + 2)
466 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
468 colorY = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
469 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
470 if (cmd->bufLen < payloadOffset + 2)
472 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
474 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
475 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
476 if (cmd->bufLen < payloadOffset + 1)
478 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
480 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
481 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
482 if (cmd->bufLen < payloadOffset + 1)
484 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
486 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
489 emberAfColorControlClusterMoveToColorCallback(colorX, colorY, transitionTime, optionsMask, optionsOverride);
492 case ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID: {
493 uint16_t payloadOffset = cmd->payloadStartIndex;
494 uint16_t colorTemperature;
495 uint16_t transitionTime;
497 uint8_t optionsOverride;
499 if (cmd->bufLen < payloadOffset + 2)
501 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
503 colorTemperature = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
504 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
505 if (cmd->bufLen < payloadOffset + 2)
507 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
509 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
510 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
511 if (cmd->bufLen < payloadOffset + 1)
513 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
515 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
516 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
517 if (cmd->bufLen < payloadOffset + 1)
519 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
521 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
523 wasHandled = emberAfColorControlClusterMoveToColorTemperatureCallback(colorTemperature, transitionTime, optionsMask,
527 case ZCL_MOVE_TO_HUE_COMMAND_ID: {
528 uint16_t payloadOffset = cmd->payloadStartIndex;
531 uint16_t transitionTime;
533 uint8_t optionsOverride;
535 if (cmd->bufLen < payloadOffset + 1)
537 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
539 hue = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
540 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
541 if (cmd->bufLen < payloadOffset + 1)
543 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
545 direction = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
546 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
547 if (cmd->bufLen < payloadOffset + 2)
549 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
551 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
552 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
553 if (cmd->bufLen < payloadOffset + 1)
555 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
557 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
558 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
559 if (cmd->bufLen < payloadOffset + 1)
561 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
563 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
565 wasHandled = emberAfColorControlClusterMoveToHueCallback(hue, direction, transitionTime, optionsMask, optionsOverride);
568 case ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID: {
569 uint16_t payloadOffset = cmd->payloadStartIndex;
572 uint16_t transitionTime;
574 uint8_t optionsOverride;
576 if (cmd->bufLen < payloadOffset + 1)
578 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
580 hue = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
581 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
582 if (cmd->bufLen < payloadOffset + 1)
584 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
586 saturation = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
587 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
588 if (cmd->bufLen < payloadOffset + 2)
590 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
592 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
593 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
594 if (cmd->bufLen < payloadOffset + 1)
596 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
598 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
599 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
600 if (cmd->bufLen < payloadOffset + 1)
602 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
604 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
606 wasHandled = emberAfColorControlClusterMoveToHueAndSaturationCallback(hue, saturation, transitionTime, optionsMask,
610 case ZCL_MOVE_TO_SATURATION_COMMAND_ID: {
611 uint16_t payloadOffset = cmd->payloadStartIndex;
613 uint16_t transitionTime;
615 uint8_t optionsOverride;
617 if (cmd->bufLen < payloadOffset + 1)
619 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
621 saturation = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
622 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
623 if (cmd->bufLen < payloadOffset + 2)
625 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
627 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
628 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
629 if (cmd->bufLen < payloadOffset + 1)
631 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
633 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
634 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
635 if (cmd->bufLen < payloadOffset + 1)
637 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
639 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
642 emberAfColorControlClusterMoveToSaturationCallback(saturation, transitionTime, optionsMask, optionsOverride);
645 case ZCL_STEP_COLOR_COMMAND_ID: {
646 uint16_t payloadOffset = cmd->payloadStartIndex;
649 uint16_t transitionTime;
651 uint8_t optionsOverride;
653 if (cmd->bufLen < payloadOffset + 2)
655 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
657 stepX = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
658 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
659 if (cmd->bufLen < payloadOffset + 2)
661 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
663 stepY = static_cast<int16_t>(emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen));
664 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
665 if (cmd->bufLen < payloadOffset + 2)
667 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
669 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
670 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
671 if (cmd->bufLen < payloadOffset + 1)
673 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
675 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
676 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
677 if (cmd->bufLen < payloadOffset + 1)
679 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
681 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
683 wasHandled = emberAfColorControlClusterStepColorCallback(stepX, stepY, transitionTime, optionsMask, optionsOverride);
686 case ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID: {
687 uint16_t payloadOffset = cmd->payloadStartIndex;
690 uint16_t transitionTime;
691 uint16_t colorTemperatureMinimum;
692 uint16_t colorTemperatureMaximum;
694 uint8_t optionsOverride;
696 if (cmd->bufLen < payloadOffset + 1)
698 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
700 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
701 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
702 if (cmd->bufLen < payloadOffset + 2)
704 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
706 stepSize = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
707 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
708 if (cmd->bufLen < payloadOffset + 2)
710 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
712 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
713 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
714 if (cmd->bufLen < payloadOffset + 2)
716 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
718 colorTemperatureMinimum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
719 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
720 if (cmd->bufLen < payloadOffset + 2)
722 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
724 colorTemperatureMaximum = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
725 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
726 if (cmd->bufLen < payloadOffset + 1)
728 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
730 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
731 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
732 if (cmd->bufLen < payloadOffset + 1)
734 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
736 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
738 wasHandled = emberAfColorControlClusterStepColorTemperatureCallback(
739 stepMode, stepSize, transitionTime, colorTemperatureMinimum, colorTemperatureMaximum, optionsMask, optionsOverride);
742 case ZCL_STEP_HUE_COMMAND_ID: {
743 uint16_t payloadOffset = cmd->payloadStartIndex;
746 uint8_t transitionTime;
748 uint8_t optionsOverride;
750 if (cmd->bufLen < payloadOffset + 1)
752 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
754 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
755 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
756 if (cmd->bufLen < payloadOffset + 1)
758 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
760 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
761 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
762 if (cmd->bufLen < payloadOffset + 1)
764 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
766 transitionTime = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
767 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
768 if (cmd->bufLen < payloadOffset + 1)
770 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
772 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
773 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
774 if (cmd->bufLen < payloadOffset + 1)
776 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
778 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
781 emberAfColorControlClusterStepHueCallback(stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
784 case ZCL_STEP_SATURATION_COMMAND_ID: {
785 uint16_t payloadOffset = cmd->payloadStartIndex;
788 uint8_t transitionTime;
790 uint8_t optionsOverride;
792 if (cmd->bufLen < payloadOffset + 1)
794 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
796 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
797 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
798 if (cmd->bufLen < payloadOffset + 1)
800 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
802 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
803 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
804 if (cmd->bufLen < payloadOffset + 1)
806 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
808 transitionTime = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
809 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
810 if (cmd->bufLen < payloadOffset + 1)
812 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
814 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
815 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
816 if (cmd->bufLen < payloadOffset + 1)
818 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
820 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
823 emberAfColorControlClusterStepSaturationCallback(stepMode, stepSize, transitionTime, optionsMask, optionsOverride);
826 case ZCL_STOP_MOVE_STEP_COMMAND_ID: {
827 uint16_t payloadOffset = cmd->payloadStartIndex;
829 uint8_t optionsOverride;
831 if (cmd->bufLen < payloadOffset + 1)
833 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
835 optionsMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
836 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
837 if (cmd->bufLen < payloadOffset + 1)
839 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
841 optionsOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
843 wasHandled = emberAfColorControlClusterStopMoveStepCallback(optionsMask, optionsOverride);
847 // Unrecognized command ID, error status will apply.
852 return status(wasHandled, true, cmd->mfgSpecific);
854 EmberAfStatus emberAfContentLaunchClusterServerCommandParse(EmberAfClusterCommand * cmd)
856 bool wasHandled = false;
858 if (!cmd->mfgSpecific)
860 switch (cmd->commandId)
862 case ZCL_LAUNCH_CONTENT_COMMAND_ID: {
863 wasHandled = emberAfContentLaunchClusterLaunchContentCallback();
866 case ZCL_LAUNCH_URL_COMMAND_ID: {
867 wasHandled = emberAfContentLaunchClusterLaunchURLCallback();
871 // Unrecognized command ID, error status will apply.
876 return status(wasHandled, true, cmd->mfgSpecific);
878 EmberAfStatus emberAfDoorLockClusterServerCommandParse(EmberAfClusterCommand * cmd)
880 bool wasHandled = false;
882 if (!cmd->mfgSpecific)
884 switch (cmd->commandId)
886 case ZCL_CLEAR_ALL_PINS_COMMAND_ID: {
887 wasHandled = emberAfDoorLockClusterClearAllPinsCallback();
890 case ZCL_CLEAR_ALL_RFIDS_COMMAND_ID: {
891 wasHandled = emberAfDoorLockClusterClearAllRfidsCallback();
894 case ZCL_CLEAR_HOLIDAY_SCHEDULE_COMMAND_ID: {
895 uint16_t payloadOffset = cmd->payloadStartIndex;
898 if (cmd->bufLen < payloadOffset + 1)
900 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
902 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
904 wasHandled = emberAfDoorLockClusterClearHolidayScheduleCallback(scheduleId);
907 case ZCL_CLEAR_PIN_COMMAND_ID: {
908 uint16_t payloadOffset = cmd->payloadStartIndex;
911 if (cmd->bufLen < payloadOffset + 2)
913 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
915 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
917 wasHandled = emberAfDoorLockClusterClearPinCallback(userId);
920 case ZCL_CLEAR_RFID_COMMAND_ID: {
921 uint16_t payloadOffset = cmd->payloadStartIndex;
924 if (cmd->bufLen < payloadOffset + 2)
926 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
928 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
930 wasHandled = emberAfDoorLockClusterClearRfidCallback(userId);
933 case ZCL_CLEAR_WEEKDAY_SCHEDULE_COMMAND_ID: {
934 uint16_t payloadOffset = cmd->payloadStartIndex;
938 if (cmd->bufLen < payloadOffset + 1)
940 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
942 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
943 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
944 if (cmd->bufLen < payloadOffset + 2)
946 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
948 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
950 wasHandled = emberAfDoorLockClusterClearWeekdayScheduleCallback(scheduleId, userId);
953 case ZCL_CLEAR_YEARDAY_SCHEDULE_COMMAND_ID: {
954 uint16_t payloadOffset = cmd->payloadStartIndex;
958 if (cmd->bufLen < payloadOffset + 1)
960 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
962 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
963 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
964 if (cmd->bufLen < payloadOffset + 2)
966 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
968 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
970 wasHandled = emberAfDoorLockClusterClearYeardayScheduleCallback(scheduleId, userId);
973 case ZCL_GET_HOLIDAY_SCHEDULE_COMMAND_ID: {
974 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);
983 wasHandled = emberAfDoorLockClusterGetHolidayScheduleCallback(scheduleId);
986 case ZCL_GET_LOG_RECORD_COMMAND_ID: {
987 uint16_t payloadOffset = cmd->payloadStartIndex;
990 if (cmd->bufLen < payloadOffset + 2)
992 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
994 logIndex = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
996 wasHandled = emberAfDoorLockClusterGetLogRecordCallback(logIndex);
999 case ZCL_GET_PIN_COMMAND_ID: {
1000 uint16_t payloadOffset = cmd->payloadStartIndex;
1003 if (cmd->bufLen < payloadOffset + 2)
1005 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1007 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1009 wasHandled = emberAfDoorLockClusterGetPinCallback(userId);
1012 case ZCL_GET_RFID_COMMAND_ID: {
1013 uint16_t payloadOffset = cmd->payloadStartIndex;
1016 if (cmd->bufLen < payloadOffset + 2)
1018 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1020 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1022 wasHandled = emberAfDoorLockClusterGetRfidCallback(userId);
1025 case ZCL_GET_USER_TYPE_COMMAND_ID: {
1026 uint16_t payloadOffset = cmd->payloadStartIndex;
1029 if (cmd->bufLen < payloadOffset + 2)
1031 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1033 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1035 wasHandled = emberAfDoorLockClusterGetUserTypeCallback(userId);
1038 case ZCL_GET_WEEKDAY_SCHEDULE_COMMAND_ID: {
1039 uint16_t payloadOffset = cmd->payloadStartIndex;
1043 if (cmd->bufLen < payloadOffset + 1)
1045 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1047 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1048 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1049 if (cmd->bufLen < payloadOffset + 2)
1051 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1053 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1055 wasHandled = emberAfDoorLockClusterGetWeekdayScheduleCallback(scheduleId, userId);
1058 case ZCL_GET_YEARDAY_SCHEDULE_COMMAND_ID: {
1059 uint16_t payloadOffset = cmd->payloadStartIndex;
1063 if (cmd->bufLen < payloadOffset + 1)
1065 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1067 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1068 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1069 if (cmd->bufLen < payloadOffset + 2)
1071 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1073 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1075 wasHandled = emberAfDoorLockClusterGetYeardayScheduleCallback(scheduleId, userId);
1078 case ZCL_LOCK_DOOR_COMMAND_ID: {
1079 uint16_t payloadOffset = cmd->payloadStartIndex;
1082 if (cmd->bufLen < payloadOffset + 1u)
1084 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1086 PIN = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1088 wasHandled = emberAfDoorLockClusterLockDoorCallback(PIN);
1091 case ZCL_SET_HOLIDAY_SCHEDULE_COMMAND_ID: {
1092 uint16_t payloadOffset = cmd->payloadStartIndex;
1094 uint32_t localStartTime;
1095 uint32_t localEndTime;
1096 uint8_t operatingModeDuringHoliday;
1098 if (cmd->bufLen < payloadOffset + 1)
1100 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1102 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1103 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1104 if (cmd->bufLen < payloadOffset + 4)
1106 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1108 localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1109 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1110 if (cmd->bufLen < payloadOffset + 4)
1112 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1114 localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1115 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1116 if (cmd->bufLen < payloadOffset + 1)
1118 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1120 operatingModeDuringHoliday = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1122 wasHandled = emberAfDoorLockClusterSetHolidayScheduleCallback(scheduleId, localStartTime, localEndTime,
1123 operatingModeDuringHoliday);
1126 case ZCL_SET_PIN_COMMAND_ID: {
1127 uint16_t payloadOffset = cmd->payloadStartIndex;
1133 if (cmd->bufLen < payloadOffset + 2)
1135 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1137 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1138 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1139 if (cmd->bufLen < payloadOffset + 1)
1141 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1143 userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1144 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1145 if (cmd->bufLen < payloadOffset + 1)
1147 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1149 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1150 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1151 if (cmd->bufLen < payloadOffset + 1u)
1153 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1155 pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1157 wasHandled = emberAfDoorLockClusterSetPinCallback(userId, userStatus, userType, pin);
1160 case ZCL_SET_RFID_COMMAND_ID: {
1161 uint16_t payloadOffset = cmd->payloadStartIndex;
1167 if (cmd->bufLen < payloadOffset + 2)
1169 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1171 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1172 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1173 if (cmd->bufLen < payloadOffset + 1)
1175 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1177 userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1178 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1179 if (cmd->bufLen < payloadOffset + 1)
1181 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1183 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1184 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1185 if (cmd->bufLen < payloadOffset + 1u)
1187 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1189 id = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1191 wasHandled = emberAfDoorLockClusterSetRfidCallback(userId, userStatus, userType, id);
1194 case ZCL_SET_USER_TYPE_COMMAND_ID: {
1195 uint16_t payloadOffset = cmd->payloadStartIndex;
1199 if (cmd->bufLen < payloadOffset + 2)
1201 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1203 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1204 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1205 if (cmd->bufLen < payloadOffset + 1)
1207 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1209 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1211 wasHandled = emberAfDoorLockClusterSetUserTypeCallback(userId, userType);
1214 case ZCL_SET_WEEKDAY_SCHEDULE_COMMAND_ID: {
1215 uint16_t payloadOffset = cmd->payloadStartIndex;
1220 uint8_t startMinute;
1224 if (cmd->bufLen < payloadOffset + 1)
1226 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1228 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1229 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1230 if (cmd->bufLen < payloadOffset + 2)
1232 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1234 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1235 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1236 if (cmd->bufLen < payloadOffset + 1)
1238 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1240 daysMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1241 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1242 if (cmd->bufLen < payloadOffset + 1)
1244 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1246 startHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1247 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1248 if (cmd->bufLen < payloadOffset + 1)
1250 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1252 startMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1253 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1254 if (cmd->bufLen < payloadOffset + 1)
1256 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1258 endHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1259 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1260 if (cmd->bufLen < payloadOffset + 1)
1262 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1264 endMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1266 wasHandled = emberAfDoorLockClusterSetWeekdayScheduleCallback(scheduleId, userId, daysMask, startHour, startMinute,
1267 endHour, endMinute);
1270 case ZCL_SET_YEARDAY_SCHEDULE_COMMAND_ID: {
1271 uint16_t payloadOffset = cmd->payloadStartIndex;
1274 uint32_t localStartTime;
1275 uint32_t localEndTime;
1277 if (cmd->bufLen < payloadOffset + 1)
1279 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1281 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1282 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1283 if (cmd->bufLen < payloadOffset + 2)
1285 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1287 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1288 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1289 if (cmd->bufLen < payloadOffset + 4)
1291 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1293 localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1294 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
1295 if (cmd->bufLen < payloadOffset + 4)
1297 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1299 localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1301 wasHandled = emberAfDoorLockClusterSetYeardayScheduleCallback(scheduleId, userId, localStartTime, localEndTime);
1304 case ZCL_UNLOCK_DOOR_COMMAND_ID: {
1305 uint16_t payloadOffset = cmd->payloadStartIndex;
1308 if (cmd->bufLen < payloadOffset + 1u)
1310 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1312 PIN = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1314 wasHandled = emberAfDoorLockClusterUnlockDoorCallback(PIN);
1317 case ZCL_UNLOCK_WITH_TIMEOUT_COMMAND_ID: {
1318 uint16_t payloadOffset = cmd->payloadStartIndex;
1319 uint16_t timeoutInSeconds;
1322 if (cmd->bufLen < payloadOffset + 2)
1324 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1326 timeoutInSeconds = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1327 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1328 if (cmd->bufLen < payloadOffset + 1u)
1330 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1332 pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1334 wasHandled = emberAfDoorLockClusterUnlockWithTimeoutCallback(timeoutInSeconds, pin);
1338 // Unrecognized command ID, error status will apply.
1343 return status(wasHandled, true, cmd->mfgSpecific);
1345 EmberAfStatus emberAfGeneralCommissioningClusterServerCommandParse(EmberAfClusterCommand * cmd)
1347 bool wasHandled = false;
1349 if (!cmd->mfgSpecific)
1351 switch (cmd->commandId)
1353 case ZCL_ARM_FAIL_SAFE_COMMAND_ID: {
1354 uint16_t payloadOffset = cmd->payloadStartIndex;
1355 uint16_t expiryLengthSeconds;
1356 uint64_t breadcrumb;
1359 if (cmd->bufLen < payloadOffset + 2)
1361 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1363 expiryLengthSeconds = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1364 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1365 if (cmd->bufLen < payloadOffset + 8)
1367 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1369 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1370 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1371 if (cmd->bufLen < payloadOffset + 4)
1373 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1375 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1377 wasHandled = emberAfGeneralCommissioningClusterArmFailSafeCallback(expiryLengthSeconds, breadcrumb, timeoutMs);
1380 case ZCL_COMMISSIONING_COMPLETE_COMMAND_ID: {
1381 wasHandled = emberAfGeneralCommissioningClusterCommissioningCompleteCallback();
1384 case ZCL_SET_FABRIC_COMMAND_ID: {
1385 uint16_t payloadOffset = cmd->payloadStartIndex;
1387 uint8_t * fabricSecret;
1388 uint64_t breadcrumb;
1391 if (cmd->bufLen < payloadOffset + 1u)
1393 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1395 fabricId = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1396 payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(fabricId) + 1u);
1397 if (cmd->bufLen < payloadOffset + 1u)
1399 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1401 fabricSecret = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1402 payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(fabricSecret) + 1u);
1403 if (cmd->bufLen < payloadOffset + 8)
1405 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1407 breadcrumb = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
1408 payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
1409 if (cmd->bufLen < payloadOffset + 4)
1411 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1413 timeoutMs = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
1415 wasHandled = emberAfGeneralCommissioningClusterSetFabricCallback(fabricId, fabricSecret, breadcrumb, timeoutMs);
1419 // Unrecognized command ID, error status will apply.
1424 return status(wasHandled, true, cmd->mfgSpecific);
1426 EmberAfStatus emberAfGroupsClusterServerCommandParse(EmberAfClusterCommand * cmd)
1428 bool wasHandled = false;
1430 if (!cmd->mfgSpecific)
1432 switch (cmd->commandId)
1434 case ZCL_ADD_GROUP_COMMAND_ID: {
1435 uint16_t payloadOffset = cmd->payloadStartIndex;
1437 uint8_t * groupName;
1439 if (cmd->bufLen < payloadOffset + 2)
1441 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1443 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1444 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1445 if (cmd->bufLen < payloadOffset + 1u)
1447 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1449 groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1451 wasHandled = emberAfGroupsClusterAddGroupCallback(groupId, groupName);
1454 case ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID: {
1455 uint16_t payloadOffset = cmd->payloadStartIndex;
1457 uint8_t * groupName;
1459 if (cmd->bufLen < payloadOffset + 2)
1461 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1463 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1464 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1465 if (cmd->bufLen < payloadOffset + 1u)
1467 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1469 groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1471 wasHandled = emberAfGroupsClusterAddGroupIfIdentifyingCallback(groupId, groupName);
1474 case ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID: {
1475 uint16_t payloadOffset = cmd->payloadStartIndex;
1477 /* TYPE WARNING: array array defaults to */ uint8_t * groupList;
1479 if (cmd->bufLen < payloadOffset + 1)
1481 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1483 groupCount = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1484 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1485 groupList = cmd->buffer + payloadOffset;
1487 wasHandled = emberAfGroupsClusterGetGroupMembershipCallback(groupCount, groupList);
1490 case ZCL_REMOVE_ALL_GROUPS_COMMAND_ID: {
1491 wasHandled = emberAfGroupsClusterRemoveAllGroupsCallback();
1494 case ZCL_REMOVE_GROUP_COMMAND_ID: {
1495 uint16_t payloadOffset = cmd->payloadStartIndex;
1498 if (cmd->bufLen < payloadOffset + 2)
1500 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1502 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1504 wasHandled = emberAfGroupsClusterRemoveGroupCallback(groupId);
1507 case ZCL_VIEW_GROUP_COMMAND_ID: {
1508 uint16_t payloadOffset = cmd->payloadStartIndex;
1511 if (cmd->bufLen < payloadOffset + 2)
1513 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1515 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1517 wasHandled = emberAfGroupsClusterViewGroupCallback(groupId);
1521 // Unrecognized command ID, error status will apply.
1526 return status(wasHandled, true, cmd->mfgSpecific);
1528 EmberAfStatus emberAfIasZoneClusterServerCommandParse(EmberAfClusterCommand * cmd)
1530 bool wasHandled = false;
1532 if (!cmd->mfgSpecific)
1534 switch (cmd->commandId)
1536 case ZCL_ZONE_ENROLL_RESPONSE_COMMAND_ID: {
1537 uint16_t payloadOffset = cmd->payloadStartIndex;
1538 uint8_t enrollResponseCode;
1541 if (cmd->bufLen < payloadOffset + 1)
1543 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1545 enrollResponseCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1546 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1547 if (cmd->bufLen < payloadOffset + 1)
1549 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1551 zoneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1553 wasHandled = emberAfIasZoneClusterZoneEnrollResponseCallback(enrollResponseCode, zoneId);
1557 // Unrecognized command ID, error status will apply.
1562 return status(wasHandled, true, cmd->mfgSpecific);
1564 EmberAfStatus emberAfIdentifyClusterServerCommandParse(EmberAfClusterCommand * cmd)
1566 bool wasHandled = false;
1568 if (!cmd->mfgSpecific)
1570 switch (cmd->commandId)
1572 case ZCL_IDENTIFY_COMMAND_ID: {
1573 uint16_t payloadOffset = cmd->payloadStartIndex;
1574 uint16_t identifyTime;
1576 if (cmd->bufLen < payloadOffset + 2)
1578 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1580 identifyTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1582 wasHandled = emberAfIdentifyClusterIdentifyCallback(identifyTime);
1585 case ZCL_IDENTIFY_QUERY_COMMAND_ID: {
1586 wasHandled = emberAfIdentifyClusterIdentifyQueryCallback();
1590 // Unrecognized command ID, error status will apply.
1595 return status(wasHandled, true, cmd->mfgSpecific);
1597 EmberAfStatus emberAfLevelControlClusterServerCommandParse(EmberAfClusterCommand * cmd)
1599 bool wasHandled = false;
1601 if (!cmd->mfgSpecific)
1603 switch (cmd->commandId)
1605 case ZCL_MOVE_COMMAND_ID: {
1606 uint16_t payloadOffset = cmd->payloadStartIndex;
1610 uint8_t optionOverride;
1612 if (cmd->bufLen < payloadOffset + 1)
1614 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1616 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1617 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1618 if (cmd->bufLen < payloadOffset + 1)
1620 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1622 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1623 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1624 if (cmd->bufLen < payloadOffset + 1)
1626 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1628 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1629 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1630 if (cmd->bufLen < payloadOffset + 1)
1632 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1634 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1636 wasHandled = emberAfLevelControlClusterMoveCallback(moveMode, rate, optionMask, optionOverride);
1639 case ZCL_MOVE_TO_LEVEL_COMMAND_ID: {
1640 uint16_t payloadOffset = cmd->payloadStartIndex;
1642 uint16_t transitionTime;
1644 uint8_t optionOverride;
1646 if (cmd->bufLen < payloadOffset + 1)
1648 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1650 level = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1651 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1652 if (cmd->bufLen < payloadOffset + 2)
1654 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1656 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1657 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1658 if (cmd->bufLen < payloadOffset + 1)
1660 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1662 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1663 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1664 if (cmd->bufLen < payloadOffset + 1)
1666 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1668 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1670 wasHandled = emberAfLevelControlClusterMoveToLevelCallback(level, transitionTime, optionMask, optionOverride);
1673 case ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID: {
1674 uint16_t payloadOffset = cmd->payloadStartIndex;
1676 uint16_t transitionTime;
1678 if (cmd->bufLen < payloadOffset + 1)
1680 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1682 level = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1683 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1684 if (cmd->bufLen < payloadOffset + 2)
1686 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1688 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1690 wasHandled = emberAfLevelControlClusterMoveToLevelWithOnOffCallback(level, transitionTime);
1693 case ZCL_MOVE_WITH_ON_OFF_COMMAND_ID: {
1694 uint16_t payloadOffset = cmd->payloadStartIndex;
1698 if (cmd->bufLen < payloadOffset + 1)
1700 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1702 moveMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1703 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1704 if (cmd->bufLen < payloadOffset + 1)
1706 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1708 rate = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1710 wasHandled = emberAfLevelControlClusterMoveWithOnOffCallback(moveMode, rate);
1713 case ZCL_STEP_COMMAND_ID: {
1714 uint16_t payloadOffset = cmd->payloadStartIndex;
1717 uint16_t transitionTime;
1719 uint8_t optionOverride;
1721 if (cmd->bufLen < payloadOffset + 1)
1723 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1725 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1726 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1727 if (cmd->bufLen < payloadOffset + 1)
1729 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1731 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1732 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1733 if (cmd->bufLen < payloadOffset + 2)
1735 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1737 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1738 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1739 if (cmd->bufLen < payloadOffset + 1)
1741 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1743 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1744 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1745 if (cmd->bufLen < payloadOffset + 1)
1747 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1749 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1751 wasHandled = emberAfLevelControlClusterStepCallback(stepMode, stepSize, transitionTime, optionMask, optionOverride);
1754 case ZCL_STEP_WITH_ON_OFF_COMMAND_ID: {
1755 uint16_t payloadOffset = cmd->payloadStartIndex;
1758 uint16_t transitionTime;
1760 if (cmd->bufLen < payloadOffset + 1)
1762 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1764 stepMode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1765 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1766 if (cmd->bufLen < payloadOffset + 1)
1768 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1770 stepSize = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1771 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1772 if (cmd->bufLen < payloadOffset + 2)
1774 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1776 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1778 wasHandled = emberAfLevelControlClusterStepWithOnOffCallback(stepMode, stepSize, transitionTime);
1781 case ZCL_STOP_COMMAND_ID: {
1782 uint16_t payloadOffset = cmd->payloadStartIndex;
1784 uint8_t optionOverride;
1786 if (cmd->bufLen < payloadOffset + 1)
1788 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1790 optionMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1791 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1792 if (cmd->bufLen < payloadOffset + 1)
1794 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1796 optionOverride = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1798 wasHandled = emberAfLevelControlClusterStopCallback(optionMask, optionOverride);
1801 case ZCL_STOP_WITH_ON_OFF_COMMAND_ID: {
1802 wasHandled = emberAfLevelControlClusterStopWithOnOffCallback();
1806 // Unrecognized command ID, error status will apply.
1811 return status(wasHandled, true, cmd->mfgSpecific);
1813 EmberAfStatus emberAfLowPowerClusterServerCommandParse(EmberAfClusterCommand * cmd)
1815 bool wasHandled = false;
1817 if (!cmd->mfgSpecific)
1819 switch (cmd->commandId)
1821 case ZCL_SLEEP_COMMAND_ID: {
1822 wasHandled = emberAfLowPowerClusterSleepCallback();
1826 // Unrecognized command ID, error status will apply.
1831 return status(wasHandled, true, cmd->mfgSpecific);
1833 EmberAfStatus emberAfMediaPlaybackClusterServerCommandParse(EmberAfClusterCommand * cmd)
1835 bool wasHandled = false;
1837 if (!cmd->mfgSpecific)
1839 switch (cmd->commandId)
1841 case ZCL_FAST_FORWARD_REQUEST_COMMAND_ID: {
1842 wasHandled = emberAfMediaPlaybackClusterFastForwardRequestCallback();
1845 case ZCL_NEXT_REQUEST_COMMAND_ID: {
1846 wasHandled = emberAfMediaPlaybackClusterNextRequestCallback();
1849 case ZCL_PAUSE_REQUEST_COMMAND_ID: {
1850 wasHandled = emberAfMediaPlaybackClusterPauseRequestCallback();
1853 case ZCL_PLAY_REQUEST_COMMAND_ID: {
1854 wasHandled = emberAfMediaPlaybackClusterPlayRequestCallback();
1857 case ZCL_PREVIOUS_REQUEST_COMMAND_ID: {
1858 wasHandled = emberAfMediaPlaybackClusterPreviousRequestCallback();
1861 case ZCL_REWIND_REQUEST_COMMAND_ID: {
1862 wasHandled = emberAfMediaPlaybackClusterRewindRequestCallback();
1865 case ZCL_SKIP_BACKWARD_REQUEST_COMMAND_ID: {
1866 wasHandled = emberAfMediaPlaybackClusterSkipBackwardRequestCallback();
1869 case ZCL_SKIP_FORWARD_REQUEST_COMMAND_ID: {
1870 wasHandled = emberAfMediaPlaybackClusterSkipForwardRequestCallback();
1873 case ZCL_START_OVER_REQUEST_COMMAND_ID: {
1874 wasHandled = emberAfMediaPlaybackClusterStartOverRequestCallback();
1877 case ZCL_STOP_REQUEST_COMMAND_ID: {
1878 wasHandled = emberAfMediaPlaybackClusterStopRequestCallback();
1882 // Unrecognized command ID, error status will apply.
1887 return status(wasHandled, true, cmd->mfgSpecific);
1889 EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand * cmd)
1891 bool wasHandled = false;
1893 if (!cmd->mfgSpecific)
1895 switch (cmd->commandId)
1897 case ZCL_OFF_COMMAND_ID: {
1898 wasHandled = emberAfOnOffClusterOffCallback();
1901 case ZCL_ON_COMMAND_ID: {
1902 wasHandled = emberAfOnOffClusterOnCallback();
1905 case ZCL_TOGGLE_COMMAND_ID: {
1906 wasHandled = emberAfOnOffClusterToggleCallback();
1910 // Unrecognized command ID, error status will apply.
1915 return status(wasHandled, true, cmd->mfgSpecific);
1917 EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand * cmd)
1919 bool wasHandled = false;
1921 if (!cmd->mfgSpecific)
1923 switch (cmd->commandId)
1925 case ZCL_ADD_SCENE_COMMAND_ID: {
1926 uint16_t payloadOffset = cmd->payloadStartIndex;
1929 uint16_t transitionTime;
1930 uint8_t * sceneName;
1931 /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets;
1933 if (cmd->bufLen < payloadOffset + 2)
1935 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1937 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1938 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1939 if (cmd->bufLen < payloadOffset + 1)
1941 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1943 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1944 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1945 if (cmd->bufLen < payloadOffset + 2)
1947 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1949 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1950 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1951 if (cmd->bufLen < payloadOffset + 1u)
1953 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1955 sceneName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1956 payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(sceneName) + 1u);
1957 extensionFieldSets = cmd->buffer + payloadOffset;
1959 wasHandled = emberAfScenesClusterAddSceneCallback(groupId, sceneId, transitionTime, sceneName, extensionFieldSets);
1962 case ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID: {
1963 uint16_t payloadOffset = cmd->payloadStartIndex;
1966 if (cmd->bufLen < payloadOffset + 2)
1968 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1970 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1972 wasHandled = emberAfScenesClusterGetSceneMembershipCallback(groupId);
1975 case ZCL_RECALL_SCENE_COMMAND_ID: {
1976 uint16_t payloadOffset = cmd->payloadStartIndex;
1979 uint16_t transitionTime;
1981 if (cmd->bufLen < payloadOffset + 2)
1983 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1985 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1986 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1987 if (cmd->bufLen < payloadOffset + 1)
1989 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1991 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1992 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1993 if (cmd->bufLen < payloadOffset + 2)
1995 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1997 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1999 wasHandled = emberAfScenesClusterRecallSceneCallback(groupId, sceneId, transitionTime);
2002 case ZCL_REMOVE_ALL_SCENES_COMMAND_ID: {
2003 uint16_t payloadOffset = cmd->payloadStartIndex;
2006 if (cmd->bufLen < payloadOffset + 2)
2008 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2010 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2012 wasHandled = emberAfScenesClusterRemoveAllScenesCallback(groupId);
2015 case ZCL_REMOVE_SCENE_COMMAND_ID: {
2016 uint16_t payloadOffset = cmd->payloadStartIndex;
2020 if (cmd->bufLen < payloadOffset + 2)
2022 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2024 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2025 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2026 if (cmd->bufLen < payloadOffset + 1)
2028 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2030 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2032 wasHandled = emberAfScenesClusterRemoveSceneCallback(groupId, sceneId);
2035 case ZCL_STORE_SCENE_COMMAND_ID: {
2036 uint16_t payloadOffset = cmd->payloadStartIndex;
2040 if (cmd->bufLen < payloadOffset + 2)
2042 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2044 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2045 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2046 if (cmd->bufLen < payloadOffset + 1)
2048 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2050 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2052 wasHandled = emberAfScenesClusterStoreSceneCallback(groupId, sceneId);
2055 case ZCL_VIEW_SCENE_COMMAND_ID: {
2056 uint16_t payloadOffset = cmd->payloadStartIndex;
2060 if (cmd->bufLen < payloadOffset + 2)
2062 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2064 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
2065 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
2066 if (cmd->bufLen < payloadOffset + 1)
2068 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
2070 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
2072 wasHandled = emberAfScenesClusterViewSceneCallback(groupId, sceneId);
2076 // Unrecognized command ID, error status will apply.
2081 return status(wasHandled, true, cmd->mfgSpecific);