Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Bluetooth Serial/RFCOMM/SPP, How to Change the BAUD RATE?

This is very frustrating as I've been trying for weeks and not even a clue on the internet.

I am working on a project that reads/writes bluetooth serial data on different farming hardware.

most of these hardware are old and changing the baud rate of their SPP is not an option.

I'm using the android bluetooth chat as a basis to read/write, I've only changed the UUID to allow connection to the devices I have

I've managed to read from a tag reader at a bad rate of 19,200 beautifully, and formatted nicely

However, I'm stuck now with the scales which has a baud rate of 9,600 and shows funny characters in my app, not even close to the format that should come from the scales

This project was done previously on a old Windows Mobile and baud rates could be changed in their API

Is there a way to do this in Android or am I barking up the wrong tree?

like image 245
ZiGi Avatar asked Apr 07 '11 05:04

ZiGi


People also ask

Does Bluetooth have a baud rate?

The default Baud Rate for the Bluetooth Module is 57600 (most other modules are 9600) Be sure when you connect it is at 57600 and for the new Com Port you saw in Device Manager.

What is serial port profile Bluetooth?

The most common type of Bluetooth socket is RFCOMM, which is the type supported by the Android APIs. RFCOMM is a connection-oriented, streaming transport over Bluetooth. It is also known as the Serial Port Profile (SPP).

How do you use the serial Bluetooth terminal?

Open Android Settings > Bluetooth, switch Bluetooth on and Search for Devices. Connect to the Brainboxes Bluetooth to Serial Adapter by default named by its part number (e.g. BL-819 or BL-830) Enter the Bluetooth Pairing PIN number.

Is Bluetooth a serial connection?

Nearly every form of digital communication is based on a serial protocol with varying levels of encapsulation, even Bluetooth Classic.


2 Answers

Edit: Fixed some errors.

There's no good information on the internet about this - and lots of it is wrong - don't trust anyone!

In particular, these two things are not true:

  • RFCOMM and SPP (Serial Port Profile) are two names for the same thing. (They are however very closely related.)
  • There's no need to set the baud rate of an RFCOMM / SPP connection.

Here is what I have found:

Bluetooth serial connections are made as described in the SPP using RFCOMM. RFCOMM is a connection that runs over L2CAP and allows sending serial data and control parameters in frames. It is heavily based on an ancient standard called TS 07.10. SPP is the bluetooth profile.

This framing also allows you to send out-of-band data for things like controlling serial signals (DTR, CTS, etc) and for setting the baud rate.

From the SPP specification:

DevA may inform DevB of RS232 port settings with the Remote Port Negotiation Command, directly before DLC establishment. There is a requirement to do so if the API to the RFCOMM adaptation layer exposes those settings (e.g. baud rate, parity).

Sadly Android doesn't expose this functionality at all. I suppose it may be possible to send the Remote Port Negotiation command ourselves but I'm pretty sure that would require reimplementing RFCOMM which requires access to L2CAP that we don't have.

The Remote Port Negotiation command is detailed here page 31. Note "There are default values assigned on all parameters, if no negotiation is performed, the default value is chosen."

Therefore it is impossible to set the baud rate as desired on Android. It will use the default baud rate that your bluetooth adapter uses (probably 9600).

Also note that Windows does support setting the baud rate of bluetooth adapters.

like image 54
Timmmm Avatar answered Sep 27 '22 19:09

Timmmm


Presumably some Bluetooth to serial converter is attached to the legacy devices? If so you should be able to program it once to always use a particular bit rate. Then there would be no need for the Bluetooth client to set the bit rate...

like image 27
alanjmcf Avatar answered Sep 27 '22 19:09

alanjmcf