小弟初学,如果问题过于小白,麻烦高手不要嫌弃 主要是添加一个android触摸按键的驱动,通过模拟I2C实现的,中断处已经能接受到按键,键值,我想问题应该是input_report_key函数没有把键值传上去,dev/input/下已经出现了event文件,不知道问题出现在哪里呢,因为对android不太熟悉,查了N久的资料也没找到问题出现在哪里,麻烦各位高手们不吝惜您的知识稍微提示一下,谢谢!
祝您工作愉快!
祝您工作愉快!
解决方案 »
- AdapterView.OnItemClickListener怎样获取点击那一项的内容
- 横屏进入彩信,然后竖屏,actionbar显示异常
- 手机如何访问局域网中的PC?
- 谈谈android内核问题
- android 2.3 KeyEvent 传递方式
- Android2D的工作原理是什么
- 求教如何在一个已经建好的项目中新建一个Activity,并用一个Intent传送数据。
- android 手机有没有视频录制的应用?
- Android模拟器无法连接服务端
- 求大神指点!OpenCv新手问题,JNI中CvSURFParams出错!
- android ndk ffmpeg时,如何设置相关的编译选择,就能只编译h264相关的解码器?
- 菜鸟请教,关于eclipse中从一个activity跳转到另一个activity运行unfortunately activity has stopped时提示
设备可以接受的键位 ,如:
set_bit(KEY_BACK, input_dev->keybit);
set_bit(KEY_HOME, input_dev->keybit);android实现触摸屏按键有两种方法:
1.tp driver将触摸直接上报为key事件
2.android2.2以后的话,可以在board中直接修改tp按键的适配文件,里面定义了按键的范围,
不过最好你tp上的按键不是FPC做的,而是真正的sensor实现,否则还是用第一种方法吧
我打了很多printk,我设置了set_bit,但是我发现问题就出现在这里,
通过打印信息可以看出is_event_supported那个函数,我每次按键,产生中断时打印出来的返回值是0,
但是我在probe里确实有设置位啊,而且当程序第一次运行到中断的时候is_event_supported的返回值还是0,当程序运行起来触发中断的时候就开始返回0了,不知道为题处在哪里,我打印了input->evbit位的值,发现中断时打印的值跟程序开机时打印的值不一样,不知道哪里改了哪个位,请问一下您,知道这样问题出现在哪里吗,
非常感谢您!
cat /dev/input/event* 能得到信息吗?
set_bit()应该先设置一个EV_KEY,然后再设置其中的细节,用__set_bit()
比如set_bit(EV_KEY, Input_Dev->evbit);
__set_bit(KEY_HOME, Input_Dev->keybit);
__set_bit(KEY_BACK, Input_Dev->keybit);
我cat 了一下 是阻塞的..
probe 函数如下:
struct resource *res;
struct input_dev *input_dev;
struct ha2608 * ha2608; //一个包含 input_dev结构体指针的结构体还有一些其他参数
int ret; ha2608 = kzalloc(sizeof(struct ha2608), GFP_KERNEL);
input_dev = input_allocate_device();
platform_set_drvdata(pdev, ha2608);
ha2608->dev = input_dev;
set_bit(EV_KEY, input_dev->evbit);
// set_bit(KEY_BACK, input_dev->keybit);
// set_bit(KEY_HOME,input_dev->keybit); 我觉得这两个现在还用不到,因为还没跑到他们起作用的地方..
printk("ha2608_input_dev->evbit = %x\n\n\n",input_dev->evbit);
input_dev->name = DEVICE_NAME;
input_dev->phys = "ha2608/input1"; input_dev->id.bustype = BUS_HOST;
input_dev->id.vendor = 0x0010;
input_dev->id.product = 0x0010;
input_dev->id.version = 0x0100;
ha2608_init_panel();
ret = gpio_request(INT_HA2608_PORT,"HA2608_INT");
ret = s3c_gpio_cfgpin(INT_HA2608_PORT, INT_CFG_HA2608); ret = request_irq(IRQ_EINT(24), ha2608_isr_handle, IRQF_TRIGGER_RISING, DEVICENAME, (void *)ha2608); ret = input_register_device(input_dev);
我prob函数就是这样的,程序第一次运行的时候 跑中断都没问题,为什么开机之后跑中断就出现问题了,evbit的值我打出来了开机时的打印信息没问题,开机之后 中断的打印信息 值就变了,难道哪里还会改变evbit位的值吗?,,,,,不知道我发的code哪里出问题了,希望您告诉我一下,我以前做应用的,底层不是很了解,也是才接触,问题有点小白不好意思啊