我们都知道每个 CC2530 芯片出厂时候都有一个全球唯一的 32 位 MAC 地址。
1、
SampleApp.c
#include "MT_UART.h" //串口头文件引用
SampApp_Init()
SampApp_TransID() = 0;
MT_UartInit();
3、uartConfig.flowControl = MT_UART_DEFAULT_OVERFLOW;
void SampleApp_Init( uint8 task_id )
MT_UartInit();
MT_UartRegisterTaskID(task_id);//登记任务号
至此,就可以使用 HalUARTWrite(0, "Hello,world\n", 12); //(串口, 字符, 字符个数) 发送数据了。afAddrType_t SampleApp_Flash_DstAddr;
afAddrType_t Point_To_Point_DstAddr;//点对点通信定义
Point_To_Point_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
Point_To_Point_DstAddr.addr.shortAddr = 0x0000; //发给协调器
{
uint8 data[10]={'0','1','2','3','4','5','6','7','8','9'};
if ( AF_DataRequest( &Point_To_Point_DstAddr,
&SampleApp_epDesc,
SAMPLEAPP_POINT_TO_POINT_CLUSTERID, //点播传输编号
10,
data,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
#define SAMPLEAPP_PERIODIC_CLUSTERID 1
#define SAMPLEAPP_FLASH_CLUSTERID 2
#define SAMPLEAPP_POINT_TO_POINT_CLUSTERID 3
// Send the periodic message
//SampleApp_SendPeriodicMessage();//周期性发送函数
SampleApp_SendPointToPointMessage();//此处替换成点播函数
case SAMPLEAPP_POINT_TO_POINT_CLUSTERID:
HalUARTWrite(0,"I get data\n",11);//用于提示有数据
HalUARTWrite(0, &pkt->cmd.Data[0],10); //打印收到数据
HalUARTWrite(0,"\n",1); //回车换行,便于观察
break;
uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
case ZDO_STATE_CHANGE:
SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
if ( //(SampleApp_NwkState == DEV_ZB_COORD)|| //协调器不给自己点播
(SampleApp_NwkState == DEV_ROUTER)
|| (SampleApp_NwkState == DEV_END_DEVICE) )
{
// Start sending the periodic message in a regular interval.
osal_start_timerEx( SampleApp_TaskID,
SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );
}
{
uint8 device; //设备类型变量
if ( SampleApp_NwkState == DEV_ROUTER)
device=0x01; //编号1表示路由器
else if (SampleApp_NwkState == DEV_END_DEVICE)
device=0x02; //编号2表示终端
else
device=0x03; //编号3表示出错
if ( AF_DataRequest( &Point_To_Point_DstAddr, //发送设备类型编号 点播
&SampleApp_epDesc,
SAMPLEAPP_POINT_TO_POINT_CLUSTERID,
1,
&device,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}
{
it's an InterPAN message */
} afIncomingMSGPacket_t;
{
union
{
uint16 shortAddr;
ZLongAddr_t extAddr;
} addr;
afAddrMode_t addrMode;
} afAddrType_t;
{
uint16 flashTime, temp;
//16进制转ASCII码表
uint8 asc_16[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
switch ( pkt->clusterId )
{
case SAMPLEAPP_POINT_TO_POINT_CLUSTERID:
temp=pkt->srcAddr.addr.shortAddr; //读出数据包的16位短地址
if( pkt->cmd.Data[0]==1 ) //路由器
HalUARTWrite(0,"ROUTER ShortAddr:0x",19); //提示接收到数据
if( pkt->cmd.Data[0]==2 ) //终端
HalUARTWrite(0,"ENDDEVICE ShortAddr:0x",22); //提示接收到数据
/****将短地址分解,ASC码打印*****/
HalUARTWrite(0,&asc_16[temp/4096],1);
HalUARTWrite(0,&asc_16[temp%4096/256],1);
HalUARTWrite(0,&asc_16[temp%256/16],1);
HalUARTWrite(0,&asc_16[temp%16],1);
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;
}
}
HalUARTWrite(0,"PAN ID:0x",9);
HalUARTWrite(0,&asc_16[panTemp/4096],1);
HalUARTWrite(0,&asc_16[panTemp%4096/256],1);
HalUARTWrite(0,&asc_16[panTemp%256/16],1);
HalUARTWrite(0,&asc_16[panTemp%16],1);
HalUARTWrite(0,"\n",1);