背景
在嵌入式上开发蓝牙BLE HID发现在启动HID服务后,使用一些手机会扫描到两个同名到设备。
分析UUID发现一个是经典蓝牙,一个是低功耗蓝牙(BLE HID)。
找蓝牙配置发现,压根没有蓝牙配置(恼)。
解决方法
复制一份ubuntu上/etc/bluetooth/main.conf将其中的ControllerMode改为le:然后复制到rootfs-overlay对应的/etc/bluetooth/main.conf(如果没有就创建)
因为我只想让设备作为一个BLE HID设备,所以需要在启动时关闭一些不必要到插件。
找到蓝牙启动的脚本添加上不需要到插件:- --noplugin=sap,audio,avrcp,headset,network,hfp,obex,objpush
复制代码 这个是bluetoothd启动时的选项可以关闭不需要的插件。
c修改后启动脚本如下(仅截取了启动部分):- DAEMON="bluetoothd"
- PIDFILE="/var/run/$DAEMON.pid"
- BLUETOOTHD_ARGS="-n --noplugin=sap,audio,avrcp,headset,network,hfp,obex,objpush"
- # shellcheck source=/dev/null
- [ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON"
- start() {
- printf 'Starting %s: ' "$DAEMON"
- # shellcheck disable=SC2086 # we need the word splitting
- start-stop-daemon -S -q -m -b -p "$PIDFILE" -x "/usr/libexec/bluetooth/$DAEMON" \
- -- $BLUETOOTHD_ARGS
- status=$?
- if [ "$status" -eq 0 ]; then
- echo "OK"
- else
- echo "FAIL"
- fi
- return "$status"
- }
复制代码 配置完成后删除原来的bluez_utils重新编译系统。
再次测试发现只有一个蓝牙设备存在,连接后被识别为BLE HID设备。
遗留问题
这样修改后蓝牙是能正常使用,不过不能使用bluetoothctl命令(一旦使用就会找不到蓝牙适配器)。
因为不影响使用所以就没有去关注这个问题(估计和这个设备到驱动有关系)。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |