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

 

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

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

Агуров П.В. Интерфейсы USB. Практика использования и программирования — СПб.: БХВ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interface2004.djvu
Предыдущая << 1 .. 85 86 87 88 89 90 < 91 > 92 93 94 95 96 97 .. 166 >> Следующая

ЩПКСЕССУПРЫ
US232B
US232B — адаптер USB < > RS232. Комплект содержит CD с драйверами под Windows 98/Me/2000/XP, MAC/Linux. Поддерживаются скорости от 300 бит/с До 460,8 кбит/с.
І "БВ-ДРнЙВЕРЫ
Компания FTDI бесплатно распростраї USB-драйверы, обеспечивающие создан пользовательского приложения для упраї обменом данными между компьютером и USB-устройствами, использующими кристаллы FTDI.
Ha выбор программиста предлагаются де драйверов для Windows 98/ME/2000/XP:
• «Virtual COM Port»,
• «D2XX».
Компании-партнеры FTDI предлагают др, для Apple OS и Linux. VCP-драйверы позволяют работать с USB-каналом как с дополнительным СОМ-портом компьютера. 02ХХ-драйверы дают возможность строї Windows припожения на основе DLL-бибі функции которой разбиты на четыре груг
• Классические функции
• Функции работы с EEPROM
• Функции поддержки новых режимов FT232BM/FT245BM
• FT-Win32 API функции Классические функции позволяют опрЕ количество присутствующих на шине US! устройств, открывать и закрывать канал с устройством, записывать и считывать f из канала, попучать статусную информаї. о состоянии FTDI-микросхем, FIFO-буфе обмена, модема, устанавливать состоят линий квитирования на выходе FT232BM очищать FIFO-буферы и т. д. Функции работы с EEPROM дают возмс приложению считывать и записывать различные поля внешней микросхемы El При этом EEPROM можно использовать не только для сохранения настроек USB, но и для произвольных пользовательских Функции поддержки новых режимов FT232BM/FT245BM необходимы
при использовании микросхем FTDI в ка1 конфигураторов FPGA. Функции FT-Win32 API являются альтер классическим функциям. Они эмулируют стандартные вызовы Win32 АРІ для рабо с последовательным каналом и позволяк адаптировать уже готовое приложение, использующее эти вызовы, для работы с микросхемами FTDI.
Поставка и техническая поддержка
194021, Санкт-Петербург, 105082, Москва
Политехническая ул., 21, офис 235 Большая Почтовая, д. 26В, офис 611
Тел. (812) 327 8654 Тел.: (095) 956-3942
Факс (812) 320 1819 Факс: (095) 956-3943
e-mail: zav@efo.spb.su e-mail: sales@fulcrum.ru
http://www.efo.ru http://www.fulcrum.ru
Глава 11. Функции BIOS
277
В этом листинге мы несколько поменяли процедуру DetectusBDevice: найденные в системе контроллеры сохраняются в специальном массиве USBContrArr класса TUSBControllerList (мы обрабатываем первые 6 контрол-леров). После обнаружения контроллеров производится проверка состояния портов для каждого из них. Установленный в единицу бит 0 порта состояния обозначает, что к порту подключено устройство, а установленный в единицу бит 8 показывает, что это низкоскоростное устройство (см. разд. 18.1.7).
Для чтения данных с найденного устройства нам придется выполнить всю ту работу, которую в Windows берет на себя USB-драйвер: сформировать список дескрипторов, передать его устройству и дождаться ответа. К сожалению, эта задача является довольно сложной. Во-первых, для обращения к устройству (точнее будет сказать — порту, к которому подключено устройство) используются регистры хост-контроллера, поэтому следует учитывать конкретную спецификацию контроллера (см. разд. 1.6). Во-вторых, при передаче блока данных необходимо указать контроллеру линейный адрес памяти, что при использовании драйверов-расширителей, не так очевидно, как кажется. Самый простой способ решения второй проблемы — перевод процессора в режим линейной адресации, как это сделано в {6], но такое решение годится, пожалуй, лишь для демонстрационных целей. Объем книги не позволяет привести полный пример решения для всех случаев и всех типов контроллеров. Мы приведем общую схему решения для контроллера UCH. Регистры этого контроллера описываются в главе 18.
Листинг 11.6 показывает основные типы, используемые для работы.
Туре { Список кадров } PFrameList = "TFrameList; TFrameList = Array [1..1024] of Longint;
Type { Запрос } TUSBRequest = packed record
bmRequestType: Byte;
bRequest : Byte;
wValue : Word;
windex : Word;
wLength : Word;
End;
Type ( Заголовок очереди и дескриптор передачи } TTD_Array = Array [1.. 8*64] of Longint;
278
Часть III. Практика программирования
TQueueHeadPointerArray = Packed record
QH_Descriptor : Array [1..8] of Longint;
TD_Array : TTD_Array;
End;
PQueueHead = ~TQueueHead; TQueueHead = TQueueHeadPointerArray;
Для поиска устройства мы будем использовать класс TUSBControlierList. Для простоты мы будем работать с первым найденным устройством, однако очень просто изменить этот код для поиска нужного устройства (листинг 11.7).
і7Листинг 11.7. Поиск первого USB-устройства' ''
Procedure GetFirstDevice; Begin USB_BaseAddr:= 0;
For USB_HostIndex:= 1 to USBControllerList*.GetCount do With USBControllerListA.GetAt(USB__HostIndex)л do For USB_PortNum:= 1 to 2 do If PortConnected(USB_PortNum) then begin USB_BaseAddr:= BaseAddress; USB_PortReg := GetPortBaseAddr(USB_PortNum); Exit; End;
End;
Переменные USB_HostIndex, USB_PortNum, USB_BaseAddr, USB_PortReg будут хранить соответственно номер контроллера, номер порта, базовый адрес контроллера и адрес порта.
Предыдущая << 1 .. 85 86 87 88 89 90 < 91 > 92 93 94 95 96 97 .. 166 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100