Bluetooth USB dongle on Linux

Digicom Palladio USB Bluetooth Dongle (CSR chipset based)
Unofficial Linux Support Page

 

by NERvOus

NERvOus using WindowMake on Acer Aspire 1300XV

TuxMobil - Linux on Laptops, Notebooks, PDAs and Mobile Phones



Disclaimer

This is an unofficial support page for the Digicom Palladio USB bluetooth dongle.  I do not assume any responsibility for errors
or omissions, or for damages resulting from the use of the information contained herein.

No liability for the contents of this documents can be accepted. Use the concepts, examples and other content at your own risk.

All copyrights are held by their by their respective owners, unless specifically noted otherwise. Use of a term in this document should not be regarded
as affecting the validity of any trademark or service mark. Naming of particular products or brands should not be seen as endorsements.



Scenario

The goal of this document is to explain how to connect to Internet through GPRS using a Bluetooth compatible mobile phone.

I tested the Palladio USB Dongle with the following setup:

Notebook: Acer Aspire 1300XV
Mobile Phone: Ericsson T39m / Ericsson T68
Bluetooth device: Palladio USB Dongle (CSR Chipset)

The notebook communicate with the Palladio dongle through the USB port. The dongle connect to the mobile phone using the Bluetooth wireless protocol. The mobile phone opens a PPP connection to Internet using GPRS.

The Palladio USB Dongle is based on the CSR Chipset. Thus  any information  available in this page should apply to any other CSR based bluetooth device.



The installation process

This document is not for beginners. I assume you are already familiar with the Linux Operating System.

Download the very latest kernel from http://www.kernel.org.

Compile it with everything you usually need plus the following items:
Bluetooth support:
Bluetooth subsystem support
L2CAP protocol support
SCO links support
RFCOMM protocol
RFCOMM tty support
BNEP protocol support
Bluetooth device drivers:
HCI USB driver
HCI VHCI (Virtual HCI device) driver

WARNING: do NOT compile the USB Bluetooth support in the USB support section. If you do, it will prevent the BlueZ support from working. Be careful about this. Do not compile the USB Bluetooth support! Use the HCI USB driver instead!!! You have been warned!

After installing the new kernel you should have the following modules:

in /lib/modules/2.*/kernel/net/bluetooth/
bluez.ko  bnep l2cap.ko  sco.ko rfcomm
in /lib/modules/2.*/kernel/net/bluetooth/bnep/
bnep.ko
in /lib/modules/2.4.20-mh5/kernel/net/bluetooth/rfcomm/
rfcomm.ko
in lib/modules/2.4.20-mh5/kernel/drivers/bluetooth/
hci_usb.ko  hci_vhci.ko

Get the following programs from http://bluez.sf.net:

bluez-hcidump
bluez-sdp
bluez-utils
bluez-lib

and compile them: usually it’s just a matter of ./configure && make && make install.

Now you are ready to load the following modules using modprobe:

bluez
hci_usb
l2cap
rfcomm

You should see something like this in your kernel logs:

BlueZ Core ver 2.2 Copyright (C) 2000,2001 Qualcomm Inc
Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
BlueZ HCI USB driver ver 2.1 Copyright (C) 2000,2001 Qualcomm Inc
Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
usb.c: registered new driver hci_usb
BlueZ L2CAP ver 2.1 Copyright (C) 2000,2001 Qualcomm Inc
Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
hub.c: new USB device 00:11.2-2, assigned address 2

Check if the Bluetooth dongle is active using:

hciconfig

hciconfig is the equivalent of ifconfig for Bluetooth devices. This is the output of hciconfig on my laptop:

hci0:   Type: USB
BD Address: 00:E0:98:85:2C:70 ACL MTU: 192:8  SCO MTU: 64:8
UP RUNNING PSCAN ISCAN
RX bytes:99 acl:0 sco:0 events:13 errors:0
TX bytes:296 acl:0 sco:0 commands:12 errors:0

Pay attention to the “UP” and “ISCAN” keywords. If there is no hci0 up, then run:

hciconfig hci0 up

Place your mobile phone near the Bluetooth dongle and put it in listening mode. On my Ericsson T39m I have to open the Extras/Bluetooth menu and then choose the Discoverable option.
The words “Discoverable for 3 minutes” should appear on the display. You’ll see the Bluetooth logo on the bottom right of the main display for the next 3 minutes at least.

Now it’s time to discover your mobile phone’s bluetooth hardware address. Run:

hcitool scan

This is the output of hcitool scan when my Ericsson T39m is near my laptop:

Scanning …
00:80:37:FE:5F:72       NERvOus T39 Mobile Phone

Write down this hardware address for later use. Check the Bluetooth connection by issuing:

l2ping 00:80:37:FE:5F:72

Here is the possible output of this command:

l2ping 00:80:37:FE:5F:72
Ping: 00:80:37:FE:5F:72 from 00:E0:98:85:2C:70 (data size 20) …
0 bytes from 00:80:37:FE:5F:72 id 200 time 43.61ms
0 bytes from 00:80:37:FE:5F:72 id 201 time 43.84ms
0 bytes from 00:80:37:FE:5F:72 id 202 time 38.49ms
0 bytes from 00:80:37:FE:5F:72 id 203 time 47.52ms
CTRL+C
4 sent, 4 received, 0% loss

Create a /dev/rfcomm0 character device with major number 216 and minor number 0:

mknod /dev/rfcomm0 c 216 0

In order to make your laptop and mobile phone communicate you have to choose a unique number sequence. This “password” is supposed to provide some degree of security to the communication.
In your mobile phone go to the Extras/Bluetooth menu and choose:
Discover

You’ll see “Searching…” for a while and then the Palladio USB Dongle should appear in the list. Press “YES” and then choose:
Add to paired

Enter a Passkey (only numbers are allowed, e.g. 4398534). Write the very same Passkey inside the /etc/bluetooth/pin file. Check that you have the following line in /etc/bluetooth/hcid.conf:

pin_helper /etc/bluetooth/pin-helper;

Restart hcid if you modify hcid.conf.
If you try and run /etc/bluetooth/pin-helper it should print the following string:

PIN:4398534

If it does not, check its permissions. Here is an example pin-helper script:

#!/bin/sh
PINFILE=/etc/bluetooth/pin
echo -n PIN:
cat $PINFILE

When you hit Discover, your mobile phone will show “Pairing” for a while. If you entered the correct Passkey you’ll be able to edit
the Name tag associated to the Palladio USB Dongle and the device will appear in the paired devices list.
Hit “YES” and you’ll see “Added to paired devices”.

Now open a channel to the mobile phone:

rfcomm bind 0 00:80:37:FE:5F:72 1

where 00:80:37:FE:5F:72 is the hardware address we mentioned before and the final 1 identifies the serial channel.

From now on, you can access your mobile phone through the /dev/rfcomm0 character file.

WARNING: you can’t use it like a modem. If you do, you won’t take advantage of the GPRS connection. You’ll be using a classical 9600bps GSM expensive connection.

Before continuing, you need to configure a GPRS connection on your mobile phone. You can get all the GPRS parameters by calling your telco operator. This is what I did to setup a GPRS connection on my Ericsson T39m with Wind S.p.A.

Settings/Data comm./Data accounts/Add account/GPRS Data:
Name: Wind GPRS
APN: internet.wind
UserID: empty
Password: empty

Save, then choose “Wind GPRS” and Edit:
Password request: Off
Allow calls: Automatic
IP address: empty
DNS address: 212.245.255.2
Adv. settings:
Authentication: Normal
Data compr.: on
Header compr: on
Quality of service: default values

In order to make your mobile phone connect to Internet through GPRS you have to send it the following command through a chat script (exactly like talking to a serial modem except for you are using /dev/rfcomm0 instead of /dev/ttyS0):

AT+CGDATA=”PPP”,X

where X is the number indicating the GPRS profile to be used. Be careful about this setting! To discover what is the correct value for X take your mobile phone and go to the Settings/Data comm./Data accounts menu. Choose the GPRS connection you previously setup and scroll till you find a line beginning with CID=. That’s the identification number of your GPRS connection. E.g. if you find a line like:
CID=3

then you have to use:

AT+CGDATA=”PPP”,3

as the dialing string.

Now you can setup a standard PPP dialup connection and use it as usual. However there are some things you have to take care of:

You have to disable hardware flow control and carrier detection. Add the following lines to /etc/ppp/options.rfcomm0 (or /etc/ppp/options to make them global)

-crtscts
local

Even if there is no password authentication needed to connect to Internet you can’t simply disable authentication at all.
Enable CHAP authentication and set the login and password to whatever you want.

You won’t receive lcp echo reply from your GPRS connection. Therefore you’ll have to disable lcp requests: if you don’t, your connection will always go down within a few minutes.

Find the following lines in your /etc/ppp/options file:

#lcp-echo-interval XX
#lcp-echo-failure XX

and remove them (put a # in front of them).

You can view my connection scripts and configuration files here:

/etc/ppp/options
/etc/ppp/options.rfcomm0
/etc/ppp/options.ttyS0
/etc/ppp/chap-secrets
/etc/ppp/peers/gprs
/etc/chatscripts/gprs-chat

In order to connect, I simply use

pppd call gprs



Hints for Debian/GNU Linux users

TBD



Links


Credits

Author:  Luca ‘NERvOus‘ Gibelli  (nervous -at- nervous -dot- it)

Thanks to: ???


Creative Commons License
This document is distributed under Creative Commons Licence.


First release: 20 november 2002
Last update: 11 January 2006

Share

Leave a Reply