Beispiel #1
0
 public Joystick(Int32 uJoyID)
 {
     _info         = new JOYINFOEX();
     _info.dwSize  = 13 * sizeof(Int32);
     _info.dwFlags = JOY_RETURNALL;
     _uJoyID       = uJoyID;
 }
Beispiel #2
0
        public static JoystickState GetAsJoystickState(int joystickIndex)
        {
            if (joystickIndex < 0 || joystickIndex >= NumJoysticks)
            {
                throw new ArgumentOutOfRangeException("joystickIndex");
            }

            JOYINFOEX pji = new JOYINFOEX();

            pji.dwSize  = sizeOfJOYINFOEX;
            pji.dwFlags = 255;
            //pji.dwButtons = new int[11];// ここでdwButtonsにボタンマップの状態を入れたいがどうすればよいのか..
            //pji.dwButtonNumber = new int[32];
            /*ようやくわかった dwButtonsは32bitフラグ! つまりボタンマップ配列に変換する所だけ追加すればいける!*/
            int ret = joyGetPosEx((uint)joystickIndex, ref pji);// ここでpjiに値が入る

            // Convert to managed joystick states.
            return(new JoystickState(
                       ret == 0,
                       calibrations[joystickIndex].PositionX.ConvertInternal(pji.dwXpos),
                       calibrations[joystickIndex].PositionY.ConvertInternal(pji.dwYpos),
                       calibrations[joystickIndex].PositionZ.ConvertInternal(pji.dwZpos),
                       calibrations[joystickIndex].PositionR.ConvertInternal(pji.dwRpos),
                       calibrations[joystickIndex].PositionU.ConvertInternal(pji.dwUpos),
                       calibrations[joystickIndex].PositionV.ConvertInternal(pji.dwVpos),
                       /*(int)pji.dwButtons*/ (int)pji.dwButtons, pji.dwButtonNumber, Calc.BinToBoolean(Calc.DecToBin(pji.dwButtons, 32)), pji.GetDPad()));
        }
Beispiel #3
0
        public JOYERR GetPosEx(uint JoyID)
        {
            JOYERR err = joyGetPosEx(JoyID, ptr);

            JoyInfoEx = (JOYINFOEX)Marshal.PtrToStructure(ptr, JoyInfoEx.GetType());

            return(err);
        }
Beispiel #4
0
        public static JOYINFOEX getJoyPosEx(uint uJoyID)
        {
            JOYINFOEX joyinfo = new JOYINFOEX();

            joyinfo.dwFlags = 0xff;
            joyinfo.dwSize  = 13 * 4;
            joyGetPosEx(uJoyID, ref joyinfo);
            return(joyinfo);
        }
Beispiel #5
0
        public JoyPad()
        {
            JoyInfoEx         = new JOYINFOEX();
            JoyInfoEx.dwSize  = (uint)Marshal.SizeOf(typeof(JOYINFOEX));
            JoyInfoEx.dwFlags = JOY_RETURNALL;

            ptr = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(JOYINFOEX)));

            Marshal.StructureToPtr(JoyInfoEx, ptr, false);
        }
Beispiel #6
0
        public JoystickState ReadState()
        {
            JOYINFOEX joyinfo = new JOYINFOEX();

            joyinfo.dwFlags = JOYINFOFLAGS.JOY_RETURNALL;
            NativeMethods.Throw(
                NativeMethods.joyGetPosEx(this.deviceId, ref joyinfo),
                NativeMethods.ErrorSource.Joystick);

            return(null);
        }
Beispiel #7
0
        /// <summary>
        /// Function to poll the joystick for data.
        /// </summary>
        protected override void PollJoystick()
        {
            JOYINFOEX joyInfo = GetWin32JoystickData();

            // Do nothing if we're not connected.
            if (!IsConnected)
            {
                return;
            }

            // Get primary axis data.  Center between the range.
            X = CenterValue((int)joyInfo.X, Capabilities.XAxisRange);
            Y = -CenterValue((int)joyInfo.Y, Capabilities.YAxisRange);

            // Get secondary axis data.
            if ((Capabilities.ExtraCapabilities & JoystickCapabilityFlags.SupportsSecondaryXAxis) ==
                JoystickCapabilityFlags.SupportsSecondaryXAxis)
            {
                SecondaryX = CenterValue((int)joyInfo.Axis5, Capabilities.SecondaryXAxisRange);
            }

            if ((Capabilities.ExtraCapabilities & JoystickCapabilityFlags.SupportsSecondaryYAxis) ==
                JoystickCapabilityFlags.SupportsSecondaryYAxis)
            {
                SecondaryY = -CenterValue((int)joyInfo.Axis6, Capabilities.SecondaryYAxisRange);
            }

            // Get throttle/rudder info.
            if ((Capabilities.ExtraCapabilities & JoystickCapabilityFlags.SupportsThrottle) ==
                JoystickCapabilityFlags.SupportsThrottle)
            {
                Throttle = CenterValue((int)joyInfo.Z, Capabilities.ThrottleAxisRange);
            }

            if ((Capabilities.ExtraCapabilities & JoystickCapabilityFlags.SupportsRudder) ==
                JoystickCapabilityFlags.SupportsRudder)
            {
                Rudder = CenterValue((int)joyInfo.Rudder, Capabilities.RudderAxisRange);
            }

            // Get POV data.
            if ((Capabilities.ExtraCapabilities & JoystickCapabilityFlags.SupportsPOV) == JoystickCapabilityFlags.SupportsPOV)
            {
                POV = (int)joyInfo.POV;
            }

            // Update buttons.
            for (int i = 0; i < _buttonStates.Count; i++)
            {
                _buttonStates.SetButtonState(i, (joyInfo.Buttons & (JoystickButton)(1 << i)) != 0);
            }
        }
Beispiel #8
0
        public CJoystick(int id)
        {
            caps = new JOYCAPS();
            info = new JOYINFOEX
            {
                dwSize  = (uint)Marshal.SizeOf(typeof(JOYINFOEX)),
                dwFlags = ReturnType.All,
            };

            this.ID        = id;
            this.Available = Update();

            if (id != -1)
            {
                joyGetDevCaps(id, ref caps, Marshal.SizeOf(typeof(JOYCAPS)));
            }
        }
Beispiel #9
0
        static public JoystickState GetJoysticState(int JoystickIndex)
        {
            JOYINFOEX joystickInfo = new JOYINFOEX();

            joystickInfo.Size = Marshal.SizeOf(joystickInfo);
            int result = joyGetPosEx(JoystickIndex, ref joystickInfo);

            JoystickState joy = new JoystickState();

            if (result == 0)
            {
                joy.x1 = ((float)joystickInfo.X / 32768.0f - 1.0f);
                joy.y1 = -((float)joystickInfo.Y / 32768.0f - 1.0f);
                joy.b1 = joystickInfo.Z < 18000;
            }
            else
            {
                joy.x1 = 0;
                joy.y1 = 0;
                joy.b1 = false;
            }
            return(joy);
        }
Beispiel #10
0
 private static extern int joyGetPosEx(int joystickNumber, ref JOYINFOEX info);
Beispiel #11
0
 internal static extern int joyGetPosEx(int uJoyID, ref JOYINFOEX pji);
        public static JoystickState GetAsJoystickState(int joystickIndex)
        {
            if (joystickIndex < 0 || joystickIndex >= NumJoysticks)
                throw new ArgumentOutOfRangeException("joystickIndex");

            JOYINFOEX pji = new JOYINFOEX();
            pji.dwSize = sizeOfJOYINFOEX;
            pji.dwFlags = 255;
            //pji.dwButtons = new int[11];// ここでdwButtonsにボタンマップの状態を入れたいがどうすればよいのか..
            //pji.dwButtonNumber = new int[32];
            /*ようやくわかった dwButtonsは32bitフラグ! つまりボタンマップ配列に変換する所だけ追加すればいける!*/
            int ret = joyGetPosEx((uint)joystickIndex, ref pji);// ここでpjiに値が入る

            // Convert to managed joystick states.
            return new JoystickState(
                ret == 0,
                calibrations[joystickIndex].PositionX.ConvertInternal(pji.dwXpos),
                calibrations[joystickIndex].PositionY.ConvertInternal(pji.dwYpos),
                calibrations[joystickIndex].PositionZ.ConvertInternal(pji.dwZpos),
                calibrations[joystickIndex].PositionR.ConvertInternal(pji.dwRpos),
                calibrations[joystickIndex].PositionU.ConvertInternal(pji.dwUpos),
                calibrations[joystickIndex].PositionV.ConvertInternal(pji.dwVpos),
                /*(int)pji.dwButtons*/(int)pji.dwButtons, pji.dwButtonNumber, Calc.BinToBoolean(Calc.DecToBin(pji.dwButtons, 32)), pji.GetDPad());
        }
Beispiel #13
0
 public static extern ResultCode joyGetPosEx(int uJoyID, JOYINFOEX pji);
Beispiel #14
0
 public JoyStick()
 {
     pji = new JOYINFOEX();
 }
Beispiel #15
0
 private static uint getPos(uint uJoyID, ref JOYINFOEX pji)
 {
     pji.dwSize  = (uint)Marshal.SizeOf(pji);
     pji.dwFlags = 0xFF;
     return(joyGetPosEx(uJoyID, ref pji));
 }
Beispiel #16
0
 private static extern uint joyGetPosEx(uint uJoyID, ref JOYINFOEX pji);
Beispiel #17
0
 public static JOYINFOEX getJoyPosEx(uint uJoyID)
 {
     JOYINFOEX joyinfo = new JOYINFOEX();
     joyinfo.dwFlags = 0xff;
     joyinfo.dwSize = 13 * 4;
     joyGetPosEx(uJoyID, ref joyinfo);
     return joyinfo;
 }
Beispiel #18
0
 public static extern ResultCode joyGetPosEx(int uJoyID, JOYINFOEX pji);
Beispiel #19
0
 internal static extern int joyGetPosEx(int uJoyID, ref JOYINFOEX pji);
Beispiel #20
0
 public static extern Int32 joyGetPosEx(Int32 uJoyID, ref JOYINFOEX pji);
Beispiel #21
0
 public static extern int joyGetPosEx(uint uJoyID, ref JOYINFOEX pji);
Beispiel #22
0
        /// <summary>
        /// Function to retrieve the state of the joystick.
        /// </summary>
        /// <returns></returns>
        private JOYINFOEX GetWin32JoystickData()
        {
            var joyInfo = new JOYINFOEX
            {
                Size  = DirectAccess.SizeOf <JOYINFOEX>(),
                Flags = JoystickInfoFlags.ReturnButtons | JoystickInfoFlags.ReturnX | JoystickInfoFlags.ReturnY
            };                          // Joystick information.

            // Determine which data we want to return.
            if ((Capabilities.ExtraCapabilities & JoystickCapabilityFlags.SupportsThrottle) ==
                JoystickCapabilityFlags.SupportsThrottle)
            {
                joyInfo.Flags |= JoystickInfoFlags.ReturnZ;
            }

            if ((Capabilities.ExtraCapabilities & JoystickCapabilityFlags.SupportsSecondaryXAxis) ==
                JoystickCapabilityFlags.SupportsSecondaryXAxis)
            {
                joyInfo.Flags |= JoystickInfoFlags.ReturnAxis5;
            }

            if ((Capabilities.ExtraCapabilities & JoystickCapabilityFlags.SupportsSecondaryYAxis) ==
                JoystickCapabilityFlags.SupportsSecondaryYAxis)
            {
                joyInfo.Flags |= JoystickInfoFlags.ReturnAxis6;
            }

            if ((Capabilities.ExtraCapabilities & JoystickCapabilityFlags.SupportsRudder) ==
                JoystickCapabilityFlags.SupportsRudder)
            {
                joyInfo.Flags |= JoystickInfoFlags.ReturnRudder;
            }

            if ((Capabilities.ExtraCapabilities & JoystickCapabilityFlags.SupportsPOV) == JoystickCapabilityFlags.SupportsPOV)
            {
                joyInfo.Flags |= JoystickInfoFlags.ReturnPOV;

                if ((Capabilities.ExtraCapabilities & JoystickCapabilityFlags.SupportsContinuousPOV) ==
                    JoystickCapabilityFlags.SupportsContinuousPOV)
                {
                    joyInfo.Flags |= JoystickInfoFlags.ReturnPOVContinuousDegreeBearings;
                }
            }

            int error = Win32API.joyGetPosEx(_joystickID, ref joyInfo);

            // If the joystick is disconnected then leave.
            if (error == 0xA7)
            {
                IsConnected = false;
                return(default(JOYINFOEX));
            }

            // If it's any other error, then throw an exception.
            if (error > 0)
            {
                throw new GorgonException(GorgonResult.CannotRead,
                                          string.Format(Resources.GORINP_RAW_CANNOT_READ_JOYSTICK_DATA, _joystickID,
                                                        error.FormatHex()));
            }

            IsConnected = true;

            return(joyInfo);
        }
Beispiel #23
0
		public static extern uint joyGetPosEx(uint uJoyID, ref JOYINFOEX pji);
Beispiel #24
0
 public static extern Int32 GetJoystickState(Int32 uJoyID, ref JOYINFOEX pji);
Beispiel #25
0
 public static extern Int32 joyGetPosEx(Int32 uJoyID, ref JOYINFOEX pji);
 static extern int joyGetPosEx(uint uJoyId, ref JOYINFOEX pji);
Beispiel #27
0
 public static extern MMRESULT joyGetPosEx(int uJoyID, ref JOYINFOEX pji);
Beispiel #28
0
        static public JoystickState GetJoysticState(int JoystickIndex)
        {
            JOYINFOEX joystickInfo = new JOYINFOEX();
            joystickInfo.Size = Marshal.SizeOf(joystickInfo);
            int result = joyGetPosEx(JoystickIndex, ref joystickInfo);

            JoystickState joy = new JoystickState();
            if (result == 0)
            {
                joy.x1 = ((float)joystickInfo.X / 32768.0f - 1.0f);
                joy.y1 = -((float)joystickInfo.Y / 32768.0f - 1.0f);
                joy.b1 = joystickInfo.Z < 18000;
            }
            else
            {
                joy.x1 = 0;
                joy.y1 = 0;
                joy.b1 = false;
            }
            return joy;
        }
Beispiel #29
0
 private void Initialize()
 {
    this.jsx = new JOYINFOEX();
    this.jsx.dwSize = Marshal.SizeOf(jsx);
    this.jsx.dwFlags = JOY_RETURNALL;
    
    this.valid = GetPosition();
 }