Перейти к содержанию
    

HID Touch Screen

Есть резистивный тач-скрин, подключен через арм AT91SAM7S64 и TSC2046.

 

HID report

0x05,0x0D,                //Usage Page (Digitizer) 05 0D
0x09,0x02,                //Usage (Pen) 09 02
0xA1,0x01,                //Collection (Application) A1 01
0x85,0x01,                //Report 01 85 01
0x09,0x20,                //Usage (Stylus) 09 20
0xA1,0x00,                //Collection (Physical) A1 00
0x09,0x42,                //Usage (Tip Switch) 09 42 
0x09,0x32,                //Usage (In Range) 09 32 
0x15,0x00,                //Logical Minimum (0) 15 00 
0x25,0x01,                //Logical Maximum (1) 25 01 
0x75,0x01,                //Report Size (1) 75 01 
0x95,0x02,                //Report Count (2) 95 02 
0x81,0x02,                //Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02 
0x95,0x06,                //Report Count (6) 95 06 
0x81,0x03,                //Input (Cnst,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 03 
0x05,0x01,                //Usage Page (Generic Desktop) 05 01 
0x09,0x30,                //Usage (X) 09 30 
0x75,0x10,                //Report Size (16) 75 10 
0x95,0x01,                //Report Count (1) 95 01 
0x55,0x0D,                //Unit Exponent (-3) 55 0D 
0x65,0x11,                //Unit (SI Lin: Length (cm)) 65 11 
0x15,0x00,                //Logical Minimum (0) 15 00 
0x26,0xE7,0x03,            //Logical Maximum (1000) 26 00 70 
0x35,0x00,                //Physical Minimum (0) 35 00 
0x46,0xC4,0x54,            //Physical Maximum (1000) 46 00 70 
0x81,0x02,                //Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02 
0x09,0x31,                //Usage (Y) 09 31 
0x15,0x00,                //Logical Minimum (0) 15 00 
0x26,0xE7,0x03,            //Logical Maximum (1000) 26 00 40 
0x35,0x00,                //Physical Minimum (0) 35 00 
0x46,0x58,0x34,            //Physical Maximum (1000) 46 00 40 
0x81,0x02,                //Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02 
0xC0,                    //End Collection C0
0xC0,                    //End Collection C0

Соответсвенно репорт: ID (1 байт), Tip Switch и In Range (1 байт) и X, Y (по 2 байта).

 

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

Но стоит только во время загрузки нажать на экран, т.е. будут передаваться координаты нажатия (и установленные два бита TS/IR естественно) вместо нулей, то после заргузки тач-скрин не работоспособен.

 

При этом, судя по аппаратному USB-анализатору, никаких проблем нет - данные (через interrupt endpoint) успешно передаются, в диспетчере устройств тоже порядок.

 

Что этому виндосу ещё не хватает?

PS: Монитор вьюсоник с мультитач работает нормально во всех ситуациях, но у него и репорт в 4 раза больше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В журнале windows при любом подключении тач-скрина появляется предупреждение: "Указывающее устройство не имеет сведений о мониторе, к которому оно присоединено".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если кому интересно, получилось у меня заставить работать Touch Screen и при нажатии до полной загрузки.

Информацию брал отсюда.

Как мне показалось - Windows 8.1 нормально понимает только мульти-тач.

Вот сам работающий репорт (на запрос Contact Count Maximum возвращаю 2):

0x05, 0x0d,                         // USAGE_PAGE (Digitizers)          
0x09, 0x04,                         // USAGE (Touch Screen)             
0xa1, 0x01,                         // COLLECTION (Application)
0x85, 0x01,                         // REPORT_ID (Touch)
0x09, 0x20,                         // Usage (Stylus)
0xa1, 0x02,                         // COLLECTION (Logical)  
0x09, 0x42,                         // USAGE (Tip Switch)           
0x15, 0x00,                         // LOGICAL_MINIMUM (0)          
0x25, 0x01,                         // LOGICAL_MAXIMUM (1)          
0x75, 0x01,                         // REPORT_SIZE (1)              
0x95, 0x01,                         // REPORT_COUNT (1)             
0x81, 0x02,                         // INPUT (Data,Var,Abs) 
0x95, 0x07,                         // REPORT_COUNT (7)  
0x81, 0x03,                         // INPUT (Cnst,Ary,Abs)
0x75, 0x08,                         // REPORT_SIZE (8)
0x09, 0x51,                         // USAGE (Contact Identifier)
0x95, 0x01,                         // REPORT_COUNT (1)             
0x81, 0x02,                         // INPUT (Data,Var,Abs) 
0x05, 0x01,                         // USAGE_PAGE (Generic Desk..
0x09, 0x30,                         // Usage (X)
0x75, 0x10,                         // Report Size (16)
0x95, 0x01,                         // Report Count (1)
0x55, 0x0D,                         // Unit Exponent (-3)
0x65, 0x11,                         // Unit (SI Lin: Length (cm))
0x26, 0xE7, 0x03,                     // Logical Maximum (1000)
0x35, 0x00,                         // Physical Minimum (0)
0x46, 0xC4, 0x54,                     // Physical Maximum (21620)
0x81, 0x02,                         // Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit)
0x09, 0x31,                         // Usage (Y)
0x46, 0x58, 0x34,                     // Physical Maximum (13400)
0x81, 0x02,                         // Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit)
0xc0,                                 // END_COLLECTION
0x05, 0x0d,                         // USAGE_PAGE (Digitizers)
0x09, 0x54,                         // USAGE (Contact count)
0x25, 0x7f,                         // LOGICAL_MAXIMUM (127) 
0x75, 0x08,                         // REPORT_SIZE (8)    
0x81, 0x02,                          // INPUT (Data,Var,Abs)
0x85, 0x02,                         // REPORT_ID (Feature)
0x09, 0x55,                         // USAGE(Contact Count Maximum)
0x25, 0x02,                         // LOGICAL_MAXIMUM (2)
0xb1, 0x02,                          // FEATURE (Data,Var,Abs)
0xc0,                                 // END_COLLECTION

 

PS: В общем если Windows считает сенсорный экран поддерживающим максимум одно нажатие (в журнале появляется запись: "Указывающее устройство поддерживает ввод только одним пальцем."), то на этапе загрузки системы и нажатии на экран она перестаёт на него реагировать. Для проверки всего лишь убрал "Contact Identifier".

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот сам работающий репорт (на запрос Contact Count Maximum возвращаю 2):

Здравствуйте!

Тоже пытаюсь реализовать мультитач, но на Teensy 3.1. Пока проблема в том, что виндой распознается только одно касание, второе почему-то игнорируется..

Наверное потому что я как раз-таки не передаю Contact Count Maximum.

Этот параметр следует передавать в любой или какой-то определенный момент?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте!

Тоже пытаюсь реализовать мультитач, но на Teensy 3.1. Пока проблема в том, что виндой распознается только одно касание, второе почему-то игнорируется..

Наверное потому что я как раз-таки не передаю Contact Count Maximum.

Этот параметр следует передавать в любой или какой-то определенный момент?

Всего лишь нужен ответ на этот запрос. Запрашивает ОС - в репорте (в моём сообщении выше) всё уже учтено. Достаточно ответить на запрос, отослав допустимое число нажатий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...