public void DoProcessing(IProgress <string> message, IProgress <string> xUpdate, IProgress <string> rawXUpdate, IProgress <string> yUpdate, IProgress <string> rawYUpdate, Joystick joystick, Keyboard keyboard, CancellationToken cancellationToken) { ViGEmClient client = new ViGEmClient(); Xbox360Controller controller = new Xbox360Controller(client); ControllerBindingsStorage bindingStorage = new ControllerBindingsStorage(); Dictionary <int, int> bindings = bindingStorage.load(); Xbox360Axes? analogStickAxisX = null; Xbox360Axes? analogStickAxisY = null; Xbox360Axes? digitalStickAxisX = null; Xbox360Axes? digitalStickAxisY = null; Xbox360Buttons? joystickButton0 = null; bool leftTriggerLastPressed = false; bool leftTriggerPressed = false; bool rightTriggerLastPressed = false; bool rightTriggerPressed = false; bool digitalStickUpLastPressed = false; bool digitalStickUpPressed = false; bool digitalStickDownLastPressed = false; bool digitalStickDownPressed = false; bool digitalStickLeftLastPressed = false; bool digitalStickLeftPressed = false; bool digitalStickRightLastPressed = false; bool digitalStickRightPressed = false; foreach (KeyValuePair <int, int> binding in bindings) { if (binding.Key == (int)Xbox360StorageButtons.AnalogStick) { AnalogStickBinding analogStickBinding = (AnalogStickBinding)Enum.Parse(typeof(AnalogStickBinding), binding.Value.ToString()); switch (analogStickBinding) { case AnalogStickBinding.LeftStick: analogStickAxisX = Xbox360Axes.LeftThumbX; analogStickAxisY = Xbox360Axes.LeftThumbY; digitalStickAxisX = Xbox360Axes.RightThumbX; digitalStickAxisY = Xbox360Axes.RightThumbY; break; case AnalogStickBinding.RightStick: analogStickAxisX = Xbox360Axes.RightThumbX; analogStickAxisY = Xbox360Axes.RightThumbY; digitalStickAxisX = Xbox360Axes.LeftThumbX; digitalStickAxisY = Xbox360Axes.LeftThumbY; break; } } if (binding.Value == (int)Key.JoystickButton) { joystickButton0 = (Xbox360Buttons)Enum.Parse(typeof(Xbox360Buttons), binding.Key.ToString()); } } controller.Connect(); message.Report("Virtual Xbox 360 controller created!"); Xbox360Report report = new Xbox360Report(); while (true) { if (cancellationToken.IsCancellationRequested) { controller.Disconnect(); return; } joystick.Poll(); JoystickUpdate[] updates = joystick.GetBufferedData(); foreach (JoystickUpdate update in updates) { int value = (update.Value - 32767); if (update.Offset == JoystickOffset.X || update.Offset == JoystickOffset.Y || update.Offset == JoystickOffset.Buttons0) { if (analogStickAxisX != null && analogStickAxisX.HasValue && analogStickAxisY != null && analogStickAxisY.HasValue) { if (update.Offset == JoystickOffset.X) { short x = getConstrainedValue(value); report.SetAxis(analogStickAxisX.Value, x); xUpdate.Report(x.ToString()); rawXUpdate.Report((update.Value - 32767).ToString()); } if (update.Offset == JoystickOffset.Y) { short y = getConstrainedValue(value * -1); report.SetAxis(analogStickAxisY.Value, y); yUpdate.Report(y.ToString()); rawYUpdate.Report(((update.Value - 32767) * -1).ToString()); } } if (update.Offset == JoystickOffset.Buttons0 && joystickButton0 != null && joystickButton0.HasValue) { bool buttonValue = update.Value > 0 ? true : false; report.SetButtonState(joystickButton0.Value, buttonValue); } } message.Report(update.Offset.ToString() + ": " + value.ToString()); } keyboard.Poll(); KeyboardUpdate[] keyboardUpdates = keyboard.GetBufferedData(); foreach (KeyboardUpdate keyboardUpdate in keyboardUpdates) { foreach (KeyValuePair <int, int> binding in bindings) { if ((int)keyboardUpdate.Key == binding.Value) { Xbox360Buttons?button = null; switch (binding.Key) { case (int)Xbox360StorageButtons.Guide: button = Xbox360Buttons.Guide; break; case (int)Xbox360StorageButtons.Start: button = Xbox360Buttons.Start; break; case (int)Xbox360StorageButtons.Back: button = Xbox360Buttons.Back; break; case (int)Xbox360StorageButtons.LeftShoulder: button = Xbox360Buttons.LeftShoulder; break; case (int)Xbox360StorageButtons.RightShoulder: button = Xbox360Buttons.RightShoulder; break; case (int)Xbox360StorageButtons.LeftTrigger: leftTriggerPressed = keyboardUpdate.Value == 128 ? true : false; break; case (int)Xbox360StorageButtons.RightTrigger: rightTriggerPressed = keyboardUpdate.Value == 128 ? true : false; break; case (int)Xbox360StorageButtons.A: button = Xbox360Buttons.A; break; case (int)Xbox360StorageButtons.B: button = Xbox360Buttons.B; break; case (int)Xbox360StorageButtons.X: button = Xbox360Buttons.X; break; case (int)Xbox360StorageButtons.Y: button = Xbox360Buttons.Y; break; case (int)Xbox360StorageButtons.Up: button = Xbox360Buttons.Up; break; case (int)Xbox360StorageButtons.Down: button = Xbox360Buttons.Down; break; case (int)Xbox360StorageButtons.Left: button = Xbox360Buttons.Left; break; case (int)Xbox360StorageButtons.Right: button = Xbox360Buttons.Right; break; case (int)Xbox360StorageButtons.LeftThumb: button = Xbox360Buttons.LeftThumb; break; case (int)Xbox360StorageButtons.RightThumb: button = Xbox360Buttons.RightThumb; break; case (int)Xbox360StorageButtons.DigitalStickUp: digitalStickUpPressed = keyboardUpdate.Value == 128 ? true : false; break; case (int)Xbox360StorageButtons.DigitalStickDown: digitalStickDownPressed = keyboardUpdate.Value == 128 ? true : false; break; case (int)Xbox360StorageButtons.DigitalStickLeft: digitalStickLeftPressed = keyboardUpdate.Value == 128 ? true : false; break; case (int)Xbox360StorageButtons.DigitalStickRight: digitalStickRightPressed = keyboardUpdate.Value == 128 ? true : false; break; } if (button != null && button.HasValue) { bool pressed = keyboardUpdate.Value == 128 ? true : false; report.SetButtonState(button.Value, pressed); } message.Report("Keyboard - Key: " + keyboardUpdate.Key + " Value: " + keyboardUpdate.Value); } } } if (leftTriggerPressed != leftTriggerLastPressed) { if (leftTriggerPressed) { report.LeftTrigger = 255; } else { report.LeftTrigger = 0; } leftTriggerLastPressed = leftTriggerPressed; } if (rightTriggerPressed != rightTriggerLastPressed) { if (rightTriggerPressed) { report.RightTrigger = 255; } else { report.RightTrigger = 0; } rightTriggerLastPressed = rightTriggerPressed; } if (digitalStickUpPressed != digitalStickUpLastPressed) { if (digitalStickUpPressed) { report.SetAxis(digitalStickAxisY.Value, 32767); } else { report.SetAxis(digitalStickAxisY.Value, 0); } digitalStickUpLastPressed = digitalStickUpPressed; } if (digitalStickDownPressed != digitalStickDownLastPressed) { if (digitalStickDownPressed) { report.SetAxis(digitalStickAxisY.Value, -32768); } else { report.SetAxis(digitalStickAxisY.Value, 0); } digitalStickDownLastPressed = digitalStickDownPressed; } if (digitalStickLeftPressed != digitalStickLeftLastPressed) { if (digitalStickLeftPressed) { report.SetAxis(digitalStickAxisX.Value, -32768); } else { report.SetAxis(digitalStickAxisX.Value, 0); } digitalStickLeftLastPressed = digitalStickLeftPressed; } if (digitalStickRightPressed != digitalStickRightLastPressed) { if (digitalStickRightPressed) { report.SetAxis(digitalStickAxisX.Value, 32767); } else { report.SetAxis(digitalStickAxisX.Value, 0); } digitalStickRightLastPressed = digitalStickRightPressed; } controller.SendReport(report); Thread.Sleep(1); } }
private void populateDropDownBoxes() { ControllerBindingsStorage storage = new ControllerBindingsStorage(); Dictionary <int, int> bindings = storage.load(); if (bindings.Count > 0) { foreach (KeyValuePair <int, int> binding in bindings) { switch (binding.Key) { case (int)Xbox360StorageButtons.Guide: cmbHome.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.Start: cmbStart.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.Back: cmbBack.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.LeftShoulder: cmbLeftBumper.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.RightShoulder: cmbRightBumper.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.LeftTrigger: cmbLeftTrigger.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.RightTrigger: cmbRightTrigger.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.A: cmbA.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.B: cmbB.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.X: cmbX.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.Y: cmbY.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.Up: cmbDUp.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.Down: cmbDDown.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.Left: cmbDLeft.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.Right: cmbDRight.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.LeftThumb: cmbLeftStickPress.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.RightThumb: cmbRightStickPress.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.DigitalStickUp: cmbDigitalStickUp.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.DigitalStickDown: cmbDigitalStickDown.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.DigitalStickLeft: cmbDigitalStickLeft.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.DigitalStickRight: cmbDigitalStickRight.SelectedItem = (Key)Enum.Parse(typeof(Key), binding.Value.ToString()); break; case (int)Xbox360StorageButtons.AnalogStick: cmbAnalogStick.SelectedItem = (AnalogStickBinding)Enum.Parse(typeof(AnalogStickBinding), binding.Value.ToString()); break; } } } }