Armadillo-400シリーズは、タクトスイッチや、LCD拡張ボードのスイッチ(Armadillo-420を除く)について、 ボタン入力に応じて任意のコマンドを実行するswmgrというコマンドを使用できるようになっている。
参考) Armadillo-440 液晶モデル開発セットスタートアップガイド 第9章 インプットデバイス 9.2. swmgr
ここでは、swmgrをタッチスクリーンのタッチに対応するように改造する。
1.swmgrのソースコードの変更
swmgrのソースコード atmark-dist/vendors/AtmarkTechno/Armadillo-4x0.Common/swmgr/main.c を別のディレクトリにコピーする。(スイッチのボタン入力に応じたswmgrは残しておくため。)
コピーしたmain.cの30行目付近を下記のように変更する。
#define INPUT_DIR_PATH "/dev/input"
/*
#define EVENT_NAME "gpio-keys"
*/
#define EVENT_NAME "imx_adc_ts"
struct _sw {
char *name;
unsigned short code;
char *desc;
};
struct _sw sw[] = {
{"sw0", BTN_TOUCH, "Touch Panel"},
/*
{"sw0", KEY_ENTER, "SW1 on Armadillo-4x0 board"},
{"sw1", KEY_BACK, "SW1 on LCD extension board"},
{"sw2", KEY_MENU, "SW2 on LCD extension board"},
{"sw3", KEY_HOME, "SW3 on LCD extension board"},
*/
};
main.cの変更箇所の説明) ・EVENT_NAMEは、gpio-keysの代わりに、タッチスクリーンデバイスの"imx_adc_ts"に変更。 参考)"imx_adc_ts"は、下記ソースコードで定義されている。 linux-2.6.26-[version]/arch/arm/mach-mx25/device.c の85行目付近
struct platform_device mx25_adc_ts_device = {
.name = "imx_adc_ts",
.id = 0,
};
・キーのコードをタッチスクリーンのイベント"BTN_TOUCH"に変更。 参考)"BTN_TOUCH"は、下記に記載されている。 Armadillo-400 シリーズソフトウェアマニュアル 第9章 Linux カーネルデバイスドライバー仕様 9.7. タッチスクリーン
2.コンパイルして実行
オリジナルのswmgrと区別するためにswmgr_tsという実行ファイル名にコンパイルする。
[atde ~]$ arm-linux-gnueabi-gcc main.c -o swmgr_ts
swmgr_tsをArmadillo-440(開発セット等、LCD拡張ボードがついているもの)に置いて実行する。 下記例は、タッチスクリーンにタッチすると"hello"を出力する。(5回まで)
[armadillo ~]# chmod +x swmgr_ts
[armadillo ~]# ./swmgr_ts sw0 5 "echo hello"
hello