private void save()
        {
            Dictionary <int, int>     values  = new Dictionary <int, int>();
            ControllerBindingsStorage storage = new ControllerBindingsStorage();

            values.Add((int)Xbox360StorageButtons.Guide, (int)((Key)cmbHome.SelectedValue));
            values.Add((int)Xbox360StorageButtons.Start, (int)((Key)cmbStart.SelectedValue));
            values.Add((int)Xbox360StorageButtons.Back, (int)((Key)cmbBack.SelectedValue));
            values.Add((int)Xbox360StorageButtons.LeftShoulder, (int)((Key)cmbLeftBumper.SelectedValue));
            values.Add((int)Xbox360StorageButtons.RightShoulder, (int)((Key)cmbRightBumper.SelectedValue));
            values.Add((int)Xbox360StorageButtons.LeftTrigger, (int)((Key)cmbLeftTrigger.SelectedValue));
            values.Add((int)Xbox360StorageButtons.RightTrigger, (int)((Key)cmbRightTrigger.SelectedValue));
            values.Add((int)Xbox360StorageButtons.A, (int)((Key)cmbA.SelectedValue));
            values.Add((int)Xbox360StorageButtons.B, (int)((Key)cmbB.SelectedValue));
            values.Add((int)Xbox360StorageButtons.X, (int)((Key)cmbX.SelectedValue));
            values.Add((int)Xbox360StorageButtons.Y, (int)((Key)cmbY.SelectedValue));
            values.Add((int)Xbox360StorageButtons.Up, (int)((Key)cmbDUp.SelectedValue));
            values.Add((int)Xbox360StorageButtons.Down, (int)((Key)cmbDDown.SelectedValue));
            values.Add((int)Xbox360StorageButtons.Left, (int)((Key)cmbDLeft.SelectedValue));
            values.Add((int)Xbox360StorageButtons.Right, (int)((Key)cmbDRight.SelectedValue));
            values.Add((int)Xbox360StorageButtons.LeftThumb, (int)((Key)cmbLeftStickPress.SelectedValue));
            values.Add((int)Xbox360StorageButtons.RightThumb, (int)((Key)cmbRightStickPress.SelectedValue));
            values.Add((int)Xbox360StorageButtons.DigitalStickUp, (int)((Key)cmbDigitalStickUp.SelectedValue));
            values.Add((int)Xbox360StorageButtons.DigitalStickDown, (int)((Key)cmbDigitalStickDown.SelectedValue));
            values.Add((int)Xbox360StorageButtons.DigitalStickLeft, (int)((Key)cmbDigitalStickLeft.SelectedValue));
            values.Add((int)Xbox360StorageButtons.DigitalStickRight, (int)((Key)cmbDigitalStickRight.SelectedValue));
            values.Add((int)Xbox360StorageButtons.AnalogStick, (int)((AnalogStickBinding)cmbAnalogStick.SelectedValue));

            storage.save(values);
        }
Beispiel #2
0
        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;
                    }
                }
            }
        }