在ZDO_JoinIndicationCB时,在上位机中判断白名单的一些想法。
ZDO_JoinIndicationCB中,要处理两种消息。一个是MAC Associate Ind,另一种是Rejoin ind。MAC Associate ind要回复MAC Associate Rsp,Rejoin Ind要回复Rejoin Rsp。
在回复Associate Rsp时,不一定非要在收到MAC Associate Req时立即回复,可以在一个小于入网节点的macPib.ResponseWaitTime时间内回复,因为入网节点在发送Associate Req后的ResponseWaitTime时间内,通过MAC Data Poll Req去读取父节点的Associate Rsp。而这段时间,父节点可以在协调器上面去查询白名单,甚至能够让协调器在上位机去查询。
另一种是Rejoin Ind的,如果是一个FFD设备加入网络,父节点也能有时间先去查询白名单,再在规定时间内回复Rejoin Rsp。对于RFD节点来说,RFD节点也是通过MAC Data Poll 的方式接受Rejoin Rsp,因此父节点在子节点的REJOIN_POLL_RATE=440ms内回复Rejoin Rsp也是可以的。
像Associate Request/Response 这样的底层数据,希望协议栈能够自己判断处理,不要让上位机干预这个过程。
其实上位机更多的是扮演协议栈的协处理器角色,由于协议栈不支持文件系统,不支持数据库,但是ZigBee网络的全局拓扑最好的表现形式就是文件系统,数据库。
Associate Request/Response还是交给协议栈来处理,比如如何去分配地址,上位机只是起到一个辅助条件的作用。上位机既然有全局网络的控制权限,就应该具备对全局网络设备的管理权限。飞利浦HUE现在已经暴了一个很大的安全隐患了,再聪明的机器也聪明不过人,所以在ZigBee网络中,加入更多的人工干预机制,才能保证安全。