Exemple #1
0
        private void OnTimerCallback2(object state)
        {
            JoystickAPI.JOYINFOEX infoEx_PR = new JoystickAPI.JOYINFOEX();
            JoystickAPI.JOYINFOEX infoEx_Y  = new JoystickAPI.JOYINFOEX();
            JoystickAPI.JOYINFOEX infoEx_T  = new JoystickAPI.JOYINFOEX();
            Axis axis_now = PreviousAxis2;

            if (joystick_PR2.getinfo(ref infoEx_PR) == JoystickAPI.JOYERR_NOERROR)
            {
                JoystickButtons buttons = joystick_PR2.GetButtons(infoEx_PR.dwButtons);
                JoystickAxis    axis    = joystick_PR2.GetAxis(ref infoEx_PR);

                if (PreviousButtons2 != buttons)
                {
                    //按钮状态有更改,则发出ButtonUp事件

                    //取得前一次按下的按钮与本次按下的按钮的差(即不再处于按下状态的按钮)
                    JoystickButtons b = (JoystickButtons)(PreviousButtons2 - (PreviousButtons2 & buttons));
                    JoystickButtons n = (JoystickButtons)(buttons - (PreviousButtons2 & buttons));//新按下的按钮;
                    if (b != JoystickButtons.None)
                    {
                        this.Dispatcher.Invoke(new ButtonsUpCallBack(buttonUp2), b);
                    }
                    if (n != JoystickButtons.None)
                    {
                        this.Dispatcher.Invoke(new ButtonsDownCallBack(buttonDown2), n);
                    }
                    PreviousButtons2 = buttons;
                }
                axis_now.Pitch = Convert.ToDouble(axis.Ypos - joystick_PR2.JoystickCAPS.wYmin) * 100 / (joystick_PR2.JoystickCAPS.wYmax - joystick_PR2.JoystickCAPS.wYmin);
                axis_now.Roll  = Convert.ToDouble(axis.Xpos - joystick_PR2.JoystickCAPS.wXmin) * 100 / (joystick_PR2.JoystickCAPS.wXmax - joystick_PR2.JoystickCAPS.wXmin);
            }
            if (joystick_Y2.getinfo(ref infoEx_Y) == JoystickAPI.JOYERR_NOERROR)
            {
                JoystickAxis axis = joystick_Y2.GetAxis(ref infoEx_Y);
                axis_now.Yaw = Convert.ToDouble(axis.Zpos - joystick_Y2.JoystickCAPS.wRmin) * 100 / (joystick_Y2.JoystickCAPS.wRmax - joystick_Y2.JoystickCAPS.wRmin);
            }
            if (joystick_T2.getinfo(ref infoEx_T) == JoystickAPI.JOYERR_NOERROR)
            {
                JoystickAxis axis = joystick_T2.GetAxis(ref infoEx_T);
                //axis_now.Throttle = 100 - Convert.ToDouble(axis.Rpos - joystick_T.JoystickCAPS.wRmin) * 100 / (joystick_T.JoystickCAPS.wRmax - joystick_T.JoystickCAPS.wRmin);
                axis_now.Throttle = 100 - Convert.ToDouble(axis.Zpos - joystick_T2.JoystickCAPS.wZmin) * 100 / (joystick_T2.JoystickCAPS.wZmax - joystick_T2.JoystickCAPS.wZmin);
            }
            if (axis_now.Equals(PreviousAxis2))
            {
            }
            else
            {
                this.Dispatcher.Invoke(new AxisChangeCallBack(axisChange2), axis_now);
                PreviousAxis2 = axis_now;
            }
        }