SampleApp_ProcessEvent 事件處理函數(shù)
while ( MSGpkt )//while循環(huán),根據(jù)事件號來判斷發(fā)生了哪些事件并執(zhí)行相應的函數(shù)
{
switch ( MSGpkt->hdr.event )
{......
例如:
case AF_INCOMING_MSG_CMD:
SampleApp_MessageMSGCB( MSGpkt );
break;
/*******************
協(xié)調(diào)器接收到傳感器終端發(fā)送的信號朴肺,產(chǎn)生AF_INCOMING_MSG_CMD事件岩饼,協(xié)調(diào)器進入
SampleApp_MessageMSGCB( MSGpkt )函數(shù)
*********************/
void SampleApp_SendPeriodicMessage( void )(周期性發(fā)送函數(shù))
{
uint8 data[10]={'0','1','2','3','4','5','6','7','8','9'};//自定義數(shù)據(jù)
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_PERIODIC_CLUSTERID,//clusterId號,若有多個終端同時向協(xié)調(diào)器發(fā)送數(shù)據(jù)爷辱,可以設置不同的clusterId鳄乏,進行區(qū)分唠亚。
10,//字節(jié)數(shù)
data,//指針頭
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}
SAMPLEAPP_PERIODIC_CLUSTERID :clusterId號,若有多個終端同時向協(xié)調(diào)器發(fā)送數(shù)據(jù)牵现,可以設置不同的clusterId铐懊,進行區(qū)分。
10:發(fā)送的字節(jié)數(shù)
data//發(fā)送內(nèi)容的指針頭
也可以自己創(chuàng)建函數(shù)并定義clusterId(在sampleapp.h中定義):
for example,我們定義一個點播函數(shù)瞎疼,clusterId=SAMPLEAPP_POINT_TO_POINT_CLUSTERID_light
/****光敏傳感器終端向協(xié)調(diào)器點播通信函數(shù)**********/
void SampleApp_SendPointToPointMessage( void )
{
uint8 L;//光敏信號
/***************************/
//light
/***************************/
if(LIGHT==1)
{
L=1; //有光線
HalUARTWrite(0,"no light\n",9); //串口
HalLcdWriteString( "No Light", HAL_LCD_LINE_3 ); //LCD
}
else
{
L=0; //沒有光線
HalUARTWrite(0,"got Light\n",10); //串口
HalLcdWriteString( "Got Light", HAL_LCD_LINE_3 );//LCD
}
if ( AF_DataRequest( &Point_To_Point_DstAddr,
&SampleApp_epDesc,
SAMPLEAPP_POINT_TO_POINT_CLUSTERID_light,
1,
&L,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt (接收數(shù)據(jù)進行處理)
上文提到科乎,在SampleApp_ProcessEvent函數(shù)中,若接收到事件AF_INCOMING_MSG_CMD的產(chǎn)生丑慎,說明協(xié)調(diào)器接收到了終端發(fā)送的信號喜喂,并進入 函數(shù)SampleApp_MessageMSGCB( MSGpkt ),進行處理
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint16 flashTime;
switch ( pkt->clusterId )
{
case SAMPLEAPP_POINT_TO_POINT_CLUSTERID_light://接收到光敏傳感器數(shù)據(jù)
if(pkt->cmd.Data[0])//若第一位數(shù)據(jù)是1竿裂,即光強較弱
HalUARTWrite(0,"no light\n",9); //沒光線
else
HalUARTWrite(0,"got light\n",10); //有光線
break;
}
}
同樣玉吁,SAMPLEAPP_POINT_TO_POINT_CLUSTERID_light表明是光敏傳感器發(fā)送的數(shù)據(jù),pkt->cmd.Data[]存放從終端接收到的數(shù)據(jù)腻异,若從終端接收到了1进副,說明光照較弱,此時協(xié)調(diào)器向串口發(fā)送“no light”悔常;反之影斑,則發(fā)送“got light”