您的位置:首页 > 移动开发

zigbee网蜂cc2530组播实验,基于SampleApp例程

2014-11-03 22:35 495 查看
1.在文件全局建立对象,定义传输编号:

afAddrType_t Group_DstAddr;//网蜂组播通信定义
aps_Group_t WEBEE_Group;//分组内容
#define WEBEE_GROUP_CLUSTERID  4 //组播传输编号

2.注册端点描述符 (TI demo程序自带)

在void SampleApp_Init( uint8 task_id );
SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;
SampleApp_epDesc.task_id = &SampleApp_TaskID;
SampleApp_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;
SampleApp_epDesc.latencyReq = noLatencyReqs;

3.通讯组定义,即对Group_DstAddr对象赋值

Group_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;
Group_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
Group_DstAddr.addr.shortAddr = WEBEE_GROUP;

4.定义通讯组地址、名称,将节点加入组,即对WEBEE_Group对象赋值

WEBEE_Group.ID = 0x0003;
osal_memcpy( WEBEE_Group.name, "Group 3", 7 );
aps_AddGroup( SAMPLEAPP_ENDPOINT, &WEBEE_Group );//将节点加入组
5.定义发送函数/*********************************************************************
* 组播通讯实验发送函数
* 传入参数:无
* 返回值:无
*/
void SampleApp_SendGroupMessage( void )
{
char data[] = "abcdefghi";
if( AF_DataRequest( &Group_DstAddr,
&SampleApp_epDesc,
WEBEE_GROUP_CLUSTERID,//<span style="color:#ff0000;">传输编号,发送和接收必须一致,否则无法响应事件</span>
10, //发送10个数据
(uint8 *)data,
&SampleApp_TransID,
AF_DISCV_ROUTE,//带路由功能
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}

}6.发送部分
让发送函数生效,定位到事件处理函数,uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events );

if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )//定期发送事件,demo已定义
{
// Send the periodic message
//SampleApp_SendPeriodicMessage();

//组播发送
<span style="color:#ff0000;"> SampleApp_SendGroupMessage();//将刚才定义的函数加入到这里</span>

// Setup to send message again in normal period (+ a little jitter)
osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) );

// return unprocessed events
return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);
}7.接收部分,定位到消息接收函数 void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt );
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint16 flashTime;

switch ( pkt->clusterId )//路由反射器
{
case <span style="color:#ff0000;">WEBEE_GROUP_CLUSTERID</span>://自己定义的传输编号,在头文件定义
HalUARTWrite(0, "I get data\n", 11); //提示收到数据
HalUARTWrite(0, (char *)(pkt->cmd.Data), pkt->cmd.DataLength);//将收到的数据通过串口发送到计算机,
HalUARTWrite(0, "\n", 1); // 回车换行
break;

case SAMPLEAPP_FLASH_CLUSTERID:
flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
break;
}
}8.将修改后的程序烧录到节点、路由器、协调器,必须要程序和板子对应,路由器对应RouterEB-Pro等等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息