您可以参考下面的示意图来理解
enddevice.c的内容介绍
End Device的运行过程仍然是从AppColdStart开始。这一函数和Co-ordinator的运行方式完全的不同,下面将详细的讲解这个过程。
1.AppColdStart调用vInitSystem,这个函数将初始化IEEE 802.15.4的协议栈
2.AppColdStart调用vStartActiveScan开始对于活动通道的扫描, End Device将向扫描的通道发送信标请求,并接收PAN Co-ordinator的信标请求回应。需要扫描的通道和速率将在config.h中定义。扫描请求的初始化和发送的工作可以通过MLME请求的方式通过IEEE 802.15.4的MAC层发送。
3.AppColdStart将通过vProcessEventQueues来检查和处理MLME回应。这个函数将调用vProcessIncomingMlme来处理收到的MLME回应。vHandleActiveScanResponse会被调用处理返回的活动通道扫描结果:
如果找到PAN Co-ordinator,函数将保存相应的Co-ordinator信息(比如 PAN ID,短地址,逻辑通道),并且调用vStartAssociate向Co-ordinator来提交入网请求,这一请求将通过MLME请求的方式提交。
如果PAN Co-ordinator没有被找到(可能是由于Co-ordinator还没有初始化完成)。这一函数将重新调用vStartActiveScan来重新启动扫描。
4. AppColdStart将循环的调用vProcessEventQueues等待来自Co-ordinator的入网回复。当收到回复后就将调用vProcessIncomingMlme,然后将调用vHandleAssociateResponse来处理回复,接下来的函数将检查回复的状态:
如果PAN Co-ordinator接受的入网请求,将设备置于联网状态。
如果PAN Co-ordinator拒绝了入网的请求,函数就将重新调用vStartActiveScan来开始搜索另外一个PAN Co-ordinator。
5. AppColdStart接下来将循环的调用vProcessEventQueues来等待来自于PAN Co-ordinator的MCPS信息或者硬件的队列信息。
当数据到达了MCPS队列,vProcessEventQueue首先使用函数vProcessIncomingMcps来接收数据帧,接着调用vHandleMcpsDataInd,接着调用vProcessReceivedDataPacket,开发人员可以在这个函数里面编写自己的数据处理过程。