Even though some Palm OS devices had USB controllers supporting host mode, Palm never capitalized on this feature. Thus, Palm OS devices could not accept generic USB keyboards, memory sticks or mice – a feature found on many Pocket PC devices. Palm’s only attempt at USB Host mastery consitet of a weird and short-lived USB peripheral called LifeDrive Camera Connector:
The boys behind the HackNDev Linux ports didn’t feel like accepting this restriction – and managed to get a Treo 650 talking to an USB mouse and keyboard:
I cut the USB connectors of an old dead motherboard with a jigsaw and soldered the D+ pins and D- pins of each connector respectively together. I then ran +5V from my PC because the Treo can’t supply it. Any +5V source should do, so a battery pack or some kind of charge powered by the treo’s 3.7V output would also work, the PC was just the closest handy source. I then configured USB port 2 in host mode and powered it up.
UP2OCR = UP2OCR_HXS | UP2OCR_HXOE;
UHCRHDA |= UHCRHDA_NOCP;
UHCHR &= ~(UHCHR_SSEP2 | UHCHR_SSE);
I found low-speed devices (like old mice) just work, but full-speed (USB1.1+ devices) fail to detect. There seems to be an extra strong pull-down on the USB+ pin, probably as part of the USB client hardware. To get around this we can turn on the Treo’s own usb client pullups and trick itself into realising there’s a full-speed device attached. Anyway here’s the result, a USB keyboard (with builtin hub) and mouse controlling the Treo directly
A video showing the setup in action can be found here – I am currently in contact with the developer and can confirm that this definitely isn’t a hoax!