1. endpoint
ZigBee项目的开发是以应用为基础的,一个应用就是一个endpoint,在一个节点上,可以运行240个用户应用程序,编号从1到240,编号为0的是ZDO,这是一个管理应用。编号为255的是广播地址,用于向这个节点的所有应用发送广播信息,如下图所示。所以,一个应用的地址除了节点的网络地址外,还要有endpoint编号,不同的endpoint之间可以发送信息和接收信息。
图:节点上的endpoint
2. Application Profiles
Application Profiles就是应用规范,两个节点要进行通信,必须有共同的Profiles,Profiles是两个节点或设备进行通信的共同语言。所以,只有遵守共同Profiles的两个设备才可以无障碍的通信。
3. Descriptors 描述符
描述符分为节点描述符和应用描述符,如下图所示。
节点描述符中有两项是必须要实现的
l 节点描述符:描述关于设备的基本信息
l 电源描述符:描述设备的供电情况
应用描述符是与应用有关的描述信息,它是以下三种之一。
l 简单描述符:包含endpoint基本信息,这个描述符必须要实现。
l 复杂描述符:它是一种可选的描述符。
l 用户描述符:它也是一种可选的描述符。
图 节点描述符
简单描述符包含以下信息:
1. endpoint地址
2. 实现的应用Profile
3. 设备ID和设备版本
4. 是否有对应的复杂和用户描述符
5. 输入簇和输出簇的列表
一个设备描述符在程序中的实现代码是:
const SimpleDescriptionFormat_t GenericApp_SimpleDesc =
{
GENERICAPP_ENDPOINT, // int Endpoint;
GENERICAPP_PROFID, // uint16 AppProfId[2];
GENERICAPP_DEVICEID, // uint16 AppDeviceId[2];
GENERICAPP_DEVICE_VERSION, // int AppDevVer:4;
GENERICAPP_FLAGS, // int AppFlags:4;
GENERICAPP_MAX_CLUSTERS, // byte AppNumInClusters;
(cId_t *)GenericApp_ClusterList, // byte *pAppInClusterList;
GENERICAPP_MAX_CLUSTERS, // byte AppNumInClusters;
(cId_t *)GenericApp_ClusterList // byte *pAppInClusterList;
};
这个简单描述符变量定义了一个endpoint的endpoint编号,AppProfId,AppDeviceId,AppDevVer以及输入簇和输出簇。
这些常量的定义在头文件中,具体值是:
#define GENERICAPP_ENDPOINT 10
#define GENERICAPP_PROFID 0x0F04
#define GENERICAPP_DEVICEID 0x0001
#define GENERICAPP_DEVICE_VERSION 0
需要注意的是在一个应用程序中,GENERICAPP_PROFID必须要一致,否则通信时会出现问题。
在实际的应用中,简单描述符是作为结构体endPointDesc_t的一个成员存在的。endPointDesc_t是用来描述endpoint的一个结构体。
typedef struct
{
byte endPoint;
byte *task_id; // Pointer to location of the Application task ID.
SimpleDescriptionFormat_t *simpleDesc;
afNetworkLatencyReq_t latencyReq;
} endPointDesc_t;
更多资讯,访问ZigBee技术网:www.wsnzigbee.com