登录站点

用户名

密码

我初学ZigBee的体会之二

已有 559 次阅读  2009-09-29 15:35   标签ZigBee  体会  初学 
在Router上添加的接收程序中,要把几个参数搞清楚:

           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处的接收程序添加完毕,
/**********************************************************/

上一篇: 3G入门理论知识详细介绍 下一篇: 我初学ZigBee的体会之三

分享 举报