Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/hakchi2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'FelLib/WinUSBNet/API/WinUSBDeviceAPI.cs')
-rw-r--r--FelLib/WinUSBNet/API/WinUSBDeviceAPI.cs202
1 files changed, 202 insertions, 0 deletions
diff --git a/FelLib/WinUSBNet/API/WinUSBDeviceAPI.cs b/FelLib/WinUSBNet/API/WinUSBDeviceAPI.cs
new file mode 100644
index 00000000..0492b7fd
--- /dev/null
+++ b/FelLib/WinUSBNet/API/WinUSBDeviceAPI.cs
@@ -0,0 +1,202 @@
+/* WinUSBNet library
+ * (C) 2010 Thomas Bleeker (www.madwizard.org)
+ *
+ * Licensed under the MIT license, see license.txt or:
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+/* NOTE: Parts of the code in this file are based on the work of Jan Axelson
+ * See http://www.lvr.com/winusb.htm for more information
+ */
+
+using System;
+using Microsoft.Win32.SafeHandles;
+using System.Runtime.InteropServices;
+using System.Threading;
+
+namespace MadWizard.WinUSBNet.API
+{
+ [StructLayout(LayoutKind.Sequential)]
+ struct USB_DEVICE_DESCRIPTOR
+ {
+ public byte bLength;
+ public byte bDescriptorType;
+ public ushort bcdUSB;
+ public byte bDeviceClass;
+ public byte bDeviceSubClass;
+ public byte bDeviceProtocol;
+ public byte bMaxPacketSize0;
+ public ushort idVendor;
+ public ushort idProduct;
+ public ushort bcdDevice;
+ public byte iManufacturer;
+ public byte iProduct;
+ public byte iSerialNumber;
+ public byte bNumConfigurations;
+ };
+
+ [StructLayout(LayoutKind.Sequential)]
+ struct USB_CONFIGURATION_DESCRIPTOR
+ {
+ public byte bLength;
+ public byte bDescriptorType;
+ public ushort wTotalLength;
+ public byte bNumInterfaces;
+ public byte bConfigurationValue;
+ public byte iConfiguration;
+ public byte bmAttributes;
+ public byte MaxPower;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ struct USB_INTERFACE_DESCRIPTOR
+ {
+ public byte bLength;
+ public byte bDescriptorType;
+ public byte bInterfaceNumber;
+ public byte bAlternateSetting;
+ public byte bNumEndpoints;
+ public byte bInterfaceClass;
+ public byte bInterfaceSubClass;
+ public byte bInterfaceProtocol;
+ public byte iInterface;
+ };
+ enum USBD_PIPE_TYPE : int
+ {
+ UsbdPipeTypeControl,
+ UsbdPipeTypeIsochronous,
+ UsbdPipeTypeBulk,
+ UsbdPipeTypeInterrupt,
+ }
+ [StructLayout(LayoutKind.Sequential)]
+ struct WINUSB_PIPE_INFORMATION
+ {
+ public USBD_PIPE_TYPE PipeType;
+ public byte PipeId;
+ public ushort MaximumPacketSize;
+ public byte Interval;
+ }
+
+ enum POLICY_TYPE : int
+ {
+ SHORT_PACKET_TERMINATE = 1,
+ AUTO_CLEAR_STALL,
+ PIPE_TRANSFER_TIMEOUT,
+ IGNORE_SHORT_PACKETS,
+ ALLOW_PARTIAL_READS,
+ AUTO_FLUSH,
+ RAW_IO,
+ }
+
+
+ partial class WinUSBDevice
+ {
+ private const UInt32 DEVICE_SPEED = ((UInt32)(1));
+
+ private enum USB_DEVICE_SPEED : int
+ {
+ UsbLowSpeed = 1,
+ UsbFullSpeed,
+ UsbHighSpeed,
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ private struct WINUSB_SETUP_PACKET
+ {
+ public byte RequestType;
+ public byte Request;
+ public ushort Value;
+ public ushort Index;
+ public ushort Length;
+ }
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_ControlTransfer(IntPtr InterfaceHandle, WINUSB_SETUP_PACKET SetupPacket, Byte[] Buffer, UInt32 BufferLength, ref UInt32 LengthTransferred, IntPtr Overlapped);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static unsafe extern bool WinUsb_ControlTransfer(IntPtr InterfaceHandle, WINUSB_SETUP_PACKET SetupPacket, Byte[] Buffer, UInt32 BufferLength, ref UInt32 LengthTransferred, NativeOverlapped* pOverlapped);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_Free(IntPtr InterfaceHandle);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_Initialize(SafeFileHandle DeviceHandle, ref IntPtr InterfaceHandle);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_QueryDeviceInformation(IntPtr InterfaceHandle, UInt32 InformationType, ref UInt32 BufferLength, out byte Buffer);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_QueryInterfaceSettings(IntPtr InterfaceHandle, Byte AlternateInterfaceNumber, out USB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_QueryPipe(IntPtr InterfaceHandle, Byte AlternateInterfaceNumber, Byte PipeIndex, out WINUSB_PIPE_INFORMATION PipeInformation);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static unsafe extern bool WinUsb_ReadPipe(IntPtr InterfaceHandle, byte PipeID, byte* pBuffer, uint BufferLength, out uint LengthTransferred, IntPtr Overlapped);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static unsafe extern bool WinUsb_ReadPipe(IntPtr InterfaceHandle, byte PipeID, byte* pBuffer, uint BufferLength, out uint LengthTransferred, NativeOverlapped* pOverlapped);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_AbortPipe(IntPtr InterfaceHandle, byte PipeID);
+
+ // 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)]
+ private static extern bool WinUsb_SetPipePolicy(IntPtr InterfaceHandle, Byte PipeID, UInt32 PolicyType, UInt32 ValueLength, ref byte Value);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_GetPipePolicy(IntPtr InterfaceHandle, Byte PipeID, UInt32 PolicyType, ref UInt32 ValueLength, out byte Value);
+
+ // Use this alias when the returned Value is a UInt32 (PIPE_TRANSFER_TIMEOUT only):
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_SetPipePolicy(IntPtr InterfaceHandle, Byte PipeID, UInt32 PolicyType, UInt32 ValueLength, ref UInt32 Value);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_GetPipePolicy(IntPtr InterfaceHandle, Byte PipeID, UInt32 PolicyType, ref UInt32 ValueLength, out UInt32 Value);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static unsafe extern bool WinUsb_WritePipe(IntPtr InterfaceHandle, byte PipeID, byte* pBuffer, uint BufferLength, out uint LengthTransferred, IntPtr Overlapped);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static unsafe extern bool WinUsb_WritePipe(IntPtr InterfaceHandle, byte PipeID, byte* pBuffer, uint BufferLength, out uint LengthTransferred, NativeOverlapped* pOverlapped);
+
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ private static unsafe extern bool CancelIo(IntPtr hFile);
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ private static unsafe extern bool CancelIoEx(IntPtr hFile, NativeOverlapped* pOverlapped);
+
+
+
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_FlushPipe(IntPtr InterfaceHandle, byte PipeID);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_GetDescriptor(IntPtr InterfaceHandle, byte DescriptorType,
+ byte Index, UInt16 LanguageID, byte[] Buffer, UInt32 BufferLength, out UInt32 LengthTransfered);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_GetDescriptor(IntPtr InterfaceHandle, byte DescriptorType,
+ byte Index, UInt16 LanguageID, out USB_DEVICE_DESCRIPTOR deviceDesc, UInt32 BufferLength, out UInt32 LengthTransfered);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_GetDescriptor(IntPtr InterfaceHandle, byte DescriptorType,
+ byte Index, UInt16 LanguageID, out USB_CONFIGURATION_DESCRIPTOR deviceDesc, UInt32 BufferLength, out UInt32 LengthTransfered);
+
+ [DllImport("winusb.dll", SetLastError = true)]
+ private static extern bool WinUsb_GetAssociatedInterface(IntPtr InterfaceHandle, byte AssociatedInterfaceIndex,
+ out IntPtr AssociatedInterfaceHandle);
+
+ private const int USB_DEVICE_DESCRIPTOR_TYPE = 0x01;
+ private const int USB_CONFIGURATION_DESCRIPTOR_TYPE = 0x02;
+ private const int USB_STRING_DESCRIPTOR_TYPE = 0x03;
+
+ private const int ERROR_NO_MORE_ITEMS = 259;
+
+ }
+}