ZStack-CC2530-2.5.1a开发(六)16位网络地址_广播实验

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;
  }
}

四、编译下载测试:
ZStack-CC2530-2.5.1a开发(六)16位网络地址_广播实验_第1张图片
ZStack-CC2530-2.5.1a开发(六)16位网络地址_广播实验_第2张图片
实验成功!

你可能感兴趣的:(Zigbee)