| Драйвер для устройства ввода |
Птн, 01 Август 2008 12:19  |
serggt1  Сообщений: 5 Зарегистрирован: Август 2008 |
Частый Гость |
|
|
Здравствуйте.
Подскажите, как решить проблему, я пытаюсь заставить работать тачскрин generaltouch в kubuntu 8.04. Открыл исходники usbtouchscreen.c, там есть поддержка этого устройства, но работает неправильно. Путем простого эксперимента обнаружил следующую странность: если поставить границы координат, отправляемых устройством в [0,100]x[0.100] и поставить курсор в (50,50):
input_set_abs_params(usbtouch->input, ABS_X, 0, 100, 0, 0);
input_set_abs_params(usbtouch->input, ABS_Y, 0, 100, 0, 0);
input_sync(usbtouch->input);
// первое событие будет игнорироваться
input_report_abs(usbtouch->input, ABS_X, 10);
input_report_abs(usbtouch->input, ABS_Y, 10);
input_sync(usbtouch->input);
input_report_abs(usbtouch->input, ABS_X, 50);
input_report_abs(usbtouch->input, ABS_Y, 50);
input_sync(usbtouch->input);
То курсор скорее всего будет совсем не в (50%,50%), а там, где ему захочется.
Может, кто-нибудь знает, как решить эту проблему?
|
|
|
| Re: Драйвер для устройства ввода |
Птн, 01 Август 2008 12:43   |
serggt1  Сообщений: 5 Зарегистрирован: Август 2008 |
Частый Гость |
|
|
Это все я делал в linux-2.6.24/drivers/input/touchscreen/usbtouchscreen.c. Фрагменты оригинала:
========================================
.....
static int usbtouch_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
.....
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
input_set_abs_params(input_dev, ABS_X, type->min_xc, type->max_xc, 0, 0);
input_set_abs_params(input_dev, ABS_Y, type->min_yc, type->max_yc, 0, 0);
if (type->max_press)
input_set_abs_params(input_dev, ABS_PRESSURE, type->min_press,
type->max_press, 0, 0);
.....
}
.....
static void usbtouch_process_pkt(struct usbtouch_usb *usbtouch,
unsigned char *pkt, int len)
{
struct usbtouch_device_info *type = usbtouch->type;
if (!type->read_data(usbtouch, pkt))
return;
input_report_key(usbtouch->input, BTN_TOUCH, usbtouch->touch);
if (swap_xy) {
input_report_abs(usbtouch->input, ABS_X, usbtouch->y);
input_report_abs(usbtouch->input, ABS_Y, usbtouch->x);
} else {
input_report_abs(usbtouch->input, ABS_X, usbtouch->x);
input_report_abs(usbtouch->input, ABS_Y, usbtouch->y);
}
if (type->max_press)
input_report_abs(usbtouch->input, ABS_PRESSURE, usbtouch->press);
input_sync(usbtouch->input);
}
.....
========================================
|
|
|
|
|
| Re: Linux GeneralTouch driver |
Пнд, 15 Сентябрь 2008 08:31   |
 |
Sveolon  Сообщений: 134 Зарегистрирован: Октябрь 2005 |
|
|
|
|
А вы не пытались протолкнуть ваш патч в основную ветку ядра? Там он бы помог максимальному количеству людей.
|
|
|
| Re: Драйвер для устройства ввода |
Пнд, 15 Сентябрь 2008 21:59   |
serggt1  Сообщений: 5 Зарегистрирован: Август 2008 |
Частый Гость |
|
|
Пытался, сразу не получилось - просто не нашел, где и как это сделать. Времени свободного было немного, поэтому бросил эту затею. Может, Вы подскажете, с чего начать?
К тому же, там в драйвере просто стоят неправильные координаты. Остальная часть - это простенькие скрипты и программа калибровки. Их к главной ветке не прилепишь, наверное. Вот и раздаю по форумам. Ваш я нашел в гугле. Надеюсь, другие люди тоже смогут это сделать по ключевым словам.
Сейчас проверил, гугл на запрос "Linux GeneralTouch driver" выдает первой эту страницу :)
[Обновления: Пнд, 15 Сентябрь 2008 22:08]
|
|
|
|
| Re: Драйвер для устройства ввода |
Чтв, 18 Сентябрь 2008 20:40  |
|
ya bi ne nachinal...
cheloverk ze popitalsya vam ob'yasnit' situaziyu, a vi vse
daete emu nenuznie soveti.
esli ya pravil'no ponyal, to usbtouch.c --eto edinstvennii file, kotorii otnositsya s yadru.
ya sdelal diff predstavlennogo s vcherashnim usbtouch.c i
ne zametil nikakih serioznih otlichii za isklyucheniem
2 constant v general_touch_read_data i eze dvux: max_xc i max_yc v opredelenii DEVTYPE_GENERAL_TOUCH.
takim obrazom, na yadernii patch ne pohoze nikak.
prikladnuyu programmu, ochevidno mozno predstavit' miru, no ne na kernel.org.
|
|
|