深入理解Bluez协议栈
文章平均质量分 79
深入理解蓝牙Bluez协议栈
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
GuoFeng.Wan
这个作者很懒,什么都没留下…
展开
-
(七)深入理解Bluez协议栈之“再谈Bluez的访问接口”
头文件:lib/mgmt.hc文件:src/shared/mgmt.c示例:mgmt_send(data->mgmt, MGMT_OP_READ_INFO, data->mgmt_index, 0, NULL,缺点:如果应用层希望拿到比较细节的hci参数,那么mgmt无法提供,mgmt的相关资料不详细。优点:屏蔽了hci的细节,使用mgmt的command发送给kernel,一条指令可以解析成为很多条hci指令,对于L2CAP socket的兼容性好,peripheral示例就是这样实现的。原创 2024-01-17 12:12:55 · 154 阅读 · 0 评论 -
(六)深入理解Bluez协议栈之“GATT Client Profile”
本章节我们继续介绍GATT Client Profile的实现,参考的程序是tools\btgatt-client.c,需要注意的一点,在./configure时,需要添加 --enable-test --enable-testing才会编译该c文件,编译完成后,生成的可执行程序为btgatt-client。本文主要以btgatt-client运行时可能会出现的各种问题为切入点,介绍bluez的gatt client实现难点。对于btgatt-client的源码,无需过多介绍,都是开源的。原创 2024-01-16 18:10:16 · 299 阅读 · 0 评论 -
(五)深入理解Bluez协议栈之“GATT Server Profile”
上一篇介绍Bluez协议栈的了GAP Profile的实现,本章节我们继续介绍GATT Profile的实现,参考的程序是Peripheral。通过阅读它的实现代码可以发现,它广播部分是通过mgmt来实现的,然后在初始化完成之后,创建了一个L2CAP类型的socket,来负责实现GATT Server的逻辑。原创 2023-08-27 22:38:35 · 504 阅读 · 0 评论 -
(四)深入理解Bluez协议栈之“GAP Profile”
bluetoothd守护程序:bluetoothd是bluez协议栈的最核心的内容,它作为linux系统的蓝牙服务运行在后台中,所有向访问蓝牙的应用,都可以作为一个client端,通过dbus通信协议来调用bluetoothd的接口函数。bluetoothctl是bluez协议栈提供的一个client端,它展示了如何通过dbus来访问bluetoothd后台进程,开发者可以通过它的代码来了解其中的细节。原创 2023-05-12 20:50:52 · 884 阅读 · 0 评论 -
(三)深入理解Bluez协议栈之“好用的小工具”
bluez的代码结构过于庞大,bluetoothd和bluetoothctl是比较核心的一对应用,bluetoothd是bluetooth service的核心守护进程,linux的系统设置里面都是访问的bluetoothd进程实现的,但是也带了一个问题,就是bluetoothd是通过dbus对外提供访问它的接口,屏蔽掉了mgmt/hci消息的处理细节,同时dbus是一个相对复杂的跨进程通信方式,因此上来就看bluetoothd进程的话,相当于由深入浅,会给开发者增加理解源码的困难,增加学习难度和成本。原创 2023-05-10 16:31:17 · 1074 阅读 · 0 评论 -
(一)深入理解Bluez协议栈之“源码目录介绍”
src:核心程序bluetoothd的源码位置。其中还包括了shared文件夹,该文件夹编译生成了一个共享库,供bluetoothd和其他程序使用(shared库是重点)。client:bluetoothctl程序的源码位置。mesh:mesh协议栈的源码位置,但是不包含proxy相关的功能。tools:hciattach,hciconfig,hcitool等工具的源码目录,如果打开--enable-testing,--enable-test的话,在该目录中,还会有相关的*-tester执行程序。原创 2023-05-05 18:08:05 · 1766 阅读 · 0 评论 -
(二)深入理解Bluez协议栈之“bluetooth socket通信”
因此我的建议是,如果应用程序的业务需要使用hci的原始数据,并且mgmt,dbus没有办法直接拿到,就不建议使用bluetoothd的方式来实现逻辑。创建socket之后,可以通过它收发hci命令和事件,也可以收发mgmt类型消息,还可以通过ioctl控制controller,这几种方式在Bluez的代码中都是存在的,这也导致了我们阅读Bluez协议栈的时候总是感觉特别乱,因为它没有统一的访问Controller的接口,目前从bluetoothd守护进程的实现来看,mgmt是bluez主推的一种方式。原创 2023-04-25 16:22:52 · 1127 阅读 · 0 评论 -
(汇总)深入理解Bluez协议栈
本系列文章主要介绍如何在Linux平台使用Bluez协议栈的工具,如何使用它的功能包括BLE和BLE Mesh,经典蓝牙暂不涉及。原创 2023-04-03 16:59:56 · 1827 阅读 · 0 评论 -
(三)深入理解Bluez协议栈之蓝牙Mesh的支持(3/5)
上一篇文章介绍了如何在mesh-cfgclient程序的代码基础上,新增代码以实现generic onoff model的功能,其中包括单控和组控,现在把patch的代码实现粘贴出来,方便读者参考,不过请勿转载本文涉及的代码,代码请勿分享给别人。原创 2023-03-23 16:13:23 · 331 阅读 · 0 评论 -
(二)深入理解Bluez协议栈之蓝牙Mesh的支持(2/5)
上文提到过,原生的bluez虽然支持了mesh的大部分功能,但是并没有提供通过广播控制mesh灯的示例代码(meshctl是通过proxy特性的gatt连接通路控制mesh灯的,这并不是一个搞mesh网关功能的工程师想要的示例代码),而mesh-cfgclient虽然提供了广播通路的消息收发能力,但是只有provision和config功能,说白了就是只实现了devkey处理的config消息,而没有实现generic model的普通mesh消息的功能。原创 2023-03-11 16:30:05 · 819 阅读 · 0 评论 -
(一)深入理解Bluez协议栈之蓝牙Mesh的支持(1/5)
BlueZ是Linux官方蓝牙协议栈。它是一个基于GNU General Public License (GPL)发布的开源项目,从Linux 2.4.6开始便成为Linux 内核的一部分。如果你是linux平台开发蓝牙的的工程师,肯定会接触过Bluez协议栈,hciconfig,hciattach,hciconfig等工具都是很好用的工具。原创 2023-02-26 16:23:57 · 2512 阅读 · 4 评论