Android蓝牙串口/ RFCOMM/SPP,如何更改波特率?

ZiG*_*iGi 7 android serial-port bluetooth rfcomm

这是非常令人沮丧的,因为我已经尝试了几个星期,甚至没有在互联网上的线索.

我正在研究一个在不同农业硬件上读/写蓝牙串行数据的项目.

大多数这些硬件都是旧的,并且不能改变其SPP的波特率.

我使用android蓝牙聊天作为读/写的基础,我只更改了UUID以允许连接到我拥有的设备

我设法以19,200的糟糕速度从标签阅读器中读取,并且格式很好

但是,我现在卡在波特率为9,600的音阶上,并在我的应用中显示有趣的角色,甚至没有接近应该来自音阶的格式

此项目之前已在旧的Windows Mobile上完成,并且可以在其API中更改波特率

有没有办法在Android中执行此操作,还是我咆哮错误的树?

Tim*_*mmm 9

编辑:修正了一些错误.

关于这一点,互联网上没有很好的信息 - 很多都是错的 - 不要相信任何人!

特别是,这两件事情并非如此:

  • RFCOMM和SPP(串行端口配置文件)是同一个名称的两个名称.(但它们密切相关.)
  • 无需设置RFCOMM/SPP连接的波特率.

这是我发现的:

使用RFCOMM按照SPP中的描述制作蓝牙串行连接.RFCOMM是一种在L2CAP上运行的连接,允许以帧为单位发送串行数据和控制参数.它基于一种称为TS 07.10的古老标准.SPP是蓝牙配置文件.

这种成帧还允许您发送带外数据,例如控制串行信号(DTR,CTS等)和设置波特率.

从SPP规范:

在DLC建立之前,DevA可以通过远程端口协商命令通知DevB RS232端口设置.如果RFCOMM适配层的API公开那些设置(例如波特率,奇偶校验),则需要这样做.

可悲的是,Android根本没有公开这个功能.我想有可能自己发送远程端口协商命令,但我很确定需要重新实现RFCOMM,这需要访问我们没有的L2CAP.

第31页详细介绍远程端口协商命令.注意"所有参数都分配了默认值,如果未执行协商,则选择默认值."

因此,无法在Android上根据需要设置波特率.它将使用您的蓝牙适配器使用的默认波特率(可能是9600).

另请注意,Windows 确实支持设置蓝牙适配器的波特率.


ala*_*mcf 2

大概有一些蓝牙串行转换器连接到旧设备上?如果是这样,您应该能够对其进行一次编程以始终使用特定的比特率。那么蓝牙客户端就不需要设置比特率了......