Beispiel #1
0
        private void DoUpdateInput(OutputControllerDualShock4InputState new_state)
        {
            controller.SetButtonState(DualShock4Button.Triangle, new_state.triangle);
            controller.SetButtonState(DualShock4Button.Circle, new_state.circle);
            controller.SetButtonState(DualShock4Button.Cross, new_state.cross);
            controller.SetButtonState(DualShock4Button.Square, new_state.square);

            controller.SetButtonState(DualShock4Button.ShoulderLeft, new_state.shoulder_left);
            controller.SetButtonState(DualShock4Button.ShoulderRight, new_state.shoulder_right);

            controller.SetButtonState(DualShock4Button.TriggerLeft, new_state.trigger_left);
            controller.SetButtonState(DualShock4Button.TriggerRight, new_state.trigger_right);

            controller.SetButtonState(DualShock4Button.ThumbLeft, new_state.thumb_left);
            controller.SetButtonState(DualShock4Button.ThumbRight, new_state.thumb_right);

            controller.SetButtonState(DualShock4Button.Share, new_state.share);
            controller.SetButtonState(DualShock4Button.Options, new_state.options);
            controller.SetButtonState(DualShock4SpecialButton.Ps, new_state.ps);
            controller.SetButtonState(DualShock4SpecialButton.Touchpad, new_state.touchpad);

            controller.SetDPadDirection(MapDPadDirection(new_state.dPad));

            controller.SetAxisValue(DualShock4Axis.LeftThumbX, new_state.thumb_left_x);
            controller.SetAxisValue(DualShock4Axis.LeftThumbY, new_state.thumb_left_y);
            controller.SetAxisValue(DualShock4Axis.RightThumbX, new_state.thumb_right_x);
            controller.SetAxisValue(DualShock4Axis.RightThumbY, new_state.thumb_right_y);

            controller.SetSliderValue(DualShock4Slider.LeftTrigger, new_state.trigger_left_value);
            controller.SetSliderValue(DualShock4Slider.RightTrigger, new_state.trigger_right_value);

            controller.SubmitReport();

            current_state = new_state;
        }
Beispiel #2
0
 private void SetDPadIfNeeded(bool?up, bool?down, bool?left, bool?right)
 {
     if (up.HasValue || down.HasValue || left.HasValue || right.HasValue)
     {
         var newValue = GetDirection(up, down, left, right);
         controller.SetDPadDirection(newValue);
     }
 }
        // DualShockState from PS4RemotePlayInjection
        public static void ConvertandSendReport(IDualShock4Controller controller, DualShockState state)
        {
            // 2021.12.21 pancakeslp
            // ` controller.ResetReport(); `
            // it might make sense to reset the controller/report
            // but sometimes the report might auto submit, resulting in what looks like a twitch
            //
            // this is most easilly observed with having the ADS toggle on,
            // and then ADSing and taking your hand off the mouse

            //Left
            controller.SetButtonState(DualShock4Button.ShoulderLeft, state.L1);
            SetTriggerLeft(controller, state.L2);
            controller.SetButtonState(DualShock4Button.ThumbLeft, state.L3);

            DualShock4DPadDirection tempDPad = DualShock4DPadDirection.None;

            if (state.DPad_Up && state.DPad_Right)
            {
                tempDPad = DualShock4DPadDirection.Northeast;
            }
            else if (state.DPad_Up && state.DPad_Left)
            {
                tempDPad = DualShock4DPadDirection.Northwest;
            }
            else if (state.DPad_Up)
            {
                tempDPad = DualShock4DPadDirection.North;
            }
            else if (state.DPad_Right && state.DPad_Down)
            {
                tempDPad = DualShock4DPadDirection.Southeast;
            }
            else if (state.DPad_Right)
            {
                tempDPad = DualShock4DPadDirection.East;
            }
            else if (state.DPad_Down && state.DPad_Left)
            {
                tempDPad = DualShock4DPadDirection.Southwest;
            }
            else if (state.DPad_Down)
            {
                tempDPad = DualShock4DPadDirection.South;
            }
            else if (state.DPad_Left)
            {
                tempDPad = DualShock4DPadDirection.West;
            }
            controller.SetDPadDirection(tempDPad);

            controller.SetAxisValue(DualShock4Axis.LeftThumbX, state.LX);
            controller.SetAxisValue(DualShock4Axis.LeftThumbY, state.LY);


            //middle
            controller.SetButtonState(DualShock4Button.Options, state.Options);
            controller.SetButtonState(DualShock4Button.Share, state.Share);

            controller.SetButtonState(DualShock4SpecialButton.Ps, state.PS);
            controller.SetButtonState(DualShock4SpecialButton.Touchpad, state.TouchButton);


            //Right
            controller.SetButtonState(DualShock4Button.ShoulderRight, state.R1);
            SetTriggerRight(controller, state.R2);
            controller.SetButtonState(DualShock4Button.ThumbRight, state.R3);

            controller.SetButtonState(DualShock4Button.Circle, state.Circle);
            controller.SetButtonState(DualShock4Button.Cross, state.Cross);
            controller.SetButtonState(DualShock4Button.Square, state.Square);
            controller.SetButtonState(DualShock4Button.Triangle, state.Triangle);

            controller.SetAxisValue(DualShock4Axis.RightThumbX, state.RX);
            controller.SetAxisValue(DualShock4Axis.RightThumbY, state.RY);

            controller.SubmitReport();
        }
        // DS4State from Nefarius.ViGEm.Client.Targets
        public static void ConvertandSendReport(IDualShock4Controller controller, DS4State state)
        {
            // 2021.12.21 pancakeslp
            // ` controller.ResetReport(); `
            // it might make sense to reset the controller/report
            // but sometimes the report might auto submit, resulting in what looks like a twitch
            //
            // this is most easilly observed with having the ADS toggle on,
            // and then ADSing and taking your hand off the mouse

            ushort tempButtons = 0;
            DualShock4DPadDirection tempDPad = DualShock4DPadDirection.None;
            ushort tempSpecial = 0;

            unchecked
            {
                if (state.Share)
                {
                    tempButtons |= DualShock4Button.Share.Value;
                }
                if (state.L3)
                {
                    tempButtons |= DualShock4Button.ThumbLeft.Value;
                }
                if (state.R3)
                {
                    tempButtons |= DualShock4Button.ThumbRight.Value;
                }
                if (state.Options)
                {
                    tempButtons |= DualShock4Button.Options.Value;
                }

                if (state.DpadUp && state.DpadRight)
                {
                    tempDPad = DualShock4DPadDirection.Northeast;
                }
                else if (state.DpadUp && state.DpadLeft)
                {
                    tempDPad = DualShock4DPadDirection.Northwest;
                }
                else if (state.DpadUp)
                {
                    tempDPad = DualShock4DPadDirection.North;
                }
                else if (state.DpadRight && state.DpadDown)
                {
                    tempDPad = DualShock4DPadDirection.Southeast;
                }
                else if (state.DpadRight)
                {
                    tempDPad = DualShock4DPadDirection.East;
                }
                else if (state.DpadDown && state.DpadLeft)
                {
                    tempDPad = DualShock4DPadDirection.Southwest;
                }
                else if (state.DpadDown)
                {
                    tempDPad = DualShock4DPadDirection.South;
                }
                else if (state.DpadLeft)
                {
                    tempDPad = DualShock4DPadDirection.West;
                }

                if (state.L1)
                {
                    tempButtons |= DualShock4Button.ShoulderLeft.Value;
                }
                if (state.R1)
                {
                    tempButtons |= DualShock4Button.ShoulderRight.Value;
                }
                //if (state.L2Btn) tempButtons |= DualShock4Buttons.TriggerLeft;
                //if (state.R2Btn) tempButtons |= DualShock4Buttons.TriggerRight;
                if (state.L2 > 0)
                {
                    tempButtons |= DualShock4Button.TriggerLeft.Value;
                }
                if (state.R2 > 0)
                {
                    tempButtons |= DualShock4Button.TriggerRight.Value;
                }

                if (state.Triangle)
                {
                    tempButtons |= DualShock4Button.Triangle.Value;
                }
                if (state.Circle)
                {
                    tempButtons |= DualShock4Button.Circle.Value;
                }
                if (state.Cross)
                {
                    tempButtons |= DualShock4Button.Cross.Value;
                }
                if (state.Square)
                {
                    tempButtons |= DualShock4Button.Square.Value;
                }
                if (state.PS)
                {
                    tempSpecial |= DualShock4SpecialButton.Ps.Value;
                }
                if (state.TouchButton)
                {
                    tempSpecial |= DualShock4SpecialButton.Touchpad.Value;
                }

                controller.SetDPadDirection(tempDPad);
            }

            controller.SubmitReport();
        }
Beispiel #5
0
        public override void ConvertandSendReport(DS4State state, int device)
        {
            if (!connected)
            {
                return;
            }

            cont.ResetReport();
            ushort tempButtons = 0;
            DualShock4DPadDirection tempDPad = DualShock4DPadDirection.None;
            ushort tempSpecial = 0;

            unchecked
            {
                if (state.Share)
                {
                    tempButtons |= DualShock4Button.Share.Value;
                }
                if (state.L3)
                {
                    tempButtons |= DualShock4Button.ThumbLeft.Value;
                }
                if (state.R3)
                {
                    tempButtons |= DualShock4Button.ThumbRight.Value;
                }
                if (state.Options)
                {
                    tempButtons |= DualShock4Button.Options.Value;
                }

                if (state.DpadUp && state.DpadRight)
                {
                    tempDPad = DualShock4DPadDirection.Northeast;
                }
                else if (state.DpadUp && state.DpadLeft)
                {
                    tempDPad = DualShock4DPadDirection.Northwest;
                }
                else if (state.DpadUp)
                {
                    tempDPad = DualShock4DPadDirection.North;
                }
                else if (state.DpadRight && state.DpadDown)
                {
                    tempDPad = DualShock4DPadDirection.Southeast;
                }
                else if (state.DpadRight)
                {
                    tempDPad = DualShock4DPadDirection.East;
                }
                else if (state.DpadDown && state.DpadLeft)
                {
                    tempDPad = DualShock4DPadDirection.Southwest;
                }
                else if (state.DpadDown)
                {
                    tempDPad = DualShock4DPadDirection.South;
                }
                else if (state.DpadLeft)
                {
                    tempDPad = DualShock4DPadDirection.West;
                }

                /*if (state.DpadUp) tempDPad = (state.DpadRight) ? DualShock4DPadValues.Northeast : DualShock4DPadValues.North;
                 * if (state.DpadRight) tempDPad = (state.DpadDown) ? DualShock4DPadValues.Southeast : DualShock4DPadValues.East;
                 * if (state.DpadDown) tempDPad = (state.DpadLeft) ? DualShock4DPadValues.Southwest : DualShock4DPadValues.South;
                 * if (state.DpadLeft) tempDPad = (state.DpadUp) ? DualShock4DPadValues.Northwest : DualShock4DPadValues.West;
                 */

                if (state.L1)
                {
                    tempButtons |= DualShock4Button.ShoulderLeft.Value;
                }
                if (state.R1)
                {
                    tempButtons |= DualShock4Button.ShoulderRight.Value;
                }
                //if (state.L2Btn) tempButtons |= DualShock4Buttons.TriggerLeft;
                //if (state.R2Btn) tempButtons |= DualShock4Buttons.TriggerRight;
                if (state.L2 > 0)
                {
                    tempButtons |= DualShock4Button.TriggerLeft.Value;
                }
                if (state.R2 > 0)
                {
                    tempButtons |= DualShock4Button.TriggerRight.Value;
                }

                if (state.Triangle)
                {
                    tempButtons |= DualShock4Button.Triangle.Value;
                }
                if (state.Circle)
                {
                    tempButtons |= DualShock4Button.Circle.Value;
                }
                if (state.Cross)
                {
                    tempButtons |= DualShock4Button.Cross.Value;
                }
                if (state.Square)
                {
                    tempButtons |= DualShock4Button.Square.Value;
                }
                if (state.PS)
                {
                    tempSpecial |= DualShock4SpecialButton.Ps.Value;
                }
                if (state.TouchButton)
                {
                    tempSpecial |= DualShock4SpecialButton.Touchpad.Value;
                }
                cont.SetButtonsFull(tempButtons);
                cont.SetSpecialButtonsFull((byte)tempSpecial);
                cont.SetDPadDirection(tempDPad);
                //report.Buttons = (ushort)tempButtons;
                //report.SpecialButtons = (byte)tempSpecial;
            }

            cont.LeftTrigger  = state.L2;
            cont.RightTrigger = state.R2;

            SASteeringWheelEmulationAxisType steeringWheelMappedAxis = Global.GetSASteeringWheelEmulationAxis(device);

            switch (steeringWheelMappedAxis)
            {
            case SASteeringWheelEmulationAxisType.None:
                cont.LeftThumbX  = state.LX;
                cont.LeftThumbY  = state.LY;
                cont.RightThumbX = state.RX;
                cont.RightThumbY = state.RY;
                break;

            case SASteeringWheelEmulationAxisType.LX:
                cont.LeftThumbX  = (byte)state.SASteeringWheelEmulationUnit;
                cont.LeftThumbY  = state.LY;
                cont.RightThumbX = state.RX;
                cont.RightThumbY = state.RY;
                break;

            case SASteeringWheelEmulationAxisType.LY:
                cont.LeftThumbX  = state.LX;
                cont.LeftThumbY  = (byte)state.SASteeringWheelEmulationUnit;
                cont.RightThumbX = state.RX;
                cont.RightThumbY = state.RY;
                break;

            case SASteeringWheelEmulationAxisType.RX:
                cont.LeftThumbX  = state.LX;
                cont.LeftThumbY  = state.LY;
                cont.RightThumbX = (byte)state.SASteeringWheelEmulationUnit;
                cont.RightThumbY = state.RY;
                break;

            case SASteeringWheelEmulationAxisType.RY:
                cont.LeftThumbX  = state.LX;
                cont.LeftThumbY  = state.LY;
                cont.RightThumbX = state.RX;
                cont.RightThumbY = (byte)state.SASteeringWheelEmulationUnit;
                break;

            case SASteeringWheelEmulationAxisType.L2R2:
                cont.LeftTrigger = cont.RightTrigger = 0;
                if (state.SASteeringWheelEmulationUnit >= 0)
                {
                    cont.LeftTrigger = (Byte)state.SASteeringWheelEmulationUnit;
                }
                else
                {
                    cont.RightTrigger = (Byte)state.SASteeringWheelEmulationUnit;
                }
                goto case SASteeringWheelEmulationAxisType.None;

            case SASteeringWheelEmulationAxisType.VJoy1X:
            case SASteeringWheelEmulationAxisType.VJoy2X:
                DS4Windows.VJoyFeeder.vJoyFeeder.FeedAxisValue(state.SASteeringWheelEmulationUnit, ((((uint)steeringWheelMappedAxis) - ((uint)SASteeringWheelEmulationAxisType.VJoy1X)) / 3) + 1, DS4Windows.VJoyFeeder.HID_USAGES.HID_USAGE_X);
                goto case SASteeringWheelEmulationAxisType.None;

            case SASteeringWheelEmulationAxisType.VJoy1Y:
            case SASteeringWheelEmulationAxisType.VJoy2Y:
                DS4Windows.VJoyFeeder.vJoyFeeder.FeedAxisValue(state.SASteeringWheelEmulationUnit, ((((uint)steeringWheelMappedAxis) - ((uint)SASteeringWheelEmulationAxisType.VJoy1X)) / 3) + 1, DS4Windows.VJoyFeeder.HID_USAGES.HID_USAGE_Y);
                goto case SASteeringWheelEmulationAxisType.None;

            case SASteeringWheelEmulationAxisType.VJoy1Z:
            case SASteeringWheelEmulationAxisType.VJoy2Z:
                DS4Windows.VJoyFeeder.vJoyFeeder.FeedAxisValue(state.SASteeringWheelEmulationUnit, ((((uint)steeringWheelMappedAxis) - ((uint)SASteeringWheelEmulationAxisType.VJoy1X)) / 3) + 1, DS4Windows.VJoyFeeder.HID_USAGES.HID_USAGE_Z);
                goto case SASteeringWheelEmulationAxisType.None;

            default:
                // Should never come here but just in case use the NONE case as default handler....
                goto case SASteeringWheelEmulationAxisType.None;
            }

            cont.SubmitReport();
        }
        private void Left(State state)
        {
            var isDown = state.Gamepad.Buttons.HasFlag(GamepadButtonFlags.DPadLeft);

            xinput.SetDPadDirection(DualShock4DPadDirection.East);
        }