Making the Nokia 770 Work With Windows Mobile 6
As I mentioned a couple of days ago I have been playing with a Nokia 770 lately to see if it is a viable addition to my gear bag. What I didn’t mention before was the difficulty I have been having tethering my HTC TyTn to it through Bluetooth. It may seem silly to use a full featured PDA phone to tether anything smaller than a laptop, but since the TyTn has 3G and the 770 has a decent web browser, it seems like they might make a good pair for those times when Pocket Internet Explorer isn’t enough. It’s worth a try, at least.
The first problem I encountered is that I have Windows Mobile 6 on my TyTn, and that version of the OS no longer has dialup networking support. According to Microsoft’s infinite wisdom, we should all be using personal area networking for Bluetooth tethering. It works really well with the Mac’s built-in Bluetooth stack (and with Vista, I would think), but smaller devices like the Nokia tablets and TomTom GPSes haven’t quite caught up yet. One of the clever hackers at xda-developers put together a package to restore the missing DUN support, so I installed that.
That wasn’t enough, though, as the 770 insists that the TyTn has no usable services on it. It is supposed to support DUN, file transfer, and SIM access, and all of those are enabled on the TyTn, but the 770 still refuses to pair with it using the last official OS release (Internet OS 2006). The 2007 hacker edition of the OS (the N800’s OS backported to the 770) worked better. The phone pairing applet still didn’t work, but you could pair the TyTn using the generic Bluetooth control panel. I don’t want to run the hacker edition OS on my 770, though, as it tends to be slower and more crash-prone on the 770 hardware, and seems to be missing some core features like streaming audio playback. So I went back to the 2006 edition, and today I finally fixed the problem.
My solution isn’t exactly for the faint of heart, though, as it involves directly editing configuration files. Full details after the jump, if only so I can remember what the heck I did in case I ever have to re-flash my 770…
Rationalizing that the problem is in the pairing applet and not in the actual Bluetooth stack, I decided to try to figure out where the Bluetooth settings are stored on the 770 and create the proper configuration myself. Most of the apps on the 770 use the GConf configuration registry, which is stored as a tree of directories and XML data in /var/lib/gconf. Of course, to even get to /var/lib/gconf you’ll need a shell, and for that I will refer you to the InstallSSH2006 page on the Maemo Wiki. It’s actually quite simple if you’re at all familiar with Debian package management.
In order to find out the actual settings used for a Bluetooth phone, I paired the 770 with a different phone. I recommend doing this if you can, so that you can just copy and edit its configuration. You’ll also need to know the Bluetooth device address of the phone you want to pair; I got this from the system preferences of my Mac, which was paired with my TyTn already.
In the GConf registry, the first place to copy settings is in /var/lib/gconf/system/bluetooth/device. You’ll notice a subdirectory here with the device ID of each paired device, so copy or rename an existing one to match your new device’s ID. Inside that subdirectory (mine is named 00:12:D1:68:A0:D3), edit the %gconf.xml file and change the device name down near the bottom. Here’s the complete %gconf.xml for my TyTn, originally copied from the pairing for a Windows Mobile 5 smartphone:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?xml version="1.0"?> <gconf> <entry name="dun_cdma" mtime="1188795915" type="bool" value="false"> </entry> <entry name="dun_umts" mtime="1188795915" type="bool" value="false"> </entry> <entry name="dun_gsm" mtime="1188795915" type="bool" value="true"> </entry> <entry name="services" mtime="1188795915" type="list" ltype="string"> <li type="string"> <stringvalue>0x1000</stringvalue> </li> <li type="string"> <stringvalue>0x110C</stringvalue> </li> <li type="string"> <stringvalue>0x1112</stringvalue> </li> <li type="string"> <stringvalue>0x111F</stringvalue> </li> <li type="string"> <stringvalue>OPP</stringvalue> </li> <li type="string"> <stringvalue>DUN</stringvalue> </li> </entry> <entry name="icon" mtime="1188795915" type="string"> <stringvalue>qgn_list_btno_phone_new</stringvalue> </entry> <entry name="class" mtime="1188795915" type="int" value="524"> </entry> <entry name="name" mtime="1188795915" type="string"> <stringvalue>Robs_TyTn</stringvalue> </entry> </gconf> |
The next edit is in /var/lib/gconf/system/bluetooth/%gconf.xml, where you can add the new device ID to the list. I’m not entirely sure this is necessary, and I may have done it wrong anyway, as the TyTns name still did not show up in the phone selector after doing this. An example of my changed file is below:
1 2 3 4 5 6 7 8 9 10 11 | <?xml version="1.0"?> <gconf> <entry name="devices" mtime="1188795915" type="list" ltype="string"> <li type="string"> <stringvalue>00:12:37:7A:7E:9D</stringvalue> </li> <li type="string"> <stringvalue>00:12:D1:68:A0:D3</stringvalue> </li> </entry> </gconf> |
The final place you need to make a change is in /var/lib/gconf/system/osso/connectivity/BT. In here, edit the %gconf.xml file to reflect the changed device ID. This was the change that made the TyTn show up in the phone selection list, as the only option. For example:
1 2 3 4 5 6 7 8 9 10 11 | <?xml version="1.0"?> <gconf> <entry name="preferred" mtime="1188796930" type="string"> <stringvalue>00:12:D1:68:A0:D3</stringvalue> </entry> <entry name="selected" mtime="1188795915" type="list" ltype="string"> <li type="string"> <stringvalue>00:12:D1:68:A0:D3</stringvalue> </li> </entry> </gconf> |
After all of this, the TyTn shows up as the currently selected phone, and I can connect to it using the Cingular GPRS settings created by the 770s operator setup wizard. All is not perfect however, since there seem to still be some problems with dialup networking on Windows Mobile 6 — sometimes it won’t connect at all until I reboot the TyTn, and then even if I explicitly disconnect, the TyTn doesn’t know the 770 is gone, and can’t open its own data connections because the DUN connection is still in use. It behaved that way with the 2007 hacker edition OS too, so I blame it on Windows Mobile, not the 770.
Now, I can use the 770 with my phone when I’m away from WiFi, without using an unofficial and potentially unstable OS release. Will it be worth the trouble? We’ll have to see…
September 10th, 2007 at 4:40 pm
I have read your article with Interest and hope I will be able to perform same operation as I also have a Nokia N770 + HTC TYTN With WM6 !