帖子:https://www.wch.cn/bbs/thread-70141-2.html
参考上帖子,我需求是在bondsave后得到当前publicaddr,和addrtype用于后面使用GAPBondMgr_SetParameter(GAPBOND_ERASE_SINGLEBOND,6+1,&addr);删除bond信息。
但我使用的CH573F例程中的库没有GAPBondMgr_ResolveAddr这个函数,如何操作?
帖子:https://www.wch.cn/bbs/thread-70141-2.html
参考上帖子,我需求是在bondsave后得到当前publicaddr,和addrtype用于后面使用GAPBondMgr_SetParameter(GAPBOND_ERASE_SINGLEBOND,6+1,&addr);删除bond信息。
但我使用的CH573F例程中的库没有GAPBondMgr_ResolveAddr这个函数,如何操作?
tmos_snv_read(mainRecordNvID(bond_id), sizeof(gapBondRec_t), buf+1); //获取一个绑定MAC
printf("MAC = ");
for(uint8 i = 0; i < sizeof(gapBondRec_t); i++){
printf("%02x ", buf[i+1]);
}printf("\r\n");
buf[0]=0x01;
bondmgr_tf=GAPBondMgr_SetParameter(GAPBOND_ERASE_SINGLEBOND,6+1,&buf);
或者说我只要bondsave后知道他保存的ID是多少就行,正常0、1、2、3这样的,但如果我删除1,新绑定的信息就会保存到1上,bondsave有返回吗?
您好,参考代码见下。
#define GAP_BONDINGS_MAX 4
uint8_t resolve_public_addr(uint8_t addrType,uint8_t *pDevAddr,uint8_t *pResolvedAddr ) {
uint8 idx = GAP_BONDINGS_MAX;
uint8_t mac_read[6];
uint8_t irk[16];
switch ( addrType ) {
case ADDRTYPE_PUBLIC:
case ADDRTYPE_STATIC:
for ( uint8 idx = 0; idx < GAP_BONDINGS_MAX; idx++ )
{
tmos_snv_read( mainRecordNvID(idx), 6, mac_read);
// Read in NV Main Bond Record and compare public address
if ( tmos_memcmp( mac_read, pDevAddr, B_ADDR_LEN ) )
{
tmos_memcpy(pResolvedAddr,mac_read,B_ADDR_LEN);
return ( idx ); // Found it
}
}
break;
case ADDRTYPE_PRIVATE_NONRESOLVE:
case ADDRTYPE_PRIVATE_RESOLVE:
if ( tmos_snv_read( devIRKNvID(idx), 16, irk ) == SUCCESS ) {
if ( (tmos_isbufset( irk, 0xFF, 16 ) == FALSE ) &&
( GAP_ResolvePrivateAddr( irk, pDevAddr ) == SUCCESS ) ){
tmos_snv_read( mainRecordNvID(idx), 6, pResolvedAddr);
return ( idx ); // Found it
}
}
}
return ( idx );
}