[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 メーリングリストの案内