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"); } }
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(); } }
private void GenerateCode(CodeGeneratorContext context) { JoyInfo.GenerateSTMCode(__prg); foreach (var panel in Panels) { panel.Generate(context, __prg); } }
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>(); }
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"); } }
public static extern JoystickError joyGetPos(int uJoyID, ref JoyInfo pji);
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 = 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; } }
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); } }