Sync Palm via IrDA

palm

I have complained the lame Palm Sync socket for quite a long time, eventually, I decide to try HotSync my Palm via IrDA on my Dell Latitude D600, which is equipped with SMSC IrDA Controller.

Prepare Hardware

The very first thing is to enable IrDA in the BIOS setting, since D600 has a COM1 serial port, IrDA is then assigned to COM2, aka /dev/ttyS1 in Linux.

BIOS setting
BIOS setting

Boot to the overweighed Windows XP, and check the IRQ/DMA/SIR/FIR in Device Manager.

Device Manager
Device Manager

The findchip in irda-utils package is supposed to probe the system, unfortunately, it does not work in D600.

Build the Kernel

Just follow this HOWTO to build IrDA modules.

--- IrDA (infrared) subsystem support
--- IrDA protocol
 IrLAN protocol
 IrNET protocol
 IrCOMM protocol
[*] Ultra (connectionless) protocol
--- IrDA options
[*] Cache last LSAP
[*] Fast RRs (low latency)

--- SIR device drivers
 IrTTY (uses Linux serial driver)
 IrPORT (IrDA serial driver)
--- FIR device drivers
 SMSC IrCC (EXPERIMENTAL)

SIR stands for Standard IR, which uses generic serial protocol to talk with IrDA; FIR needs specific driver to achieve Fast IR. Although IrLAN and IrNET are rarely used, it does not hurt to build them as modules.

Test drive

Since /dev/ttyS1 is also driven by serial, we need explicitly to tell the kernel this device is controlled by irda:

sudo setserial /dev/ttyS1 uart none

Then configure the module options in a Gentoo way, put the information collected from Windows into /etc/modules.d/irda:

options smsc-ircc2 ircc_irq=3 ircc_dma=3 ircc_sir=0x2f8 ircc_fir=0x280
alias irda0 smsc-ircc2

execute modules-update

sudo modprobe smsc-ircc2
sudo modprobe irda
sudo modprobe rcomm
sudo modprobe ircomm_tty
sudo /usr/sbin/irattach irda0 -s

Open another console and run

sudo irdadump

If everything is OK, some packets are dumped when the Palm is close to the laptop’s IR port.

Sync the Palm

I am using korganizer/kontact/kpilot suite. Configure the Pilot device as /dev/ircomm0; Uncheck Do not sync when screensaver is active

Glue all pieces together

Inspired by Gentoo official irda init script and this. I develops the /etc/init.d/irda-fir, and /etc/conf.d/irda-fir. Add irda-fir to default runlevel if Palm is a part of your life.

Further work

[1] Are we still using the high-speed FIR if the kopete is configured to access /dev/ircomm0? Since FIR maps IR port to the network interface, irda0, I have tried to configure the Pilot devcie to net:irda0 or net:any according to this undocumented hack, but it does not work and kpilot hangs sometimes.

I still prefer the USB sync when downloading huge files for the sake of speed. Any idea to make dbus/ivman to link /dev/pilot to /dev/ircomm0 or /dev/ttyUSB0 automatically?