[Armadillo:07946] armadillo440でのタッチイベント取得もれについて

Hideki Omiya email@hidden
2012年 3月 16日 (金) 15:55:33 JST


現在,armadillo440のLCD開発セットにて商用向け製品を作成しておりますが、
DebianOS上でGUIを作成しましたが、タッチパネルでのクリック取得に
問題が出ており、解決法を探しております。

実行環境は
OS Debian lenny
linux-2.6.26-at15のバージョンのカーネルを使用しております。

Debianはドキュメントに掲載されている方法でインストールしており、
Xwindowをインストールしております。
また、GUIの実行ライブラリとしてGTKを用いております。

自作のプログラムではタッチパネルの感度が悪くなっていて、タッチしても
そのpressイベントが取れないことがあります。
また、タッチしてマウスカーソルが一瞬タッチした位置に移動してから、タッチ前の
元の位置に戻ってしまうこともあります。

なにが悪いのかよくわからないのですが、
なにか情報ございましたらご教示いただきたいと思います。
実験したサンプルのソースは以下です。
サンプルでは画像を1枚表示して
画面タッチがあったらコンソールに出力するというものです。
ここで、button_press_eventというものが入ってこない場合があります。
また、マウスカーソルが移動しているにも関わらず、button_press_eventが
入ってこない場合もあります。

#include <gtk/gtk.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <linux/input.h>
#include <sys/time.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include <dirent.h>


gboolean Func_btn_press(GtkWidget  *widget,GdkEventButton  *event,gpointer 
user_data)
{
     gint cur_x,cur_y;

     cur_x = (gint)event->x;
     cur_y = (gint)event->y;
     printf("press x=%d y=%d\n",cur_x,cur_y);

     return true;
}

gboolean Func_btn_release(GtkWidget  *widget,GdkEventButton  *event,gpointer 
user_data)
{
     gint cur_x,cur_y;

     cur_x = (gint)event->x;
     cur_y = (gint)event->y;
     printf("release x=%d y=%d\n",cur_x,cur_y);

     return true;
}

int main (int argc , char *argv[]) {

  gtk_init (&argc , &argv);

  GtkWidget *event_box = gtk_event_box_new ();
  GtkWidget *window = gtk_window_new (GTK_WINDOW_POPUP );

  gtk_container_add (GTK_CONTAINER (window), event_box);
  gtk_container_set_border_width (GTK_CONTAINER (window), 0);

  GtkWidget *fixparent=gtk_fixed_new();
  gtk_container_add(GTK_CONTAINER(event_box), fixparent);
  GtkWidget *img_back=gtk_image_new_from_file ( 
"/usr/src/simplewin/background.png" );
  gtk_fixed_put(GTK_FIXED (fixparent), img_back, 0, 0);

  gtk_widget_add_events (event_box, GDK_BUTTON_PRESS_MASK);
  gtk_widget_add_events(event_box,GDK_BUTTON_RELEASE_MASK);


  gtk_signal_connect (GTK_OBJECT(event_box), "button_press_event",
                        G_CALLBACK(Func_btn_press), NULL);


  gtk_signal_connect (GTK_OBJECT(event_box), "button_release_event",
                        G_CALLBACK(Func_btn_release), NULL);

  g_signal_connect (G_OBJECT(window) ,"destroy" , G_CALLBACK(gtk_main_quit) 
, NULL);


  gtk_widget_realize (event_box);


  gtk_widget_show_all(window);


  gtk_main();


  return 0;
}














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