晚安
前陣子有在版上問關於在 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 這方法就無法,請問我上面那些步驟還少了些甚麼嗎?
謝謝。