微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于simpleBLEFindSvcUuid() UUUID的过滤的问题

关于simpleBLEFindSvcUuid() UUUID的过滤的问题

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

两个板子,一主一从, 一个烧录 SimpleBLECentral 一个烧录SimpleBLEPeripheral 。

static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )     ==》    case GAP_DEVICE_INFO_EVENT:    -》  simpleBLEFindSvcUuid()

static bool simpleBLEFindSvcUuid( uint16 uuid, uint8 *pData, uint8 dataLen )
{
uint8 adLen;
uint8 adType;
uint8 *pEnd;


pEnd = pData + dataLen - 1;while ( pData < pEnd )

{
adLen = *pData++;
if ( adLen > 0 )
{
adType = *pData;
if ( adType == GAP_ADTYPE_16BIT_MORE || adType == GAP_ADTYPE_16BIT_COMPLETE || 1)
{
pData++;
adLen--;
while ( adLen >= 2 && pData < pEnd )
{if ( pData[0] == LO_UINT16(uuid) && pData[1] == HI_UINT16(uuid) )

{
return TRUE;
}

。。。

问题一  :   pData 是从机在主机扫描的时候发过来的是吧。uuuid 是simpleBLEFindSvcUuid()传进来的 SIMPLEPROFILE_SERV_UUID 

#define SIMPLEPROFILE_SERV_UUID               0xFFF0      

simpleBLEFindSvcUuid()里面的   pData[0] == LO_UINT16(uuid) && pData[1] == HI_UINT16(uuid)  

就是判断  pData[0] 跟 pData[1]  的值是 0xfff0  才能返回true   不会被过滤掉。

static uint8 advertData[] =
{
0x02, // length of this data
GAP_ADTYPE_FLAGS,
DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,

0x03, // length of this data
GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all
LO_UINT16( SIMPLEPROFILE_SERV_UUID ),
HI_UINT16( SIMPLEPROFILE_SERV_UUID ),

};

问题二  : simpleBLEFindSvcUuid()里面的pData  是不是就是 从机 里面static uint8 advertData[]    ?

问题三 :  如果问题二 成立的话。   pData[0]  跟 pData[1] 对应的是   0x02, GAP_ADTYPE_FLAGS,  

 也不是LO_UINT16( SIMPLEPROFILE_SERV_UUID ),HI_UINT16( SIMPLEPROFILE_SERV_UUID )呀? 怎么会这样。颠倒了?

问题四:  如果SimpleBLEPeripheral  里面的 SIMPLEPROFILE_SERV_UUID  不是FFF0  , 就是跟主机里面的SIMPLEPROFILE_SERV_UUID  不一样,

那是不是从机就会被过滤掉? 就找不到这个从机了?

字码的有点多。  但是很详细。   希望TI 员工帮我解答。  呼叫 YAN ~~

hainong,

问题一,是的,pData是扫描过来的数据。uuid也是你说的那个宏定义。

问题二, 没错,但也可以是scanData[], 可以通过deviceInfo中的eventType来区分是adv 还是scan response。

问题三, 你可以看一下结构体定义,还有广播包格式定义,0 和 1 的位置分别是长度和类型,后面是内容,结构体里面已经把这些都分好了,所以你得到的pData[]里面就是实际内容,不是长度和类型。

问题四, 没错。会被过滤掉。

Hi Yan:

看了你的回答,我有了几个疑问。如果方便的话还请你解答一下,谢谢啊。

1.

typedef struct
{
osal_event_hdr_t hdr; //!< GAP_MSG_EVENT and status
uint8 opcode; //!< GAP_DEVICE_INFO_EVENT
uint8 eventType; //!< Advertisement Type: @ref GAP_ADVERTISEMENT_TYPE_DEFINES
uint8 addrType; //!< address type: @ref GAP_ADDR_TYPE_DEFINES
uint8 addr[B_ADDR_LEN]; //!< Address of the advertisement or SCAN_RSP
int8 rssi; //!< Advertisement or SCAN_RSP RSSI
uint8 dataLen; //!< Length (in bytes) of the data field (evtData)
uint8 *pEvtData; //!< Data field of advertisement or SCAN_RSP
} gapDeviceInfoEvent_t;

在这个结构体里面当我获取到扫描后的一个设备信息时我可以通过pEvtData获取广播包内容是吧,那请问这个广播包是否已经动态分配内存了,如果是那么用完之后谁来释放这块内存区域。

2.假设我的uuid时128bit我该如何获取,能否简单解释一下,。

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

网站地图

Top