This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于Touch link 的问题,是bug还是必须这样做才行?

Genius 3030 points
Other Parts Discussed in Thread: CC2530

1、Touch Link连接问题,详细描述如下:

Initiator:ZED

Target:ZR

在Initiator中只有注释掉下面的bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING) Touch link才能正常工作

  bdb_initialize();
  printf("IsOnANetwork: %d\n", bdbAttributes.bdbNodeIsOnANetwork);
  if(bdbAttributes.bdbNodeIsOnANetwork == FALSE)
  {
     //bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING);
  }

此时Touch Link连接过程如下图,但是没有发送Simple request。

不注释bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING)这行代码的话就永远加不进网络,如下图 ,我在代码中添加了很多打印,

发现Initiator收不到Scan Response,打印信息如下,"bdbTL_HdlIncoming\n"并没有打印出来。

static ZStatus_t bdbTL_HdlIncoming(  zclIncoming_t *pInMsg )
{
  ZStatus_t status = ZSuccess;

  printf("bdbTL_HdlIncoming\n");
  if ( StubAPS_InterPan( pInMsg->msg->srcAddr.panId, pInMsg->msg->srcAddr.endPoint ) )
  {
    return ( bdbTL_HdlInInterPANCommands( pInMsg ) );
  }

  if ( zcl_ClusterCmd( pInMsg->hdr.fc.type ) )
  {
    // Is this a manufacturer specific command?
    if ( pInMsg->hdr.fc.manuSpecific == 0 )
    {
      status = bdbTL_HdlInSpecificCommands( pInMsg );
    }
    else
    {
      // We don't support any manufacturer specific command.
      status = ZFailure;
    }
  }
  else
  {
    // Handle all the normal (Read, Write...) commands -- should never get here
    status = ZFailure;
  }
  return ( status );
}

2、Initiator和Target均已开启NV_INIT和NV_RESTORE=1,Initiator掉电重启后只会Rejoin一次,而且没有成功过;Target掉电重启后清除了NV信息。

如下图

抓包信息如下:

Touchlink Info.zip