Sync ปาล์ม / คลีเอ้ผ่านพอร์ตอินฟราเรด (IrDA) บนลินุกซ์

ขั้นตอน config

เริ่มแรกก็ตรวจสอบก่อนว่าเคอร์เนลมองเห็นพอร์ตอินฟราเรดแล้วหรือยัง โดยดูได้จากรายชื่อของพอร์ตสื่อสารที่ปรากฏใน dmesg:

[[email protected] kitt]$ dmesg | grep ttyS
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A

หนึ่งในนั้นควรจะเป็นพอร์ตอินฟราเรด เช่น เครื่องที่ผมใช้ ttyS01 (หรือ COM2) คือพอร์ตที่เป็นอินฟราเรด เวลาใช้งานพอร์ตนี้ก็จะติดต่อผ่านดีไวซ์ /dev/ttyS1 เมื่อรู้ว่าใช้ดีไวซ์ตัวไหนแล้วก็ไปตั้งใน/etc/sysconfig/irda อย่างนี้

[[email protected] kitt]$ cat /etc/sysconfig/irda
IRDA=yes
DEVICE=/dev/ttyS1
DISCOVERY=yes

มาถึงตรงนี้ก็เป็นอันเสร็จขั้นตอนการ config พอร์ตอินฟราเรดสำหรับลินุกซ์ หากรีบูตระบบหรือสั่ง service irda start ลินุกซ์ก็พร้อมที่จะติดต่อกับพอร์ตอินฟราเรดแล้ว :)

แต่ต้องทำความเข้าใจอีกนิดว่าพอร์ตอินฟราเรดนั้นสามารถทำงานได้หลายรูปแบบขึ้นกับว่าใช้โปรโตคอลในการสื่อสารแบบไหน .. กรณีปาล์ม/คลีเอ้จะเชื่อมต่อด้วยโปรโตคอลแบบเดียวกับพอร์ตสื่อสาร (ircomm-tty) ซึ่งจะทำงานผ่านดีไวซ์ /dev/ircomm0 ครับ .. หาก sync ปาล์ม/คลิเอ้ผ่านอินฟราเรดเป็นประจำก็ควรทำ symlink จาก /dev/pilot ไปที่ /dev/ircomm0 ไว้เลยครับ เพราะโปรแกรมส่วนใหญ่จะใช้ /dev/pilot เป็นดีไวซ์ในการสื่อสารโดยปริยาย

(as root)
[[email protected] kitt]# ln -sf /dev/ircomm0 /dev/pilot

ทีนี้เราก็พร้อมจะเริ่ม sync กันแล้ว :D

วิธี synchronize ข้อมูล

โปรแกรมพื้นฐานที่สุดในการนี้ก็คือ pilot-xfer (หากไม่มี ให้ติดตั้งแพคเกจ pilot-link) การ backup/sync/restore/install ใช้คำสั่งนี้เพียงคำสั่งเดียวเลย

  • pilot-xfer -b สำหรับ backup (ทุก file)
  • pilot-xfer -s สำหรับ sync (backup เฉพาะ update ที่มีการ update)
  • pilot-xfer -r สำหรับ restore
  • pilot-xfer -i foo.prc สำหรับติดตั้ง foo.prc ลงในเครื่องปาล์ม/คลีเอ้

หากสั่งงานเหมือนข้างบนนี้ pilot-xfer จะใช้ดีไวซ์ /dev/pilot ในการเชื่อมกับปาล์ม/คลีเอ้ และเก็บข้อมูลลง $HOME/.pilot ซึ่งเป็น default directory ที่ใช้เก็บข้อมูล .. รายละเอียดอื่นๆ (อีกเยอะ) ดูได้ด้่วยการสั่ง man pilot-xfer ครับ มันมีโปรแกรมสำหรับ อ่าน/เขียน todo, memo, datebook, etc. ด้วย

อื่นๆ

Diagram การเชื่อมต่อจะประมาณนี้ครับ:

pilot-link -> /dev/pilot -> /dev/ircomm0 -> [ircomm-tty -> ircomm -> irda] ->
/dev/irda0 -> Hardware IrDA device -> palm

ข้างใน [ … ] คือส่วนของเคอร์เนลครับ ถ้า compile irda เป็น kernel module แล้ว lsmod ดูจะเห็นว่ามี

ircomm-tty             38528   0  (autoclean)
ircomm                 18252   0  [ircomm-tty]
irtty                  10048   2  (autoclean)
irda                  191872   0  (autoclean) [ircomm-tty ircomm irtty]

กรณีที่ compile kernel เองและต้องการใช้พอร์ดอินฟราเรดตรวจดูตามนี้ครับ

CONFIG_IRDA=m
CONFIG_IRLAN=m
CONFIG_IRNET=m
CONFIG_IRCOMM=m
CONFIG_IRDA_ULTRA=y
CONFIG_IRDA_CACHE_LAST_LSAP=y
CONFIG_IRDA_FAST_RR=y
CONFIG_IRDA_DEBUG=y
CONFIG_IRTTY_SIR=m
CONFIG_IRPORT_SIR=m

ส่วน Dongle / FIR ก็ config ตามฮาร์ดแวร์ที่มีอยู่ครับ

บางระบบจะไม่ probe ircomm-tty อัตโนมัติ ถ้าเจอกรณีนี้ก็ต้อง modprobe/insmod เองครับ โดย

(as root)
[[email protected] kitt]# modprobe ircomm-tty

จากนั้นค่อยเริ่ม pilot-xfer

มี palm หลายๆ รุ่น (หรืออาจจะทุกรุ่น ?) ที่จำเป็นต้องตั้ง flow control ของ IR เป็น off ด้วย ไม่งั้น

มันไม่ sync ครับ วิธีตั้งก็

HotSync -> Options -> Connection Setup -> IR to a PC/Handheld ->
Edit ... -> Details ... -> Flow Ctl: -> Off

ถ้าติดปัญหาเรื่อง permission เช็คที่ /etc/security/console.perm ควรจะมีสองบรรทัดนี้

<pilot>=/dev/pilot /dev/usb/ttyUSB* /dev/ircomm*
....
<console> 0600 <pilot>      0660 root.uucp

ถ้าไม่มี หรือมีแต่ไม่เหมือน ก็แก้ไขให้ได้ตามนี้ครับ จากนั้นก็ logout แล้ว login เข้ามาใหม่