android_touchkey_input输入子系统的问题

kapa司机 2011-08-10 09:57:22
小弟初学,如果问题过于小白,麻烦高手不要嫌弃

主要是添加一个android触摸按键的驱动,通过模拟I2C实现的,中断处已经能接受到按键,键值,我想问题应该是input_report_key函数没有把键值传上去,dev/input/下已经出现了event文件,不知道问题出现在哪里呢,因为对android不太熟悉,查了N久的资料也没找到问题出现在哪里,麻烦各位高手们不吝惜您的知识稍微提示一下,谢谢!
祝您工作愉快!
...全文
525 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你现在既然用getevent测试正常,说明驱动就是OK的啊
mcu_hong 2011-12-19
  • 打赏
  • 举报
回复
请问你是怎样解决的。。我在移植触摸驱动,按键显示都正常了。就是触摸不行。。能提供思路不??

驱动已好。。用getevent测试正常。。后续不是很明
kapa司机 2011-08-19
  • 打赏
  • 举报
回复
恩恩,问题解决了,麻烦各位了...
kapa司机 2011-08-17
  • 打赏
  • 举报
回复
呵呵 同样感谢你回答我的问题啊。

我看了is_event_supported函数,我就是这块没通,开机之后按键跑中断之后他就返回0了,设置keybit还跟这个函数没关系吧,我觉得,我设置了keybit位,但是即便是这个有问题也不应该影响到is_event_supported这个函数啊 ,我用source insight 追踪了一下,这个函数没用到 keybit位,只要是设置evbit位就应该通的,程序开机的时候跑一次中断的时候还能跑通(is_event_supported返回还是1 程序能继续进行),就是开机了之后 在按按键触发中断就返回0跑不通了。
我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哪里出问题了,希望您告诉我一下,我以前做应用的,底层不是很了解,也是才接触,问题有点小白不好意思啊
念茜 2011-08-16
  • 打赏
  • 举报
回复
lz可以贴些代码,解决问题也方便
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);
yylmal 2011-08-16
  • 打赏
  • 举报
回复
学习一下
kapa司机 2011-08-16
  • 打赏
  • 举报
回复
你好,首先谢谢您抽取百忙的时间回答我的问题,
我打了很多printk,我设置了set_bit,但是我发现问题就出现在这里,
通过打印信息可以看出is_event_supported那个函数,我每次按键,产生中断时打印出来的返回值是0,
但是我在probe里确实有设置位啊,而且当程序第一次运行到中断的时候is_event_supported的返回值还是0,当程序运行起来触发中断的时候就开始返回0了,不知道为题处在哪里,我打印了input->evbit位的值,发现中断时打印的值跟程序开机时打印的值不一样,不知道哪里改了哪个位,请问一下您,知道这样问题出现在哪里吗,
非常感谢您!
月光宝盒 2011-08-10
  • 打赏
  • 举报
回复
是否在probe中没有置input
设备可以接受的键位 ,如:
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实现,否则还是用第一种方法吧

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧