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