QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3194|回复: 0

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

[复制链接]
发表于 2007-6-12 16:51:21 | 显示全部楼层 |阅读模式
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>
int  main(void)
{
int fd ;
unsigned long   version;
char name[256]="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 >>&0xff,
  version &0xff);
return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-12-4 16:47 , Processed in 0.041560 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表