{
SAMPLEAPP_PERIODIC_CLUSTERID, SAMPLEAPP_FLASH_CLUSTERID };
endPointDesc_t SampleApp_epDesc; uint8 SampleApp_TaskID; devStates_t SampleApp_NwkState;
uint8 SampleApp_TransID; // This is the unique message ID (counter) afAddrType_t SampleApp_Flash_DstAddr; //组播 aps_Group_t SampleApp_Group; uint8 SampleAppPeriodicCounter = 0; uint8 SampleAppFlashCounter = 0;
void SampleApp_HandleKeys( uint8 shift, uint8 keys );
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pckt ); void SampleApp_SendPeriodicMessage( void ); void SampleApp_SendFlashMessage( uint16 flashTime ); void SampleApp_Send_P2P_Message(void); void SampleApp_Init( uint8 task_id ) {
SampleApp_TaskID = task_id; SampleApp_NwkState = DEV_INIT; SampleApp_TransID = 0;
MT_UartInit(); //串口初始化 MT_UartRegisterTaskID(task_id); //注册串口任务 P0SEL &= 0x7f; //P0_7配置成通用io if defined ( BUILD_ALL_DEVICES ) if ( readCoordinatorJumper() )
zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR; else
zgDeviceLogicalType = ZG_DEVICETYPE_ROUTER;
31
SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup; SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP; //发给协调器 SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_epDesc.task_id = &SampleApp_TaskID; SampleApp_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc; SampleApp_epDesc.latencyReq = noLatencyReqs; afRegister( &SampleApp_epDesc ); RegisterForKeys( SampleApp_TaskID ); SampleApp_Group.ID = 0x0001;
osal_memcpy( SampleApp_Group.name, \
aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group ); }
uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ) {
afIncomingMSGPacket_t *MSGpkt;
(void)task_id; // Intentionally unreferenced parameter
if ( events & SYS_EVENT_MSG ) {
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); while ( MSGpkt ) {
switch ( MSGpkt->hdr.event ) {
case KEY_CHANGE: SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, *)MSGpkt)->keys ); break;
case AF_INCOMING_MSG_CMD:
32
((keyChange_t
SampleApp_MessageMSGCB( MSGpkt ); break;
osal_msg_deallocate( (uint8 *)MSGpkt );
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID ); }
return (events ^ SYS_EVENT_MSG); }
if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT ) {
SampleApp_Send_P2P_Message();
return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT); } return 0; }
void SampleApp_HandleKeys( uint8 shift, uint8 keys ) {
(void)shift; // Intentionally unreferenced parameter if ( keys & HAL_KEY_SW_1 ) {
SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION ); }
if ( keys & HAL_KEY_SW_2 ) {
aps_Group_t *grp;
grp = aps_FindGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP ); if ( grp ) {
aps_RemoveGroup(SAMPLEAPP_ENDPOINT,SAMPLEAPP_FLASH_GROUP ); } else
33
{
aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group ); } } }
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) {
uint16 flashTime; switch ( pkt->clusterId ) {
case SAMPLEAPP_P2P_CLUSTERID:
HalUARTWrite(0, \ //提示接收到数据
HalUARTWrite(0, pkt->cmd.Data, pkt->cmd.DataLength); //输出接收到的数据 HalUARTWrite(0, \ // 回车换行 break;
case SAMPLEAPP_PERIODIC_CLUSTERID: 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; } }
void SampleApp_SendPeriodicMessage( void ) {
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc, SAMPLEAPP_PERIODIC_CLUSTERID, 1,
(uint8*)&SampleAppPeriodicCounter, &SampleApp_TransID,
34
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) else {
Error occurred in request to send. } }
void SampleApp_SendFlashMessage( uint16 flashTime ) {
uint8 buffer[3];
buffer[0] = (uint8)(SampleAppFlashCounter++); buffer[1] = LO_UINT16( flashTime ); buffer[2] = HI_UINT16( flashTime );
if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc, SAMPLEAPP_FLASH_CLUSTERID, 3, buffer,
&SampleApp_TransID, AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } else {
// Error occurred in request to send. } }
void SampleApp_Send_P2P_Message( void ) {
35