I have a nice Android phone – the Sony Live With Walkman, affectionately called the ‘LWW’. The phone specs state that it has USB OTG – USB On-the-Go. OTG is a funky specification that allows phones (and other devices) to act both as a slave (so you can connect it to your computer an use it as external storage) or as a host. The host mode potentially enables you to use mice, keyboards, USB flash disks, and a whole host of other cool USB peripherals.
Now some phones have hardware that supports OTG, but it is not enabled in software. Presumably, this was because support for this was not widespread at the time of manufacture and the phone company didn’t want to go through the extra headache. Who knows! Anyway, other phones, like the LWW, support OTG natively, and you can simply plug in a mouse or a keyboard and use it with your phone. Of course you need an appropriate cable – apparently the Nokia CA-157 works fine (though I haven’t actually tested it).
Where I currently live, a USB OTG cable is not easily available, however, it isn’t really all that difficult to build your own. All that is needed is a USB Micro-B male (the same kind that your phone charger has) and a USB A-type female. Connect the four USB wires (Vcc, Gnd, D+, D-) between the connectors. You’ll notice that the Micro-B has got 5 contacts; one of these contacts is the ‘ID’ pin. If this pin is left unconnected (as is the case in a regular USB cable) the phone stays in slave mode. If, however, the ID pin is connected to Ground, the phone switches to host mode.
In the cable I made for myself I brought out the ID pin and the ground pin to a berg header. Now, if I want the device in host mode I jumper the header. If I want to use the cable as a regular USB cable, I simply disconnect the jumper (naturally, I’ll need a male-to-male USB cable for this).
Once my cable was ready I just plugged in a mouse and a keyboard using a USB hub. Both devices were detected immediately and I had absolutely no problems with them. USB flash drives were another story. Getting them to work was a total PITA, but then that was the point of this whole exercise :-P The process far from painless and the reason I’m documenting it is twofold – one: so that others may read this post and find it helpful; and two: a log, just in case I have to go through this again and I forget how I did this in the first place.
1. The first step is obviously to have a working USB OTG cable. Test it out with a mouse. If it works you’re good to go.
2. The next step is to root your phone. I followed the exact instructions noted in the first post of this thread. This is a nice method since you don’t have to unlock the bootloader (unlocking leads to a whole host of other problems – DRM keys get wiped, etc). Rooting itself was relatively painless; what took time was getting the damn ‘Windoze’ drivers to work. If you have Android’s PC Companion installed, then all the necessary drivers should have been installed by default. However the ADB (Android Debug Bridge) drivers did not install on my PC and I spent the better part of the morning trying to get it to work. I finally had to manually point Windows to the file (sa0102adb.inf) and force the install.
3. To check if the phone is truly rooted, scroll though the installed apps and search for the ‘Superuser’ icon. If you find this icon, it means you’re doing fine.
4. Install busybox.
5. Now download the USB Host Controller app (v0.44 at the time of writing this) from the Android market. Once installed, run it. The app will ask for superuser access. Once you grant it you’ll be presented with a wait screen (this took about 1 minute of waiting on my phone).
6. Connect your flash drive through the OTG cable. Ignore any ‘Unsupported device connected’ message. Click on the ‘USB’ tab. The flash drive should show up in the listing under ‘Connected Mass storage Devices’. Click on ‘mount’. I mount it to ‘/sdcard/ehdd’ so that AirDroid (which is a non-root file explorer) can read the files. However, if you use ES File Explorer or any other root browser you can mount the flash drive to a partition of your choice.
Note 1: I also tried using this method, which is actually a bit convoluted. The kernel Module Loader loaded usb-storage.ko fine, and Q5 USB Memory Manager would appear to mount my flash disk, but for some reason I couldn’t see the mounted folder using even a root explorer.
Note 2: when I first used this app it took a while to load the menu screen, but after that I was able to mount my drive properly. At the time of installing, I was also checking out other OTG mounting apps – Q5+Module Loader+usb-storage.ko . When I found that UHC worked fine, I uninstalled the other apps. Subsequently UHC would only show me that a USB device was present, but would not show the mounting option. I tried using UHC v0.42 as well. No go. Installing Module Loader and reloading usb-storage.ko was the fix. Q5 isn’t required.
Note 3: the first time I tried mounting the flash drive I got a “mkdir failed for –p” error. A simple workaround to this it to create the folder ‘ehdd’ yourself using a PC. Just plug your phone into the PC (using a regular cable) and make a new folder on the SD Card. After this I had no problems.
Anyway, now I can watch movies off flash drives, copy data from a friend’s HDD all on the move! Word of caution – don’t run very power hungry devices directly off the phone. You won’t damage it, but it’ll get hot real quick and the battery will run out of juice superfast.
The tools used are pretty generic (if I can use that term) and support a large number of devices. I don’t know why but OTG functionality is still relatively uncommon. I would think that phone manufacturers would have advertised the heck out of it. Or maybe they’re waiting to sell you a ‘value adding upgrade’ at some later date :-/