openwrt蓝牙文件传输
openwrt支持:
USB Supprot-------------------------------
kmod-usb-ohci
kmod-usb-uhci
kmod-usb-storage-extras
kmod-usb2
Utilities-------------------------------
bluez-utils
bluez-daemon
Utilities-------------------------------
openobex
openobex-apps
工具说明:
bluez-utils依赖bluez-libs,dbus
生成工具:bccmd,bluemoon,btattach,btmon,btmgmt,ciptool,hciattach,hciconfig,hcidump,hcitool,hex2hcd,l2ping,l2test,mpris-proxy,rctest,rfcomm,sdptool,gatttool
bluez-libs依赖kmod-bluetooth蓝牙hci驱动
bluez-daemon生成工具:bluetoothd,bluetoothctl,obexd
openobex-apps生成工具:obex_test
kmod-bluetooth驱动
openwrt蓝牙驱动ko参考:kmod-bluetooth
$(LINUX_DIR)/net/bluetooth/bluetooth.ko \
$(LINUX_DIR)/net/bluetooth/rfcomm/rfcomm.ko \
$(LINUX_DIR)/net/bluetooth/bnep/bnep.ko \
$(LINUX_DIR)/net/bluetooth/hidp/hidp.ko \
$(LINUX_DIR)/drivers/bluetooth/hci_uart.ko \
$(LINUX_DIR)/drivers/bluetooth/btusb.ko
工具使用:
bluetoothd完成蓝牙hci层的统一管理服务端
bluetoothctl 蓝牙服务控制,通过dbus与bluetoothd通信
obexd蓝牙文件传输协议接收服务端,通过dbus与bluetoothd通信
hciconfig,hcitool 蓝牙hci层控制工具
obex_test蓝牙文件传输客户端,支持点对点蓝牙的文件发送与接收
sdptool 蓝牙从设备profile服务扫描工具
# 建立串口和蓝牙hci协议层的数据连接通道,usb方式不用
hciattach /dev/ttyAMA0 bcm43xx 921600 noflow -
hciconfig hci0 up
hcitool scan
hciconfig hci0 sspmode disable #关闭简易配对模式,有这个模式的被配对方就不用点击确认
# 查找目标mac蓝牙服务,文件传输服务为"OBEX Object Push" (0x1105),找出服务所在信道
sdptool brower F4:63:1F:D8:E0:89
sdptool search --bdaddr F4:63:1F:D8:E0:89 0x1105
# 蓝牙应用层使用工具
bluetoothctl
power on -- 启动蓝牙模块
agent on -- 蓝牙模块agent 打开
scan on -- 扫描周边设备,得到手机MAC:DC:09:4C:62:B3:CA
trust DC:09:4C:62:B3:CA -- trust该手机
pairable on -- 配对使能
discoverable on -- 开放检测
show -- 查看蓝牙配置信息
echo "power on" | bluetoothctl
echo "agent on" | bluetoothctl
echo "pairable on" | bluetoothctl
echo "discoverable on" | bluetoothctl
echo "show" | bluetoothctl
# obex_test发送文件,需要带上对方mac的obex文件传输服务所在信道,与sdptool结合使用
obex_test -b F4:63:1F:D8:E0:89 5
# obexd开启obex服务,接收文件
export DBUS_SESSION_BUS_ADDRESS="unix:path=/var/run/dbus/system_bus_socket"
obexd -a -r /tmp/ -n
obexd的dbus启动配置文件编写:
========================================
root@OpenWrt:~# cat /etc/dbus-1/system.d/obex-dbus.conf
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<!-- ../system.conf have denied everything, so we just punch some holes -->
<policy user="root">
<allow own="org.bluez.obex"/>
<allow send_destination="org.bluez.obex"/>
</policy>
<policy at_console="true">
<allow send_destination="org.bluez.obex"/>
</policy>
<policy group="lp">
<allow send_destination="org.bluez.obex"/>
</policy>
<policy context="default">
<deny send_destination="org.bluez.obex"/>
</policy>
</busconfig>
测试蓝牙特性
1.某些手机蓝牙要在蓝牙设置页面才能被其他蓝牙扫描到(华为畅享9)
2.某些手机蓝牙接收不了无后缀或特殊文件(小米8)
3.苹果IOS系统是绝对的封闭性,所以iPhone蓝牙只能用于连接外设不能传输文件
4.蓝牙同时连接7个设备后,第8个设备使用sdptool查找服务不成功
5.某些手机蓝牙连接时需要点击确认配对
6.需要点击确认配对的某些手机拒绝多次后(>8次),接收链路会失败,需要重新连接配对
7.蓝牙作为从模式,有连接传输文件时,主模式文件传输失败
8.获取不到主模式设备的rssi,主模式可以再beacon和scan request获取到应用层上报的从模式rssi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!