Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.24;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2004.10.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
3-1095714619
Maxim______
2004-09-21 01:10
2004.10.24
тормоза BLOB в GDB


1-1097215738
Девушка
2004-10-08 10:08
2004.10.24
Abstact error


3-1096128617
Гость
2004-09-25 20:10
2004.10.24
Связка Master-Detail


1-1096997019
Knoxville
2004-10-05 21:23
2004.10.24
Разделение строки на части


14-1096877994
Слоник
2004-10-04 12:19
2004.10.24
Сетевая обучающая игровая программа free-ware