linux运行有input的程序,编写Linux下Input设备的检测程序

最近玩了下Android-x86的eclair,主题风格相对之前的1.6好看了很多,而且还加了不少之前没有的功能。但是触摸屏不能用,在终端下用getevent命令查看事件信息,发现得到的绝对坐标有很大出入(4096*4096)。于是想自己试着去解决这个问题。同时在Ubuntu下测试,发现居然没有getevent命令,当然可以用cat /dev/inpu/eventX查看事件信息,但是显示出来的是一堆乱码,怎么办?那就自己编写个Linux输入设备的测试小程序来检测问题所在吧,最后测试结果发现和在Android下一样的问题-没有校正,总算也小有成就。接下来应该再dig触摸屏的校正问题:-)

现在把写的测试程序放上来供大家参考:

代码中宏定义KEY_DEV、MOU_DEV、TOUS_DEV、TOUP_DEV是Linux下键盘,鼠标,触摸屏和触摸板的设备文件路径,对于不同的系统和机器可能有所不同,大家可以用cat /proc/bus/input/devices查看自己机器的设备文件。

用gcc -o outfilename filename编译生成可执行文件,然后./outfilename运行文件,注意修改生成的可执行文件权限,不想修改权限的用sudo ./outfilename。目前还没加入测试过程中切换测试设备的功能,只能用CTRL+Z结束程序,再重新执行文件。有时间可以再摸索下加个这个功能,呵呵~~

#include

#include

#include

#include

#include

#define KEY_DEV "/dev/input/event5"

#define MOU_DEV "/dev/input/event6"

#define TOUS_DEV "/dev/input/event7"

#define TOUP_DEV "/dev/input/event11"

static int ts_fd = -1;

static struct input_event data;

static int init_device(char *TS_DEV)

{

if((ts_fd = open(TS_DEV, O_RDONLY)) < 0)

{

printf("Error open %s\n\n", TS_DEV);

return -1;

}

return ts_fd;

}

static int test_key()

{

if(init_device(KEY_DEV) < 0)

return -1;

while(1)

{

read(ts_fd, &data, sizeof(data));

if (data.type == EV_KEY)

printf(" type: EV_KEY, event = %d, value = %d\n",data.code, data.value);

}

return 0;

}

static int test_mouse()

{

if(init_device(MOU_DEV) < 0)

return -1;

while(1)

{

read(ts_fd, &data, sizeof(data));

if (data.type == EV_KEY)

{

printf(" type = EV_KEY, code = %s, value = %d\n",

data.code == BTN_LEFT ? "MOUSE_LEFT" :

data.code == BTN_RIGHT ? "MOUSE_RIGHT" :

data.code == BTN_MIDDLE ? "MOUSE_MIDDLE" :

data.code == BTN_SIDE ? "MOUSE_SIDE" :

"Unkonw", data.value);

}

else if(data.type == EV_REL)

{

printf(" type = EV_ABS, code = %s, value = %d\n",

data.code == REL_X ? "ABS_X" :

data.code == REL_Y ? "ABS_Y" :

data.code == ABS_WHEEL ? "MOUSE_WHEEL" :

data.code == ABS_PRESSURE ? "ABS_PRESSURE" :

"Unkown", data.value);

}

}

return 0;

}

static int test_touch_screen()

{

if(init_device(TOUS_DEV) < 0)

return -1;

while(1)

{

read(ts_fd, &data, sizeof(data));

if (data.type == EV_KEY)

{

printf(" type: EV_KEY, event = %s, value = %d\n\n",

data.code == BTN_TOUCH ? "BTN_TOUCH" : "Unkown", data.value);

}

else if(data.type == EV_ABS)

{

printf(" type: EV_ABS, event = %s, value = %d\n\n",

data.code == ABS_X ? "ABS_X" :

data.code == ABS_Y ? "ABS_Y" :

data.code == ABS_PRESSURE ? "ABS_PRESSURE" :

"Unkown", data.value);

}

}

return 0;

}

static int test_touch_pancel()

{

if(init_device(TOUP_DEV) < 0)

return -1;

while(1)

{

read(ts_fd, &data, sizeof(data));

if (data.type == EV_KEY)

{

printf(" type = EV_KEY, code = %s, value = %d\n",

data.code == BTN_LEFT ? "MOUSE_LEFT" :

data.code == BTN_RIGHT ? "MOUSE_RIGHT" :

data.code == BTN_MIDDLE ? "MOUSE_MIDDLE" :

data.code == BTN_SIDE ? "MOUSE_SIDE" :

"Unkonw", data.value);

}

else if(data.type == EV_REL)

{

printf(" type = EV_ABS, code = %s, value = %d\n",

data.code == REL_X ? "ABS_X" :

data.code == REL_Y ? "ABS_Y" :

data.code == ABS_WHEEL ? "MOUSE_WHEEL" :

data.code == ABS_PRESSURE ? "ABS_PRESSURE" :

"Unkown", data.value);

}

}

return 0;

}

int main()

{

static int i;

select:    printf("Please select device:\n0.KeyBoard\n1.Mouse\n2.TouchScreen\n3.TouchPancel\n");

scanf("%d",&i);

switch(i){

case 0:

test_key();

break;

case 1:

test_mouse();

break;

case 2:

test_touch_screen();

break;

case 3:

test_touch_pancel();

break;

default:

printf("Wrong device, Please select again!\n\n");

break;

}

goto select;

return 0;

}0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux编写运行程序相对简单,以下是一些基本步骤: 1. 安装编程工具:首先,你需要安装一个适合你语言的编程工具。比如,C/C++的编程工具可以使用gcc/g++,Java可以使用jdk,Python一般自带解释器等。可以通过包管理器(如apt、yum、dnf等)来安装这些工具。 2. 创建源文件:打开一个文本编辑器,比如vim或者gedit,创建一个新的源文件。例如,对于C/C++程序,使用".c"或".cpp"作为文件扩展名,对于Python程序,使用".py"作为文件扩展名。 3. 编写代码:在源文件中编写你的程序代码。根据你选择的编程语言和编程工具,编写对应的语法和逻辑。可以参考官方文档或者在线资源来学习如何编写代码。 4. 保存文件:保存源文件,并选择一个合适的目录来存放它。比如,可以将源文件保存在当前用户的主目录下。 5. 打开终端:打开一个终端窗口,这是在Linux运行程序的常用方式。 6. 编译源文件(可选):对于某些编程语言,需要先将源代码编译成可执行文件,如C/C++。在终端中,使用编译器命令来编译你的代码。例如,对于C程序,使用gcc编译器:gcc -o output.exe input.c。 7. 执行程序运行你的程序。在终端中,导航到你的源代码所在的目录,并使用相应的命令来执行你的程序。例如,对于C程序:./output.exe;对于Python程序:python input.py。 8. 调试和修改:如果程序运行出错或不符合预期,可以使用调试工具如gdb来调试你的程序,并根据需要进行修改。 总之,在Linux编写运行程序需要安装适当的编程工具,创建源文件,编写代码,编译(如果需要的话),执行程序,并在需要时进行调试和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值