linux bluez编程学习「1」
之前搭建好了环境并且实现了一个简单的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 文件名