Exemple #1
0
        //Update and prepare XInput byte data
        void PrepareXInputDataEmpty(ControllerStatus Controller)
        {
            try
            {
                //Set report structure
                XUSB_REPORT usbReport = new XUSB_REPORT();

                //Set submit structure
                Controller.XInputData          = new XUSB_INPUT_REPORT();
                Controller.XInputData.Size     = Marshal.SizeOf(Controller.XInputData);
                Controller.XInputData.SerialNo = Controller.NumberId + 1;
                Controller.XInputData.Report   = usbReport;
            }
            catch { }
        }
Exemple #2
0
        /// <summary>
        ///     Submits an <see cref="Xbox360Report"/> to this device which will update its state.
        /// </summary>
        /// <param name="report">The <see cref="Xbox360Report"/> to submit.</param>
        public void SendReport(Xbox360Report report)
        {
            // Convert managed to unmanaged structure
            var submit = new XUSB_REPORT
            {
                wButtons      = report.Buttons,
                bLeftTrigger  = report.LeftTrigger,
                bRightTrigger = report.RightTrigger,
                sThumbLX      = report.LeftThumbX,
                sThumbLY      = report.LeftThumbY,
                sThumbRX      = report.RightThumbX,
                sThumbRY      = report.RightThumbY
            };

            var error = ViGEmClient.vigem_target_x360_update(Client.NativeHandle, NativeHandle, submit);

            switch (error)
            {
            case VIGEM_ERROR.VIGEM_ERROR_BUS_NOT_FOUND:
            case VIGEM_ERROR.VIGEM_ERROR_INVALID_TARGET:
                throw new ViGEmException(error);
            }
        }
Exemple #3
0
        //Update and prepare XInput byte data
        void PrepareXInputDataCurrent(ControllerStatus Controller)
        {
            try
            {
                //Set report structure
                XUSB_REPORT usbReport = new XUSB_REPORT();

                //Set current input
                //Thumbs
                usbReport.sThumbLX = (short)Controller.InputCurrent.ThumbLeftX;
                usbReport.sThumbLY = (short)Controller.InputCurrent.ThumbLeftY;
                usbReport.sThumbRX = (short)Controller.InputCurrent.ThumbRightX;
                usbReport.sThumbRY = (short)Controller.InputCurrent.ThumbRightY;

                //Triggers
                if (!Controller.Details.Profile.UseButtonTriggers)
                {
                    usbReport.bLeftTrigger  = Controller.InputCurrent.TriggerLeft;
                    usbReport.bRightTrigger = Controller.InputCurrent.TriggerRight;
                }
                else
                {
                    if (Controller.InputCurrent.ButtonTriggerLeft.PressedRaw)
                    {
                        usbReport.bLeftTrigger = 255;
                    }
                    if (Controller.InputCurrent.ButtonTriggerRight.PressedRaw)
                    {
                        usbReport.bRightTrigger = 255;
                    }
                }

                //D-Pad
                if (Controller.InputCurrent.DPadLeft.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_DPAD_LEFT;
                }
                if (Controller.InputCurrent.DPadUp.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_DPAD_UP;
                }
                if (Controller.InputCurrent.DPadRight.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_DPAD_RIGHT;
                }
                if (Controller.InputCurrent.DPadDown.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_DPAD_DOWN;
                }

                //Buttons
                if (Controller.InputCurrent.ButtonA.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_A;
                }
                if (Controller.InputCurrent.ButtonB.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_B;
                }
                if (Controller.InputCurrent.ButtonX.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_X;
                }
                if (Controller.InputCurrent.ButtonY.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_Y;
                }
                if (Controller.InputCurrent.ButtonBack.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_BACK;
                }
                if (Controller.InputCurrent.ButtonStart.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_START;
                }
                if (Controller.InputCurrent.ButtonGuide.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_GUIDE;
                }
                if (Controller.InputCurrent.ButtonShoulderLeft.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_LEFT_SHOULDER;
                }
                if (Controller.InputCurrent.ButtonShoulderRight.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_RIGHT_SHOULDER;
                }
                if (Controller.InputCurrent.ButtonThumbLeft.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_LEFT_THUMB;
                }
                if (Controller.InputCurrent.ButtonThumbRight.PressedRaw)
                {
                    usbReport.wButtons |= XUSB_BUTTON.XUSB_GAMEPAD_RIGHT_THUMB;
                }

                //Set submit structure
                Controller.XInputData          = new XUSB_INPUT_REPORT();
                Controller.XInputData.Size     = Marshal.SizeOf(Controller.XInputData);
                Controller.XInputData.SerialNo = Controller.NumberId + 1;
                Controller.XInputData.Report   = usbReport;
            }
            catch { }
        }