Как включить мультитач на USB-устройстве? - PullRequest
5 голосов
/ 15 июля 2011

Я делаю свой первый драйвер USB-устройства для Linux и пытаюсь подключить устройство с сенсорной панелью.

Я пробовал это устройство в Win7, используя драйвер сенсорной панели Win7 по умолчанию. Используя линейный монитор / считыватель, я смог получить необработанные данные с помощью мультитач ENABLED . Скажем так, для примера заголовок данных с несколькими касаниями составляет [0x8301] и [0x8701] для первого и второго касания соответственно.

Теперь при мультитаче ОТКЛЮЧЕНО заголовок необработанных данных будет [0x8101]

Теперь с драйвером, который я сделал для Linux, я могу получить его только для вывода [0x8101] , который является заголовком данных одним касанием.

Итак, я предполагаю, что где-то в этой части кода инициализации я должен сказать устройству, что оно является мультитач-устройством. Или я, вероятно, неправильно его инициализирую.

    struct input_dev *input_dev;
input_dev = input_allocate_device();
input_dev->name = usb_mtouch->name;
input_dev->phys = usb_mtouch->phys;
usb_to_input_id(usb_mtouch->udev, &input_dev->id);
input_dev->dev.parent = &interface->dev;

input_set_drvdata(input_dev, usb_mtouch);

input_dev->open = mtouchdrv_open;
input_dev->close = mtouchdrv_close;

input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_PEN) |
    BIT_MASK(BTN_TOUCH) | BIT_MASK(BTN_STYLUS);
input_set_abs_params(input_dev, ABS_X, usb_mtouch->x_min, usb_mtouch->x_max, 0, 0);
input_set_abs_params(input_dev, ABS_Y, usb_mtouch->y_min, usb_mtouch->y_max, 0, 0);
input_set_abs_params(input_dev, ABS_PRESSURE, 0, usb_mtouch->press_max, 0, 0);
input_dev->absbit[BIT_WORD(ABS_MISC)] |= BIT_MASK(ABS_MISC);

Также я использую Linux 2.6.24.

Спасибо!

Naze

1 Ответ

3 голосов
/ 21 июля 2011

Я понял.Вам придется отправить управляющее сообщение на устройство.

int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
                     __u8 requesttype, __u16 value, __u16 index, void *data,
                     __u16 size, int timeout)

Большинство устройств по умолчанию включены в одно касание.Таким образом, отправка сообщения на устройство сделает свое дело.

Самое сложное - это то, какое сообщение отправить.Так как Win7 может сделать это в одно касание или мультитач.Я просто сравнил последовательность инициализации на обоих.И примените «пропущенные» сообщения в Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...