[Armadillo:06123] Re: Armadillo500-FX  directFBサンプルのタッチパネルの座標がずれる

平野 雅俊 email@hidden
2010年 11月 8日 (月) 11:30:14 JST


平野です。
自己解決しましたので、解決方法を記しておきます。

IDirectFBInputDevice のGetXY()関数を使うと左上(200,150)-右下(3830,3870)
の座標データが取得できます。

IDirectFBDisplayLayerのGetCursorPosition()関数や、サンプルソースのように
イベント取得用の構造体(DFBInputEventのaxisabs)では正しく取得できない
ようです。

GetXYで取得できるタッチ情報は以下のファイルの構造体で定義されています。
(参考:http://armadillo.atmark-techno.com/howto/armadillo-500-fx-hardware-customization)

/home/atmark/atmark-dist-20090318/linux-2.6.x/arch/arm/mach-mx3/armadillo500fx.c

static const struct ads7846_platform_data armadillo500fx_ts_info = {
        .model                  = 7846, /* TSC2046 */
        .vref_delay_usecs       = 100,  /* internal, no capacitor */
        .get_pendown_state      = armadillo500fx_get_pendown_state,
        .x_min                  = 200,  /* min/max: depend on spi clock */
        .x_max                  = 3830,
        .y_min                  = 150,
        .y_max                  = 3870,
        .pressure_min           = 0,
        .pressure_max           = 1300,
        .debounce_max           = 10,
        .debounce_tol           = 5,
        .penirq_recheck_delay_usecs = 10,
        .filter_all_vals        = armadillo500fx_filter_all_vals,
        .zero_p_ignore_times    = 8,
        .vbatt_adjust           = armadillo500fx_vbatt_adjust,
        .calc_rt                = armadillo500fx_calc_rt,
};

---
これを踏まえてコーディングすると以下のようになります。
(※)関係のあるところだけ抜粋します。

IDirectFB 		*dfb = NULL;		///< DirectFBのメインインターフェース
IDirectFBInputDevice	*mouse = NULL;		///< マウス
IDirectFBEventBuffer	*mouseEvent = NULL;	///< マウスイベントバッファ

int main() {
	DFBInputEvent	stEvent;
	int		iX;
	int		iY;

	[略]

	// マウスカーソルの設定
	DFBCHECK( dfb->GetInputDevice ( dfb, DIDID_MOUSE, &mouse) );
	DFBCHECK( mouse->CreateEventBuffer( mouse, &mouseEvent )); 

	while (mouseEvent->GetEvent( mouseEvent, DFB_EVENT(&stEvent) ) == DFB_OK) {
		if( stEvent.type != DIET_UNKNOWN ) {
			// タッチ情報取得
			DFBCHECK(mouse->GetXY(mouse, &iX, &iY ));
			// X座標補正
			iX = (int)((iX - 200) / ((3830 - 200 ) / 640.0f));
			// Y座標補正
			iY = (int)((iY - 150) / ((3870 - 150 ) / 480.0f));
			printf("Touch! = (%d,%d)\n", iX, iY);	
		}
	}

}

平野 雅俊 <email@hidden> wrote:

> いつもお世話になっております。
> Armadillo500-FXで開発を行っている平野と申します。
> 
> 以下のURLを参考にdirectFBを組み込みました。
> http://armadillo.atmark-techno.com/articles/sd-a500-embedded-course-ch4
> 
> directFBインストール後、サンプルプログラム(df_input)を
> 動かしたのですが、タッチスクリーンを押した位置と実際に
> カーソル表示される位置がずれてしまいます。
> 
> a500fx-demoでは正しく動作するので、タッチスクリーンの
> ドライバをdirectFBで上手く読み込めていないと思うのですが、
> どこをどうすればいいのか分かりません。
> 
> 初歩的な質問で申し訳ないのですが、原因と対処法を教えて
> 頂きたく思います。
> 
> ---[以下起動ログ]---
> [email@hidden (ttymxc0) ~]# df_input
> 
>      =======================|  DirectFB 1.0.1  |=======================
>           (c) 2001-2007  The DirectFB Organization (directfb.org)
>           (c) 2000-2004  Convergence (integrated media) GmbH
>         ------------------------------------------------------------
> 
> (*) DirectFB/Core: Single Application Core. (2010-10-28 07:18)
> (*) Direct/Thread: Running 'VT Switcher' (CRITICAL, 1263)...
> (*) Direct/Thread: Running 'Keyboard Input' (INPUT, 1265)...
> (*) DirectFB/Input: Keyboard 0.9 (directfb.org)
> (*) Direct/Thread: Running 'Linux Input' (INPUT, 1266)...
> (*) DirectFB/Input: mxckpd (1) 0.1 (directfb.org)
> (*) Direct/Thread: Running 'Linux Input' (INPUT, 1267)...
> (*) DirectFB/Input: ADS784x Touchscreen (2) 0.1 (directfb.org)
> (!) Direct/Modules: Could not open module directory `/usr/local/lib/directfb-1.0-0/gfxdrivers'!
>     --> No such file or directory
> (*) DirectFB/Graphics: Generic Software Rasterizer 0.6 (directfb.org)
> (*) DirectFB/Core/WM: Default 0.3 (directfb.org)
> (*) Direct/Interface: Loaded 'FT2' implementation of 'IDirectFBFont'.
> (*) Direct/Interface: Loaded 'PNG' implementation of 'IDirectFBImageProvider'.
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo






armadillo メーリングリストの案内