ZigBee学习二 LED点对点通信
终端上电后,自动连接协调器进行组网,成功后,开始发送LED字符数据。当协调器接收到数据后,终端和协调器的LED1都开始闪烁。
工程搭建和文件添加 步骤这里就省了。。。直接修改代码。。。
1)修改coordinator.c文件
因为协调器是接收终端的信息并进行相应的处理,所有只修改消息处理函数就行了
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
unsigned char buffer[4]="";
switch ( pkt->clusterId )
{
case GENERICAPP_CLUSTERID:
osal_memcpy(buffer,pkt->cmd.Data,3);
if((buffer[0]==‘L‘))
{
HalLedBlink(HAL_LED_1,0,50,500);
}else{
HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);
}
break;
}
}
2)修改enddevice.c文件
uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )
{ ... ...
while ( MSGpkt )
{
switch ( MSGpkt->hdr.event )
{
case ZDO_CB_MSG: ... ...
break;
case KEY_CHANGE: ... ...
break;
case AF_DATA_CONFIRM_CMD: ... ...
break;
case AF_INCOMING_MSG_CMD: ... ...
break;
case ZDO_STATE_CHANGE:
GenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
if ( (GenericApp_NwkState == DEV_ZB_COORD)
|| (GenericApp_NwkState == DEV_ROUTER)
|| (GenericApp_NwkState == DEV_END_DEVICE) )
{
GenericApp_SendTheMessage();
}
break;
default:
break;
}
... ...
}
}
static void GenericApp_SendTheMessage( void )
{
char theMessageData[] = "LED";
afAddrType_t my_DstAddr;
my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
my_DstAddr.endPoint = GENERICAPP_ENDPOINT;
my_DstAddr.addr.shortAddr = 0x0000;
if ( AF_DataRequest( &my_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.
HalLedBlink(HAL_LED_1,0,50,500);
}else
{
// Error occurred in request to send.
}
}
原文:http://www.cnblogs.com/liushao/p/6351574.html