微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于GATT_DiscAllPrimaryServices ( uint16 connHandle, uint8 taskId )

关于GATT_DiscAllPrimaryServices ( uint16 connHandle, uint8 taskId )

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

 使用标题的函数后如果成功后,会发出一个消息:ATT_READ_BY_GRP_TYPE_RSP

static void simpleBLEGATTDiscoveryEvent( gattMsgEvent_t *pMsg )在处理函数中

pMsg中的内容:

 attReadByGrpTypeRsp_t readByGrpTypeRsp;          //!< ATT Read By Group Type Response

typedef struct
{
uint8 numGrps; //!< Number of attribute handle, end group handle and value sets found
uint8 len; //!< Length of each attribute handle, end group handle and value set
uint8 dataList[ATT_MTU_SIZE-2]; //!< List of 1 or more attribute handle, end group handle and value
} attReadByGrpTypeRsp_t;

numGrps是搜索到的Services组数

len为下面dataList的长度

但是,在simplecenter中 搜索到的num为3  len为6

dataList内容为 : 01,00,0B,00,00,18

不知道这些数据怎么理解。。是不是扫描过程中出错了。因为我center跟peripheral连接的。如果是handle 值肯定不对吧。

我就是想找到所有服务的handle

史蒂文,

首先,dataList 的内容应该有21个字节。。。你不能把后面的内容给省略掉,也贴出来看看?

另外,这个len,不是dataList 的长度,是表示每个Group 内容的长度。。。你这里总共有3个group,每个group 内容长度为6,所以,dataList 除了这6个字节,后面应该还有有效数据呢。

我来给你解释一下 这六个字节的意思吧,后面的两对,你应该自己也能看懂了:

01,00,0B,00,00,18,

首先,01,00 这一对,代表这个group 的开始attribute handle, 倒过来看,就是0x0001,

其次,0B,00 这一对,代表这个group 的结束attribute handle, 倒过来看,就是0x000B,

最后,00, 18 这一对,代表着这个group的service UUID,再倒过来看,就是0x1800, 这个是Generic Access Profile,就是GAP 的service 的UUID。

很清楚吧?

后面其他两个,也这么去看,这里dataList总共有效数据18个字节。

GATT_DiscAllPrimaryServices        (        uint16         connHandle,

uint8         taskId        

)        

 discover all the primary services on a server.发现服务器上所有的主服务

得到数据3 x 6 = 18

0001--000B,1800(GAP_SERVICE_UUID)      000C -- 000F, 1801(GATT_SERVICE_UUID)

0010--0022,180A(DEVINFO_SERV_UUID)

SimpleBLEPeripheral Application: Attribute Table(cc2540 user guide P16)

固定的服务

1、自定义的#define SIMPLEPROFILE_SERV_UUID               0xFFF0怎么没有在那些Group里面 ?那要如何得到?

2、获取AllService的uuid限制在3个?

 3、目的:在不知道自定义Characteristic的UUID情况下 获取自定义Characteristic的UUID。

4、通过获取DiscAllPrimaryServices的内容,感觉一般好像用不上啊。属性都是只读的。

史蒂文,

1, 必须可以查到,只是你还没查到而已。

2. 因为呢,BLE 包的大小限制,一次最多只能发20个字节的数据,所以接下来的其他service,会再通过read请求进行回复。

3. 这个,得从应用上解决了。告诉你个窍门,我自己平常在用的一个技巧,你可以试一下命令GATT_DiscAllCharDescs() 这个接口,这个能自动把所有service 查找完,应该能发现你要的UUID。通常方法的话,你的在每次GATT_DiscAllPrimaryServices() 收到回复之后,根据得到的最后一个Handle,再继续查找后续的内容。

4. 属性,是你自己设定的:)当然,有些系统的profile和service的属性,已经定义好了,你没法改。

你好,请问你是在哪里调用这个函数的?我现在在弄CC2640,我想获取外设的服务UUID,在连接之后我调用GATT_DiscAllPrimaryServices()这个函数,函数的返回值正常,表明这个函数执行成功,但是我却接收不到任何信息,请问你的操作是怎样的?

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

网站地图

Top