Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
20.10.2014, 20:03
|
|
Заблокирован
Регистрация: 22.04.2010
Сообщений: 348
Сказал спасибо: 41
Сказали Спасибо 106 раз(а) в 95 сообщении(ях)
|
USB HID клавиатура под Linux работает, под Win7 — нет
USB HID клавиатура на МК C8051F320 от SiLabs. Плата чужая, прошивка — моя (на основе фирменного примера мыши). Проект в Keil полностью, полной схемы нет. Коды кнопок программируются в EEPROM, но тестирую с макросом TEST, EEPROM не используется. Linux (Ubuntu 13.10 kernel 3.11.0-12-generic) нормально определяет устройство, кнопки работают. А под Win7 x32 устройство определяется и через секунду пропадает, потом опять, и до бесконечности. Реакции на кнопки нет. Мне нужно, чтобы работало под Win. Куда копать?
|
|
|
|
23.10.2014, 02:35
|
|
Гражданин KAZUS.RU
Регистрация: 02.11.2008
Адрес: Одесса
Сообщений: 668
Сказал спасибо: 336
Сказали Спасибо 328 раз(а) в 182 сообщении(ях)
|
Re: USB HID клавиатура под Linux работает, под Win7 — нет
А что винда в логах говорит при этом ?
Пы.Сы. Офф. Шах и мат виндузятникам в тему про железо и линукс )))
|
|
|
Эти 3 пользователя(ей) сказали Спасибо b_raven за это сообщение:
|
|
|
23.10.2014, 09:08
|
|
Прописка
Регистрация: 04.08.2008
Сообщений: 203
Сказал спасибо: 33
Сказали Спасибо 75 раз(а) в 58 сообщении(ях)
|
Re: USB HID клавиатура под Linux работает, под Win7 — нет
Мне аж смешно красноглазых читать
http://beholder.ru/bb/viewtopic.php?...330b2&start=45
Чтобы заставить работать часть специальных клавиш на мелкософтовской клаве надо сделать три ритуальных круга вокруг компа, разжечь костер и пару дней танцевать с бубном. Результат не гарантирован.
__________________
|
|
|
Сказали "Спасибо" Gerbicid
|
|
|
23.10.2014, 20:35
|
|
Заблокирован
Регистрация: 22.04.2010
Сообщений: 348
Сказал спасибо: 41
Сказали Спасибо 106 раз(а) в 95 сообщении(ях)
|
Re: USB HID клавиатура под Linux работает, под Win7 — нет
Заработало. Дело было в отсутствии инициализации. При подключении к Linux-хосту глючный код не вызывался, а с виндовым МК обращался по неинициализированному указателю и вис.
Следующая моя задача — добавить FEATURE report, чтобы загружать раскладку клавиатуры из приложения конфигуратора в EEPROM. Опять: Linux опознаёт клавиатуру, Win7 — показывает «!» в диспетчере устройств и отключает её.
HID дескриптор:
Код:
|
//--------------------------------------------------------------------------------
// Decoded Application Collection
//--------------------------------------------------------------------------------
/*
05 01 (GLOBAL) USAGE_PAGE 0x0001
09 06 (LOCAL) USAGE 0x00010006
A1 01 (MAIN) COLLECTION 0x01 Application (Usage=0x00010006: Page=, Usage=, Type=) ‹-- Warning: USAGE type should be CA (Application)
05 07 (GLOBAL) USAGE_PAGE 0x0007
19 E0 (LOCAL) USAGE_MINIMUM 0x000700E0
29 E7 (LOCAL) USAGE_MAXIMUM 0x000700E7
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) ‹-- Redundant: LOGICAL_MINIMUM is already 0
25 01 (GLOBAL) LOGICAL_MAXIMUM 0x01 (1)
75 01 (GLOBAL) REPORT_SIZE 0x01 (1) Number of bits per field
95 08 (GLOBAL) REPORT_COUNT 0x08 (8) Number of fields
81 02 (MAIN) INPUT 0x00000002 (8 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) ‹-- Redundant: LOGICAL_MINIMUM is already 0
25 01 (GLOBAL) LOGICAL_MAXIMUM 0x01 (1) ‹-- Redundant: LOGICAL_MAXIMUM is already 1
75 01 (GLOBAL) REPORT_SIZE 0x01 (1) Number of bits per field ‹-- Redundant: REPORT_SIZE is already 1
95 08 (GLOBAL) REPORT_COUNT 0x08 (8) Number of fields ‹-- Redundant: REPORT_COUNT is already 8
81 01 (MAIN) INPUT 0x00000001 (8 fields x 1 bit) 1=Constant 0=Array 0=Absolute 0=Ignored 0=Ignored 0=PrefState 0=NoNull
19 00 (LOCAL) USAGE_MINIMUM 0x00070000
29 65 (LOCAL) USAGE_MAXIMUM 0x00070065
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) ‹-- Redundant: LOGICAL_MINIMUM is already 0
25 65 (GLOBAL) LOGICAL_MAXIMUM 0x65 (101)
75 08 (GLOBAL) REPORT_SIZE 0x08 (8) Number of bits per field
95 06 (GLOBAL) REPORT_COUNT 0x06 (6) Number of fields
81 00 (MAIN) INPUT 0x00000000 (6 fields x 8 bits) 0=Data 0=Array 0=Absolute 0=Ignored 0=Ignored 0=PrefState 0=NoNull
05 08 (GLOBAL) USAGE_PAGE 0x0008
19 01 (LOCAL) USAGE_MINIMUM 0x00080001
29 03 (LOCAL) USAGE_MAXIMUM 0x00080003
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) ‹-- Redundant: LOGICAL_MINIMUM is already 0
25 01 (GLOBAL) LOGICAL_MAXIMUM 0x01 (1)
75 01 (GLOBAL) REPORT_SIZE 0x01 (1) Number of bits per field
95 03 (GLOBAL) REPORT_COUNT 0x03 (3) Number of fields
91 02 (MAIN) OUTPUT 0x00000002 (3 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
75 01 (GLOBAL) REPORT_SIZE 0x01 (1) Number of bits per field ‹-- Redundant: REPORT_SIZE is already 1
95 05 (GLOBAL) REPORT_COUNT 0x05 (5) Number of fields
91 01 (MAIN) OUTPUT 0x00000001 (5 fields x 1 bit) 1=Constant 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
05 01 (GLOBAL) USAGE_PAGE 0x0001
95 07 (GLOBAL) REPORT_COUNT 0x07 (7) Number of fields
75 08 (GLOBAL) REPORT_SIZE 0x08 (8) Number of bits per field
26 FF00 (GLOBAL) LOGICAL_MAXIMUM 0x00FF (255)
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0) ‹-- Redundant: LOGICAL_MINIMUM is already 0
B1 00 (MAIN) FEATURE 0x00000000 (7 fields x 8 bits) 0=Data 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
C0 (MAIN) END_COLLECTION Application
*/ |
Если у FEATURE меняю USAGE_PAGE = 0 или USAGE=0 то не помогает, всё также.
Подскажите что почитать про FEATURE report, чтобы сделать корректно, кроссплатформенно?
|
|
|
|
26.10.2014, 12:53
|
|
Заблокирован
Регистрация: 22.04.2010
Сообщений: 348
Сказал спасибо: 41
Сказали Спасибо 106 раз(а) в 95 сообщении(ях)
|
Re: USB HID клавиатура под Linux работает, под Win7 — нет
Заработало. Если кому интересно как сделала - спрашивайте.
|
|
|
|
29.10.2014, 00:17
|
|
Прописка
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
|
Re: USB HID клавиатура под Linux работает, под Win7 — нет
Сообщение от firew0rker
|
Следующая моя задача — добавить FEATURE report, чтобы загружать раскладку клавиатуры из приложения конфигуратора в EEPROM.
|
Сообщение от firew0rker
|
Заработало. Если кому интересно как сделала - спрашивайте.
|
В свое время к одному моему устройству, работающему как HID-клавиатура, нужно было "приделать" конфигуратор. Тогда задействовать для этого FEATURE report мне не удалось. Пришлось делать составное устройство, в котором второй HID "общался" с конфигуратором...
Поэтому, в принципе, интересно, как Вам это удалось.
|
|
|
|
29.10.2014, 12:34
|
|
Заблокирован
Регистрация: 22.04.2010
Сообщений: 348
Сказал спасибо: 41
Сказали Спасибо 106 раз(а) в 95 сообщении(ях)
|
Re: USB HID клавиатура под Linux работает, под Win7 — нет
На каком-то форуме нашла заведомо рабочий HID-дескриптор клавиатуры с FEATURE report. Вставила его в HIDREPORTDESC[] в файл F3xx_USB0_Descriptor.c. Винда опознала клавиатуру!
Перед подключением перепрошитого устройства было необходимо поудалять из реестра VID_10C4&PID_0200 чтобы винда нормально опознала. Чтобы не ковыряться в реестре, сделала батник «Disconnected Devices Manager.bat». Запускать его от админа, удалять серенькие устройства — удобнее.
Упростила логику обработки reportов, т.*к. ID не используется. Из F3xx_USB0_ReportHandler.c удалила функции ReportHandler_IN_ISR() и ReportHandler_IN_Foreground() и таблицы обработчиков *_VECTORTABLE.
DATASIZE и DATAPTR устанавливаются прямо в Get_Report и Set_Report. FEATURE report отличается (SETUP.wValue.c[MSB]==3).
Обработка FEATURE IN: при вызове Get_Report отправляется непосредственно массив Keys, хранящий раскладку.
Обработка FEATURE OUT: данные записываются в OutRptBuf. B ReportHandler_OUT, после проверки (с которой сильно не заморачивалась) они копируются в Keys (устанавливает новую раскладку) и ставится флаг bKeysUpdate. В основном цикле по флагу Keys записывается в EEPROM.
В F3xx_USB0_Standard_Requests.c также добавила обработчики Get_Idle() и Set_Idle(). т.*к. они обязательны для клавиатур. Idle timer — Timer2. Но фактически у меня винда не использует его, устанавливает idleRate=0 так что можно было не заморачиваться наверное...
Ваше составное устройство было более трудоёмким в разработке?
|
|
|
|
31.10.2014, 02:16
|
|
Прописка
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
|
Re: USB HID клавиатура под Linux работает, под Win7 — нет
Сообщение от firew0rker
|
...Ваше составное устройство было более трудоёмким в разработке?
|
Это было уже несколько лет назад, подробности уже точно не помню, но пожалуй составное устройство немного посложнее того, что Вы сделали. Я тоже брал пример другого составного устройства и корректировал под себя.
А вот трудность использования FEATURE REPORTS в "чистой" HID-клавиатуре, насколько я помню, была связана не с реализацией их обработки внутри МК, а с возможностью посылки их из Винды. Ведь это не просто HID-устройство, а "клавиатура", "занятая" Операционной Системой. По крайней мере, имеющимися у меня на тот момент библиотеками по работе с HID, послать FEATURE REPORT "клавиатуре" мне не удалось.
Интересно, какими средствами Вы из под Винды посылаете FEATURE REPORT своей клавиатуре?
|
|
|
|
31.10.2014, 15:19
|
|
Заблокирован
Регистрация: 22.04.2010
Сообщений: 348
Сказал спасибо: 41
Сказали Спасибо 106 раз(а) в 95 сообщении(ях)
|
Re: USB HID клавиатура под Linux работает, под Win7 — нет
Сообщение от tsb
|
Интересно, какими средствами Вы из под Винды посылаете FEATURE REPORT своей клавиатуре?
|
Функцией HidD_SetFeature. В архиве приложение программирующее раскладку.
|
|
|
Сказали "Спасибо" firew0rker
|
|
|
19.01.2017, 18:43
|
|
Прохожий
Регистрация: 19.01.2017
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: USB HID клавиатура под Linux работает, под Win7 — нет
Здравствуйте,
мучаюсь с 12-кнопочной USB-клавиатурой на МК C8051F320, подобной описанию топикстартера.
7-я Винда 32бит, не может найти драйвер для клавиатуры.
В сведениях Диспетчера устройств пишет следующее:
Тип устройства Другие устройства
Изготовитель Нет данных
Размещение Port_#0003.Hub_#0006
Описание устройства IO BOARD
ИД оборудования USB\VID_16C0&PID_06EA&REV_0000
ИД оборудования USB\VID_16C0&PID_06EA
Совместимые ИД USB\Class_02&SubClass_02&Prot_01
Совместимые ИД USB\Class_02&SubClass_02
Совместимые ИД USB\Class_02
ConfigFlags 00000040
ConfigFlags CONFIGFLAG_FAILEDINSTALL
Сведения о местонахождении Port_#0003.Hub_#0006
Имя объекта физического устройства \Device\USBPDO-10\
Характеристики 00000014
Характеристики CM_DEVCAP_REMOVABLE
Характеристики CM_DEVCAP_UNIQUEID
GUID типа шины {9d7debbc-c85d-11d1-9eb4-006008c3a19a}
Устаревший тип шины 0000000F
Номер шины 00000000
Перечислитель USB
Адрес 00000003
Сведения о питании Текущее состояние электропитания:
Сведения о питании D3
Сведения о питании
Сведения о питании Возможности электропитания:
Сведения о питании 0000005D
Сведения о питании PDCAP_D0_SUPPORTED
Сведения о питании PDCAP_D2_SUPPORTED
Сведения о питании PDCAP_D3_SUPPORTED
Сведения о питании PDCAP_WAKE_FROM_D0_SUPPORTED
Сведения о питании PDCAP_WAKE_FROM_D2_SUPPORTED
Сведения о питании
Сведения о питании Сопоставления энергосбережения:
Сведения о питании S0 -› D0
Сведения о питании S1 -› D2
Сведения о питании S2 -› D2
Сведения о питании S3 -› D2
Сведения о питании S4 -› D2
Сведения о питании S5 -› D3
Политика удаления 00000003
Политика удаления по умолчанию 00000003
Состояние установки 00000002
Пути к расположению PCIROOT(0)#PCI(1A00)#USBROOT(0)#USB(1)#USB(5)#USB( 4)#USB(3)
Код базового контейнера {5db6be7b-74d7-52b1-80d3-f6f97a318703}
Выводимое имя IO BOARD
Путь к экземпляру устройства USB\VID_16C0&PID_06EA\0001
Состояние DevNote 01806400
Состояние DevNote DN_HAS_PROBLEM
Состояние DevNote DN_DISABLEABLE
Состояние DevNote DN_REMOVABLE
Состояние DevNote DN_NT_ENUMERATOR
Состояние DevNote DN_NT_DRIVER
Код проблемы 0000001C
Родитель USB\VID_058F&PID_9254\7&2d4c97c6&0&4
Родственные USB\VID_09DA&PID_0260\8&2d22a658&0&2
Код контейнера {5db6be7b-74d7-52b1-80d3-f6f97a318703}
Требуется безопасное удаление ‹ложь›
Описание устройства, предоставленное шиной IO BOARD
Ошибка установки Для элемента или информационного пакета устройства не выбран драйвер.
Ошибка установки E0000203
Дата установки 19.01.2017 15:58:31
Дата первой установки 19.01.2017 15:58:31
Безопасность класса по умолчанию 00 0C 90 00 00 00 00 00 00 00 00 00 00 00 00 14 00 00 00
Безопасность класса по умолчанию 00 34 00 02 00 00 00 00 00 14 00 00 00 00 10 01 01 00 00
Безопасность класса по умолчанию 00 00 05 12 00 00 00 00 00 18 00 00 00 00 10 01 02 00 00
Безопасность класса по умолчанию 00 00 05 20 00 00 00 20 02 00 00
SDS безопасности класса по умолчанию D:P(A;;GA;;;SY)(A;;GA;;;BA)
Полное имя класса Другие устройства
Краткое имя класса Unknown
Путь к значку класса %SystemRoot%\System32\setupapi.dll,-18
Версия нижнего логотипа 6.0
Выводимое имя Другие устройства
Кто может помочь с драйвером Linux и Windows 7 на эту клавиатуру ?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:38.
|
|