linux下遙控器的配置使用主要涉及到Linux的紅外驅動程序。LIRC (Linux Infrared Remoter Control),即是Linux下的專門控制處理紅外遙控信號的程序,包含了各種接口的紅外驅動、多個應用程序及LIRC庫。這裡討論的主要是其中應用於家電遙控器對PC機的控制方面。
紅外信號的來源可以是串口、並口、IRDA、ETHERNET等。LIRC下串口紅外的驅動叫做lirc_serial,它默認是檢測串口的DCD信號線,然後測量各種時間參數,並傳遞到上層的應用程序。同時LIRC自帶了許多應用工具,例如xmode2用X11的圖形接口畫出DCD上的矩形脈沖,irexec可以將遙控器按鍵對應為命令行上的某一條命令,irrecord獲得新的配置文件lircd.conf等。
l 安裝lirc驅動
$ cd ~/
$ mkdir lirc
$ cd lirc
$ sudo apt-get source lirc #下載 lirc-0.7.1pre2
$ cd lirc-0.7.1pre2
$ sudo ./setup.sh
然後根據相應的遙控器選擇,這裡選擇other serial port device 中的 serial,irq 和 io 地址要根據你的實際情況配置,這裡使用的是默認值。這一步也很重要,否則將無法正常使用。選擇完畢後選擇保存並配置,然後會運行configure,之後再執行:
$ sudo make ; make install
安裝完畢後會編譯內核模塊並安裝到 /lib/modules/2.6.8.1-epia1/misc 下。根據不同的硬件,模塊會有所不同。這裡是 lirc_dev.ko 和 lirc_serial.ko 兩個。
l 插入模塊
$ sudo apt-get install setserial
$ sudo setserial /dev/ttyS1 uart none
$ sudo modprobe lirc_serial irq=3 io=0x2f8
l 使用 mode2程序測試
$ sudo mode2 #console下命令
(如果安裝有usbmount(使用udev),設備節點的位置會發生改變,可用 mode2 -d /dev/lirc0測試。)用遙控器按下,看屏幕有無反應。如:
space 1471423 pulse 3149 space 2905 pulse 687 space 1334 pulse 686
這就表示安裝正確了。
l 配置遙控器
因為這裡使用的不是名牌遙控器(可到 http://www.lirc.org/ 下載別人已經做好的配置文件),就要使用 irrecord 命令生成。
$ sudo irrecord new.conf #此時lircd不能運行
按照提示一步步完成。這裡要注意,按鍵時間不要太短也不要太長,按照提示上的說法是每次按鍵要顯示1~10個點。即使這樣,最後使用得到的配置也可能有的鍵能用有的鍵不能用,這時一個取巧的做法是,尋找規律看什麼樣的情況下鍵是能用的,重復配置多次,將每次能用的鍵抽出來組成一個配置文件。
$ sudo cp new.conf /etc/lircd.conf #將生成的文件拷到/etc下,重命名為lircd.conf
$ sudo lircd #如果設備節點位置改變,則需要添加-d /dev/lirc0參數
運行 irw 測試配置文件是否正確,按鍵是否找到。
$ sudo irw
如按下power鍵,屏幕上顯示:
0000000000000001 00 power new.conf
如果每個鍵顯示的信息與配置文件中一致,則配置成功。
接下來將lirc_serial irq=3 io=0x2f8寫到/etc/modules中
l 配置.lircrc文件
.lircrc為lirc的應用程序配置文件,典型字段配置如下:
begin
prog = lirckeyd
remote = new.conf
button = power
repeat = 0
config = power
end
其中:
begin~end表示一個獨立的配置塊。
prog域的值表示使用該配置塊的程序名稱。
remote的值表示使用的遙控器名稱(參見lircd.conf中的定義)。
button 的值表示遙控器按鍵名稱(參見lircd.conf中的定義)。
repeat 的值表示按鍵的重復次數。
config 的值表示該按鍵對應的字符串,該字符串可以被prog定義的應用程序獲得。
需要注意的一點是remote的值一定要和lircd.conf中的name值一致,比如上面irrecord 生成的配置中name為new.conf,則這裡的remote值也要為new.conf。
l 將遙控器按鍵映射為x事件
接下來就需要將遙控器的按鍵與我們期望的操作對應起來。這時需要根據LIRC庫提供的接口編寫一定的映射程序。具體的實現過程將在其它文章討論。