微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 基于ZHA的代码有没有可能作为initiator进行touchLink?

基于ZHA的代码有没有可能作为initiator进行touchLink?

时间:10-02 整理:3721RD 点击:

在试着往ZHA的coordinator 端移植zll bridge的功能,现在可以通过调用zllInitiator_StartDevDisc开始touchLink,用packet sniffer也可以看到的确已经在各个信道去发现target了,但是程序始终进不到 initiatorScanRspCB,也就是说收不到来自target 的回应。

跟代码发现没有进入 zclLL_HdlIncoming,再继续往上,发现开始touchlink之后,连zcl_event_loop 也没进过,也就是,来自target 的回应没有进入zcl 处理,似乎是被扔掉了。

所以我想问一下:ZHA的代码里面,是不是把 touchlink 中设备发现阶段来自target 的响应扔掉了?有办法基于ZHA的代码来实现跟ZLL的设备进行touchlink吗?

先谢谢了。

首先scan req的数据有没有发送出来的,另外对方scan rsp的消息有回应出来对吧,

然后关于callback函数有没有注册

// Register for ZLL Initiator callbacks (for Inter-PAN commands)
zclLL_RegisterInterPANCmdCallbacks( &zllInitiator_CmdCBs );

@VV 大神出现~感谢!

VV

首先scan req的数据有没有发送出来的,另外对方scan rsp的消息有回应出来对吧,

scan request 是发出来的,packet sniffer 抓取的结果在附件,前5包是烧zll bridge 发出来的scan request,后5包数据是烧zha coordinator 发出来的scan request,看起来一模一样。

scan rsp 我不知道怎么用packet sniffer 抓取,我设的channel 是2405M Hz,response 好像是在其他信道,两者都没抓到,但zll bridge实际上是能正确完成touch link 的,所以我猜light 对 scan request 作出的 response 是正确的。

VV

然后关于callback函数有没有注册

// Register for ZLL Initiator callbacks (for Inter-PAN commands)
zclLL_RegisterInterPANCmdCallbacks( &zllInitiator_CmdCBs );

callback 函数是注册了的,在zllInitiator_Init()中已经调用了
zclLL_RegisterInterPANCmdCallbacks( &zllInitiator_CmdCBs );


注册以后,inter-PAN的消息就会通过调用zllInitiator_CmdCBs 中的这些callback 函数来处理,具体是在

static ZStatus_t zclLL_ProcessInLLInterPANCmds( zclIncoming_t *pInMsg ) 中,根据inter-PAN message中不同的command ID来调用,

如果是 scan reponse,就会调用

static ZStatus_t zclLL_ProcessInCmd_ScanRsp( zclIncoming_t *pInMsg ) ,然后就跑到刚才注册的回调函数中了。

但我注册的回调函数从未被调用,我就继续往上看,它如果被调用,顺序应该是这样的:

uint16 zcl_event_loop( uint8 task_id, uint16 events ) -->

void zcl_ProcessMessageMSG( afIncomingMSGPacket_t *pkt ) -->

static ZStatus_t zclLL_HdlIncoming( zclIncoming_t *pInMsg ) -->

static ZStatus_t zclLL_HdlInInterPANCommands( zclIncoming_t *pInMsg ) -->

static ZStatus_t zclLL_ProcessInLLInterPANCmds( zclIncoming_t *pInMsg ) -->

static ZStatus_t zclLL_ProcessInCmd_ScanRsp( zclIncoming_t *pInMsg ) -->

static ZStatus_t initiatorScanRspCB( afAddrType_t *srcAddr, zclLLScanRsp_t *pRsp )


然而,实际上在发送scan request 之后,连最上面的 zcl_event_loop 都没有进去过,所以,后面也不就可能对response 进行正确的处理了。再往上,我就不知道怎么跟了。

请问,ZLL bridge 能对scan response 正确处理,它的消息是谁发给 zcl_event_loop 的?我应该怎么继续跟踪调试代码?

感谢任何帮助。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top