private IEnumerable <ILowLevelInputDevice> GetXInputGamepads()
        {
            var inputDevices = new List <ILowLevelInputDevice>();

            for (int i = 0; i < 4; i++)
            {
                var xinput = new SharpDX.XInput.Controller((UserIndex)i);
                var device = new LowLevelInputDevice()
                {
                    DiscoveryApi    = InputApi.XInput,
                    DI_DeviceType   = DeviceType.Gamepad,
                    XI_GamepadIndex = i,
                    XI_IsXInput     = true,
                    XI_IsConnected  = xinput.IsConnected,
                };
                inputDevices.Add(device);
            }

            return(inputDevices);
        }
        private IEnumerable <ILowLevelInputDevice> GetGenericGamepads(IEnumerable <DeviceInstance> gamepads,
                                                                      SharpDX.DirectInput.DirectInput directInput)
        {
            var inputDevices = new List <ILowLevelInputDevice>();

            for (int i = 0; i < gamepads.Count(); i++)
            {
                DeviceInstance             deviceInstance = gamepads.ElementAt(i);
                SharpDX.DirectInput.Device device         = new Joystick(directInput, deviceInstance.InstanceGuid);

                var inputDevice = new LowLevelInputDevice()
                {
                    DiscoveryApi         = InputApi.DirectInput,
                    DI_InstanceGUID      = deviceInstance.InstanceGuid,
                    DI_InstanceName      = deviceInstance.InstanceName.Trim('\0'),
                    DI_ProductName       = deviceInstance.ProductName.Trim('\0'),
                    DI_ProductGUID       = deviceInstance.ProductGuid,
                    DI_DeviceType        = DeviceType.Gamepad,
                    DI_EnumerationNumber = i,
                };

                try
                {
                    inputDevice.DI_InterfacePath = device.Properties.InterfacePath.Trim('\0');
                    inputDevice.DI_JoystickID    = device.Properties.JoystickId;
                    inputDevice.DI_ProductID     = device.Properties.ProductId;
                    inputDevice.DI_VendorID      = device.Properties.VendorId;
                }
                catch (SharpDXException)
                {
                    inputDevice.DI_JoystickID    = null;
                    inputDevice.DI_InterfacePath = null;
                }
                finally
                {
                    inputDevices.Add(inputDevice);
                }
            }

            return(inputDevices);
        }