Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Аппаратное обеспечение -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 89

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

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

"состояние порта Iм (см. табл. 18.2). Пример поиска устройств на шине USB
приведен в листинге 11.4. Следует помнить, что данный пример использует
карту регистров UHC и, например, для контроллеров EHCI работать не будет.
Для удобства использования мы сделали отдельный модуль и класс для работы
с USB-котроллерами (листинг 11.5).
Uses PCI, StrFunc, Crt, Util, ContList;
Var i, p : Byte;
USBControllerList : PUSBControllerList; Begin ClrScr;
270
Часть III. Практика программирования
If DetectPCIBios then begin WriteLn('PICBIOS поддерживается');
End else begin WriteLn('PICBIOS не поддерживается');
Exit;
End;
USBControllerList:= New(PUSBControllerList, Init);
USBControllerListA .MakeList;
WriteLn('Найдено ', USBControllerListA.GetCount, ' USB-контроллеров');
{ Поиск устройств по контроллерам }
For i:= 1 to USBControllerListA.GetCount do begin With
USBControllerListA.GetAt(i)A do begin { Если контроллер не
сконфигурирован - не обрабатываем )
If not(IsConfigured) then Continue;
ResetController (True ); ( сброс }
ResetController (False); { снять сигнал сброса }
EnableController(True ); { активизировать контроллер )
For p:= 1 to 2 do begin If PortConnected(p) then begin WriteLn('Найдено
устройство: контр='г i, ' порт p);
If IsLowSpeedDevice(p) then WriteLn(' - найденное устройство LowSpeed');
End;
End;
EnableController(False); ( остановить контроллер }
End;
End;
Dispose(USBControllerList, Done);
End.
Гпава 11. Функции BIOS
271
Unit ContList;
INTERFACE
Uses Crt, PCI;
{ USB-контроллер }
Type
PUSBController = ~TUSBController;
TUSBController = object Public Index : Word;
BusNumber : Byte;
DevFuncNumber ; Byte;
BaseAddress : Longint;
IRQNumbar : Byte;
Public
Procedure ResetController (Reset : Boolean);
Procedure EnableController(Enable : Boolean);
Function IsConfigured : Boolean;
Procedure CommandStop;
Procedure CommandRun;
Procedure SetFrameNumber(Number : Word);
Procedure SetFrameListAddress(FrameListAdr : Longint); Public
Function GetPortBaseAddr(Portlndex : Byte) : Word; Function
GetPortState(Portlndex : Byte) : Word;
Function PortConnected(Portlndex : Byte): Boolean; Function
IsLowSpeedDevice(Portlndex : Byte): Boolean; Procedure
EnablePort(Portlndex : Byte; Enable : Boolean); End;
( Максимальное число контроллеров }
Const
MaxControllerlndex = 6;
272
Часть III. Практика программирования
{Список контроллеров }
Туре
PUSBControllerList = ATUSBControllerList;
TUSBControllerList = object Private
USBContrArr : Array [1..MaxControllerlndex] of PUSBController;
USBContrCnt : Byte;
Private
Prqcedure DetectUSBDevice(ClassCode : Longint);
Public Constructor Init;
Destructor Done; virtual;
Public Procedure MakeList;
Function GetCount : Integer;
Function GetAt(Index : Integer) ; PUSBController;
End;
IMPLEMENTATION
{===============================================:
{ TUSBController
{==============================================;
Procedure TUSBController.ResetController(Reset Var Signal : Word;
Begin
If Reset then Signal:= 4 else Signal:= 0;
PortW[BaseAddress]:= Signal;
Delay(10);
End;
Procedure TUSBController.EnableController(Enable ; Boolean);
Var Signal : Word;
Begin
If Enable then Signal:= 1 else Signal:= 0;
PortW[BaseAddress]:= Signal;
End;
====)
)
====)
: Boolean);
Глава 11. Функции BIOS
273
Function TUSBController.IsConfigured : Boolean;
Begin
IsConfigured:= (BaseAddress <> -1);
End;
Function TUSBController.GetPortBaseAddr(Portlndex : Byte) : Word;
Begin If Portlndex = 1 Then GetPortBaseAddr:= BaseAddress + $10 Else
GetPortBaseAddr:= BaseAddress + $12;
End;
Function TUSBController.GetPortState(Portlndex : Byte) : Word;
Begin
GetPortState: *= PortW[GetPortBaseAddr(Portlndex)];
End;
Function TUSBController.PortConnected(Portlndex : Byte): Boolean;
Begin
PortConnected:= (GetPortState(Portlndex) and $0001) <> 0;
End;
Function TUSBController.IsLowSpeedDevice(Portlndex : Byte): Boolean;
Begin
IsLowSpeedDevice:= (GetPortState(Portlndex) and $0100) <> 0;
End;
Procedure TUSBController.EnablePort(Portlndex : Byte; Enable : Boolean);
Var PortAddr : Word;
Begin
PortAddr:= GetPortBaseAddr(Portlndex);
If Enable
Then PortW[PortAddr]:= PortW[PortAddr] or $04 Else PortW[PortAddr]:=
PortW[PortAddr] and $FB;
End;
procedure TUSBController.CoiranandRun; begin
274
Часть III. Практика программирования
PortW[BaseAddress]:= PortW[BaseAddress] or 1; end;
procedure TUSBController.CommandStop; begin
PortW[BaseAddress]:= PortW[BaseAddress] and $FE; end;
Procedure TUSBController.SetFrameNumber(Number : Word); Begin
PortW[BaseAddress+6]:= Number;
End;
Procedure TUSBController.SetFrameListAddress(FrameListAdr Begin Asm
mov dx, BaseAddress
add dx, 08h
db 66h; mov ax, word ptr FrameListAdr { mov eax, ... }
db 66h; out dx,ax { out dx,eax }
End;
End;
{===============================================}
{ TUSBControllerList }
{=================================================== j
Constructor TUSBControllerList.Init;
Предыдущая << 1 .. 83 84 85 86 87 88 < 89 > 90 91 92 93 94 95 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.