Linux bluez蓝牙开发的准备工作

        最近为了搞这个蓝牙的事情,忙碌了好几天,我就是想结合 bluez 的代码随便玩一下蓝牙设备,而且能够参考源码写点测试程序来操作这个蓝牙设备。这里只是说明 Linux 下的准备工作而非嵌入式的arm。

1,系统支持

我用的是真机安装的 Debian11系统,Ubuntu 没用过,不知道是否支持。我之前的系统是Centos 7的,但我买了蓝牙适配器后,在那上面无法使用,转而安装了debian系统。系统如果能完全正常安装的话,比较安装了 GNOME 桌面系统,它的“设置” 里面就有 “蓝牙” 这一项。如果桌面系统里没有蓝牙界面可以操作,也可以用 sudo apt -y install bluetooth 进行安装,这样安装后会有很多蓝牙的命令行工具可以使用。例如我的系统里已经安装了 bluetooth,使用 hciconfig 可以查看当前蓝牙设备的信息:

能正常输出蓝牙设备的信息,那接下来你就可以自己写测试代码了。 

2,蓝牙适配器

我是在某宝上搜索的,直接跟卖家确认支持哪些系统。我买的那家适配器说是支持的debian,但不支持centos,所以我才重新安装debian的。

3,bluez 源码

这个之前的文章有介绍过,可以参考一下。蓝牙开发要看你想基于哪种方式来开发了,有基于 hci接口的,有基于 dbus 的,只要能用就行。

4,测试例子

下面这个例子调用了 hci 的接口:hci_get_route() 获取蓝牙设备的设备号, hci_devinfo() 根据设备号获取对应的设备信息。lib/hci_lib.h 头文件里提供了很这样的接口,而接口的实现就在libbluez库里。所以需要链接库-lBluez(根据第3步源码编译出来的库),-lglib-2.0 -lgthread-2.0 这两个库也是源码编译出来的。


#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <errno.h>
#include <ctype.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>
#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>

#include "lib/bluetooth.h"
#include "lib/hci.h"
#include "lib/hci_lib.h"


static void print_dev_hdr(struct hci_dev_info *di);

int main(int argc, char *argv[])
{
	int devId = hci_get_route(NULL);
	if(devId < 0)
	{
		printf("get bluetooth device id fail\n");
		return -1;
	}

	printf("get bluetooth device id = %d\n", devId);

	struct hci_dev_info devInfo;
	if(hci_devinfo(devId, &devInfo) == 0)
	{
		printf("get device info success\n");
		print_dev_hdr(&devInfo);
	}

	return 0;
}

static void print_dev_hdr(struct hci_dev_info *di)
{
	static int hdr = -1;
	char addr[18];

	if (hdr == di->dev_id)
		return;
	hdr = di->dev_id;

	ba2str(&di->bdaddr, addr);

	printf("%s:\tType: %s  Bus: %s\n", di->name,
					hci_typetostr((di->type & 0x30) >> 4),
					hci_bustostr(di->type & 0x0f));
	printf("\tBD Address: %s  ACL MTU: %d:%d  SCO MTU: %d:%d\n",
					addr, di->acl_mtu, di->acl_pkts,
						di->sco_mtu, di->sco_pkts);
}

可以看到用这个例子输出的,和系统工具输出的蓝牙 mac 地址是一样的,说明例子正常使用了,接下来可以根据自己需要随意写代码了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值