internal HidDevice(HidControl control, string devicePath) { controller = control; dev = new DeviceAccess(devicePath); if (dev.OpenDeviceForIoctl()) { NativeApi.HidD_GetAttributes(dev.Handle, ref Attributes); using (HidPreparsedData preparsedData = new HidPreparsedData(dev.Handle)) { NativeApi.HidP_GetCaps(preparsedData.Handle, ref Capabilities); } if (dev.OpenDeviceForRead()) { ReadThread = new DeviceReadThread(new DeviceAccess(devicePath), new ReceivedReportDelegate(InputPipeReportHandler)); } else { ReadThread = null; } } else { throw new Exception("Unable to access device!"); } }
private void InitializeFileStream() { if (dev.OpenDeviceForIoctl()) { using (HidPreparsedData preparsedData = new HidPreparsedData(dev.Handle)) { NativeApi.HIDP_CAPS Capabilities = new NativeApi.HIDP_CAPS(); NativeApi.HidP_GetCaps(preparsedData.Handle, ref Capabilities); bufferSize = Capabilities.InputReportByteLength; } if (dev.OpenDeviceForRead()) { state = new DeviceReadState(new FileStream(dev.Handle, FileAccess.Read), new byte[bufferSize]); } else { throw new Exception("Unable to open device for Read"); } } }