1-8 扩展提高2 接受到的数据放在哪啦?

 接受到的数据放在哪啦?

从天线里接受到的数据后,ZigBee协议栈将收到的数据以及与该数据相关的信息(如:RSS值、链路质量、组号)。然后打包存储起来。打包时使用到的数据结构是afIncomingMSGPacket_t。

afIncomingMSGPacket_t结构如下:

//  Filename:       AF.h
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 RSSI值*/
  uint8 SecurityUse;        /* deprecated */
  uint32 timestamp;         /* receipt timestamp from MAC */
  afMSGCommandFormat_t cmd; /* Application Data 应用数据,该成员变量是关键,详细见下面*/
} afIncomingMSGPacket_t;

上面afIncomingMSGPacket_t结构中有个成员变量afMSGCommandFormat_t cmd;  该结构如下:

//AF.h
// Generalized MSG Command Format
typedef struct
{
  byte   TransSeqNumber;           //存储的是发送序列号
  uint16 DataLength;               // Number of bytes in TransData 传输数据的长度
  byte  *Data;                     //存储的接受数据缓冲区的指针。
} afMSGCommandFormat_t;


应用实例:

//消息处理函数    
UINT16 GenericApp_ProcessEvent(byte task_id,UINT16 events)
{
  afIncomingMSGPacket_t* MSGpkt;//MSGpkt用于指向接收消息结构体的指针
  if(events&SYS_EVENT_MSG)
  {
     MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);//osal_msg_receive()从消息队列上接收消息
   while(MSGpkt)
   {
     switch(MSGpkt->hdr.event)   //消息的头部中的event进行匹配
    {
    case AF_INCOMING_MSG_CMD:          //接受到新数据的消息的ID是AF_INCOMING_MSG_CMD,这个宏是在协议栈中定义好的值为0x1A
                                       //接受到的是无线数据包
      GenericApp_MessageMSGCB(MSGpkt);//功能是完成对接受数据的处理
      break;
    default:
      break;
    }
    osal_msg_deallocate((uint8 *)MSGpkt);//接收到的消息处理完后,释放消息所占的存储空间
     MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);
    //处理完一个消息后,再从消息队列里接受消息,然后对其进行相应处理,直到所有消息处理完
   }
   return (events ^ SYS_EVENT_MSG);
  }
    return 0;
}
注意上面的MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);//osal_msg_receive()从消息队列上接收消息

以及判断下选择GenericApp_MessageMSGCB(MSGpkt);//功能是完成对接受数据的处理,

void GenericApp_MessageMSGCB(afIncomingMSGPacket_t *pkt)
{
 unsigned char buffer[4]= "    "; 
 switch(pkt->clusterId)   //对消息中的簇中的命令ID进行匹配。
 {
 case GENERICAPP_CLUSTERID:
   osal_memcpy(buffer,pkt->cmd.Data,3);
   
   if((buffer[0]=='L')&&(buffer[1]=='E')&&(buffer[2]=='D'))
   {
       HalLedBlink(HAL_LED_2,0,50,500);    //LED2 闪烁 
   }
   else
   {
     HalLedSet(HAL_LED_2,HAL_LED_MODE_ON);//其他内容 LED2 亮    这几个函数在哪里定义了呢????
     
   }   
   break;
 }
}

注意,这里数据的传递都是通过传递指针的方式来实现。这样省时省电。

本文参考自:《ZigBee无线传感器网络设计与实现》      王小强等人编著化学工业出版社




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gdliweibing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值