📄 usbio_i.pas
字号:
unit USBIO_I;
interface
uses Windows;
{***********************************************************************
* Module: usbio_i.h
* Long name: USBIO Driver Interface
* Description: Defines the interface (API) of the USBIO driver
*
* Runtime Env.: Win32
* Author(s): Guenter Hildebrandt, Thomas Fr鰄lich
* Company: Thesycon GmbH, Ilmenau
*********************************************************************** }
//
// Define the API version number.
// This will be incremented if changes are made.
//
// Applications should check if the driver supports the
// required API version using IOCTL_USBIO_GET_DRIVER_INFO.
//
// current API version: 1.30
const
USBIO_API_VERSION = DWORD($0130);
// build in (default) GUID for the interface
const
USBIO_IID_STR = '{325ddf96-938c-11d3-9e34-0080c82727f4}';
USBIO_IID_STR_W : widestring = USBIO_IID_STR;
USBIO_IID : TGUID = USBIO_IID_STR;
type USHORT = word;
//
// Error Codes
//
const
USBIO_ERR_SUCCESS = DWORD($00000000);
USBIO_ERR_CRC = DWORD($E0000001);
USBIO_ERR_BTSTUFF = DWORD($E0000002);
USBIO_ERR_DATA_TOGGLE_MISMATCH = DWORD($E0000003);
USBIO_ERR_STALL_PID = DWORD($E0000004);
USBIO_ERR_DEV_NOT_RESPONDING = DWORD($E0000005);
USBIO_ERR_PID_CHECK_FAILURE = DWORD($E0000006);
USBIO_ERR_UNEXPECTED_PID = DWORD($E0000007);
USBIO_ERR_DATA_OVERRUN = DWORD($E0000008);
USBIO_ERR_DATA_UNDERRUN = DWORD($E0000009);
USBIO_ERR_RESERVED1 = DWORD($E000000A);
USBIO_ERR_RESERVED2 = DWORD($E000000B);
USBIO_ERR_BUFFER_OVERRUN = DWORD($E000000C);
USBIO_ERR_BUFFER_UNDERRUN = DWORD($E000000D);
USBIO_ERR_NOT_ACCESSED = DWORD($E000000F);
USBIO_ERR_FIFO = DWORD($E0000010);
USBIO_ERR_ENDPOINT_HALTED = DWORD($E0000030);
USBIO_ERR_NO_MEMORY = DWORD($E0000100);
USBIO_ERR_INVALID_URB_FUNCTION = DWORD($E0000200);
USBIO_ERR_INVALID_PARAMETER = DWORD($E0000300);
USBIO_ERR_ERROR_BUSY = DWORD($E0000400);
USBIO_ERR_REQUEST_FAILED = DWORD($E0000500);
USBIO_ERR_INVALID_PIPE_HANDLE = DWORD($E0000600);
USBIO_ERR_NO_BANDWIDTH = DWORD($E0000700);
USBIO_ERR_INTERNAL_HC_ERROR = DWORD($E0000800);
USBIO_ERR_ERROR_SHORT_TRANSFER = DWORD($E0000900);
USBIO_ERR_BAD_START_FRAME = DWORD($E0000A00);
USBIO_ERR_ISOCH_REQUEST_FAILED = DWORD($E0000B00);
USBIO_ERR_FRAME_CONTROL_OWNED = DWORD($E0000C00);
USBIO_ERR_FRAME_CONTROL_NOT_OWNED = DWORD($E0000D00);
USBIO_ERR_CANCELED = DWORD($E0010000);
USBIO_ERR_CANCELING = DWORD($E0020000);
USBIO_ERR_FAILED = DWORD($E0001000);
USBIO_ERR_INVALID_INBUFFER = DWORD($E0001001);
USBIO_ERR_INVALID_OUTBUFFER = DWORD($E0001002);
USBIO_ERR_OUT_OF_MEMORY = DWORD($E0001003);
USBIO_ERR_PENDING_REQUESTS = DWORD($E0001004);
USBIO_ERR_ALREADY_CONFIGURED = DWORD($E0001005);
USBIO_ERR_NOT_CONFIGURED = DWORD($E0001006);
USBIO_ERR_OPEN_PIPES = DWORD($E0001007);
USBIO_ERR_ALREADY_BOUND = DWORD($E0001008);
USBIO_ERR_NOT_BOUND = DWORD($E0001009);
USBIO_ERR_DEVICE_NOT_PRESENT = DWORD($E000100A);
USBIO_ERR_CONTROL_NOT_SUPPORTED = DWORD($E000100B);
USBIO_ERR_TIMEOUT = DWORD($E000100C);
USBIO_ERR_INVALID_RECIPIENT = DWORD($E000100D);
USBIO_ERR_INVALID_TYPE = DWORD($E000100E);
USBIO_ERR_INVALID_IOCTL = DWORD($E000100F);
USBIO_ERR_INVALID_DIRECTION = DWORD($E0001010);
USBIO_ERR_TOO_MUCH_ISO_PACKETS = DWORD($E0001011);
USBIO_ERR_POOL_EMPTY = DWORD($E0001012);
USBIO_ERR_PIPE_NOT_FOUND = DWORD($E0001013);
USBIO_ERR_INVALID_ISO_PACKET = DWORD($E0001014);
USBIO_ERR_OUT_OF_ADDRESS_SPACE = DWORD($E0001015);
USBIO_ERR_INTERFACE_NOT_FOUND = DWORD($E0001016);
USBIO_ERR_INVALID_DEVICE_STATE = DWORD($E0001017);
USBIO_ERR_INVALID_PARAM = DWORD($E0001018);
USBIO_ERR_DEMO_EXPIRED = DWORD($E0001019);
USBIO_ERR_INVALID_POWER_STATE = DWORD($E000101A);
USBIO_ERR_POWER_DOWN = DWORD($E000101B);
USBIO_ERR_VERSION_MISMATCH = DWORD($E000101C);
USBIO_ERR_SET_CONFIGURATION_FAILED = DWORD($E000101D);
USBIO_ERR_VID_RESTRICTION = DWORD($E0001080);
USBIO_ERR_ISO_RESTRICTION = DWORD($E0001081);
USBIO_ERR_BULK_RESTRICTION = DWORD($E0001082);
USBIO_ERR_EP0_RESTRICTION = DWORD($E0001083);
USBIO_ERR_PIPE_RESTRICTION = DWORD($E0001084);
USBIO_ERR_PIPE_SIZE_RESTRICTION = DWORD($E0001085);
USBIO_ERR_DEVICE_NOT_FOUND = DWORD($E0001100);
USBIO_ERR_DEVICE_NOT_OPEN = DWORD($E0001102);
USBIO_ERR_NO_SUCH_DEVICE_INSTANCE = DWORD($E0001104);
USBIO_ERR_INVALID_FUNCTION_PARAM = DWORD($E0001105);
//
// IOCTL codes.
// Note that function codes 0-2047 are reserved for Microsoft, and
// 2048-4095 are reserved for customers.
//
IOCTL_USBIO_GET_DESCRIPTOR = DWORD($80942006);
IOCTL_USBIO_SET_DESCRIPTOR = DWORD($80942009);
IOCTL_USBIO_SET_FEATURE = DWORD($8094200C);
IOCTL_USBIO_CLEAR_FEATURE = DWORD($80942010);
IOCTL_USBIO_GET_STATUS = DWORD($80942014);
IOCTL_USBIO_GET_CONFIGURATION = DWORD($80942018);
IOCTL_USBIO_GET_INTERFACE = DWORD($8094201C);
IOCTL_USBIO_STORE_CONFIG_DESCRIPTOR = DWORD($80942020);
IOCTL_USBIO_SET_CONFIGURATION = DWORD($80942024);
IOCTL_USBIO_UNCONFIGURE_DEVICE = DWORD($80942028);
IOCTL_USBIO_SET_INTERFACE = DWORD($8094202C);
IOCTL_USBIO_CLASS_OR_VENDOR_IN_REQUEST = DWORD($80942032);
IOCTL_USBIO_CLASS_OR_VENDOR_OUT_REQUEST = DWORD($80942035);
IOCTL_USBIO_GET_DEVICE_PARAMETERS = DWORD($8094203C);
IOCTL_USBIO_SET_DEVICE_PARAMETERS = DWORD($80942040);
IOCTL_USBIO_GET_CONFIGURATION_INFO = DWORD($80942050);
IOCTL_USBIO_RESET_DEVICE = DWORD($80942054);
IOCTL_USBIO_GET_CURRENT_FRAME_NUMBER = DWORD($80942058);
IOCTL_USBIO_SET_DEVICE_POWER_STATE = DWORD($8094205C);
IOCTL_USBIO_GET_DEVICE_POWER_STATE = DWORD($80942060);
IOCTL_USBIO_GET_DRIVER_INFO = DWORD($8094206C);
IOCTL_USBIO_CYCLE_PORT = DWORD($80942070);
IOCTL_USBIO_BIND_PIPE = DWORD($80942078);
IOCTL_USBIO_UNBIND_PIPE = DWORD($8094207C);
IOCTL_USBIO_RESET_PIPE = DWORD($80942080);
IOCTL_USBIO_ABORT_PIPE = DWORD($80942084);
IOCTL_USBIO_GET_PIPE_PARAMETERS = DWORD($8094208C);
IOCTL_USBIO_SET_PIPE_PARAMETERS = DWORD($80942090);
IOCTL_USBIO_PIPE_CONTROL_TRANSFER_IN = DWORD($809420A2);
IOCTL_USBIO_PIPE_CONTROL_TRANSFER_OUT= DWORD($809420A5);
USBIO_RESET_DEVICE_ON_CLOSE = DWORD($00000001);
USBIO_UNCONFIGURE_ON_CLOSE = DWORD($00000002);
USBIO_ENABLE_REMOTE_WAKEUP = DWORD($00000004);
USBIO_SHORT_TRANSFER_OK = DWORD($00010000);
USBIO_START_TRANSFER_ASAP = DWORD($00020000);
USBIO_MAX_INTERFACES = DWORD(32);
USBIO_MAX_PIPES = DWORD(32);
{$MINENUMSIZE 4} // enum type constants should be longwords
type
USBIO_PIPE_TYPE = (
PipeTypeControl,
PipeTypeIsochronous,
PipeTypeBulk,
PipeTypeInterrupt);
type
USBIO_REQUEST_RECIPIENT = (
RecipientDevice,
RecipientInterface,
RecipientEndpoint,
RecipientOther);
type
USBIO_REQUEST_TYPE = (
UsbioRequestDummy_0, // =0
RequestTypeClass,
RequestTypeVendor);
type
USBIO_DEVICE_POWER_STATE = (
DevicePowerStateD0,
DevicePowerStateD1,
DevicePowerStateD2,
DevicePowerStateD3);
type
USBIO_DESCRIPTOR_REQUEST =
packed record
Recipient : USBIO_REQUEST_RECIPIENT;
DescriptorType : UCHAR;
DescriptorIndex : UCHAR;
LanguageId : USHORT;
end;
PUSBIO_DESCRIPTOR_REQUEST = ^USBIO_DESCRIPTOR_REQUEST;
type
USBIO_FEATURE_REQUEST =
packed record
Recipient : USBIO_REQUEST_RECIPIENT;
FeatureSelector : USHORT;
Index : USHORT;
end;
PUSBIO_FEATURE_REQUEST = ^USBIO_FEATURE_REQUEST;
type
USBIO_STATUS_REQUEST =
packed record
Recipient : USBIO_REQUEST_RECIPIENT;
Index : USHORT;
end;
PUSBIO_STATUS_REQUEST = ^USBIO_STATUS_REQUEST;
type
USBIO_STATUS_REQUEST_DATA =
packed record
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -