Помогите с HID USB.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено lyakhovich 26 апреля 2004 г. 21:02

Использую USBN9604. Хочу сделать HID-устройство, которое будет иметь IN и OUT эндпоинты с размером пакета в 64 байта. Делаю такие дескрипторы:

const char ReportDescriptor[40] = {
0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1)
0x09, 0x01, // USAGE (Vendor Usage 1)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x40, // REPORT_COUNT (64)
0x91, 0x00, // OUTPUT (Data,Ary,Abs)
0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x40, // REPORT_COUNT (64)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0xc0 // END_COLLECTION
};


#define RPT_DESC_SIZE sizeof(ReportDescriptor)

const char DEV_DESC[] = {DEV_LENGTH, /*Величина этого дескриптора в байтах */
DEVICE, /*Указываем на DEVICE descriptor */
0x10,0x01, /*Версия USB спецификации в BCD 1.0 */
0x00, /*Код класса устройства */
0x00, /*Код подкласса устройства */
0x00, /*Код протокола */
0x08, /*Размер пакета для Endpoint 0 */
0x34,0x07, /*Shtrih-M vendor ID */
0x85,0xA9, /*Shtrih-M Product ID */
0x00,0x01, /*Shtrih-M Revision ID 1.0 в BCD */
MFG_STR, /*Индекс Производителя в String Descriptor */
PID_STR, /*Индекс Продукта в String Descriptor */
SNBR_STR, /*Индекс Серийного номера в String Descriptor */
0x01 /*Количество возможных конфигураций */
};

const char CFG_DESC[] = {CFG_LENGTH, /*Величина этого дескриптора в байтах */
CONFIGURATION, /*Указываем на CONFIGURATION descriptor */
0x29,0x00, /*Длина дескриптора включая Interface,Endpoint,HID */
0x01, /*Количество Интерфейсов поддерживаемых Конфигурацией*/
0x01, /*Номер этой Конфигурации */
CFG_STR, /*Индекс Описания Конфигурации в String Descriptor */
0x80, /*Указываем, что берем питание с USB шины */
100, /*Указываем, что Мах потребление (200 mA) */

INT_LENGTH, /*Величина этого дескриптора в байтах */
INTERFACE, /*Указываем на INTERFACE descriptor */
0x01, /*Номер Интерфеса в данной конфигурации */
0x00, /*Альтернативный Интерфейс. '0'- Нет другого */
0x02, /*Количество Endpoints используемых этим Интерфейсом */
HIDCLASS, /*Код класса - '3' HID устройство */
NOSUBCLASS, /*Код подкласса - '0' нет подкласса */
0x00, /*Код протокола - устройство не использует протокола */
INT_STR, /*Индекс Описания Интерфейса в String Descriptor */


HID_LENGTH, /*Величина этого дескриптора в байтах */
HID, /*Указываем на HID descriptor - 21 */
0x00,0x01, /*Версия HID спецификации в BCD */
0x00, /*Страна для которой изготовлено изделие. 0-для всех */
1, /*Количество HID дескрипторов. '1'-Report descriptor */
HIDREPORT, /*Тип дескриптора IN */
RPT_DESC_SIZE,0x0, /*Величина Report Descriptort в байтах */

/*Pipe 1 (endpoint 5) */
END_LENGTH, /*Величина этого дескриптора в байтах */
ENDPOINT, /*Указываем на ENDPOINT descriptor */
0x85, /*Указываем что это IN Endpoint c Адресом 5 */
0x03, /*Устанавливаем Тип передачи данных - Interrupt */
0x40,0x00, /*Устанавливаем что Мax выдаваемый размер пакета 64 */
0xFF, /*Время опроса Конечной точки - 255ms */

/*Pipe 2 (endpoint 6) */
END_LENGTH, /*Величина этого дескриптора в байтах */
ENDPOINT, /*Указываем на ENDPOINT descriptor */
0x06, /*Указываем что это OUT Endpoint c Адресом 6 */
0x03, /*Устанавливаем Тип передачи данных - Interrupt */
0x40,0x00, /*Устанавливаем что Мax выдаваемый размер пакета 64 */
0xFF /*Время опроса Конечной точки - 255ms */


};


#define DEV_DESC_SIZE sizeof(DEV_DESC)
#define CFG_DESC_SIZE sizeof(CFG_DESC)


В результате утилитка USB View показывает следующее:

Device Descriptor:
bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0734
idProduct: 0xA985
bcdDevice: 0x0100
iManufacturer: 0x01
iProduct: 0x02
iSerialNumber: 0x03
bNumConfigurations: 0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: Full
Device Address: 0x01
Open Pipes: 2

Endpoint Descriptor:
bEndpointAddress: 0x85
Transfer Type: Interrupt
wMaxPacketSize: 0x0040 (64)
bInterval: 0xFF

Endpoint Descriptor:
bEndpointAddress: 0x00
Transfer Type: Control
wMaxPacketSize: 0x0507 (1287)
wInterval: 0x0306
bSyncAddress: 0x40

Что за левый контрол пайп и в чем вилы?
Если в этой утилите включить отображение Config Descriptors то вылезает следующее:

Device Descriptor:
bcdUSB: 0x0110
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x0734
idProduct: 0xA985
bcdDevice: 0x0100
iManufacturer: 0x01
0x0409: "STC Shtrih-M"
iProduct: 0x02
0x0409: "Shtrih-Epson FR"
iSerialNumber: 0x03
0x0409: "001"
bNumConfigurations: 0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: Full
Device Address: 0x01
Open Pipes: 2

Endpoint Descriptor:
bEndpointAddress: 0x85
Transfer Type: Interrupt
wMaxPacketSize: 0x0040 (64)
bInterval: 0xFF

Endpoint Descriptor:
bEndpointAddress: 0x00
Transfer Type: Control
wMaxPacketSize: 0x0507 (1287)
wInterval: 0x0306
bSyncAddress: 0x40

Configuration Descriptor:
wTotalLength: 0x0029
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x04
0x0409: "Standart Configuration"
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0x64 (200 Ma)

Interface Descriptor:
bInterfaceNumber: 0x01
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x03 (HID)
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 0x05
0x0409: "FR Interface"

HID Descriptor:
bcdHID: 0x0100
bCountryCode: 0x00
bNumDescriptors: 0x01
bDescriptorType: 0x22
wDescriptorLength: 0x0028

Endpoint Descriptor:
bEndpointAddress: 0x85
Transfer Type: Interrupt
wMaxPacketSize: 0x0040 (64)
bInterval: 0xFF

Endpoint Descriptor:
bEndpointAddress: 0x06
Transfer Type: Interrupt
wMaxPacketSize: 0x0040 (64)
bInterval: 0xFF

Короче вопрос: Почему система открывает какой-то левый контрол пайп, как от этого избавиться? Чувствую, что делаю что-то совсем не так...


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru