123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931 |
- /**************************************************************************************************
- Filename: zcl.h
- Revised: $Date: 2011-12-19 12:28:26 -0800 (Mon, 19 Dec 2011) $
- Revision: $Revision: 28712 $
- Description: This file contains the Zigbee Cluster Library Foundation definitions.
- Copyright 2006-2011 Texas Instruments Incorporated. All rights reserved.
- IMPORTANT: Your use of this Software is limited to those specific rights
- granted under the terms of a software license agreement between the user
- who downloaded the software, his/her employer (which must be your employer)
- and Texas Instruments Incorporated (the "License"). You may not use this
- Software unless you agree to abide by the terms of the License. The License
- limits your use, and you acknowledge, that the Software may not be modified,
- copied or distributed unless embedded on a Texas Instruments microcontroller
- or used solely and exclusively in conjunction with a Texas Instruments radio
- frequency transceiver, which is integrated into your product. Other than for
- the foregoing purpose, you may not use, reproduce, copy, prepare derivative
- works of, modify, distribute, perform, display or sell this Software and/or
- its documentation for any purpose.
- YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
- PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
- INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
- NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
- TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
- NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
- LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
- INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
- OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
- OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
- (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
- Should you have any questions regarding your right to use this Software,
- contact Texas Instruments Incorporated at www.TI.com.
- **************************************************************************************************/
- #ifndef ZCL_H
- #define ZCL_H
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- /*********************************************************************
- * INCLUDES
- */
- #include "AF.h"
- #include "aps_groups.h"
- /*********************************************************************
- * CONSTANTS
- */
- // General Clusters
- #define ZCL_CLUSTER_ID_GEN_BASIC 0x0000
- #define ZCL_CLUSTER_ID_GEN_POWER_CFG 0x0001
- #define ZCL_CLUSTER_ID_GEN_DEVICE_TEMP_CONFIG 0x0002
- #define ZCL_CLUSTER_ID_GEN_IDENTIFY 0x0003
- #define ZCL_CLUSTER_ID_GEN_GROUPS 0x0004
- #define ZCL_CLUSTER_ID_GEN_SCENES 0x0005
- #define ZCL_CLUSTER_ID_GEN_ON_OFF 0x0006
- #define ZCL_CLUSTER_ID_GEN_ON_OFF_SWITCH_CONFIG 0x0007
- #define ZCL_CLUSTER_ID_GEN_LEVEL_CONTROL 0x0008
- #define ZCL_CLUSTER_ID_GEN_ALARMS 0x0009
- #define ZCL_CLUSTER_ID_GEN_TIME 0x000A
- #define ZCL_CLUSTER_ID_GEN_LOCATION 0x000B
- #define ZCL_CLUSTER_ID_GEN_ANALOG_INPUT_BASIC 0x000C
- #define ZCL_CLUSTER_ID_GEN_ANALOG_OUTPUT_BASIC 0x000D
- #define ZCL_CLUSTER_ID_GEN_ANALOG_VALUE_BASIC 0x000E
- #define ZCL_CLUSTER_ID_GEN_BINARY_INPUT_BASIC 0x000F
- #define ZCL_CLUSTER_ID_GEN_BINARY_OUTPUT_BASIC 0x0010
- #define ZCL_CLUSTER_ID_GEN_BINARY_VALUE_BASIC 0x0011
- #define ZCL_CLUSTER_ID_GEN_MULTISTATE_INPUT_BASIC 0x0012
- #define ZCL_CLUSTER_ID_GEN_MULTISTATE_OUTPUT_BASIC 0x0013
- #define ZCL_CLUSTER_ID_GEN_MULTISTATE_VALUE_BASIC 0x0014
- #define ZCL_CLUSTER_ID_GEN_COMMISSIONING 0x0015
- #define ZCL_CLUSTER_ID_OTA 0x0019
- #define ZCL_CLUSTER_ID_GREEN_POWER_PROXY 0x001A
- // Closures Clusters
- #define ZCL_CLUSTER_ID_CLOSURES_SHADE_CONFIG 0x0100
- #define ZCL_CLUSTER_ID_CLOSURES_DOOR_LOCK 0x0101
- #define ZCL_CLUSTER_ID_CLOSURES_WINDOW_COVERING 0x0102
- // HVAC Clusters
- #define ZCL_CLUSTER_ID_HVAC_PUMP_CONFIG_CONTROL 0x0200
- #define ZCL_CLUSTER_ID_HAVC_THERMOSTAT 0x0201
- #define ZCL_CLUSTER_ID_HAVC_FAN_CONTROL 0x0202
- #define ZCL_CLUSTER_ID_HAVC_DIHUMIDIFICATION_CONTROL 0x0203
- #define ZCL_CLUSTER_ID_HAVC_USER_INTERFACE_CONFIG 0x0204
- // Lighting Clusters
- #define ZCL_CLUSTER_ID_LIGHTING_COLOR_CONTROL 0x0300
- #define ZCL_CLUSTER_ID_LIGHTING_BALLAST_CONFIG 0x0301
- // Measurement and Sensing Clusters
- #define ZCL_CLUSTER_ID_MS_ILLUMINANCE_MEASUREMENT 0x0400
- #define ZCL_CLUSTER_ID_MS_ILLUMINANCE_LEVEL_SENSING_CONFIG 0x0401
- #define ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT 0x0402
- #define ZCL_CLUSTER_ID_MS_PRESSURE_MEASUREMENT 0x0403
- #define ZCL_CLUSTER_ID_MS_FLOW_MEASUREMENT 0x0404
- #define ZCL_CLUSTER_ID_MS_RELATIVE_HUMIDITY 0x0405
- #define ZCL_CLUSTER_ID_MS_OCCUPANCY_SENSING 0x0406
- // Security and Safety (SS) Clusters
- #define ZCL_CLUSTER_ID_SS_IAS_ZONE 0x0500
- #define ZCL_CLUSTER_ID_SS_IAS_ACE 0x0501
- #define ZCL_CLUSTER_ID_SS_IAS_WD 0x0502
- // Protocol Interfaces
- #define ZCL_CLUSTER_ID_PI_GENERIC_TUNNEL 0x0600
- #define ZCL_CLUSTER_ID_PI_BACNET_PROTOCOL_TUNNEL 0x0601
- #define ZCL_CLUSTER_ID_PI_ANALOG_INPUT_BACNET_REG 0x0602
- #define ZCL_CLUSTER_ID_PI_ANALOG_INPUT_BACNET_EXT 0x0603
- #define ZCL_CLUSTER_ID_PI_ANALOG_OUTPUT_BACNET_REG 0x0604
- #define ZCL_CLUSTER_ID_PI_ANALOG_OUTPUT_BACNET_EXT 0x0605
- #define ZCL_CLUSTER_ID_PI_ANALOG_VALUE_BACNET_REG 0x0606
- #define ZCL_CLUSTER_ID_PI_ANALOG_VALUE_BACNET_EXT 0x0607
- #define ZCL_CLUSTER_ID_PI_BINARY_INPUT_BACNET_REG 0x0608
- #define ZCL_CLUSTER_ID_PI_BINARY_INPUT_BACNET_EXT 0x0609
- #define ZCL_CLUSTER_ID_PI_BINARY_OUTPUT_BACNET_REG 0x060A
- #define ZCL_CLUSTER_ID_PI_BINARY_OUTPUT_BACNET_EXT 0x060B
- #define ZCL_CLUSTER_ID_PI_BINARY_VALUE_BACNET_REG 0x060C
- #define ZCL_CLUSTER_ID_PI_BINARY_VALUE_BACNET_EXT 0x060D
- #define ZCL_CLUSTER_ID_PI_MULTISTATE_INPUT_BACNET_REG 0x060E
- #define ZCL_CLUSTER_ID_PI_MULTISTATE_INPUT_BACNET_EXT 0x060F
- #define ZCL_CLUSTER_ID_PI_MULTISTATE_OUTPUT_BACNET_REG 0x0610
- #define ZCL_CLUSTER_ID_PI_MULTISTATE_OUTPUT_BACNET_EXT 0x0611
- #define ZCL_CLUSTER_ID_PI_MULTISTATE_VALUE_BACNET_REG 0x0612
- #define ZCL_CLUSTER_ID_PI_MULTISTATE_VALUE_BACNET_EXT 0x0613
- #define ZCL_CLUSTER_ID_PI_11073_PROTOCOL_TUNNEL 0x0614
- // Advanced Metering Initiative (SE) Clusters
- #define ZCL_CLUSTER_ID_SE_PRICING 0x0700
- #define ZCL_CLUSTER_ID_SE_LOAD_CONTROL 0x0701
- #define ZCL_CLUSTER_ID_SE_SIMPLE_METERING 0x0702
- #define ZCL_CLUSTER_ID_SE_MESSAGE 0x0703
- #define ZCL_CLUSTER_ID_SE_SE_TUNNELING 0x0704
- #define ZCL_CLUSTER_ID_SE_PREPAYMENT 0x0705
- #ifdef SE_UK_EXT
- #define ZCL_CLUSTER_ID_SE_TOU_CALENDAR 0x0706
- #define ZCL_CLUSTER_ID_SE_DEVICE_MGMT 0x0707
- #endif // SE_UK_EXT
- #define ZCL_CLUSTER_ID_GEN_KEY_ESTABLISHMENT 0x0800
- // Smart Light cluster
- #define ZCL_CLUSTER_ID_SMART_LIGHT 0x1000
- /*** Frame Control bit mask ***/
- #define ZCL_FRAME_CONTROL_TYPE 0x03
- #define ZCL_FRAME_CONTROL_MANU_SPECIFIC 0x04
- #define ZCL_FRAME_CONTROL_DIRECTION 0x08
- #define ZCL_FRAME_CONTROL_DISABLE_DEFAULT_RSP 0x10
- /*** Frame Types ***/
- #define ZCL_FRAME_TYPE_PROFILE_CMD 0x00
- #define ZCL_FRAME_TYPE_SPECIFIC_CMD 0x01
- /*** Frame Client/Server Directions ***/
- #define ZCL_FRAME_CLIENT_SERVER_DIR 0x00
- #define ZCL_FRAME_SERVER_CLIENT_DIR 0x01
- /*** Chipcon Manufacturer Code ***/
- #define CC_MANUFACTURER_CODE 0x1001
- /*** Foundation Command IDs ***/
- #define ZCL_CMD_READ 0x00
- #define ZCL_CMD_READ_RSP 0x01
- #define ZCL_CMD_WRITE 0x02
- #define ZCL_CMD_WRITE_UNDIVIDED 0x03
- #define ZCL_CMD_WRITE_RSP 0x04
- #define ZCL_CMD_WRITE_NO_RSP 0x05
- #define ZCL_CMD_CONFIG_REPORT 0x06
- #define ZCL_CMD_CONFIG_REPORT_RSP 0x07
- #define ZCL_CMD_READ_REPORT_CFG 0x08
- #define ZCL_CMD_READ_REPORT_CFG_RSP 0x09
- #define ZCL_CMD_REPORT 0x0a
- #define ZCL_CMD_DEFAULT_RSP 0x0b
- #define ZCL_CMD_DISCOVER 0x0c
- #define ZCL_CMD_DISCOVER_RSP 0x0d
- #define ZCL_CMD_MAX ZCL_CMD_DISCOVER_RSP
- /*** Data Types ***/
- #define ZCL_DATATYPE_NO_DATA 0x00
- #define ZCL_DATATYPE_DATA8 0x08
- #define ZCL_DATATYPE_DATA16 0x09
- #define ZCL_DATATYPE_DATA24 0x0a
- #define ZCL_DATATYPE_DATA32 0x0b
- #define ZCL_DATATYPE_DATA40 0x0c
- #define ZCL_DATATYPE_DATA48 0x0d
- #define ZCL_DATATYPE_DATA56 0x0e
- #define ZCL_DATATYPE_DATA64 0x0f
- #define ZCL_DATATYPE_BOOLEAN 0x10
- #define ZCL_DATATYPE_BITMAP8 0x18
- #define ZCL_DATATYPE_BITMAP16 0x19
- #define ZCL_DATATYPE_BITMAP24 0x1a
- #define ZCL_DATATYPE_BITMAP32 0x1b
- #define ZCL_DATATYPE_BITMAP40 0x1c
- #define ZCL_DATATYPE_BITMAP48 0x1d
- #define ZCL_DATATYPE_BITMAP56 0x1e
- #define ZCL_DATATYPE_BITMAP64 0x1f
- #define ZCL_DATATYPE_UINT8 0x20
- #define ZCL_DATATYPE_UINT16 0x21
- #define ZCL_DATATYPE_UINT24 0x22
- #define ZCL_DATATYPE_UINT32 0x23
- #define ZCL_DATATYPE_UINT40 0x24
- #define ZCL_DATATYPE_UINT48 0x25
- #define ZCL_DATATYPE_UINT56 0x26
- #define ZCL_DATATYPE_UINT64 0x27
- #define ZCL_DATATYPE_INT8 0x28
- #define ZCL_DATATYPE_INT16 0x29
- #define ZCL_DATATYPE_INT24 0x2a
- #define ZCL_DATATYPE_INT32 0x2b
- #define ZCL_DATATYPE_INT40 0x2c
- #define ZCL_DATATYPE_INT48 0x2d
- #define ZCL_DATATYPE_INT56 0x2e
- #define ZCL_DATATYPE_INT64 0x2f
- #define ZCL_DATATYPE_ENUM8 0x30
- #define ZCL_DATATYPE_ENUM16 0x31
- #define ZCL_DATATYPE_SEMI_PREC 0x38
- #define ZCL_DATATYPE_SINGLE_PREC 0x39
- #define ZCL_DATATYPE_DOUBLE_PREC 0x3a
- #define ZCL_DATATYPE_OCTET_STR 0x41
- #define ZCL_DATATYPE_CHAR_STR 0x42
- #define ZCL_DATATYPE_LONG_OCTET_STR 0x43
- #define ZCL_DATATYPE_LONG_CHAR_STR 0x44
- #define ZCL_DATATYPE_ARRAY 0x48
- #define ZCL_DATATYPE_STRUCT 0x4c
- #define ZCL_DATATYPE_SET 0x50
- #define ZCL_DATATYPE_BAG 0x51
- #define ZCL_DATATYPE_TOD 0xe0
- #define ZCL_DATATYPE_DATE 0xe1
- #define ZCL_DATATYPE_UTC 0xe2
- #define ZCL_DATATYPE_CLUSTER_ID 0xe8
- #define ZCL_DATATYPE_ATTR_ID 0xe9
- #define ZCL_DATATYPE_BAC_OID 0xea
- #define ZCL_DATATYPE_IEEE_ADDR 0xf0
- #define ZCL_DATATYPE_128_BIT_SEC_KEY 0xf1
- #define ZCL_DATATYPE_UNKNOWN 0xff
- /*** Error Status Codes ***/
- #define ZCL_STATUS_SUCCESS 0x00
- #define ZCL_STATUS_FAILURE 0x01
- // 0x02-0x7D are reserved.
- #define ZCL_STATUS_NOT_AUTHORIZED 0x7E
- #define ZCL_STATUS_MALFORMED_COMMAND 0x80
- #define ZCL_STATUS_UNSUP_CLUSTER_COMMAND 0x81
- #define ZCL_STATUS_UNSUP_GENERAL_COMMAND 0x82
- #define ZCL_STATUS_UNSUP_MANU_CLUSTER_COMMAND 0x83
- #define ZCL_STATUS_UNSUP_MANU_GENERAL_COMMAND 0x84
- #define ZCL_STATUS_INVALID_FIELD 0x85
- #define ZCL_STATUS_UNSUPPORTED_ATTRIBUTE 0x86
- #define ZCL_STATUS_INVALID_VALUE 0x87
- #define ZCL_STATUS_READ_ONLY 0x88
- #define ZCL_STATUS_INSUFFICIENT_SPACE 0x89
- #define ZCL_STATUS_DUPLICATE_EXISTS 0x8a
- #define ZCL_STATUS_NOT_FOUND 0x8b
- #define ZCL_STATUS_UNREPORTABLE_ATTRIBUTE 0x8c
- #define ZCL_STATUS_INVALID_DATA_TYPE 0x8d
- #define ZCL_STATUS_INVALID_SELECTOR 0x8e
- #define ZCL_STATUS_WRITE_ONLY 0x8f
- #define ZCL_STATUS_INCONSISTENT_STARTUP_STATE 0x90
- #define ZCL_STATUS_DEFINED_OUT_OF_BAND 0x91
- #define ZCL_STATUS_INCONSISTENT 0x92
- #define ZCL_STATUS_ACTION_DENIED 0x93
- #define ZCL_STATUS_TIMEOUT 0x94
- #define ZCL_STATUS_ABORT 0x95
- #define ZCL_STATUS_INVALID_IMAGE 0x96
- #define ZCL_STATUS_WAIT_FOR_DATA 0x97
- #define ZCL_STATUS_NO_IMAGE_AVAILABLE 0x98
- #define ZCL_STATUS_REQUIRE_MORE_IMAGE 0x99
- // 0xbd-bf are reserved.
- #define ZCL_STATUS_HARDWARE_FAILURE 0xc0
- #define ZCL_STATUS_SOFTWARE_FAILURE 0xc1
- #define ZCL_STATUS_CALIBRATION_ERROR 0xc2
- // 0xc3-0xff are reserved.
- #define ZCL_STATUS_CMD_HAS_RSP 0xFF // Non-standard status (used for Default Rsp)
- /*** Attribute Access Control - bit masks ***/
- #define ACCESS_CONTROL_READ 0x01
- #define ACCESS_CONTROL_WRITE 0x02
- #define ACCESS_CONTROL_COMMAND 0x04
- #define ACCESS_CONTROL_AUTH_READ 0x10
- #define ACCESS_CONTROL_AUTH_WRITE 0x20
- #define ZCL_ATTR_ID_MAX 0xFFFF
- // Used by Configure Reporting Command
- #define ZCL_SEND_ATTR_REPORTS 0x00
- #define ZCL_EXPECT_ATTR_REPORTS 0x01
- // Predefined Maximum String Length
- #define MAX_UTF8_STRING_LEN 50
- // Used by zclReadWriteCB_t callback function
- #define ZCL_OPER_LEN 0x00 // Get length of attribute value to be read
- #define ZCL_OPER_READ 0x01 // Read attribute value
- #define ZCL_OPER_WRITE 0x02 // Write new attribute value
- /*********************************************************************
- * MACROS
- */
- #define zcl_ProfileCmd( a ) ( (a) == ZCL_FRAME_TYPE_PROFILE_CMD )
- #define zcl_ClusterCmd( a ) ( (a) == ZCL_FRAME_TYPE_SPECIFIC_CMD )
- #define zcl_ServerCmd( a ) ( (a) == ZCL_FRAME_CLIENT_SERVER_DIR )
- #define zcl_ClientCmd( a ) ( (a) == ZCL_FRAME_SERVER_CLIENT_DIR )
- #define UNICAST_MSG( msg ) ( (msg)->wasBroadcast == false && (msg)->groupId == 0 )
- // Padding needed if buffer has odd number of octects in length
- #define PADDING_NEEDED( bufLen ) ( (bufLen) % 2 )
- // Check for Cluster IDs
- #define ZCL_CLUSTER_ID_GEN( id ) ( /* (id) >= ZCL_CLUSTER_ID_GEN_BASIC &&*/ \
- (id) <= ZCL_CLUSTER_ID_GEN_COMMISSIONING )
- #define ZCL_CLUSTER_ID_CLOSURES( id ) ( (id) >= ZCL_CLUSTER_ID_CLOSURES_SHADE_CONFIG && \
- (id) <= ZCL_CLUSTER_ID_CLOSURES_WINDOW_COVERING )
- #define ZCL_CLUSTER_ID_HVAC( id ) ( (id) >= ZCL_CLUSTER_ID_HVAC_PUMP_CONFIG_CONTROL && \
- (id) <= ZCL_CLUSTER_ID_HAVC_USER_INTERFACE_CONFIG )
- #define ZCL_CLUSTER_ID_LIGHTING( id ) ( (id) >= ZCL_CLUSTER_ID_LIGHTING_COLOR_CONTROL && \
- (id) <= ZCL_CLUSTER_ID_LIGHTING_BALLAST_CONFIG )
- #define ZCL_CLUSTER_ID_MS( id ) ( (id) >= ZCL_CLUSTER_ID_MS_ILLUMINANCE_MEASUREMENT && \
- (id) <= ZCL_CLUSTER_ID_MS_OCCUPANCY_SENSING )
- #define ZCL_CLUSTER_ID_SS( id ) ( (id) >= ZCL_CLUSTER_ID_SS_IAS_ZONE && \
- (id) <= ZCL_CLUSTER_ID_SS_IAS_WD )
- #define ZCL_CLUSTER_ID_KEY( id ) ( (id) == ZCL_CLUSTER_ID_GEN_KEY_ESTABLISHMENT )
- #ifdef SE_UK_EXT
- #define ZCL_CLUSTER_ID_SE( id ) ( (id) >= ZCL_CLUSTER_ID_SE_PRICING && \
- (id) <= ZCL_CLUSTER_ID_SE_DEVICE_MGMT )
- #else
- #define ZCL_CLUSTER_ID_SE( id ) ( (id) >= ZCL_CLUSTER_ID_SE_PRICING && \
- (id) <= ZCL_CLUSTER_ID_SE_PREPAYMENT )
- #endif // SE_UK_EXT
- #define ZCL_CLUSTER_ID_PI( id ) ( (id) >= ZCL_CLUSTER_ID_PI_GENERIC_TUNNEL && \
- (id) <= ZCL_CLUSTER_ID_PI_11073_PROTOCOL_TUNNEL )
- #define ZCL_CLUSTER_ID_SL( id ) ( (id) == ZCL_CLUSTER_ID_SMART_LIGHT )
- /*********************************************************************
- * TYPEDEFS
- */
- // ZCL header - frame control field
- typedef struct
- {
- unsigned int type:2;
- unsigned int manuSpecific:1;
- unsigned int direction:1;
- unsigned int disableDefaultRsp:1;
- unsigned int reserved:3;
- } zclFrameControl_t;
- // ZCL header
- typedef struct
- {
- zclFrameControl_t fc;
- uint16 manuCode;
- uint8 transSeqNum;
- uint8 commandID;
- } zclFrameHdr_t;
- #ifdef ZCL_READ
- // Read Attribute Command format
- typedef struct
- {
- uint8 numAttr; // number of attributes in the list
- uint16 attrID[]; // supported attributes list - this structure should
- // be allocated with the appropriate number of attributes.
- } zclReadCmd_t;
- // Read Attribute Response Status record
- typedef struct
- {
- uint16 attrID; // attribute ID
- uint8 status; // should be ZCL_STATUS_SUCCESS or error
- uint8 dataType; // attribute data type
- uint8 *data; // this structure is allocated, so the data is HERE
- // - the size depends on the attribute data type
- } zclReadRspStatus_t;
- // Read Attribute Response Command format
- typedef struct
- {
- uint8 numAttr; // number of attributes in the list
- zclReadRspStatus_t attrList[]; // attribute status list
- } zclReadRspCmd_t;
- #endif // ZCL_READ
- // Write Attribute record
- typedef struct
- {
- uint16 attrID; // attribute ID
- uint8 dataType; // attribute data type
- uint8 *attrData; // this structure is allocated, so the data is HERE
- // - the size depends on the attribute data type
- } zclWriteRec_t;
- // Write Attribute Command format
- typedef struct
- {
- uint8 numAttr; // number of attribute records in the list
- zclWriteRec_t attrList[]; // attribute records
- } zclWriteCmd_t;
- // Write Attribute Status record
- typedef struct
- {
- uint8 status; // should be ZCL_STATUS_SUCCESS or error
- uint16 attrID; // attribute ID
- } zclWriteRspStatus_t;
- // Write Attribute Response Command format
- typedef struct
- {
- uint8 numAttr; // number of attribute status in the list
- zclWriteRspStatus_t attrList[]; // attribute status records
- } zclWriteRspCmd_t;
- // Configure Reporting Command format
- typedef struct
- {
- uint8 direction; // to send or receive reports of the attribute
- uint16 attrID; // attribute ID
- uint8 dataType; // attribute data type
- uint16 minReportInt; // minimum reporting interval
- uint16 maxReportInt; // maximum reporting interval
- uint16 timeoutPeriod; // timeout period
- uint8 *reportableChange; // reportable change (only applicable to analog data type)
- // - the size depends on the attribute data type
- } zclCfgReportRec_t;
- typedef struct
- {
- uint8 numAttr; // number of attribute IDs in the list
- zclCfgReportRec_t attrList[]; // attribute ID list
- } zclCfgReportCmd_t;
- // Attribute Status record
- typedef struct
- {
- uint8 status; // should be ZCL_STATUS_SUCCESS or error
- uint8 direction; // whether attributes are reported or reports of attributes are received
- uint16 attrID; // attribute ID
- } zclCfgReportStatus_t;
- // Configure Reporting Response Command format
- typedef struct
- {
- uint8 numAttr; // number of attribute status in the list
- zclCfgReportStatus_t attrList[]; // attribute status records
- } zclCfgReportRspCmd_t;
- // Read Reporting Configuration Command format
- typedef struct
- {
- uint8 direction; // to send or receive reports of the attribute
- uint16 attrID; // attribute ID
- } zclReadReportCfgRec_t;
- typedef struct
- {
- uint8 numAttr; // number of attributes in the list
- zclReadReportCfgRec_t attrList[]; // attribute ID list
- } zclReadReportCfgCmd_t;
- // Attribute Reporting Configuration record
- typedef struct
- {
- uint8 status; // status field
- uint8 direction; // to send or receive reports of the attribute
- uint16 attrID; // attribute ID
- uint8 dataType; // attribute data type
- uint16 minReportInt; // minimum reporting interval
- uint16 maxReportInt; // maximum reporting interval
- uint16 timeoutPeriod; // timeout period
- uint8 *reportableChange; // reportable change (only applicable to analog data type)
- // - the size depends on the attribute data type
- } zclReportCfgRspRec_t;
- // Read Reporting Configuration Response Command format
- typedef struct
- {
- uint8 numAttr; // number of records in the list
- zclReportCfgRspRec_t attrList[]; // attribute reporting configuration list
- } zclReadReportCfgRspCmd_t;
- // Attribute Report
- typedef struct
- {
- uint16 attrID; // atrribute ID
- uint8 dataType; // attribute data type
- uint8 *attrData; // this structure is allocated, so the data is HERE
- // - the size depends on the data type of attrID
- } zclReport_t;
- // Report Attributes Command format
- typedef struct
- {
- uint8 numAttr; // number of reports in the list
- zclReport_t attrList[]; // attribute report list
- } zclReportCmd_t;
- // Default Response Command format
- typedef struct
- {
- uint8 commandID;
- uint8 statusCode;
- } zclDefaultRspCmd_t;
- // Discover Attributes Command format
- typedef struct
- {
- uint16 startAttr; // specifies the minimum value of the identifier
- // to begin attribute discovery.
- uint8 maxAttrIDs; // maximum number of attribute IDs that are to be
- // returned in the resulting response command.
- } zclDiscoverCmd_t;
- // Attribute Report info
- typedef struct
- {
- uint16 attrID; // attribute ID
- uint8 dataType; // attribute data type (see Table 17 in Spec)
- } zclDiscoverInfo_t;
- // Discover Attributes Response Command format
- typedef struct
- {
- uint8 discComplete; // whether or not there're more attributes to be discovered
- uint8 numAttr; // number of attributes in the list
- zclDiscoverInfo_t attrList[]; // supported attributes list
- } zclDiscoverRspCmd_t;
- // String Data Type
- typedef struct
- {
- uint8 strLen;
- uint8 *pStr;
- } UTF8String_t;
- /*********************************************************************
- * Plugins
- */
- // Incoming ZCL message, this buffer will be allocated, cmd will point to the
- // the command record.
- typedef struct
- {
- afIncomingMSGPacket_t *msg; // incoming message
- zclFrameHdr_t hdr; // ZCL header parsed
- uint8 *pData; // pointer to data after header
- uint16 pDataLen; // length of remaining data
- void *attrCmd; // pointer to the parsed attribute or command
- } zclIncoming_t;
- // Outgoing ZCL Cluster Specific Commands
- typedef struct
- {
- zclFrameHdr_t hdr;
- uint16 realClusterID;
- uint16 attrID;
- void *cmdStruct;
- uint8 cmdLen;
- uint8 *cmdData;
- } zclOutgoingCmd_t;
- // Incoming ZCL message passed to the Application. This buffer will be
- // allocated and attrCmd will point to the command record.
- //
- // NOTE - the Application must deallocate the message plus attrCmd buffer.
- //
- typedef struct
- {
- osal_event_hdr_t hdr; // OSAL header
- zclFrameHdr_t zclHdr; // ZCL header parsed
- uint16 clusterId; // Cluster ID
- afAddrType_t srcAddr; // Sender's address
- uint8 endPoint; // destination endpoint
- void *attrCmd; // pointer to the parsed attribute or command; must be freed by Application
- } zclIncomingMsg_t;
- // Function pointer type to handle incoming messages.
- // msg - incoming message
- // logicalClusterID - logical cluster ID
- typedef ZStatus_t (*zclInHdlr_t)( zclIncoming_t *pInHdlrMsg );
- // Function pointer type to handle incoming write commands.
- // msg - incoming message
- // logicalClusterID - logical cluster ID
- // writeRec - received data to be written
- typedef ZStatus_t (*zclInWrtHdlr_t)( zclIncoming_t *msg, uint16 logicalClusterID, zclWriteRec_t *writeRec );
- // Attribute record
- typedef struct
- {
- uint16 attrId; // Attribute ID
- uint8 dataType; // Data Type - defined in AF.h
- uint8 accessControl; // Read/write - bit field
- void *dataPtr; // Pointer to data field
- } zclAttribute_t;
- typedef struct
- {
- uint16 clusterID; // Real cluster ID
- zclAttribute_t attr;
- } zclAttrRec_t;
- // Function pointer type to validate attribute data.
- //
- // pAttr - where data to be written
- // pAttrInfo - pointer to attribute info
- //
- // return TRUE if data valid. FALSE, otherwise.
- typedef uint8 (*zclValidateAttrData_t)( zclAttrRec_t *pAttr, zclWriteRec_t *pAttrInfo );
- // Function pointer type to read/write attribute data.
- //
- // clusterId - cluster that attribute belongs to
- // attrId - attribute to be read or written
- // oper - ZCL_OPER_LEN, ZCL_OPER_READ, or ZCL_OPER_WRITE
- // pValue - pointer to attribute (length) value
- // pLen - length of attribute value read
- //
- // return ZCL_STATUS_SUCCESS: Operation successful
- // ZCL Error Status: Operation not successful
- typedef ZStatus_t (*zclReadWriteCB_t)( uint16 clusterId, uint16 attrId, uint8 oper,
- uint8 *pValue, uint16 *pLen );
- // Callback function prototype to authorize a Read or Write operation
- // on a given attribute.
- //
- // srcAddr - source Address
- // pAttr - pointer to attribute
- // oper - ZCL_OPER_READ, or ZCL_OPER_WRITE
- //
- // return ZCL_STATUS_SUCCESS: Operation authorized
- // ZCL_STATUS_NOT_AUTHORIZED: Operation not authorized
- typedef ZStatus_t (*zclAuthorizeCB_t)( afAddrType_t *srcAddr, zclAttrRec_t *pAttr, uint8 oper );
- typedef struct
- {
- uint16 clusterID; // Real cluster ID
- uint8 option;
- } zclOptionRec_t;
- // Parse received command
- typedef struct
- {
- uint8 endpoint;
- uint16 dataLen;
- uint8 *pData;
- } zclParseCmd_t;
- /*********************************************************************
- * GLOBAL VARIABLES
- */
- extern uint8 zcl_TaskID;
- extern uint8 zcl_SeqNum;
- /*********************************************************************
- * FUNCTION MACROS
- */
- #ifdef ZCL_WRITE
- /*
- * Send a Write Command - ZCL_CMD_WRITE
- * Use like:
- * ZStatus_t zcl_SendWrite( uint8 srcEP, afAddrType_t *dstAddr, uint16 realClusterID, zclWriteCmd_t *writeCmd, uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- */
- #define zcl_SendWrite(a,b,c,d,e,f,g) (zcl_SendWriteRequest( (a), (b), (c), (d), ZCL_CMD_WRITE, (e), (f), (g) ))
- /*
- * Send a Write Undivided Command - ZCL_CMD_WRITE_UNDIVIDED
- * Use like:
- * ZStatus_t zcl_SendWriteUndivided( uint8 srcEP, afAddrType_t *dstAddr, uint16 realClusterID, zclWriteCmd_t *writeCmd, uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- */
- #define zcl_SendWriteUndivided(a,b,c,d,e,f,g) (zcl_SendWriteRequest( (a), (b), (c), (d), ZCL_CMD_WRITE_UNDIVIDED, (e), (f), (g) ))
- /*
- * Send a Write No Response Command - ZCL_CMD_WRITE_NO_RSP
- * Use like:
- * ZStatus_t zcl_SendWriteNoRsp( uint8 srcEP, afAddrType_t *dstAddr, uint16 realClusterID, zclWriteCmd_t *writeCmd, uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- */
- #define zcl_SendWriteNoRsp(a,b,c,d,e,f,g) (zcl_SendWriteRequest( (a), (b), (c), (d), ZCL_CMD_WRITE_NO_RSP, (e), (f), (g) ))
- #endif // ZCL_WRITE
- /*********************************************************************
- * FUNCTIONS
- */
- /*
- * Initialization for the task
- */
- extern void zcl_Init( byte task_id );
- /*
- * Event Process for the task
- */
- extern UINT16 zcl_event_loop( byte task_id, UINT16 events );
- /*
- * Function for Plugins' to register for incoming messages
- */
- extern ZStatus_t zcl_registerPlugin( uint16 startLogCluster, uint16 endLogCluster,
- zclInHdlr_t pfnIncomingHdlr );
- /*
- * Register Application's Attribute table
- */
- extern ZStatus_t zcl_registerAttrList( uint8 endpoint, uint8 numAttr, CONST zclAttrRec_t attrList[] );
- /*
- * Register Application's Cluster Option table
- */
- extern ZStatus_t zcl_registerClusterOptionList( uint8 endpoint, uint8 numOption, zclOptionRec_t optionList[] );
- /*
- * Register Application's attribute data validation callback routine
- */
- extern ZStatus_t zcl_registerValidateAttrData( zclValidateAttrData_t pfnValidateAttrData );
- /*
- * Register the application's callback function to read/write attribute data.
- */
- extern ZStatus_t zcl_registerReadWriteCB( uint8 endpoint, zclReadWriteCB_t pfnReadWriteCB,
- zclAuthorizeCB_t pfnAuthorizeCB );
- /*
- * Register the Application to receive the unprocessed Foundation command/response messages
- */
- extern uint8 zcl_registerForMsg( uint8 taskId );
- /*
- * Function for Sending a Command
- */
- extern ZStatus_t zcl_SendCommand( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 clusterID, uint8 cmd, uint8 specific, uint8 direction,
- uint8 disableDefaultRsp, uint16 manuCode, uint8 seqNum,
- uint16 cmdFormatLen, uint8 *cmdFormat );
- #ifdef ZCL_READ
- /*
- * Function for Reading an Attribute
- */
- extern ZStatus_t zcl_SendRead( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 realClusterID, zclReadCmd_t *readCmd,
- uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- /*
- * Function for sending a Read response command
- */
- extern ZStatus_t zcl_SendReadRsp( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 realClusterID, zclReadRspCmd_t *readRspCmd,
- uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- #endif // ZCL_READ
- #ifdef ZCL_WRITE
- /*
- * Function for Writing an Attribute
- */
- extern ZStatus_t zcl_SendWriteRequest( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 realClusterID, zclWriteCmd_t *writeCmd,
- uint8 cmd, uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- /*
- * Function for sending a Write response command
- */
- extern ZStatus_t zcl_SendWriteRsp( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 realClusterID, zclWriteRspCmd_t *writeRspCmd,
- uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- #endif // ZCL_WRITE
- #ifdef ZCL_REPORT
- /*
- * Function for Configuring the Reporting mechanism for one or more attributes
- */
- extern ZStatus_t zcl_SendConfigReportCmd( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 realClusterID, zclCfgReportCmd_t *cfgReportCmd,
- uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- /*
- * Function for sending a Configure Reporting Response Command
- */
- extern ZStatus_t zcl_SendConfigReportRspCmd( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 realClusterID, zclCfgReportRspCmd_t *cfgReportRspCmd,
- uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- /*
- * Function for Reading the configuration details of the Reporting mechanism
- */
- extern ZStatus_t zcl_SendReadReportCfgCmd( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 realClusterID, zclReadReportCfgCmd_t *readReportCfgCmd,
- uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- /*
- * Function for sending a Read Reporting Configuration Response command
- */
- extern ZStatus_t zcl_SendReadReportCfgRspCmd( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 realClusterID, zclReadReportCfgRspCmd_t *readReportCfgRspCmd,
- uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- /*
- * Function for Reporting the value of one or more attributes
- */
- extern ZStatus_t zcl_SendReportCmd( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 realClusterID, zclReportCmd_t *reportCmd,
- uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- #endif // ZCL_REPORT
- /*
- * Function for sending the Default Response command
- */
- extern ZStatus_t zcl_SendDefaultRspCmd( uint8 srcEP, afAddrType_t *dstAddr, uint16 realClusterID,
- zclDefaultRspCmd_t *defaultRspCmd, uint8 direction,
- uint8 disableDefaultRsp, uint16 manuCode, uint8 seqNum );
- #ifdef ZCL_DISCOVER
- /*
- * Function to Discover the ID and Types of the Attributes on a remote device
- */
- extern ZStatus_t zcl_SendDiscoverCmd( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 realClusterID, zclDiscoverCmd_t *discoverCmd,
- uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- /*
- * Function for sending the Discover Attributes Response command
- */
- extern ZStatus_t zcl_SendDiscoverRspCmd( uint8 srcEP, afAddrType_t *dstAddr,
- uint16 realClusterID, zclDiscoverRspCmd_t *discoverRspCmd,
- uint8 direction, uint8 disableDefaultRsp, uint8 seqNum );
- #endif // ZCL_DISCOVER
- #ifdef ZCL_READ
- /*
- * Function to parse the "Profile" Read Commands
- */
- extern void *zclParseInReadCmd( zclParseCmd_t *pCmd );
- #endif // ZCL_READ
- #ifdef ZCL_WRITE
- /*
- * Function to parse the "Profile" Write, Write Undivided and Write No Response
- * Commands
- */
- extern void *zclParseInWriteCmd( zclParseCmd_t *pCmd );
- #endif // ZCL_WRITE
- #ifdef ZCL_REPORT
- /*
- * Function to parse the "Profile" Configure Reporting Command
- */
- extern void *zclParseInConfigReportCmd( zclParseCmd_t *pCmd );
- /*
- * Function to parse the "Profile" Read Reporting Configuration Command
- */
- extern void *zclParseInReadReportCfgCmd( zclParseCmd_t *pCmd );
- /*
- * Function to parse the "Profile" Report attribute Command
- */
- extern void *zclParseInReportCmd( zclParseCmd_t *pCmd );
- /*
- * Function to check to see if Data Type is Analog
- */
- extern uint8 zclAnalogDataType( uint8 dataType );
- #endif // ZCL_REPORT
- #ifdef ZCL_DISCOVER
- /*
- * Function to parse the "Profile" Discover Commands
- */
- extern void *zclParseInDiscCmd( zclParseCmd_t *pCmd );
- #endif // ZCL_DISCOVER
- /*
- * Function to parse header of the ZCL format
- */
- extern uint8 *zclParseHdr( zclFrameHdr_t *hdr, uint8 *pData );
- /*
- * Function to find the attribute record that matchs the parameters
- */
- extern uint8 zclFindAttrRec( uint8 endpoint, uint16 realClusterID, uint16 attrId, zclAttrRec_t *pAttr );
- /*
- * Function to read the attribute's current value
- */
- extern uint8 zclReadAttrData( uint8 *pAttrData, zclAttrRec_t *pAttr, uint16 *pDataLen );
- /*
- * Function to return the length of the datatype in length.
- */
- extern uint8 zclGetDataTypeLength( uint8 dataType );
- /*
- * Function to serialize attribute data.
- */
- extern uint8 *zclSerializeData( uint8 dataType, void *attrData, uint8 *buf );
- /*
- * Function to return the length of the attribute.
- */
- extern uint16 zclGetAttrDataLength( uint8 dataType, uint8 *pData);
- /*
- * Call to get original unprocessed AF message (not parsed by ZCL).
- *
- * NOTE: This function can only be called during a ZCL callback function
- * and the calling function must NOT change any data in the message.
- *
- * returns a pointer to original AF message, NULL if not processing
- * AF message.
- */
- extern afIncomingMSGPacket_t *zcl_getRawAFMsg( void );
- /*********************************************************************
- *********************************************************************/
- #ifdef __cplusplus
- }
- #endif
- #endif /* ZCL_H */
|