init
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
using System;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace DTS.Common.WINUSBConnection
|
||||
{
|
||||
/// <summary>
|
||||
/// These declarations are translated from the C declarations in various files
|
||||
/// in the Windows DDK. The files are:
|
||||
///
|
||||
/// winddk\6001\inc\api\usb.h
|
||||
/// winddk\6001\inc\api\usb100.h
|
||||
/// winddk\6001\inc\api\winusbio.h
|
||||
///
|
||||
/// (your home directory and release number may vary)
|
||||
/// </summary>
|
||||
|
||||
internal sealed partial class WinUsbDevice
|
||||
{
|
||||
internal const uint DEVICE_SPEED = 1;
|
||||
internal const byte USB_ENDPOINT_DIRECTION_MASK = 0X80;
|
||||
|
||||
internal enum PolicyType
|
||||
{
|
||||
ShortPacketTerminate = 1,
|
||||
AutoClearStall,
|
||||
PipeTransferTimeout,
|
||||
IgnoreShortPackets,
|
||||
AllowPartialReads,
|
||||
AutoFlush,
|
||||
RawIO,
|
||||
}
|
||||
|
||||
internal enum USBDPipeTypes
|
||||
{
|
||||
UsbdPipeTypeControl,
|
||||
UsbdPipeTypeIsochronous,
|
||||
UsbdPipeTypeBulk,
|
||||
UsbdPipeTypeInterrupt,
|
||||
}
|
||||
|
||||
internal enum USBDeviceSpeeds
|
||||
{
|
||||
UsbLowSpeed = 1,
|
||||
UsbFullSpeed,
|
||||
UsbHighSpeed,
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct USBConfigurationDescriptor
|
||||
{
|
||||
internal byte bLength;
|
||||
internal byte bDescriptorType;
|
||||
internal ushort wTotalLength;
|
||||
internal byte bNumInterfaces;
|
||||
internal byte bConfigurationValue;
|
||||
internal byte iConfiguration;
|
||||
internal byte bmAttributes;
|
||||
internal byte MaxPower;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct USBInterfaceDescriptor
|
||||
{
|
||||
internal byte bLength;
|
||||
internal byte bDescriptorType;
|
||||
internal byte bInterfaceNumber;
|
||||
internal byte bAlternateSetting;
|
||||
internal byte bNumEndpoints;
|
||||
internal byte bInterfaceClass;
|
||||
internal byte bInterfaceSubClass;
|
||||
internal byte bInterfaceProtocol;
|
||||
internal byte iInterface;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct WinUSBPipeInformation
|
||||
{
|
||||
internal USBDPipeTypes PipeTypes;
|
||||
internal byte PipeId;
|
||||
internal ushort MaximumPacketSize;
|
||||
internal byte Interval;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||
internal struct WinUSBSetupPacket
|
||||
{
|
||||
internal byte RequestType;
|
||||
internal byte Request;
|
||||
internal ushort Value;
|
||||
internal ushort Index;
|
||||
internal ushort Length;
|
||||
}
|
||||
|
||||
[DllImport("winusb.dll", SetLastError = true)]
|
||||
internal static extern bool WinUsb_ControlTransfer(IntPtr interfaceHandle, WinUSBSetupPacket setupPacket, byte[] buffer, uint bufferLength, ref uint lengthTransferred, IntPtr overlapped);
|
||||
|
||||
[DllImport("winusb.dll", SetLastError = true)]
|
||||
internal static extern bool WinUsb_Free(IntPtr interfaceHandle);
|
||||
|
||||
[DllImport("winusb.dll", SetLastError = true)]
|
||||
internal static extern bool WinUsb_Initialize(SafeFileHandle deviceHandle, ref IntPtr interfaceHandle);
|
||||
|
||||
// Use this declaration to retrieve DEVICE_SPEED (the only currently defined InformationType).
|
||||
|
||||
[DllImport("winusb.dll", SetLastError = true)]
|
||||
internal static extern bool WinUsb_QueryDeviceInformation(IntPtr interfaceHandle, uint informationType, ref uint bufferLength, ref byte buffer);
|
||||
|
||||
[DllImport("winusb.dll", SetLastError = true)]
|
||||
internal static extern bool WinUsb_QueryInterfaceSettings(IntPtr interfaceHandle, byte alternateInterfaceNumber, ref USBInterfaceDescriptor usbAltInterfaceDescriptor);
|
||||
|
||||
[DllImport("winusb.dll", SetLastError = true)]
|
||||
internal static extern bool WinUsb_QueryPipe(IntPtr interfaceHandle, byte alternateInterfaceNumber, byte pipeIndex, ref WinUSBPipeInformation pipeInformation);
|
||||
|
||||
[DllImport("winusb.dll", SetLastError = true)]
|
||||
internal static extern bool WinUsb_ReadPipe(IntPtr interfaceHandle, byte pipeId, byte[] buffer, uint bufferLength, ref uint lengthTransferred, IntPtr overlapped);
|
||||
|
||||
// Two declarations for WinUsb_SetPipePolicy.
|
||||
// Use this one when the returned Value is a Byte (all except PIPE_TRANSFER_TIMEOUT):
|
||||
|
||||
[DllImport("winusb.dll", SetLastError = true)]
|
||||
internal static extern bool WinUsb_SetPipePolicy(IntPtr interfaceHandle, byte pipeId, uint policyType, uint valueLength, ref byte Value);
|
||||
|
||||
// Use this alias when the returned Value is a UInt32 (PIPE_TRANSFER_TIMEOUT only):
|
||||
|
||||
[DllImport("winusb.dll", SetLastError = true, EntryPoint = "WinUsb_SetPipePolicy")]
|
||||
internal static extern bool WinUsb_SetPipePolicy1(IntPtr interfaceHandle, byte pipeId, uint policyType, uint valueLength, ref uint Value);
|
||||
|
||||
[DllImport("winusb.dll", SetLastError = true)]
|
||||
internal static extern bool WinUsb_WritePipe(IntPtr interfaceHandle, Byte pipeId, byte[] buffer, uint bufferLength, ref uint lengthTransferred, IntPtr overlapped);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user