Форум: "WinAPI";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
ВнизUSB Найти похожие ветки
← →
Александр1 (2004-09-10 11:03) [0]Здравствуйте уважаемые мастера. Подскажите пожалуйста как определить установлен ли на компьютере USB контроллер.
← →
Александр1 (2004-09-10 16:03) [1]Ну чё никто не знает. Такого быть не может!
← →
Александр1 (2004-09-11 05:26) [2]Очень странно?
← →
DC-AC (2004-09-11 13:11) [3]Я думаю нужно просканировать все устройства на PCI шине и если одно (или несколько) из них имеют Class $0C (Serial Bus Controller) и Subclass $03 (USB) - то это оно и есть. Попутно можно узнать Vendor ID, Device ID и ещё много чего. Но это уже по желанию.
← →
Александр1 (2004-09-13 05:47) [4]
> DC-AC (11.09.04 13:11) [3]
А почитать не знаешь где можно про это?
← →
DC-AC (2004-09-13 07:15) [5]В DDK наверное. Или в MSDN.
← →
Александр1 (2004-09-15 10:43) [6]
> DC-AC (11.09.04 13:11) [3]
А примерчика ни какого случайно нет?
← →
DC-AC (2004-09-16 07:17) [7]Есть пример работы с шиной PCI через Int21h c ассемблерными процедурами. ТОЛЬКО для Win9x. Нужно ?
← →
Александр1 (2004-09-21 18:44) [8]А на delphi можно?
← →
DC-AC (2004-09-22 07:58) [9]Можно, у нас на всём можно ;-)
const
PCI_FUNCTION_ID = $B1;
PCI_BIOS_PRESENT = $01;
FIND_PCI_DEVICE = $02;
FIND_PCI_CLASS_CODE = $03;
READ_CONFIG_BYTE = $08;
SUCCESSFUL = $00;
NOT_SUCCESSFUL = $01;
FUNC_NOT_SUPPORTED = $81;
BAD_VENDOR_ID = $83;
DEVICE_NOT_FOUND = $86;
BAD_REGISTER_NUMBER = $87;
SET_FAILED = $88;
BUFFER_TOO_SMALL = $89;
var
Vendor_ID,Device_ID: Word;
Subclass,Classcode,ReturnCode,DevAndFunc: Byte;
PCI_VerHi,PCI_VerLo,PCI_Char,PCI_HiBus: Byte;
Infotbl: Array [0..$FF] of Byte;
...
procedure Look_PCI;{ Look for PCI BIOS }
begin
asm
pusha
mov ah,PCI_FUNCTION_ID
mov al,PCI_BIOS_PRESENT
int $1a
jc @exit
{ check signature bytes OK }
cmp dx,$4350
jne @exit
{ check no error code returned > AH=00=Success }
cmp ah,0
jne @exit
mov PCI_Char,al
mov PCI_HiBus,cl
mov PCI_VerLo,bl
mov PCI_VerHi,bh
@exit:
popa
end;
end;
function Lookup_Bios(devicenum,func,bus:byte;index:word) : byte;
var inf:byte;
begin
asm
pusha
mov ah,PCI_FUNCTION_ID
mov al,READ_CONFIG_BYTE
mov bl,devicenum
shl bl,3
add bl,func
mov bh,bus
mov di,index
int $1a
jc @exit
mov inf,cl
@exit:
mov ReturnCode,ah
popa
end;
Result:=inf;
end;
function IsUSBPresent: Boolean;
var Index: Word;
Info,Device,Func,BusNbr,Class_Code,Subclass_Code: Byte;
begin
Result := false;
Look_PCI; // здесь можно вставить проверку на наличие шины PCI и её ревизии (PCI_VerHi,PCI_VerLo)
for BusNbr:=0 to PCI_HiBus do
begin
for Device:=0 to $1F do
begin
for Func:=0 to 7 do
begin
for Index:=0 to $FF do
begin
Info:=Lookup_Bios(Device,Func,BusNbr,Index);
if Info=$FF then Break;
Infotbl[Index]:=Info;
end;
if Info <> $FF then
begin
Vendor_ID:=Infotbl[1] shl 8 + Infotbl[0];
Device_ID:=Infotbl[3] shl 8 + Infotbl[2];
Class_Code:=Infotbl[11];
Subclass_Code:=Infotbl[10];
if (Class_Code = $0C) and (Subclass_Code = $03) then
begin
Result := true;
Exit;
end;
end;
end;
end;
end;
end;
Всё... В глобальных переменных Vendor_ID,Device_ID - наш USB-контроллер (если он присутствует).
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c