реклама на сайте
подробности

 
 
> Проблема с hid-устройством, не приходят input_reports
mempfis_
сообщение Jun 27 2006, 16:34
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Заранее большая благодарность всем кто откликнется и даст толковый совет.
Ситуация такая: есть usb-устройство на основе isp1181a, а именно hid-устройство для передачи блока данных размером 1 байт. Устройство проходит энумерацию на шине. Реализован весь протокол пересылки дескрипторов. Проблема в том, что после запроса дескриптора репорта 8106002200005700 нет таких очень важных и необходимых запросов на input-report - т.е. нет возможности передавать данные.
Не понятно, почему идёт запрос 0х57 байт репорта, когда там всего 0х17 байт.Я работаю под WIN2000, под XP такая-же проблема.

Вот весь процесс энумерации на шине, а после неё все мои дескрипторы. Может кто сталкивался с такой-же проблемой - подскажите пожалуйста что нужно делать в этом случае.

000001: Abort Pipe (DOWN), 27.06.2006 18:04:55.7500000 +2.8125000
Pipe Handle: 0x816b94c0

000003: PnP Event: Device Disconnected (UP), 27.06.2006 18:04:55.7500000 +0.0
The USB device has just been removed from the system, all drivers unloaded.

000004: PnP Event: Query ID (UP), 27.06.2006 18:04:55.7500000 +0.0
Hardware IDs: USB\Vid_1131&Pid_8141&Rev_0000, USB\Vid_1131&Pid_8141

000005: PnP Event: Query ID (UP), 27.06.2006 18:04:55.7500000 +0.0
Compatible IDs: USB\Class_03&SubClass_00&Prot_00, USB\Class_03&SubClass_00, USB\Class_03

000006: Get Descriptor Request (DOWN), 27.06.2006 18:04:56.2968750 +0.5468750
Descriptor Type: Device
Descriptor Index: 0x0
Transfer Buffer Size: 0x12 bytes

000007: Control Transfer (UP), 27.06.2006 18:04:56.3593750 +0.0625000
Pipe Handle: 0x81782934

12 01 10 01 00 00 00 40 31 11 41 81 00 00 01 02 03 01 .......@1.A......

Setup Packet

80 06 00 01 00 00 12 00 ?.......

Recipient: Device
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_CONFIGURATION)
Value: 0x100
Index: 0x0
Length: 0x12

000008: Get Descriptor Request (DOWN), 27.06.2006 18:04:56.3593750 +0.0
Descriptor Type: Configuration
Descriptor Index: 0x0
Transfer Buffer Size: 0x9 bytes


000009: Control Transfer (UP), 27.06.2006 18:04:56.4375000 +0.0781250
Pipe Handle: 0x81782934

09 02 22 00 01 01 00 C0 00 .."....À.

Setup Packet

80 06 00 02 00 00 09 00 ?.......

Recipient: Device
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_CONFIGURATION)
Value: 0x200
Index: 0x0
Length: 0x9

000010: Get Descriptor Request (DOWN), 27.06.2006 18:04:56.4375000 +0.0
Descriptor Type: Configuration
Descriptor Index: 0x0
Transfer Buffer Size: 0x22 bytes


000011: Control Transfer (UP), 27.06.2006 18:04:56.5000000 +0.0625000
Pipe Handle: 0x81782934

09 02 22 00 01 01 00 C0 00 09 04 00 00 01 03 00 00 00 09 21 00 01 00 01 22 17 00 07 05 81 03 08 00 00 .."....À...........!...."........

Setup Packet

80 06 00 02 00 00 22 00 ?.....".

Recipient: Device
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_CONFIGURATION)
Value: 0x200
Index: 0x0
Length: 0x22

000012: Select Configuration (DOWN), 27.06.2006 18:04:56.5000000 +0.0
Configuration Index: 1

000013: Select Configuration (UP), 27.06.2006 18:04:56.5625000 +0.0625000
Configuration Index: 1
Configuration Handle: 0xe26e0fa8

000014: Class-Specific Request (DOWN), 27.06.2006 18:04:56.5625000 +0.0
Destination: Inrterface, Index 0
Reserved Bits: 34
Request: 0xa
Value: 0x0
Send 0x0 bytes to the device


000015: Control Transfer (UP), 27.06.2006 18:05:01.6562500 +5.0937500
Pipe Handle: 0x81782934

Setup Packet

21 0A 00 00 00 00 00 00 !.......

Recipient: Inrterface
Request Type: Class
Direction: Host->Device
Request: 0xa (Unknown)
Value: 0x0
Index: 0x0
Length: 0x0


000016: Get Descriptor Request (DOWN), 27.06.2006 18:05:01.6562500 +0.0
Descriptor Type: Unknown
Descriptor Index: 0x0
Transfer Buffer Size: 0x57 bytes


000017: Control Transfer (UP), 27.06.2006 18:05:01.7187500 +0.0625000
Pipe Handle: 0x81782934

06 00 FF 09 01 A1 01 19 01 29 01 15 00 26 FF 00 75 08 95 01 81 02 C0 ..ÿ..¡...)...&ÿ.u.•..À

Setup Packet

81 06 00 22 00 00 57 00 .."..W.

Recipient: Inrterface
Request Type: Standard
Direction: Device->Host
Request: 0x6 (GET_CONFIGURATION)
Value: 0x2200
Index: 0x0
Length: 0x57

000018: PnP Event: Query ID (UP), 27.06.2006 18:05:01.7187500 +0.0
Device ID: USB\Vid_1131&Pid_8141


000019: PnP Event: Query ID (UP), 27.06.2006 18:05:01.7187500 +0.0
Hardware IDs: USB\Vid_1131&Pid_8141&Rev_0000, USB\Vid_1131&Pid_814

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Мои дескрипторы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;описание стандартных дескрипторов
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;стандартный дескриптор устройства
usb_device_descriptor:
.db 0x12 ;bLength длина дескриптора
.db 0x01 ;bDescriptorType тип дескриптора
.db 0x10 ;bcdUSB версия спецификации USB в формате BCD
.db 0x01 ;
.db 0x00 ;bDeviceClass код класса USB
.db 0x00 ;bDeviceSubClass код подкласса устройства USB
.db 0x00 ;bDeviceProtocol код протокола USB
.db 64 ;bMaxPacketSize мах размер нулевой конечной точки
.db 0x31 ;idVendor идентификатор изготовителя устройства
.db 0x11 ;
.db 0x41 ;idProduct идентификатор продукта
.db 0x81
.db 0x00 ;bcdDevice номер версии устройства в формате BCD
.db 0x00
.db 0x01 ;iManufacturer индекс дескриптора строки описывающей изготовителя
.db 0x02 ;iProduct индекс дескриптора строки описывающей продукт
.db 0x03 ;iSerialNumberиндекс дескриптора строки описывающей серийный номер устройства
.db 0x01 ;bNumConfigurations количество возможных конфигураций устройства


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;стандартный дескриптор конфигурации1
;сразу за ним следует описание дескриптора интерфеса1 и дескрипторы всех конечных точек, входящих в интерфейс1
;описание дескриптора интерфеса2 и дескрипторы всех конечных точек, входящих в интерфейс2
;далее следует опитсание дескриптора конфигурации2
usb_config_descriptor1:
begin_config:
.db 0x09 ; bLength длина дескриптора
.db 0x02 ;bDescriptorType тип дескриптора
.db low(end_config-begin_config) ;wTotalLenth полный размер описания конфигурации включая описание всех интерфейсов и точек
.db high(end_config-begin_config)
.db 0x01 ;bNumInterface кол-во интерфейсов в данной конфигурации
.db 0x01 ;bConfigurationValue номер конфигурации используемый по требованию SET_CONFIGURATION
.db 0x00 ;iConfiguration индекс строки описывающий данную конфигурацию
.db 0b11000000 ;bmAttribute
;битовая маска характеризующая конфигурацию
;D7 - зарезервирован=1
;D6 - признак наличия собственного источника питания
;D5 - признак разрешения сообщения хосту о выходе у-ва из режима сна
;D4-D0 - зарезервированы=0
.db 0x00 ;bMaxPower мах ток потребления от шины для устройств без собственного и-ка питания, кратность едениц 2 ма
end_usb_config_descriptor1:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;описание дескриптора интерфеса10
usb_interf_descriptor10:
.db 0x09 ;bLength длина дескриптора
.db 0x04 ;bDescriptorType тип дескриптора
.db 0x00 ;bInterfaceNumber номер данного интерфейса
.db 0x00 ;bAlternateSetting номер альтернативной установки для данного интерфейса
.db 0x01 ;bNumEndpoints число конечных точек для данного интерфейса без учёта нулевой конечной точки
.db 0x03 ;bInterfaceClass код класса интерфейса 0x03 код HID-устройства
.db 0x00 ;bInterfaceSubClass код класса интерфеса,
.db 0x00 ;bInterfaceProtocol код протокола
.db 0x00 ;iInterface индекс дескриптора строки описывающей интерфейс
;при использовании только конечной точки 0 дескриптор конечной точки не требуется
end_usb_interf_descriptor10:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;описание дескриптора HID-устройства
usb_hid_descriptor:
.db 0x09 ;bLength длина дескриптора
.db 0x21 ;bDescriptorType тип дескриптора
.db 0x00 ;bcdHID версия HID
.db 0x01
.db 0x00 ;bCountryCode числовой код страны для локализированых устройств
.db 0x01 ;bNumDescriptor число дескрипторов репортов
.db 0x22 ;bNumReportType номер дескриптора репорта используемый при вызове Set_Descriptor
.db low(end_report-begin_report) ;wReportLength размер дескриптора репорта
.db high(end_report-begin_report)
;.db 0x00 ;bReportType номер дополнительного дескриптора
;.db 0x00 ;wReportLenth размер дополнительного дескриптора
;.db 0x00
;при использовании только конечной точки 0 дескриптор конечной точки не требуется
end_usb_hid_descriptor:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;описание дескриптора конечной точки входящей в
usb_endpoint_descriptor100:
.db 0x07 ;bLength длина дескриптора
.db 0x05 ;bDescriptorType тип дескриптора
.db 0b10000001 ;bEndpointAddress бит7 0-OUT, 1-IN
;6-4 зарезервировано=0
;3-0 номер конечной точки
.db 0b00000011 ;bmAttributes
;7-6 зарезервировано=0
;5-4 тип использования конечной точки 00-для передачи данных, 01-для явной обратной связи
; 10-для неявной обратной связиб 11-зарезервировано
;3-2 тип синхронизации 00-нет синхронизации, 01-асинхронная, 10-адаптивная, 11-синхронная
;1-0 тип конечной точки 00-канал сообщений, 01-изохронный канал
; 10-канал передачи данных, 11-канал прерываний
.db 0x08 ;wMaxPacketSize мах размер пакета конечной точки
.db 0x00
.db 0x00 ;bInterval интервал опроса конечной точки в мс для кт прерываний
;1 для изохронной кт, для остальных типов кт не имеет значения
end_usb_endpoint_descriptor100:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
end_config:
;окончание описания конфигурации1
;end_usb_config_descriptor1:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;дескриптор рапорта hid-устройства
usb_report_descroptor:
begin_report:
.db 0x06 ;Usage_Page (Generic Desktop)
.db 0x00
.db 0xff

.db 0x09 ;Usage (Vendor Usage 1)
.db 0x01

.db 0xa1 ;Collection (Aplication)
.db 0x01

.db 0x19 ;Usage_Minimum (Vendor Usage 1)
.db 0x01

.db 0x29 ;Usage_Maximum (Vendor Usage 1)
.db 0x01

.db 0x15 ;Logical_Minimum (0)
.db 0x00

.db 0x26 ;Logical_Maximum (255)
.db 0xff
.db 0x00

.db 0x75 ;Report_Size (8)
.db 0x08

.db 0x95 ;Report_Count (1)
.db 0x01

.db 0x81 ;Input (Data, Var, Abs)
.db 0x02

.db 0xc0 ;End_Collection
end_report:
end_usb_report_descroptor:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlexBoss
сообщение Jun 30 2006, 17:18
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 30-06-06
Из: Донецк
Пользователь №: 18 488



Думаю, что проблема в том, что в дескрипторе Вашей единственной InterruptEndPoint указан
0-й период опроса, что допустимо только для Bulk и Control EP!
07 05 81 03 08 00 00 <- Низ-зя!

У Вас же в исходнике ясно написано - в mS:
db 0x00 ;bInterval интервал опроса конечной точки в мс для кт прерываний
;1 для изохронной кт, для остальных типов кт не имеет значения
end_usb_endpoint_descriptor100:


"Для конечных точек прерывания, это поле может иметь значение от 1 до 255."
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jul 3 2006, 06:43
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(AlexBoss @ Jun 30 2006, 20:18) *


Спасибо AlexBoss за ответ. К сожалению это число никак не влияет на ситуацию - запросов всёравно нет. Я это устройство делал по примеру из Агурова. Даже если сделать всё так как написано в его книге - результата нет. Точнее есть но не совсем такой как у него. Так например сразу после энумерации устройства на шине я в ер1 помещаю данные и подтверждаю их. После этого мой usb-монитор фиксирует передачу данных в хост (блоки по 64 байта). Я подозреваю, что так, как это interrupt ep1 то хост с выбранным мною периодом опроса контролирует эту ер1 и если там есть данные -забирает их. Теперь вот очень хотелось-бы узнать корректная ли это передача без input-репортов, если да - то куда эти данные сохраняются в компьютере и как их оттуда можно считать.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 22:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016