(通信 电子)ZigBee学习资料(5)

2019-04-22 16:48

const uint16 Cyril3AppCoordManage_ClusterList[CYRIL3APPMANAGE_MAX_CLUSTERS] = {

CYRIL3APPMANAGE_ CLUSTERID

};

endPointDesc_t Cyril3AppCoordManage_epDesc;

const SimpleDescriptionFormat_t Cyril3AppCoordManage_SimpleDesc = {

CYRIL3APPMANAGE_ENDPOINT, CYRIL3APPMANAGE_PROFID,

CYRIL3APPMANAGE_DEVICEID,

CYRIL3APPMANAGE_DEVICE_VERSION,

CYRIL3APPMANAGE_FLAGS,

CYRIL3APPMANAGE_MAX_CLUSTERS,

(uint16 *)Cyril3AppCoordManage_ClusterList,

CYRIL3APPMANAGE_MAX_CLUSTERS,

(uint16 *)Cyril3AppCoordManage_ClusterList

};

Cyril3AppCoordManage_ClusterList保存了一个簇ID的列表?所有有关于此任务的簇都需要在此

定义。

Cyril3AppCoordManage_epDesc是此任务的端点描述?它定义了此任务作为ZigBee应用程序对

象的所有信息?我们将会在初始化函数中为它赋值。然后将他注册到应用程序框架中。

Cyril3AppCoordManage_SimpleDesc是此任务的简单描述?它保存了此任务的一些基本信息。具

体赋值我不再赘述。

在任务初始化函数中?我们为端点描述赋值?并且注册到应用程序框架中。

Cyril3AppCoordManage_epDesc.endPoint = CYRIL3APPMANAGE_ENDPOINT;

Cyril3AppCoordManage_epDesc.task_id = &Cyril3AppCoordManage_TaskID;

Cyril3AppCoordManage_epDesc.simpleDesc= (SimpleDescriptionFormat_t

*)&Cyril3AppCoordManage_SimpleDesc;

Cyril3AppCoordManage_epDesc.latencyReq = noLatencyReqs;

afRegister( &Cyril3AppCoordManage_epDesc );

这样?我们的任务就顺利地作为ZigBee应用程序对象被加入到了应用程序框架中。这意味着我们可

以处理来自网络层的消息了。

五、处理消息

下面?我们来试图实现这样一个功能:当设备加入网络之后?点亮一个LED灯?表示该节点成功加入

网络?并处于就绪状态。

当设备成功加入网络以后?ZigBee设备对象(ZDO)会给所有已经在应用程序框架中注册过的任务

(也就是作为ZigBee的应用程序对象存在的任务)发送一个“ZDO_STATE_CHANGE”消息?消息的状

态指示了当前网络的状态。我们可以通过处理此消息时点亮LED等来实现这个功能。

当一个消息被发送给任务时?“SYS_EVENT_MSG”事件会被传递给任务。“SYS_EVENT_MSG”这个

事件通知任务有一个消息等待处理。所以?我们必须添加对于“SYS_EVENT_MSG”这个事件的响应?然

后从消息队列中取出消息?判断此消息是否为“ZDO_STATE_CHANGE”。在处理

“ZDO_STATE_CHANGE”消息时点亮LED灯。

在Cyril3AppCoordManage.c中我们定义如下全局变量:

devStates_t Cyril3AppCoordManage_NwkState=DEV_INIT;

Cyril3AppCoordManage_NwkState保存了当前节点的网络状态?我们将他初始化为“未加入网 络”。

在Cyril3AppCoordManage_ProcessEvent函数中?我们添加如下代码:

if ( events & SYS_EVENT_MSG )

{

afIncomingMSGPacket_t *MSGpkt;

MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( Cyril3AppManage_TaskID );

while ( MSGpkt )

{

switch ( MSGpkt->hdr.event )

{

case ZDO_STATE_CHANGE:

Cyril3AppCoordManage_NwkState = (devStates_t)MSGpkt->hdr.status;

if ( Cyril3AppCoordManage_NwkState == DEV_ZB_COORD )

{

HalLedSet( HAL_LED_1, HAL_LED_MODE_ON );

HalLedSet ( HAL_LED_2, HAL_LED_MODE_OFF );

HalLedSet ( HAL_LED_3, HAL_LED_MODE_OFF );

Cyril3AppCoordManage_ProcessZDOStateChange(

(devStates_t)

MSGpkt->hdr.status);

}

break;

default:

break;

}

osal_msg_deallocate( (uint8 *)MSGpkt );

MSGpkt = (afIncomingMSGPacket_t

*)osal_msg_receive( Cyril3AppManage_TaskID );

}

return (events ^ SYS_EVENT_MSG);

}

osal_msg_receive获取消息队列上相应任务的消息。osal_msg_deallocate释放消息所在的消息

缓冲区?回收内存资源。

还是在Cyril3AppCoordManage.c中我们添加

Cyril3AppCoordManage_ProcessZDOStateChange函数:

void Cyril3AppCoordManage_ProcessZDOStateChange(devStates_t state) {

HalLedSet( HAL_LED_1, HAL_LED_MODE_ON ); }


(通信 电子)ZigBee学习资料(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:教学常规自查报告

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

马上注册会员

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