I'm trying to setup a virtual serial port though a USB-Bluetooth adapter on Linux and send a message to it through an Android device. I'm on kernel 3.6. I'm able to pair to the device successfully using gnome-bluetooth and also able to send files to it.
To set up the serial port I first add a channel with an SP profile to my adapter:
sdptool add --channel=22 SP
Then I call 'listen' with rfcomm:
rfcomm listen /dev/rfcomm0 22
which blocks on
Waiting for connection on channel 22
Apparently rfcomm will create /dev/rfcomm0 upon a successful connection. Once that happens, I'd like to use something like cutecom to send messages back and forth to the connected device.
On my Android device I open up a Bluetooth SPP terminal (there are several out there, I tried a few different ones) and try to connect. They all fail.
Given that I can pair successfully and send files without any issues, I know that bluetooth pairing and communication works.
I'm not too sure what else I can try. I used 'sdptool browse' on my local device and the Android device to ensure that there aren't any RFCOMM channel conflicts.
Best Answer
I seem to have gotten this working now. Bluetooth seems a bit finicky. I'm recapping my steps in full in case someone else finds it useful (though its pretty much what I tried initially). This is for Android JB (4.2.2) on a Nexus 4 and Arch Linux 3.6.7-1, with bluez 4.101 on Gnome 3.6 (w/ gnome-bluetooth).
(this step may not do anything useful) Turn Bluetooth on Android off and disconnect your USB/Bluetooth Adapter from your Linux machine (or if you have an in built one, reset it using hcitool devname reset)
Connect/turn on your bluetooth adapter on Linux. Ensure your adapter is visible (can be set in gnome-bluetooth -- you should see a bluetooth system tray icon).
Turn on bluetooth on your Android device. Use Android to pair to the adapter (I was unable to pair the other way around from Linux). A dialog will come up asking you for a key. Put in any PIN you want. Gnome should pop up a notification asking you for a key; put in the same PIN you entered earlier. Your Android device and the key should be paired at this point.
In Linux, open up a terminal and check what bluetooth services are available by typing in
If you already have a serial port service, make a note of what channel it is. If you don't, you can add the service:
Now listen on this channel using rfcomm:
rfcomm will block, listening for a connection with a message like
Back on Android, I used the BlueTerm application (http://pymasde.es/blueterm/, also available freely on the google play store) though any similar application should work. Open up BlueTerm, go to options > Connect Device: select the paired adapter.
Hopefully, the application was able to connect. You'll see additional verification in the terminal where you blocked listening with a message like:
Anything you type into the BlueTerm app should be going to /dev/rfcomm0. You can see stuff show up as you type by opening up a new terminal and doing something like: