1 摘要

这篇文章的主要目的是告诉大家应该如何使用bluez进行开发,由于bluez的文档实在太少了,入门门槛实在太高了,很多人无从下手,准备写一个专题记录一下自己学习bluez的过程,分享一下bluez的学习方法,让大家少走一些弯路。我用的平台是君正x2000,蓝牙库使用的是bluez5.54,bluez库是通过buildroot编译出来的。通过BLUEZ我主要开发了一个BLE的串口服务端demo。这个程序我已经上传到了

https://download.csdn.net/download/huohongpeng/16681815?spm=1001.2014.3001.5501

有需要的可以自行下载。

2 开发bluez需要哪些知识?

开发bluez与其他常见的c库有本质的区别。以前我们需要什么功能都是移植一个c库,然后调用c库里面的api。而bluez却完全不是这样,bluez编译之后确实也会有一个libbluetooth,但是一般情况下,我们不会直接使用这个库进行开发。也不是像网上很老的教程用socket进行开发。那用什么呢?需要用DBUS进行开发。所以想要开发bulez,那么DBUS编程是绕不开的,必须要学习。

现在我们使用的bluez一般说的都是bluez5,bluez5与之前的bluez版本有很大区别,具体可以参考http://www.bluez.org/release-of-bluez-5-0/ 里面有比较简单的说明。简单的说bluez5所有的API都是通过DBUS来间接调用,而不是直接使用c接口来调用。

3 DBUS怎么学?

关于DBUS的教程网上有很多很多,我建议大家先弄清出一些概念,我这里不讲DBUS相关的内容,我也讲不明白,但是我可以告诉你们学习方法。

3.1 首先建议大家搜索一些DBUS的博客,中文教程之类的,了解一些基本的概念和术语,参考下面的链接:

这是一些列文章可以供大家参考

https://blog.csdn.net/flowingflying/article/details/5410820

https://blog.csdn.net/flowingflying/article/details/5411124

https://blog.csdn.net/flowingflying/article/details/5412711

https://blog.csdn.net/flowingflying/article/details/5418180

3.2 DBUS英文的官方文档

  中文文档都是其他人开发过程的一些教程并不是官方文档,当我们对一些概念了解了以后,一定要学习官方文档,虽然是英文,但是准确性非常的高。

还有一个是DBUS的调试软件《d-feet》,非常直观,在ubuntu上可以直接安装 sudo apt-get install d-feet,然后直接在命令行输入d-feet直接启动。

3.2.1 一篇简单的教程《D-Bus Tutorial》

https://dbus.freedesktop.org/doc/dbus-tutorial.html

3.3.2 DBUS规范《D-Bus Specification》

这个非常重要,就像DBUS的数据手册,必须要完全学习,内容不多,建议通读,尤其是变量的类型,对象,接口,属性的一些概念。

https://dbus.freedesktop.org/doc/dbus-specification.html

3.3.3 gdbus和dbus-glib区别

网上很多文章在介绍c语言调用dbus接口时都说使用的是 dbus-glib,其实这个库已经被弃用了,官方的文档都说不再使用dbus-glib,而是使用gdbus。

下面这个链接是一些简单的说明,可以简单读一读,了解区别

https://developer.gnome.org/gio/stable/ch35.html

3.3.4 gdbus接口的编程

gdbus实际上是gnome的一个库,是gio库的一部分。而gio的接口api文档在https://developer.gnome.org/gio/stable/

gdbus的api的文档包括两部分内容分别是Low-level D-Bus SupportHigh-level D-Bus Support。一般情况下,我们学会了Low-level D-Bus Support 就足够编写bluez程序了。

https://developer.gnome.org/gio/stable/gdbus-lowlevel.html

3.3.5 gdbus的变量

gdbus的变量主要使用GVariant表示,而GVariant主要通过下面的三个文档进行学习:

GVariantType — introduction to the GVariant type system

https://developer.gnome.org/glib/stable/glib-GVariantType.html

GVariant — strongly typed value datatype

https://developer.gnome.org/glib/stable/glib-GVariant.html

GVariant Format Strings — varargs conversion of GVariants

https://developer.gnome.org/glib/stable/gvariant-format-strings.html

4 bluez怎么学?

如果想跳过DBUS直接学BLUEZ是不可能,所以必须先对DBUS有充分的了解。然后在学习bluez。而学习bluez必须对蓝牙规范有一定的了解,所以不了解蓝牙规范的还需自己去脑补。

看到这里直到bluez有多难了吧?所以网上基本没有教程,或者有也都是非常老的教程,只会不了解bluez的人走更多的弯路。

4.1 bluez的文档在哪里?

4.1.1 api文档

bluez只有官方文档,没有其他文档,不要再去其他地方苦苦的找教程了,根本就没有。所有bluez的API文档都在,在源码的doc目录下。

对于我编写的串口服务端程序,主要参考的是adapter-api.txt、advertising-api.txt、gatt-api.txt、device-api.txt

4.1.1 参考示例代码

对于DBUS接口的bluez编程,示例代码在源码目录的test目录下,但是没有c语言的代码,都是python语言写的,python语言对DBUS支持比c语言要完善很多。那如果我们想用c语言编写,这些代码有用吗?

当然有用,主要用于参考逻辑,而不是语言。

或者大家直接参考我基于c语言写的demo,对于入门已经很有帮助了

https://download.csdn.net/download/huohongpeng/16681815?spm=1001.2014.3001.5501

5 其他参考文档

对于bluez架构的参考文档,可以参考下面两个链接

https://download.csdn.net/download/huohongpeng/16685576?spm=1001.2014.3001.5501

https://download.csdn.net/download/huohongpeng/16685584?spm=1001.2014.3001.5501

 

 

 

 

 

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐