コード例 #1
0
ファイル: JoystickThread.cs プロジェクト: rajeper/ikarus-osd
        public void ProcesarEventoJoy(Singleton.EventosJoy evento)
        {
            Joystick_WMM.JOYINFOEX joyinfo;

            switch (evento)
            {
            case Singleton.EventosJoy.None:     //
                break;

            case Singleton.EventosJoy.AutoPltON:     //
                modem_autopilot = WflyUplink.Autopilot.Autopilot;
                break;

            case Singleton.EventosJoy.AutoPilotOFF:     //
                modem_autopilot = WflyUplink.Autopilot.Manual;
                break;

            case Singleton.EventosJoy.AutoPltCo:
                modem_autopilot = WflyUplink.Autopilot.Copilot;
                break;

            case Singleton.EventosJoy.AutoPilotSWnext:     //
                modem_autopilot = (WflyUplink.Autopilot)(((int)modem_autopilot + 1) % 3);
                break;

            case Singleton.EventosJoy.AutoPilotSWprev:
                if ((int)modem_autopilot == 0)
                {
                    modem_autopilot = (WflyUplink.Autopilot) 2;
                }
                else
                {
                    modem_autopilot = (WflyUplink.Autopilot)((int)modem_autopilot - 1);
                }
                break;

            case Singleton.EventosJoy.CamA:     //
                modem_cam = false;
                break;

            case Singleton.EventosJoy.CamB:     //
                modem_cam = true;
                break;

            case Singleton.EventosJoy.CamSW:     //
                modem_cam = !modem_cam;
                break;

            case Singleton.EventosJoy.HudCL:     //
                modem_hud = 0;
                break;

            case Singleton.EventosJoy.Hud1:     //
                modem_hud = 1;
                break;

            case Singleton.EventosJoy.Hud2:     //
                modem_hud = 2;
                break;

            case Singleton.EventosJoy.Hud3:     //
                modem_hud = 3;
                break;

            case Singleton.EventosJoy.HudSWnext:     //
                modem_hud = (modem_hud + 1) % 4;
                break;

            case Singleton.EventosJoy.HudSWprev:
                if (modem_hud == 0)
                {
                    modem_hud = 3;
                }
                else
                {
                    modem_hud = modem_hud - 1;
                }
                break;

            case Singleton.EventosJoy.GoHome:     //
                modem_ruta = WflyUplink.Ruta.Casa;
                break;

            case Singleton.EventosJoy.GoWptRuta:     //
                modem_ruta = WflyUplink.Ruta.Ruta;
                break;

            case Singleton.EventosJoy.GoUplink:     //
                modem_ruta = WflyUplink.Ruta.Modem;
                break;

            case Singleton.EventosJoy.GoHold:
                modem_ruta = WflyUplink.Ruta.Hold;
                break;

            case Singleton.EventosJoy.GoSWnext:     //
                modem_ruta = (WflyUplink.Ruta)(((int)modem_ruta + 1) % 4);
                break;

            case Singleton.EventosJoy.GoSWprev:     //
                if ((int)modem_ruta == 0)
                {
                    modem_ruta = (WflyUplink.Ruta) 3;
                }
                else
                {
                    modem_ruta = (WflyUplink.Ruta)((int)modem_ruta - 1);
                }
                break;

            case Singleton.EventosJoy.PanTiltCenter:
                pan  = 0;
                tilt = 0;
                break;

            case Singleton.EventosJoy.FlapsOff:
                flaps = 0;
                break;

            case Singleton.EventosJoy.FlapsFull:
                flaps = singleton.full_flap;
                break;

            case Singleton.EventosJoy.FlapsInc:
                flaps += singleton.step_flap * singleton.full_flap;
                if (flaps > singleton.full_flap)
                {
                    flaps = singleton.full_flap;
                }
                break;

            case Singleton.EventosJoy.FlapsDec:
                flaps -= singleton.step_flap * singleton.full_flap;
                if (flaps < 0)
                {
                    flaps = 0;
                }
                break;

            case Singleton.EventosJoy.TrimAil:
                joyinfo = Joystick_WMM.getJoyPosEx((uint)0);
                TrimAil = -AdjustaValor((2 * (joyinfo.dwXpos / 65535.0f) - 1), TrimAil);
                break;

            case Singleton.EventosJoy.TrimEle:
                joyinfo = Joystick_WMM.getJoyPosEx((uint)0);
                TrimEle = -AdjustaValor((2 * (joyinfo.dwYpos / 65535.0f) - 1), TrimEle);
                break;

            case Singleton.EventosJoy.TrimTail:
                joyinfo  = Joystick_WMM.getJoyPosEx((uint)0);
                TrimTail = -AdjustaValor((2 * (joyinfo.dwRpos / 65535.0f) - 1), TrimTail);
                break;

            case Singleton.EventosJoy.TrimAll:
                joyinfo  = Joystick_WMM.getJoyPosEx((uint)0);
                TrimEle  = -AdjustaValor((2 * (joyinfo.dwYpos / 65535.0f) - 1), TrimEle);
                TrimAil  = -AdjustaValor((2 * (joyinfo.dwXpos / 65535.0f) - 1), TrimAil);
                TrimTail = -AdjustaValor((2 * (joyinfo.dwRpos / 65535.0f) - 1), TrimTail);
                break;

            case Singleton.EventosJoy.Picture:
                formIkarusMain.Capturar_Foto();
                break;

            default:
                break;
            }
        }
コード例 #2
0
ファイル: JoystickThread.cs プロジェクト: rajeper/ikarus-osd
        void tareaJOY()
        {
            if (changed_mask)
            {
                changed_mask = false;
                wfly.SetMask(_mask);
            }
            Joystick_WMM.JOYINFOEX joyinfo = Joystick_WMM.getJoyPosEx((uint)0);

            // Analiza si se ha pulsado algun boton nuevo
            int bmask = 1;

            for (int i = 0; i < 16; i++)
            {
                if ((joyinfo.dwButtons & bmask) == 0)
                {
                    old_buttons &= ~bmask;
                }
                else if ((old_buttons & bmask) == 0)
                {
                    old_buttons |= bmask;
                    Singleton.EventosJoy evento = (Singleton.EventosJoy)((int)singleton.joy_buttons[i]);
                    ProcesarEventoJoy(evento);
                }
                bmask <<= 1;
            }

            // Analiza el modem uplink
            if (changed_switches)
            {
                changed_switches = false;
                SetSwitches(modem_ruta, modem_autopilot, (byte)modem_hud, modem_cam);
            }
            if (changed_alt)
            {
                changed_alt = false;
                SetAltitude((int)modem_alt);
            }
            if (changed_lonlat)
            {
                changed_lonlat = false;
                SetLonLat(modem_lon, modem_lat);
            }

            // Comandos varios
            if (changed_debugvar)
            {
                changed_debugvar = false;
                SetDebugVar(debugvar_id, debugvar_value);
            }
            else if (changed_wptid)
            {
                changed_wptid = false;
                SetWptID(_wpt_id);
            }
            else if (trig_cmdCenterIR)
            {
                trig_cmdCenterIR = false;
                SetCenterIR();
            }
            else if (trig_cmdGainIR)
            {
                trig_cmdGainIR = false;
                SetGainIR();
            }
            else if (trig_cmdSetHome)
            {
                trig_cmdSetHome = false;
                SetHome();
            }
            else if (trig_cmdSaveFlash)
            {
                trig_cmdSaveFlash = false;
                SaveFlash();
            }


            // Analiza movimiento PAN & TILT
            int v = ((short)joyinfo.dwPOV);

            if (v >= 0)
            {
                float alfa   = (float)(v / 100 * Math.PI / 180.0);
                float mi_pan = pan + (float)(Math.Sin(alfa) * singleton.pantilt_speed / 10.0); // dt=10hz
                if (mi_pan > 1)
                {
                    pan = 1;
                }
                else if (mi_pan < -1)
                {
                    pan = -1;
                }
                else
                {
                    pan = mi_pan;
                }
                float mi_tilt = tilt + (float)(Math.Cos(alfa) * singleton.pantilt_speed / 10.0);
                if (mi_tilt > 1)
                {
                    tilt = 1;
                }
                else if (mi_tilt < -1)
                {
                    tilt = -1;
                }
                else
                {
                    tilt = mi_tilt;
                }
            }

            // Analiza Ejes del joystick
            float _pitch = AdjustaValor(2 * (joyinfo.dwYpos / 65535.0f) - 1, TrimEle);
            float _roll  = AdjustaValor(2 * (joyinfo.dwXpos / 65535.0f) - 1, TrimAil);
            float _yaw   = AdjustaValor(2 * (joyinfo.dwRpos / 65535.0f) - 1, TrimTail);
            float _thr   = 1 - 2 * (joyinfo.dwZpos / 65535.0f);

            SetControles(_roll, _pitch, _thr, _yaw, pan, tilt, flaps);
            //wfly.SetServos(pan, _pitch, _thr, tilt);

            //           System.Console.WriteLine("PITCH " + _pitch + " ROLL " + _roll + " THR " + _thr + " TAIL " + _yaw);
            // System.Console.WriteLine("Auto " + modem_autopilot + " HUD " + modem_hud +
            //     " RUTA " + modem_rutacasa + " CAM " + modem_cam + " PAN " + pan + " TILT " + tilt);
        }