blob: 2a18b911128bd31c88274d8fd69580cc54976acf [file] [log] [blame]
/*
*
* Copyright (c) 2021 Project CHIP Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// THIS FILE IS GENERATED BY ZAP
#include <stdint.h>
#include "app/util/util.h"
#include "call-command-handler.h"
#include "callback.h"
#include <app/common/gen/af-structs.h>
#include <app/common/gen/cluster-id.h>
#include <app/common/gen/command-id.h>
using namespace chip;
EmberAfStatus emberAfAccountLoginClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfApplicationBasicClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfApplicationLauncherClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfAudioOutputClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfBarrierControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfBasicClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfBindingClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfBridgedDeviceBasicClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfColorControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfContentLaunchClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfDescriptorClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfEthernetNetworkDiagnosticsClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfFixedLabelClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfGeneralCommissioningClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfGeneralDiagnosticsClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfGroupKeyManagementClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfKeypadInputClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfLevelControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfLowPowerClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfMediaInputClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfMediaPlaybackClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfNetworkCommissioningClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfOnOffClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfOperationalCredentialsClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfPumpConfigurationAndControlClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfRelativeHumidityMeasurementClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfSoftwareDiagnosticsClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfSwitchClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfTvChannelClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfTargetNavigatorClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfTemperatureMeasurementClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfTestClusterClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfThermostatClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfTrustedRootCertificatesClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfWakeOnLanClusterClientCommandParse(EmberAfClusterCommand * cmd);
EmberAfStatus emberAfWindowCoveringClusterClientCommandParse(EmberAfClusterCommand * cmd);
static EmberAfStatus status(bool wasHandled, bool clusterExists, bool mfgSpecific)
{
if (wasHandled)
{
return EMBER_ZCL_STATUS_SUCCESS;
}
else if (mfgSpecific)
{
return EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND;
}
else if (clusterExists)
{
return EMBER_ZCL_STATUS_UNSUP_COMMAND;
}
else
{
return EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER;
}
}
// Main command parsing controller.
EmberAfStatus emberAfClusterSpecificCommandParse(EmberAfClusterCommand * cmd)
{
EmberAfStatus result = status(false, false, cmd->mfgSpecific);
if (cmd->direction == (uint8_t) ZCL_DIRECTION_SERVER_TO_CLIENT &&
emberAfContainsClientWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
{
switch (cmd->apsFrame->clusterId)
{
case ZCL_ACCOUNT_LOGIN_CLUSTER_ID:
result = emberAfAccountLoginClusterClientCommandParse(cmd);
break;
case ZCL_APPLICATION_BASIC_CLUSTER_ID:
// No commands are enabled for cluster Application Basic
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_APPLICATION_LAUNCHER_CLUSTER_ID:
result = emberAfApplicationLauncherClusterClientCommandParse(cmd);
break;
case ZCL_AUDIO_OUTPUT_CLUSTER_ID:
// No commands are enabled for cluster Audio Output
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_BARRIER_CONTROL_CLUSTER_ID:
// No commands are enabled for cluster Barrier Control
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_BASIC_CLUSTER_ID:
// No commands are enabled for cluster Basic
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_BINDING_CLUSTER_ID:
// No commands are enabled for cluster Binding
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_BRIDGED_DEVICE_BASIC_CLUSTER_ID:
// No commands are enabled for cluster Bridged Device Basic
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_COLOR_CONTROL_CLUSTER_ID:
// No commands are enabled for cluster Color Control
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_CONTENT_LAUNCH_CLUSTER_ID:
result = emberAfContentLaunchClusterClientCommandParse(cmd);
break;
case ZCL_DESCRIPTOR_CLUSTER_ID:
// No commands are enabled for cluster Descriptor
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_DOOR_LOCK_CLUSTER_ID:
result = emberAfDoorLockClusterClientCommandParse(cmd);
break;
case ZCL_ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER_ID:
// No commands are enabled for cluster Ethernet Network Diagnostics
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_FIXED_LABEL_CLUSTER_ID:
// No commands are enabled for cluster Fixed Label
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_GENERAL_COMMISSIONING_CLUSTER_ID:
result = emberAfGeneralCommissioningClusterClientCommandParse(cmd);
break;
case ZCL_GENERAL_DIAGNOSTICS_CLUSTER_ID:
// No commands are enabled for cluster General Diagnostics
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_GROUP_KEY_MANAGEMENT_CLUSTER_ID:
// No commands are enabled for cluster Group Key Management
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_GROUPS_CLUSTER_ID:
result = emberAfGroupsClusterClientCommandParse(cmd);
break;
case ZCL_IDENTIFY_CLUSTER_ID:
result = emberAfIdentifyClusterClientCommandParse(cmd);
break;
case ZCL_KEYPAD_INPUT_CLUSTER_ID:
result = emberAfKeypadInputClusterClientCommandParse(cmd);
break;
case ZCL_LEVEL_CONTROL_CLUSTER_ID:
// No commands are enabled for cluster Level Control
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_LOW_POWER_CLUSTER_ID:
// No commands are enabled for cluster Low Power
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_MEDIA_INPUT_CLUSTER_ID:
// No commands are enabled for cluster Media Input
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_MEDIA_PLAYBACK_CLUSTER_ID:
result = emberAfMediaPlaybackClusterClientCommandParse(cmd);
break;
case ZCL_NETWORK_COMMISSIONING_CLUSTER_ID:
result = emberAfNetworkCommissioningClusterClientCommandParse(cmd);
break;
case ZCL_ON_OFF_CLUSTER_ID:
// No commands are enabled for cluster On/off
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_OPERATIONAL_CREDENTIALS_CLUSTER_ID:
result = emberAfOperationalCredentialsClusterClientCommandParse(cmd);
break;
case ZCL_PUMP_CONFIG_CONTROL_CLUSTER_ID:
// No commands are enabled for cluster Pump Configuration and Control
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_RELATIVE_HUMIDITY_MEASUREMENT_CLUSTER_ID:
// No commands are enabled for cluster Relative Humidity Measurement
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_SCENES_CLUSTER_ID:
result = emberAfScenesClusterClientCommandParse(cmd);
break;
case ZCL_SOFTWARE_DIAGNOSTICS_CLUSTER_ID:
// No commands are enabled for cluster Software Diagnostics
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_SWITCH_CLUSTER_ID:
// No commands are enabled for cluster Switch
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_TV_CHANNEL_CLUSTER_ID:
result = emberAfTvChannelClusterClientCommandParse(cmd);
break;
case ZCL_TARGET_NAVIGATOR_CLUSTER_ID:
result = emberAfTargetNavigatorClusterClientCommandParse(cmd);
break;
case ZCL_TEMP_MEASUREMENT_CLUSTER_ID:
// No commands are enabled for cluster Temperature Measurement
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_TEST_CLUSTER_ID:
result = emberAfTestClusterClusterClientCommandParse(cmd);
break;
case ZCL_THERMOSTAT_CLUSTER_ID:
// No commands are enabled for cluster Thermostat
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_TRUSTED_ROOT_CERTIFICATES_CLUSTER_ID:
// No commands are enabled for cluster Trusted Root Certificates
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_WAKE_ON_LAN_CLUSTER_ID:
// No commands are enabled for cluster Wake on LAN
result = status(false, true, cmd->mfgSpecific);
break;
case ZCL_WINDOW_COVERING_CLUSTER_ID:
// No commands are enabled for cluster Window Covering
result = status(false, true, cmd->mfgSpecific);
break;
default:
// Unrecognized cluster ID, error status will apply.
break;
}
}
else if (cmd->direction == (uint8_t) ZCL_DIRECTION_CLIENT_TO_SERVER &&
emberAfContainsServerWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode))
{
switch (cmd->apsFrame->clusterId)
{
default:
// Unrecognized cluster ID, error status will apply.
break;
}
}
return result;
}
// Cluster specific command parsing
EmberAfStatus emberAfAccountLoginClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_GET_SETUP_PIN_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t * setupPIN;
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
setupPIN = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfAccountLoginClusterGetSetupPINResponseCallback(nullptr, setupPIN);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfApplicationLauncherClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_LAUNCH_APP_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
uint8_t * data;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
data = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfApplicationLauncherClusterLaunchAppResponseCallback(nullptr, status, data);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfContentLaunchClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_LAUNCH_CONTENT_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t * data;
uint8_t contentLaunchStatus;
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
data = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(data) + 1u);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
contentLaunchStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfContentLaunchClusterLaunchContentResponseCallback(nullptr, data, contentLaunchStatus);
break;
}
case ZCL_LAUNCH_URL_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t * data;
uint8_t contentLaunchStatus;
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
data = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(data) + 1u);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
contentLaunchStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfContentLaunchClusterLaunchURLResponseCallback(nullptr, data, contentLaunchStatus);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfDoorLockClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_CLEAR_ALL_PINS_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterClearAllPinsResponseCallback(nullptr, status);
break;
}
case ZCL_CLEAR_ALL_RFIDS_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterClearAllRfidsResponseCallback(nullptr, status);
break;
}
case ZCL_CLEAR_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterClearHolidayScheduleResponseCallback(nullptr, status);
break;
}
case ZCL_CLEAR_PIN_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterClearPinResponseCallback(nullptr, status);
break;
}
case ZCL_CLEAR_RFID_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterClearRfidResponseCallback(nullptr, status);
break;
}
case ZCL_CLEAR_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterClearWeekdayScheduleResponseCallback(nullptr, status);
break;
}
case ZCL_CLEAR_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterClearYeardayScheduleResponseCallback(nullptr, status);
break;
}
case ZCL_GET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t scheduleId;
uint8_t status;
uint32_t localStartTime;
uint32_t localEndTime;
uint8_t operatingModeDuringHoliday;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 4)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
if (cmd->bufLen < payloadOffset + 4)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
operatingModeDuringHoliday = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterGetHolidayScheduleResponseCallback(nullptr, scheduleId, status, localStartTime,
localEndTime, operatingModeDuringHoliday);
break;
}
case ZCL_GET_LOG_RECORD_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint16_t logEntryId;
uint32_t timestamp;
uint8_t eventType;
uint8_t source;
uint8_t eventIdOrAlarmCode;
uint16_t userId;
uint8_t * pin;
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
logEntryId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 4)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
timestamp = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
eventType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
source = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
eventIdOrAlarmCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterGetLogRecordResponseCallback(nullptr, logEntryId, timestamp, eventType, source,
eventIdOrAlarmCode, userId, pin);
break;
}
case ZCL_GET_PIN_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint16_t userId;
uint8_t userStatus;
uint8_t userType;
uint8_t * pin;
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
pin = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterGetPinResponseCallback(nullptr, userId, userStatus, userType, pin);
break;
}
case ZCL_GET_RFID_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint16_t userId;
uint8_t userStatus;
uint8_t userType;
uint8_t * rfid;
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
userStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
rfid = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterGetRfidResponseCallback(nullptr, userId, userStatus, userType, rfid);
break;
}
case ZCL_GET_USER_TYPE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint16_t userId;
uint8_t userType;
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
userType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterGetUserTypeResponseCallback(nullptr, userId, userType);
break;
}
case ZCL_GET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t scheduleId;
uint16_t userId;
uint8_t status;
uint8_t daysMask;
uint8_t startHour;
uint8_t startMinute;
uint8_t endHour;
uint8_t endMinute;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
daysMask = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
startHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
startMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
endHour = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
endMinute = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterGetWeekdayScheduleResponseCallback(nullptr, scheduleId, userId, status, daysMask,
startHour, startMinute, endHour, endMinute);
break;
}
case ZCL_GET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t scheduleId;
uint16_t userId;
uint8_t status;
uint32_t localStartTime;
uint32_t localEndTime;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
scheduleId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
userId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 4)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
localStartTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 4);
if (cmd->bufLen < payloadOffset + 4)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
localEndTime = emberAfGetInt32u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterGetYeardayScheduleResponseCallback(nullptr, scheduleId, userId, status,
localStartTime, localEndTime);
break;
}
case ZCL_LOCK_DOOR_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterLockDoorResponseCallback(nullptr, status);
break;
}
case ZCL_SET_HOLIDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterSetHolidayScheduleResponseCallback(nullptr, status);
break;
}
case ZCL_SET_PIN_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterSetPinResponseCallback(nullptr, status);
break;
}
case ZCL_SET_RFID_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterSetRfidResponseCallback(nullptr, status);
break;
}
case ZCL_SET_USER_TYPE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterSetUserTypeResponseCallback(nullptr, status);
break;
}
case ZCL_SET_WEEKDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterSetWeekdayScheduleResponseCallback(nullptr, status);
break;
}
case ZCL_SET_YEARDAY_SCHEDULE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterSetYeardayScheduleResponseCallback(nullptr, status);
break;
}
case ZCL_UNLOCK_DOOR_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterUnlockDoorResponseCallback(nullptr, status);
break;
}
case ZCL_UNLOCK_WITH_TIMEOUT_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfDoorLockClusterUnlockWithTimeoutResponseCallback(nullptr, status);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfGeneralCommissioningClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_ARM_FAIL_SAFE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t errorCode;
uint8_t * debugText;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfGeneralCommissioningClusterArmFailSafeResponseCallback(nullptr, errorCode, debugText);
break;
}
case ZCL_COMMISSIONING_COMPLETE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t errorCode;
uint8_t * debugText;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfGeneralCommissioningClusterCommissioningCompleteResponseCallback(nullptr, errorCode, debugText);
break;
}
case ZCL_SET_REGULATORY_CONFIG_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t errorCode;
uint8_t * debugText;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfGeneralCommissioningClusterSetRegulatoryConfigResponseCallback(nullptr, errorCode, debugText);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfGroupsClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_ADD_GROUP_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
uint16_t groupId;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfGroupsClusterAddGroupResponseCallback(nullptr, status, groupId);
break;
}
case ZCL_GET_GROUP_MEMBERSHIP_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t capacity;
uint8_t groupCount;
/* TYPE WARNING: array array defaults to */ uint8_t * groupList;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
capacity = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
groupCount = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
groupList = cmd->buffer + payloadOffset;
wasHandled = emberAfGroupsClusterGetGroupMembershipResponseCallback(nullptr, capacity, groupCount, groupList);
break;
}
case ZCL_REMOVE_GROUP_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
uint16_t groupId;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfGroupsClusterRemoveGroupResponseCallback(nullptr, status, groupId);
break;
}
case ZCL_VIEW_GROUP_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
uint16_t groupId;
uint8_t * groupName;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
groupName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfGroupsClusterViewGroupResponseCallback(nullptr, status, groupId, groupName);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfIdentifyClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_IDENTIFY_QUERY_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint16_t timeout;
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
timeout = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfIdentifyClusterIdentifyQueryResponseCallback(nullptr, timeout);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfKeypadInputClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_SEND_KEY_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfKeypadInputClusterSendKeyResponseCallback(nullptr, status);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfMediaPlaybackClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_MEDIA_FAST_FORWARD_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t mediaPlaybackStatus;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
mediaPlaybackStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfMediaPlaybackClusterMediaFastForwardResponseCallback(nullptr, mediaPlaybackStatus);
break;
}
case ZCL_MEDIA_NEXT_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t mediaPlaybackStatus;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
mediaPlaybackStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfMediaPlaybackClusterMediaNextResponseCallback(nullptr, mediaPlaybackStatus);
break;
}
case ZCL_MEDIA_PAUSE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t mediaPlaybackStatus;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
mediaPlaybackStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfMediaPlaybackClusterMediaPauseResponseCallback(nullptr, mediaPlaybackStatus);
break;
}
case ZCL_MEDIA_PLAY_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t mediaPlaybackStatus;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
mediaPlaybackStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfMediaPlaybackClusterMediaPlayResponseCallback(nullptr, mediaPlaybackStatus);
break;
}
case ZCL_MEDIA_PREVIOUS_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t mediaPlaybackStatus;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
mediaPlaybackStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfMediaPlaybackClusterMediaPreviousResponseCallback(nullptr, mediaPlaybackStatus);
break;
}
case ZCL_MEDIA_REWIND_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t mediaPlaybackStatus;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
mediaPlaybackStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfMediaPlaybackClusterMediaRewindResponseCallback(nullptr, mediaPlaybackStatus);
break;
}
case ZCL_MEDIA_SKIP_BACKWARD_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t mediaPlaybackStatus;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
mediaPlaybackStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfMediaPlaybackClusterMediaSkipBackwardResponseCallback(nullptr, mediaPlaybackStatus);
break;
}
case ZCL_MEDIA_SKIP_FORWARD_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t mediaPlaybackStatus;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
mediaPlaybackStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfMediaPlaybackClusterMediaSkipForwardResponseCallback(nullptr, mediaPlaybackStatus);
break;
}
case ZCL_MEDIA_SKIP_SEEK_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t mediaPlaybackStatus;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
mediaPlaybackStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfMediaPlaybackClusterMediaSkipSeekResponseCallback(nullptr, mediaPlaybackStatus);
break;
}
case ZCL_MEDIA_START_OVER_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t mediaPlaybackStatus;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
mediaPlaybackStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfMediaPlaybackClusterMediaStartOverResponseCallback(nullptr, mediaPlaybackStatus);
break;
}
case ZCL_MEDIA_STOP_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t mediaPlaybackStatus;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
mediaPlaybackStatus = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfMediaPlaybackClusterMediaStopResponseCallback(nullptr, mediaPlaybackStatus);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfNetworkCommissioningClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_ADD_THREAD_NETWORK_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t errorCode;
uint8_t * debugText;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfNetworkCommissioningClusterAddThreadNetworkResponseCallback(nullptr, errorCode, debugText);
break;
}
case ZCL_ADD_WI_FI_NETWORK_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t errorCode;
uint8_t * debugText;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfNetworkCommissioningClusterAddWiFiNetworkResponseCallback(nullptr, errorCode, debugText);
break;
}
case ZCL_DISABLE_NETWORK_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t errorCode;
uint8_t * debugText;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfNetworkCommissioningClusterDisableNetworkResponseCallback(nullptr, errorCode, debugText);
break;
}
case ZCL_ENABLE_NETWORK_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t errorCode;
uint8_t * debugText;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfNetworkCommissioningClusterEnableNetworkResponseCallback(nullptr, errorCode, debugText);
break;
}
case ZCL_REMOVE_NETWORK_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t errorCode;
uint8_t * debugText;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfNetworkCommissioningClusterRemoveNetworkResponseCallback(nullptr, errorCode, debugText);
break;
}
case ZCL_SCAN_NETWORKS_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t errorCode;
uint8_t * debugText;
/* TYPE WARNING: array array defaults to */ uint8_t * wifiScanResults;
/* TYPE WARNING: array array defaults to */ uint8_t * threadScanResults;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(debugText) + 1u);
wifiScanResults = cmd->buffer + payloadOffset;
threadScanResults = cmd->buffer + payloadOffset;
wasHandled = emberAfNetworkCommissioningClusterScanNetworksResponseCallback(nullptr, errorCode, debugText,
wifiScanResults, threadScanResults);
break;
}
case ZCL_UPDATE_THREAD_NETWORK_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t errorCode;
uint8_t * debugText;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfNetworkCommissioningClusterUpdateThreadNetworkResponseCallback(nullptr, errorCode, debugText);
break;
}
case ZCL_UPDATE_WI_FI_NETWORK_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t errorCode;
uint8_t * debugText;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
errorCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
debugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfNetworkCommissioningClusterUpdateWiFiNetworkResponseCallback(nullptr, errorCode, debugText);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfOperationalCredentialsClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_OP_CSR_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
chip::ByteSpan CSR;
chip::ByteSpan CSRNonce;
chip::ByteSpan VendorReserved1;
chip::ByteSpan VendorReserved2;
chip::ByteSpan VendorReserved3;
chip::ByteSpan Signature;
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
{
uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
CSR = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
}
payloadOffset = static_cast<uint16_t>(payloadOffset + CSR.size() + 1u);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
{
uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
CSRNonce = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
}
payloadOffset = static_cast<uint16_t>(payloadOffset + CSRNonce.size() + 1u);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
{
uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
VendorReserved1 = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
}
payloadOffset = static_cast<uint16_t>(payloadOffset + VendorReserved1.size() + 1u);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
{
uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
VendorReserved2 = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
}
payloadOffset = static_cast<uint16_t>(payloadOffset + VendorReserved2.size() + 1u);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
{
uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
VendorReserved3 = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
}
payloadOffset = static_cast<uint16_t>(payloadOffset + VendorReserved3.size() + 1u);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
{
uint8_t * rawData = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
Signature = chip::ByteSpan(rawData + 1u, emberAfStringLength(rawData));
}
wasHandled = emberAfOperationalCredentialsClusterOpCSRResponseCallback(nullptr, CSR, CSRNonce, VendorReserved1,
VendorReserved2, VendorReserved3, Signature);
break;
}
case ZCL_OP_CERT_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t StatusCode;
uint64_t FabricIndex;
uint8_t * DebugText;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
StatusCode = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 8)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
FabricIndex = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 8);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
DebugText = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfOperationalCredentialsClusterOpCertResponseCallback(nullptr, StatusCode, FabricIndex, DebugText);
break;
}
case ZCL_SET_FABRIC_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
chip::FabricId FabricId;
if (cmd->bufLen < payloadOffset + 8)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
FabricId = emberAfGetInt64u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfOperationalCredentialsClusterSetFabricResponseCallback(nullptr, FabricId);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfScenesClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_ADD_SCENE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
uint16_t groupId;
uint8_t sceneId;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfScenesClusterAddSceneResponseCallback(nullptr, status, groupId, sceneId);
break;
}
case ZCL_GET_SCENE_MEMBERSHIP_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
uint8_t capacity;
uint16_t groupId;
uint8_t sceneCount;
/* TYPE WARNING: array array defaults to */ uint8_t * sceneList;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
capacity = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (status == 0)
{
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
sceneCount = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
}
else
{
sceneCount = UINT8_MAX;
}
if (status == 0)
{
sceneList = cmd->buffer + payloadOffset;
}
else
{
sceneList = NULL;
}
wasHandled =
emberAfScenesClusterGetSceneMembershipResponseCallback(nullptr, status, capacity, groupId, sceneCount, sceneList);
break;
}
case ZCL_REMOVE_ALL_SCENES_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
uint16_t groupId;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfScenesClusterRemoveAllScenesResponseCallback(nullptr, status, groupId);
break;
}
case ZCL_REMOVE_SCENE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
uint16_t groupId;
uint8_t sceneId;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfScenesClusterRemoveSceneResponseCallback(nullptr, status, groupId, sceneId);
break;
}
case ZCL_STORE_SCENE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
uint16_t groupId;
uint8_t sceneId;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfScenesClusterStoreSceneResponseCallback(nullptr, status, groupId, sceneId);
break;
}
case ZCL_VIEW_SCENE_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
uint16_t groupId;
uint8_t sceneId;
uint16_t transitionTime;
uint8_t * sceneName;
/* TYPE WARNING: array array defaults to */ uint8_t * extensionFieldSets;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
groupId = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
sceneId = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (status == 0)
{
if (cmd->bufLen < payloadOffset + 2)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
transitionTime = emberAfGetInt16u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 2);
}
else
{
transitionTime = UINT16_MAX;
}
if (status == 0)
{
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
sceneName = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + emberAfStringLength(sceneName) + 1u);
}
else
{
sceneName = NULL;
}
if (status == 0)
{
extensionFieldSets = cmd->buffer + payloadOffset;
}
else
{
extensionFieldSets = NULL;
}
wasHandled = emberAfScenesClusterViewSceneResponseCallback(nullptr, status, groupId, sceneId, transitionTime, sceneName,
extensionFieldSets);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfTvChannelClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_CHANGE_CHANNEL_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
/* TYPE WARNING: array array defaults to */ uint8_t * ChannelMatch;
uint8_t ErrorType;
ChannelMatch = cmd->buffer + payloadOffset;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
ErrorType = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfTvChannelClusterChangeChannelResponseCallback(nullptr, ChannelMatch, ErrorType);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfTargetNavigatorClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_NAVIGATE_TARGET_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t status;
uint8_t * data;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
status = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
payloadOffset = static_cast<uint16_t>(payloadOffset + 1);
if (cmd->bufLen < payloadOffset + 1u)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
data = emberAfGetString(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfTargetNavigatorClusterNavigateTargetResponseCallback(nullptr, status, data);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}
EmberAfStatus emberAfTestClusterClusterClientCommandParse(EmberAfClusterCommand * cmd)
{
bool wasHandled = false;
if (!cmd->mfgSpecific)
{
switch (cmd->commandId)
{
case ZCL_TEST_SPECIFIC_RESPONSE_COMMAND_ID: {
uint16_t payloadOffset = cmd->payloadStartIndex;
uint8_t returnValue;
if (cmd->bufLen < payloadOffset + 1)
{
return EMBER_ZCL_STATUS_MALFORMED_COMMAND;
}
returnValue = emberAfGetInt8u(cmd->buffer, payloadOffset, cmd->bufLen);
wasHandled = emberAfTestClusterClusterTestSpecificResponseCallback(nullptr, returnValue);
break;
}
default: {
// Unrecognized command ID, error status will apply.
break;
}
}
}
return status(wasHandled, true, cmd->mfgSpecific);
}