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.
添加预编译
BDB_TL_TARGET
INTER_PAN
然后用按键启动target,但是每次按下按键0后都会重启是怎么回事?还是说我的启动流程是错的?
if(keys & HAL_KEY_SW_0)
{
HalLcdWriteString("BDB_TL!!", 3);
//bdb_StartCommissioning(BDB_COMMISSIONING_MODE_INITIATOR_TL);
bdb_TouchlinkSetAllowStealing(1);
touchLinkTarget_EnableCommissioning( TOUCHLINK_TARGET_PERPETUAL-10 );
}
预编译BDB_TOUCHLINK_CAPABILITY_ENABLED == TRUE
你可以去看一下ZR Light (touchlink target) and ZR Switch (touchlink initiator)
启动设置为bdb_StartCommissioning(BDB_COMMISSIONING_MODE_INITIATOR_TL);
然后去追踪程序:
#if ( defined ( BDB_TL_INITIATOR ) && (BDB_TOUCHLINK_CAPABILITY_ENABLED == TRUE) ) if(bdbAttributes.bdbCommissioningMode & BDB_COMMISSIONING_MODE_INITIATOR_TL) { uint16 nwkAddr; //Does the device supports this commissioning mode? if(bdbAttributes.bdbNodeCommissioningCapability & BDB_TOUCHLINK_CAPABILITY) { //Clear previous state and substates osal_memset(&bdbCommissioningProcedureState,0,sizeof(bdbCommissioningProcedureState)); bdbCommissioningProcedureState.bdbCommissioningState = BDB_COMMISSIONING_STATE_TL; // Get our short address ZMacGetReq( ZMacShortAddress, (byte*)&nwkAddr ); // Check if address is invalid if ( nwkAddr >= NWK_BROADCAST_SHORTADDR_DEVZCZR ) { initiatorSelectNwkParams(); } touchLinkInitiator_StartDevDisc( ); bdb_NotifyCommissioningModeStart(BDB_COMMISSIONING_TOUCHLINK); }
上面的程ZR Light (touchlink target) and ZR Switch (touchlink initiator)中callback已经写好了,具体流程去看Z-Stack 3.0 Developer's Guide
抓包又发出吗?没有response?
在touchLinkTargetApp_Init中注册了 bdbTL_RegisterInterPANCmdCallbacks(&touchLinkTarget_CmdCBs);
这个回调最后出去rsp。
static ZStatus_t targetNwkStartReqCB( afAddrType_t *srcAddr, bdbTLNwkStartReq_t *pReq, uint8 seqNum ) { #if ZSTACK_END_DEVICE_BUILD return ( ZFailure ); #else if ( touchLink_IsValidTransID( pReq->transID ) == FALSE ) { return ( ZFailure ); } dstAddr = *srcAddr; dstAddr.panId = 0xFFFF; zstack_tlTargetNwkStartReq_t *pTargetNwkStartReq; pTargetNwkStartReq = (zstack_tlTargetNwkStartReq_t*)zcl_mem_alloc( sizeof(zstack_tlTargetNwkStartReq_t) ); zcl_memcpy(&(pTargetNwkStartReq->addr), &dstAddr, sizeof(afAddrType_t)); zcl_memcpy(&(pTargetNwkStartReq->nwkStartReq), pReq, sizeof(bdbTLNwkStartReq_t)); pTargetNwkStartReq->seqNum = seqNum; pTargetNwkStartReq->allowStealing = touchlinkAppAllowStealing; Zstackapi_tlTargetNwkStartReqInd(tlAppEntity, pTargetNwkStartReq); zcl_mem_free(pTargetNwkStartReq); return ( ZSuccess ); #endif }
zstack_ZStatusValues Zstackapi_tlTargetNwkStartReqInd( ICall_EntityID appEntity, zstack_tlTargetNwkStartReq_t *pReq) { // Build and send the message, then wait of the response message return( sendReqDefaultRsp(appEntity, zstackmsg_CmdIDs_TL_TARGET_NWK_START_REC_IND, pReq, sizeof(zstackmsg_tlTargetNwkStartReq_t), matchTLTargetNetworkStartReqInd) ); }
你用的是我让你用的那个两个ZR程序?
Target 收到req后到了这里,但 抓包没发现scan Response
static ZStatus_t targetScanReqCB( afAddrType_t *srcAddr, bdbTLScanReq_t *pReq, uint8 seqNum )
{
ZStatus_t ret = ZSuccess;
int8 rssi;
char buff[4];
extern void HalLcdWriteStringValue( char *title, uint32 value, uint8 format, uint8 line );
extern void HalLcdWriteString ( char *str, uint8 option);
HalLcdWriteStringValue("TL_I", pReq->touchLinkInitiator,10, 1);
if( pReq->touchLinkInitiator == FALSE )
{
return ZFailure;
}
rssi = touchLink_GetMsgRssi();
sprintf(buff, "%d", rssi);
HalLcdWriteString(buff, 2);
if( rssi > TOUCHLINK_WORST_RSSI )
{
if ( pDiscoveredNwkParamList == NULL )
{
dstAddr = *srcAddr;
dstAddr.panId = 0xFFFF;
ret = touchLink_TargetSendScanRsp( TOUCHLINK_INTERNAL_ENDPOINT, &dstAddr, pReq->transID, seqNum );
if ( ret == ZSuccess )
{
touchLinkTransID = pReq->transID;
}
}
}
HalLcdWriteStringValue("ret", ret, 10, 3);
return ( ret ); //返回0
}
我大致说一下,我这边是可以的,因为没带PC只能用Wireshark抓包就不上传了。
TARGET:
zstack_bdbStartCommissioningReq.commissioning_mode =
BDB_COMMISSIONING_MODE_NWK_STEERING|BDB_COMMISSIONING_MODE_NWK_FORMATION;
Zstackapi_bdbStartCommissioningReq(zclSampleLight_Entity,&zstack_bdbStartCommissioningReq);
touchLinkTarget_EnableCommissioning( TOUCHLINK_TARGET_PERPETUAL);
BDB_TL_INITIATOR :
zstack_bdbStartCommissioningReq_t zstack_bdbStartCommissioningReq;
zstack_bdbStartCommissioningReq.commissioning_mode = BDB_COMMISSIONING_MODE_INITIATOR_TL;
Zstackapi_bdbStartCommissioningReq(zclSampleSw_Entity,&zstack_bdbStartCommissioningReq);
您好,我昨天先让Router(Touchlink target)建立一个网络后,再让EndDevice(initiator)发送scan request,Router有回应,并且到了Identity这个流程,但是没有到Network Join这里;BDB文档和Sample文档里说target收到network start request才建立网络也可以的啊。
ZLL 是 light switch的程序。
请见:https://e2e.ti.com/support/wireless_connectivity/zigbee_6lowpan_802-15-4_mac/f/158/t/706202
如果你使用CC2530添加BDB_TL_TARGET及INTER_PAN到SampleLigth router應該是會編譯失敗,檢查看看你是不是為了優化內存使用移除了一些程序造成問題?因為CC2530內存限制,比較建議你用CC2538或是最新的CC2652測試touchlink