基于ZigBee技术的温度采集系统的设计 - 图文(8)

2019-04-16 17:48

{

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


基于ZigBee技术的温度采集系统的设计 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017-2018学年高一物理下学期期末考试试题(含解析)(2)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: