Работа с USB (+)
От: ega23  
Дата: 26.06.03 07:56
Оценка:
Привет всем!

Исходные данные: Разработан некий хитрый device — считыватель Proximity карт. Вся его задача по запросу извне выдавать код карты (4 байта). Устройство подключается к USB.

Теперь, собственно, вопросы.
1. Каким образом составить DeviceDescriptor и ReportDescriptor, т.е. какие поля обязательны, а в какие можно нули проставить?
2. Нужен ли для этого устройства собственный драйвер, или можно воспользоваться чем-нибудь стандартным, например hid.sys?

В принципе, эти вопросы основные. Для меня это дело абсолютно новое (до этого с БД работал), поэтому совершенно непонятно с чего начать. Электронщику, который это устройство разрабатывал, нужно прошить в чип дескрипторы, а я его этими дескрипторами держу.

Буду рад любой информации.
Re: Работа с USB (+)
От: XorNeT  
Дата: 26.06.03 13:37
Оценка:
Здравствуйте, ega23, Вы писали:

E>Привет всем!


E>Исходные данные: Разработан некий хитрый device — считыватель Proximity карт. Вся его задача по запросу извне выдавать код карты (4 байта). Устройство подключается к USB.


E>Теперь, собственно, вопросы.

E>1. Каким образом составить DeviceDescriptor и ReportDescriptor, т.е. какие поля обязательны, а в какие можно нули проставить?
E>2. Нужен ли для этого устройства собственный драйвер, или можно воспользоваться чем-нибудь стандартным, например hid.sys?

E>В принципе, эти вопросы основные. Для меня это дело абсолютно новое (до этого с БД работал), поэтому совершенно непонятно с чего начать. Электронщику, который это устройство разрабатывал, нужно прошить в чип дескрипторы, а я его этими дескрипторами держу.


E>Буду рад любой информации.


В ДДК есть семпл bulkusb. Погляди может поможет. А вообще есть замечательная книжка Уолтера Они — ВДМ называется.Она очень хорошо описывает различные аспекты работы ЮСБ устройств и содержит неплохие примеры.
Ну это в том случае если решишся свой драйвер писать — устройство видимо не особо специфическое — я с проксимити считывателями на ком-интерфейсе работал — все достаточно просто.
Re: Работа с USB (+)
От: .h  
Дата: 26.06.03 15:18
Оценка:
Здравствуйте, ega23, Вы писали:

E>Привет всем!


E>Исходные данные: Разработан некий хитрый device — считыватель Proximity карт. Вся его задача по запросу извне выдавать код карты (4 байта). Устройство подключается к USB.


E>Теперь, собственно, вопросы.

E>1. Каким образом составить DeviceDescriptor и ReportDescriptor, т.е. какие поля обязательны, а в какие можно нули проставить?
E>2. Нужен ли для этого устройства собственный драйвер, или можно воспользоваться чем-нибудь стандартным, например hid.sys?

E>В принципе, эти вопросы основные. Для меня это дело абсолютно новое (до этого с БД работал), поэтому совершенно непонятно с чего начать. Электронщику, который это устройство разрабатывал, нужно прошить в чип дескрипторы, а я его этими дескрипторами держу.


E>Буду рад любой информации.


1.Форматы всех дескрипторов описаны в спецификации USB (www.usb.org).
В SDK к USB-контроллеру обычно бывают примеры прошивок, например для USBN9602
эти дескрипторы заполняются так:

const byte DEV_DESC[] = {DEV_LENGTH,        /*length of this desc.    */
                         DEVICE,            /*DEVICE descriptor       */
                         0x00,0x01,         /*spec rev level (BCD)    */
                         0x00,              /*device class            */
                         0x00,              /*device subclass         */
                         0x00,              /*device protocol         */
                         0x08,              /*max packet size         */
                         0x00,0x04,         /*National's vendor ID    */
                         0x5B,0xC3,         /*National's product ID   */
                         0x40,0x01,         /*National's revision ID  */
                         MFG_STR_OFS,       /*index of manuf. string  */
                         PID_STR_OFS,       /*index of prod.  string  */
                         0,                 /*index of ser. # string  */
                         0x01               /*number of configs.      */
                         };

unsigned char ReportDescriptor[59] = {
    0x05, 0x01,                    /* USAGE_PAGE (Generic Desktop)    */
    0x15, 0x00,                    /* LOGICAL_MINIMUM (0)             */
    0x09, 0x04,                    /* USAGE (Joystick)                */
    0xa1, 0x01,                    /* COLLECTION (Application)        */
    0x15, 0x00,                    /*   LOGICAL_MINIMUM (0)           */
    0x26, 0xff, 0x00,              /*   LOGICAL_MAXIMUM (255)         */
    0x75, 0x08,                    /*   REPORT_SIZE (8)               */
    0x95, 0x01,                    /*   REPORT_COUNT (1)              */
    0x81, 0x03,                    /*   INPUT (Cnst,Var,Abs)          */
    0x05, 0x01,                    /*   USAGE_PAGE (Generic Desktop)  */
    0x09, 0x01,                    /*   USAGE (Pointer)               */
    0xa1, 0x00,                    /*   COLLECTION (Physical)         */
    0x09, 0x30,                    /*     USAGE (X)                   */
    0x09, 0x31,                    /*     USAGE (Y)                   */
    0x95, 0x02,                    /*     REPORT_COUNT (2)            */
    0x81, 0x02,                    /*     INPUT (Data,Var,Abs)        */
    0xc0,                          /*   END_COLLECTION                */
    0x15, 0x00,                    /*   LOGICAL_MINIMUM (0)           */
    0x25, 0x01,                    /*   LOGICAL_MAXIMUM (1)           */
    0x75, 0x01,                    /*   REPORT_SIZE (1)               */
    0x95, 0x04,                    /*   REPORT_COUNT (4)              */
    0x81, 0x03,                    /*   INPUT (Cnst,Var,Abs)          */
    0x05, 0x09,                    /*   USAGE_PAGE (Button)           */
    0x19, 0x01,                    /*   USAGE_MINIMUM (Button 1)      */
    0x29, 0x04,                    /*   USAGE_MAXIMUM (Button 4)      */
    0x55, 0x00,                    /*   UNIT_EXPONENT (0)             */
    0x65, 0x00,                    /*   UNIT (None)                   */
    0x95, 0x04,                    /*   REPORT_COUNT (4)              */
    0x81, 0x02,                    /*   INPUT (Data,Var,Abs)          */
    0xc0                           /* END_COLLECTION                  */
};



2. Для HID-устройства можно обойтись без написания драйвера, пример работы с HID-устройством из user mode есть в DDK
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.