Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 120

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — СПб.: БХВ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interface2004.djvu
Предыдущая << 1 .. 114 115 116 117 118 119 < 120 > 121 122 123 124 125 126 .. 166 >> Следующая

П добавить в структуру usb_configuration HID-дескриптор (тип
usb_st_hid_descriptor);
? добавить описание конечной точки типа interrupt in;
? добавить код для передачи данных в хост через конечную точку;
? в код функции usb_get_descriptor добавить обработку запроса дескриптора ню (код 0x21) и дескриптора report (код 0x22).
Описание новых дескрипторов приведено в листинге 13.35.
||||стинг'13.35. Дескрипторы HID-устроиства |||
tdefine CONF_LENGTH tdefine CONF-NB
wSWAP(34) 1
378
Часть IV. Создание USB-устройств
¦define CONF ATTRIBUTES
USB_CONFIG_BUSP0WERED 50 /* - 100 mA */
¦define MAX POWER
/* Константы для интерфейса 0 */ !define INTERFACEO_CLASS 0:
¦define INTERFACEO_SUB_CLASS 0: ¦define INTERFACEO PROTOCOL 0:
0x03 /* HID */
OxFF
OxFF
/* Размер дескриптора репорта */ ¦define SIZE OF REPORT 23
code struot
struct usb_st_configuration_descriptor struct usb_st_interface_descriptor struct usb_st_!hid_descriptor struct usb_st_endpoint_descriptor
epl;
hid;
cfg; ifc;
}
usb_configuration = {
/* CONFIGURATION */ { 9,
},
/* INTERFACE 0 */ { 9,
INTERFACE, /* =4 */
0, /* 0-й интерфейс */
0, /* номер альтернативного инт. */
1, /* 1 конечная точка (кроме 0) */ INTERFACEO-CLASs,
INTERFACEO-SUB-CLASs, INTERFACEO-PROTOCOl,
0 /* дескр. строки интерфейса */
ь
/* Дескриптор HID */
{ 9, HID,
/* дескриптор HID */
Глава 13. HID-устройство на основе Atmel АТ89С5131
379
0x0001,
0,
If
BEPORT,
/* Версия HID */
/* Числовой код страны для локал. устройств /* Число дескрипторов репортов */ /* Номер дескриптора репорта */
wSRAP(SIZE-OF-REPORt) /* Размер дескриптора репорта */
},
/* Дескриптор конечной точки */
{
7,
ENDPOINT,
0x81,
0x03,
wSWAP(8),
0
/* дескриптор ENDPOINT /* номер конечной точки /* атрибуты конечной точки /* максимальный размер пакета /* частота опроса
*/ */ */ */ */
code struct{
byte rep[SIZE_OF_REPORT];
>
HIDReport -
/* HID Report */
{
0x06, 0x00, Oxff, /* USAGE-PAGE (Generic Desktop) */
0x09, 0x01, /* USAGE (Vendor Usage 1) */
Oxal, 0x01, /* COLLECTION (Application) */
0x19, 0x01, /* USAGEjMINIMUM (Vendor Usage 1) */
0x29, 0x01, /* USAGe-MAXIMUM (Vendor Usage 1) */
0x15, 0x00, /* LOGICAL-MINIMUm (0) */
0x26, Oxff, 0x00, /* LOGICALJMAXIMUM (255) */
0x75, 0x08, /* REPORT-SIZe (8) */
0x95, 0x07, /* REPORT_COUNT(7) */
0x81, 0x02, /* INPUT (Data,Var,Abs) */
OxcO /* ENDjOOLLECTION */
Комментарии к дескриптору репорта мы оставили такими, как они были сгенерированы утилитой HID Descriptor Tool. Передача дескрипторов HID и
380
Часть IV. Создание USB-устройств
REPORT ничем не отличается от передачи других дескрипторов (листинг 13.36), следует только помнить, что эти дескрипторы относятся к интерфейсу и поэтому запрашиваются с помощью кода get_descriptor_interf.
!WL - > I ¦idf'"--' h*1 і1 ". j, V- v ' '" ''-«,А •"»'•L 'г ' "я/'>" і
«Листинг 13.36. Передача дескрипторов HID и REPORT"'* " '¦ '
void usb_get_descriptor(){
switch (descriptor_type)
case HID: {
data_to_transfer - sizeof(usb_con?iguration.hid); pbuffer = s(usb_configuration.hid.bLength); break;
)
case REPORT: 1
data_to_transfer = SIZE_OF_REPORT; pbuffer - s(HIDReport.rep[0]); break;
)
)
Скомпилируем и загрузим нашу новую программу в тестовое устройство. В Windows XP не потребуется даже перезагрузки — драйверы для HID-устройства будут установлены автоматически. Windows 98 также устанавливает драйверы автоматически, но для их старта необходимо подать устройству сигнал сброса. Рисунок 13.18 показывает обнаруженное HID-устройство в списке устройств системы.
Отметим, что устройство как бы состоит из двух частей: HID-интерфейса (устройство USB Human Interface Device, мы описали его, указав тип 3 в дескрипторе интерфейса) и пользовательского интерфейса (устройство HID-compliant device, тип которого мы описали в дескрипторе репорта). Вся работа с устройством (чтение конфигурации, прием и передача данных) производится со второй частью устройства.
Однако мало создать HID-устройство, нужно еще научиться производить обмен данными.
гпава 13. НЮ-устроиство на основе Atmel АТ89С5131
381
6j Device Manager
ШШШ'
мв дсаоп view а«р
+!altfa if IaNщ
E- Ц HOME
?-? Computer
Ш Disk drives
Щ ¦ Display adapters
Й DVD/CD-ROM drives
B-Q Floppy disk controllers
Ю Floppy disk drives
Human Interface Devices
HID-cornpliant device
-fti USB Human Interface Device EHg IDE ATA/ATAPI controllers Й-?» Keyboards
Standard ШіДСЙ-Кеу or Microsoft Natural PS/2 Keyboard Й -? Mice and other pointing devices Й--Еь Modems El- 5 Monitors Щ-ЩР Network adapters Ports (COM & LPT) EJ- tU Processors
Й -®. Sound, video and game controllers
ffl- *t System devices
8-? Universal Serial Bus controllers
Рис. 13.18. HID-устройство обнаружено и успешно установлено
13.5.5. Обмен данными с HID-устройством
Как мы описывали в разд. 8.2, обмен с HID-устройством может производиться несколькими методами. Соответственно, для чтения и записи данных используются разные функции.
Предыдущая << 1 .. 114 115 116 117 118 119 < 120 > 121 122 123 124 125 126 .. 166 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100