Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.032 c
1-1097131096
Жбан
2004-10-07 10:38
2004.10.24
Механизм работы Application.Terminate


14-1096885377
It06
2004-10-04 14:22
2004.10.24
HELP


3-1096443366
NewDelpher
2004-09-29 11:36
2004.10.24
Апострофы в MS SQL


14-1097162305
petro
2004-10-07 19:18
2004.10.24
подсчет трафика


14-1096540499
Sergey_F
2004-09-30 14:34
2004.10.24
Как заблокировать клавиатуру в WinXP?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский