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