【基本解决】android中是否支持蓝牙的串口的RTS/CTS【背景】 需要折腾在android上通过蓝牙模块,然后外接HART猫,连接HART设备。 想要发送HART数据的话,需要物理上支持流控制。 所以需要去搞懂Android中的蓝牙,是否支持RTS/CTS。 【折腾过程】 1.网上找了半天,关于蓝牙支持串口的,好像是 RFCOMM 相关的内容: Bluetooth protocols – Wikipedia, the free encyclopedia RFCOMM | Bluetooth Development Portal RFCOMM Protocol – Marko Bundalo 得知: 蓝牙的SSP中,本身协议上是支持,模拟出来串口的各个引脚的功能的,包括流控制:
但是却不知道具体如何使用。 2.android中的蓝牙的解释: Bluetooth | Android Developers 其中,默认好像就是:RFCOMM 但是后面,没搞懂: 两个设备,wired配对后,如何传输数据的。 3.去API: BluetoothClass | Android Developers BluetoothProfile | Android Developers 中找RTS等信息,也找不到。 4.貌似这里: Serial Port Profile Emulation? – Free2move F2M01 Bluetooth RS-232 Plug Support Forum – Expansys USA 提到的就是: "The F2M01 does support RTS/CTS signals for local hardware flow control. The Bluetooth specification has no support for sending the RTS/CTS signals over the air interface and this is because the RTS/CTS signals are only used locally. Each end is responsible for controlling the UART flow to prevent buffers from being overwritten." 即,蓝牙协议中的串口,不支持通过软件协议来控制RTS/CTS,而是要你自己的硬件这一端自己去控制。 不过,貌似看到协议中的解释,也没有完全看懂: 或许,本身也是可以通过协议控制RTS/CTS的,只是自己暂时没搞懂如何去做而已。 5.看了: 中的“ COM port interface (virtual COM port in Windows) using Windows Bluetooth Serial Port Profile (SPP)” 才知道: 原来前面看到的Bluetooth Serial Port Profile,就是SSP。 然后再去找了下,结果还是找不到相关的资料,没有找到介绍如何在android中的用SSP这个profile去实现RTS/CTS的控制的。 6.唯一一个相关的帖子只有一个人去问的: [android-developers] Bluetooth SPP control signals (DTR, DSR, RTS, CTS) 但是没有有效的解决办法。 7.最后的最后是: 在android上使用蓝牙的ssp协议,当做串口处理,直接发送和接受数据即可。 而对应的HART协议所需要的流控制处理,本身已经有外接的蓝牙接口的HART猫,自动处理了。无需程序关心,即可正常的实现: 发送HART的command 0的数据,然后接收到对应的command 0返回的数据。 【总结】 目前的结论是: 无需android的app操心蓝牙的SSP中的流控制,即可写程序发送和接受HART协议的数据。 至于其他组合中,是否需要操心SSP模拟的出来的串口的流控制,就不太清楚了。 注: 已经实现的可工作的代码,可参考: |
|