linux bluez编程学习「1」

发布时间 2023-07-18 18:10:01作者: foorun

之前搭建好了环境并且实现了一个简单的demo,这次多学习几个hci层函数并进行运用

hci层函数可以见 usr/includde/bluetooth/hci_lib.h中

1.开启与关闭设备

int hci_open_dev(int dev_id);
int hci_close_dev(int dd);

hci_open_dev会使用socket()创建一个AF_BLUETOOTH域的套接字描述符,并与指定的本地设备绑定,这样就可以用通过创建的描述符操作该设备

dev_id  :打开的本地设备的设备ID

Returns :创建的套接字描述符,小于0则创建失败

hci_close_dev关闭套接字描述符

套接口(Sockets),通讯术语,通讯的基石是套接口,一个套接口是通讯的一端。在这一端上你可以找到与其对应的一个名字。一个正在被使用的套接口都有它的类型和与其相关的进程。

 

2.获取设备id

int hci_get_route(bdaddr_t *bdaddr)

根据其bdaddr得到相应的设备id

*如果 bdaddr 为 NULL,则返回第一可用设备的ID 

*返回值小于0获取失败

bdaddr:蓝牙设备地址。每个蓝牙收发器被分配了唯一的一个48位的设备地址,该地址包括24位的LAP 域,16位的 NAP 域和一个8位的UAP 域。

3.发送hci cmd指令

int hci_send_cmd(int dd, uint16_t ogf, uint16_t ocf, uint8_t plen, void *param);

每个HCI命令被分配一个2字节的OpCode,用于唯一地标识不同类型的命令。OpCode参数分为两个字段,称为OpCode组字段(OGF)和OpCode命令字段(OCF),其具体参数可在hci.h中看到

plen 长度

*param 参数

4.设备扫描使能

int hci_le_set_scan_enable(int dev_id, uint8_t enable, uint8_t filter_dup, int to);

dev_id 设备id

enable 使能 1为开启

filter_dup 过滤(具体参数还没找到)

to 超时时间

5.

int hci_le_set_scan_parameters(int dev_id, uint8_t type, uint16_t interval,
                    uint16_t window, uint8_t own_type,
                    uint8_t filter, int to);

设置扫描参数

 

其他问题

1.管理员权限通过vscode打开文件 

 解决办法:改用

code --no-sandbox --user-data-dir

或修改别名为vscode

alias vscode code --no-sandbox --user-data-dir

或直接修改文件权限然后code打开

chmod 777 文件名