static void WriteDeviceItemInputParserResult(DeviceItemInputParser parser) { while (parser.HasChanged) { int changedIndex = parser.GetNextChangedIndex(); var previousDataValue = parser.GetPreviousValue(changedIndex); var dataValue = parser.GetValue(changedIndex); Console.WriteLine(string.Format(" {0}: {1} -> {2}", (Usage)dataValue.Usages.FirstOrDefault(), previousDataValue.GetPhysicalValue(), dataValue.GetPhysicalValue())); } }
public void Start() { if (_digitizer.TryOpen(out _hidStream)) { _hidDeviceInputReceiver = _reportDescr.CreateHidDeviceInputReceiver(); _hiddeviceInputParser = _reportDescr.DeviceItems[0].CreateDeviceItemInputParser(); _hidDeviceInputReceiver.Received += OnDigitizerInputReceived; _hidDeviceInputReceiver.Start(_hidStream); } else { throw new Exception("Failed to open iBridge HID digitizer"); } }
private void GetSensorReadout(DeviceItemInputParser parser) { const int exponentMask = 0b1111_0000_0000_0000; const int mantissaMask = 0b0000_1111_1111_1111; var dataValue = parser.GetValue(0).GetLogicalValue(); var exp = (dataValue & exponentMask) >> 12; var mantissa = dataValue & mantissaMask; var lux = 0.01 * Math.Pow(2, exp) * mantissa; _sensorModel.SetValue(lux); if (!_sensorModel.ManualMode) { _displayController.ChangeDisplayBrightness(TransferFunction(lux)); } }
public RawInputDevice(HidDevice device, ReportDescriptor reportDescriptor, DeviceItem deviceItem, HidStream hidStream, string uniqueId) { this.device = device; inputReportBuffer = new byte[device.GetMaxInputReportLength()]; inputReceiver = reportDescriptor.CreateHidDeviceInputReceiver(); inputParser = deviceItem.CreateDeviceItemInputParser(); inputReceiver.Start(hidStream); DisplayName = device.GetProductName(); UniqueId = uniqueId; InterfacePath = device.DevicePath; HardwareID = IdHelper.GetHardwareId(InterfacePath); inputChangedEventArgs = new DeviceInputChangedEventArgs(this); sources = reportDescriptor.InputReports.SelectMany(ir => ir.DataItems) .SelectMany(di => di.Usages.GetAllValues()) .Select(u => (Usage)u) .SelectMany(u => RawInputSource.FromUsage(this, u)) .ToArray(); readThreadContext = ThreadCreator.CreateLoop($"{DisplayName} RawInput reader", ReadLoop, 1).Start(); }
public override bool Activate() { _inputParser = DeviceItem.CreateDeviceItemInputParser(); try { _stream?.Dispose(); _stream = HidDevice.Open(); _stream.ReadTimeout = Timeout.Infinite; // determine number of buttons, axes, hats DetermineCapabilities(); byte[] buffer = new byte[HidDevice.GetMaxInputReportLength()]; var sb = new MuniaController.StreamAndBuffer { buffer = buffer, stream = _stream }; _stream.BeginRead(buffer, 0, buffer.Length, Callback, sb); return(true); } catch { return(false); } }
void WriteDeviceItemInputParserResult(DeviceItemInputParser parser) { while (parser.HasChanged) { int changedIndex = parser.GetNextChangedIndex(); var previousDataValue = parser.GetPreviousValue(changedIndex); var dataValue = parser.GetValue(changedIndex); var value = dataValue.GetPhysicalValue(); Usage usage = (Usage)dataValue.Usages.FirstOrDefault(); value = value < 0 ? value / 127 : (value - 54) / 200; switch (usage) { case Usage.GenericDesktopX: controllerState.X = value; break; case Usage.GenericDesktopY: controllerState.Y = value; break; case Usage.GenericDesktopZ: controllerState.Z = value; break; case Usage.GenericDesktopRx: controllerState.RX = value; break; case Usage.GenericDesktopRy: controllerState.RY = value; break; case Usage.GenericDesktopRz: controllerState.RZ = value; break; case Usage.GenericDesktopSlider: if (changedIndex == 30) { controllerState.LeftSwitch = value >= 0; } else { controllerState.RightSwitch = value >= 0; } break; case Usage.Button1: Console.WriteLine("button 1 :" + value); break; case Usage.Button2: Console.WriteLine("button 2 :" + value); break; default: Console.WriteLine("unknown usage:" + usage); break; } } }
private void PrintfHidDeviceInfo() { HidDevice[] devices = DeviceList.Local.GetHidDevices(1111, 4755).ToArray(); foreach (HidDevice dev in devices) { Console.WriteLine("-----------------------------"); Console.WriteLine("{0}, {1}", dev, dev.DevicePath); try { Console.WriteLine(string.Format("Max Lengths: Input {0}, Output {1}, Feature {2}", dev.GetMaxInputReportLength(), dev.GetMaxOutputReportLength(), dev.GetMaxFeatureReportLength())); } catch (UnauthorizedAccessException e) { Console.WriteLine(e); continue; } try { var rawReportDescriptor = dev.GetRawReportDescriptor(); Console.WriteLine("Report Descriptor:"); Console.WriteLine(" {0} ({1} bytes)", string.Join(" ", rawReportDescriptor.Select(d => d.ToString("X2"))), rawReportDescriptor.Length); int indent = 0; foreach (EncodedItem element in EncodedItem.DecodeItems(rawReportDescriptor, 0, rawReportDescriptor.Length)) { if (element.ItemType == ItemType.Main && element.TagForMain == MainItemTag.EndCollection) { indent -= 4; } Console.WriteLine(" {0}{1}", new string(' ', indent), element); if (element.ItemType == ItemType.Main && element.TagForMain == MainItemTag.Collection) { indent += 4; } } var reportDescriptor = dev.GetReportDescriptor(); foreach (DeviceItem deviceItem in reportDescriptor.DeviceItems) { if (InputParser == null) { InputParser = deviceItem.CreateDeviceItemInputParser(); } foreach (var usage in deviceItem.Usages.GetAllValues()) { Console.WriteLine(string.Format("Usage: {0:X4} {1}", usage, (Usage)usage)); } foreach (var report in deviceItem.Reports) { Console.WriteLine(string.Format("{0}: ReportID={1}, Length={2}, Items={3}", report.ReportType, report.ReportID, report.Length, report.DataItems.Count)); foreach (DataItem dataItem in report.DataItems) { Console.WriteLine(string.Format(" {0} Elements x {1} Bits, Units: {2}, Expected Usage Type: {3}, Flags: {4}, Usages: {5} TotalBits: {6}", dataItem.ElementCount, dataItem.ElementBits, dataItem.Unit.System, dataItem.ExpectedUsageType, dataItem.Flags, string.Join(", ", dataItem.Usages.GetAllValues().Select(usage => usage.ToString("X4") + " " + ((Usage)usage).ToString())), dataItem.TotalBits)); } } //tryOpen } } catch (Exception ex) { Console.WriteLine("Exception:::{0}", ex); } } }
static void WriteDeviceItemInputParserResult(DeviceItemInputParser parser) { while (parser.HasChanged) { var changedIndex = parser.GetNextChangedIndex(); var previousDataValue = parser.GetPreviousValue(changedIndex); var dataValue = parser.GetValue(changedIndex); var y = (Usage)dataValue.Usages.FirstOrDefault(); var value = (int)dataValue.GetPhysicalValue(); //Console.WriteLine($"{(Usage) dataValue.Usages.FirstOrDefault()}: {previousDataValue.GetPhysicalValue()} -> {dataValue.GetPhysicalValue()}"); switch (y) { case Usage.GenericDesktopY: if (value == 255) { SerialPort.Write(BitConverter.GetBytes(4), 0, 1); } if (value == 0) { SerialPort.Write(BitConverter.GetBytes(3), 0, 1); } break; case Usage.GenericDesktopX: if (value == 255) { SerialPort.Write(BitConverter.GetBytes(7), 0, 1); } if (value == 0) { SerialPort.Write(BitConverter.GetBytes(8), 0, 1); } break; case Usage.Button1: //X if (value == 1) { SerialPort.Write(BitConverter.GetBytes(5), 0, 1); } break; case Usage.Button4: //Y if (value == 1) { SerialPort.Write(BitConverter.GetBytes(6), 0, 1); } break; case Usage.Button2: //A if (value == 1) { SerialPort.Write(BitConverter.GetBytes(2), 0, 1); } break; case Usage.Button3: //B if (value == 1) { SerialPort.Write(BitConverter.GetBytes(1), 0, 1); } break; case Usage.Button5: //L if (value == 1) { SerialPort.Write(BitConverter.GetBytes(9), 0, 1); } break; case Usage.Button6: //R if (value == 1) { SerialPort.Write(BitConverter.GetBytes(10), 0, 1); } break; default: break; } } }