原型:
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 )。
加载中,请稍候......