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 emberAfApplicationBasicClusterClientCommandParse(EmberAfClusterCommand * cmd);
32 EmberAfStatus emberAfBarrierControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
33 EmberAfStatus emberAfBasicClusterClientCommandParse(EmberAfClusterCommand * cmd);
34 EmberAfStatus emberAfBindingClusterClientCommandParse(EmberAfClusterCommand * cmd);
35 EmberAfStatus emberAfColorControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
36 EmberAfStatus emberAfContentLaunchClusterClientCommandParse(EmberAfClusterCommand * cmd);
37 EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd);
38 EmberAfStatus emberAfGeneralCommissioningClusterClientCommandParse(EmberAfClusterCommand * cmd);
39 EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd);
40 EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd);
41 EmberAfStatus emberAfLevelControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
42 EmberAfStatus emberAfLowPowerClusterClientCommandParse(EmberAfClusterCommand * cmd);
43 EmberAfStatus emberAfMediaPlaybackClusterClientCommandParse(EmberAfClusterCommand * cmd);
44 EmberAfStatus emberAfOnOffClusterClientCommandParse(EmberAfClusterCommand * cmd);
45 EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd);
46 EmberAfStatus emberAfTemperatureMeasurementClusterClientCommandParse(EmberAfClusterCommand * cmd);
48 static EmberAfStatus status(bool wasHandled, bool clusterExists, bool mfgSpecific)
52 return EMBER_ZCL_STATUS_SUCCESS;
56 return EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND;
58 else if (clusterExists)
60 return EMBER_ZCL_STATUS_UNSUP_COMMAND;
64 return EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER;
68 // Main command parsing controller.
69 EmberAfStatus emberAfClusterSpecificCommandParse(EmberAfClusterCommand * cmd)
71 EmberAfStatus result = status(false, false, cmd->mfgSpecific);
72 if (cmd->direction == (uint8_t) ZCL_DIRECTION_SERVER_TO_CLIENT &&
73 emberAfContainsClientWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
75 switch (cmd->apsFrame->clusterId)
77 case ZCL_APPLICATION_BASIC_CLUSTER_ID:
78 // No commands are enabled for cluster Application Basic
79 result = status(false, true, cmd->mfgSpecific);
81 case ZCL_BARRIER_CONTROL_CLUSTER_ID:
82 // No commands are enabled for cluster Barrier Control
83 result = status(false, true, cmd->mfgSpecific);
85 case ZCL_BASIC_CLUSTER_ID:
86 // No commands are enabled for cluster Basic
87 result = status(false, true, cmd->mfgSpecific);
89 case ZCL_BINDING_CLUSTER_ID:
90 // No commands are enabled for cluster Binding
91 result = status(false, true, cmd->mfgSpecific);
93 case ZCL_COLOR_CONTROL_CLUSTER_ID:
94 // No commands are enabled for cluster Color Control
95 result = status(false, true, cmd->mfgSpecific);
97 case ZCL_CONTENT_LAUNCH_CLUSTER_ID:
98 result = emberAfContentLaunchClusterClientCommandParse(cmd);
100 case ZCL_DOOR_LOCK_CLUSTER_ID:
101 result = emberAfDoorLockClusterClientCommandParse(cmd);
103 case ZCL_GENERAL_COMMISSIONING_CLUSTER_ID:
104 result = emberAfGeneralCommissioningClusterClientCommandParse(cmd);
106 case ZCL_GROUPS_CLUSTER_ID:
107 result = emberAfGroupsClusterClientCommandParse(cmd);
109 case ZCL_IDENTIFY_CLUSTER_ID:
110 result = emberAfIdentifyClusterClientCommandParse(cmd);
112 case ZCL_LEVEL_CONTROL_CLUSTER_ID:
113 // No commands are enabled for cluster Level Control
114 result = status(false, true, cmd->mfgSpecific);
116 case ZCL_LOW_POWER_CLUSTER_ID:
117 // No commands are enabled for cluster Low Power
118 result = status(false, true, cmd->mfgSpecific);
120 case ZCL_MEDIA_PLAYBACK_CLUSTER_ID:
121 result = emberAfMediaPlaybackClusterClientCommandParse(cmd);
123 case ZCL_ON_OFF_CLUSTER_ID:
124 // No commands are enabled for cluster On/off
125 result = status(false, true, cmd->mfgSpecific);
127 case ZCL_SCENES_CLUSTER_ID:
128 result = emberAfScenesClusterClientCommandParse(cmd);
130 case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
131 // No commands are enabled for cluster Temperature Measurement
132 result = status(false, true, cmd->mfgSpecific);
135 // Unrecognized cluster ID, error status will apply.
139 else if (cmd->direction == (uint8_t) ZCL_DIRECTION_CLIENT_TO_SERVER &&
140 emberAfContainsServerWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
142 switch (cmd->apsFrame->clusterId)
145 // Unrecognized cluster ID, error status will apply.
152 // Cluster specific command parsing
154 EmberAfStatus emberAfContentLaunchClusterClientCommandParse(EmberAfClusterCommand * cmd)
156 bool wasHandled = false;
158 if (!cmd->mfgSpecific)
160 switch (cmd->commandId)
162 case ZCL_LAUNCH_CONTENT_RESPONSE_COMMAND_ID: {
163 uint16_t payloadOffset = cmd->payloadStartIndex;
164 uint8_t contentLaunchStatus;
166 if (cmd->bufLen < payloadOffset + 1)
168 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
170 contentLaunchStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
172 wasHandled = emberAfContentLaunchClusterLaunchContentResponseCallback(contentLaunchStatus);
175 case ZCL_LAUNCH_URL_RESPONSE_COMMAND_ID: {
176 uint16_t payloadOffset = cmd->payloadStartIndex;
177 uint8_t contentLaunchStatus;
179 if (cmd->bufLen < payloadOffset + 1)
181 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
183 contentLaunchStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
185 wasHandled = emberAfContentLaunchClusterLaunchURLResponseCallback(contentLaunchStatus);
189 // Unrecognized command ID, error status will apply.
194 return status(wasHandled, true, cmd->mfgSpecific);
196 EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd)
198 bool wasHandled = false;
200 if (!cmd->mfgSpecific)
202 switch (cmd->commandId)
204 case ZCL_CLEAR_ALL_PINS_RESPONSE_COMMAND_ID: {
205 uint16_t payloadOffset = cmd->payloadStartIndex;
208 if (cmd->bufLen < payloadOffset + 1)
210 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
212 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
214 wasHandled = emberAfDoorLockClusterClearAllPinsResponseCallback(status);
217 case ZCL_CLEAR_ALL_RFIDS_RESPONSE_COMMAND_ID: {
218 uint16_t payloadOffset = cmd->payloadStartIndex;
221 if (cmd->bufLen < payloadOffset + 1)
223 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
225 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
227 wasHandled = emberAfDoorLockClusterClearAllRfidsResponseCallback(status);
230 case ZCL_CLEAR_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
231 uint16_t payloadOffset = cmd->payloadStartIndex;
234 if (cmd->bufLen < payloadOffset + 1)
236 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
238 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
240 wasHandled = emberAfDoorLockClusterClearHolidayScheduleResponseCallback(status);
243 case ZCL_CLEAR_PIN_RESPONSE_COMMAND_ID: {
244 uint16_t payloadOffset = cmd->payloadStartIndex;
247 if (cmd->bufLen < payloadOffset + 1)
249 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
251 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
253 wasHandled = emberAfDoorLockClusterClearPinResponseCallback(status);
256 case ZCL_CLEAR_RFID_RESPONSE_COMMAND_ID: {
257 uint16_t payloadOffset = cmd->payloadStartIndex;
260 if (cmd->bufLen < payloadOffset + 1)
262 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
264 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
266 wasHandled = emberAfDoorLockClusterClearRfidResponseCallback(status);
269 case ZCL_CLEAR_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
270 uint16_t payloadOffset = cmd->payloadStartIndex;
273 if (cmd->bufLen < payloadOffset + 1)
275 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
277 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
279 wasHandled = emberAfDoorLockClusterClearWeekdayScheduleResponseCallback(status);
282 case ZCL_CLEAR_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
283 uint16_t payloadOffset = cmd->payloadStartIndex;
286 if (cmd->bufLen < payloadOffset + 1)
288 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
290 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
292 wasHandled = emberAfDoorLockClusterClearYeardayScheduleResponseCallback(status);
295 case ZCL_GET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
296 uint16_t payloadOffset = cmd->payloadStartIndex;
299 uint32_t localStartTime;
300 uint32_t localEndTime;
301 uint8_t operatingModeDuringHoliday;
303 if (cmd->bufLen < payloadOffset + 1)
305 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
307 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
308 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
309 if (cmd->bufLen < payloadOffset + 1)
311 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
313 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
314 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
315 if (cmd->bufLen < payloadOffset + 4)
317 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
319 localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
320 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
321 if (cmd->bufLen < payloadOffset + 4)
323 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
325 localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
326 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
327 if (cmd->bufLen < payloadOffset + 1)
329 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
331 operatingModeDuringHoliday = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
333 wasHandled = emberAfDoorLockClusterGetHolidayScheduleResponseCallback(scheduleId, status, localStartTime, localEndTime,
334 operatingModeDuringHoliday);
337 case ZCL_GET_LOG_RECORD_RESPONSE_COMMAND_ID: {
338 uint16_t payloadOffset = cmd->payloadStartIndex;
343 uint8_t eventIdOrAlarmCode;
347 if (cmd->bufLen < payloadOffset + 2)
349 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
351 logEntryId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
352 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
353 if (cmd->bufLen < payloadOffset + 4)
355 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
357 timestamp = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
358 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
359 if (cmd->bufLen < payloadOffset + 1)
361 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
363 eventType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
364 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
365 if (cmd->bufLen < payloadOffset + 1)
367 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
369 source = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
370 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
371 if (cmd->bufLen < payloadOffset + 1)
373 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
375 eventIdOrAlarmCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
376 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
377 if (cmd->bufLen < payloadOffset + 2)
379 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
381 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
382 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
383 if (cmd->bufLen < payloadOffset + 1u)
385 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
387 pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
389 wasHandled = emberAfDoorLockClusterGetLogRecordResponseCallback(logEntryId, timestamp, eventType, source,
390 eventIdOrAlarmCode, userId, pin);
393 case ZCL_GET_PIN_RESPONSE_COMMAND_ID: {
394 uint16_t payloadOffset = cmd->payloadStartIndex;
400 if (cmd->bufLen < payloadOffset + 2)
402 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
404 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
405 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
406 if (cmd->bufLen < payloadOffset + 1)
408 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
410 userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
411 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
412 if (cmd->bufLen < payloadOffset + 1)
414 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
416 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
417 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
418 if (cmd->bufLen < payloadOffset + 1u)
420 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
422 pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
424 wasHandled = emberAfDoorLockClusterGetPinResponseCallback(userId, userStatus, userType, pin);
427 case ZCL_GET_RFID_RESPONSE_COMMAND_ID: {
428 uint16_t payloadOffset = cmd->payloadStartIndex;
434 if (cmd->bufLen < payloadOffset + 2)
436 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
438 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
439 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
440 if (cmd->bufLen < payloadOffset + 1)
442 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
444 userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
445 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
446 if (cmd->bufLen < payloadOffset + 1)
448 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
450 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
451 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
452 if (cmd->bufLen < payloadOffset + 1u)
454 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
456 rfid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
458 wasHandled = emberAfDoorLockClusterGetRfidResponseCallback(userId, userStatus, userType, rfid);
461 case ZCL_GET_USER_TYPE_RESPONSE_COMMAND_ID: {
462 uint16_t payloadOffset = cmd->payloadStartIndex;
466 if (cmd->bufLen < payloadOffset + 2)
468 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
470 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
471 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
472 if (cmd->bufLen < payloadOffset + 1)
474 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
476 userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
478 wasHandled = emberAfDoorLockClusterGetUserTypeResponseCallback(userId, userType);
481 case ZCL_GET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
482 uint16_t payloadOffset = cmd->payloadStartIndex;
492 if (cmd->bufLen < payloadOffset + 1)
494 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
496 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
497 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
498 if (cmd->bufLen < payloadOffset + 2)
500 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
502 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
503 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
504 if (cmd->bufLen < payloadOffset + 1)
506 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
508 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
509 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
510 if (cmd->bufLen < payloadOffset + 1)
512 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
514 daysMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
515 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
516 if (cmd->bufLen < payloadOffset + 1)
518 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
520 startHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
521 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
522 if (cmd->bufLen < payloadOffset + 1)
524 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
526 startMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
527 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
528 if (cmd->bufLen < payloadOffset + 1)
530 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
532 endHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
533 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
534 if (cmd->bufLen < payloadOffset + 1)
536 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
538 endMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
540 wasHandled = emberAfDoorLockClusterGetWeekdayScheduleResponseCallback(scheduleId, userId, status, daysMask, startHour,
541 startMinute, endHour, endMinute);
544 case ZCL_GET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
545 uint16_t payloadOffset = cmd->payloadStartIndex;
549 uint32_t localStartTime;
550 uint32_t localEndTime;
552 if (cmd->bufLen < payloadOffset + 1)
554 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
556 scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
557 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
558 if (cmd->bufLen < payloadOffset + 2)
560 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
562 userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
563 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
564 if (cmd->bufLen < payloadOffset + 1)
566 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
568 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
569 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
570 if (cmd->bufLen < payloadOffset + 4)
572 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
574 localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
575 payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
576 if (cmd->bufLen < payloadOffset + 4)
578 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
580 localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
583 emberAfDoorLockClusterGetYeardayScheduleResponseCallback(scheduleId, userId, status, localStartTime, localEndTime);
586 case ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID: {
587 uint16_t payloadOffset = cmd->payloadStartIndex;
590 if (cmd->bufLen < payloadOffset + 1)
592 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
594 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
596 wasHandled = emberAfDoorLockClusterLockDoorResponseCallback(status);
599 case ZCL_SET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
600 uint16_t payloadOffset = cmd->payloadStartIndex;
603 if (cmd->bufLen < payloadOffset + 1)
605 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
607 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
609 wasHandled = emberAfDoorLockClusterSetHolidayScheduleResponseCallback(status);
612 case ZCL_SET_PIN_RESPONSE_COMMAND_ID: {
613 uint16_t payloadOffset = cmd->payloadStartIndex;
616 if (cmd->bufLen < payloadOffset + 1)
618 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
620 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
622 wasHandled = emberAfDoorLockClusterSetPinResponseCallback(status);
625 case ZCL_SET_RFID_RESPONSE_COMMAND_ID: {
626 uint16_t payloadOffset = cmd->payloadStartIndex;
629 if (cmd->bufLen < payloadOffset + 1)
631 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
633 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
635 wasHandled = emberAfDoorLockClusterSetRfidResponseCallback(status);
638 case ZCL_SET_USER_TYPE_RESPONSE_COMMAND_ID: {
639 uint16_t payloadOffset = cmd->payloadStartIndex;
642 if (cmd->bufLen < payloadOffset + 1)
644 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
646 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
648 wasHandled = emberAfDoorLockClusterSetUserTypeResponseCallback(status);
651 case ZCL_SET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
652 uint16_t payloadOffset = cmd->payloadStartIndex;
655 if (cmd->bufLen < payloadOffset + 1)
657 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
659 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
661 wasHandled = emberAfDoorLockClusterSetWeekdayScheduleResponseCallback(status);
664 case ZCL_SET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
665 uint16_t payloadOffset = cmd->payloadStartIndex;
668 if (cmd->bufLen < payloadOffset + 1)
670 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
672 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
674 wasHandled = emberAfDoorLockClusterSetYeardayScheduleResponseCallback(status);
677 case ZCL_UNLOCK_DOOR_RESPONSE_COMMAND_ID: {
678 uint16_t payloadOffset = cmd->payloadStartIndex;
681 if (cmd->bufLen < payloadOffset + 1)
683 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
685 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
687 wasHandled = emberAfDoorLockClusterUnlockDoorResponseCallback(status);
690 case ZCL_UNLOCK_WITH_TIMEOUT_RESPONSE_COMMAND_ID: {
691 uint16_t payloadOffset = cmd->payloadStartIndex;
694 if (cmd->bufLen < payloadOffset + 1)
696 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
698 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
700 wasHandled = emberAfDoorLockClusterUnlockWithTimeoutResponseCallback(status);
704 // Unrecognized command ID, error status will apply.
709 return status(wasHandled, true, cmd->mfgSpecific);
711 EmberAfStatus emberAfGeneralCommissioningClusterClientCommandParse(EmberAfClusterCommand * cmd)
713 bool wasHandled = false;
715 if (!cmd->mfgSpecific)
717 switch (cmd->commandId)
719 case ZCL_ARM_FAIL_SAFE_RESPONSE_COMMAND_ID: {
720 uint16_t payloadOffset = cmd->payloadStartIndex;
724 if (cmd->bufLen < payloadOffset + 1)
726 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
728 errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
729 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
730 if (cmd->bufLen < payloadOffset + 1u)
732 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
734 debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
736 wasHandled = emberAfGeneralCommissioningClusterArmFailSafeResponseCallback(errorCode, debugText);
739 case ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID: {
740 uint16_t payloadOffset = cmd->payloadStartIndex;
744 if (cmd->bufLen < payloadOffset + 1)
746 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
748 errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
749 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
750 if (cmd->bufLen < payloadOffset + 1u)
752 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
754 debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
756 wasHandled = emberAfGeneralCommissioningClusterCommissioningCompleteResponseCallback(errorCode, debugText);
759 case ZCL_SET_FABRIC_RESPONSE_COMMAND_ID: {
760 uint16_t payloadOffset = cmd->payloadStartIndex;
764 if (cmd->bufLen < payloadOffset + 1)
766 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
768 errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
769 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
770 if (cmd->bufLen < payloadOffset + 1u)
772 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
774 debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
776 wasHandled = emberAfGeneralCommissioningClusterSetFabricResponseCallback(errorCode, debugText);
780 // Unrecognized command ID, error status will apply.
785 return status(wasHandled, true, cmd->mfgSpecific);
787 EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd)
789 bool wasHandled = false;
791 if (!cmd->mfgSpecific)
793 switch (cmd->commandId)
795 case ZCL_ADD_GROUP_RESPONSE_COMMAND_ID: {
796 uint16_t payloadOffset = cmd->payloadStartIndex;
800 if (cmd->bufLen < payloadOffset + 1)
802 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
804 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
805 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
806 if (cmd->bufLen < payloadOffset + 2)
808 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
810 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
812 wasHandled = emberAfGroupsClusterAddGroupResponseCallback(status, groupId);
815 case ZCL_GET_GROUP_MEMBERSHIP_RESPONSE_COMMAND_ID: {
816 uint16_t payloadOffset = cmd->payloadStartIndex;
819 /* TYPE WARNING: array array defaults to */ uint8_t * groupList;
821 if (cmd->bufLen < payloadOffset + 1)
823 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
825 capacity = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
826 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
827 if (cmd->bufLen < payloadOffset + 1)
829 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
831 groupCount = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
832 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
833 groupList = cmd->buffer + payloadOffset;
835 wasHandled = emberAfGroupsClusterGetGroupMembershipResponseCallback(capacity, groupCount, groupList);
838 case ZCL_REMOVE_GROUP_RESPONSE_COMMAND_ID: {
839 uint16_t payloadOffset = cmd->payloadStartIndex;
843 if (cmd->bufLen < payloadOffset + 1)
845 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
847 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
848 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
849 if (cmd->bufLen < payloadOffset + 2)
851 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
853 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
855 wasHandled = emberAfGroupsClusterRemoveGroupResponseCallback(status, groupId);
858 case ZCL_VIEW_GROUP_RESPONSE_COMMAND_ID: {
859 uint16_t payloadOffset = cmd->payloadStartIndex;
864 if (cmd->bufLen < payloadOffset + 1)
866 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
868 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
869 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
870 if (cmd->bufLen < payloadOffset + 2)
872 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
874 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
875 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
876 if (cmd->bufLen < payloadOffset + 1u)
878 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
880 groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
882 wasHandled = emberAfGroupsClusterViewGroupResponseCallback(status, groupId, groupName);
886 // Unrecognized command ID, error status will apply.
891 return status(wasHandled, true, cmd->mfgSpecific);
893 EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd)
895 bool wasHandled = false;
897 if (!cmd->mfgSpecific)
899 switch (cmd->commandId)
901 case ZCL_IDENTIFY_QUERY_RESPONSE_COMMAND_ID: {
902 uint16_t payloadOffset = cmd->payloadStartIndex;
905 if (cmd->bufLen < payloadOffset + 2)
907 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
909 timeout = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
911 wasHandled = emberAfIdentifyClusterIdentifyQueryResponseCallback(timeout);
915 // Unrecognized command ID, error status will apply.
920 return status(wasHandled, true, cmd->mfgSpecific);
922 EmberAfStatus emberAfMediaPlaybackClusterClientCommandParse(EmberAfClusterCommand * cmd)
924 bool wasHandled = false;
926 if (!cmd->mfgSpecific)
928 switch (cmd->commandId)
930 case ZCL_PLAYBACK_COMMAND_ID: {
931 wasHandled = emberAfMediaPlaybackClusterPlaybackCallback();
935 // Unrecognized command ID, error status will apply.
940 return status(wasHandled, true, cmd->mfgSpecific);
942 EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd)
944 bool wasHandled = false;
946 if (!cmd->mfgSpecific)
948 switch (cmd->commandId)
950 case ZCL_ADD_SCENE_RESPONSE_COMMAND_ID: {
951 uint16_t payloadOffset = cmd->payloadStartIndex;
956 if (cmd->bufLen < payloadOffset + 1)
958 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
960 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
961 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
962 if (cmd->bufLen < payloadOffset + 2)
964 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
966 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
967 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
968 if (cmd->bufLen < payloadOffset + 1)
970 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
972 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
974 wasHandled = emberAfScenesClusterAddSceneResponseCallback(status, groupId, sceneId);
977 case ZCL_GET_SCENE_MEMBERSHIP_RESPONSE_COMMAND_ID: {
978 uint16_t payloadOffset = cmd->payloadStartIndex;
983 /* TYPE WARNING: array array defaults to */ uint8_t * sceneList;
985 if (cmd->bufLen < payloadOffset + 1)
987 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
989 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
990 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
991 if (cmd->bufLen < payloadOffset + 1)
993 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
995 capacity = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
996 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
997 if (cmd->bufLen < payloadOffset + 2)
999 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1001 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1002 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1005 if (cmd->bufLen < payloadOffset + 1)
1007 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1009 sceneCount = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1010 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1014 sceneCount = UINT8_MAX;
1018 sceneList = cmd->buffer + payloadOffset;
1025 wasHandled = emberAfScenesClusterGetSceneMembershipResponseCallback(status, capacity, groupId, sceneCount, sceneList);
1028 case ZCL_REMOVE_ALL_SCENES_RESPONSE_COMMAND_ID: {
1029 uint16_t payloadOffset = cmd->payloadStartIndex;
1033 if (cmd->bufLen < payloadOffset + 1)
1035 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1037 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1038 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1039 if (cmd->bufLen < payloadOffset + 2)
1041 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1043 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1045 wasHandled = emberAfScenesClusterRemoveAllScenesResponseCallback(status, groupId);
1048 case ZCL_REMOVE_SCENE_RESPONSE_COMMAND_ID: {
1049 uint16_t payloadOffset = cmd->payloadStartIndex;
1054 if (cmd->bufLen < payloadOffset + 1)
1056 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1058 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1059 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1060 if (cmd->bufLen < payloadOffset + 2)
1062 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1064 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1065 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1066 if (cmd->bufLen < payloadOffset + 1)
1068 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1070 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1072 wasHandled = emberAfScenesClusterRemoveSceneResponseCallback(status, groupId, sceneId);
1075 case ZCL_STORE_SCENE_RESPONSE_COMMAND_ID: {
1076 uint16_t payloadOffset = cmd->payloadStartIndex;
1081 if (cmd->bufLen < payloadOffset + 1)
1083 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1085 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1086 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1087 if (cmd->bufLen < payloadOffset + 2)
1089 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1091 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1092 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1093 if (cmd->bufLen < payloadOffset + 1)
1095 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1097 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1099 wasHandled = emberAfScenesClusterStoreSceneResponseCallback(status, groupId, sceneId);
1102 case ZCL_VIEW_SCENE_RESPONSE_COMMAND_ID: {
1103 uint16_t payloadOffset = cmd->payloadStartIndex;
1107 uint16_t transitionTime;
1108 uint8_t * sceneName;
1109 /* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets;
1111 if (cmd->bufLen < payloadOffset + 1)
1113 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1115 status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1116 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1117 if (cmd->bufLen < payloadOffset + 2)
1119 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1121 groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1122 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1123 if (cmd->bufLen < payloadOffset + 1)
1125 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1127 sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
1128 payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
1131 if (cmd->bufLen < payloadOffset + 2)
1133 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1135 transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
1136 payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
1140 transitionTime = UINT16_MAX;
1144 if (cmd->bufLen < payloadOffset + 1u)
1146 return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
1148 sceneName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
1149 payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(sceneName) + 1u);
1157 extensionFieldSets = cmd->buffer + payloadOffset;
1161 extensionFieldSets = NULL;
1164 wasHandled = emberAfScenesClusterViewSceneResponseCallback(status, groupId, sceneId, transitionTime, sceneName,
1165 extensionFieldSets);
1169 // Unrecognized command ID, error status will apply.
1174 return status(wasHandled, true, cmd->mfgSpecific);