晚安
前阵子有在版上问关于在 dpi driver 内加上 input device ,然后想在 driver内
开启 open API ,后来用 input_report_abs 和 input_sync 取代,我已经花了
一天时间...明天就是交期...我还是试不出来,抱各位佛脚一下... 不胜感激..
我在自己写的 spi driver 开一个用 irq 触发的 kernel thread ,这里面就一直
作
input_report_ads(inputdev,ABS_X,1); //inputdev 是 struct input_dev *
input_report_ads(inputdev,ABS_Y,2);
input_report_ads(inputdev,ABS_Y,3);
input_sync(inputdev);
再进入 thread 之前,有做些 inputdev 的初始:
inputdev = input_allocate_device();
if (!inputdev) {
printk(KERN_ERR "Failed to allocate acc input device\n");
err = -ENOMEM;
goto failed;
}
sensor->input_acc->name = "xxxxx";
set_bit(EV_ABS, inputdev->evbit);
set_bit(ABS_X, inputdev->absbit);
set_bit(ABS_Y, inputdev->absbit);
set_bit(ABS_Z, inputdev->absbit);
input_set_abs_params(inputdev, ABS_X, -ACC_MAX, ACC_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_Y, -ACC_MAX, ACC_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_Z, -ACC_MAX, ACC_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_RX, -ACC_MAX, ACC_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_RY, -ACC_MAX, ACC_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_RZ, -ACC_MAX, ACC_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_THROTTLE, -ACC_MAX, ACC_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_RUDDER, -ACC_MAX, ACC_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_WHEEL, -ACC_MAX, ACC_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_HAT0X, -ACC_MAX, ACC_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_HAT1X, -ACC_MAX, ACC_MAX, 0, 0);
input_set_abs_params(inputdev, ABS_HAT2X, -ACC_MAX, ACC_MAX, 0, 0);
err = input_register_device(inputdev);
if (err) {
pr_err("Failed to register acc input device\n");
input_free_device(inputdev);
inputdev = NULL;
goto failed;
}
之后也写了小程式 去 open /dev/input/event* 我在上面注册的 input,再用 write
写入 struct input_event 去验证 getevent 可以拿到资讯....
但是我用 input_sync 这方法就无法,请问我上面那些步骤还少了些什么吗?
谢谢。