private void JoystickUpdateListener(JoystickUpdateEventArgs args) { if (args == null) { return; } ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickAxisX)?.SetValue(args.AxisX); ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickAxisY)?.SetValue(args.AxisY); ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickAxisZ)?.SetValue(args.AxisZ); ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickRotationX)?.SetValue(args.RotationX); ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickRotationY)?.SetValue(args.RotationY); ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickRotationZ)?.SetValue(args.RotationZ); ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickSlider0)?.SetValue(args.Slider0); ChannelData?.FirstOrDefault(fd => fd.Channel == JoystickChannel.JoystickSlider1)?.SetValue(args.Slider1); }
private void PollJoystick() { _pollingTask = Task.Factory.StartNew(() => { var lastSate = new List <JoystickUpdate>(); var joystick = new Joystick(_directInput, _deviceGuid) { Properties = { BufferSize = 0, AxisMode = DeviceAxisMode.Absolute, Range = new InputRange(0, 1000) } }; joystick.SetCooperativeLevel(IntPtr.Zero, CooperativeLevel.Background | CooperativeLevel.NonExclusive); joystick.Acquire(); while (!_quitPolling) { try { joystick.Poll(); var data = new JoystickState(); joystick.GetCurrentState(ref data); var args = new JoystickUpdateEventArgs(data.X, data.Y, data.Z, data.RotationX, data.RotationY, data.RotationZ, data.Sliders[0], data.Sliders[1]); JoystickUpdate?.Invoke(this, args); GlobalEventAggregator.Instance.SendMessage(args); //Debug.WriteLine("X: {0}, Y: {1}, Z: {2}", data.X, data.Y, data.Z); //var data1 = joystick.GetBufferedData(); //foreach (var state in data1) //{ // var lastUpdate = lastSate.FirstOrDefault(f => f.Offset == state.Offset); // if (lastUpdate.Timestamp == 0) // { // lastSate.Add(state); // } // if (state.Offset == JoystickOffset.X && state.Value != lastUpdate.Value) // { // ////PostAxisValue(iDevice, HID_USAGE_X, state.lX); // Debug.WriteLine("{0}: {1}", state.Offset, state.Value); // } // lastUpdate = state; //} //Task.Delay(10); } catch (SharpDX.SharpDXException e) { StopCapture(); } } joystick.Dispose(); }); }