Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: HID Touch Screen
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Serg_Sm
Есть резистивный тач-скрин, подключен через арм 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 раза больше.
Serg_Sm
В журнале windows при любом подключении тач-скрина появляется предупреждение: "Указывающее устройство не имеет сведений о мониторе, к которому оно присоединено".
Serg_Sm
Если кому интересно, получилось у меня заставить работать 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".
ProBoDiS
Цитата(Serg_Sm @ May 28 2015, 11:42) *
Вот сам работающий репорт (на запрос Contact Count Maximum возвращаю 2):

Здравствуйте!
Тоже пытаюсь реализовать мультитач, но на Teensy 3.1. Пока проблема в том, что виндой распознается только одно касание, второе почему-то игнорируется..
Наверное потому что я как раз-таки не передаю Contact Count Maximum.
Этот параметр следует передавать в любой или какой-то определенный момент?
Serg_Sm
Цитата(ProBoDiS @ Jan 18 2016, 15:17) *
Здравствуйте!
Тоже пытаюсь реализовать мультитач, но на Teensy 3.1. Пока проблема в том, что виндой распознается только одно касание, второе почему-то игнорируется..
Наверное потому что я как раз-таки не передаю Contact Count Maximum.
Этот параметр следует передавать в любой или какой-то определенный момент?

Всего лишь нужен ответ на этот запрос. Запрашивает ОС - в репорте (в моём сообщении выше) всё уже учтено. Достаточно ответить на запрос, отослав допустимое число нажатий.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.