Z-Statk协调器 路由器 终端的确定---Simple例程(一)
当我们选择了终端、路由器、或者协调器的时候,来看一下程序中是怎么判断的。也就是如何作为其中的各个角色进行启动,是加入网络,还是形成网络。因为我们在这三个设备上使用的一套代码。首先,我们可以看到下面的三张图,这个是以SampleApp例程为例子。从三幅图中我们可以看来,当选择不同的设备类型编译时,下面加载的配置文件是不一样的。
下面是f8wCoord.cfg文件中的配置信息。这个协调器中的编译选项比路由器结点的编译选项相比多了一个-DZDO_COORDINATOR选项。 /* Common To All Applications */
-DCPU32MHZ // CC2430s Run at 32MHz -DFORCE_MAC_NEAR // MAC code in NEAR -DROOT=__near_func // MAC/ZMAC code in NEAR
-DMAC_CFG_APP_PENDING_QUEUE=TRUE
/* Coordinator Settings */
-DZDO_COORDINATOR // Coordinator Functions -DRTR_NWK // Router Functions
/* Optional Settings */
-DBLINK_LEDS // LED Blink Functions
/* Compiler keywords */ -DCONST=\
-DGENERIC=__generic // Ptr declaration 下面是终端结点的配置信息。f8wEndev.cfg /* Common To All Applications */
-DCPU32MHZ // CC2430s Run at 32MHz -DFORCE_MAC_NEAR // MAC code in NEAR -DROOT=__near_func // MAC/ZMAC code in NEAR
/* Optional Settings */
-DMAC_OPT_FFD=0 // ZigBee RFD 应该是决定了是终端结点 -DBLINK_LEDS // LED Blink Functions
/* Compiler keywords */ -DCONST=\
-DGENERIC=__generic // Ptr declaration
下面是路由器结点的配置信息,f8wRouter.cfg,在这里没有协调器的编译选项 /* Common To All Applications */
-DCPU32MHZ // CC2430s Run at 32MHz -DFORCE_MAC_NEAR // MAC code in NEAR -DROOT=__near_func // MAC/ZMAC code in NEAR
-DMAC_CFG_APP_PENDING_QUEUE=TRUE
/* Router Settings */
-DRTR_NWK // Router Functions
/* Optional Settings */
-DBLINK_LEDS // LED Blink Functions
/* Compiler keywords */ -DCONST=\
-DGENERIC=__generic // Ptr declaration
从上面的三个配置文件的内容,我们来看一下这三个配置文件的区别。其实区别就在上面红色标注的部分。协调器比路由结点多了-DZDO_COORDINATOR // Coordinator Functions
这句话,我们也可以看到就是在协调器结点中,也定义了路由器结点的选项,也
就是 -DRTR_NWK // Router Functions,
其实这也说明了,在加载f8wCoord.cfg文件时,我们可以通过应用程序来决定配置成协调器,还是配置成路由器。还必须在配置了非自动启动模式HOLD_AUTO_START和软启动模式SOFT_START两个选项后,我们可以在SimpleControllerEB这个工程中和SimpleSwitchEB这个文件中,看到下面的编译选项,有什么不同点,也就是在作为协调器时,我们的编译选项多了一个非自动启动模式HOLD_AUTO_START模式。在这个选择设备的类型这个下拉框中,我们没有发现和SampleApp例程一样有三个选项,也就是协调器,路由器,终端,这里就两个选项一个是SimpleControllerEB,另一个是SimpleSwitchEB,我们知道SimpleSwitchEB是终端结点,
SimpleControllerEB可作为协调器结点,那我们的路由结点在那里呢?从上面的分析可以看到一定是加载了 f8wCoord.cfg文件的,才可能成为路由器,其实协调器和路由器是通过程序中的按键来决定的,也就是用户的应用程序,其实这个工程和其它工程还有不同的地方就是协调器和路由器共用一个应用程序的文件,也就是SimpleController.c,而终端结点的应用在另一个文件
SimpleSwitch.c。这个工程所有共用的代码是sapi.c文件,这也为我们应用程序的编写提供了另一种思路。开关设备SimpleSwitchEB无论按K1还是K2都是作为终端设备的,而灯设备SimpleControllerEB按键K1则作为协调器,按K2则作为路由器。那下面我们就看看应用程序中是怎么来实现这样一个功能的。下面首先是以协调器为例子。