Beispiel #1
0
        private void GenerateJoystickFiles(CodeGeneratorContext context)
        {
            using (TextWriter
                   __H = File.CreateText(context.Settings.OutputPath + "\\Joystick.h"),
                   __CPP = File.CreateText(context.Settings.OutputPath + "\\Joystick.cpp"))
            {
                __H.WriteLine("#ifndef _JOYSTICK_H_");
                __H.WriteLine("#define _JOYSTICK_H_");
                __H.WriteLine();
                __H.WriteLine("#define RPT_JOY_LEN {0}", JoyInfo.Bytes());
                __H.WriteLine();

                __H.WriteLine("#include <inttypes.h>");
                __H.WriteLine("#include \"functions.h\"");
                __H.WriteLine("#include \"Config.h\" ");
                __H.WriteLine("#include \"Def.h\" ");

                __CPP.WriteLine("#include \"Joystick.h\" ");
                __CPP.WriteLine("#include \"Config.h\" ");
                __CPP.WriteLine("#include \"Def.h\" ");
                __CPP.WriteLine();
                __CPP.WriteLine("JoyData JoyInput;");
                __CPP.WriteLine();

                JoyInfo.GenerateJoyFile(__H, __CPP);

                foreach (var panel in Panels)
                {
                    panel.GenerateJoyFile(context, __H, __CPP);
                }

                __H.WriteLine("#endif");
            }
        }
Beispiel #2
0
        private void generateProjectToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (JoyInfo == null)
            {
                ShowError("Joystick infromation is absent!", "Check error");
                return;
            }

            toolStripCompileLabel.Text = "Generating ...";

            if (!ExecuteStep(() => JoyInfo.Check()))
            {
                return;
            }

            if (string.IsNullOrEmpty(Settings.OutputPath))
            {
                ShowError("Output path is not set");
                return;
            }

            var gen = new CodeGenerator(__Settings, __JoyInfo, Panels.ToArray(), ExecuteStep);

            if (gen.GenerateProject())
            {
                toolStripCompileLabel.Text = "Generation successed";
                SetChangedState();
            }
        }
Beispiel #3
0
        private void GenerateCode(CodeGeneratorContext context)
        {
            JoyInfo.GenerateSTMCode(__prg);

            foreach (var panel in Panels)
            {
                panel.Generate(context, __prg);
            }
        }
Beispiel #4
0
        private void generateAndUploadToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Panels.Count(pnl => !pnl.GetModel().IsMenu) > 0)
            {
                if (JoyInfo == null)
                {
                    ShowError("Joystick infromation is absent!", "Check error");
                    return;
                }

                toolStripCompileLabel.Text = "Generating ...";

                if (!ExecuteStep(() => JoyInfo.Check()))
                {
                    return;
                }

                if (string.IsNullOrEmpty(Settings.OutputPath))
                {
                    ShowError("Output path is not set");
                    return;
                }

                var gen = new CodeGenerator(__Settings, __JoyInfo, Panels.ToArray(), ExecuteStep);

                if (!gen.GenerateProject())
                {
                    return;
                }


                toolStripCompileLabel.Text = "Generation successed";
                SetChangedState();

                var fUpload = new FlashBoardDialog();
                fUpload.ProgramCode = gen.ByteCode;

                fUpload.ShowDialog(this);
            }
            else
            {
                var fUpload = new FlashBoardDialog();
                fUpload.ProgramCode = null;
                fUpload.ShowDialog(this);
            }
        }
        }                                           //The active joysticks

        /**
         * desc here
         *
         * @param paramsdeschere
         *
         * @return returndeschere
         */
        public InputComponent(MirrorEngine theEngine)
            : base(theEngine)
        {
            // Set up joysticks
            Sdl.SDL_InitSubSystem(Sdl.SDL_INIT_JOYSTICK);

            // Open all joysticks
            joys = new JoyInfo[Sdl.SDL_NumJoysticks()];
            for (int i = 0; i < joys.Length; i++)
            {
                joys[i] = new JoyInfo(Sdl.SDL_JoystickOpen(i));
            }

            // Enable joystick events
            Sdl.SDL_JoystickEventState(Sdl.SDL_ENABLE);

            bindings        = new Dictionary <Tuple <Type, object>, InputBinding[]>();
            currentContexts = new Dictionary <Type, object>();
        }
Beispiel #6
0
        private void GenerateDataMapFiles(CodeGeneratorContext context)
        {
            using (TextWriter
                   __H = File.CreateText(context.Settings.OutputPath + "\\DataMap.h"),
                   __CPP = File.CreateText(context.Settings.OutputPath + "\\DataMap.cpp"))
            {
                __H.WriteLine("#ifndef _DATAMAP_H_");
                __H.WriteLine("#define _DATAMAP_H_");
                __H.WriteLine();
                __H.WriteLine("#include <arduino.h> ");
                __H.WriteLine("#include <EEPROM.h> ");
                __H.WriteLine("#include \"Config.h\" ");
                __H.WriteLine("#include \"LCD.h\" ");
                __H.WriteLine("#include \"Def.h\" ");
                __H.WriteLine("#include \"Joystick.h\" ");
                __H.WriteLine("#include \"XBeeWriter.h\"");
                __H.WriteLine("#include \"ppmGen.h\" ");
                __H.WriteLine("#include \"SerialCommander.h\" ");
                __H.WriteLine();
                __H.WriteLine("extern uint16_t ppm_data[];");
                __H.WriteLine("extern axis_t CalcData[];");


                __CPP.WriteLine("#include \"DataMap.h\" ");
                __CPP.WriteLine();

                JoyInfo.GenerateDataMap(__H, __CPP);
                Settings.GenerateDataMap(__H, __CPP);

                foreach (var panel in Panels)
                {
                    panel.GenerateDataMap(context, __H, __CPP);
                }

                __CPP.WriteLine("uint16_t ppm_data[PPM_CHANNELS];");
                __CPP.WriteLine("axis_t CalcData[DATA_LENGTH];");
                __CPP.WriteLine();
                __CPP.WriteLine("void InitData()");
                __CPP.WriteLine("{");

                foreach (var panel in Panels)
                {
                    panel.GenerateInit(context, __CPP);
                }

                __CPP.WriteLine("}");
                __CPP.WriteLine();



                __CPP.WriteLine("void Calculate()");
                __CPP.WriteLine("{");
                __CPP.WriteLine("axis_t p0, p1, p2;");

                Settings.GeneratePreCalculator(__CPP);
                JoyInfo.GenerateCalculator(__CPP);

                foreach (var panel in Panels)
                {
                    panel.GeneratePreCalculator(context, __CPP);
                }

                foreach (var panel in Panels)
                {
                    panel.GenerateCalculator(context, __CPP);
                }

                Settings.GeneratePostCalculator(__CPP);

                __CPP.WriteLine("}");

                __H.WriteLine("extern void InitData();");
                __H.WriteLine("extern void Calculate();");

                __H.WriteLine("#endif");
            }
        }
Beispiel #7
0
 public static extern JoystickError joyGetPos(int uJoyID, ref JoyInfo pji);
Beispiel #8
0
        public JoystickState GetState(int player_index)
        {
            lock (sync)
            {
                JoystickState state = new JoystickState();

                if (IsValid(player_index))
                {
                    int device_index = player_to_index[player_index];
                    int index        = index_to_stick[device_index];
                    JoystickDevice <WinMMJoyDetails> stick =
                        sticks[index] as JoystickDevice <WinMMJoyDetails>;

                    // For joysticks with fewer than three axes or four buttons, we must
                    // use joyGetPos; otherwise, joyGetPosEx. This is not just a cosmetic
                    // difference, simple devices will return incorrect results if we use
                    // joyGetPosEx on them.
                    if (stick.Details.Capabilities.AxisCount <= 3 || stick.Details.Capabilities.ButtonCount <= 4)
                    {
                        // Use joyGetPos
                        JoyInfo info = new JoyInfo();

                        JoystickError result = UnsafeNativeMethods.joyGetPos(device_index, ref info);
                        if (result == JoystickError.NoError)
                        {
                            for (int i = 0; i < stick.Details.Capabilities.AxisCount; i++)
                            {
                                state.SetAxis(JoystickAxis.Axis0 + i, CalculateOffset(info.GetAxis(i), stick.Details.Min[i], stick.Details.Max[i]));
                            }

                            for (int i = 0; i < stick.Details.Capabilities.ButtonCount; i++)
                            {
                                state.SetButton(JoystickButton.Button0 + i, (info.Buttons & 1 << i) != 0);
                            }

                            state.SetIsConnected(true);
                        }
                        else if (result == JoystickError.Unplugged)
                        {
                            UnplugJoystick(player_index);
                        }
                    }
                    else
                    {
                        // Use joyGetPosEx
                        JoyInfoEx info = new JoyInfoEx();
                        info.Size  = JoyInfoEx.SizeInBytes;
                        info.Flags = JoystickFlags.All;

                        JoystickError result = UnsafeNativeMethods.joyGetPosEx(device_index, ref info);
                        if (result == JoystickError.NoError)
                        {
                            for (int i = 0; i < stick.Details.Capabilities.AxisCount; i++)
                            {
                                state.SetAxis(JoystickAxis.Axis0 + i, CalculateOffset(info.GetAxis(i), stick.Details.Min[i], stick.Details.Max[i]));
                            }

                            for (int i = 0; i < stick.Details.Capabilities.ButtonCount; i++)
                            {
                                state.SetButton(JoystickButton.Button0 + i, (info.Buttons & 1 << i) != 0);
                            }

                            state.SetIsConnected(true);
                        }
                        else if (result == JoystickError.Unplugged)
                        {
                            UnplugJoystick(player_index);
                        }
                    }
                }

                return(state);
            }
        }
Beispiel #9
0
 public static extern JoystickError joyGetPos(int uJoyID, ref JoyInfo pji);
Beispiel #10
0
        public JoystickState GetState(int player_index)
        {
            lock (sync)
            {
                JoystickState state = new JoystickState();

                if (IsValid(player_index))
                {
                    int device_index = player_to_index[player_index];
                    int index = index_to_stick[device_index];
                    JoystickDevice<WinMMJoyDetails> stick =
                        sticks[index] as JoystickDevice<WinMMJoyDetails>;

                    // For joysticks with fewer than three axes or four buttons, we must
                    // use joyGetPos; otherwise, joyGetPosEx. This is not just a cosmetic
                    // difference, simple devices will return incorrect results if we use
                    // joyGetPosEx on them.
                    if (stick.Details.Capabilities.AxisCount <= 3 || stick.Details.Capabilities.ButtonCount <= 4)
                    {
                        // Use joyGetPos
                        JoyInfo info = new JoyInfo();

                        JoystickError result = UnsafeNativeMethods.joyGetPos(device_index, ref info);
                        if (result == JoystickError.NoError)
                        {
                            for (int i = 0; i < stick.Details.Capabilities.AxisCount; i++)
                            {
                                state.SetAxis(JoystickAxis.Axis0 + i, CalculateOffset(info.GetAxis(i), stick.Details.Min[i], stick.Details.Max[i]));
                            }

                            for (int i = 0; i < stick.Details.Capabilities.ButtonCount; i++)
                            {
                                state.SetButton(JoystickButton.Button0 + i, (info.Buttons & 1 << i) != 0);
                            }

                            state.SetIsConnected(true);
                        }
                        else if (result == JoystickError.Unplugged)
                        {
                            UnplugJoystick(player_index);
                        }
                    }
                    else
                    {
                        // Use joyGetPosEx
                        JoyInfoEx info = new JoyInfoEx();
                        info.Size = JoyInfoEx.SizeInBytes;
                        info.Flags = JoystickFlags.All;

                        JoystickError result = UnsafeNativeMethods.joyGetPosEx(device_index, ref info);
                        if (result == JoystickError.NoError)
                        {
                            for (int i = 0; i < stick.Details.Capabilities.AxisCount; i++)
                            {
                                state.SetAxis(JoystickAxis.Axis0 + i, CalculateOffset(info.GetAxis(i), stick.Details.Min[i], stick.Details.Max[i]));
                            }

                            for (int i = 0; i < stick.Details.Capabilities.ButtonCount; i++)
                            {
                                state.SetButton(JoystickButton.Button0 + i, (info.Buttons & 1 << i) != 0);
                            }

                            state.SetIsConnected(true);
                        }
                        else if (result == JoystickError.Unplugged)
                        {
                            UnplugJoystick(player_index);
                        }
                    }
                }

                return state;
            }
        }
        public JoystickState GetState(int player_index)
        {
            lock (sync)
            {
                JoystickState state = new JoystickState();

                if (IsValid(player_index))
                {
                    int device_index = player_to_index[player_index];
                    int index = index_to_stick[device_index];
                    JoystickDevice<WinMMJoyDetails> stick =
                        sticks[index] as JoystickDevice<WinMMJoyDetails>;

                    // For joysticks with fewer than three axes or four buttons, we must
                    // use joyGetPos; otherwise, joyGetPosEx. This is not just a cosmetic
                    // difference, simple devices will return incorrect results if we use
                    // joyGetPosEx on them.
                    if (stick.Details.Capabilities.AxisCount <= 3 || stick.Details.Capabilities.ButtonCount <= 4)
                    {
                        // Use joyGetPos
                        JoyInfo info = new JoyInfo();

                        JoystickError result = UnsafeNativeMethods.joyGetPos(device_index, ref info);
                        if (result == JoystickError.NoError)
                        {
                            for (int i = 0; i < stick.Details.Capabilities.AxisCount; i++)
                            {
                                state.SetAxis(JoystickAxis.Axis0 + i, CalculateOffset(info.GetAxis(i), stick.Details.Min[i], stick.Details.Max[i]));
                            }

                            for (int i = 0; i < stick.Details.Capabilities.ButtonCount; i++)
                            {
                                state.SetButton(JoystickButton.Button0 + i, (info.Buttons & 1 << i) != 0);
                            }

                            state.SetIsConnected(true);
                        }
                        else if (result == JoystickError.Unplugged)
                        {
                            UnplugJoystick(player_index);
                        }
                    }
                    else
                    {
                        // Use joyGetPosEx
                        JoyInfoEx info_ex = new JoyInfoEx();
                        info_ex.Size = JoyInfoEx.SizeInBytes;
                        info_ex.Flags = JoystickFlags.All;

                        JoystickError result = UnsafeNativeMethods.joyGetPosEx(device_index, ref info_ex);
                        if (result == JoystickError.NoError)
                        {
                            for (int i = 0; i < stick.Details.Capabilities.AxisCount; i++)
                            {
                                state.SetAxis(JoystickAxis.Axis0 + i, CalculateOffset(info_ex.GetAxis(i), stick.Details.Min[i], stick.Details.Max[i]));
                            }

                            for (int i = 0; i < stick.Details.Capabilities.ButtonCount; i++)
                            {
                                state.SetButton(JoystickButton.Button0 + i, (info_ex.Buttons & 1 << i) != 0);
                            }

                            for (int i = 0; i < stick.Details.Capabilities.HatCount; i++)
                            {
                                // A discrete POV returns specific values for left, right, etc.
                                // A continuous POV returns an integer indicating an angle in degrees * 100, e.g. 18000 == 180.00 degrees.
                                // The vast majority of joysticks have discrete POVs, so we'll treat all of them as discrete for simplicity.
                                if ((JoystickPovPosition)info_ex.Pov != JoystickPovPosition.Centered)
                                {
                                    HatPosition hatpos = HatPosition.Centered;
                                    if (info_ex.Pov < 4500 || info_ex.Pov >= 31500)
                                        hatpos |= HatPosition.Up;
                                    if (info_ex.Pov >= 4500 && info_ex.Pov < 13500)
                                        hatpos |= HatPosition.Right;
                                    if (info_ex.Pov >= 13500 && info_ex.Pov < 22500)
                                        hatpos |= HatPosition.Down;
                                    if (info_ex.Pov >= 22500 && info_ex.Pov < 31500)
                                        hatpos |= HatPosition.Left;

                                    state.SetHat(JoystickHat.Hat0 + i, new JoystickHatState(hatpos));
                                }
                            }

                            state.SetIsConnected(true);
                        }
                        else if (result == JoystickError.Unplugged)
                        {
                            UnplugJoystick(player_index);
                        }
                    }
                }

                return state;
            }
        }
Beispiel #12
0
        public JoystickState GetState(int player_index)
        {
            lock (sync)
            {
                JoystickState state = new JoystickState();

                if (IsValid(player_index))
                {
                    int device_index = player_to_index[player_index];
                    int index        = index_to_stick[device_index];
                    JoystickDevice <WinMMJoyDetails> stick =
                        sticks[index] as JoystickDevice <WinMMJoyDetails>;

                    // For joysticks with fewer than three axes or four buttons, we must
                    // use joyGetPos; otherwise, joyGetPosEx. This is not just a cosmetic
                    // difference, simple devices will return incorrect results if we use
                    // joyGetPosEx on them.
                    if (stick.Details.Capabilities.AxisCount <= 3 || stick.Details.Capabilities.ButtonCount <= 4)
                    {
                        // Use joyGetPos
                        JoyInfo info = new JoyInfo();

                        JoystickError result = UnsafeNativeMethods.joyGetPos(device_index, ref info);
                        if (result == JoystickError.NoError)
                        {
                            for (int i = 0; i < stick.Details.Capabilities.AxisCount; i++)
                            {
                                state.SetAxis(JoystickAxis.Axis0 + i, CalculateOffset(info.GetAxis(i), stick.Details.Min[i], stick.Details.Max[i]));
                            }

                            for (int i = 0; i < stick.Details.Capabilities.ButtonCount; i++)
                            {
                                state.SetButton(JoystickButton.Button0 + i, (info.Buttons & 1 << i) != 0);
                            }

                            state.SetIsConnected(true);
                        }
                        else if (result == JoystickError.Unplugged)
                        {
                            UnplugJoystick(player_index);
                        }
                    }
                    else
                    {
                        // Use joyGetPosEx
                        JoyInfoEx info_ex = new JoyInfoEx();
                        info_ex.Size  = JoyInfoEx.SizeInBytes;
                        info_ex.Flags = JoystickFlags.All;

                        JoystickError result = UnsafeNativeMethods.joyGetPosEx(device_index, ref info_ex);
                        if (result == JoystickError.NoError)
                        {
                            for (int i = 0; i < stick.Details.Capabilities.AxisCount; i++)
                            {
                                state.SetAxis(JoystickAxis.Axis0 + i, CalculateOffset(info_ex.GetAxis(i), stick.Details.Min[i], stick.Details.Max[i]));
                            }

                            for (int i = 0; i < stick.Details.Capabilities.ButtonCount; i++)
                            {
                                state.SetButton(JoystickButton.Button0 + i, (info_ex.Buttons & 1 << i) != 0);
                            }

                            for (int i = 0; i < stick.Details.Capabilities.HatCount; i++)
                            {
                                // A discrete POV returns specific values for left, right, etc.
                                // A continuous POV returns an integer indicating an angle in degrees * 100, e.g. 18000 == 180.00 degrees.
                                // The vast majority of joysticks have discrete POVs, so we'll treat all of them as discrete for simplicity.
                                if ((JoystickPovPosition)info_ex.Pov != JoystickPovPosition.Centered)
                                {
                                    HatPosition hatpos = HatPosition.Centered;
                                    if (info_ex.Pov < 4500 || info_ex.Pov >= 31500)
                                    {
                                        hatpos |= HatPosition.Up;
                                    }
                                    if (info_ex.Pov >= 4500 && info_ex.Pov < 13500)
                                    {
                                        hatpos |= HatPosition.Right;
                                    }
                                    if (info_ex.Pov >= 13500 && info_ex.Pov < 22500)
                                    {
                                        hatpos |= HatPosition.Down;
                                    }
                                    if (info_ex.Pov >= 22500 && info_ex.Pov < 31500)
                                    {
                                        hatpos |= HatPosition.Left;
                                    }

                                    state.SetHat(JoystickHat.Hat0 + i, new JoystickHatState(hatpos));
                                }
                            }

                            state.SetIsConnected(true);
                        }
                        else if (result == JoystickError.Unplugged)
                        {
                            UnplugJoystick(player_index);
                        }
                    }
                }

                return(state);
            }
        }