您的位置:首页 > 其它

zigbee zcl规范及其协议栈实现1

2015-04-30 11:17 447 查看

zigbee zcl规范及其协议栈实现1

/article/6395786.html

refer to ZigBee_Cluster_Library_Public_download_version

1.zcl 分为几个不同的功能领域,

每个领域霸占一部分clusterid



比如通用领域有如下的clusterid









........

在协议栈的zcl.h中有对这些clusterid定义,对应上面的文档,但是不完整

// 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_KEY_ESTABLISHMENT 0x0800

// Closures Clusters
#define ZCL_CLUSTER_ID_CLOSURES_SHADE_CONFIG 0x0100

// 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_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_REGISTRATION 0x0704
#define ZCL_CLUSTER_ID_SE_SE_TUNNELING 0x0705
#define ZCL_CLUSTER_ID_SE_PRE_PAYMENT 0x0706

2.每个clusterid由一些属性集合和命令集合组成

比如

general领域的basic clusterid就有以下这么多的属性(分为了两部分,基本设备信息和设备配置信息)





general领域的basic clusterid还有1个命令



clusterid的属性和命令在协议栈的实现,比如general领域的basic clusterid,位于zcl_general.h

/********************************/
/*** Basic Cluster Attributes ***/
/********************************/
// Basic Device Information
#define ATTRID_BASIC_ZCL_VERSION 0x0000
#define ATTRID_BASIC_APPL_VERSION 0x0001
#define ATTRID_BASIC_STACK_VERSION 0x0002
#define ATTRID_BASIC_HW_VERSION 0x0003
#define ATTRID_BASIC_MANUFACTURER_NAME 0x0004
#define ATTRID_BASIC_MODEL_ID 0x0005
#define ATTRID_BASIC_DATE_CODE 0x0006
#define ATTRID_BASIC_POWER_SOURCE 0x0007
// Basic Device Settings
#define ATTRID_BASIC_LOCATION_DESC 0x0010
#define ATTRID_BASIC_PHYSICAL_ENV 0x0011
#define ATTRID_BASIC_DEVICE_ENABLED 0x0012
#define ATTRID_BASIC_ALARM_MASK 0x0013
...
/******************************/
/*** Basic Cluster Commands ***/
/******************************/
#define COMMAND_BASIC_RESET_FACT_DEFAULT 0x00
<span style="font-family:SimSun;">
</span>

各个领域的clusterid和属性分别位于

zcl_general.h-通用

zcl_closures.h-室内or 门禁?

zcl_hvac.h-空调

zcl_lighting.h-照明

zcl_ms.h-Measurements and Sensing

zcl_ss.h

zcl_pi.h

有了clusterid的属性的宏定义,还需对属性配置(赋值)

比如,zcl_samplelight.c中对clusterid ZCL_CLUSTER_ID_GEN_BASIC的各个属性进行的配置:

CONST zclAttrRec_t zclSampleLight_Attrs[SAMPLELIGHT_MAX_ATTRIBUTES] =
{
// *** General Basic Cluster Attributes ***
{
ZCL_CLUSTER_ID_GEN_BASIC, // Cluster IDs - defined in the foundation (ie. zcl.h)
{ // Attribute record
ATTRID_BASIC_HW_VERSION, // Attribute ID - Found in Cluster Library header (ie. zcl_general.h)
ZCL_DATATYPE_UINT8, // Data Type - found in zcl.h
ACCESS_CONTROL_READ, // Variable access control - found in zcl.h
(void *)&zclSampleLight_HWRevision // Pointer to attribute variable
}
},
{
ZCL_CLUSTER_ID_GEN_BASIC,
{ // Attribute record
ATTRID_BASIC_ZCL_VERSION,
ZCL_DATATYPE_UINT8,
ACCESS_CONTROL_READ,
(void *)&zclSampleLight_ZCLVersion
}
},
{
ZCL_CLUSTER_ID_GEN_BASIC,
{ // Attribute record
ATTRID_BASIC_MANUFACTURER_NAME,
ZCL_DATATYPE_CHAR_STR,
ACCESS_CONTROL_READ,
(void *)zclSampleLight_ManufacturerName
}
},
{
ZCL_CLUSTER_ID_GEN_BASIC,
{ // Attribute record
ATTRID_BASIC_MODEL_ID,
ZCL_DATATYPE_CHAR_STR,
ACCESS_CONTROL_READ,
(void *)zclSampleLight_ModelId
}
},
{
ZCL_CLUSTER_ID_GEN_BASIC,
{ // Attribute record
ATTRID_BASIC_DATE_CODE,
ZCL_DATATYPE_CHAR_STR,
ACCESS_CONTROL_READ,
(void *)zclSampleLight_DateCode
}
},
{
ZCL_CLUSTER_ID_GEN_BASIC,
{ // Attribute record
ATTRID_BASIC_POWER_SOURCE,
ZCL_DATATYPE_UINT8,
ACCESS_CONTROL_READ,
(void *)&zclSampleLight_PowerSource
}
},
{
ZCL_CLUSTER_ID_GEN_BASIC,
{ // Attribute record
ATTRID_BASIC_LOCATION_DESC,
ZCL_DATATYPE_CHAR_STR,
(ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
(void *)zclSampleLight_LocationDescription
}
},
{
ZCL_CLUSTER_ID_GEN_BASIC,
{ // Attribute record
ATTRID_BASIC_PHYSICAL_ENV,
ZCL_DATATYPE_UINT8,
(ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
(void *)&zclSampleLight_PhysicalEnvironment
}
},
{
ZCL_CLUSTER_ID_GEN_BASIC,
{ // Attribute record
ATTRID_BASIC_DEVICE_ENABLED,
ZCL_DATATYPE_BOOLEAN,
(ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
(void *)&zclSampleLight_DeviceEnable
}
},

// *** Identify Cluster Attribute ***
{
ZCL_CLUSTER_ID_GEN_IDENTIFY,
{ // Attribute record
ATTRID_IDENTIFY_TIME,
ZCL_DATATYPE_UINT16,
(ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
(void *)&zclSampleLight_IdentifyTime
}
},

// *** On/Off Cluster Attributes ***
{
ZCL_CLUSTER_ID_GEN_ON_OFF,
{ // Attribute record
ATTRID_ON_OFF,
ZCL_DATATYPE_UINT8,
ACCESS_CONTROL_READ,
(void *)&zclSampleLight_OnOff
}
},
}

3.除了clusterid的专有命令之外,还有部分通用命令,比如读取clusterid的某个属性,





在协议栈的实现,位于zcl.h

/*** 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: