转自:http://blog.sina.com.cn/s/blog_690878d501011cmp.html
原型:
afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,
uint16 cID, uint16 len, uint8 *buf, uint8 *transID,
uint8 options, uint8 radius )
参数说明:
*dstAddr :发送目的地址+端点地址(端点号)和传送模式
*srcEP :源(答复或确认)终端的描述(比如操作系统中任务ID等)源EP
cID :被Profile指定的有效的集群号
len :发送数据长度
*buf :发送数据缓冲区
*transID : 任务ID号
options :有效位掩码的发送选项
radius :传送跳数,通常设置为AF_DEFAULT_RADIUS
其中
1、afAddrType_t *dstAddr af地址类型
typedefstruct
{
union
{
uint16 shortAddr; //短地址
}addr;
afAddrMode_t addrMode; //传送模式
byte endPoint; //端点号
}afAddrType_t;
2、endPointDesc_t *srcEP
端点描述
typedefstruct
{
byteendPoint; //端点号
byte*task_id; //那一个任务的端点号(调用任务的ID)
SimpleDescriptionFormat_t *simpleDesc; //简单的端点描述
afNetworkLatencyReq_tlatencyReq;
}endPointDesc_t;
3、SimpleDescriptionFormat_t
简单描述格式
typedefstruct
{
byte EndPoint; //EP
uint16 AppProfId; //应用规范ID
uint16 AppDeviceId; //特定规范ID的设备类型
byte AppDevVer:4; //特定规范ID的设备的版本
byte Reserved:4; //AF_V1_SUPPORTusesforAppFlags:4.
byte AppNumInClusters; //输入簇ID的个数
cId_t *pAppInClusterList; //输入簇ID的列表
byte AppNumOutClusters; //输出簇ID的个数
cId_t *pAppOutClusterList; //输出簇ID的列表
}SimpleDescriptionFormat_t;
4、uint16 cID
ClusterID--具体应用串ID
5、uint8 options
发送模式选项有如下选项
#defineAF_FRAGMENTED 0x01
#defineAF_ACK_REQUEST 0x10
#defineAF_DISCV_ROUTE 0x20
#defineAF_EN_SECURITY 0x40
#defineAF_SKIP_ROUTING 0x80
其中AF_ACK_REQUEST为发送后需要接收方的确认
6、uint8 radius
传输跳数或传输半径,默认值为10
对于非广播消息,有两种基本的消息重试类型:端到端的确认(APS ACK)和单级确认(single hop acknowledgement)(MAC ACK)。MAC ACK默认情况下是一直打开的,通常能够充分保证网络的高可靠性。为了提供附加的可靠性,同时使发送设备能够得到数据包已经被发送到目的地的确认,可以使用APS ACK。
APS acknowledgement在APS层完成,是从目标设备到源设备的一个消息确认系统。源设备将保留这个消息知道目标设备发送一个APS ACK消息表明它已经收到了消息。对于每个发出的消息可以通过调用函数AF_DataRequest()的选项来使能/禁止来禁止这个功能。这个选项区域是一个位映射选项,对于将要发送的消息的选项区域或上(OR)AF_ACK_REQUEST就可以使能APS ACK。消息重试(如果APS ACK消息没有收到)的次数和重试之间的时间间隔的配置项在f8wConfig.cfg文件中。APSC_MAX_FRAME_RETRIES是APS层在放弃发送数据之前,没有收到APS ACK确认重新发送消息的次数。APSC_ACK_WAIT_DURATION_POLLED是重新发送之间的时间间隔。
APS ACK 数据确认命令在应用层event-loop函数中,通过AF_DATA_CONFIRM_CMD进行处理,原始AF层函数为afDataConfirm( uint8 endPoint, uint8 transID, ZStatus_t status )。