Z-Statk协调器 路由器 终端的确定 - Simple例程(一) frank 编(5)

2019-04-21 14:22

{

softStartAllowCoord = FALSE; // Don't allow coord to start continueJoining = TRUE; }

devStartMode = MODE_JOIN; // Assume joining }

#endif // SOFT_START

}

由于定义了SOFT_START编译选项,因为在按下S1按键后,把ZG_DEVICETYPE_COORDINATOR值写入了ZCD_NV_LOGICAL_TYPE条目中,在系统重新启动后,通过初始化zgDeviceLogicalType=

ZG_DEVICETYPE_COORDINATOR所以这样就作为了一个协调器进行正常的启动了。后面的启动过程和前面分析是一样的形成网络,点亮绿色的灯。调用网络的初始化函数,触发ZDAppTaskID,任务中的ZDO_NETWORK_INIT事件处理。

void ZDApp_NetworkInit( uint16 delay ) {

if ( delay ) {

// Wait awhile before starting the device

osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, delay ); } else {

osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT ); } }

UINT16 ZDApp_event_loop( byte task_id, UINT16 events ) {

if ( events & ZDO_NETWORK_INIT ) {

// Initialize apps and start the network devState = DEV_INIT;

ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,

DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );

// Return unprocessed events

return (events ^ ZDO_NETWORK_INIT); }

}

从上面的分析可以得出ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR;

devStartMode = MODE_HARD;,

void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder ) {

ZStatus_t ret;

ret = ZUnsupportedMode;

#if defined(ZDO_COORDINATOR)

if ( logicalType == NODETYPE_COORDINATOR ) {

if ( startMode == MODE_HARD )

{

devState = DEV_COORD_STARTING; //调用网络的格式化函数形成网络

ret = NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,

zgDefaultStartingScanDuration, beaconOrder,

superframeOrder, false ); }

else if ( startMode == MODE_RESUME ) {

// Just start the coordinator

devState = DEV_COORD_STARTING;

ret = NLME_StartRouterRequest( beaconOrder, beaconOrder, false ); }

else {

#if defined( LCD_SUPPORTED )

HalLcdWriteScreen( %unknown\ #endif } }

#endif // !ZDO_COORDINATOR

#if !defined ( ZDO_COORDINATOR ) || defined( SOFT_START ) if ( logicalType == NODETYPE_ROUTER || logicalType == NODETYPE_DEVICE ) {

if ( (startMode == MODE_JOIN) || (startMode == MODE_REJOIN) ) {

devState = DEV_NWK_DISC;

#if defined( MANAGED_SCAN ) ZDOManagedScan_Next(); ret =

NLME_NetworkDiscoveryRequest( managedScanChannelMask, BEACON_ORDER_15_MSEC ); #else

ret = NLME_NetworkDiscoveryRequest( zgDefaultChannelList, zgDefaultStartingScanDuration ); #endif }

else if ( startMode == MODE_RESUME ) {

if ( logicalType == NODETYPE_ROUTER ) {

ZMacScanCnf_t scanCnf;

devState = DEV_NWK_ORPHAN;

/* if router and nvram is available, fake successful orphan scan

*/

scanCnf.hdr.Status = ZSUCCESS;

scanCnf.ScanType = ZMAC_ORPHAN_SCAN; scanCnf.UnscannedChannels = 0; scanCnf.ResultListSize = 0;

nwk_ScanJoiningOrphan(&scanCnf);

ret = ZSuccess; } else {

devState = DEV_NWK_ORPHAN; ret = NLME_OrphanJoinRequest( zgDefaultChannelList,

zgDefaultStartingScanDuration ); } } else {

#if defined( LCD_SUPPORTED )

HalLcdWriteScreen( \ #endif } }

#endif //!ZDO COORDINATOR || SOFT_START

if ( ret != ZSuccess )

osal_start_timerEx(ZDAppTaskID, ZDO_NETWORK_INIT, NWK_RETRY_DELAY );

}

其实路由器的判断形成过程于其极其的相似,也是这个文件,只是把按键改成了K2,也就改变了zgDeviceLogicalType变量的值。


Z-Statk协调器 路由器 终端的确定 - Simple例程(一) frank 编(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:肝病科 非酒精性脂肪性肝炎中医临床路径(试行版)

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

马上注册会员

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