Nokia 6310i and Bluetooth with Linux using T-Mobile
Here is how I got my Nokia 6310i phone to work with Bluetooth and the
T-Mobile Internet GPRS using a Belkin F8T001 USB adaptor. The same
configuration also worked with a D-Link DWB-120M Bluetooth USB adpator.
Your mileage may vary.
I chose the 6310i handset because it has tri-band GSM, Bluetooth, good
sound quality and the standard Nokia menus that I've been using for years.
It does not come in wild colors or have a camera which I don't care for
anyways. I read a lot of reviews online before buying the phone, which
all rated this phone very highly. I chose the Belkin F8T001 because of its
extended range (100m), though this does not seem to work well through walls.
Before you go through the trouble of setting all this stuff up, you need to
know what to expect from GPRS in advance so that you won't be disappointed.
Do not expect to get near the 56Kbps speed that is advertised - this is
a theoretical maximum and it is unlikely that you'll ever get that much
throughput as it depends on network conditions and the type of phone you
are using. Distract yourself from thinking about how slow the service
is by marveling about how cool you look and feel while using a wireless
Internet connection over a wireless Bluetooth connection.
The throughput you'll get is similar to that of a noisy 28.8Kbps dialup
connection, but with much higher latency. Ping times average around 700ms
to 800ms. The best throughput that I have seen is just under 4KBps, which
I measured using FTP over a 1/2 hour time period. In reality using a web
browser to look at web pages will yield much less throughput. What the
service is useful for though is checking mail when you are traveling and are
not near any other form of Internet access, say if you were stuck in an
airport that did not have a T-Mobile HotSpot.
I have also found GPRS on T-Mobile's network to be extremely unreliable.
Quite often my phone is not able to initiate a GPRS connection, or takes
a long time to fetch web pages with WAP and just sits there. This is in
addition to the high latency mentioned above.
Basically, you have to do these steps to enable Internet access over your phone:
My Nokia firmware version is "V 5.50 03-03-03". There are some reports
of problems with Bluetooth under older firmware versions. You can find
out the firmware version of your handset by dialing "*#0000#".
- Configure your handset (once)
- Configure USB and Bluetooth support for Linux (once)
- Insert the Bluetooth USB adaptor and load the firmware (every time)
- Make a Bluetooth connection between your computer and the phone (every time)
- Configure PPP (once)
- Start PPP (every time)
In my area, T-Mobile does not offer this particular Nokia phone so
you need to configure your handset to work with T-Mobile if you did not get the phone from T-Mobile. Skip this section if your phone works already with T-Mobile, or you are not using T-Mobile.
T-Mobile offers two GRPS options in the United States from what I understand:
- T-Mobile Internet
T-Mobile Internet service enables devices, such as a PDA or laptop,
to use the phone's GPRS capabilities. You need to enable this on your
T-Mobile account first. Note: this is not the T-Mobile HotSpot service,
which is 802.11b wireless access.
Setup your phone as instructed at T-Mobile's web site
under "Help > Services > T-Mobile Internet" (currently here). I followed their instructions and here is what I set.
Go to "Menu->Settings->GPRS modem settings->Edit active access point" on your phone and set the following options:
Alias for access point:
GPRS access point:
You can setup other access points in case you need to change them on the fly
but I have not found a need to do so with T-Mobile.
Note: In firmware version "V 5.51 08-07-03", this menu option
has changed to "Menu->Services->Settings->Edit active service settings".
t-zones is GPRS for your phone only, which enables you to get content
to your phone but does not let other devices use your phone's GPRS as
far as I can tell. t-zones came free with my T-Mobile Internet service
but I haven't found it that useful so far, mainly because it is so slow.
But you should spend some time playing around with it.
Setup your phone as instructed at T-Mobile's web site
under "Help > Services > t-zones" (currently here). I followed their instructions and here is what I set.
Go to "Menu->Services->Settings->Edit active service settings" on your phone and set the following options:
GPRS access point:
Once you get back to "Menu->Services", select "Home" and off you go. You can
setup multiple service profiles in case you need to change them on the
fly but I have not found a need to do so with T-Mobile.
Once you have the phone setup, you need to get Bluetooth working under Linux.
There is a lot of help at Bluez. You need to get and install the following software:
Follow the installation instructions that come with each package. If you
want you can install the other Bluez packages that are available but I
did not in order to get my phone working as I describe here.
- Linux 2.4.21 kernel (with USB and Bluetooth support enabled)
- bluez-bluefw (firmware for the Broadcom chip in the Belkin F8T001 USB adaptor)
When Linux sees the Bluetooth adaptor when you insert it, then USB and Bluetooth support is working. Then you'll need to do the following
steps in order to get Linux to talk to the phone each time you want to
use GPRS. There is probably a way to automate this process. Make sure
you are root.
- Insert the Bluetooth adaptor into a USB port. Skip to the next section if you are not using a USB adaptor with a Broadcom chip.
Check which USB device number it was assigned. In the output below, it is 006.
doom# ls /proc/bus/usb/001/
0 ./ 0 ../ 1 001 0 006
On my laptop it always appears as a device under
is USB bus number 001. You'll probably see lots of messages from
hotplug stating that the device is not supported. Don't worry about them, the messages appear because
hotplug doesn't have any configurations for this particular adaptor. Like I said, this could probably be automated.
Load the firmware to the adaptor by specifying the bus and device number. On my laptop the device number changes every time I insert it.
doom# bluefw usb 001/006
bluefw: Loading firmware to usb device 0a5c:2033
bluefw: FW loaded
- Fire up the HCI daemon. I've found that you need to do this fairly quickly because
hotplug disables the adaptor after a few seconds unless
hcid is running.
There are lots of options for
hcid. Here is what I used in
killall -HUP hcid if you change options to reload it.
# HCI daemon configuration file.
# HCId options
# Automatically initialize new devices
# Security Manager mode
# none - Security manager disabled
# auto - Use local PIN for incoming connections
# user - Always ask user for a PIN
# Pairing mode
# none - Pairing disabled
# multi - Allow pairing with already paired devices
# once - Pair once and deny successive attempts
# PIN helper
# Default settings for HCI devices
# Local device name
# %d - device id
# %h - host name
# Local device class
# Default packet type
# Inquiry and Page scan
iscan enable; pscan enable;
# Default link mode
# none - no specific policy
# accept - always accept incoming connections
# master - become master on incoming connections,
# deny role switch on outgoing connections
# Default link policy
# none - no specific policy
# rswitch - allow role switch
# hold - allow hold mode
# sniff - allow sniff mode
# park - allow park mode
# Authentication and Encryption
At this point, the
hci0 interface should be up. Check it using this command.
doom% hciconfig -a
hci0: Type: USB
BD Address: 00:03:C9:2E:5D:2A ACL MTU: 377:10 SCO MTU: 16:0
UP RUNNING PSCAN ISCAN
RX bytes:5791 acl:55 sco:0 events:213 errors:0
TX bytes:4160 acl:44 sco:0 commands:129 errors:0
Features: 0xff 0xfd 0x05 0x00
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: HOLD SNIFF PARK
Link mode: ACCEPT MASTER
Service Classes: Unspecified
Device Class: Computer, Uncategorized
HCI Ver: 1.1 (0x1) HCI Rev: 0x2 LMP Ver: 1.1 (0x1) LMP Subver: 0xf07
Manufacturer: Broadcom Corporation (15)
- Next, turn on Bluetooth on your phone. Then, see if Linux sees it on your Bluetooth network. For the BD address in the next commands, insert the one that is returned for your phone. Each Bluetooth device will have a different BD address.
doom# hcitool scan
00:02:EE:6E:14:C7 Nokia 6310i
doom# hcitool info 00:02:EE:6E:14:C7
Requesting information ...
BD Address: 00:02:EE:6E:14:C7
Device Name: Nokia 6310i
LMP Version: 1.1 (0x1) LMP Subversion: 0x23b
Manufacturer: Nokia Mobile Phones (1)
Features: 0xbf 0x28 0x21 0x00
<3-slot packets> <5-slot packets> <encryption> <slot offset>
<timing accuracy> <role switch> <sniff mode> <SCO link>
<HV3 packets> <CVSD>
If you like, ping the phone some.
doom# l2ping 00:02:EE:6E:14:C7
Ping: 00:02:EE:6E:14:C7 from 00:03:C9:2E:5D:2A (data size 20) ...
0 bytes from 00:02:EE:6E:14:C7 id 200 time 17.83ms
0 bytes from 00:02:EE:6E:14:C7 id 201 time 19.02ms
0 bytes from 00:02:EE:6E:14:C7 id 202 time 17.83ms
0 bytes from 00:02:EE:6E:14:C7 id 203 time 17.64ms
0 bytes from 00:02:EE:6E:14:C7 id 204 time 23.47ms
0 bytes from 00:02:EE:6E:14:C7 id 205 time 15.25ms
0 bytes from 00:02:EE:6E:14:C7 id 206 time 20.08ms
0 bytes from 00:02:EE:6E:14:C7 id 207 time 17.90ms
8 sent, 8 received, 0% loss
Once Linux sees the handset, you can continue to this next step.
- Now, you need to use
rfcomm to connect Linux to the phone. If you don't
/dev/rfcomm0, create it using this command first.
doom# mknod -mode 666 /dev/rfcomm0 c 216 0
Before you connect to the phone, you need to choose a five digit PIN.
The program to enter the PIN runs under X Windows and is called
/bin/bluepin and will pop up automatically when you make a
Bluetooth connection. If you would like to supply a static PIN without
entering it every time, set your PIN to something other than 12345 in the
following script that goes in
pin_helper /usr/local/bin/bluez_pin_simple; in
/etc/bluetooth/hcid.conf. Don't forget to
Once you have chosen a PIN, then you run this command to set up an RFCOMM
connection to the phone.
doom# rfcomm connect rfcomm0 00:02:EE:6E:14:C7
Connected /dev/rfcomm0 to 00:02:EE:6E:14:C7 on channel 1
Press CTRL-C for hangup
On your phone, you will be asked to accept the connection and then will
be prompted for the PIN the first time you establish a pairing between
your computer and the phone. At this point, the connection should be established successfully.
doom# hcitool con
< ACL 00:02:EE:6E:14:C7 handle 6 state 1 lm MASTER ENCRYPT
The following log messages will appear if you have syslog enabled.
Aug 17 23:22:29 doom hcid: pin_code_request (sba=2A:5D:2E:C9:03:00, dba=C7:14:6E:EE:02:00)
Aug 17 23:22:30 doom hcid: link_key_notify (sba=2A:5D:2E:C9:03:00)
Aug 17 23:22:30 doom hcid: Replacing link key 00:03:C9:2E:5D:2A 00:02:EE:6E:14:C7
- When the RFCOMM connection is made over Bluetooth, you can then run
PPP over the connection for wireless Internet access. But you need to configure PPP first.
Put this into
connect '/usr/sbin/chat -f /etc/ppp/chat -r /dev/console'
This goes into
ABORT '\nNO ANSWER\r'
ABORT '\nNO CARRIER\r'
ABORT '\nNO DIALTONE\r'
# send the init string
# dial the access number
Note: You may also want to add
\rAT+cgdcont=1,,"internet2.voicestream.com" as the init string
(recommended by T-Mobile).
Note: The access number may be region dependent, check with
T-Mobile for the correct access number in your region.
To enable PPP to automatically get the DNS server information and put
it into your
/etc/resolv.conf, create these scripts and
chmod +x to them.
if [ -f /etc/ppp/resolv.conf ]; then
mv /etc/resolv.conf /etc/resolv.conf-saved-by-pppd
mv /etc/ppp/resolv.conf /etc/resolv.conf
if [ -f /etc/resolv.conf-saved-by-pppd ]; then
mv /etc/resolv.conf-saved-by-pppd /etc/resolv.conf
Presently the nameservers returned are 184.108.40.206 and 220.127.116.11.
You'll need to use these nameservers because HTTP connections on port
80 are redirected to a proxy server that compresses content called
getmorespeed.tmobile.com which is only resolvable through
the supplied DNS servers. You can read about the proxy on T-Mobile's Internet
Accelerator help page, but you should experiment with disabling the proxy
to see if that works better for you.
- Finally, all you have to do is to start PPP.
doom# pppd call gprs
If you have syslog enabled you'll see something similar to these messages.
Aug 17 23:27:21 doom pppd: pppd 2.4.1 started by root, uid 0
Aug 17 23:27:23 doom pppd: Serial connection established.
Aug 17 23:27:23 doom pppd: using channel 14
Aug 17 23:27:23 doom pppd: Using interface ppp0
Aug 17 23:27:23 doom pppd: Connect: ppp0 < /dev/rfcomm0
Aug 17 23:27:23 doom /etc/hotplug/net.agent: assuming ppp0 is already up
Aug 17 23:27:24 doom pppd: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x48b51929> <pcomp> <accomp>]
Aug 17 23:27:24 doom pppd: rcvd [LCP ConfRej id=0x1 <magic 0x48b51929> <pcomp> <accomp>]
Aug 17 23:27:24 doom pppd: sent [LCP ConfReq id=0x2 <asyncmap 0x0>]
Aug 17 23:27:24 doom pppd: rcvd [LCP ConfAck id=0x2 <asyncmap 0x0>]
Aug 17 23:27:26 doom pppd: rcvd [LCP ConfReq id=0x0 <auth pap> <mru 1500> <asyncmap 0xa0000>]
Aug 17 23:27:26 doom pppd: sent [LCP ConfRej id=0x0 <auth pap>]
Aug 17 23:27:26 doom pppd: rcvd [LCP ConfReq id=0x1 <mru 1500> <asyncmap 0xa0000>]
Aug 17 23:27:26 doom pppd: sent [LCP ConfAck id=0x1 <mru 1500> <asyncmap 0xa0000>]
Aug 17 23:27:26 doom pppd: sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <compress VJ 0f 01> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]
Aug 17 23:27:26 doom pppd: sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
Aug 17 23:27:26 doom pppd: rcvd [IPCP ConfReq id=0x0 <addr 10.6.6.6>]
Aug 17 23:27:26 doom pppd: sent [IPCP ConfAck id=0x0 <addr 10.6.6.6>]
Aug 17 23:27:26 doom pppd: rcvd [LCP ProtRej id=0x0 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]
Aug 17 23:27:28 doom pppd: rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>]
Aug 17 23:27:28 doom pppd: sent [IPCP ConfReq id=0x2 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]
Aug 17 23:27:28 doom pppd: rcvd [IPCP ConfNak id=0x2 <addr 10.145.29.223> <ms-dns1 18.104.22.168> <ms-dns3 22.214.171.124>]
Aug 17 23:27:28 doom pppd: sent [IPCP ConfReq id=0x3 <addr 10.145.29.223> <ms-dns1 126.96.36.199> <ms-dns3 188.8.131.52>]
Aug 17 23:27:28 doom pppd: rcvd [IPCP ConfAck id=0x3 <addr 10.145.29.223> <ms-dns1 184.108.40.206> <ms-dns3 220.127.116.11>]
Aug 17 23:27:28 doom pppd: local IP address 10.145.29.223
Aug 17 23:27:28 doom pppd: remote IP address 10.6.6.6
Aug 17 23:27:28 doom pppd: primary DNS address 18.104.22.168
Aug 17 23:27:28 doom pppd: secondary DNS address 22.214.171.124
Aug 17 23:27:28 doom pppd: Script /etc/ppp/ip-up started (pid 19164)
Aug 17 23:27:28 doom pppd: Script /etc/ppp/ip-up finished (pid 19164), status = 0x0
When the PPP connection is started, your phone will say "Creating GPRS
connection". Once PPP is up you'll see "G ((*))" in the top left corner
of the phone, indicating that GPRS and Bluetooth are both active.
- When you are done, be sure to kill the PPP and HCI daemon. If you
ip-down.local scripts then PPP will restore your
resolv.conf. Also, remove the Bluetooth USB adaptor and turn off
Bluetooth on your phone.
doom# killall pppd
doom# killall hcid
I gathered a lot of information from these pages. They may help you too.
Here is an interesting observation from Stefan Mashkevich:
One more remark... it *seems* to me that whatever is in
"Menu->Services->Settings->Edit active service settings" isn't even
relevant for using the thing as a modem (don't know about t-zones: I
didn't get them to work, but I couldn't care less). At least when I
(following techsupport's suggestions) changed "GPRS access point" in
there from internet2 to internet3, nothing changed; but when I did the
same change in the AT string, it stopped establishing the GPRS connection.
So, in my case, it is the AT string that's crucial (I wish I knew what
exactly it means).
Thanks to the following people for contributing information to this page.