我爱蓝牙网 - 52Bluetooth - 最具人气蓝牙技术交流网站

标题: ADK4.1 GATT server怎么搭建 [打印本页]

作者: 于嗟鸠兮    时间: 2018-2-5 21:05
标题: ADK4.1 GATT server怎么搭建
本帖最后由 于嗟鸠兮 于 2018-2-6 08:39 编辑

做了几天了,一直没能成功搭建GATT server。我能搭建一部分的,就是手机连接蓝牙后能看到我自己创建的GATT server,但是就是无法读写,在手机读或者写时,蓝牙这边没看到具体的事件触发。我渴望在座的大神给予指点。

附图是手机写0xaabbcc给蓝牙,说明蓝牙收到了,但我不知道如何获取这些数据或者这些事件在哪触发的。
作者: smagi    时间: 2018-2-5 21:05
xx_server_ext_msg_handler 是 GATT manager 调用的。
1. 检查一下HANDLE_BE2800_SERVICE 和HANDLE_BE2800_SERVICE_END 的值。 HANDLE_BE2800_SERVICE应该是30.
2. 在 handleBe2800Access 函数中 switch(access_ind->handle)需要用HANDLE_BE2800_SERVICEx 而不是HANDLE_BE2800_SERVICE. log 里ACCESS_RSP  
result = 1 (gatt_status_invalid_handle).
3. 尽量把#include 放在.c文件里,
作者: smagi    时间: 2018-2-5 23:41
把蓝牙设备名和地址都改了,手机会记住设备上的服务。改动会导致访问使用无效句柄。改地址会刷新手机记录。
作者: smagi    时间: 2018-2-5 23:42
如果还不行就需要调试了。
作者: 于嗟鸠兮    时间: 2018-2-6 08:45
smagi 发表于 2018-2-5 23:41
把蓝牙设备名和地址都改了,手机会记住设备上的服务。改动会导致访问使用无效句柄。改地址会刷新手机记录。

感谢回答。如我刚才补发的图,其实是蓝牙收到手机的内容了,但我不知道该在哪里得到这些数据或者说这些事件在哪触发的。
作者: 于嗟鸠兮    时间: 2018-2-6 08:46
smagi 发表于 2018-2-5 23:42
如果还不行就需要调试了。

感谢回答。我已经用我所知道的方式进行调试了,但还是没能做出来。
作者: smagi    时间: 2018-2-6 08:57
那是你的server注册的问题了,注册GATT Server 需要更改app-handler.看看其他的服务源码就知道了
作者: 于嗟鸠兮    时间: 2018-2-6 09:27
smagi 发表于 2018-2-6 08:57
那是你的server注册的问题了,注册GATT Server 需要更改app-handler.看看其他的服务源码就知道了

我是根据GATT_BATTERY_SERVER来写的
作者: smagi    时间: 2018-2-6 09:58
Log 里的 handle值是 0x1e, 30.看看 gatt-db.h 你的server handle 值对不对? 不会Server 的UUID 重复了吧?
作者: smagi    时间: 2018-2-7 04:24
详细请参考 http://blog.csdn.net/wzz4420381/article/details/78359481
作者: 于嗟鸠兮    时间: 2018-2-7 08:16
smagi 发表于 2018-2-7 04:24
详细请参考 http://blog.csdn.net/wzz4420381/article/details/78359481

再次感谢,这篇博文我就差点没把它背出来了。我第一次尝试搭建GATT server时看的就时这篇博文,不过很多东西没能写出来。
作者: ARSENALCN    时间: 2018-2-7 08:40
你用的是ADK哪个版本?
ADK4.1里有个心率器的服务可以测试一下看行不行
ADK4.01我以前做过添加自定义SPP和BLE,SPP直接开,BLE参考电池服务可以的
作者: smagi    时间: 2018-2-7 09:47
现在什么情况?
作者: smagi    时间: 2018-2-7 10:12
看一下我写的这篇http://www.52bluetooth.com/forum.php?mod=viewthread&tid=43358 注意事项,估计是注册的句柄值不对
作者: 于嗟鸠兮    时间: 2018-2-7 11:22
ARSENALCN 发表于 2018-2-7 08:40
你用的是ADK哪个版本?
ADK4.1里有个心率器的服务可以测试一下看行不行
ADK4.01我以前做过添加自定义SPP ...

ADK4.1 芯片是8670,心率和电池都可以,就是自己写的不可以。哪SPP又是怎么做的呢?
作者: 于嗟鸠兮    时间: 2018-2-7 11:39
smagi 发表于 2018-2-7 10:12
看一下我写的这篇http://www.52bluetooth.com/forum.php?mod=viewthread&tid=43358 注意事项,估计是注册的 ...

我正在测试,注意事项中的4.2我用的都是sink_gatt_db.h的handle;还有就是之前的博文说会生成一个xxx.a的库,我一直没能生成。您写的那篇文章我看了,不同点就在您注意事项4.2提到的
作者: 于嗟鸠兮    时间: 2018-2-7 11:48
smagi 发表于 2018-2-7 10:12
看一下我写的这篇http://www.52bluetooth.com/forum.php?mod=viewthread&tid=43358 注意事项,估计是注册的 ...

关于xx_server_ext_msg_handler(...)这个函数是谁在调用它,我一直弄不明白。有事件触发应该会触发这个函数,但我的代码就没有触发。
作者: 于嗟鸠兮    时间: 2018-2-7 11:49
smagi 发表于 2018-2-7 10:12
看一下我写的这篇http://www.52bluetooth.com/forum.php?mod=viewthread&tid=43358 注意事项,估计是注册的 ...

附件是我写的GATT server

作者: ARSENALCN    时间: 2018-2-7 11:59
于嗟鸠兮 发表于 2018-2-7 11:22
ADK4.1 芯片是8670,心率和电池都可以,就是自己写的不可以。哪SPP又是怎么做的呢?

看起来离搞好还有一段距离啊
模仿心率的写一个,在LIB目录下copy心率的源文件修改为自己的服务,再重建库文件
项目属性里添加你的库

作者: 于嗟鸠兮    时间: 2018-2-8 11:20
smagi 发表于 2018-2-7 23:27
xx_server_ext_msg_handler 是 GATT manager 调用的。
1. 检查一下HANDLE_BE2800_SERVICE 和HANDLE_BE2800 ...

兄弟  你是对的,我将我的代码中的switch(access_ind->handle)改用HANDLE_BE2800_SERVICEx后就可以了。感谢您。
作者: 于嗟鸠兮    时间: 2018-2-8 11:25
smagi 发表于 2018-2-7 10:12
看一下我写的这篇http://www.52bluetooth.com/forum.php?mod=viewthread&tid=43358 注意事项,估计是注册的 ...

我还想向您请教一个问题,渴望得到您的解答;我在做8670的OTA升级时总是失败。附图为出错提示






欢迎光临 我爱蓝牙网 - 52Bluetooth - 最具人气蓝牙技术交流网站 (https://www.52bluetooth.com/) Powered by Discuz! X3.5