config.h头文件将被引用到两个源代码文件中,同时两个源代码文件也引用了以下的头文件:
jendefs.h, AppHardwareApi.h, AppQueueApi.h, mac_sap.h, mac_pib.h
coordinator.c的内容
开发者最常问的问题之一就是为什么Jennic的程序都没有Main函数,这个熟悉的函数哪里去了呢?这是因为Jennic程序都由boot loader来启动和引导,boot loader引导完成后就将自动的调用AppColdStart函数,您可以认为AppColdStart就是我们通常所说的Main。
AppColdStart将进行下面的操作:
1.AppColdStart将调用函数vInitSystem,这一函数将完成以下任务:
初始化设备的IEEE 802.15.4的协议栈
设置PAN ID和PAN Co-ordinator的短地址,在这个应用中这些参数都由我们预定义在config.h这个文件中
打开射频接收器
使Co-ordinator可以接受其他的设备加入网络
2.AppColdStart会调用vStartEnergyScan,这一函数将会开始在各个通道进行能量扫描以获得各个通道的能量级别。所扫描的通道以及速率都定义在config.h中。扫描将通过初始化一个MLME请求并将其发送给IEEE 802.15.4的MAC层来实现。
3.AppColdStart将通过调用vProcessEventQueues的方式等待MLME的回应。vProcessEventQueues函数将检查三个不同类型的事件队列并将接到的事件交给不同的事件处理函数处理。比如这个函数将调用vProcessIncomingMlme函数来处理MLME回应。 而这个函数将调用vHandleEnergyScanResponse来处理能量检测扫描的回应结果。这个函数将检查所有通道的能量级别,并挑选一个最安静的通道作为建立网络的通道。接下来将调用vStartCoordinator函数,这个函数将设置必要的参数并且递交MLME请求来启动网络,启动网络的请求不需要处理任何的回复信息。
4.AppColdStart循环调用vProcessEventQueues来等待其他设备的加入网络的请求,入网请求将以MLME请求的方式发送到codinator.当请求到达的时候函数将调用vHandleNodeAssociation来处理。接下来codinator将创建并发送入网请求回复。
5.AppColdStart将循环调用vProcessEventQueues来处理来自于MCPS的消息队列和来自于硬件的消息队列。
当数据到达MCPS队列后,vProcessEventQueues首先调用函数vProcessIncomingMcps来接收到达的数据帧.vProcessIncomingMcps调用vHandleMcpsDataInd,这个函数将调用vProcessReceivedDataPacket,在这个函数里面您可以自定义您自己的数据处理过程。
当硬件事件到达硬件队列后,vProcessEventQueues将调用函数vProcessIncomingHwEvent来接收到来的事件。您需要在这个函数中自定义自己的事件处理过程。