ZStack-CC2530-2.5.1a开发(六)16位网络地址_广播实验
程序员文章站
2022-06-09 14:39:32
...
ZStack版本:ZStack-CC2530-2.5.1a
下载和调试器:SmartRF04EB
IDE开发软件:IAR Embedded Workbench IDE - 8051 10.20.1
开发平台:基于TI-CC2530的任意厂家的
一、实验简介
本实验在上个单播实验的基础上,仍然使用2个CC2530模块,一个模块作为协调器,一个模块作为终端设备。实验目的是实现终端设备和协调器的点对点无线通信,并且每隔5s,终端设备通过16位网络单播给协调器发送一个字符串信息"i am enddevice!\r\n",协调器收到该信息后,通过串口打印出该信息。协调器每隔5s,使用广播模式给终端设备发送一个字符串信息"i am coordination!\r\n",终端设备收到该信息,使用printf函数,在串口打印该信息。
二、协调器端的代码修改
将工程配置修改为协调器配置模式:
2.1 修改Coordination.c文件中的发送目的地址配置信息代码:
原代码如下:
GenericApp_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent;
GenericApp_DstAddr.endPoint = 0;
GenericApp_DstAddr.addr.shortAddr = 0;
修改为:
GenericApp_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;
GenericApp_DstAddr.endPoint = GENERICAPP_ENDPOINT;
GenericApp_DstAddr.addr.shortAddr = 0xFFFF;
第一个参数是地址模式使用广播模式。
第二个参数是目的地址的端点号。
第三个参数是目的地址网络地址,广播模式下,该地址为0xFFFF。
2.2 修改消息发送函数GenericApp_SendTheMessage:
原代码如下:
static void GenericApp_SendTheMessage( void )
{
char theMessageData[] = "Hello World";
if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,
GENERICAPP_CLUSTERID,
(byte)osal_strlen( theMessageData ) + 1,
(byte *)&theMessageData,
&GenericApp_TransID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
// Successfully requested to be sent.
}
else
{
// Error occurred in request to send.
}
}
修改后代码如下:
static void GenericApp_SendTheMessage( void )
{
char theMessageData[] = "i am coordination!\r\n";
if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,
GENERICAPP_CLUSTERID,
(byte)osal_strlen( theMessageData ) + 1,
(byte *)&theMessageData,
&GenericApp_TransID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
// Successfully requested to be sent.
HalUARTWrite(0,"uart0 send success!\r\n",strlen("uart0 send success!\r\n"));
}
else
{
// Error occurred in request to send.
HalUARTWrite(0,"uart0 send failer!\r\n",strlen("uart0 send failer!\r\n"));
}
}
三、终端设备代码的修改
将工程配置切换为终端设备模式:
修改EndDevice.c文件的消息处理函数:
原代码如下:
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
switch ( pkt->clusterId )
{
case GENERICAPP_CLUSTERID:
// "the" message
#if defined( LCD_SUPPORTED )
HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );
#elif defined( WIN32 )
WPRINTSTR( pkt->cmd.Data );
#endif
break;
}
}
修改后代码如下:
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
switch ( pkt->clusterId )
{
case GENERICAPP_CLUSTERID:
// "the" message
/*
#if defined( LCD_SUPPORTED )
HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );
#elif defined( WIN32 )
WPRINTSTR( pkt->cmd.Data );
#endif
*/
printf("%s\r\n",pkt->cmd.Data);
break;
}
}
四、编译下载测试:
实验成功!
上一篇: CC2530整理
下一篇: ZigBee串口发送字符串函数