一、说明
我们可以通过一些方法,对广播的数据进行分类,查找到自己想要的设备。在CC2541中,采用的是将服务UUID丢到广播数据中,下面说一下这种方法。
当然,我们可以自己直接通过判断ADTYPE为 GAP_ADTYPE_MANUFACTURER_SPECIFIC 0XFF 的数据来进行过滤
特别对于IOS设备来说,要获取设备的MAC,则必须将MAC放到广播数据中
二、主机修改部分
增加查找ADTYPE为服务UUID的函数
//看一下具体的ADTYPE
//#define GAP_ADTYPE_16BIT_COMPLETE 0x03 //!< Service: Complete list of 16-bit UUIDs
//#define GAP_ADTYPE_16BIT_MORE 0x02 //!< Service: More 16-bit UUIDs available
static bool simpleBLEFindSvcUuid( uint16 uuid, uint8 *pData, uint8 dataLen )
{
uint8 adLen;
uint8 adType;
uint8 *pEnd;
pEnd = pData + dataLen - 1;
// While end of data not reached
while ( pData < pEnd )
{
// Get length of next AD item
adLen = *pData++;
if ( adLen > 0 )
{
adType = *pData;
// If AD type is for 16-bit service UUID
if ( adType == GAP_ADTYPE_16BIT_MORE || adType == GAP_ADTYPE_16BIT_COMPLETE )
{
pData++;
adLen--;
// For each UUID in list
while ( adLen >= 2 && pData < pEnd )
{
// Check for match
if ( pData[0] == LO_UINT16(uuid) && pData[1] == HI_UINT16(uuid) )
{
// Match found
return TRUE;
}
// Go to next
pData += 2;
adLen -= 2;
}
// Handle possible erroneous extra byte in UUID list
if ( adLen == 1 )
{
pData++;
}
}
else
{
// Go to next item
pData += adLen;
}
}
}
// Match not found
return FALSE;
}
|