ブログ

Armadillo-440:タッチスクリーンのタッチに対応したswmgr

at_kazutaka.bito
2015年9月15日 13時30分

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