Zigbee数据发送AF_DataRequest和数据接收afIncomingMSGPacket_t结构体

数据发送:

AF_DataRequest( 

afAddrType_t    *dstAddr,   //目的地址结构体变量(含端点

endPointDesc_t  *srcEP,     //设备端点描述符(源端点(?)描述)                    

unit16  cID,       //串ID  CLUSTERID (命令)          

unit16  len,         //有效数据长度               

unit8   *buf,        //数据

unit8   *transID,               

unit8   *options,               

unit8 radius,

)

unit8   *options, 发送选项,可以由下面一项,或几项相或得到

AF_ACK_REQUEST 0x10 要求APS应答,这是应用层的应答,只在直接发送(单播)时使用。

AF_DISCV_ROUTE 0x20 总要包含这个选项

AF_SKIP_ROUTING 0x80 设置这个选项将导致设备跳过路由而直接发送消息。终点设备将不向其父亲发送消息。在直接发送(单播)和广播消息时很好用。

uint8 radius 最大的跳数,用默认值AF_DEFAULT_RADIUS

设备端点描述符endPointDesc_t  *srcEP,   *srcEP,源端点什么意思?源端点就是发送数据的端点,目的端点就是接收数据的端点

 

节点 和 终端 不是一个意思吗?

一个节点,相当于你一个PC主机,每个都有一个地址,相当于有一个IP地址,而端点,相当于TCP/IP的端口号

 

例子:

AF_DataRequest( &SampleApp_Flash_DstAddr, 

&SampleApp_epDesc,

               SAMPLEAPP_FLASH_CLUSTERID,

               2,

               buffer,

               &SampleApp_TransID,

               AF_DISCV_ROUTE,

               AF_DEFAULT_RADIUS )

 

typedef struct

{

  union

  {

    uint16      shortAddr;  //16位网络地址

    ZLongAddr_t extAddr;   //64位IEEE地址

  } addr;

  afAddrMode_t addrMode; //发送模式   afAddrMode_t是一个枚举类型模式参数

  byte endPoint; //指定的端点号 端点241—254保留端点 范围 1-240

  uint16 panId;  // used for the INTER_PAN feature

afAddrType_t; //目的地址结构体变量(含端点)

 

例:afAddrType_t   SampleApp_Flash_DstAddr;

/* 设置闪烁命令的目的地址(发送给组1的所有成员)*/

  SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t) afAddrGroup;

  SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;

  SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;

 

typedef  enum

{

afAddrNotPresent  =  AddrNotPresent, //间接传送(Indirect) 

afAddr16Bit  =  Addr16Bit, //指定地址单点传送(Unicast)  16

afAddrGroup  =  AddrGroup, //组寻址(Group Addressing)

afAddrBroadcast  =  AddrBroadcast //广播传送(broadcast)

afAddrMode_t;//数据传送类型

 

设备端点描述符endPointDesc_t 和 afAddrType_t中都含有endPoint  是一样的吗?一样

typedef struct

{

  byte  endPoint;

  byte *task_id;   // Pointer to location of the Application task ID.

  SimpleDescriptionFormat_t *simpleDesc; //设备简单描述符

  afNetworkLatencyReq_t  latencyReq;

endPointDesc_t;//设备端点描述符

例:

endPointDesc_t SampleApp_epDesc;

/* 填充端点描述符 */

  SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;

  SampleApp_epDesc.task_id = &SampleApp_TaskID;

  SampleApp_epDesc.simpleDesc

            = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;

  SampleApp_epDesc.latencyReq = noLatencyReqs;

 

 

 

 

typedef struct

{

  byte EndPoint;   //EP ID (EP=End Point)

  uint16 AppProfId;   // profile ID(剖面ID

  uint16 AppDeviceId;   // Device ID

  byte AppDevVer:4;    //Device Version 0x00 为 Version 1.0

  byte Reserved:4;   // AF_V1_SUPPORT uses for AppFlags:4.

  byte AppNumInClusters;   //终端支持的输入簇的个数

  cId_t *pAppInClusterList;         //指向输入Cluster ID列表的指针

  byte AppNumOutClusters;     //输出簇的个数

  cId_t *pAppOutClusterList;  //指向输出Cluseter ID列表的指针

SimpleDescriptionFormat_t;

 

例子:

const SimpleDescriptionFormat_t SampleApp_SimpleDesc =

{

  SAMPLEAPP_ENDPOINT,              //  端点号

  SAMPLEAPP_PROFID,                 //  Profile ID

  SAMPLEAPP_DEVICEID,               //  设备ID

  SAMPLEAPP_DEVICE_VERSION,        //  设备版本

  SAMPLEAPP_FLAGS,                  //  标识

  SAMPLEAPP_MAX_CLUSTERS,         //  输入簇的数量

  (cId_t *)SampleApp_ClusterList,      //  输入簇列表

  SAMPLEAPP_MAX_CLUSTERS,          //  输出簇的数量

  (cId_t *)SampleApp_ClusterList    //  输出簇列表

};

 

afAddrType_t和zAddrType_t ((zZDO?)内容差不多 有什么区别?没区别

typedef struct

{

  union

  {

    uint16         shortAddr;

    ZLongAddr_t   extAddr;

  } addr;

  byte addrMode;

zAddrType_t;  //地址变量(长地址或者短地址)

 

typedef struct

{

  uint16 ID;                       // Unique to this table

  uint8  name[APS_GROUP_NAME_LEN]; // Human readable name of group

aps_Group_t;  //组结构体

 

 

 

 

数据接收:

typedef struct  

{

  osal_event_hdr_t  hdr;     /* OSAL Message header */

  uint16  groupId;           /* Message's group ID - 0 if not set */

  uint16  clusterId;         /* Message's cluster ID */

  afAddrType_t  srcAddr;     /* Source Address, if endpoint is STUBAPS_INTER_PAN_EP,

                               it's an InterPAN message */

  uint16  macDestAddr;       /* MAC header destination short address */

  uint8  endPoint;           /* destination endpoint */

  uint8  wasBroadcast;       /* TRUE if network destination was a broadcast address */

  uint8  LinkQuality;        /* The link quality of the received data frame */

  uint8  correlation;        /* The raw correlation value of the received data frame */

  int8   rssi;               /* The received RF power in units dBm */

  uint8  SecurityUse;        /* deprecated */

  uint32 timestamp;         /* receipt timestamp from MAC */

  afMSGCommandFormat_t  cmd; /* Application Data */

afIncomingMSGPacket_t;

//afIncomingMSGPacket_t  gtwRxFromNode;

 

// Generalized MSG Command Format

typedef struct  // afMSGCommandFormat_t;

{

  byte   TransSeqNumber;

  uint16 DataLength;               // Number of bytes in TransData

  byte  *Data;

afMSGCommandFormat_t;

 

typedef struct // osal_event_hdr_t;

{

  uint8  event;

  uint8  status;

osal_event_hdr_t;

 

 

typedef struct  

{

  osal_event_hdr_t hdr;

  byte endpoint;

  byte transID;

} afDataConfirm_t;

 

typedef struct 

{

  uint8   status;

  uint16  nwkAddr;   // Network address of interest

  uint8   cnt;

  uint8   epList[];

ZDO_ActiveEndpointRsp_t;

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值