/// <summary> /// Opens device /// </summary> /// <param name="DeviceName">fullpath to the device</param> /// <returns>-1 on error, handle otherwise</returns> public int CreateFile(string DeviceName) { HidHandle = DllImports.CreateFile(DeviceName, DllImports.GENERIC_READ | DllImports.GENERIC_WRITE, DllImports.FILE_SHARE_READ | DllImports.FILE_SHARE_WRITE, 0, DllImports.OPEN_EXISTING, 0, 0); return((HidHandle == -1) ? 0 : 1); }
/// <summary> /// Gets class devs /// </summary> /// <returns>Handle to the device info object</returns> public int SetupDiGetClassDevs() { DllImports.HidD_GetHidGuid(ref _guid); hDevInfo = DllImports.SetupDiGetClassDevs(ref _guid, IntPtr.Zero, IntPtr.Zero, DllImports.DIGCF_INTERFACEDEVICE | DllImports.DIGCF_PRESENT); return(hDevInfo); }
/// <summary> /// Closes device /// </summary> public int CloseFile() { if (HidHandle != -1) { DllImports.CloseHandle(HidHandle); HidHandle = -1; } return(1); }
/// <summary> /// Gets device interface detail /// </summary> public int SetupDiGetDeviceInterfaceDetail(ref int requiredSize, int deviceInterfaceDetailDataSize) { int retVal = DllImports.SetupDiGetDeviceInterfaceDetail( hDevInfo, ref _deviceInterfaceData, IntPtr.Zero, deviceInterfaceDetailDataSize, ref requiredSize, IntPtr.Zero); return(retVal); }
/// <summary> /// Enumerates device interfaces /// </summary> public int SetupDiEnumDeviceInterfaces(int memberIndex) { _deviceInterfaceData = new DllImports.SP_DEVICE_INTERFACE_DATA(); _deviceInterfaceData.cbSize = Marshal.SizeOf(_deviceInterfaceData); int retVal = DllImports.SetupDiEnumDeviceInterfaces( hDevInfo, 0, ref _guid, memberIndex, ref _deviceInterfaceData); return(retVal); }
/// <summary> /// Reads data from the device /// </summary> public byte[] ReadFile(int inputReportByteLength) { int bytesRead = 0; byte[] inBuffer = new byte[inputReportByteLength]; if (DllImports.ReadFile(HidHandle, inBuffer, inputReportByteLength, ref bytesRead, IntPtr.Zero)) { byte[] outBuffer = new byte[bytesRead]; Array.Copy(inBuffer, outBuffer, bytesRead); return(outBuffer); } return(null); }
/// <summary> /// Gets device interface detail /// </summary> public int SetupDiGetDeviceInterfaceDetailEx(ref int requiredSize, int deviceInterfaceDetailDataSize) { _deviceInterfaceDetailData = new DllImports.PSP_DEVICE_INTERFACE_DETAIL_DATA { cbSize = 5 }; int retVal = DllImports.SetupDiGetDeviceInterfaceDetail( hDevInfo, ref _deviceInterfaceData, ref _deviceInterfaceDetailData, deviceInterfaceDetailDataSize, ref requiredSize, IntPtr.Zero); DevicePathName = _deviceInterfaceDetailData.DevicePath; return(retVal); }
/// <summary> /// Creates a duplicate of the handle /// </summary> public IntPtr DuplicateHandle(IntPtr sourceHandle) { IntPtr newHandle; IntPtr currentProcess = DllImports.GetCurrentProcess(); bool result = DllImports.DuplicateHandle( currentProcess, sourceHandle, currentProcess, out newHandle, 0, false, DllImports.DUPLICATE_SAME_ACCESS); if (!result) { return(IntPtr.Zero); } return(newHandle); }
/// <summary> /// Cancels synchronous io /// </summary> public void CancelSynchronousIo(IntPtr threadHandle) { DllImports.CancelSynchronousIo(threadHandle); }
/// <summary> /// Destroys the device info list /// </summary> public int SetupDiDestroyDeviceInfoList() { return(DllImports.SetupDiDestroyDeviceInfoList(hDevInfo)); }
/// <summary> /// Frees parsed data /// </summary> public int InteropFreePreparsedData(int pPHIDP_PREPARSED_DATA) { return(DllImports.SetupDiDestroyDeviceInfoList(pPHIDP_PREPARSED_DATA)); }
/// <summary> /// Gets raw data /// </summary> public int GetPreparsedData(int hObject, ref int preParsedData) { return(DllImports.HidD_GetPreparsedData(hObject, ref preParsedData)); }
/// <summary> /// Gets the current thread handle /// </summary> public IntPtr GetCurrentThreadHandle() { IntPtr handle = DllImports.GetCurrentThread(); return(DuplicateHandle(handle)); }
/// <summary> /// Gets HID caps /// </summary> public int GetCaps(int preParsedData) { HidCaps = new DllImports.HIDP_CAPS(); return(DllImports.HidP_GetCaps(preParsedData, ref HidCaps)); }