亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usb.pas

?? delphi下控制USB的代碼,非常不錯
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{$A+,B-,D+,E+,F-,G+,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}

{ ************************************************************************ }
{ USB.PAS:   SB BASIC Routines by Dieter R. Pawelczak <dieterp@bigfoot.de> }
{ ======================================================================== }
{                                                                          }
{              Unit to initialize and address the USB Host Controller      }
{                                                                          }
{ (c) 1998 by Dieter Pawelczak, <dieterp@bigfoot.de>                       }
{ This is public domain Software - selling this software is prohibeted!    }
{                                                                          }
{ function DetectVirtualRealMode(..) detects virtual real mode
{ function USBdetect(..);     detects an PCI USB Controller - done by INIT
{ function USBEnable          enables USB Controller PCI-BUS Master
{ function USBGetDeviceIOSpace(..)        reads I/O port address
{ function USBSetDeviceIOSpace(..)        sets I/O port address
{ function USBReadCommandReg  read access IOCommandRegister
{ procedure USBWriteCommandReg write access IOCommandRegister
{
{ Initialization should first check the USB device (test USBdetected),
{ read the I/O address space and if zero set an unused port address space
{ (32 byte), now PIC-BUS Master Control can be enabled by USBenable
{                                                                          }
{ ************************************************************************ }

{$define DEBUG} { Enables DEBUG Output }

unit usb;

interface

{$IFDEF DEBUG}
uses PCI,dutils;
{$ELSE}
uses PCI;
{$ENDIF}





const { USB-Command Regiser }

      MAXP=$80;
      CF=$40;
      SWDBG=$20;
      FGR=$10;
      EGSM=$08;
      GRESET=$04;
      HCRESET=$02;
      RS=$01;



type FrameListPointer = longint;            { 32 bit address + Q & T flag }
type FrameListPointerArray = Array[0..1023] of FrameListPointer;
type FrameList = ^FrameListPointerArray;


type LinkPointer = longint;            { 32 bit address + Vf & Q & T flag }
type BufferPointer = longint;          { 32 bit address of the data buffer }

type TransferDescriptor = record
        next:LinkPointer;                   { points to next T/Q descriptor or indicates termination by T-flag }
        ActLen: word;                       { presents the actual length (11 bit ) = and 2047 }
        Status: byte;                       { presents the Status }
        Flags:Byte;                         { Flags SPD(5), C_ERR(4,3), LS(2), ISO(1), IOC (0)}
        Token: longint;                   { MaxLen/R/R/EndPt/DeviceAddr/PID to be sent }
        BufferPtr: BufferPointer;              { Buffer Pointer for Data }
        res:array[0..3] of longint;
     end;
type transmitstatusptr=^byte;
type QueueHeadLinkPointer = longint;        { 32 bit address + Q & T flag }
type QueueHeadElementPointer = longint;     { 32 bit address + Q & T flag, bit 2 is undefined (write as 0) }

type QueueHead = record
        next:QueueHeadLinkPointer;          { points to next T/Q descriptor or indicates termination by T-flag }
        Element:QueueHeadElementPointer;    { points to next Queue Operation or indicates termination by T-flag }
     end;

type PortState = (port_disabled, port_newAttached, port_enabled, port_configured);

type USBRequest = record
        bmRequestType:Byte;
        bRequest:byte;
        wValue:word;
        wIndex:word;
        wLength:word;
    end;

const GetDeviceDescriptor : USBRequest =
       (bmRequestType:$80;bRequest:$06;wValue:$0001;wIndex:$0000;wLength:$0012);
const SetAddress : USBRequest =
       (bmRequestType:$00;bRequest:$05;wValue:$0001;wIndex:$0000;wLength:$0000);


var USBDeviceID,USBVendorID:word;           { PCI-Identification USB Controller }
    USBBusNumber,USBFunctionNumber:Byte;
    USBDescription:string;                  { Text Description }
    USBIOSpace:word;                        { I/O address space set/read }
    USBdetected:boolean;                    { Flag set by INIT }


var ISADeviceID,ISAVendorID:word;           { PCI-Identification PCI-ISA Controller }
    ISABusNumber,ISAFunctionNumber:Byte;    { needed by USBSetInt }
    ISADescription:string;                  { Text Description }
    ISAdetected:boolean;                    { Flag set by INIT }

var FrameListPtr:FrameList;                 { pointer to the frame list }
    FrameListBase:longint;                  { frame list 32 bit base address}
    FrameListHandle:pointer;                { TP memory handle }


{ LOW LEVEL: USB-Host Controller and PCI functions }
function USBdetect(Var DeviceID,VendorID:word;VAR BusNumber,FunctionNumber:Byte;var Description:string):boolean;
function USBEnable:boolean;
function USBDisable:boolean;
function USBGetDeviceIOSpace(var IOSpace:word):boolean;
function USBSetDeviceIOSpace(IOSpace:word):boolean;
function USBReadCommandReg:word;
function USBReadStatusReg:word;
function USBReadPort0Reg:word;
function USBReadPort1Reg:word;
function USBReadInterruptReg:word;
function USBReadFrameBaseReg:longint;
function USBReadFrameNumberReg:word;
procedure USBWriteCommandReg(value:word);
procedure USBWriteStatusReg(value:word);
procedure USBWriteInterruptReg(value:word);
procedure USBWriteFrameNumberReg(value:word);
procedure USBWritePort0Reg(value:word);
procedure USBWritePort1Reg(value:word);
function USBSetInterruptNumber(IntNo:word; active:boolean):boolean;
function USBGetInterruptNumber(Var IntNo:word;Var active:boolean):boolean;
function USBAllocateFrameList(Var FList:FrameList;VAR FLBase:FrameListPointer):boolean;
procedure USBCommandRun;
procedure USBCommandStop;
procedure USBDone;
procedure usbclearframelist;

{ General USB Functions }

function AllocateTransferDescriptor:pointer; { Returns pointer to TD or nil }
procedure FreeTransferDescriptor(p:pointer);
function CreateTransferDescriptor(Terminate,Queue,Depth:boolean;Link:linkpointer;
                                  Actln:word;State:word;IOC,IOS,LS:Boolean;C_error:byte;SPD:boolean;
                                  PID,DeviceAddress,EndPt:Byte;DataToggle:boolean;MaxLen:word;
                                  BPtr:BufferPointer):pointer; { Allocates and configures TD - Returns pointer to TD or nil }
procedure AlterTransferDescriptor(p:pointer;Actln:word;State:word;IOC,IOS,LS:Boolean;C_error:byte;SPD:boolean);

procedure InsertQueueDescriptorInFrameList(Number:word;p:pointer);
procedure InsertTransferDescriptorInFrameList(Number:word;p:pointer);
function GetLinkPointerFromTransferDescriptor(p:pointer):LinkPointer;
function GetLinkPointerFromFrameList(number:word):LinkPointer;
function GetTransferDescriptorFromFrameList(number:word):pointer;
function GetTransferDescriptorFromLinkPointer(l:linkpointer):pointer;
{ Helpers }

function DetectVirtualRealMode:boolean;
function GetPtrBase(p:pointer):longint;
function GetBasePtr(b:longint):pointer;


{$IFDEF DEBUG}
procedure USBprintTD(P:pointer);
procedure USBprintFrameList;
{$ENDIF}

implementation

function USBdetect(Var DeviceID,VendorID:word;VAR BusNumber,FunctionNumber:Byte;var Description:string):boolean;
var i:byte;
    error,found:boolean;
begin
  BusNumber:=0;FunctionNumber:=0;
  USBdetect:=false;
  i:=0;
  error:=false;
  found:=false;
  repeat { check different possible USB-PCI devices ... }
  case i of
    0: begin deviceId:=$7020;vendorId:=$8086; description:='Intel 82371SB USB controller'; end;
    1: begin deviceId:=$7112;vendorId:=$8086; description:='Intel PIIX4 USB controller'; end;
    2: begin deviceId:=$0571;vendorId:=$1106; description:='VIA AMD-645 USB controller'; end;
    3: begin deviceId:=$A0F8;vendorID:=$1045; description:='Opti 82C750 (Vendetta) USB controller'; end;
    4: begin deviceId:=$C861;vendorID:=$1045; description:='Opti 82C861/871 (Firelink/FireBlast) USB controller'; end;
  end;
  inc(i);
  found:=detectPCIdevice(deviceId,vendorId,BusNumber,FunctionNumber);
  error:=i>4;
  until error or found;
  USBdetect:=found;
end;

function ISAdetect(Var DeviceID,VendorID:word;VAR BusNumber,FunctionNumber:Byte;var Description:string):boolean;
var i:byte;
    error,found:boolean;
begin
  BusNumber:=0;FunctionNumber:=0;
  ISAdetect:=false;
  i:=0;
  error:=false;
  found:=false;
  repeat { check different possible ISA-PCI devices ... }
  case i of
    0: begin deviceId:=$7000;vendorId:=$8086; description:='Intel 82371SB ISA-PCI controller'; end;
    1: begin deviceId:=$7110;vendorId:=$8086; description:='Intel PIIX4 ISA-PCI controller'; end;
{    2: begin deviceId:=$0571;vendorId:=$1106; description:='VIA AMD-645 USB controller'; end;
    3: begin deviceId:=$A0F8;vendorID:=$1045; description:='Opti 82C750 (Vendetta) USB controller'; end;
    4: begin deviceId:=$C861;vendorID:=$1045; description:='Opti 82C861/871 (Firelink/FireBlast) USB controller'; end; }
  end;
  inc(i);
  found:=detectPCIdevice(deviceId,vendorId,BusNumber,FunctionNumber);
  error:=i>2;
  until error or found;
  ISAdetect:=found;
end;

function USBGetDeviceIOSpace(var IOSpace:word):boolean;
var okay:boolean;
    result:word;
    setiospace:word;
begin
  okay:=false;
  if readPCIRegisterWord($20,USBBusNumber,USBFunctionNumber,result) then
    begin
      okay:=true;
      IOSpace:=result and $FFFE;
      USBIOSpace:=IOSpace;
    end;
  USBGetDeviceIOSpace:=okay;
end;

function USBSetDeviceIOSpace(IOSpace:word):boolean;
var okay:boolean;
    result:word;
    setiospace:word;
begin
  okay:=false;
  IOSpace:=IOSpace ;
  if writePCIRegisterWord($20,USBBusNumber,USBFunctionNumber,IOSpace) then
    begin
      okay:=true;
      USBIOSpace:=IOSpace;
    end;
  USBSetDeviceIOSpace:=okay;
end;

function USBReadCommandReg:word;
begin
  USBReadCommandReg:=portw[USBIOSpace];
end;

function USBReadStatusReg:word;
begin
  USBReadStatusReg:=portw[USBIOSpace+2];
end;

function USBReadInterruptReg:word;
begin
  USBReadInterruptReg:=portw[USBIOSpace+4];
end;

function USBReadPort0Reg:word;
begin
  USBReadPort0Reg:=portw[USBIOSpace+16];
end;

procedure USBWritePort0Reg(value:word);
begin
  portw[USBIOSpace+16]:=value;
end;

function USBReadPort1Reg:word;
begin
  USBReadPort1Reg:=portw[USBIOSpace+18];
end;

procedure USBWritePort1Reg(value:word);
begin
  portw[USBIOSpace+18]:=value;
end;

procedure USBWriteInterruptReg(value:word);
begin
  portw[USBIOSpace+4]:=value;
end;

procedure USBWriteStatusReg(value:word);
begin
  portw[USBIOSpace+2]:=value;
end;

procedure USBWriteCommandReg(value:word);
begin
  portw[USBIOSpace]:=value;
end;

procedure USBWriteFrameNumberReg(value:word);
begin
  portw[USBIOSpace+6]:=value;
end;

function USBReadFrameNumberReg:word;
begin
  USBReadFrameNumberReg:=portw[USBIOSpace+6];
end;

function USBReadFrameBaseReg:longint;
begin
  asm
        mov dx,USBIOSpace
        add dx,08h
        db 66h; in ax,dx                       { in dx,eax  }
        db 66h; mov word ptr FrameListBase,ax  { mov ..,eax }
  end;
  USBReadFrameBaseReg:=FrameListBase;
end;

function USBEnable:boolean;
var okay:boolean;
    command:word;
begin
  okay:=false;
  if usbdetected and (USBIOspace<>0) then
    if readPCIRegisterWord($4,USBBusNumber,USBFunctionNumber,command) then
      begin
        okay:=command and 5=5;
        command:=command or 5;
        if writePCIRegisterWord($4,USBBusNumber,USBFunctionNumber,command) then
          okay:=true;
      end;
  USBenable:=okay;
end;

function USBGetInterruptNumber(Var IntNo:word;Var active:boolean):boolean;
var okay:boolean;
    command:longint;
    command2:longint;
begin
  okay:=false;
  active:=false;
  if isadetected then
      if readPCIRegisterDWord($60,ISABusNumber,ISAFunctionNumber,command) then
        begin
          intno:=command shr 24;
          active:=intno and 128=0;
          intno:=intno and 15;
          okay:=true;
        end;
   USBGetInterruptNumber:=okay;
end;

function USBSetInterruptNumber(IntNo:word;active:boolean):boolean;
var okay:boolean;
    command:byte;
    command2:word;
    dummy:word;
begin
  okay:=false;
  asm
    cli
  end;
  if isadetected then
      if readPCIRegisterByte($63,ISABusNumber,ISAFunctionNumber,command) then

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高清shemale亚洲人妖| 日本成人在线一区| 菠萝蜜视频在线观看一区| 久久综合九色欧美综合狠狠| 麻豆91在线播放| 久久综合资源网| 国产v日产∨综合v精品视频| 国产精品家庭影院| 欧美综合在线视频| 美女在线视频一区| 国产视频911| 在线免费精品视频| 久久国产精品无码网站| 欧美国产欧美综合| 欧美三级午夜理伦三级中视频| 五月综合激情网| 久久亚洲精华国产精华液 | 中文天堂在线一区| 91老师国产黑色丝袜在线| 亚洲午夜在线电影| 日韩三级av在线播放| 国产精品99久久久久久久vr | 国产一区二区中文字幕| 国产精品久久久一区麻豆最新章节| 91亚洲男人天堂| 美女任你摸久久| 亚洲男同1069视频| 精品粉嫩aⅴ一区二区三区四区 | 久草热8精品视频在线观看| 亚洲国产精品v| 在线电影院国产精品| 国产成人午夜片在线观看高清观看| 自拍偷在线精品自拍偷无码专区| 欧美网站一区二区| 国产成人av网站| 五月天久久比比资源色| 国产精品萝li| 日韩精品一区二区三区在线播放| 91免费看视频| 精品一区二区三区影院在线午夜| 最好看的中文字幕久久| 2020国产成人综合网| 欧美巨大另类极品videosbest| 国产电影一区在线| 日本大胆欧美人术艺术动态| 亚洲另类一区二区| 国产精品视频第一区| 91精品国产黑色紧身裤美女| 91丨九色丨蝌蚪丨老版| 精品在线播放午夜| 婷婷国产在线综合| 亚洲精品乱码久久久久久黑人| 2020国产精品| 日韩精品在线一区二区| 欧美日韩午夜影院| 在线亚洲高清视频| 99v久久综合狠狠综合久久| 国产一区二区三区免费播放| 日韩成人免费看| 亚洲一二三区在线观看| 亚洲色图都市小说| 国产精品久久久久三级| 久久精品夜色噜噜亚洲a∨| 欧美一级在线免费| 欧美精品久久一区| 在线免费不卡视频| 91免费国产在线观看| 成人h动漫精品一区二区| 精品一区二区免费视频| 精品一区二区免费看| 免播放器亚洲一区| 五月激情六月综合| 视频一区二区欧美| 亚洲高清一区二区三区| 亚洲一区二区高清| 亚洲高清视频在线| 五月天激情综合网| 日本aⅴ精品一区二区三区| 日本欧美一区二区三区| 日韩综合在线视频| 奇米一区二区三区av| 蜜桃av一区二区| 久久精品国产免费| 国产综合色产在线精品| 国产伦精品一区二区三区免费| 国产综合色在线视频区| 粉嫩久久99精品久久久久久夜| 高清成人免费视频| 99麻豆久久久国产精品免费优播| av一区二区三区在线| 色吊一区二区三区| 在线视频国产一区| 777xxx欧美| 久久久国际精品| 18成人在线视频| 亚洲国产裸拍裸体视频在线观看乱了 | 成人免费视频播放| 91丨九色丨蝌蚪富婆spa| 欧美日韩精品一区二区在线播放| 制服丝袜日韩国产| 国产亚洲一区二区三区在线观看 | 精品国产亚洲在线| 欧美高清在线视频| 亚洲精品菠萝久久久久久久| 五月天国产精品| 国产69精品久久99不卡| 色天天综合色天天久久| 在线不卡免费av| 国产欧美一区二区精品性色超碰 | 欧美大片日本大片免费观看| 久久精品免视看| 亚洲美女少妇撒尿| 美女一区二区视频| 9i在线看片成人免费| 欧美日韩久久一区二区| 久久综合久色欧美综合狠狠| 亚洲精选一二三| 国产一区啦啦啦在线观看| 色网站国产精品| 精品美女被调教视频大全网站| 国产精品护士白丝一区av| 亚洲国产精品视频| 成人精品视频一区二区三区 | 一区二区高清免费观看影视大全| 日韩在线观看一区二区| 国产成人精品免费一区二区| 欧美日韩成人一区二区| 国产欧美一区二区三区在线老狼| 亚洲一区二区四区蜜桃| 风间由美一区二区av101| 欧美日韩国产一区二区三区地区| 国产日韩在线不卡| 日本麻豆一区二区三区视频| 91在线观看免费视频| www久久精品| 午夜电影一区二区| 色欧美片视频在线观看| 久久精品在线免费观看| 日本三级亚洲精品| 色香色香欲天天天影视综合网| 久久久另类综合| 日韩黄色免费电影| 91国内精品野花午夜精品| 久久久亚洲欧洲日产国码αv| 天天综合色天天| 欧美中文字幕不卡| 最新久久zyz资源站| 国产精品白丝jk黑袜喷水| 日韩一级成人av| 亚洲国产美女搞黄色| 色综合视频一区二区三区高清| 精品国免费一区二区三区| 三级影片在线观看欧美日韩一区二区| av毛片久久久久**hd| 国产精品视频观看| 国产91在线|亚洲| 久久网站热最新地址| 蜜桃视频在线观看一区| 欧美一区二区三区影视| 图片区小说区国产精品视频| 欧美性受xxxx黑人xyx性爽| 亚洲欧美欧美一区二区三区| 播五月开心婷婷综合| 国产精品国产三级国产普通话蜜臀| 黑人精品欧美一区二区蜜桃| 精品少妇一区二区三区在线视频| 91理论电影在线观看| 国产精品久久久久久久久晋中| 紧缚奴在线一区二区三区| 日韩免费观看2025年上映的电影| 日韩福利电影在线| www.亚洲色图.com| 国产性色一区二区| 国产成人免费视频| 中文字幕成人网| 99在线热播精品免费| 国产精品福利在线播放| 一道本成人在线| 亚洲一区二区综合| 91精品在线麻豆| 久久99国产精品麻豆| 国产日韩av一区二区| 成人激情文学综合网| 亚洲精品免费在线| 欧美日韩一区二区欧美激情| 三级不卡在线观看| 久久久综合九色合综国产精品| 国产剧情一区在线| 中文字幕永久在线不卡| 欧美午夜影院一区| 蜜桃在线一区二区三区| 国产日韩精品视频一区| 色综合激情久久| 日韩福利视频导航| 国产亚洲女人久久久久毛片| 91在线视频网址| 日本中文字幕一区二区有限公司| 精品福利一区二区三区| 91色|porny| 蓝色福利精品导航|