ZDO_beaconNotifyIndCB这个函数是怎么调用的
我在看ZSTack-LL程序,ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB )将函数zll_BeaconIndCB赋给了zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID],再有ZDO_beaconNotifyIndCB函数执行zdoCBFunc[ZDO_BEACON_NOTIFY_IND_CBID]( (void*)pBeacon )语句调用,但我找不到什么地方调用了ZDO_beaconNotifyIndCB,请问这个函数是在哪里调用的,谢谢了!
ZDO_beaconNotifyIndCB函数根本搜索不到调用,是不是封装在库文件的?如果是封装在库文件的话,ZDO_RegisterForZdoCB是怎样调用到的?
ZDO_beaconNotifyIndCB是被extern void NLME_beaconNotifyInd(NLME_beaconInd_t *pBeacon);调用的,这个函数是以库函数的方式提供的,当收到beacon后,有网络层把beacon数据传给事先注册好的函数,对beacon进行处理。
callback函数是在ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册的,注册的地方在void zll_PerformNetworkDisc( uint32 scanChannelList )
这么说的话,在ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册之后,就应该执行*zll_BeaconIndCB ( void *param )这个函数,对吗?
注册callback函数并不是注册了就马上调用,而是当你注册的该函数对应的事件发生的时候才会调用callback函数,
在这里注册的是beacon notify的callback函数,也就是当收到beacon数据帧的时候,才会调用callback函数。
注册仅仅代表将来发生的时候来调用这个函数,如果不发生就一直不会调用。
我是问,在ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册之后,当收到beacon帧时,就会执行*zll_BeaconIndCB ( void *param )这个函数,对吗?
在ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册之后,当收到beacon帧时,就会执行*zll_BeaconIndCB ( void *param )这个函数,对吗?
对的!
Hi VV:
在ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册之后,当收到beacon帧时,就会执行*zll_BeaconIndCB ( void *param )这个函数。
ZDO_beaconNotifyIndCB函数不是extern void NLME_beaconNotifyInd(NLME_beaconInd_t *pBeacon);的回调函数吗?
按照回调函数的机理,应该是NLME_beaconNotifyInd函数被调用并且收到beacon帧,才会执行被ZDO_RegisterForZdoCB( ZDO_BEACON_NOTIFY_IND_CBID, zll_BeaconIndCB );注册过的zll_BeaconIndCB 函数吗?
另外,寻遍Z-Stack工程没有发现有调用函数extern void NLME_beaconNotifyInd(NLME_beaconInd_t *pBeacon);难道它也是在库函数中被调用的吗?若如此,哪些情况会触发此函数呢?
谢谢 VV老师。