准备开始分析代码的,突然发现还有一个重要的知识点没有讲,没办法还是得补齐,呵呵
消息提取函数
uint8 *osal_msg_receive( uint8 task_id ) //这个函数返回一个指向所需提取信息的指针属性(at tribute)
设备之间通信的每一种数据像开关的状态或温度计值等皆可称为属性。每个
属性可得到唯一的 ID,它们都用结构体来描述。
FS_Zstack\zcl .h
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;
描述符(Descriptor)
一个设备(device)可以有 240 个端点(endpoint 1~endpoint 240),每一个端点
必 须 有 一 个 端 点 描 述 符 endPointDesc, 端 点 描 述 符 里 包 括 一 个 简 单 描 述 符
SimpleDescript ionFormat,它们都用结构体来描述。
Typedef struct
{
Byte endPoint; //端点号 1-240
byte *task_id; //任务 ID号
SimpleDescriptionFormat_t *simpleDesc; //简单描述符
afNetworkLatencyReq_t latencyReq; //延时请求
} endPointDesc_t; //端点描述符
譬如:
FS_Zstack \sapi .c
对端点描述符进行初始化
sapi_epDesc.endPoint = zb_SimpleDesc.EndPoint;
sapi_epDesc.task_id = &sapi_TaskID;
sapi_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&zb_SimpleDesc;
sapi_epDesc.latencyReq = noLatencyReqs;
特别的,
FS_Zstack \ZDApp.c
端点 0 的端点描述符为:
endPointDesc_t ZDApp_epDesc =
{
ZDO_EP, //端点 0 ID, 0
&ZDAppTaskID,
(SimpleDescriptionFormat_t *)NULL, // No Simple description for ZDO
(afNetworkLatencyReq_t)0 // No Network Latency req
};
typedef struct
{
byte EndPoint; //端点号 1-240
uint16 AppProfId; //支持的Profile ID
uint16 AppDeviceId; //支持的设备 ID
byte AppDevVer:4; //执行的设备描述的版本
byte Reserved:4; //保留
byte AppNumInClusters; //终端支持的输入簇数目
cId_t *pAppInClusterList; //指向输入Cluster ID 列表的指针
byte AppNumOutClusters; //终端支持的输出簇数目
cId_t *pAppOutClusterList; //指向输出Cluster ID 列表的指针
} SimpleDescriptionFormat_t; //简单描述符
1)开关设备(switch)简单描述符:
FS_Zstack\SimpleSwi tch.c
const SimpleDescriptionFormat_t zb_SimpleDesc =
{
MY_ENDPOINT_ID, // Endpoint, 0x02
MY_PROFILE_ID, // Profile ID, 0x0F10
DEV_ID_SWITCH, // Device ID, 1
DEVICE_VERSION_SWITCH, // Device Version, 1
0, // Reserved
NUM_IN_CMD_SWITCH, // Number of Input C
(cId_t *) NULL, // Input Command List
NUM_OUT_CMD_SWITCH, // Number of Output Commands, 1
(cId_t *) zb_OutCmdList // Output Command List
};
2)控制器设备(Control ler)简单描述符:
FS_Zstack \SimpleControl ler.c
const SimpleDescriptionFormat_t zb_SimpleDesc =
{
MY_ENDPOINT_ID, // Endpoint, 0x02
MY_PROFILE_ID, // Profile ID, 0x0F10
DEV_ID_CONTROLLER, // Device ID, 2
DEVICE_VERSION_CONTROLLER, // Device Version, 1
0, // Reserved
NUM_IN_CMD_CONTROLLER, // Number of Input Commands, 1
(cId_t *) zb_InCmdList, // Input Command List,
NUM_OUT_CMD_CONTROLLER, // Number of Output Commands, 0
(cId_t *) NULL // Output Command List,
};