u16AddrSrc: (源设备的网络地址),在此处是指Coordinator,
u8SrcEP源设备端口号),在此处是指Coordinator,
u8DstEP目标设备端口号),在此处是指Router,
u8ClusterID:遵守原演示程序的规定,
我添加的程序如下:
这是解释部分:
PUBLIC uint8 JZA_bAfMsgObject(
APS_Addrmode_e eAddrMode,
uint16 u16AddrSrc,
uint8 u8SrcEP,
uint8 u8LQI,
uint8 u8DstEP,
uint8 u8ClusterID,
uint8 *pu8ClusterIDRsp,
AF_Transation_s *puTransactionInd,
AF_Transation_s *puTransationRsp);
Deion:
This receives an incoming MSG .
Parameters:
1.
eAddrMode Address mode, one of:
APS_ADDRMODE_NOT_PRESENT - Indirect transmission,
APS_ADDRMODE_SHORT - Direct transmission,
接收函数中判断这个参数 !!!
2.u16AddrSrc:
Network (short) address of source device,
source是指:来源于,起自于. 这里是指Coordinator !!!
源器件的网络地址,Coodinator的地址一般是0000,
接收函数中并不判断这个参数 !!!
但栈函数隐晗着自动判断“目标器件”的16位网络短地址,
如果目标器件的16位网络短地址不对,它是不会接收数据的,
这个我已经做了验证,
3. 是源设备的端口号:
u8SrcEP: Source endpoint number (in range 1 to 240),
本程序中定义为: WSN_DATA_SINK_ENDPOINT 0x40, *******
我认为是指Coordinator吧 !!!!!
该数据包来自于Coordinator,
4.u8LQI: Link Quality Index (LQI) for received ,
这大概也是由栈函数自动处理的,
5. 目标设备的端口号:
u8DstEP: Destination endpoint number (in range 1 to 240),
本程序中定义为: WSN_DATA_SOURCE_ENDPOINT 0x41,
我认为是指Router吧 !!!!! 就是说这个包是发给本路由器的吗 ?
接收函数中判断这个参数 !!!
6.u8ClusterID:
Requested Cluster ID on the destination endpoint,
本程序中定义为: WSN_CID_SENSOR_READINGS 0x12, 它俩是一伙的,
Cluster, 通常我们翻译成“簇”。它定义了endpoint和endpoint
之间的数据交换格式 !!! Cluster包含一系列有着逻辑含义的属性。
通常profile都会定义自己的一系列cluster。每一个endpoint
上都会定义自己发送和接收的cluster.
这个值在Ccoordinate与router两边是一样的。
接收函数中判断这个参数 !!!
7.*pu8ClusterIDRsp:
Pointer to response Cluster ID,
这大概也是由栈函数自动处理的,
8.*puTransactionInd:
Pointer to specified transaction structure,
9.*puTransationRsp:
Pointer to response transaction structure,
这大概也是由栈函数自动处理的,
*/
这是我添加的程序:
// 这段是指收到了Coordinator送来的无线信号,
// 这段是我加的,原来的例子程序中是空的,没有接收功能,2007.10.23,
PUBLIC bool_t JZA_bAfMsgObject(APS_Addrmode_e eAddrMode,
uint16 u16AddrSrc,
uint8 u8SrcEP,
uint8 u8LQI,
uint8 u8DstEP,
uint8 u8ClusterID,
uint8 *pu8ClusterIDRsp,
AF_Transaction_s *puTransactionInd,
AF_Transaction_s *puTransactionRsp)
{
/* check command is valid and for correct endpoint,
此处的判断和Coordinator上的判断应该一样吗 ? ? */
if ((eAddrMode == APS_ADDRMODE_SHORT) && (u8DstEP == WSN_DATA_SOURCE_ENDPOINT))
{
if(u8ClusterID == WSN_CID_SENSOR_READINGS)
// 接收上来的是这个参数:WSN_CID_SENSOR_READINGS,而u8ClusterID是Router
// 上的固有数据,它两相等,说明是一伙的,可以解析pau8AfduInd携带的数据内容,
{
//解析pau8AfduInd携带的数据内容: 接收主机送来的内容,
// 把au8TransactionData的内容赋给data[x],
// 2007.11.21增加:
// 这是打算把呼叫码5个字节统一接收,以改善呼叫质量,在11.22日上午经过试验,
// 呼叫质量确实大有提高,
data0 = puTransactionInd->u.sMsg.au8TransactionData[0];
data1 = puTransactionInd->u.sMsg.au8TransactionData[1];
data2 = puTransactionInd->u.sMsg.au8TransactionData[2];
data3 = puTransactionInd->u.sMsg.au8TransactionData[3];
data4 = puTransactionInd->u.sMsg.au8TransactionData[4];
// 收到主机的无线数据后,就从串口送出给下位仪表,
// 在11.22日上午经过试验,呼叫质量确实大有提高,
if(data0 == 0x55)
{
register0 = 0; // 是新的召唤,
register1 = 0;
SendUART0_5();
}
else if (register1 == 0)
{
register1++;
savedata = data0; // 保存命令的内容,
SendUART0_1();
}
else
SendUART0_1();
}
}
return 0;
}
Router处的接收程序添加完毕,
/**********************************************************/
发表评论 评论 (0 个评论)