SampleApp_ProcessEvent 事件处理函数
while ( MSGpkt )//while循环,根据事件号来判断发生了哪些事件并执行相应的函数
{
switch ( MSGpkt->hdr.event )
{......
例如:
case AF_INCOMING_MSG_CMD:
SampleApp_MessageMSGCB( MSGpkt );
break;
/*******************
协调器接收到传感器终端发送的信号,产生AF_INCOMING_MSG_CMD事件,协调器进入
SampleApp_MessageMSGCB( MSGpkt )函数
*********************/
void SampleApp_SendPeriodicMessage( void )(周期性发送函数)
{
uint8 data[10]={'0','1','2','3','4','5','6','7','8','9'};//自定义数据
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_PERIODIC_CLUSTERID,//clusterId号,若有多个终端同时向协调器发送数据,可以设置不同的clusterId,进行区分。
10,//字节数
data,//指针头
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}
SAMPLEAPP_PERIODIC_CLUSTERID :clusterId号,若有多个终端同时向协调器发送数据,可以设置不同的clusterId,进行区分。
10:发送的字节数
data//发送内容的指针头
也可以自己创建函数并定义clusterId(在sampleapp.h中定义):
for example,我们定义一个点播函数,clusterId=SAMPLEAPP_POINT_TO_POINT_CLUSTERID_light
/****光敏传感器终端向协调器点播通信函数**********/
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 (接收数据进行处理)
上文提到,在SampleApp_ProcessEvent函数中,若接收到事件AF_INCOMING_MSG_CMD的产生,说明协调器接收到了终端发送的信号,并进入 函数SampleApp_MessageMSGCB( MSGpkt ),进行处理
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint16 flashTime;
switch ( pkt->clusterId )
{
case SAMPLEAPP_POINT_TO_POINT_CLUSTERID_light://接收到光敏传感器数据
if(pkt->cmd.Data[0])//若第一位数据是1,即光强较弱
HalUARTWrite(0,"no light\n",9); //没光线
else
HalUARTWrite(0,"got light\n",10); //有光线
break;
}
}
同样,SAMPLEAPP_POINT_TO_POINT_CLUSTERID_light表明是光敏传感器发送的数据,pkt->cmd.Data[]存放从终端接收到的数据,若从终端接收到了1,说明光照较弱,此时协调器向串口发送“no light”;反之,则发送“got light”