adam1982 发表于 2007-6-12 16:51:21

input subsystem ioctl()使用出错请教下

ioctl()使用出错请教下。


本人想针对S3C2410中的触摸屏驱动程序做一个触摸屏的应用测试程序。因为触摸屏驱动是用Input Subsystem的,我在看过一片关于 Input Subsystem文章(http://www.linuxjournal.com/article/6429)按照上面写了个测试程序,虽然程序编译是通过了,但在板子上运行时总是提示:
evtype_b: Invalid argument
evdev ioctl erro : Invalid argument“Invalid argument ”是指无效的参数吧,不知道是什么原因,是参数定义出错还是返回出错啊?对INPUT 子系统这样用IOCTL()对不对?(因为文章上写的好像是针对2。4 2。5版本的内核吧,2。6内核是否有相应的变动)还是有其它的方法可以操作INPUT的设备?请指导下,谢谢!
程序代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/input.h>
#include <fcntl.h>
#include <sys/select.h>
#include <sys/time.h>
intmain(void)
{
int fd ;
unsigned long   version;
char name="Unknown";
int evtype_b;
struct input_id device_info;
fd=open("/dev/input/ts0",0);
if(fd<0){
perror("open touchscrean erro");
exit(1);
}
//memset(name,0,sizeof(name));
// if(ioctl(fd,EVIOCGNAME(sizeof(name)),name)<0){
//perror("evdev iotcl ");
// }
if(ioctl(fd,EVIOCGID,&device_info)){
perror("evdev ioctl");
}
/*因为上面函数返回出错,所以不加相应的处理*/
//evtype_b: Invalid argument evdev ioctl erro : Invalid argument }
// if(ioctl(fd,EVIOCGBIT(0,EV_MAX),evtype_b)<0){
//perror("evtype_b");
// }
// memset(version,0,sizeof(version));
if(ioctl(fd,EVIOCGVERSION,&version)){
perror("evdev ioctl erro ");
exit(1);
}
/*the EVIOCGVERSION IOCTL() returns an int*/
/*so we unpack it and display it */
printf("evdev driver version is %d.%d.%d\n",
version >>16,(version >>8)&0xff,
version &0xff);
return 0;
}
页: [1]
查看完整版本: input subsystem ioctl()使用出错请教下