⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbhlib.pas

📁 usb4开发
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{
 USB hardware library by NopSoft
 version 2.2beta
 http://nopsoft.republika.pl
}

unit USBHLib;

interface

uses Windows;

{------------------------------------------------------------------------}
{initguid.h and others from BC5.0 + Win98 DDK}

type
 TGuid = packed record
    Data1 :DWord;
    Data2,
    Data3 :Word;
    Data4 :array[0..7] of Byte;
 end;

// macros to define byte pattern for a GUID.
//      Example: DEFINE_GUID(GUID_XXX, a, b, c, ...);
//
// Each dll/exe must initialize the GUIDs once.  This is done in one of
// two ways.  If you are not using precompiled headers for the file(s) which
// initializes the GUIDs, define INITGUID before including compobj.h.  This
// is how OLE builds the initialized versions of the GUIDs which are included
// in compobj.dll.
//
// The alternative (which some versions of the compiler don't handle properly;
// they wind up with the initialized GUIDs in a data, not a text segment),
// is to use a precompiled version of compobj.h and then include initguid.h
// after compobj.h followed by one or more of the guid defintion files.
{
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
    EXTERN_C const GUID CDECL __based(__segname("_CODE")) name \
		    = ( l, w1, w2, ( b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 ) )
}

{------------------------------------------------------------------------}
{usbiodefs.h}
const
 GUID_DEVINTERFACE_USB_HUB :TGuid =
                  (Data1: $F18A0E88;
                   Data2: $C30C;
                   Data3: $11D0;
                   Data4: ($88, $15, $00, $A0, $C9, $06, $BE, $D8));
 GUID_CLASS_USBHUB :TGuid = {GUID_DEVINTERFACE_USB_HUB}
                  (Data1: $F18A0E88;
                   Data2: $C30C;
                   Data3: $11D0;
                   Data4: ($88, $15, $00, $A0, $C9, $06, $BE, $D8));

 GUID_DEVINTERFACE_USB_DEVICE :TGuid =
                  (Data1: $A5DCBF10;
                   Data2: $6530;
                   Data3: $11D2;
                   Data4: ($90, $1F, $00, $C0, $4F, $B9, $51, $ED));
 GUID_CLASS_USB_DEVICE :TGuid = {GUID_DEVINTERFACE_USB_DEVICE}
                  (Data1: $A5DCBF10;
                   Data2: $6530;
                   Data3: $11D2;
                   Data4: ($90, $1F, $00, $C0, $4F, $B9, $51, $ED));

 GUID_DEVINTERFACE_USB_HOST_CONTROLLER :TGuid =
                  (Data1: $3ABF6F2D;
                   Data2: $71C4;
                   Data3: $462A;
                   Data4: ($8A, $92, $1E, $68, $61, $E6, $AF, $27));
 GUID_CLASS_USB_HOST_CONTROLLER :TGuid = {GUID_DEVINTERFACE_USB_HOST_CONTROLLER}
                  (Data1: $3ABF6F2D;
                   Data2: $71C4;
                   Data3: $462A;
                   Data4: ($8A, $92, $1E, $68, $61, $E6, $AF, $27));

 GUID_USB_WMI_STD_DATA :TGuid =
                  (Data1: $4E623B20;
                   Data2: $CB14;
                   Data3: $11D1;
                   Data4: ($B3, $31, $00, $A0, $C9, $59, $BB, $D2));
 GUID_USB_WMI_STD_NOTIFICATION :TGuid =
                  (Data1: $4E623B20;
                   Data2: $CB14;
                   Data3: $11D1;
                   Data4: ($B3, $31, $00, $A0, $C9, $59, $BB, $D2));

const
 USB_SUBMIT_URB                    = 0;
 USB_RESET_PORT                    = 1;
 USB_GET_ROOTHUB_PDO               = 3;
 USB_GET_PORT_STATUS               = 4;
 USB_ENABLE_PORT                   = 5;
 USB_GET_HUB_COUNT                 = 6;
 USB_CYCLE_PORT                    = 7;
 USB_GET_HUB_NAME                  = 8;
 USB_IDLE_NOTIFICATION             = 9;
 USB_GET_BUS_INFO                  = 264;
 USB_GET_CONTROLLER_NAME           = 265;
 USB_GET_BUSGUID_INFO              = 266;
 USB_GET_PARENT_HUB_INFO           = 267;
 USB_GET_DEVICE_HANDLE             = 268;

 HCD_GET_STATS_1                   = 255;
 HCD_DIAGNOSTIC_MODE_ON            = 256;
 HCD_DIAGNOSTIC_MODE_OFF           = 257;
 HCD_GET_ROOT_HUB_NAME             = 258;
 HCD_GET_DRIVERKEY_NAME            = 265;
 HCD_GET_STATS_2                   = 266;
 HCD_DISABLE_PORT                  = 268;
 HCD_ENABLE_PORT                   = 269;
 HCD_USER_REQUEST                  = 270;

 USB_GET_NODE_INFORMATION                = 258;
 USB_GET_NODE_CONNECTION_INFORMATION     = 259;
 USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION = 260;
 USB_GET_NODE_CONNECTION_NAME            = 261;
 USB_DIAG_IGNORE_HUBS_ON                 = 262;
 USB_DIAG_IGNORE_HUBS_OFF                = 263;
 USB_GET_NODE_CONNECTION_DRIVERKEY_NAME  = 264;
 USB_GET_HUB_CAPABILITIES                = 271;
 USB_GET_NODE_CONNECTION_ATTRIBUTES      = 272;

 METHOD_BUFFERED      = 0;
 METHOD_IN_DIRECT     = 1; {+}
 METHOD_OUT_DIRECT    = 2; {+}
 METHOD_NEITHER       = 3;

 FILE_ANY_ACCESS      =            0;
 FILE_SPECIAL_ACCESS  =   (FILE_ANY_ACCESS); {+}
 FILE_READ_ACCESS     =      ( $0001 );    // file & pipe {+}
 FILE_WRITE_ACCESS    =      ( $0002 );    // file & pipe {+}

 FILE_DEVICE_UNKNOWN  = $00000022;
 FILE_DEVICE_USB      = FILE_DEVICE_UNKNOWN;

 USB_CTL_BASE         = (FILE_DEVICE_USB shl 16) or (FILE_ANY_ACCESS shl 14);
 USB_CTL_CONST        = USB_CTL_BASE or METHOD_BUFFERED;
 USB_KERNEL_CTL_CONST = USB_CTL_BASE or METHOD_NEITHER;

function CTL_CODE(const DeviceType, Func, Method, Access :Cardinal) :cardinal;
function USB_CTL(const Func {id}:Cardinal) :cardinal;
function USB_KERNEL_CTL(const Func {id}:Cardinal) :cardinal;

{------------------------------------------------------------------------}
{my}
const
 TUnicodeNameMaxLong = 256;//MAXIMUM_USB_STRING_LENGTH +1 (zero)

 USB_HID_DESCRIPTOR_TYPE               = $21;

type
 PUnicodeName = ^TUnicodeName;
 TUnicodeName = array[0..TUnicodeNameMaxLong - 1] of WideChar;{WChar}

 PUSB_HID_DESCRIPTOR = ^USB_HID_DESCRIPTOR;
 USB_HID_DESCRIPTOR = record
         bLength,
         bDescriptorType :Byte;
         wHIDversion :Word;
         bCountryCode,
         bHIDDescriptorCount,
         bHIDReportType :Byte;
         wHIDReportLength :Word;
 end;

function UnicodeStr(uni :TUnicodeName) :string;
function UnicodeStrLen(len :DWord; uni :TUnicodeName) :string;

{------------------------------------------------------------------------}
{usb100.h}
const
 MAXIMUM_USB_STRING_LENGTH                  = 255;

 USB_DEVICE_CLASS_RESERVED                  = $00;
 USB_DEVICE_CLASS_AUDIO                     = $01;
 USB_DEVICE_CLASS_COMMUNICATIONS            = $02;
 USB_DEVICE_CLASS_HUMAN_INTERFACE           = $03;
 USB_DEVICE_CLASS_MONITOR                   = $04;
 USB_DEVICE_CLASS_PHYSICAL_INTERFACE        = $05;
 USB_DEVICE_CLASS_POWER                     = $06;
 USB_DEVICE_CLASS_PRINTER                   = $07;
 USB_DEVICE_CLASS_STORAGE                   = $08;
 USB_DEVICE_CLASS_HUB                       = $09;
 USB_DEVICE_CLASS_VENDOR_SPECIFIC           = $FF;

 USB_RESERVED_DESCRIPTOR_TYPE               = $06;
 USB_CONFIG_POWER_DESCRIPTOR_TYPE           = $07;
 USB_INTERFACE_POWER_DESCRIPTOR_TYPE        = $08;

 USB_REQUEST_GET_STATUS                     = $00;
 USB_REQUEST_CLEAR_FEATURE                  = $01;
 USB_REQUEST_SET_FEATURE                    = $03;
 USB_REQUEST_SET_ADDRESS                    = $05;
 USB_REQUEST_GET_DESCRIPTOR                 = $06;
 USB_REQUEST_SET_DESCRIPTOR                 = $07;
 USB_REQUEST_GET_CONFIGURATION              = $08;
 USB_REQUEST_SET_CONFIGURATION              = $09;
 USB_REQUEST_GET_INTERFACE                  = $0A;
 USB_REQUEST_SET_INTERFACE                  = $0B;
 USB_REQUEST_SYNC_FRAME                     = $0C;

 USB_GETSTATUS_SELF_POWERED                 = $01;
 USB_GETSTATUS_REMOTE_WAKEUP_ENABLED        = $02;

 BMREQUEST_HOST_TO_DEVICE                   = 0;
 BMREQUEST_DEVICE_TO_HOST                   = 1;

 BMREQUEST_STANDARD                         = 0;
 BMREQUEST_CLASS                            = 1;
 BMREQUEST_VENDOR                           = 2;

 BMREQUEST_TO_DEVICE                        = 0;
 BMREQUEST_TO_INTERFACE                     = 1;
 BMREQUEST_TO_ENDPOINT                      = 2;
 BMREQUEST_TO_OTHER                         = 3;

// USB_COMMON_DESCRIPTOR.bDescriptorType constants
 USB_DEVICE_DESCRIPTOR_TYPE                 = $01;
 USB_CONFIGURATION_DESCRIPTOR_TYPE          = $02;
 USB_STRING_DESCRIPTOR_TYPE                 = $03;
 USB_INTERFACE_DESCRIPTOR_TYPE              = $04;
 USB_ENDPOINT_DESCRIPTOR_TYPE               = $05;

type
  PUSB_COMMON_DESCRIPTOR = ^USB_COMMON_DESCRIPTOR;
  USB_COMMON_DESCRIPTOR = packed record
	 bLength,
	 bDescriptorType :Byte;
  end;

//#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((USHORT)((USHORT)d << 8 | i))
function USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i :Word) :Word;

// USB_CONFIGURATION_DESCRIPTOR.bmAttributes constants
const
 USB_CONFIG_POWERED_MASK                     = $C0;
 USB_CONFIG_BUS_POWERED                      = $80;
 USB_CONFIG_SELF_POWERED                     = $40;
 USB_CONFIG_REMOTE_WAKEUP                    = $20;

type
  PUSB_CONFIGURATION_DESCRIPTOR = ^USB_CONFIGURATION_DESCRIPTOR;
  USB_CONFIGURATION_DESCRIPTOR = packed record
         bLength,
         bDescriptorType :Byte;
         wTotalLength : Word;
         bNumInterfaces,
         bConfigurationValue,{configuration string index}{tego nie bylo! a  musi byc}
         iConfiguration,
         bmAttributes,
         MaxPower :Byte;
  end;

  PUSB_DEVICE_DESCRIPTOR = ^USB_DEVICE_DESCRIPTOR;
  USB_DEVICE_DESCRIPTOR = packed record
         bLength,
         bDescriptorType :Byte;
         bcdUSB :word;
         bDeviceClass,
         bDeviceSubClass,
         bDeviceProtocol,
         bMaxPacketSize0 :Byte;
         idVendor,
         idProduct,
         bcdDevice :Word;{device version}
         iManufacturer,
         iProduct,
         iSerialNumber,
         bNumConfigurations :Byte;
  end;

const
 USB_ENDPOINT_DIRECTION_MASK                 = $80;

//#define USB_ENDPOINT_DIRECTION_OUT(x) (!((x) & USB_ENDPOINT_DIRECTION_MASK))
function USB_ENDPOINT_DIRECTION_OUT(x :Cardinal) :Cardinal;
//#define USB_ENDPOINT_DIRECTION_IN(x) ((x) & USB_ENDPOINT_DIRECTION_MASK)
function USB_ENDPOINT_DIRECTION_IN(x :Cardinal) :Cardinal;

const
// USB_ENDPOINT_DESCRIPTOR.bmAttributes constants
 USB_ENDPOINT_TYPE_MASK                      = $03;
 USB_ENDPOINT_TYPE_CONTROL                   = $00;
 USB_ENDPOINT_TYPE_ISOCHRONOUS               = $01;
 USB_ENDPOINT_TYPE_BULK                      = $02;
 USB_ENDPOINT_TYPE_INTERRUPT                 = $03;

type
  PUSB_ENDPOINT_DESCRIPTOR = ^USB_ENDPOINT_DESCRIPTOR;
  USB_ENDPOINT_DESCRIPTOR = packed record
         bLength,
         bDescriptorType,
         bEndpointAddress,
         bmAttributes :Byte;
         wMaxPacketSize :Word;
         bInterval :Byte;
  end;

const
 USB_FEATURE_ENDPOINT_STALL                  = $0000;
 USB_FEATURE_REMOTE_WAKEUP                   = $0001;

type
  PUSB_INTERFACE_DESCRIPTOR = ^USB_INTERFACE_DESCRIPTOR;
  USB_INTERFACE_DESCRIPTOR = packed record
         bLength,
         bDescriptorType,
         bInterfaceNumber,
         bAlternateSetting,
         bNumEndpoints,
         bInterfaceClass,
         bInterfaceSubClass,
         bInterfaceProtocol,
         iInterface :Byte;
  end;

  PUSB_STRING_DESCRIPTOR = ^USB_STRING_DESCRIPTOR;
  USB_STRING_DESCRIPTOR = packed record
         bLength,
         bDescriptorType :Byte;
         bString :TUniCodeName;
  end;

  PUSB_HUB_DESCRIPTOR = ^USB_HUB_DESCRIPTOR;
  USB_HUB_DESCRIPTOR = packed record
 	 bDescriptorLength,
	 bDescriptorType,
	 bNumberOfPorts :Byte;
	 wHubCharacteristics :Word;
	 bPowerOnToPowerGood,
	 bHubControlCurrent,
	 bRemoveAndPowerMask :array[0..63] of Byte;
  end;

const
 USB_SUPPORT_D0_COMMAND                      = $01;
 USB_SUPPORT_D1_COMMAND                      = $02;
 USB_SUPPORT_D2_COMMAND                      = $04;
 USB_SUPPORT_D3_COMMAND                      = $08;

 USB_SUPPORT_D1_WAKEUP                       = $10;
 USB_SUPPORT_D2_WAKEUP                       = $20;

type
  PUSB_CONFIGURATION_POWER_DESCRIPTOR = ^USB_CONFIGURATION_POWER_DESCRIPTOR;
  USB_CONFIGURATION_POWER_DESCRIPTOR = packed record
	 bLength,
	 bDescriptorType :Byte;
	 SelfPowerConsumedD0 :array[0..2] of Byte;
	 bPowerSummaryId,
         bBusPowerSavingD1,
         bSelfPowerSavingD1,
         bBusPowerSavingD2,
         bSelfPowerSavingD2,
         bBusPowerSavingD3,
         bSelfPowerSavingD3 :Byte;
	 TransitionTimeFromD1,
         TransitionTimeFromD2,
	 TransitionTimeFromD3 :Word;
  end;

const
 USB_FEATURE_INTERFACE_POWER_D0              = $0002;
 USB_FEATURE_INTERFACE_POWER_D1              = $0003;
 USB_FEATURE_INTERFACE_POWER_D2              = $0004;
 USB_FEATURE_INTERFACE_POWER_D3              = $0005;

type
  PUSB_INTERFACE_POWER_DESCRIPTOR = ^USB_INTERFACE_POWER_DESCRIPTOR;
  USB_INTERFACE_POWER_DESCRIPTOR = packed record
	 bLength,
	 bDescriptorType,
	 bmCapabilitiesFlags,
	 bBusPowerSavingD1,
	 bSelfPowerSavingD1,
	 bBusPowerSavingD2,
	 bSelfPowerSavingD2,
	 bBusPowerSavingD3,
	 bSelfPowerSavingD3 :Byte;
	 TransitionTimeFromD1,
	 TransitionTimeFromD2,
	 TransitionTimeFromD3 :Word;
  end;

{------------------------------------------------------------------------}
{usbioctl.h}
type
  LARGE_INTEGER = packed record
    LowPart :DWord;
    HighPart :Longint;
  end;

const
 USBD_PORT_ENABLED                 = 1;
 USBD_PORT_CONNECTED               = 2;

const
 IOCTL_INTERNAL_USB_CYCLE_PORT          = USB_KERNEL_CTL_CONST or (USB_CYCLE_PORT shl 2);
 IOCTL_INTERNAL_USB_ENABLE_PORT         = USB_KERNEL_CTL_CONST or (USB_ENABLE_PORT shl 2);
 IOCTL_INTERNAL_USB_GET_BUS_INFO        = USB_CTL_CONST or (USB_GET_BUS_INFO shl 2);
 IOCTL_INTERNAL_USB_GET_BUSGUID_INFO    = USB_CTL_CONST or (USB_GET_BUSGUID_INFO shl 2);
 IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME = USB_CTL_CONST or (USB_GET_CONTROLLER_NAME shl 2);
 IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE   = USB_KERNEL_CTL_CONST or (USB_GET_DEVICE_HANDLE shl 2);
 IOCTL_INTERNAL_USB_GET_HUB_COUNT       = USB_KERNEL_CTL_CONST or (USB_GET_HUB_COUNT shl 2);
 IOCTL_INTERNAL_USB_GET_HUB_NAME        = USB_CTL_CONST or (USB_GET_HUB_NAME shl 2);
 IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO = USB_CTL_CONST or (USB_GET_PARENT_HUB_INFO shl 2);
 IOCTL_INTERNAL_USB_GET_PORT_STATUS     = USB_KERNEL_CTL_CONST or (USB_GET_PORT_STATUS shl 2);
 IOCTL_INTERNAL_USB_RESET_PORT          = USB_KERNEL_CTL_CONST or (USB_RESET_PORT shl 2);
 IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO     = USB_KERNEL_CTL_CONST or (USB_GET_ROOTHUB_PDO shl 2);
 IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION = USB_KERNEL_CTL_CONST or (USB_IDLE_NOTIFICATION shl 2);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -