using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace SIUSBXP_DLL { public class SIUSBXP { static IntPtr zero = IntPtr.Zero; // Return codes public const byte SI_SUCCESS = 0x00; public const byte SI_DEVICE_NOT_FOUND = 0xFF; public const byte SI_INVALID_HANDLE = 0x01; public const byte SI_READ_ERROR = 0x02; public const byte SI_RX_QUEUE_NOT_READY = 0x03; public const byte SI_WRITE_ERROR = 0x04; public const byte SI_RESET_ERROR = 0x05; public const byte SI_INVALID_PARAMETER = 0x06; public const byte SI_INVALID_REQUEST_LENGTH = 0x07; public const byte SI_DEVICE_IO_FAILED = 0x08; public const byte SI_INVALID_BAUDRATE = 0x09; public const byte SI_FUNCTION_NOT_SUPPORTED = 0x0a; public const byte SI_GLOBAL_DATA_ERROR = 0x0b; public const byte SI_SYSTEM_ERROR_CODE = 0x0c; public const byte SI_READ_TIMED_OUT = 0x0d; public const byte SI_WRITE_TIMED_OUT = 0x0e; public const byte SI_IO_PENDING = 0x0f; public const byte SI_NOTHING_TO_CANCEL = 0xa0; // GetProductString() function flags public const byte SI_RETURN_SERIAL_NUMBER = 0x00; public const byte SI_RETURN_DESCRIPTION = 0x01; public const byte SI_RETURN_LINK_NAME = 0x02; public const byte SI_RETURN_VID = 0x03; public const byte SI_RETURN_PID = 0x04; // RX Queue status flags public const byte SI_RX_NO_OVERRUN = 0x00; public const byte SI_RX_EMPTY = 0x00; public const byte SI_RX_OVERRUN = 0x01; public const byte SI_RX_READY = 0x02; // Buffer size limits public const int SI_MAX_DEVICE_STRLEN = 256; public const int SI_MAX_READ_SIZE = 4096 * 16; public const int SI_MAX_WRITE_SIZE = 4096; // Input and Output pin Characteristics public const byte SI_HELD_INACTIVE = 0x00; public const byte SI_HELD_ACTIVE = 0x01; public const byte SI_FIRMWARE_CONTROLLED = 0x02; public const byte SI_RECEIVE_FLOW_CONTROL = 0x02; public const byte SI_TRANSMIT_ACTIVE_SIGNAL = 0x03; public const byte SI_STATUS_INPUT = 0x00; public const byte SI_HANDSHAKE_LINE = 0x01; // Mask and Latch value bit definitions public const int SI_GPIO_0 = 0x01; public const int SI_GPIO_1 = 0x02; public const int SI_GPIO_2 = 0x04; public const int SI_GPIO_3 = 0x08; public const int SI_GPIO_4 = 0x0010; public const int SI_GPIO_5 = 0x0020; public const int SI_GPIO_6 = 0x0040; public const int SI_GPIO_7 = 0x0080; public const int SI_GPIO_8 = 0x0100; public const int SI_GPIO_9 = 0x0200; public const int SI_GPIO_10 = 0x0400; public const int SI_GPIO_11 = 0x0800; public const int SI_GPIO_12 = 0x1000; public const int SI_GPIO_13 = 0x2000; public const int SI_GPIO_14 = 0x4000; public const int SI_GPIO_15 = 0x8000; // GetDeviceVersion() return codes public const byte SI_USBXPRESS_EFM8 = 0x80; public const byte SI_USBXPRESS_EFM32 = 0x81; public const byte SI_CP2101_VERSION = 0x01; public const byte SI_CP2102_VERSION = 0x02; public const byte SI_CP2103_VERSION = 0x03; public const byte SI_CP2104_VERSION = 0x04; public const byte SI_CP2105_VERSION = 0x05; public const byte SI_CP2108_VERSION = 0x08; public const byte SI_CP2109_VERSION = 0x09; public const byte SI_CP2102N_QFN28_VERSION = 0x20; public const byte SI_CP2102N_QFN24_VERSION = 0x21; public const byte SI_CP2102N_QFN20_VERSION = 0x22; [DllImport("SiUSBXp.dll")] public static extern int SI_GetNumDevices( ref uint lpdwNumDevices ); // Caller must set StringBuilder capacity to max possible // returned string size before calling this function [DllImport("SiUSBXp.dll")] public static extern int SI_GetProductString( uint dwDeviceNum, StringBuilder lpvDeviceString, uint dwFlags ); [DllImport("SiUSBXp.dll")] public static extern int SI_Open( uint dwDevice, ref IntPtr cyHandle ); [DllImport("SiUSBXp.dll")] public static extern int SI_Close( IntPtr cyHandle ); [DllImport("SiUSBXp.dll")] public static extern int SI_Read( IntPtr cyHandle, [Out] byte[] lpBuffer, uint dwBytesToRead, ref uint lpdwBytesReturned, IntPtr o ); [DllImport("SiUSBXp.dll")] public static extern int SI_Write( IntPtr cyHandle, [In] byte[] lpBuffer, uint dwBytesToWrite, ref uint lpdwBytesWritten, IntPtr o ); [DllImport("SiUSBXp.dll")] public static extern int SI_FlushBuffers( IntPtr cyHandle, byte FlushTransmit, byte FlushReceive ); [DllImport("SiUSBXp.dll")] public static extern int SI_SetTimeouts( uint dwReadTimeoutInMs, uint dwWriteTimeoutInMs ); [DllImport("SiUSBXp.dll")] public static extern int SI_GetTimeouts( ref uint lpdwReadTimeout, ref uint lpdwWriteTimeout ); [DllImport("SiUSBXp.dll")] public static extern int SI_CheckRXQueue( IntPtr cyHandle, ref uint lpdwNumBytesInQueue, ref uint lpdwQueueStatus ); [DllImport("SiUSBXp.dll")] public static extern int SI_SetBaudRate( IntPtr cyHandle, uint dwBaudRate ); [DllImport("SiUSBXp.dll")] public static extern int SI_SetBaudDivisor( IntPtr cyHandle, ushort wBaudDivisor ); [DllImport("SiUSBXp.dll")] public static extern int SI_SetLineControl( IntPtr cyHandle, ushort wLineControl ); [DllImport("SiUSBXp.dll")] public static extern int SI_SetFlowControl( IntPtr cyHandle, byte bCTS_MaskCode, byte bRTS_MaskCode, byte bDTR_MaskCode, byte bDSR_MaskCode, byte bDCD_MaskCode, bool bFlowXonXoff ); [DllImport("SiUSBXp.dll")] public static extern int SI_GetModemStatus( IntPtr cyHandle, ref byte ModemStatus ); [DllImport("SiUSBXp.dll")] public static extern int SI_SetBreak( IntPtr cyHandle, ushort wBreakState ); [DllImport("SiUSBXp.dll")] public static extern int SI_ReadLatch( IntPtr cyHandle, ref byte lpbLatch ); [DllImport("SiUSBXp.dll")] public static extern int SI_WriteLatch( IntPtr cyHandle, byte bMask, byte bLatch ); [DllImport("SiUSBXp.dll")] public static extern int SI_GetPartNumber( IntPtr cyHandle, ref byte lpbPartNum ); [DllImport("SiUSBXp.dll")] public static extern int SI_DeviceIOControl( IntPtr cyHandle, uint dwIoControlCode, [In] byte[] lpInBuffer, uint dwBytesToRead, [Out] byte[] lpOutBuffer, uint dwBytesToWrite, ref uint lpdwBytesSucceeded ); [DllImport("SiUSBXp.dll")] public static extern int SI_GetPartLibraryVersion( IntPtr cyHandle, ref int pLibVersion ); [DllImport("SiUSBXp.dll")] public static extern int SI_GetInterfaceNumber( IntPtr cyHandle, ref byte pLibVersion ); [DllImport("SiUSBXp.dll")] public static extern int SI_GetDeviceProductString( IntPtr cyHandle, [Out] byte[] lpProduct, ref byte lpbLength, bool bConvertToASCII ); [DllImport("SiUSBXp.dll")] public static extern int SI_GetDLLVersion( ref uint HighVersion, ref uint LowVersion ); [DllImport("SiUSBXp.dll")] public static extern int SI_GetDriverVersion( ref uint HighVersion, ref uint LowVersion ); [DllImport("SiUSBXp.dll")] public static extern int SI_CancelIo( IntPtr cyHandle ); [DllImport("SiUSBXp.dll")] public static extern int SI_CancelIoEx( IntPtr cyHandle, IntPtr o ); } }