Exemplo n.º 1
0
        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()));
            }
        }
Exemplo n.º 2
0
 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");
     }
 }
Exemplo n.º 3
0
        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));
            }
        }
Exemplo n.º 4
0
 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);
            }
        }
Exemplo n.º 6
0
        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);
                }
            }
        }
Exemplo n.º 8
0
        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;
                }
            }
        }