blob: 2c51a4d4c9bbe88318a6505519eeeac8ae05ba93 [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 <app/chip-zcl-zpro-codec.h>
#include <support/BufferWriter.h>
#include <support/SafeInt.h>
#include <support/logging/CHIPLogging.h>
#include <app/util/basic-types.h>
#include <lib/support/Span.h>
using namespace chip;
using namespace chip::System;
using namespace chip::Encoding::LittleEndian;
#define COMMAND_HEADER(name, clusterId) \
const char * kName = name; \
\
PacketBufferWriter buf(System::PacketBufferHandle::New(kMaxBufferSize)); \
if (buf.IsNull()) \
{ \
ChipLogError(Zcl, "Could not allocate packet buffer while trying to encode %s command", kName); \
return PacketBufferHandle(); \
} \
\
if (doEncodeApsFrame(buf, clusterId, kSourceEndpoint, destinationEndpoint, 0, 0, 0, 0, false)) \
{
#define COMMAND_FOOTER() \
} \
if (!buf.Fit()) \
{ \
ChipLogError(Zcl, "Command %s can't fit in the allocated buffer", kName); \
} \
return buf.Finalize();
/*----------------------------------------------------------------------------*\
| Cluster Name | ID |
|---------------------------------------------------------------------+--------|
| Basic | 0x0028 |
| EthernetNetworkDiagnostics | 0x0037 |
| GeneralCommissioning | 0x0030 |
| GeneralDiagnostics | 0x0033 |
| LevelControl | 0x0008 |
| NetworkCommissioning | 0x0031 |
| OnOff | 0x0006 |
| OperationalCredentials | 0x003E |
| PumpConfigurationAndControl | 0x0200 |
| SoftwareDiagnostics | 0x0034 |
| TemperatureMeasurement | 0x0402 |
| TemperatureMeasurement | 0x0402 |
| ThreadNetworkDiagnostics | 0x0035 |
| TrustedRootCertificates | 0x003F |
| WiFiNetworkDiagnostics | 0x0036 |
\*----------------------------------------------------------------------------*/
#define EMBER_ZCL_REPORTING_DIRECTION_REPORTED 0x00
#define ZCL_READ_ATTRIBUTES_COMMAND_ID (0x00)
#define ZCL_READ_ATTRIBUTES_RESPONSE_COMMAND_ID (0x01)
#define ZCL_WRITE_ATTRIBUTES_COMMAND_ID (0x02)
#define ZCL_WRITE_ATTRIBUTES_UNDIVIDED_COMMAND_ID (0x03)
#define ZCL_WRITE_ATTRIBUTES_RESPONSE_COMMAND_ID (0x04)
#define ZCL_WRITE_ATTRIBUTES_NO_RESPONSE_COMMAND_ID (0x05)
#define ZCL_CONFIGURE_REPORTING_COMMAND_ID (0x06)
#define ZCL_CONFIGURE_REPORTING_RESPONSE_COMMAND_ID (0x07)
#define ZCL_READ_REPORTING_CONFIGURATION_COMMAND_ID (0x08)
#define ZCL_READ_REPORTING_CONFIGURATION_RESPONSE_COMMAND_ID (0x09)
#define ZCL_REPORT_ATTRIBUTES_COMMAND_ID (0x0A)
#define ZCL_DEFAULT_RESPONSE_COMMAND_ID (0x0B)
#define ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID (0x0C)
#define ZCL_DISCOVER_ATTRIBUTES_RESPONSE_COMMAND_ID (0x0D)
#define ZCL_READ_ATTRIBUTES_STRUCTURED_COMMAND_ID (0x0E)
#define ZCL_WRITE_ATTRIBUTES_STRUCTURED_COMMAND_ID (0x0F)
#define ZCL_WRITE_ATTRIBUTES_STRUCTURED_RESPONSE_COMMAND_ID (0x10)
#define ZCL_DISCOVER_COMMANDS_RECEIVED_COMMAND_ID (0x11)
#define ZCL_DISCOVER_COMMANDS_RECEIVED_RESPONSE_COMMAND_ID (0x12)
#define ZCL_DISCOVER_COMMANDS_GENERATED_COMMAND_ID (0x13)
#define ZCL_DISCOVER_COMMANDS_GENERATED_RESPONSE_COMMAND_ID (0x14)
#define ZCL_DISCOVER_ATTRIBUTES_EXTENDED_COMMAND_ID (0x15)
#define ZCL_DISCOVER_ATTRIBUTES_EXTENDED_RESPONSE_COMMAND_ID (0x16)
#define LEVEL_CONTROL_CLUSTER_ID 0x0008
#define ZCL_MOVE_COMMAND_ID (0x01)
#define ZCL_MOVE_TO_LEVEL_COMMAND_ID (0x00)
#define ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID (0x04)
#define ZCL_MOVE_WITH_ON_OFF_COMMAND_ID (0x05)
#define ZCL_STEP_COMMAND_ID (0x02)
#define ZCL_STEP_WITH_ON_OFF_COMMAND_ID (0x06)
#define ZCL_STOP_COMMAND_ID (0x03)
#define ZCL_STOP_WITH_ON_OFF_COMMAND_ID (0x07)
#define ON_OFF_CLUSTER_ID 0x0006
#define ZCL_OFF_COMMAND_ID (0x00)
#define ZCL_ON_COMMAND_ID (0x01)
#define ZCL_TOGGLE_COMMAND_ID (0x02)
#define PUMP_CONFIG_CONTROL_CLUSTER_ID 0x0200
#define TEMP_MEASUREMENT_CLUSTER_ID 0x0402
// TODO: Find a way to calculate maximum message length for clusters
// https://github.com/project-chip/connectedhomeip/issues/965
constexpr uint16_t kMaxBufferSize = 1024;
// This is a global command, so the low bits are 0b00. The command is
// standard, so does not need a manufacturer code, and we're sending client
// to server, so all the remaining bits are 0.
constexpr uint8_t kFrameControlGlobalCommand = 0x00;
// Pick source endpoint as 1 for now
constexpr EndpointId kSourceEndpoint = 1;
/*----------------------------------------------------------------------------*\
| Cluster LevelControl | 0x0008 |
|------------------------------------------------------------------------------|
| Commands: | |
| * Move | 0x01 |
| * MoveToLevel | 0x00 |
| * MoveToLevelWithOnOff | 0x04 |
| * MoveWithOnOff | 0x05 |
| * Step | 0x02 |
| * StepWithOnOff | 0x06 |
| * Stop | 0x03 |
| * StopWithOnOff | 0x07 |
|------------------------------------------------------------------------------|
| Attributes: | |
| * CurrentLevel | 0x0000 |
| * ClusterRevision | 0xFFFD |
\*----------------------------------------------------------------------------*/
PacketBufferHandle encodeLevelControlClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("DiscoverLevelControlAttributes", LEVEL_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
COMMAND_FOOTER();
}
/*
* Attribute CurrentLevel
*/
PacketBufferHandle encodeLevelControlClusterReadCurrentLevelAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadLevelControlCurrentLevel", LEVEL_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
COMMAND_FOOTER();
}
PacketBufferHandle encodeLevelControlClusterConfigureCurrentLevelAttribute(uint8_t seqNum, EndpointId destinationEndpoint,
uint16_t minInterval, uint16_t maxInterval,
uint8_t change)
{
COMMAND_HEADER("ReportLevelControlCurrentLevel", LEVEL_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand)
.Put8(seqNum)
.Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
.Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
.Put16(0x0000)
.Put8(32)
.Put16(minInterval)
.Put16(maxInterval);
buf.Put8(static_cast<uint8_t>(change));
COMMAND_FOOTER();
}
/*
* Attribute ClusterRevision
*/
PacketBufferHandle encodeLevelControlClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadLevelControlClusterRevision", LEVEL_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
COMMAND_FOOTER();
}
/*----------------------------------------------------------------------------*\
| Cluster OnOff | 0x0006 |
|------------------------------------------------------------------------------|
| Commands: | |
| * Off | 0x00 |
| * On | 0x01 |
| * Toggle | 0x02 |
|------------------------------------------------------------------------------|
| Attributes: | |
| * OnOff | 0x0000 |
| * ClusterRevision | 0xFFFD |
\*----------------------------------------------------------------------------*/
PacketBufferHandle encodeOnOffClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("DiscoverOnOffAttributes", ON_OFF_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
COMMAND_FOOTER();
}
/*
* Attribute OnOff
*/
PacketBufferHandle encodeOnOffClusterReadOnOffAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadOnOffOnOff", ON_OFF_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
COMMAND_FOOTER();
}
/*
* Attribute ClusterRevision
*/
PacketBufferHandle encodeOnOffClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadOnOffClusterRevision", ON_OFF_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
COMMAND_FOOTER();
}
/*----------------------------------------------------------------------------*\
| Cluster PumpConfigurationAndControl | 0x0200 |
|------------------------------------------------------------------------------|
| Commands: | |
|------------------------------------------------------------------------------|
| Attributes: | |
| * MaxPressure | 0x0000 |
| * MaxSpeed | 0x0001 |
| * MaxFlow | 0x0002 |
| * EffectiveOperationMode | 0x0011 |
| * EffectiveControlMode | 0x0012 |
| * Capacity | 0x0013 |
| * OperationMode | 0x0020 |
| * ClusterRevision | 0xFFFD |
\*----------------------------------------------------------------------------*/
PacketBufferHandle encodePumpConfigurationAndControlClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("DiscoverPumpConfigurationAndControlAttributes", PUMP_CONFIG_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
COMMAND_FOOTER();
}
/*
* Attribute MaxPressure
*/
PacketBufferHandle encodePumpConfigurationAndControlClusterReadMaxPressureAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadPumpConfigurationAndControlMaxPressure", PUMP_CONFIG_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
COMMAND_FOOTER();
}
/*
* Attribute MaxSpeed
*/
PacketBufferHandle encodePumpConfigurationAndControlClusterReadMaxSpeedAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadPumpConfigurationAndControlMaxSpeed", PUMP_CONFIG_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
COMMAND_FOOTER();
}
/*
* Attribute MaxFlow
*/
PacketBufferHandle encodePumpConfigurationAndControlClusterReadMaxFlowAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadPumpConfigurationAndControlMaxFlow", PUMP_CONFIG_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
COMMAND_FOOTER();
}
/*
* Attribute EffectiveOperationMode
*/
PacketBufferHandle encodePumpConfigurationAndControlClusterReadEffectiveOperationModeAttribute(uint8_t seqNum,
EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadPumpConfigurationAndControlEffectiveOperationMode", PUMP_CONFIG_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0011);
COMMAND_FOOTER();
}
/*
* Attribute EffectiveControlMode
*/
PacketBufferHandle encodePumpConfigurationAndControlClusterReadEffectiveControlModeAttribute(uint8_t seqNum,
EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadPumpConfigurationAndControlEffectiveControlMode", PUMP_CONFIG_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0012);
COMMAND_FOOTER();
}
/*
* Attribute Capacity
*/
PacketBufferHandle encodePumpConfigurationAndControlClusterReadCapacityAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadPumpConfigurationAndControlCapacity", PUMP_CONFIG_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0013);
COMMAND_FOOTER();
}
PacketBufferHandle encodePumpConfigurationAndControlClusterConfigureCapacityAttribute(uint8_t seqNum,
EndpointId destinationEndpoint,
uint16_t minInterval, uint16_t maxInterval,
int16_t change)
{
COMMAND_HEADER("ReportPumpConfigurationAndControlCapacity", PUMP_CONFIG_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand)
.Put8(seqNum)
.Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
.Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
.Put16(0x0013)
.Put8(41)
.Put16(minInterval)
.Put16(maxInterval);
buf.Put16(static_cast<uint16_t>(change));
COMMAND_FOOTER();
}
/*
* Attribute OperationMode
*/
PacketBufferHandle encodePumpConfigurationAndControlClusterReadOperationModeAttribute(uint8_t seqNum,
EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadPumpConfigurationAndControlOperationMode", PUMP_CONFIG_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0020);
COMMAND_FOOTER();
}
PacketBufferHandle encodePumpConfigurationAndControlClusterWriteOperationModeAttribute(uint8_t seqNum,
EndpointId destinationEndpoint,
uint8_t operationMode)
{
COMMAND_HEADER("WritePumpConfigurationAndControlOperationMode", PUMP_CONFIG_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand)
.Put8(seqNum)
.Put8(ZCL_WRITE_ATTRIBUTES_COMMAND_ID)
.Put16(0x0020)
.Put8(48)
.Put8(static_cast<uint8_t>(operationMode));
COMMAND_FOOTER();
}
/*
* Attribute ClusterRevision
*/
PacketBufferHandle encodePumpConfigurationAndControlClusterReadClusterRevisionAttribute(uint8_t seqNum,
EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadPumpConfigurationAndControlClusterRevision", PUMP_CONFIG_CONTROL_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
COMMAND_FOOTER();
}
/*----------------------------------------------------------------------------*\
| Cluster TemperatureMeasurement | 0x0402 |
|------------------------------------------------------------------------------|
| Commands: | |
|------------------------------------------------------------------------------|
| Attributes: | |
| * MeasuredValue | 0x0000 |
| * MinMeasuredValue | 0x0001 |
| * MaxMeasuredValue | 0x0002 |
| * ClusterRevision | 0xFFFD |
\*----------------------------------------------------------------------------*/
PacketBufferHandle encodeTemperatureMeasurementClusterDiscoverAttributes(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("DiscoverTemperatureMeasurementAttributes", TEMP_MEASUREMENT_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_DISCOVER_ATTRIBUTES_COMMAND_ID).Put16(0x0000).Put8(0xFF);
COMMAND_FOOTER();
}
/*
* Attribute MeasuredValue
*/
PacketBufferHandle encodeTemperatureMeasurementClusterReadMeasuredValueAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadTemperatureMeasurementMeasuredValue", TEMP_MEASUREMENT_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0000);
COMMAND_FOOTER();
}
PacketBufferHandle encodeTemperatureMeasurementClusterConfigureMeasuredValueAttribute(uint8_t seqNum,
EndpointId destinationEndpoint,
uint16_t minInterval, uint16_t maxInterval,
int16_t change)
{
COMMAND_HEADER("ReportTemperatureMeasurementMeasuredValue", TEMP_MEASUREMENT_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand)
.Put8(seqNum)
.Put8(ZCL_CONFIGURE_REPORTING_COMMAND_ID)
.Put8(EMBER_ZCL_REPORTING_DIRECTION_REPORTED)
.Put16(0x0000)
.Put8(41)
.Put16(minInterval)
.Put16(maxInterval);
buf.Put16(static_cast<uint16_t>(change));
COMMAND_FOOTER();
}
/*
* Attribute MinMeasuredValue
*/
PacketBufferHandle encodeTemperatureMeasurementClusterReadMinMeasuredValueAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadTemperatureMeasurementMinMeasuredValue", TEMP_MEASUREMENT_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0001);
COMMAND_FOOTER();
}
/*
* Attribute MaxMeasuredValue
*/
PacketBufferHandle encodeTemperatureMeasurementClusterReadMaxMeasuredValueAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadTemperatureMeasurementMaxMeasuredValue", TEMP_MEASUREMENT_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0x0002);
COMMAND_FOOTER();
}
/*
* Attribute ClusterRevision
*/
PacketBufferHandle encodeTemperatureMeasurementClusterReadClusterRevisionAttribute(uint8_t seqNum, EndpointId destinationEndpoint)
{
COMMAND_HEADER("ReadTemperatureMeasurementClusterRevision", TEMP_MEASUREMENT_CLUSTER_ID);
buf.Put8(kFrameControlGlobalCommand).Put8(seqNum).Put8(ZCL_READ_ATTRIBUTES_COMMAND_ID).Put16(0xFFFD);
COMMAND_FOOTER();
}