自动启动模式分析 - -以SampleApp例程协调器为例(3)

2020-02-21 22:50

{

msgPtr = (osal_event_hdr_t *)osal_msg_allocate( bufLen ); if ( msgPtr ) {

msgPtr->event = ZDO_STATE_CHANGE; // Command ID msgPtr->status = (byte)state;

osal_msg_send( *(epDesc->epDesc->task_id), (byte *)msgPtr ); } }

epDesc = epDesc->nextDesc; } }

在这个函数中设置了事件ZDO_STATE_CHANGE也就是状态变化事件,这样整个的流程就到了用户的事件处理函数中,在很多的例子中我们都可以看到这个事件的处理,也是网络建立成功后,或者加入网络成功后,首先要做的事件处理过程。

2. 如果协调器没有预编译NV_RESTORE,networkStateNV

==ZDO_INITDEV_NEW_NETWORK_STATE,但由于协调器编译了ZDO_COORDINATOR而没有编译SOFT_START,因此ZDAppDetermineDeviceType()不起作用.因此

ZDO_Config_Node_Descriptor.LogicalType和devStartMode这两个关键参数保持初始化时的值:

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR,devStartMode = MODE_HARD。

uint8 ZDOInitDevice( uint16 startDelay ) {

uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE; uint16 extendedDelay = 0;

devState = DEV_INIT; // Remove the Hold state // Initialize leave control logic ZDApp_LeaveCtrlInit();

// Check leave control reset settings

ZDApp_LeaveCtrlStartup( &devState, &startDelay ); // Leave may make the hold state come back if ( devState == DEV_HOLD )

return ( ZDO_INITDEV_LEAVE_NOT_STARTED ); // Don't join - (one time). #if defined ( NV_RESTORE )

// Get Keypad directly to see if a reset nv is needed.

// Hold down the SW_BYPASS_NV key (defined in OnBoard.h) // while booting to skip past NV Restore. if ( HalKeyRead() == SW_BYPASS_NV )

networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE; else {

// Determine if NV should be restored

networkStateNV = ZDApp_ReadNetworkRestoreState(); }

if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE ) {

networkStateNV = ZDApp_RestoreNetworkState(); } else {

// Wipe out the network state in NV NLME_InitNV();

NLME_SetDefaultNV(); }

#endif

if ( networkStateNV == ZDO_INITDEV_NEW_NETWORK_STATE ) {

ZDAppDetermineDeviceType();//当没有定义NV_RESTORE,SOFT_START,时这个不起作用

// Only delay if joining network - not restoring network state extendedDelay = (uint16)((NWK_START_DELAY + startDelay) + (osal_rand() & EXTENDED_JOINING_RANDOM_MASK)); }

// Initialize device security

ZDApp_SecInit( networkStateNV ); // Trigger the network start

ZDApp_NetworkInit( extendedDelay ); return ( networkStateNV ); }

其余部分和定义了NV_RESTORE选项类似.


自动启动模式分析 - -以SampleApp例程协调器为例(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:泉州资格证考试高中美术试讲教案:中国民间美术

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

马上注册会员

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