Raspberry pi 向けの液晶についているハードウェアボタンを使ってキーやマウスのエミュレーションをするためのもの。
ここではボタン3つにCtrl+C、Tab、Altを割り振っている。
このソースを使うためには xdotool と wiringPi が必要。
wiringPiは最近のRaspbianにはプリインストールみたいです。
wiringPiで使うGPIOのピン番号はオフィシャルの表を参照のこと。
xdotoolのキー名は /usr/include/X11/keysymdef.h のXK_で始まるものからXK_を抜いたものになります。
grep XK_ /usr/include/X11/keysymdef.h > key.txt
などとして書き出して参照するといいかも。
xdotoolはキー操作以外にもマウス操作やウィンドウ操作などもできるので興味があれば探ってみてください。
tftkey.c
#include <stdio.h>
#include <wiringPi.h>
#define btn1 1 // gpio 18
#define btn2 4 // gpio 23
#define btn3 5 // gpio 24
unsigned int state;
void main(void){
wiringPiSetup();
pinMode(btn1, INPUT);
pinMode(btn2, INPUT);
pinMode(btn3, INPUT);
pullUpDnControl(btn1,PUD_UP);
pullUpDnControl(btn2,PUD_UP);
pullUpDnControl(btn3,PUD_UP);
state = 0;
while(1){
if( digitalRead(btn1) == 0 ){
system("xdotool key Ctrl+c");
delay(50);
}
if( digitalRead(btn2) == 0 ){
system("xdotool key Tab");
delay(50);
}
if( digitalRead(btn3) == 0 ){
if( state == 0 ){
system("xdotool keydown Alt");
state = 1;
delay(50);
}
}
if( digitalRead(btn3) == 1 ){
if( state == 1 ){
system("xdotool keyup Alt");
state = 0;
delay(50);
}
}
delay(200);
}
}
コンパイル方法
gcc tftkey.c -o tftkey -l wiringPi
実行は権限ユーザで
sudo ./tftkey &
起動するたびにタイプするのが相当億劫なので何とか自動起動したい。
で、出来たのでやり方のせておきます。
概要としては上のtftkeyを起動するためのシェルスクリプトを書いて/usr/binに配置。LXDEのautostart機能を使って起動。という流れ。
まずシェルスクリプト
sudo nano /usr/bin/tftkey
などとして作る。
#!/bin/sh
sudo /home/pi/tftkey &
実行ファイルまで参照できるパスを環境によって書き換えてください。
わたしの実際のパスは /home/pi/data/src/tftkey/tftkey なんていう結構深いところにあったりします。
実行権限を付与。
sudo chmod +x /usr/bin/tftkey
次にautostartを設定。
nano /home/pi/.config/lxsession/LXDE-pi/autostart
@tftkey
とてもシンプル。
autostartには実行権限などは必要ありませんので保存したらおわり。
再起動してボタンが機能することを確認します。