From 96c9c0041f0d6c2771cc2b2e0ac38b934616a061 Mon Sep 17 00:00:00 2001 From: Michael Oborne <mich146@hotmail.com> Date: Fri, 6 Apr 2012 08:50:04 +0800 Subject: [PATCH] APM Planner 1.1.61 update message definitions fix radio screen --- .../ArdupilotMegaPlanner/ArdupilotMega.csproj | 9 + Tools/ArdupilotMegaPlanner/Common.cs | 10 +- .../Controls/BackstageView/BackstageView.cs | 12 +- Tools/ArdupilotMegaPlanner/CurrentState.cs | 42 +- ...ConfigAccelerometerCalibration.Designer.cs | 134 + .../ConfigAccelerometerCalibration.cs | 24 + .../ConfigAccelerometerCalibration.resx | 120 + .../ConfigArducopter.Designer.cs | 1247 ++++++ .../ConfigurationView/ConfigArducopter.cs | 19 + .../ConfigurationView/ConfigArducopter.resx | 120 + .../ConfigArduplane.Designer.cs | 1270 +++++++ .../ConfigurationView/ConfigArduplane.cs | 19 + .../ConfigurationView/ConfigArduplane.resx | 120 + .../ConfigBatteryMonitoring.Designer.cs | 300 ++ .../ConfigBatteryMonitoring.cs | 19 + .../ConfigBatteryMonitoring.resx | 126 + .../ConfigFlightModes.Designer.cs | 450 +++ .../ConfigurationView/ConfigFlightModes.cs | 215 ++ .../ConfigurationView/ConfigFlightModes.resx | 126 + .../ConfigHardwareOptions.Designer.cs | 248 ++ .../ConfigHardwareOptions.cs | 49 + .../ConfigHardwareOptions.resx | 120 + .../ConfigPlanner.Designer.cs | 677 ++++ .../ConfigurationView/ConfigPlanner.cs | 372 ++ .../ConfigurationView/ConfigPlanner.resx | 120 + .../ConfigRadioInput.Designer.cs | 366 ++ .../ConfigurationView/ConfigRadioInput.cs | 357 ++ .../ConfigurationView/ConfigRadioInput.resx | 123 + .../ConfigRawParams.Designer.cs | 205 + .../ConfigurationView/ConfigRawParams.cs | 287 ++ .../ConfigurationView/ConfigRawParams.resx | 132 + .../ConfigTradHeli.Designer.cs | 857 +++++ .../ConfigurationView/ConfigTradHeli.cs | 21 + .../ConfigurationView/ConfigTradHeli.resx | 120 + .../Configuration.Designer.cs | 59 + .../ConfigurationView/Configuration.cs | 31 + .../ConfigurationView/Configuration.resx | 197 + .../ConfigurationView/Setup.Designer.cs | 59 + .../GCSViews/ConfigurationView/Setup.cs | 27 + .../GCSViews/ConfigurationView/Setup.resx | 197 + .../GCSViews/FlightData.cs | 3 +- .../GCSViews/Simulation.cs | 22 +- Tools/ArdupilotMegaPlanner/HIL/QuadCopter.cs | 10 +- Tools/ArdupilotMegaPlanner/JoystickSetup.cs | 2 +- Tools/ArdupilotMegaPlanner/MAVLink.cs | 98 +- Tools/ArdupilotMegaPlanner/MAVLinkTypes.cs | 3361 ++++++++++------- Tools/ArdupilotMegaPlanner/MAVLinkTypes0.9.cs | 2912 ++++++++------ Tools/ArdupilotMegaPlanner/MagCalib.cs | 38 +- Tools/ArdupilotMegaPlanner/MainV2.cs | 12 +- Tools/ArdupilotMegaPlanner/MavlinkLog.cs | 22 +- Tools/ArdupilotMegaPlanner/Msi/installer.wxs | 168 +- Tools/ArdupilotMegaPlanner/Msi/wix.pdb | Bin 13824 -> 19968 bytes .../Properties/AssemblyInfo.cs | 2 +- .../Radio/3DRradio.Designer.cs | 41 +- Tools/ArdupilotMegaPlanner/Radio/3DRradio.cs | 10 +- .../ArdupilotMegaPlanner/Radio/3DRradio.resx | 3 - Tools/ArdupilotMegaPlanner/Script.cs | 2 +- Tools/ArdupilotMegaPlanner/Setup/Setup.resx | 2613 +++---------- .../bin/Release/ArdupilotMegaPlanner.pdb | Bin 1156608 -> 1172992 bytes .../bin/Release/aircraft/Rascal/Rascal.xml | 2 +- Tools/ArdupilotMegaPlanner/wix/Program.cs | 55 +- .../wix/Properties/Resources.Designer.cs | 63 + .../wix/Properties/Resources.resx | 101 + .../wix/Properties/Settings.Designer.cs | 26 + .../wix/Properties/Settings.settings | 6 + .../wix/Properties/app.manifest | 47 + Tools/ArdupilotMegaPlanner/wix/wix.csproj | 33 +- 67 files changed, 13676 insertions(+), 4982 deletions(-) create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.resx create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.resx create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.resx create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.resx create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.resx create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.resx create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.resx create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.resx create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.resx create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.resx create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.resx create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.cs create mode 100644 Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.resx create mode 100644 Tools/ArdupilotMegaPlanner/wix/Properties/Resources.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/wix/Properties/Resources.resx create mode 100644 Tools/ArdupilotMegaPlanner/wix/Properties/Settings.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/wix/Properties/Settings.settings create mode 100644 Tools/ArdupilotMegaPlanner/wix/Properties/app.manifest diff --git a/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj b/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj index 3f859b180..f8c6bbcc0 100644 --- a/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj +++ b/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj @@ -308,6 +308,12 @@ <Compile Include="GCSViews\ConfigurationView\ConfigRawParams.Designer.cs"> <DependentUpon>ConfigRawParams.cs</DependentUpon> </Compile> + <Compile Include="GCSViews\ConfigurationView\Setup.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Include="GCSViews\ConfigurationView\Setup.Designer.cs"> + <DependentUpon>Setup.cs</DependentUpon> + </Compile> <Compile Include="MagCalib.cs" /> <Compile Include="PIDTunning.cs" /> <Compile Include="Radio\3DRradio.cs"> @@ -569,6 +575,9 @@ <EmbeddedResource Include="GCSViews\ConfigurationView\Configuration.resx"> <DependentUpon>Configuration.cs</DependentUpon> </EmbeddedResource> + <EmbeddedResource Include="GCSViews\ConfigurationView\Setup.resx"> + <DependentUpon>Setup.cs</DependentUpon> + </EmbeddedResource> <EmbeddedResource Include="Radio\3DRradio.resx"> <DependentUpon>3DRradio.cs</DependentUpon> </EmbeddedResource> diff --git a/Tools/ArdupilotMegaPlanner/Common.cs b/Tools/ArdupilotMegaPlanner/Common.cs index 03e53b26b..2840e9b7c 100644 --- a/Tools/ArdupilotMegaPlanner/Common.cs +++ b/Tools/ArdupilotMegaPlanner/Common.cs @@ -429,9 +429,9 @@ namespace ArdupilotMega #if MAVLINK10 - public static bool translateMode(string modein, ref MAVLink.__mavlink_set_mode_t mode) + public static bool translateMode(string modein, ref MAVLink.mavlink_set_mode_t mode) { - //MAVLink.__mavlink_set_mode_t mode = new MAVLink.__mavlink_set_mode_t(); + //MAVLink.mavlink_set_mode_t mode = new MAVLink.mavlink_set_mode_t(); mode.target_system = MainV2.comPort.sysid; try @@ -483,14 +483,14 @@ namespace ArdupilotMega } #else - public static bool translateMode(string modein, ref MAVLink.__mavlink_set_nav_mode_t navmode, ref MAVLink.__mavlink_set_mode_t mode) + public static bool translateMode(string modein, ref MAVLink.mavlink_set_nav_mode_t navmode, ref MAVLink.mavlink_set_mode_t mode) { - //MAVLink.__mavlink_set_nav_mode_t navmode = new MAVLink.__mavlink_set_nav_mode_t(); + //MAVLink.mavlink_set_nav_mode_t navmode = new MAVLink.mavlink_set_nav_mode_t(); navmode.target = MainV2.comPort.sysid; navmode.nav_mode = 255; - //MAVLink.__mavlink_set_mode_t mode = new MAVLink.__mavlink_set_mode_t(); + //MAVLink.mavlink_set_mode_t mode = new MAVLink.mavlink_set_mode_t(); mode.target = MainV2.comPort.sysid; try diff --git a/Tools/ArdupilotMegaPlanner/Controls/BackstageView/BackstageView.cs b/Tools/ArdupilotMegaPlanner/Controls/BackstageView/BackstageView.cs index 2970e499b..edde25fc4 100644 --- a/Tools/ArdupilotMegaPlanner/Controls/BackstageView/BackstageView.cs +++ b/Tools/ArdupilotMegaPlanner/Controls/BackstageView/BackstageView.cs @@ -21,6 +21,17 @@ namespace ArdupilotMega.Controls.BackstageView private BackstageViewPage _activePage; private const int ButtonSpacing = 30; private const int ButtonHeight = 30; + public BackstageViewPage SelectedPage { get { return _activePage; } } + + ~BackstageView() + { + foreach (BackstageViewPage ctl in _pages) + { + if (ctl.Page != null) + ctl.Page.Dispose(); + } + this.Dispose(); + } public BackstageView() { @@ -160,7 +171,6 @@ namespace ArdupilotMega.Controls.BackstageView _activePage = page; ActivatePage(page); - // Todo: set the link button to be selected looking } private void CreateLinkButton(BackstageViewPage page) diff --git a/Tools/ArdupilotMegaPlanner/CurrentState.cs b/Tools/ArdupilotMegaPlanner/CurrentState.cs index 420b4544b..e3e24d9bf 100644 --- a/Tools/ArdupilotMegaPlanner/CurrentState.cs +++ b/Tools/ArdupilotMegaPlanner/CurrentState.cs @@ -334,7 +334,7 @@ namespace ArdupilotMega if (bytearray != null) // hil { - var hil = bytearray.ByteArrayToStructure<MAVLink.__mavlink_rc_channels_scaled_t>(6); + var hil = bytearray.ByteArrayToStructure<MAVLink.mavlink_rc_channels_scaled_t>(6); hilch1 = hil.chan1_scaled; hilch2 = hil.chan2_scaled; @@ -352,7 +352,7 @@ namespace ArdupilotMega if (bytearray != null) { - var nav = bytearray.ByteArrayToStructure<MAVLink.__mavlink_nav_controller_output_t>(6); + var nav = bytearray.ByteArrayToStructure<MAVLink.mavlink_nav_controller_output_t>(6); nav_roll = nav.nav_roll; nav_pitch = nav.nav_pitch; @@ -371,7 +371,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_HEARTBEAT]; if (bytearray != null) { - var hb = bytearray.ByteArrayToStructure<MAVLink.__mavlink_heartbeat_t>(6); + var hb = bytearray.ByteArrayToStructure<MAVLink.mavlink_heartbeat_t>(6); string oldmode = mode; @@ -463,7 +463,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[ArdupilotMega.MAVLink.MAVLINK_MSG_ID_SYS_STATUS]; if (bytearray != null) { - var sysstatus = bytearray.ByteArrayToStructure<MAVLink.__mavlink_sys_status_t>(6); + var sysstatus = bytearray.ByteArrayToStructure<MAVLink.mavlink_sys_status_t>(6); battery_voltage = sysstatus.voltage_battery; battery_remaining = sysstatus.battery_remaining; @@ -478,7 +478,7 @@ namespace ArdupilotMega if (bytearray != null) { - var sysstatus = bytearray.ByteArrayToStructure<MAVLink.__mavlink_sys_status_t>(6); + var sysstatus = bytearray.ByteArrayToStructure<MAVLink.mavlink_sys_status_t>(6); armed = sysstatus.status; @@ -595,7 +595,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SCALED_PRESSURE]; if (bytearray != null) { - var pres = bytearray.ByteArrayToStructure<MAVLink.__mavlink_scaled_pressure_t>(6); + var pres = bytearray.ByteArrayToStructure<MAVLink.mavlink_scaled_pressure_t>(6); press_abs = pres.press_abs; press_temp = pres.temperature; } @@ -603,7 +603,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SENSOR_OFFSETS]; if (bytearray != null) { - var sensofs = bytearray.ByteArrayToStructure<MAVLink.__mavlink_sensor_offsets_t>(6); + var sensofs = bytearray.ByteArrayToStructure<MAVLink.mavlink_sensor_offsets_t>(6); mag_ofs_x = sensofs.mag_ofs_x; mag_ofs_y = sensofs.mag_ofs_y; @@ -627,7 +627,7 @@ namespace ArdupilotMega if (bytearray != null) { - var att = bytearray.ByteArrayToStructure<MAVLink.__mavlink_attitude_t>(6); + var att = bytearray.ByteArrayToStructure<MAVLink.mavlink_attitude_t>(6); roll = att.roll * rad2deg; pitch = att.pitch * rad2deg; @@ -641,7 +641,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GPS_RAW_INT]; if (bytearray != null) { - var gps = bytearray.ByteArrayToStructure<MAVLink.__mavlink_gps_raw_int_t>(6); + var gps = bytearray.ByteArrayToStructure<MAVLink.mavlink_gps_raw_int_t>(6); lat = gps.lat * 1.0e-7f; lng = gps.lon * 1.0e-7f; @@ -662,7 +662,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GPS_RAW]; if (bytearray != null) { - var gps = bytearray.ByteArrayToStructure<MAVLink.__mavlink_gps_raw_t>(6); + var gps = bytearray.ByteArrayToStructure<MAVLink.mavlink_gps_raw_t>(6); lat = gps.lat; lng = gps.lon; @@ -683,7 +683,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GPS_STATUS]; if (bytearray != null) { - var gps = bytearray.ByteArrayToStructure<MAVLink.__mavlink_gps_status_t>(6); + var gps = bytearray.ByteArrayToStructure<MAVLink.mavlink_gps_status_t>(6); satcount = gps.satellites_visible; } @@ -691,7 +691,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GLOBAL_POSITION_INT]; if (bytearray != null) { - var loc = bytearray.ByteArrayToStructure<MAVLink.__mavlink_global_position_int_t>(6); + var loc = bytearray.ByteArrayToStructure<MAVLink.mavlink_global_position_int_t>(6); //alt = loc.alt / 1000.0f; lat = loc.lat / 10000000.0f; @@ -701,7 +701,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_MISSION_CURRENT]; if (bytearray != null) { - var wpcur = bytearray.ByteArrayToStructure<MAVLink.__mavlink_mission_current_t>(6); + var wpcur = bytearray.ByteArrayToStructure<MAVLink.mavlink_mission_current_t>(6); int oldwp = (int)wpno; @@ -719,7 +719,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_GLOBAL_POSITION]; if (bytearray != null) { - var loc = bytearray.ByteArrayToStructure<MAVLink.__mavlink_global_position_t>(6); + var loc = bytearray.ByteArrayToStructure<MAVLink.mavlink_global_position_t>(6); alt = loc.alt; lat = loc.lat; lng = loc.lon; @@ -728,7 +728,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_WAYPOINT_CURRENT]; if (bytearray != null) { - var wpcur = bytearray.ByteArrayToStructure<MAVLink.__mavlink_waypoint_current_t>(6); + var wpcur = bytearray.ByteArrayToStructure<MAVLink.mavlink_waypoint_current_t>(6); int oldwp = (int)wpno; @@ -746,7 +746,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_RC_CHANNELS_RAW]; if (bytearray != null) { - var rcin = bytearray.ByteArrayToStructure<MAVLink.__mavlink_rc_channels_raw_t>(6); + var rcin = bytearray.ByteArrayToStructure<MAVLink.mavlink_rc_channels_raw_t>(6); ch1in = rcin.chan1_raw; ch2in = rcin.chan2_raw; @@ -763,7 +763,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SERVO_OUTPUT_RAW]; if (bytearray != null) { - var servoout = bytearray.ByteArrayToStructure<MAVLink.__mavlink_servo_output_raw_t>(6); + var servoout = bytearray.ByteArrayToStructure<MAVLink.mavlink_servo_output_raw_t>(6); ch1out = servoout.servo1_raw; ch2out = servoout.servo2_raw; @@ -781,7 +781,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_RAW_IMU]; if (bytearray != null) { - var imu = bytearray.ByteArrayToStructure<MAVLink.__mavlink_raw_imu_t>(6); + var imu = bytearray.ByteArrayToStructure<MAVLink.mavlink_raw_imu_t>(6); gx = imu.xgyro; gy = imu.ygyro; @@ -801,7 +801,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_SCALED_IMU]; if (bytearray != null) { - var imu = bytearray.ByteArrayToStructure<MAVLink.__mavlink_scaled_imu_t>(6); + var imu = bytearray.ByteArrayToStructure<MAVLink.mavlink_scaled_imu_t>(6); gx = imu.xgyro; gy = imu.ygyro; @@ -818,7 +818,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_VFR_HUD]; if (bytearray != null) { - var vfr = bytearray.ByteArrayToStructure<MAVLink.__mavlink_vfr_hud_t>(6); + var vfr = bytearray.ByteArrayToStructure<MAVLink.mavlink_vfr_hud_t>(6); groundspeed = vfr.groundspeed; airspeed = vfr.airspeed; @@ -843,7 +843,7 @@ namespace ArdupilotMega bytearray = mavinterface.packets[MAVLink.MAVLINK_MSG_ID_MEMINFO]; if (bytearray != null) { - var mem = bytearray.ByteArrayToStructure<MAVLink.__mavlink_meminfo_t>(6); + var mem = bytearray.ByteArrayToStructure<MAVLink.mavlink_meminfo_t>(6); freemem = mem.freemem; brklevel = mem.brkval; } diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.Designer.cs new file mode 100644 index 000000000..24df58eb8 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.Designer.cs @@ -0,0 +1,134 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigAccelerometerCalibration + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.label28 = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.pictureBoxQuadX = new System.Windows.Forms.PictureBox(); + this.pictureBoxQuad = new System.Windows.Forms.PictureBox(); + this.BUT_levelac2 = new ArdupilotMega.MyButton(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxQuadX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxQuad)).BeginInit(); + this.SuspendLayout(); + // + // label28 + // + this.label28.AutoSize = true; + this.label28.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label28.Location = new System.Drawing.Point(124, 13); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(210, 13); + this.label28.TabIndex = 15; + this.label28.Text = "Level your quad to set default accel offsets"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label16.Location = new System.Drawing.Point(124, 308); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(192, 26); + this.label16.TabIndex = 13; + this.label16.Text = "NOTE: images are for presentation only\r\nwill work with hexa\'s etc"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label15.Location = new System.Drawing.Point(167, 99); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(102, 13); + this.label15.TabIndex = 12; + this.label15.Text = "Frame Setup (+ or x)"; + // + // pictureBoxQuadX + // + this.pictureBoxQuadX.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxQuadX.Image = global::ArdupilotMega.Properties.Resources.quadx; + this.pictureBoxQuadX.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.pictureBoxQuadX.Location = new System.Drawing.Point(226, 115); + this.pictureBoxQuadX.Name = "pictureBoxQuadX"; + this.pictureBoxQuadX.Size = new System.Drawing.Size(190, 190); + this.pictureBoxQuadX.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBoxQuadX.TabIndex = 11; + this.pictureBoxQuadX.TabStop = false; + this.pictureBoxQuadX.Click += new System.EventHandler(this.pictureBoxQuadX_Click); + // + // pictureBoxQuad + // + this.pictureBoxQuad.Cursor = System.Windows.Forms.Cursors.Hand; + this.pictureBoxQuad.Image = global::ArdupilotMega.Properties.Resources.quad; + this.pictureBoxQuad.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.pictureBoxQuad.Location = new System.Drawing.Point(19, 115); + this.pictureBoxQuad.Name = "pictureBoxQuad"; + this.pictureBoxQuad.Size = new System.Drawing.Size(190, 190); + this.pictureBoxQuad.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBoxQuad.TabIndex = 10; + this.pictureBoxQuad.TabStop = false; + // + // BUT_levelac2 + // + this.BUT_levelac2.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_levelac2.Location = new System.Drawing.Point(181, 42); + this.BUT_levelac2.Name = "BUT_levelac2"; + this.BUT_levelac2.Size = new System.Drawing.Size(75, 23); + this.BUT_levelac2.TabIndex = 14; + this.BUT_levelac2.Text = "Level"; + this.BUT_levelac2.UseVisualStyleBackColor = true; + // + // ConfigAccelerometerCalibration + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.label28); + this.Controls.Add(this.label16); + this.Controls.Add(this.label15); + this.Controls.Add(this.pictureBoxQuadX); + this.Controls.Add(this.pictureBoxQuad); + this.Controls.Add(this.BUT_levelac2); + this.Name = "ConfigAccelerometerCalibration"; + this.Size = new System.Drawing.Size(439, 356); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxQuadX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxQuad)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label28; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.PictureBox pictureBoxQuadX; + private System.Windows.Forms.PictureBox pictureBoxQuad; + private MyButton BUT_levelac2; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.cs new file mode 100644 index 000000000..fe4fe96bd --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class ConfigAccelerometerCalibration : UserControl + { + public ConfigAccelerometerCalibration() + { + InitializeComponent(); + } + + private void pictureBoxQuadX_Click(object sender, EventArgs e) + { + + } + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.resx new file mode 100644 index 000000000..7080a7d11 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.Designer.cs new file mode 100644 index 000000000..2bcd2ea55 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.Designer.cs @@ -0,0 +1,1247 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigArducopter + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.myLabel3 = new ArdupilotMega.MyLabel(); + this.TUNE_LOW = new System.Windows.Forms.NumericUpDown(); + this.TUNE_HIGH = new System.Windows.Forms.NumericUpDown(); + this.myLabel2 = new ArdupilotMega.MyLabel(); + this.TUNE = new System.Windows.Forms.ComboBox(); + this.myLabel1 = new ArdupilotMega.MyLabel(); + this.CH7_OPT = new System.Windows.Forms.ComboBox(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.THR_RATE_D = new System.Windows.Forms.NumericUpDown(); + this.label29 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.THR_RATE_IMAX = new System.Windows.Forms.NumericUpDown(); + this.THR_RATE_I = new System.Windows.Forms.NumericUpDown(); + this.label20 = new System.Windows.Forms.Label(); + this.THR_RATE_P = new System.Windows.Forms.NumericUpDown(); + this.label25 = new System.Windows.Forms.Label(); + this.CHK_lockrollpitch = new System.Windows.Forms.CheckBox(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.NAV_LAT_D = new System.Windows.Forms.NumericUpDown(); + this.label27 = new System.Windows.Forms.Label(); + this.WP_SPEED_MAX = new System.Windows.Forms.NumericUpDown(); + this.label9 = new System.Windows.Forms.Label(); + this.NAV_LAT_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label13 = new System.Windows.Forms.Label(); + this.NAV_LAT_I = new System.Windows.Forms.NumericUpDown(); + this.label15 = new System.Windows.Forms.Label(); + this.NAV_LAT_P = new System.Windows.Forms.NumericUpDown(); + this.label16 = new System.Windows.Forms.Label(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.XTRK_GAIN_SC1 = new System.Windows.Forms.NumericUpDown(); + this.label18 = new System.Windows.Forms.Label(); + this.groupBox7 = new System.Windows.Forms.GroupBox(); + this.THR_ALT_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label19 = new System.Windows.Forms.Label(); + this.THR_ALT_I = new System.Windows.Forms.NumericUpDown(); + this.label21 = new System.Windows.Forms.Label(); + this.THR_ALT_P = new System.Windows.Forms.NumericUpDown(); + this.label22 = new System.Windows.Forms.Label(); + this.groupBox19 = new System.Windows.Forms.GroupBox(); + this.HLD_LAT_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label28 = new System.Windows.Forms.Label(); + this.HLD_LAT_I = new System.Windows.Forms.NumericUpDown(); + this.label30 = new System.Windows.Forms.Label(); + this.HLD_LAT_P = new System.Windows.Forms.NumericUpDown(); + this.label31 = new System.Windows.Forms.Label(); + this.groupBox20 = new System.Windows.Forms.GroupBox(); + this.STB_YAW_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label32 = new System.Windows.Forms.Label(); + this.STB_YAW_I = new System.Windows.Forms.NumericUpDown(); + this.label34 = new System.Windows.Forms.Label(); + this.STB_YAW_P = new System.Windows.Forms.NumericUpDown(); + this.label35 = new System.Windows.Forms.Label(); + this.groupBox21 = new System.Windows.Forms.GroupBox(); + this.STAB_D = new System.Windows.Forms.NumericUpDown(); + this.lblSTAB_D = new System.Windows.Forms.Label(); + this.STB_PIT_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label36 = new System.Windows.Forms.Label(); + this.STB_PIT_I = new System.Windows.Forms.NumericUpDown(); + this.label41 = new System.Windows.Forms.Label(); + this.STB_PIT_P = new System.Windows.Forms.NumericUpDown(); + this.label42 = new System.Windows.Forms.Label(); + this.groupBox22 = new System.Windows.Forms.GroupBox(); + this.STB_RLL_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label43 = new System.Windows.Forms.Label(); + this.STB_RLL_I = new System.Windows.Forms.NumericUpDown(); + this.label45 = new System.Windows.Forms.Label(); + this.STB_RLL_P = new System.Windows.Forms.NumericUpDown(); + this.label46 = new System.Windows.Forms.Label(); + this.groupBox23 = new System.Windows.Forms.GroupBox(); + this.RATE_YAW_D = new System.Windows.Forms.NumericUpDown(); + this.label10 = new System.Windows.Forms.Label(); + this.RATE_YAW_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label47 = new System.Windows.Forms.Label(); + this.RATE_YAW_I = new System.Windows.Forms.NumericUpDown(); + this.label77 = new System.Windows.Forms.Label(); + this.RATE_YAW_P = new System.Windows.Forms.NumericUpDown(); + this.label82 = new System.Windows.Forms.Label(); + this.groupBox24 = new System.Windows.Forms.GroupBox(); + this.RATE_PIT_D = new System.Windows.Forms.NumericUpDown(); + this.label11 = new System.Windows.Forms.Label(); + this.RATE_PIT_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label84 = new System.Windows.Forms.Label(); + this.RATE_PIT_I = new System.Windows.Forms.NumericUpDown(); + this.label86 = new System.Windows.Forms.Label(); + this.RATE_PIT_P = new System.Windows.Forms.NumericUpDown(); + this.label87 = new System.Windows.Forms.Label(); + this.groupBox25 = new System.Windows.Forms.GroupBox(); + this.RATE_RLL_D = new System.Windows.Forms.NumericUpDown(); + this.label17 = new System.Windows.Forms.Label(); + this.RATE_RLL_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label88 = new System.Windows.Forms.Label(); + this.RATE_RLL_I = new System.Windows.Forms.NumericUpDown(); + this.label90 = new System.Windows.Forms.Label(); + this.RATE_RLL_P = new System.Windows.Forms.NumericUpDown(); + this.label91 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.TUNE_LOW)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.TUNE_HIGH)).BeginInit(); + this.groupBox5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.THR_RATE_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_RATE_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_RATE_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_RATE_P)).BeginInit(); + this.groupBox4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.NAV_LAT_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.WP_SPEED_MAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.NAV_LAT_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.NAV_LAT_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.NAV_LAT_P)).BeginInit(); + this.groupBox6.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.XTRK_GAIN_SC1)).BeginInit(); + this.groupBox7.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.THR_ALT_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_ALT_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_ALT_P)).BeginInit(); + this.groupBox19.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.HLD_LAT_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.HLD_LAT_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.HLD_LAT_P)).BeginInit(); + this.groupBox20.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.STB_YAW_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_YAW_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_YAW_P)).BeginInit(); + this.groupBox21.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.STAB_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_PIT_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_PIT_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_PIT_P)).BeginInit(); + this.groupBox22.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.STB_RLL_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_RLL_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_RLL_P)).BeginInit(); + this.groupBox23.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_YAW_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_YAW_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_YAW_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_YAW_P)).BeginInit(); + this.groupBox24.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_PIT_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_PIT_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_PIT_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_PIT_P)).BeginInit(); + this.groupBox25.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_RLL_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_RLL_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_RLL_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_RLL_P)).BeginInit(); + this.SuspendLayout(); + // + // myLabel3 + // + this.myLabel3.Location = new System.Drawing.Point(540, 302); + this.myLabel3.Name = "myLabel3"; + this.myLabel3.resize = false; + this.myLabel3.Size = new System.Drawing.Size(29, 23); + this.myLabel3.TabIndex = 42; + this.myLabel3.Text = "Min"; + // + // TUNE_LOW + // + this.TUNE_LOW.Location = new System.Drawing.Point(575, 305); + this.TUNE_LOW.Name = "TUNE_LOW"; + this.TUNE_LOW.Size = new System.Drawing.Size(51, 20); + this.TUNE_LOW.TabIndex = 41; + // + // TUNE_HIGH + // + this.TUNE_HIGH.Location = new System.Drawing.Point(665, 305); + this.TUNE_HIGH.Name = "TUNE_HIGH"; + this.TUNE_HIGH.Size = new System.Drawing.Size(46, 20); + this.TUNE_HIGH.TabIndex = 40; + // + // myLabel2 + // + this.myLabel2.Location = new System.Drawing.Point(540, 277); + this.myLabel2.Name = "myLabel2"; + this.myLabel2.resize = false; + this.myLabel2.Size = new System.Drawing.Size(53, 23); + this.myLabel2.TabIndex = 39; + this.myLabel2.Text = "Ch6 Opt"; + // + // TUNE + // + this.TUNE.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.TUNE.DropDownWidth = 150; + this.TUNE.FormattingEnabled = true; + this.TUNE.Items.AddRange(new object[] { + "CH6_NONE", + "CH6_STABILIZE_KP", + "CH6_STABILIZE_KI", + "CH6_YAW_KP", + "CH6_RATE_KP", + "CH6_RATE_KI", + "CH6_YAW_RATE_KP", + "CH6_THROTTLE_KP", + "CH6_TOP_BOTTOM_RATIO", + "CH6_RELAY", + "CH6_TRAVERSE_SPEED", + "CH6_NAV_P", + "CH6_LOITER_P", + "CH6_HELI_EXTERNAL_GYRO", + "CH6_THR_HOLD_KP", + "CH6_Z_GAIN", + "CH6_DAMP", + "CH6_OPTFLOW_KP", + "CH6_OPTFLOW_KI", + "CH6_OPTFLOW_KD", + "CH6_NAV_I", + "CH6_RATE_KD"}); + this.TUNE.Location = new System.Drawing.Point(599, 277); + this.TUNE.Name = "TUNE"; + this.TUNE.Size = new System.Drawing.Size(112, 21); + this.TUNE.TabIndex = 38; + // + // myLabel1 + // + this.myLabel1.Location = new System.Drawing.Point(540, 329); + this.myLabel1.Name = "myLabel1"; + this.myLabel1.resize = false; + this.myLabel1.Size = new System.Drawing.Size(53, 23); + this.myLabel1.TabIndex = 37; + this.myLabel1.Text = "Ch7 Opt"; + // + // CH7_OPT + // + this.CH7_OPT.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CH7_OPT.DropDownWidth = 150; + this.CH7_OPT.FormattingEnabled = true; + this.CH7_OPT.Items.AddRange(new object[] { + "Do Nothing", + "", + "", + "Simple Mode", + "RTL", + "", + "", + "Save WP"}); + this.CH7_OPT.Location = new System.Drawing.Point(599, 329); + this.CH7_OPT.Name = "CH7_OPT"; + this.CH7_OPT.Size = new System.Drawing.Size(112, 21); + this.CH7_OPT.TabIndex = 36; + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.THR_RATE_D); + this.groupBox5.Controls.Add(this.label29); + this.groupBox5.Controls.Add(this.label14); + this.groupBox5.Controls.Add(this.THR_RATE_IMAX); + this.groupBox5.Controls.Add(this.THR_RATE_I); + this.groupBox5.Controls.Add(this.label20); + this.groupBox5.Controls.Add(this.THR_RATE_P); + this.groupBox5.Controls.Add(this.label25); + this.groupBox5.Location = new System.Drawing.Point(12, 267); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(170, 110); + this.groupBox5.TabIndex = 35; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "Throttle Rate"; + // + // THR_RATE_D + // + this.THR_RATE_D.Location = new System.Drawing.Point(80, 60); + this.THR_RATE_D.Name = "THR_RATE_D"; + this.THR_RATE_D.Size = new System.Drawing.Size(78, 20); + this.THR_RATE_D.TabIndex = 14; + // + // label29 + // + this.label29.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label29.Location = new System.Drawing.Point(6, 63); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(10, 13); + this.label29.TabIndex = 15; + this.label29.Text = "D"; + // + // label14 + // + this.label14.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label14.Location = new System.Drawing.Point(6, 86); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(65, 13); + this.label14.TabIndex = 16; + this.label14.Text = "IMAX"; + // + // THR_RATE_IMAX + // + this.THR_RATE_IMAX.Location = new System.Drawing.Point(80, 83); + this.THR_RATE_IMAX.Name = "THR_RATE_IMAX"; + this.THR_RATE_IMAX.Size = new System.Drawing.Size(78, 20); + this.THR_RATE_IMAX.TabIndex = 11; + // + // THR_RATE_I + // + this.THR_RATE_I.Location = new System.Drawing.Point(80, 37); + this.THR_RATE_I.Name = "THR_RATE_I"; + this.THR_RATE_I.Size = new System.Drawing.Size(78, 20); + this.THR_RATE_I.TabIndex = 7; + // + // label20 + // + this.label20.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label20.Location = new System.Drawing.Point(6, 40); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(10, 13); + this.label20.TabIndex = 14; + this.label20.Text = "I"; + // + // THR_RATE_P + // + this.THR_RATE_P.Location = new System.Drawing.Point(80, 13); + this.THR_RATE_P.Name = "THR_RATE_P"; + this.THR_RATE_P.Size = new System.Drawing.Size(78, 20); + this.THR_RATE_P.TabIndex = 5; + // + // label25 + // + this.label25.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label25.Location = new System.Drawing.Point(6, 16); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(14, 13); + this.label25.TabIndex = 15; + this.label25.Text = "P"; + // + // CHK_lockrollpitch + // + this.CHK_lockrollpitch.AutoSize = true; + this.CHK_lockrollpitch.Checked = true; + this.CHK_lockrollpitch.CheckState = System.Windows.Forms.CheckState.Checked; + this.CHK_lockrollpitch.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_lockrollpitch.Location = new System.Drawing.Point(9, 247); + this.CHK_lockrollpitch.Name = "CHK_lockrollpitch"; + this.CHK_lockrollpitch.Size = new System.Drawing.Size(154, 17); + this.CHK_lockrollpitch.TabIndex = 34; + this.CHK_lockrollpitch.Text = "Lock Pitch and Roll Values"; + this.CHK_lockrollpitch.UseVisualStyleBackColor = true; + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.NAV_LAT_D); + this.groupBox4.Controls.Add(this.label27); + this.groupBox4.Controls.Add(this.WP_SPEED_MAX); + this.groupBox4.Controls.Add(this.label9); + this.groupBox4.Controls.Add(this.NAV_LAT_IMAX); + this.groupBox4.Controls.Add(this.label13); + this.groupBox4.Controls.Add(this.NAV_LAT_I); + this.groupBox4.Controls.Add(this.label15); + this.groupBox4.Controls.Add(this.NAV_LAT_P); + this.groupBox4.Controls.Add(this.label16); + this.groupBox4.Location = new System.Drawing.Point(540, 133); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(170, 131); + this.groupBox4.TabIndex = 24; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "Nav WP"; + // + // NAV_LAT_D + // + this.NAV_LAT_D.Location = new System.Drawing.Point(80, 60); + this.NAV_LAT_D.Name = "NAV_LAT_D"; + this.NAV_LAT_D.Size = new System.Drawing.Size(78, 20); + this.NAV_LAT_D.TabIndex = 18; + // + // label27 + // + this.label27.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label27.Location = new System.Drawing.Point(6, 63); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(10, 13); + this.label27.TabIndex = 19; + this.label27.Text = "D"; + // + // WP_SPEED_MAX + // + this.WP_SPEED_MAX.Location = new System.Drawing.Point(80, 107); + this.WP_SPEED_MAX.Name = "WP_SPEED_MAX"; + this.WP_SPEED_MAX.Size = new System.Drawing.Size(78, 20); + this.WP_SPEED_MAX.TabIndex = 16; + // + // label9 + // + this.label9.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label9.Location = new System.Drawing.Point(6, 110); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(54, 13); + this.label9.TabIndex = 17; + this.label9.Text = "m/s"; + // + // NAV_LAT_IMAX + // + this.NAV_LAT_IMAX.Location = new System.Drawing.Point(80, 84); + this.NAV_LAT_IMAX.Name = "NAV_LAT_IMAX"; + this.NAV_LAT_IMAX.Size = new System.Drawing.Size(78, 20); + this.NAV_LAT_IMAX.TabIndex = 11; + // + // label13 + // + this.label13.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label13.Location = new System.Drawing.Point(6, 87); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(65, 13); + this.label13.TabIndex = 12; + this.label13.Text = "IMAX"; + // + // NAV_LAT_I + // + this.NAV_LAT_I.Location = new System.Drawing.Point(80, 37); + this.NAV_LAT_I.Name = "NAV_LAT_I"; + this.NAV_LAT_I.Size = new System.Drawing.Size(78, 20); + this.NAV_LAT_I.TabIndex = 7; + // + // label15 + // + this.label15.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label15.Location = new System.Drawing.Point(6, 40); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(10, 13); + this.label15.TabIndex = 14; + this.label15.Text = "I"; + // + // NAV_LAT_P + // + this.NAV_LAT_P.Location = new System.Drawing.Point(80, 13); + this.NAV_LAT_P.Name = "NAV_LAT_P"; + this.NAV_LAT_P.Size = new System.Drawing.Size(78, 20); + this.NAV_LAT_P.TabIndex = 5; + // + // label16 + // + this.label16.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label16.Location = new System.Drawing.Point(6, 16); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(14, 13); + this.label16.TabIndex = 15; + this.label16.Text = "P"; + // + // groupBox6 + // + this.groupBox6.Controls.Add(this.XTRK_GAIN_SC1); + this.groupBox6.Controls.Add(this.label18); + this.groupBox6.Location = new System.Drawing.Point(364, 267); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(170, 43); + this.groupBox6.TabIndex = 25; + this.groupBox6.TabStop = false; + this.groupBox6.Text = "Crosstrack Correction"; + // + // XTRK_GAIN_SC1 + // + this.XTRK_GAIN_SC1.Location = new System.Drawing.Point(80, 13); + this.XTRK_GAIN_SC1.Name = "XTRK_GAIN_SC1"; + this.XTRK_GAIN_SC1.Size = new System.Drawing.Size(78, 20); + this.XTRK_GAIN_SC1.TabIndex = 5; + // + // label18 + // + this.label18.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label18.Location = new System.Drawing.Point(6, 16); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(38, 13); + this.label18.TabIndex = 15; + this.label18.Text = "Gain"; + // + // groupBox7 + // + this.groupBox7.Controls.Add(this.THR_ALT_IMAX); + this.groupBox7.Controls.Add(this.label19); + this.groupBox7.Controls.Add(this.THR_ALT_I); + this.groupBox7.Controls.Add(this.label21); + this.groupBox7.Controls.Add(this.THR_ALT_P); + this.groupBox7.Controls.Add(this.label22); + this.groupBox7.Location = new System.Drawing.Point(188, 267); + this.groupBox7.Name = "groupBox7"; + this.groupBox7.Size = new System.Drawing.Size(170, 110); + this.groupBox7.TabIndex = 26; + this.groupBox7.TabStop = false; + this.groupBox7.Text = "Altitude Hold"; + // + // THR_ALT_IMAX + // + this.THR_ALT_IMAX.Location = new System.Drawing.Point(80, 63); + this.THR_ALT_IMAX.Name = "THR_ALT_IMAX"; + this.THR_ALT_IMAX.Size = new System.Drawing.Size(78, 20); + this.THR_ALT_IMAX.TabIndex = 11; + // + // label19 + // + this.label19.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label19.Location = new System.Drawing.Point(6, 66); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(65, 13); + this.label19.TabIndex = 12; + this.label19.Text = "IMAX"; + // + // THR_ALT_I + // + this.THR_ALT_I.Location = new System.Drawing.Point(80, 37); + this.THR_ALT_I.Name = "THR_ALT_I"; + this.THR_ALT_I.Size = new System.Drawing.Size(78, 20); + this.THR_ALT_I.TabIndex = 7; + // + // label21 + // + this.label21.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label21.Location = new System.Drawing.Point(6, 40); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(10, 13); + this.label21.TabIndex = 14; + this.label21.Text = "I"; + // + // THR_ALT_P + // + this.THR_ALT_P.Location = new System.Drawing.Point(80, 13); + this.THR_ALT_P.Name = "THR_ALT_P"; + this.THR_ALT_P.Size = new System.Drawing.Size(78, 20); + this.THR_ALT_P.TabIndex = 5; + // + // label22 + // + this.label22.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label22.Location = new System.Drawing.Point(6, 16); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(14, 13); + this.label22.TabIndex = 15; + this.label22.Text = "P"; + // + // groupBox19 + // + this.groupBox19.Controls.Add(this.HLD_LAT_IMAX); + this.groupBox19.Controls.Add(this.label28); + this.groupBox19.Controls.Add(this.HLD_LAT_I); + this.groupBox19.Controls.Add(this.label30); + this.groupBox19.Controls.Add(this.HLD_LAT_P); + this.groupBox19.Controls.Add(this.label31); + this.groupBox19.Location = new System.Drawing.Point(537, 13); + this.groupBox19.Name = "groupBox19"; + this.groupBox19.Size = new System.Drawing.Size(170, 95); + this.groupBox19.TabIndex = 27; + this.groupBox19.TabStop = false; + this.groupBox19.Text = "Loiter"; + // + // HLD_LAT_IMAX + // + this.HLD_LAT_IMAX.Location = new System.Drawing.Point(80, 61); + this.HLD_LAT_IMAX.Name = "HLD_LAT_IMAX"; + this.HLD_LAT_IMAX.Size = new System.Drawing.Size(78, 20); + this.HLD_LAT_IMAX.TabIndex = 11; + // + // label28 + // + this.label28.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label28.Location = new System.Drawing.Point(6, 64); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(65, 13); + this.label28.TabIndex = 12; + this.label28.Text = "IMAX"; + // + // HLD_LAT_I + // + this.HLD_LAT_I.Location = new System.Drawing.Point(80, 37); + this.HLD_LAT_I.Name = "HLD_LAT_I"; + this.HLD_LAT_I.Size = new System.Drawing.Size(78, 20); + this.HLD_LAT_I.TabIndex = 7; + // + // label30 + // + this.label30.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label30.Location = new System.Drawing.Point(6, 40); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(10, 13); + this.label30.TabIndex = 14; + this.label30.Text = "I"; + // + // HLD_LAT_P + // + this.HLD_LAT_P.Location = new System.Drawing.Point(80, 13); + this.HLD_LAT_P.Name = "HLD_LAT_P"; + this.HLD_LAT_P.Size = new System.Drawing.Size(78, 20); + this.HLD_LAT_P.TabIndex = 5; + // + // label31 + // + this.label31.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label31.Location = new System.Drawing.Point(6, 16); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(14, 13); + this.label31.TabIndex = 15; + this.label31.Text = "P"; + // + // groupBox20 + // + this.groupBox20.Controls.Add(this.STB_YAW_IMAX); + this.groupBox20.Controls.Add(this.label32); + this.groupBox20.Controls.Add(this.STB_YAW_I); + this.groupBox20.Controls.Add(this.label34); + this.groupBox20.Controls.Add(this.STB_YAW_P); + this.groupBox20.Controls.Add(this.label35); + this.groupBox20.Location = new System.Drawing.Point(364, 13); + this.groupBox20.Name = "groupBox20"; + this.groupBox20.Size = new System.Drawing.Size(170, 95); + this.groupBox20.TabIndex = 28; + this.groupBox20.TabStop = false; + this.groupBox20.Text = "Stabilize Yaw"; + // + // STB_YAW_IMAX + // + this.STB_YAW_IMAX.Location = new System.Drawing.Point(80, 63); + this.STB_YAW_IMAX.Name = "STB_YAW_IMAX"; + this.STB_YAW_IMAX.Size = new System.Drawing.Size(78, 20); + this.STB_YAW_IMAX.TabIndex = 11; + // + // label32 + // + this.label32.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label32.Location = new System.Drawing.Point(6, 66); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(65, 13); + this.label32.TabIndex = 12; + this.label32.Text = "IMAX "; + // + // STB_YAW_I + // + this.STB_YAW_I.Location = new System.Drawing.Point(80, 37); + this.STB_YAW_I.Name = "STB_YAW_I"; + this.STB_YAW_I.Size = new System.Drawing.Size(78, 20); + this.STB_YAW_I.TabIndex = 7; + // + // label34 + // + this.label34.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label34.Location = new System.Drawing.Point(6, 40); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(10, 13); + this.label34.TabIndex = 14; + this.label34.Text = "I"; + // + // STB_YAW_P + // + this.STB_YAW_P.Location = new System.Drawing.Point(80, 13); + this.STB_YAW_P.Name = "STB_YAW_P"; + this.STB_YAW_P.Size = new System.Drawing.Size(78, 20); + this.STB_YAW_P.TabIndex = 5; + // + // label35 + // + this.label35.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label35.Location = new System.Drawing.Point(6, 16); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(14, 13); + this.label35.TabIndex = 15; + this.label35.Text = "P"; + // + // groupBox21 + // + this.groupBox21.Controls.Add(this.STAB_D); + this.groupBox21.Controls.Add(this.lblSTAB_D); + this.groupBox21.Controls.Add(this.STB_PIT_IMAX); + this.groupBox21.Controls.Add(this.label36); + this.groupBox21.Controls.Add(this.STB_PIT_I); + this.groupBox21.Controls.Add(this.label41); + this.groupBox21.Controls.Add(this.STB_PIT_P); + this.groupBox21.Controls.Add(this.label42); + this.groupBox21.Location = new System.Drawing.Point(188, 13); + this.groupBox21.Name = "groupBox21"; + this.groupBox21.Size = new System.Drawing.Size(170, 114); + this.groupBox21.TabIndex = 29; + this.groupBox21.TabStop = false; + this.groupBox21.Text = "Stabilize Pitch"; + // + // STAB_D + // + this.STAB_D.Location = new System.Drawing.Point(80, 88); + this.STAB_D.Name = "STAB_D"; + this.STAB_D.Size = new System.Drawing.Size(78, 20); + this.STAB_D.TabIndex = 16; + // + // lblSTAB_D + // + this.lblSTAB_D.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.lblSTAB_D.Location = new System.Drawing.Point(6, 91); + this.lblSTAB_D.Name = "lblSTAB_D"; + this.lblSTAB_D.Size = new System.Drawing.Size(65, 13); + this.lblSTAB_D.TabIndex = 17; + this.lblSTAB_D.Text = "Stabilize D"; + // + // STB_PIT_IMAX + // + this.STB_PIT_IMAX.Location = new System.Drawing.Point(80, 63); + this.STB_PIT_IMAX.Name = "STB_PIT_IMAX"; + this.STB_PIT_IMAX.Size = new System.Drawing.Size(78, 20); + this.STB_PIT_IMAX.TabIndex = 11; + // + // label36 + // + this.label36.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label36.Location = new System.Drawing.Point(6, 66); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(65, 13); + this.label36.TabIndex = 12; + this.label36.Text = "IMAX"; + // + // STB_PIT_I + // + this.STB_PIT_I.Location = new System.Drawing.Point(80, 37); + this.STB_PIT_I.Name = "STB_PIT_I"; + this.STB_PIT_I.Size = new System.Drawing.Size(78, 20); + this.STB_PIT_I.TabIndex = 7; + // + // label41 + // + this.label41.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label41.Location = new System.Drawing.Point(6, 40); + this.label41.Name = "label41"; + this.label41.Size = new System.Drawing.Size(10, 13); + this.label41.TabIndex = 14; + this.label41.Text = "I"; + // + // STB_PIT_P + // + this.STB_PIT_P.Location = new System.Drawing.Point(80, 13); + this.STB_PIT_P.Name = "STB_PIT_P"; + this.STB_PIT_P.Size = new System.Drawing.Size(78, 20); + this.STB_PIT_P.TabIndex = 5; + // + // label42 + // + this.label42.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label42.Location = new System.Drawing.Point(6, 16); + this.label42.Name = "label42"; + this.label42.Size = new System.Drawing.Size(14, 13); + this.label42.TabIndex = 15; + this.label42.Text = "P"; + // + // groupBox22 + // + this.groupBox22.Controls.Add(this.STB_RLL_IMAX); + this.groupBox22.Controls.Add(this.label43); + this.groupBox22.Controls.Add(this.STB_RLL_I); + this.groupBox22.Controls.Add(this.label45); + this.groupBox22.Controls.Add(this.STB_RLL_P); + this.groupBox22.Controls.Add(this.label46); + this.groupBox22.Location = new System.Drawing.Point(12, 13); + this.groupBox22.Name = "groupBox22"; + this.groupBox22.Size = new System.Drawing.Size(170, 95); + this.groupBox22.TabIndex = 30; + this.groupBox22.TabStop = false; + this.groupBox22.Text = "Stabilize Roll"; + // + // STB_RLL_IMAX + // + this.STB_RLL_IMAX.Location = new System.Drawing.Point(80, 63); + this.STB_RLL_IMAX.Name = "STB_RLL_IMAX"; + this.STB_RLL_IMAX.Size = new System.Drawing.Size(78, 20); + this.STB_RLL_IMAX.TabIndex = 11; + // + // label43 + // + this.label43.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label43.Location = new System.Drawing.Point(6, 66); + this.label43.Name = "label43"; + this.label43.Size = new System.Drawing.Size(65, 13); + this.label43.TabIndex = 12; + this.label43.Text = "IMAX"; + // + // STB_RLL_I + // + this.STB_RLL_I.Location = new System.Drawing.Point(80, 37); + this.STB_RLL_I.Name = "STB_RLL_I"; + this.STB_RLL_I.Size = new System.Drawing.Size(78, 20); + this.STB_RLL_I.TabIndex = 7; + // + // label45 + // + this.label45.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label45.Location = new System.Drawing.Point(6, 40); + this.label45.Name = "label45"; + this.label45.Size = new System.Drawing.Size(10, 13); + this.label45.TabIndex = 14; + this.label45.Text = "I"; + // + // STB_RLL_P + // + this.STB_RLL_P.Location = new System.Drawing.Point(80, 13); + this.STB_RLL_P.Name = "STB_RLL_P"; + this.STB_RLL_P.Size = new System.Drawing.Size(78, 20); + this.STB_RLL_P.TabIndex = 5; + // + // label46 + // + this.label46.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label46.Location = new System.Drawing.Point(6, 16); + this.label46.Name = "label46"; + this.label46.Size = new System.Drawing.Size(14, 13); + this.label46.TabIndex = 15; + this.label46.Text = "P"; + // + // groupBox23 + // + this.groupBox23.Controls.Add(this.RATE_YAW_D); + this.groupBox23.Controls.Add(this.label10); + this.groupBox23.Controls.Add(this.RATE_YAW_IMAX); + this.groupBox23.Controls.Add(this.label47); + this.groupBox23.Controls.Add(this.RATE_YAW_I); + this.groupBox23.Controls.Add(this.label77); + this.groupBox23.Controls.Add(this.RATE_YAW_P); + this.groupBox23.Controls.Add(this.label82); + this.groupBox23.Location = new System.Drawing.Point(364, 133); + this.groupBox23.Name = "groupBox23"; + this.groupBox23.Size = new System.Drawing.Size(170, 108); + this.groupBox23.TabIndex = 31; + this.groupBox23.TabStop = false; + this.groupBox23.Text = "Rate Yaw"; + // + // RATE_YAW_D + // + this.RATE_YAW_D.Location = new System.Drawing.Point(80, 60); + this.RATE_YAW_D.Name = "RATE_YAW_D"; + this.RATE_YAW_D.Size = new System.Drawing.Size(78, 20); + this.RATE_YAW_D.TabIndex = 8; + // + // label10 + // + this.label10.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label10.Location = new System.Drawing.Point(6, 63); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(10, 13); + this.label10.TabIndex = 9; + this.label10.Text = "D"; + // + // RATE_YAW_IMAX + // + this.RATE_YAW_IMAX.Location = new System.Drawing.Point(80, 84); + this.RATE_YAW_IMAX.Name = "RATE_YAW_IMAX"; + this.RATE_YAW_IMAX.Size = new System.Drawing.Size(78, 20); + this.RATE_YAW_IMAX.TabIndex = 0; + // + // label47 + // + this.label47.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label47.Location = new System.Drawing.Point(6, 87); + this.label47.Name = "label47"; + this.label47.Size = new System.Drawing.Size(65, 13); + this.label47.TabIndex = 1; + this.label47.Text = "IMAX"; + // + // RATE_YAW_I + // + this.RATE_YAW_I.Location = new System.Drawing.Point(80, 37); + this.RATE_YAW_I.Name = "RATE_YAW_I"; + this.RATE_YAW_I.Size = new System.Drawing.Size(78, 20); + this.RATE_YAW_I.TabIndex = 4; + // + // label77 + // + this.label77.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label77.Location = new System.Drawing.Point(6, 40); + this.label77.Name = "label77"; + this.label77.Size = new System.Drawing.Size(10, 13); + this.label77.TabIndex = 5; + this.label77.Text = "I"; + // + // RATE_YAW_P + // + this.RATE_YAW_P.Location = new System.Drawing.Point(80, 13); + this.RATE_YAW_P.Name = "RATE_YAW_P"; + this.RATE_YAW_P.Size = new System.Drawing.Size(78, 20); + this.RATE_YAW_P.TabIndex = 6; + // + // label82 + // + this.label82.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label82.Location = new System.Drawing.Point(6, 16); + this.label82.Name = "label82"; + this.label82.Size = new System.Drawing.Size(14, 13); + this.label82.TabIndex = 7; + this.label82.Text = "P"; + // + // groupBox24 + // + this.groupBox24.Controls.Add(this.RATE_PIT_D); + this.groupBox24.Controls.Add(this.label11); + this.groupBox24.Controls.Add(this.RATE_PIT_IMAX); + this.groupBox24.Controls.Add(this.label84); + this.groupBox24.Controls.Add(this.RATE_PIT_I); + this.groupBox24.Controls.Add(this.label86); + this.groupBox24.Controls.Add(this.RATE_PIT_P); + this.groupBox24.Controls.Add(this.label87); + this.groupBox24.Location = new System.Drawing.Point(188, 133); + this.groupBox24.Name = "groupBox24"; + this.groupBox24.Size = new System.Drawing.Size(170, 108); + this.groupBox24.TabIndex = 32; + this.groupBox24.TabStop = false; + this.groupBox24.Text = "Rate Pitch"; + // + // RATE_PIT_D + // + this.RATE_PIT_D.Location = new System.Drawing.Point(80, 60); + this.RATE_PIT_D.Name = "RATE_PIT_D"; + this.RATE_PIT_D.Size = new System.Drawing.Size(78, 20); + this.RATE_PIT_D.TabIndex = 10; + // + // label11 + // + this.label11.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label11.Location = new System.Drawing.Point(6, 63); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(10, 13); + this.label11.TabIndex = 11; + this.label11.Text = "D"; + // + // RATE_PIT_IMAX + // + this.RATE_PIT_IMAX.Location = new System.Drawing.Point(80, 83); + this.RATE_PIT_IMAX.Name = "RATE_PIT_IMAX"; + this.RATE_PIT_IMAX.Size = new System.Drawing.Size(78, 20); + this.RATE_PIT_IMAX.TabIndex = 0; + // + // label84 + // + this.label84.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label84.Location = new System.Drawing.Point(6, 86); + this.label84.Name = "label84"; + this.label84.Size = new System.Drawing.Size(65, 13); + this.label84.TabIndex = 1; + this.label84.Text = "IMAX"; + // + // RATE_PIT_I + // + this.RATE_PIT_I.Location = new System.Drawing.Point(80, 37); + this.RATE_PIT_I.Name = "RATE_PIT_I"; + this.RATE_PIT_I.Size = new System.Drawing.Size(78, 20); + this.RATE_PIT_I.TabIndex = 4; + // + // label86 + // + this.label86.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label86.Location = new System.Drawing.Point(6, 40); + this.label86.Name = "label86"; + this.label86.Size = new System.Drawing.Size(10, 13); + this.label86.TabIndex = 5; + this.label86.Text = "I"; + // + // RATE_PIT_P + // + this.RATE_PIT_P.Location = new System.Drawing.Point(80, 13); + this.RATE_PIT_P.Name = "RATE_PIT_P"; + this.RATE_PIT_P.Size = new System.Drawing.Size(78, 20); + this.RATE_PIT_P.TabIndex = 6; + // + // label87 + // + this.label87.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label87.Location = new System.Drawing.Point(6, 16); + this.label87.Name = "label87"; + this.label87.Size = new System.Drawing.Size(14, 13); + this.label87.TabIndex = 7; + this.label87.Text = "P"; + // + // groupBox25 + // + this.groupBox25.Controls.Add(this.RATE_RLL_D); + this.groupBox25.Controls.Add(this.label17); + this.groupBox25.Controls.Add(this.RATE_RLL_IMAX); + this.groupBox25.Controls.Add(this.label88); + this.groupBox25.Controls.Add(this.RATE_RLL_I); + this.groupBox25.Controls.Add(this.label90); + this.groupBox25.Controls.Add(this.RATE_RLL_P); + this.groupBox25.Controls.Add(this.label91); + this.groupBox25.Location = new System.Drawing.Point(12, 133); + this.groupBox25.Name = "groupBox25"; + this.groupBox25.Size = new System.Drawing.Size(170, 108); + this.groupBox25.TabIndex = 33; + this.groupBox25.TabStop = false; + this.groupBox25.Text = "Rate Roll"; + // + // RATE_RLL_D + // + this.RATE_RLL_D.Location = new System.Drawing.Point(80, 60); + this.RATE_RLL_D.Name = "RATE_RLL_D"; + this.RATE_RLL_D.Size = new System.Drawing.Size(78, 20); + this.RATE_RLL_D.TabIndex = 12; + // + // label17 + // + this.label17.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label17.Location = new System.Drawing.Point(6, 63); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(10, 13); + this.label17.TabIndex = 13; + this.label17.Text = "D"; + // + // RATE_RLL_IMAX + // + this.RATE_RLL_IMAX.Location = new System.Drawing.Point(80, 83); + this.RATE_RLL_IMAX.Name = "RATE_RLL_IMAX"; + this.RATE_RLL_IMAX.Size = new System.Drawing.Size(78, 20); + this.RATE_RLL_IMAX.TabIndex = 0; + // + // label88 + // + this.label88.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label88.Location = new System.Drawing.Point(6, 86); + this.label88.Name = "label88"; + this.label88.Size = new System.Drawing.Size(68, 13); + this.label88.TabIndex = 1; + this.label88.Text = "IMAX"; + // + // RATE_RLL_I + // + this.RATE_RLL_I.Location = new System.Drawing.Point(80, 37); + this.RATE_RLL_I.Name = "RATE_RLL_I"; + this.RATE_RLL_I.Size = new System.Drawing.Size(78, 20); + this.RATE_RLL_I.TabIndex = 4; + // + // label90 + // + this.label90.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label90.Location = new System.Drawing.Point(6, 40); + this.label90.Name = "label90"; + this.label90.Size = new System.Drawing.Size(10, 13); + this.label90.TabIndex = 5; + this.label90.Text = "I"; + // + // RATE_RLL_P + // + this.RATE_RLL_P.Location = new System.Drawing.Point(80, 13); + this.RATE_RLL_P.Name = "RATE_RLL_P"; + this.RATE_RLL_P.Size = new System.Drawing.Size(78, 20); + this.RATE_RLL_P.TabIndex = 6; + // + // label91 + // + this.label91.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label91.Location = new System.Drawing.Point(6, 16); + this.label91.Name = "label91"; + this.label91.Size = new System.Drawing.Size(14, 13); + this.label91.TabIndex = 7; + this.label91.Text = "P"; + // + // ConfigArducopter + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.myLabel3); + this.Controls.Add(this.TUNE_LOW); + this.Controls.Add(this.TUNE_HIGH); + this.Controls.Add(this.myLabel2); + this.Controls.Add(this.TUNE); + this.Controls.Add(this.myLabel1); + this.Controls.Add(this.CH7_OPT); + this.Controls.Add(this.groupBox5); + this.Controls.Add(this.CHK_lockrollpitch); + this.Controls.Add(this.groupBox4); + this.Controls.Add(this.groupBox6); + this.Controls.Add(this.groupBox7); + this.Controls.Add(this.groupBox19); + this.Controls.Add(this.groupBox20); + this.Controls.Add(this.groupBox21); + this.Controls.Add(this.groupBox22); + this.Controls.Add(this.groupBox23); + this.Controls.Add(this.groupBox24); + this.Controls.Add(this.groupBox25); + this.Name = "ConfigArducopter"; + this.Size = new System.Drawing.Size(728, 393); + ((System.ComponentModel.ISupportInitialize)(this.TUNE_LOW)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.TUNE_HIGH)).EndInit(); + this.groupBox5.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.THR_RATE_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_RATE_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_RATE_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_RATE_P)).EndInit(); + this.groupBox4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.NAV_LAT_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.WP_SPEED_MAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.NAV_LAT_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.NAV_LAT_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.NAV_LAT_P)).EndInit(); + this.groupBox6.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.XTRK_GAIN_SC1)).EndInit(); + this.groupBox7.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.THR_ALT_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_ALT_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_ALT_P)).EndInit(); + this.groupBox19.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.HLD_LAT_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.HLD_LAT_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.HLD_LAT_P)).EndInit(); + this.groupBox20.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.STB_YAW_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_YAW_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_YAW_P)).EndInit(); + this.groupBox21.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.STAB_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_PIT_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_PIT_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_PIT_P)).EndInit(); + this.groupBox22.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.STB_RLL_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_RLL_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.STB_RLL_P)).EndInit(); + this.groupBox23.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.RATE_YAW_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_YAW_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_YAW_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_YAW_P)).EndInit(); + this.groupBox24.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.RATE_PIT_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_PIT_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_PIT_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_PIT_P)).EndInit(); + this.groupBox25.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.RATE_RLL_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_RLL_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_RLL_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RATE_RLL_P)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private MyLabel myLabel3; + private System.Windows.Forms.NumericUpDown TUNE_LOW; + private System.Windows.Forms.NumericUpDown TUNE_HIGH; + private MyLabel myLabel2; + private System.Windows.Forms.ComboBox TUNE; + private MyLabel myLabel1; + private System.Windows.Forms.ComboBox CH7_OPT; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.NumericUpDown THR_RATE_D; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.NumericUpDown THR_RATE_IMAX; + private System.Windows.Forms.NumericUpDown THR_RATE_I; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.NumericUpDown THR_RATE_P; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.CheckBox CHK_lockrollpitch; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.NumericUpDown NAV_LAT_D; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.NumericUpDown WP_SPEED_MAX; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.NumericUpDown NAV_LAT_IMAX; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.NumericUpDown NAV_LAT_I; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.NumericUpDown NAV_LAT_P; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.NumericUpDown XTRK_GAIN_SC1; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.GroupBox groupBox7; + private System.Windows.Forms.NumericUpDown THR_ALT_IMAX; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.NumericUpDown THR_ALT_I; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.NumericUpDown THR_ALT_P; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.GroupBox groupBox19; + private System.Windows.Forms.NumericUpDown HLD_LAT_IMAX; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.NumericUpDown HLD_LAT_I; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.NumericUpDown HLD_LAT_P; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.GroupBox groupBox20; + private System.Windows.Forms.NumericUpDown STB_YAW_IMAX; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.NumericUpDown STB_YAW_I; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.NumericUpDown STB_YAW_P; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.GroupBox groupBox21; + private System.Windows.Forms.NumericUpDown STAB_D; + private System.Windows.Forms.Label lblSTAB_D; + private System.Windows.Forms.NumericUpDown STB_PIT_IMAX; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.NumericUpDown STB_PIT_I; + private System.Windows.Forms.Label label41; + private System.Windows.Forms.NumericUpDown STB_PIT_P; + private System.Windows.Forms.Label label42; + private System.Windows.Forms.GroupBox groupBox22; + private System.Windows.Forms.NumericUpDown STB_RLL_IMAX; + private System.Windows.Forms.Label label43; + private System.Windows.Forms.NumericUpDown STB_RLL_I; + private System.Windows.Forms.Label label45; + private System.Windows.Forms.NumericUpDown STB_RLL_P; + private System.Windows.Forms.Label label46; + private System.Windows.Forms.GroupBox groupBox23; + private System.Windows.Forms.NumericUpDown RATE_YAW_D; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.NumericUpDown RATE_YAW_IMAX; + private System.Windows.Forms.Label label47; + private System.Windows.Forms.NumericUpDown RATE_YAW_I; + private System.Windows.Forms.Label label77; + private System.Windows.Forms.NumericUpDown RATE_YAW_P; + private System.Windows.Forms.Label label82; + private System.Windows.Forms.GroupBox groupBox24; + private System.Windows.Forms.NumericUpDown RATE_PIT_D; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.NumericUpDown RATE_PIT_IMAX; + private System.Windows.Forms.Label label84; + private System.Windows.Forms.NumericUpDown RATE_PIT_I; + private System.Windows.Forms.Label label86; + private System.Windows.Forms.NumericUpDown RATE_PIT_P; + private System.Windows.Forms.Label label87; + private System.Windows.Forms.GroupBox groupBox25; + private System.Windows.Forms.NumericUpDown RATE_RLL_D; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.NumericUpDown RATE_RLL_IMAX; + private System.Windows.Forms.Label label88; + private System.Windows.Forms.NumericUpDown RATE_RLL_I; + private System.Windows.Forms.Label label90; + private System.Windows.Forms.NumericUpDown RATE_RLL_P; + private System.Windows.Forms.Label label91; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.cs new file mode 100644 index 000000000..772230d33 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class ConfigArducopter : UserControl + { + public ConfigArducopter() + { + InitializeComponent(); + } + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.resx new file mode 100644 index 000000000..7080a7d11 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.Designer.cs new file mode 100644 index 000000000..a6928f5b2 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.Designer.cs @@ -0,0 +1,1270 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigArduplane + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.THR_FS_VALUE = new System.Windows.Forms.NumericUpDown(); + this.label5 = new System.Windows.Forms.Label(); + this.THR_MAX = new System.Windows.Forms.NumericUpDown(); + this.label6 = new System.Windows.Forms.Label(); + this.THR_MIN = new System.Windows.Forms.NumericUpDown(); + this.label7 = new System.Windows.Forms.Label(); + this.TRIM_THROTTLE = new System.Windows.Forms.NumericUpDown(); + this.label8 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.ARSPD_RATIO = new System.Windows.Forms.NumericUpDown(); + this.label1 = new System.Windows.Forms.Label(); + this.ARSPD_FBW_MAX = new System.Windows.Forms.NumericUpDown(); + this.label2 = new System.Windows.Forms.Label(); + this.ARSPD_FBW_MIN = new System.Windows.Forms.NumericUpDown(); + this.label3 = new System.Windows.Forms.Label(); + this.TRIM_ARSPD_CM = new System.Windows.Forms.NumericUpDown(); + this.label4 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.LIM_PITCH_MIN = new System.Windows.Forms.NumericUpDown(); + this.label39 = new System.Windows.Forms.Label(); + this.LIM_PITCH_MAX = new System.Windows.Forms.NumericUpDown(); + this.label38 = new System.Windows.Forms.Label(); + this.LIM_ROLL_CD = new System.Windows.Forms.NumericUpDown(); + this.label37 = new System.Windows.Forms.Label(); + this.groupBox15 = new System.Windows.Forms.GroupBox(); + this.XTRK_ANGLE_CD = new System.Windows.Forms.NumericUpDown(); + this.label79 = new System.Windows.Forms.Label(); + this.XTRK_GAIN_SC = new System.Windows.Forms.NumericUpDown(); + this.label80 = new System.Windows.Forms.Label(); + this.groupBox16 = new System.Windows.Forms.GroupBox(); + this.KFF_PTCH2THR = new System.Windows.Forms.NumericUpDown(); + this.label83 = new System.Windows.Forms.Label(); + this.KFF_RDDRMIX = new System.Windows.Forms.NumericUpDown(); + this.label78 = new System.Windows.Forms.Label(); + this.KFF_PTCHCOMP = new System.Windows.Forms.NumericUpDown(); + this.label81 = new System.Windows.Forms.Label(); + this.groupBox14 = new System.Windows.Forms.GroupBox(); + this.ENRGY2THR_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label73 = new System.Windows.Forms.Label(); + this.ENRGY2THR_D = new System.Windows.Forms.NumericUpDown(); + this.label74 = new System.Windows.Forms.Label(); + this.ENRGY2THR_I = new System.Windows.Forms.NumericUpDown(); + this.label75 = new System.Windows.Forms.Label(); + this.ENRGY2THR_P = new System.Windows.Forms.NumericUpDown(); + this.label76 = new System.Windows.Forms.Label(); + this.groupBox13 = new System.Windows.Forms.GroupBox(); + this.ALT2PTCH_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label69 = new System.Windows.Forms.Label(); + this.ALT2PTCH_D = new System.Windows.Forms.NumericUpDown(); + this.label70 = new System.Windows.Forms.Label(); + this.ALT2PTCH_I = new System.Windows.Forms.NumericUpDown(); + this.label71 = new System.Windows.Forms.Label(); + this.ALT2PTCH_P = new System.Windows.Forms.NumericUpDown(); + this.label72 = new System.Windows.Forms.Label(); + this.groupBox12 = new System.Windows.Forms.GroupBox(); + this.ARSP2PTCH_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label65 = new System.Windows.Forms.Label(); + this.ARSP2PTCH_D = new System.Windows.Forms.NumericUpDown(); + this.label66 = new System.Windows.Forms.Label(); + this.ARSP2PTCH_I = new System.Windows.Forms.NumericUpDown(); + this.label67 = new System.Windows.Forms.Label(); + this.ARSP2PTCH_P = new System.Windows.Forms.NumericUpDown(); + this.label68 = new System.Windows.Forms.Label(); + this.groupBox11 = new System.Windows.Forms.GroupBox(); + this.HDNG2RLL_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label61 = new System.Windows.Forms.Label(); + this.HDNG2RLL_D = new System.Windows.Forms.NumericUpDown(); + this.label62 = new System.Windows.Forms.Label(); + this.HDNG2RLL_I = new System.Windows.Forms.NumericUpDown(); + this.label63 = new System.Windows.Forms.Label(); + this.HDNG2RLL_P = new System.Windows.Forms.NumericUpDown(); + this.label64 = new System.Windows.Forms.Label(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.YW2SRV_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label57 = new System.Windows.Forms.Label(); + this.YW2SRV_D = new System.Windows.Forms.NumericUpDown(); + this.label58 = new System.Windows.Forms.Label(); + this.YW2SRV_I = new System.Windows.Forms.NumericUpDown(); + this.label59 = new System.Windows.Forms.Label(); + this.YW2SRV_P = new System.Windows.Forms.NumericUpDown(); + this.label60 = new System.Windows.Forms.Label(); + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.PTCH2SRV_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label53 = new System.Windows.Forms.Label(); + this.PTCH2SRV_D = new System.Windows.Forms.NumericUpDown(); + this.label54 = new System.Windows.Forms.Label(); + this.PTCH2SRV_I = new System.Windows.Forms.NumericUpDown(); + this.label55 = new System.Windows.Forms.Label(); + this.PTCH2SRV_P = new System.Windows.Forms.NumericUpDown(); + this.label56 = new System.Windows.Forms.Label(); + this.groupBox8 = new System.Windows.Forms.GroupBox(); + this.RLL2SRV_IMAX = new System.Windows.Forms.NumericUpDown(); + this.label49 = new System.Windows.Forms.Label(); + this.RLL2SRV_D = new System.Windows.Forms.NumericUpDown(); + this.label50 = new System.Windows.Forms.Label(); + this.RLL2SRV_I = new System.Windows.Forms.NumericUpDown(); + this.label51 = new System.Windows.Forms.Label(); + this.RLL2SRV_P = new System.Windows.Forms.NumericUpDown(); + this.label52 = new System.Windows.Forms.Label(); + this.groupBox3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.THR_FS_VALUE)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_MAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_MIN)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.TRIM_THROTTLE)).BeginInit(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ARSPD_RATIO)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ARSPD_FBW_MAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ARSPD_FBW_MIN)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.TRIM_ARSPD_CM)).BeginInit(); + this.groupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.LIM_PITCH_MIN)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.LIM_PITCH_MAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.LIM_ROLL_CD)).BeginInit(); + this.groupBox15.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.XTRK_ANGLE_CD)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.XTRK_GAIN_SC)).BeginInit(); + this.groupBox16.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.KFF_PTCH2THR)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.KFF_RDDRMIX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.KFF_PTCHCOMP)).BeginInit(); + this.groupBox14.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ENRGY2THR_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ENRGY2THR_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ENRGY2THR_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ENRGY2THR_P)).BeginInit(); + this.groupBox13.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ALT2PTCH_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ALT2PTCH_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ALT2PTCH_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ALT2PTCH_P)).BeginInit(); + this.groupBox12.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.ARSP2PTCH_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ARSP2PTCH_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ARSP2PTCH_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ARSP2PTCH_P)).BeginInit(); + this.groupBox11.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.HDNG2RLL_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.HDNG2RLL_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.HDNG2RLL_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.HDNG2RLL_P)).BeginInit(); + this.groupBox10.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.YW2SRV_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.YW2SRV_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.YW2SRV_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.YW2SRV_P)).BeginInit(); + this.groupBox9.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.PTCH2SRV_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PTCH2SRV_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PTCH2SRV_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PTCH2SRV_P)).BeginInit(); + this.groupBox8.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.RLL2SRV_IMAX)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RLL2SRV_D)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RLL2SRV_I)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RLL2SRV_P)).BeginInit(); + this.SuspendLayout(); + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.THR_FS_VALUE); + this.groupBox3.Controls.Add(this.label5); + this.groupBox3.Controls.Add(this.THR_MAX); + this.groupBox3.Controls.Add(this.label6); + this.groupBox3.Controls.Add(this.THR_MIN); + this.groupBox3.Controls.Add(this.label7); + this.groupBox3.Controls.Add(this.TRIM_THROTTLE); + this.groupBox3.Controls.Add(this.label8); + this.groupBox3.Location = new System.Drawing.Point(413, 231); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(195, 108); + this.groupBox3.TabIndex = 12; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Throttle 0-100%"; + // + // THR_FS_VALUE + // + this.THR_FS_VALUE.Location = new System.Drawing.Point(111, 82); + this.THR_FS_VALUE.Name = "THR_FS_VALUE"; + this.THR_FS_VALUE.Size = new System.Drawing.Size(78, 20); + this.THR_FS_VALUE.TabIndex = 11; + // + // label5 + // + this.label5.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label5.Location = new System.Drawing.Point(6, 86); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(50, 13); + this.label5.TabIndex = 12; + this.label5.Text = "FS Value"; + // + // THR_MAX + // + this.THR_MAX.Location = new System.Drawing.Point(111, 59); + this.THR_MAX.Name = "THR_MAX"; + this.THR_MAX.Size = new System.Drawing.Size(78, 20); + this.THR_MAX.TabIndex = 9; + // + // label6 + // + this.label6.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label6.Location = new System.Drawing.Point(6, 63); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(27, 13); + this.label6.TabIndex = 13; + this.label6.Text = "Max"; + // + // THR_MIN + // + this.THR_MIN.Location = new System.Drawing.Point(111, 36); + this.THR_MIN.Name = "THR_MIN"; + this.THR_MIN.Size = new System.Drawing.Size(78, 20); + this.THR_MIN.TabIndex = 7; + // + // label7 + // + this.label7.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label7.Location = new System.Drawing.Point(6, 40); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(24, 13); + this.label7.TabIndex = 14; + this.label7.Text = "Min"; + // + // TRIM_THROTTLE + // + this.TRIM_THROTTLE.Location = new System.Drawing.Point(111, 13); + this.TRIM_THROTTLE.Name = "TRIM_THROTTLE"; + this.TRIM_THROTTLE.Size = new System.Drawing.Size(78, 20); + this.TRIM_THROTTLE.TabIndex = 5; + // + // label8 + // + this.label8.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label8.Location = new System.Drawing.Point(6, 17); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(36, 13); + this.label8.TabIndex = 15; + this.label8.Text = "Cruise"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.ARSPD_RATIO); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.ARSPD_FBW_MAX); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.ARSPD_FBW_MIN); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.TRIM_ARSPD_CM); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Location = new System.Drawing.Point(414, 339); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(195, 108); + this.groupBox1.TabIndex = 13; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Airspeed m/s"; + // + // ARSPD_RATIO + // + this.ARSPD_RATIO.Location = new System.Drawing.Point(111, 82); + this.ARSPD_RATIO.Name = "ARSPD_RATIO"; + this.ARSPD_RATIO.Size = new System.Drawing.Size(78, 20); + this.ARSPD_RATIO.TabIndex = 0; + // + // label1 + // + this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label1.Location = new System.Drawing.Point(6, 87); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(32, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Ratio"; + // + // ARSPD_FBW_MAX + // + this.ARSPD_FBW_MAX.Location = new System.Drawing.Point(111, 59); + this.ARSPD_FBW_MAX.Name = "ARSPD_FBW_MAX"; + this.ARSPD_FBW_MAX.Size = new System.Drawing.Size(78, 20); + this.ARSPD_FBW_MAX.TabIndex = 2; + // + // label2 + // + this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label2.Location = new System.Drawing.Point(6, 59); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(53, 13); + this.label2.TabIndex = 3; + this.label2.Text = "FBW max"; + // + // ARSPD_FBW_MIN + // + this.ARSPD_FBW_MIN.Location = new System.Drawing.Point(111, 36); + this.ARSPD_FBW_MIN.Name = "ARSPD_FBW_MIN"; + this.ARSPD_FBW_MIN.Size = new System.Drawing.Size(78, 20); + this.ARSPD_FBW_MIN.TabIndex = 4; + // + // label3 + // + this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label3.Location = new System.Drawing.Point(6, 40); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(50, 13); + this.label3.TabIndex = 5; + this.label3.Text = "FBW min"; + // + // TRIM_ARSPD_CM + // + this.TRIM_ARSPD_CM.Location = new System.Drawing.Point(111, 13); + this.TRIM_ARSPD_CM.Name = "TRIM_ARSPD_CM"; + this.TRIM_ARSPD_CM.Size = new System.Drawing.Size(78, 20); + this.TRIM_ARSPD_CM.TabIndex = 5; + // + // label4 + // + this.label4.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label4.Location = new System.Drawing.Point(6, 17); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(64, 13); + this.label4.TabIndex = 6; + this.label4.Text = "Cruise"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.LIM_PITCH_MIN); + this.groupBox2.Controls.Add(this.label39); + this.groupBox2.Controls.Add(this.LIM_PITCH_MAX); + this.groupBox2.Controls.Add(this.label38); + this.groupBox2.Controls.Add(this.LIM_ROLL_CD); + this.groupBox2.Controls.Add(this.label37); + this.groupBox2.Location = new System.Drawing.Point(213, 339); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(195, 108); + this.groupBox2.TabIndex = 14; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Navigation Angles"; + // + // LIM_PITCH_MIN + // + this.LIM_PITCH_MIN.Location = new System.Drawing.Point(111, 59); + this.LIM_PITCH_MIN.Name = "LIM_PITCH_MIN"; + this.LIM_PITCH_MIN.Size = new System.Drawing.Size(78, 20); + this.LIM_PITCH_MIN.TabIndex = 9; + // + // label39 + // + this.label39.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label39.Location = new System.Drawing.Point(6, 63); + this.label39.Name = "label39"; + this.label39.Size = new System.Drawing.Size(51, 13); + this.label39.TabIndex = 10; + this.label39.Text = "Pitch Min"; + // + // LIM_PITCH_MAX + // + this.LIM_PITCH_MAX.Location = new System.Drawing.Point(111, 36); + this.LIM_PITCH_MAX.Name = "LIM_PITCH_MAX"; + this.LIM_PITCH_MAX.Size = new System.Drawing.Size(78, 20); + this.LIM_PITCH_MAX.TabIndex = 7; + // + // label38 + // + this.label38.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label38.Location = new System.Drawing.Point(6, 40); + this.label38.Name = "label38"; + this.label38.Size = new System.Drawing.Size(54, 13); + this.label38.TabIndex = 11; + this.label38.Text = "Pitch Max"; + // + // LIM_ROLL_CD + // + this.LIM_ROLL_CD.Location = new System.Drawing.Point(111, 13); + this.LIM_ROLL_CD.Name = "LIM_ROLL_CD"; + this.LIM_ROLL_CD.Size = new System.Drawing.Size(78, 20); + this.LIM_ROLL_CD.TabIndex = 5; + // + // label37 + // + this.label37.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label37.Location = new System.Drawing.Point(6, 17); + this.label37.Name = "label37"; + this.label37.Size = new System.Drawing.Size(55, 13); + this.label37.TabIndex = 12; + this.label37.Text = "Bank Max"; + // + // groupBox15 + // + this.groupBox15.Controls.Add(this.XTRK_ANGLE_CD); + this.groupBox15.Controls.Add(this.label79); + this.groupBox15.Controls.Add(this.XTRK_GAIN_SC); + this.groupBox15.Controls.Add(this.label80); + this.groupBox15.Location = new System.Drawing.Point(12, 339); + this.groupBox15.Name = "groupBox15"; + this.groupBox15.Size = new System.Drawing.Size(195, 108); + this.groupBox15.TabIndex = 15; + this.groupBox15.TabStop = false; + this.groupBox15.Text = "Xtrack Pids"; + // + // XTRK_ANGLE_CD + // + this.XTRK_ANGLE_CD.Location = new System.Drawing.Point(111, 36); + this.XTRK_ANGLE_CD.Name = "XTRK_ANGLE_CD"; + this.XTRK_ANGLE_CD.Size = new System.Drawing.Size(78, 20); + this.XTRK_ANGLE_CD.TabIndex = 7; + // + // label79 + // + this.label79.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label79.Location = new System.Drawing.Point(6, 40); + this.label79.Name = "label79"; + this.label79.Size = new System.Drawing.Size(61, 13); + this.label79.TabIndex = 8; + this.label79.Text = "Entry Angle"; + // + // XTRK_GAIN_SC + // + this.XTRK_GAIN_SC.Location = new System.Drawing.Point(111, 13); + this.XTRK_GAIN_SC.Name = "XTRK_GAIN_SC"; + this.XTRK_GAIN_SC.Size = new System.Drawing.Size(78, 20); + this.XTRK_GAIN_SC.TabIndex = 5; + // + // label80 + // + this.label80.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label80.Location = new System.Drawing.Point(6, 17); + this.label80.Name = "label80"; + this.label80.Size = new System.Drawing.Size(52, 13); + this.label80.TabIndex = 9; + this.label80.Text = "Gain (cm)"; + // + // groupBox16 + // + this.groupBox16.Controls.Add(this.KFF_PTCH2THR); + this.groupBox16.Controls.Add(this.label83); + this.groupBox16.Controls.Add(this.KFF_RDDRMIX); + this.groupBox16.Controls.Add(this.label78); + this.groupBox16.Controls.Add(this.KFF_PTCHCOMP); + this.groupBox16.Controls.Add(this.label81); + this.groupBox16.Location = new System.Drawing.Point(213, 231); + this.groupBox16.Name = "groupBox16"; + this.groupBox16.Size = new System.Drawing.Size(195, 108); + this.groupBox16.TabIndex = 16; + this.groupBox16.TabStop = false; + this.groupBox16.Text = "Other Mix\'s"; + // + // KFF_PTCH2THR + // + this.KFF_PTCH2THR.Location = new System.Drawing.Point(111, 13); + this.KFF_PTCH2THR.Name = "KFF_PTCH2THR"; + this.KFF_PTCH2THR.Size = new System.Drawing.Size(78, 20); + this.KFF_PTCH2THR.TabIndex = 13; + // + // label83 + // + this.label83.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label83.Location = new System.Drawing.Point(6, 17); + this.label83.Name = "label83"; + this.label83.Size = new System.Drawing.Size(36, 13); + this.label83.TabIndex = 14; + this.label83.Text = "P to T"; + // + // KFF_RDDRMIX + // + this.KFF_RDDRMIX.Location = new System.Drawing.Point(111, 59); + this.KFF_RDDRMIX.Name = "KFF_RDDRMIX"; + this.KFF_RDDRMIX.Size = new System.Drawing.Size(78, 20); + this.KFF_RDDRMIX.TabIndex = 9; + // + // label78 + // + this.label78.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label78.Location = new System.Drawing.Point(6, 63); + this.label78.Name = "label78"; + this.label78.Size = new System.Drawing.Size(61, 13); + this.label78.TabIndex = 15; + this.label78.Text = "Rudder Mix"; + // + // KFF_PTCHCOMP + // + this.KFF_PTCHCOMP.Location = new System.Drawing.Point(111, 36); + this.KFF_PTCHCOMP.Name = "KFF_PTCHCOMP"; + this.KFF_PTCHCOMP.Size = new System.Drawing.Size(78, 20); + this.KFF_PTCHCOMP.TabIndex = 7; + // + // label81 + // + this.label81.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label81.Location = new System.Drawing.Point(6, 40); + this.label81.Name = "label81"; + this.label81.Size = new System.Drawing.Size(61, 13); + this.label81.TabIndex = 16; + this.label81.Text = "Pitch Comp"; + // + // groupBox14 + // + this.groupBox14.Controls.Add(this.ENRGY2THR_IMAX); + this.groupBox14.Controls.Add(this.label73); + this.groupBox14.Controls.Add(this.ENRGY2THR_D); + this.groupBox14.Controls.Add(this.label74); + this.groupBox14.Controls.Add(this.ENRGY2THR_I); + this.groupBox14.Controls.Add(this.label75); + this.groupBox14.Controls.Add(this.ENRGY2THR_P); + this.groupBox14.Controls.Add(this.label76); + this.groupBox14.Location = new System.Drawing.Point(12, 231); + this.groupBox14.Name = "groupBox14"; + this.groupBox14.Size = new System.Drawing.Size(195, 108); + this.groupBox14.TabIndex = 17; + this.groupBox14.TabStop = false; + this.groupBox14.Text = "Energy/Alt Pid"; + // + // ENRGY2THR_IMAX + // + this.ENRGY2THR_IMAX.Location = new System.Drawing.Point(111, 82); + this.ENRGY2THR_IMAX.Name = "ENRGY2THR_IMAX"; + this.ENRGY2THR_IMAX.Size = new System.Drawing.Size(78, 20); + this.ENRGY2THR_IMAX.TabIndex = 11; + // + // label73 + // + this.label73.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label73.Location = new System.Drawing.Point(6, 86); + this.label73.Name = "label73"; + this.label73.Size = new System.Drawing.Size(54, 13); + this.label73.TabIndex = 12; + this.label73.Text = "INT_MAX"; + // + // ENRGY2THR_D + // + this.ENRGY2THR_D.Location = new System.Drawing.Point(111, 59); + this.ENRGY2THR_D.Name = "ENRGY2THR_D"; + this.ENRGY2THR_D.Size = new System.Drawing.Size(78, 20); + this.ENRGY2THR_D.TabIndex = 9; + // + // label74 + // + this.label74.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label74.Location = new System.Drawing.Point(6, 63); + this.label74.Name = "label74"; + this.label74.Size = new System.Drawing.Size(15, 13); + this.label74.TabIndex = 13; + this.label74.Text = "D"; + // + // ENRGY2THR_I + // + this.ENRGY2THR_I.Location = new System.Drawing.Point(111, 36); + this.ENRGY2THR_I.Name = "ENRGY2THR_I"; + this.ENRGY2THR_I.Size = new System.Drawing.Size(78, 20); + this.ENRGY2THR_I.TabIndex = 7; + // + // label75 + // + this.label75.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label75.Location = new System.Drawing.Point(6, 40); + this.label75.Name = "label75"; + this.label75.Size = new System.Drawing.Size(10, 13); + this.label75.TabIndex = 14; + this.label75.Text = "I"; + // + // ENRGY2THR_P + // + this.ENRGY2THR_P.Location = new System.Drawing.Point(111, 13); + this.ENRGY2THR_P.Name = "ENRGY2THR_P"; + this.ENRGY2THR_P.Size = new System.Drawing.Size(78, 20); + this.ENRGY2THR_P.TabIndex = 5; + // + // label76 + // + this.label76.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label76.Location = new System.Drawing.Point(6, 17); + this.label76.Name = "label76"; + this.label76.Size = new System.Drawing.Size(14, 13); + this.label76.TabIndex = 15; + this.label76.Text = "P"; + // + // groupBox13 + // + this.groupBox13.Controls.Add(this.ALT2PTCH_IMAX); + this.groupBox13.Controls.Add(this.label69); + this.groupBox13.Controls.Add(this.ALT2PTCH_D); + this.groupBox13.Controls.Add(this.label70); + this.groupBox13.Controls.Add(this.ALT2PTCH_I); + this.groupBox13.Controls.Add(this.label71); + this.groupBox13.Controls.Add(this.ALT2PTCH_P); + this.groupBox13.Controls.Add(this.label72); + this.groupBox13.Location = new System.Drawing.Point(414, 123); + this.groupBox13.Name = "groupBox13"; + this.groupBox13.Size = new System.Drawing.Size(195, 108); + this.groupBox13.TabIndex = 18; + this.groupBox13.TabStop = false; + this.groupBox13.Text = "Nav Pitch Alt Pid"; + // + // ALT2PTCH_IMAX + // + this.ALT2PTCH_IMAX.Location = new System.Drawing.Point(111, 82); + this.ALT2PTCH_IMAX.Name = "ALT2PTCH_IMAX"; + this.ALT2PTCH_IMAX.Size = new System.Drawing.Size(78, 20); + this.ALT2PTCH_IMAX.TabIndex = 0; + // + // label69 + // + this.label69.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label69.Location = new System.Drawing.Point(6, 86); + this.label69.Name = "label69"; + this.label69.Size = new System.Drawing.Size(54, 13); + this.label69.TabIndex = 1; + this.label69.Text = "INT_MAX"; + // + // ALT2PTCH_D + // + this.ALT2PTCH_D.Location = new System.Drawing.Point(111, 59); + this.ALT2PTCH_D.Name = "ALT2PTCH_D"; + this.ALT2PTCH_D.Size = new System.Drawing.Size(78, 20); + this.ALT2PTCH_D.TabIndex = 2; + // + // label70 + // + this.label70.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label70.Location = new System.Drawing.Point(6, 63); + this.label70.Name = "label70"; + this.label70.Size = new System.Drawing.Size(15, 13); + this.label70.TabIndex = 3; + this.label70.Text = "D"; + // + // ALT2PTCH_I + // + this.ALT2PTCH_I.Location = new System.Drawing.Point(111, 36); + this.ALT2PTCH_I.Name = "ALT2PTCH_I"; + this.ALT2PTCH_I.Size = new System.Drawing.Size(78, 20); + this.ALT2PTCH_I.TabIndex = 4; + // + // label71 + // + this.label71.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label71.Location = new System.Drawing.Point(6, 40); + this.label71.Name = "label71"; + this.label71.Size = new System.Drawing.Size(10, 13); + this.label71.TabIndex = 5; + this.label71.Text = "I"; + // + // ALT2PTCH_P + // + this.ALT2PTCH_P.Location = new System.Drawing.Point(111, 13); + this.ALT2PTCH_P.Name = "ALT2PTCH_P"; + this.ALT2PTCH_P.Size = new System.Drawing.Size(78, 20); + this.ALT2PTCH_P.TabIndex = 6; + // + // label72 + // + this.label72.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label72.Location = new System.Drawing.Point(6, 17); + this.label72.Name = "label72"; + this.label72.Size = new System.Drawing.Size(14, 13); + this.label72.TabIndex = 7; + this.label72.Text = "P"; + // + // groupBox12 + // + this.groupBox12.Controls.Add(this.ARSP2PTCH_IMAX); + this.groupBox12.Controls.Add(this.label65); + this.groupBox12.Controls.Add(this.ARSP2PTCH_D); + this.groupBox12.Controls.Add(this.label66); + this.groupBox12.Controls.Add(this.ARSP2PTCH_I); + this.groupBox12.Controls.Add(this.label67); + this.groupBox12.Controls.Add(this.ARSP2PTCH_P); + this.groupBox12.Controls.Add(this.label68); + this.groupBox12.Location = new System.Drawing.Point(213, 123); + this.groupBox12.Name = "groupBox12"; + this.groupBox12.Size = new System.Drawing.Size(195, 108); + this.groupBox12.TabIndex = 19; + this.groupBox12.TabStop = false; + this.groupBox12.Text = "Nav Pitch AS Pid"; + // + // ARSP2PTCH_IMAX + // + this.ARSP2PTCH_IMAX.Location = new System.Drawing.Point(111, 82); + this.ARSP2PTCH_IMAX.Name = "ARSP2PTCH_IMAX"; + this.ARSP2PTCH_IMAX.Size = new System.Drawing.Size(78, 20); + this.ARSP2PTCH_IMAX.TabIndex = 0; + // + // label65 + // + this.label65.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label65.Location = new System.Drawing.Point(6, 86); + this.label65.Name = "label65"; + this.label65.Size = new System.Drawing.Size(54, 13); + this.label65.TabIndex = 1; + this.label65.Text = "INT_MAX"; + // + // ARSP2PTCH_D + // + this.ARSP2PTCH_D.Location = new System.Drawing.Point(111, 59); + this.ARSP2PTCH_D.Name = "ARSP2PTCH_D"; + this.ARSP2PTCH_D.Size = new System.Drawing.Size(78, 20); + this.ARSP2PTCH_D.TabIndex = 2; + // + // label66 + // + this.label66.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label66.Location = new System.Drawing.Point(6, 63); + this.label66.Name = "label66"; + this.label66.Size = new System.Drawing.Size(15, 13); + this.label66.TabIndex = 3; + this.label66.Text = "D"; + // + // ARSP2PTCH_I + // + this.ARSP2PTCH_I.Location = new System.Drawing.Point(111, 36); + this.ARSP2PTCH_I.Name = "ARSP2PTCH_I"; + this.ARSP2PTCH_I.Size = new System.Drawing.Size(78, 20); + this.ARSP2PTCH_I.TabIndex = 4; + // + // label67 + // + this.label67.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label67.Location = new System.Drawing.Point(6, 40); + this.label67.Name = "label67"; + this.label67.Size = new System.Drawing.Size(10, 13); + this.label67.TabIndex = 5; + this.label67.Text = "I"; + // + // ARSP2PTCH_P + // + this.ARSP2PTCH_P.Location = new System.Drawing.Point(111, 13); + this.ARSP2PTCH_P.Name = "ARSP2PTCH_P"; + this.ARSP2PTCH_P.Size = new System.Drawing.Size(78, 20); + this.ARSP2PTCH_P.TabIndex = 6; + // + // label68 + // + this.label68.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label68.Location = new System.Drawing.Point(6, 17); + this.label68.Name = "label68"; + this.label68.Size = new System.Drawing.Size(14, 13); + this.label68.TabIndex = 7; + this.label68.Text = "P"; + // + // groupBox11 + // + this.groupBox11.Controls.Add(this.HDNG2RLL_IMAX); + this.groupBox11.Controls.Add(this.label61); + this.groupBox11.Controls.Add(this.HDNG2RLL_D); + this.groupBox11.Controls.Add(this.label62); + this.groupBox11.Controls.Add(this.HDNG2RLL_I); + this.groupBox11.Controls.Add(this.label63); + this.groupBox11.Controls.Add(this.HDNG2RLL_P); + this.groupBox11.Controls.Add(this.label64); + this.groupBox11.Location = new System.Drawing.Point(12, 123); + this.groupBox11.Name = "groupBox11"; + this.groupBox11.Size = new System.Drawing.Size(195, 108); + this.groupBox11.TabIndex = 20; + this.groupBox11.TabStop = false; + this.groupBox11.Text = "Nav Roll Pid"; + // + // HDNG2RLL_IMAX + // + this.HDNG2RLL_IMAX.Location = new System.Drawing.Point(111, 82); + this.HDNG2RLL_IMAX.Name = "HDNG2RLL_IMAX"; + this.HDNG2RLL_IMAX.Size = new System.Drawing.Size(78, 20); + this.HDNG2RLL_IMAX.TabIndex = 11; + // + // label61 + // + this.label61.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label61.Location = new System.Drawing.Point(6, 86); + this.label61.Name = "label61"; + this.label61.Size = new System.Drawing.Size(54, 13); + this.label61.TabIndex = 12; + this.label61.Text = "INT_MAX"; + // + // HDNG2RLL_D + // + this.HDNG2RLL_D.Location = new System.Drawing.Point(111, 59); + this.HDNG2RLL_D.Name = "HDNG2RLL_D"; + this.HDNG2RLL_D.Size = new System.Drawing.Size(78, 20); + this.HDNG2RLL_D.TabIndex = 9; + // + // label62 + // + this.label62.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label62.Location = new System.Drawing.Point(6, 63); + this.label62.Name = "label62"; + this.label62.Size = new System.Drawing.Size(15, 13); + this.label62.TabIndex = 13; + this.label62.Text = "D"; + // + // HDNG2RLL_I + // + this.HDNG2RLL_I.Location = new System.Drawing.Point(111, 36); + this.HDNG2RLL_I.Name = "HDNG2RLL_I"; + this.HDNG2RLL_I.Size = new System.Drawing.Size(78, 20); + this.HDNG2RLL_I.TabIndex = 7; + // + // label63 + // + this.label63.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label63.Location = new System.Drawing.Point(6, 40); + this.label63.Name = "label63"; + this.label63.Size = new System.Drawing.Size(10, 13); + this.label63.TabIndex = 14; + this.label63.Text = "I"; + // + // HDNG2RLL_P + // + this.HDNG2RLL_P.Location = new System.Drawing.Point(111, 13); + this.HDNG2RLL_P.Name = "HDNG2RLL_P"; + this.HDNG2RLL_P.Size = new System.Drawing.Size(78, 20); + this.HDNG2RLL_P.TabIndex = 5; + // + // label64 + // + this.label64.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label64.Location = new System.Drawing.Point(6, 17); + this.label64.Name = "label64"; + this.label64.Size = new System.Drawing.Size(14, 13); + this.label64.TabIndex = 15; + this.label64.Text = "P"; + // + // groupBox10 + // + this.groupBox10.Controls.Add(this.YW2SRV_IMAX); + this.groupBox10.Controls.Add(this.label57); + this.groupBox10.Controls.Add(this.YW2SRV_D); + this.groupBox10.Controls.Add(this.label58); + this.groupBox10.Controls.Add(this.YW2SRV_I); + this.groupBox10.Controls.Add(this.label59); + this.groupBox10.Controls.Add(this.YW2SRV_P); + this.groupBox10.Controls.Add(this.label60); + this.groupBox10.Location = new System.Drawing.Point(414, 15); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(195, 108); + this.groupBox10.TabIndex = 21; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "Servo Yaw Pid"; + // + // YW2SRV_IMAX + // + this.YW2SRV_IMAX.Location = new System.Drawing.Point(111, 82); + this.YW2SRV_IMAX.Name = "YW2SRV_IMAX"; + this.YW2SRV_IMAX.Size = new System.Drawing.Size(78, 20); + this.YW2SRV_IMAX.TabIndex = 11; + // + // label57 + // + this.label57.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label57.Location = new System.Drawing.Point(6, 86); + this.label57.Name = "label57"; + this.label57.Size = new System.Drawing.Size(54, 13); + this.label57.TabIndex = 12; + this.label57.Text = "INT_MAX"; + // + // YW2SRV_D + // + this.YW2SRV_D.Location = new System.Drawing.Point(111, 59); + this.YW2SRV_D.Name = "YW2SRV_D"; + this.YW2SRV_D.Size = new System.Drawing.Size(78, 20); + this.YW2SRV_D.TabIndex = 9; + // + // label58 + // + this.label58.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label58.Location = new System.Drawing.Point(6, 63); + this.label58.Name = "label58"; + this.label58.Size = new System.Drawing.Size(15, 13); + this.label58.TabIndex = 13; + this.label58.Text = "D"; + // + // YW2SRV_I + // + this.YW2SRV_I.Location = new System.Drawing.Point(111, 36); + this.YW2SRV_I.Name = "YW2SRV_I"; + this.YW2SRV_I.Size = new System.Drawing.Size(78, 20); + this.YW2SRV_I.TabIndex = 7; + // + // label59 + // + this.label59.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label59.Location = new System.Drawing.Point(6, 40); + this.label59.Name = "label59"; + this.label59.Size = new System.Drawing.Size(10, 13); + this.label59.TabIndex = 14; + this.label59.Text = "I"; + // + // YW2SRV_P + // + this.YW2SRV_P.Location = new System.Drawing.Point(111, 13); + this.YW2SRV_P.Name = "YW2SRV_P"; + this.YW2SRV_P.Size = new System.Drawing.Size(78, 20); + this.YW2SRV_P.TabIndex = 5; + // + // label60 + // + this.label60.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label60.Location = new System.Drawing.Point(6, 17); + this.label60.Name = "label60"; + this.label60.Size = new System.Drawing.Size(14, 13); + this.label60.TabIndex = 15; + this.label60.Text = "P"; + // + // groupBox9 + // + this.groupBox9.Controls.Add(this.PTCH2SRV_IMAX); + this.groupBox9.Controls.Add(this.label53); + this.groupBox9.Controls.Add(this.PTCH2SRV_D); + this.groupBox9.Controls.Add(this.label54); + this.groupBox9.Controls.Add(this.PTCH2SRV_I); + this.groupBox9.Controls.Add(this.label55); + this.groupBox9.Controls.Add(this.PTCH2SRV_P); + this.groupBox9.Controls.Add(this.label56); + this.groupBox9.Location = new System.Drawing.Point(213, 15); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(195, 108); + this.groupBox9.TabIndex = 22; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "Servo Pitch Pid"; + // + // PTCH2SRV_IMAX + // + this.PTCH2SRV_IMAX.Location = new System.Drawing.Point(111, 82); + this.PTCH2SRV_IMAX.Name = "PTCH2SRV_IMAX"; + this.PTCH2SRV_IMAX.Size = new System.Drawing.Size(78, 20); + this.PTCH2SRV_IMAX.TabIndex = 11; + // + // label53 + // + this.label53.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label53.Location = new System.Drawing.Point(6, 86); + this.label53.Name = "label53"; + this.label53.Size = new System.Drawing.Size(54, 13); + this.label53.TabIndex = 12; + this.label53.Text = "INT_MAX"; + // + // PTCH2SRV_D + // + this.PTCH2SRV_D.Location = new System.Drawing.Point(111, 59); + this.PTCH2SRV_D.Name = "PTCH2SRV_D"; + this.PTCH2SRV_D.Size = new System.Drawing.Size(78, 20); + this.PTCH2SRV_D.TabIndex = 9; + // + // label54 + // + this.label54.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label54.Location = new System.Drawing.Point(6, 63); + this.label54.Name = "label54"; + this.label54.Size = new System.Drawing.Size(15, 13); + this.label54.TabIndex = 13; + this.label54.Text = "D"; + // + // PTCH2SRV_I + // + this.PTCH2SRV_I.Location = new System.Drawing.Point(111, 36); + this.PTCH2SRV_I.Name = "PTCH2SRV_I"; + this.PTCH2SRV_I.Size = new System.Drawing.Size(78, 20); + this.PTCH2SRV_I.TabIndex = 7; + // + // label55 + // + this.label55.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label55.Location = new System.Drawing.Point(6, 40); + this.label55.Name = "label55"; + this.label55.Size = new System.Drawing.Size(10, 13); + this.label55.TabIndex = 14; + this.label55.Text = "I"; + // + // PTCH2SRV_P + // + this.PTCH2SRV_P.Location = new System.Drawing.Point(111, 13); + this.PTCH2SRV_P.Name = "PTCH2SRV_P"; + this.PTCH2SRV_P.Size = new System.Drawing.Size(78, 20); + this.PTCH2SRV_P.TabIndex = 5; + // + // label56 + // + this.label56.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label56.Location = new System.Drawing.Point(6, 17); + this.label56.Name = "label56"; + this.label56.Size = new System.Drawing.Size(14, 13); + this.label56.TabIndex = 15; + this.label56.Text = "P"; + // + // groupBox8 + // + this.groupBox8.Controls.Add(this.RLL2SRV_IMAX); + this.groupBox8.Controls.Add(this.label49); + this.groupBox8.Controls.Add(this.RLL2SRV_D); + this.groupBox8.Controls.Add(this.label50); + this.groupBox8.Controls.Add(this.RLL2SRV_I); + this.groupBox8.Controls.Add(this.label51); + this.groupBox8.Controls.Add(this.RLL2SRV_P); + this.groupBox8.Controls.Add(this.label52); + this.groupBox8.Location = new System.Drawing.Point(12, 15); + this.groupBox8.Name = "groupBox8"; + this.groupBox8.Size = new System.Drawing.Size(195, 108); + this.groupBox8.TabIndex = 23; + this.groupBox8.TabStop = false; + this.groupBox8.Text = "Servo Roll Pid"; + // + // RLL2SRV_IMAX + // + this.RLL2SRV_IMAX.Location = new System.Drawing.Point(111, 82); + this.RLL2SRV_IMAX.Name = "RLL2SRV_IMAX"; + this.RLL2SRV_IMAX.Size = new System.Drawing.Size(78, 20); + this.RLL2SRV_IMAX.TabIndex = 11; + // + // label49 + // + this.label49.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label49.Location = new System.Drawing.Point(6, 86); + this.label49.Name = "label49"; + this.label49.Size = new System.Drawing.Size(54, 13); + this.label49.TabIndex = 12; + this.label49.Text = "INT_MAX"; + // + // RLL2SRV_D + // + this.RLL2SRV_D.Location = new System.Drawing.Point(111, 59); + this.RLL2SRV_D.Name = "RLL2SRV_D"; + this.RLL2SRV_D.Size = new System.Drawing.Size(78, 20); + this.RLL2SRV_D.TabIndex = 9; + // + // label50 + // + this.label50.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label50.Location = new System.Drawing.Point(6, 63); + this.label50.Name = "label50"; + this.label50.Size = new System.Drawing.Size(15, 13); + this.label50.TabIndex = 13; + this.label50.Text = "D"; + // + // RLL2SRV_I + // + this.RLL2SRV_I.Location = new System.Drawing.Point(111, 36); + this.RLL2SRV_I.Name = "RLL2SRV_I"; + this.RLL2SRV_I.Size = new System.Drawing.Size(78, 20); + this.RLL2SRV_I.TabIndex = 7; + // + // label51 + // + this.label51.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label51.Location = new System.Drawing.Point(6, 40); + this.label51.Name = "label51"; + this.label51.Size = new System.Drawing.Size(10, 13); + this.label51.TabIndex = 14; + this.label51.Text = "I"; + // + // RLL2SRV_P + // + this.RLL2SRV_P.Location = new System.Drawing.Point(111, 13); + this.RLL2SRV_P.Name = "RLL2SRV_P"; + this.RLL2SRV_P.Size = new System.Drawing.Size(78, 20); + this.RLL2SRV_P.TabIndex = 5; + // + // label52 + // + this.label52.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label52.Location = new System.Drawing.Point(6, 17); + this.label52.Name = "label52"; + this.label52.Size = new System.Drawing.Size(14, 13); + this.label52.TabIndex = 15; + this.label52.Text = "P"; + // + // ConfigArduplane + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox3); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox15); + this.Controls.Add(this.groupBox16); + this.Controls.Add(this.groupBox14); + this.Controls.Add(this.groupBox13); + this.Controls.Add(this.groupBox12); + this.Controls.Add(this.groupBox11); + this.Controls.Add(this.groupBox10); + this.Controls.Add(this.groupBox9); + this.Controls.Add(this.groupBox8); + this.Name = "ConfigArduplane"; + this.Size = new System.Drawing.Size(621, 456); + this.groupBox3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.THR_FS_VALUE)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_MAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.THR_MIN)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.TRIM_THROTTLE)).EndInit(); + this.groupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ARSPD_RATIO)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ARSPD_FBW_MAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ARSPD_FBW_MIN)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.TRIM_ARSPD_CM)).EndInit(); + this.groupBox2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.LIM_PITCH_MIN)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.LIM_PITCH_MAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.LIM_ROLL_CD)).EndInit(); + this.groupBox15.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.XTRK_ANGLE_CD)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.XTRK_GAIN_SC)).EndInit(); + this.groupBox16.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.KFF_PTCH2THR)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.KFF_RDDRMIX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.KFF_PTCHCOMP)).EndInit(); + this.groupBox14.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ENRGY2THR_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ENRGY2THR_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ENRGY2THR_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ENRGY2THR_P)).EndInit(); + this.groupBox13.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ALT2PTCH_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ALT2PTCH_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ALT2PTCH_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ALT2PTCH_P)).EndInit(); + this.groupBox12.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.ARSP2PTCH_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ARSP2PTCH_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ARSP2PTCH_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ARSP2PTCH_P)).EndInit(); + this.groupBox11.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.HDNG2RLL_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.HDNG2RLL_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.HDNG2RLL_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.HDNG2RLL_P)).EndInit(); + this.groupBox10.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.YW2SRV_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.YW2SRV_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.YW2SRV_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.YW2SRV_P)).EndInit(); + this.groupBox9.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.PTCH2SRV_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PTCH2SRV_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PTCH2SRV_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PTCH2SRV_P)).EndInit(); + this.groupBox8.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.RLL2SRV_IMAX)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RLL2SRV_D)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RLL2SRV_I)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RLL2SRV_P)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.NumericUpDown THR_FS_VALUE; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.NumericUpDown THR_MAX; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.NumericUpDown THR_MIN; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.NumericUpDown TRIM_THROTTLE; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.NumericUpDown ARSPD_RATIO; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.NumericUpDown ARSPD_FBW_MAX; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.NumericUpDown ARSPD_FBW_MIN; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.NumericUpDown TRIM_ARSPD_CM; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.NumericUpDown LIM_PITCH_MIN; + private System.Windows.Forms.Label label39; + private System.Windows.Forms.NumericUpDown LIM_PITCH_MAX; + private System.Windows.Forms.Label label38; + private System.Windows.Forms.NumericUpDown LIM_ROLL_CD; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.GroupBox groupBox15; + private System.Windows.Forms.NumericUpDown XTRK_ANGLE_CD; + private System.Windows.Forms.Label label79; + private System.Windows.Forms.NumericUpDown XTRK_GAIN_SC; + private System.Windows.Forms.Label label80; + private System.Windows.Forms.GroupBox groupBox16; + private System.Windows.Forms.NumericUpDown KFF_PTCH2THR; + private System.Windows.Forms.Label label83; + private System.Windows.Forms.NumericUpDown KFF_RDDRMIX; + private System.Windows.Forms.Label label78; + private System.Windows.Forms.NumericUpDown KFF_PTCHCOMP; + private System.Windows.Forms.Label label81; + private System.Windows.Forms.GroupBox groupBox14; + private System.Windows.Forms.NumericUpDown ENRGY2THR_IMAX; + private System.Windows.Forms.Label label73; + private System.Windows.Forms.NumericUpDown ENRGY2THR_D; + private System.Windows.Forms.Label label74; + private System.Windows.Forms.NumericUpDown ENRGY2THR_I; + private System.Windows.Forms.Label label75; + private System.Windows.Forms.NumericUpDown ENRGY2THR_P; + private System.Windows.Forms.Label label76; + private System.Windows.Forms.GroupBox groupBox13; + private System.Windows.Forms.NumericUpDown ALT2PTCH_IMAX; + private System.Windows.Forms.Label label69; + private System.Windows.Forms.NumericUpDown ALT2PTCH_D; + private System.Windows.Forms.Label label70; + private System.Windows.Forms.NumericUpDown ALT2PTCH_I; + private System.Windows.Forms.Label label71; + private System.Windows.Forms.NumericUpDown ALT2PTCH_P; + private System.Windows.Forms.Label label72; + private System.Windows.Forms.GroupBox groupBox12; + private System.Windows.Forms.NumericUpDown ARSP2PTCH_IMAX; + private System.Windows.Forms.Label label65; + private System.Windows.Forms.NumericUpDown ARSP2PTCH_D; + private System.Windows.Forms.Label label66; + private System.Windows.Forms.NumericUpDown ARSP2PTCH_I; + private System.Windows.Forms.Label label67; + private System.Windows.Forms.NumericUpDown ARSP2PTCH_P; + private System.Windows.Forms.Label label68; + private System.Windows.Forms.GroupBox groupBox11; + private System.Windows.Forms.NumericUpDown HDNG2RLL_IMAX; + private System.Windows.Forms.Label label61; + private System.Windows.Forms.NumericUpDown HDNG2RLL_D; + private System.Windows.Forms.Label label62; + private System.Windows.Forms.NumericUpDown HDNG2RLL_I; + private System.Windows.Forms.Label label63; + private System.Windows.Forms.NumericUpDown HDNG2RLL_P; + private System.Windows.Forms.Label label64; + private System.Windows.Forms.GroupBox groupBox10; + private System.Windows.Forms.NumericUpDown YW2SRV_IMAX; + private System.Windows.Forms.Label label57; + private System.Windows.Forms.NumericUpDown YW2SRV_D; + private System.Windows.Forms.Label label58; + private System.Windows.Forms.NumericUpDown YW2SRV_I; + private System.Windows.Forms.Label label59; + private System.Windows.Forms.NumericUpDown YW2SRV_P; + private System.Windows.Forms.Label label60; + private System.Windows.Forms.GroupBox groupBox9; + private System.Windows.Forms.NumericUpDown PTCH2SRV_IMAX; + private System.Windows.Forms.Label label53; + private System.Windows.Forms.NumericUpDown PTCH2SRV_D; + private System.Windows.Forms.Label label54; + private System.Windows.Forms.NumericUpDown PTCH2SRV_I; + private System.Windows.Forms.Label label55; + private System.Windows.Forms.NumericUpDown PTCH2SRV_P; + private System.Windows.Forms.Label label56; + private System.Windows.Forms.GroupBox groupBox8; + private System.Windows.Forms.NumericUpDown RLL2SRV_IMAX; + private System.Windows.Forms.Label label49; + private System.Windows.Forms.NumericUpDown RLL2SRV_D; + private System.Windows.Forms.Label label50; + private System.Windows.Forms.NumericUpDown RLL2SRV_I; + private System.Windows.Forms.Label label51; + private System.Windows.Forms.NumericUpDown RLL2SRV_P; + private System.Windows.Forms.Label label52; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.cs new file mode 100644 index 000000000..8a4ac7a73 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class ConfigArduplane : UserControl + { + public ConfigArduplane() + { + InitializeComponent(); + } + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.resx new file mode 100644 index 000000000..7080a7d11 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.Designer.cs new file mode 100644 index 000000000..268186208 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.Designer.cs @@ -0,0 +1,300 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigBatteryMonitoring + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigBatteryMonitoring)); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.label31 = new System.Windows.Forms.Label(); + this.label32 = new System.Windows.Forms.Label(); + this.label33 = new System.Windows.Forms.Label(); + this.TXT_ampspervolt = new System.Windows.Forms.TextBox(); + this.label34 = new System.Windows.Forms.Label(); + this.TXT_divider = new System.Windows.Forms.TextBox(); + this.label35 = new System.Windows.Forms.Label(); + this.TXT_voltage = new System.Windows.Forms.TextBox(); + this.TXT_inputvoltage = new System.Windows.Forms.TextBox(); + this.TXT_measuredvoltage = new System.Windows.Forms.TextBox(); + this.label47 = new System.Windows.Forms.Label(); + this.CMB_batmonsensortype = new System.Windows.Forms.ComboBox(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.label29 = new System.Windows.Forms.Label(); + this.label30 = new System.Windows.Forms.Label(); + this.TXT_battcapacity = new System.Windows.Forms.TextBox(); + this.CMB_batmontype = new System.Windows.Forms.ComboBox(); + this.pictureBox5 = new System.Windows.Forms.PictureBox(); + this.groupBox4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit(); + this.SuspendLayout(); + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.label31); + this.groupBox4.Controls.Add(this.label32); + this.groupBox4.Controls.Add(this.label33); + this.groupBox4.Controls.Add(this.TXT_ampspervolt); + this.groupBox4.Controls.Add(this.label34); + this.groupBox4.Controls.Add(this.TXT_divider); + this.groupBox4.Controls.Add(this.label35); + this.groupBox4.Controls.Add(this.TXT_voltage); + this.groupBox4.Controls.Add(this.TXT_inputvoltage); + this.groupBox4.Controls.Add(this.TXT_measuredvoltage); + this.groupBox4.Location = new System.Drawing.Point(14, 172); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(238, 131); + this.groupBox4.TabIndex = 50; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "Calibration"; + // + // label31 + // + this.label31.AutoSize = true; + this.label31.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label31.Location = new System.Drawing.Point(5, 16); + this.label31.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label31.Name = "label31"; + this.label31.Size = new System.Drawing.Size(110, 13); + this.label31.TabIndex = 29; + this.label31.Text = "1. APM Input voltage:"; + // + // label32 + // + this.label32.AutoSize = true; + this.label32.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label32.Location = new System.Drawing.Point(5, 38); + this.label32.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label32.Name = "label32"; + this.label32.Size = new System.Drawing.Size(142, 13); + this.label32.TabIndex = 30; + this.label32.Text = "2. Measured battery voltage:"; + // + // label33 + // + this.label33.AutoSize = true; + this.label33.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label33.Location = new System.Drawing.Point(5, 60); + this.label33.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(135, 13); + this.label33.TabIndex = 31; + this.label33.Text = "3. Battery voltage (Calced):"; + // + // TXT_ampspervolt + // + this.TXT_ampspervolt.Location = new System.Drawing.Point(149, 100); + this.TXT_ampspervolt.Margin = new System.Windows.Forms.Padding(2); + this.TXT_ampspervolt.Name = "TXT_ampspervolt"; + this.TXT_ampspervolt.Size = new System.Drawing.Size(76, 20); + this.TXT_ampspervolt.TabIndex = 38; + // + // label34 + // + this.label34.AutoSize = true; + this.label34.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label34.Location = new System.Drawing.Point(5, 81); + this.label34.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(134, 13); + this.label34.TabIndex = 32; + this.label34.Text = "4. Voltage divider (Calced):"; + // + // TXT_divider + // + this.TXT_divider.Location = new System.Drawing.Point(149, 78); + this.TXT_divider.Margin = new System.Windows.Forms.Padding(2); + this.TXT_divider.Name = "TXT_divider"; + this.TXT_divider.Size = new System.Drawing.Size(76, 20); + this.TXT_divider.TabIndex = 37; + // + // label35 + // + this.label35.AutoSize = true; + this.label35.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label35.Location = new System.Drawing.Point(6, 103); + this.label35.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label35.Name = "label35"; + this.label35.Size = new System.Drawing.Size(101, 13); + this.label35.TabIndex = 33; + this.label35.Text = "5. Amperes per volt:"; + // + // TXT_voltage + // + this.TXT_voltage.Location = new System.Drawing.Point(149, 57); + this.TXT_voltage.Margin = new System.Windows.Forms.Padding(2); + this.TXT_voltage.Name = "TXT_voltage"; + this.TXT_voltage.ReadOnly = true; + this.TXT_voltage.Size = new System.Drawing.Size(76, 20); + this.TXT_voltage.TabIndex = 36; + // + // TXT_inputvoltage + // + this.TXT_inputvoltage.Location = new System.Drawing.Point(149, 13); + this.TXT_inputvoltage.Margin = new System.Windows.Forms.Padding(2); + this.TXT_inputvoltage.Name = "TXT_inputvoltage"; + this.TXT_inputvoltage.Size = new System.Drawing.Size(76, 20); + this.TXT_inputvoltage.TabIndex = 34; + // + // TXT_measuredvoltage + // + this.TXT_measuredvoltage.Location = new System.Drawing.Point(149, 35); + this.TXT_measuredvoltage.Margin = new System.Windows.Forms.Padding(2); + this.TXT_measuredvoltage.Name = "TXT_measuredvoltage"; + this.TXT_measuredvoltage.Size = new System.Drawing.Size(76, 20); + this.TXT_measuredvoltage.TabIndex = 35; + // + // label47 + // + this.label47.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label47.Location = new System.Drawing.Point(106, 71); + this.label47.Name = "label47"; + this.label47.Size = new System.Drawing.Size(42, 13); + this.label47.TabIndex = 49; + this.label47.Text = "Sensor"; + // + // CMB_batmonsensortype + // + this.CMB_batmonsensortype.FormattingEnabled = true; + this.CMB_batmonsensortype.Items.AddRange(new object[] { + "0: Other", + "1: AttoPilot 45A", + "2: AttoPilot 90A", + "3: AttoPilot 180A"}); + this.CMB_batmonsensortype.Location = new System.Drawing.Point(160, 68); + this.CMB_batmonsensortype.Name = "CMB_batmonsensortype"; + this.CMB_batmonsensortype.Size = new System.Drawing.Size(121, 21); + this.CMB_batmonsensortype.TabIndex = 48; + // + // textBox3 + // + this.textBox3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); + this.textBox3.Location = new System.Drawing.Point(282, 172); + this.textBox3.Margin = new System.Windows.Forms.Padding(2); + this.textBox3.Multiline = true; + this.textBox3.Name = "textBox3"; + this.textBox3.ReadOnly = true; + this.textBox3.Size = new System.Drawing.Size(219, 131); + this.textBox3.TabIndex = 47; + this.textBox3.Text = resources.GetString("textBox3.Text"); + // + // label29 + // + this.label29.AutoSize = true; + this.label29.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label29.Location = new System.Drawing.Point(288, 45); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(48, 13); + this.label29.TabIndex = 43; + this.label29.Text = "Capacity"; + // + // label30 + // + this.label30.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label30.Location = new System.Drawing.Point(106, 45); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(42, 13); + this.label30.TabIndex = 44; + this.label30.Text = "Monitor"; + // + // TXT_battcapacity + // + this.TXT_battcapacity.Location = new System.Drawing.Point(349, 42); + this.TXT_battcapacity.Name = "TXT_battcapacity"; + this.TXT_battcapacity.Size = new System.Drawing.Size(83, 20); + this.TXT_battcapacity.TabIndex = 45; + // + // CMB_batmontype + // + this.CMB_batmontype.FormattingEnabled = true; + this.CMB_batmontype.Items.AddRange(new object[] { + "0: Disabled", + "3: Battery Volts", + "4: Volts & Current"}); + this.CMB_batmontype.Location = new System.Drawing.Point(160, 41); + this.CMB_batmontype.Name = "CMB_batmontype"; + this.CMB_batmontype.Size = new System.Drawing.Size(121, 21); + this.CMB_batmontype.TabIndex = 46; + // + // pictureBox5 + // + this.pictureBox5.BackColor = System.Drawing.Color.White; + this.pictureBox5.BackgroundImage = global::ArdupilotMega.Properties.Resources.attocurrent; + this.pictureBox5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pictureBox5.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox5.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.pictureBox5.Location = new System.Drawing.Point(14, 16); + this.pictureBox5.Name = "pictureBox5"; + this.pictureBox5.Size = new System.Drawing.Size(75, 75); + this.pictureBox5.TabIndex = 42; + this.pictureBox5.TabStop = false; + // + // ConfigBatteryMonitoring + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox4); + this.Controls.Add(this.label47); + this.Controls.Add(this.CMB_batmonsensortype); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.label29); + this.Controls.Add(this.label30); + this.Controls.Add(this.TXT_battcapacity); + this.Controls.Add(this.CMB_batmontype); + this.Controls.Add(this.pictureBox5); + this.Name = "ConfigBatteryMonitoring"; + this.Size = new System.Drawing.Size(518, 322); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.Label label32; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.TextBox TXT_ampspervolt; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.TextBox TXT_divider; + private System.Windows.Forms.Label label35; + private System.Windows.Forms.TextBox TXT_voltage; + private System.Windows.Forms.TextBox TXT_inputvoltage; + private System.Windows.Forms.TextBox TXT_measuredvoltage; + private System.Windows.Forms.Label label47; + private System.Windows.Forms.ComboBox CMB_batmonsensortype; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.TextBox TXT_battcapacity; + private System.Windows.Forms.ComboBox CMB_batmontype; + private System.Windows.Forms.PictureBox pictureBox5; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.cs new file mode 100644 index 000000000..9ad384538 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class ConfigBatteryMonitoring : UserControl + { + public ConfigBatteryMonitoring() + { + InitializeComponent(); + } + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.resx new file mode 100644 index 000000000..94b1ff7c8 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.resx @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <data name="textBox3.Text" xml:space="preserve"> + <value>Voltage sensor calibration: +To calibrate your sensor, use a multimeter to measure the voltage coming out of your ESC's battery-elimination circuit (these are black and red wires in the three-wire cable that is powering your APM board). +Then subtract 0.3v from that value and enter it in field #1 at left. +</value> + </data> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.Designer.cs new file mode 100644 index 000000000..829ad3689 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.Designer.cs @@ -0,0 +1,450 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigFlightModes + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.CB_simple6 = new System.Windows.Forms.CheckBox(); + this.CB_simple5 = new System.Windows.Forms.CheckBox(); + this.CB_simple4 = new System.Windows.Forms.CheckBox(); + this.CB_simple3 = new System.Windows.Forms.CheckBox(); + this.CB_simple2 = new System.Windows.Forms.CheckBox(); + this.CB_simple1 = new System.Windows.Forms.CheckBox(); + this.label14 = new System.Windows.Forms.Label(); + this.LBL_flightmodepwm = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.lbl_currentmode = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.CMB_fmode6 = new System.Windows.Forms.ComboBox(); + this.label5 = new System.Windows.Forms.Label(); + this.CMB_fmode5 = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); + this.CMB_fmode4 = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + this.CMB_fmode3 = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.CMB_fmode2 = new System.Windows.Forms.ComboBox(); + this.label1 = new System.Windows.Forms.Label(); + this.CMB_fmode1 = new System.Windows.Forms.ComboBox(); + this.BUT_SaveModes = new ArdupilotMega.MyButton(); + this.currentStateBindingSource = new System.Windows.Forms.BindingSource(this.components); + ((System.ComponentModel.ISupportInitialize)(this.currentStateBindingSource)).BeginInit(); + this.SuspendLayout(); + // + // CB_simple6 + // + this.CB_simple6.AutoSize = true; + this.CB_simple6.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CB_simple6.Location = new System.Drawing.Point(232, 200); + this.CB_simple6.Margin = new System.Windows.Forms.Padding(2); + this.CB_simple6.Name = "CB_simple6"; + this.CB_simple6.Size = new System.Drawing.Size(87, 17); + this.CB_simple6.TabIndex = 148; + this.CB_simple6.Text = "Simple Mode"; + this.CB_simple6.UseVisualStyleBackColor = true; + // + // CB_simple5 + // + this.CB_simple5.AutoSize = true; + this.CB_simple5.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CB_simple5.Location = new System.Drawing.Point(232, 173); + this.CB_simple5.Margin = new System.Windows.Forms.Padding(2); + this.CB_simple5.Name = "CB_simple5"; + this.CB_simple5.Size = new System.Drawing.Size(87, 17); + this.CB_simple5.TabIndex = 147; + this.CB_simple5.Text = "Simple Mode"; + this.CB_simple5.UseVisualStyleBackColor = true; + // + // CB_simple4 + // + this.CB_simple4.AutoSize = true; + this.CB_simple4.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CB_simple4.Location = new System.Drawing.Point(232, 146); + this.CB_simple4.Margin = new System.Windows.Forms.Padding(2); + this.CB_simple4.Name = "CB_simple4"; + this.CB_simple4.Size = new System.Drawing.Size(87, 17); + this.CB_simple4.TabIndex = 146; + this.CB_simple4.Text = "Simple Mode"; + this.CB_simple4.UseVisualStyleBackColor = true; + // + // CB_simple3 + // + this.CB_simple3.AutoSize = true; + this.CB_simple3.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CB_simple3.Location = new System.Drawing.Point(232, 119); + this.CB_simple3.Margin = new System.Windows.Forms.Padding(2); + this.CB_simple3.Name = "CB_simple3"; + this.CB_simple3.Size = new System.Drawing.Size(87, 17); + this.CB_simple3.TabIndex = 145; + this.CB_simple3.Text = "Simple Mode"; + this.CB_simple3.UseVisualStyleBackColor = true; + // + // CB_simple2 + // + this.CB_simple2.AutoSize = true; + this.CB_simple2.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CB_simple2.Location = new System.Drawing.Point(232, 92); + this.CB_simple2.Margin = new System.Windows.Forms.Padding(2); + this.CB_simple2.Name = "CB_simple2"; + this.CB_simple2.Size = new System.Drawing.Size(87, 17); + this.CB_simple2.TabIndex = 144; + this.CB_simple2.Text = "Simple Mode"; + this.CB_simple2.UseVisualStyleBackColor = true; + // + // CB_simple1 + // + this.CB_simple1.AutoSize = true; + this.CB_simple1.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CB_simple1.Location = new System.Drawing.Point(232, 65); + this.CB_simple1.Margin = new System.Windows.Forms.Padding(2); + this.CB_simple1.Name = "CB_simple1"; + this.CB_simple1.Size = new System.Drawing.Size(87, 17); + this.CB_simple1.TabIndex = 143; + this.CB_simple1.Text = "Simple Mode"; + this.CB_simple1.UseVisualStyleBackColor = true; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label14.Location = new System.Drawing.Point(94, 32); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(74, 13); + this.label14.TabIndex = 142; + this.label14.Text = "Current PWM:"; + // + // LBL_flightmodepwm + // + this.LBL_flightmodepwm.AutoSize = true; + this.LBL_flightmodepwm.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.LBL_flightmodepwm.Location = new System.Drawing.Point(174, 32); + this.LBL_flightmodepwm.Name = "LBL_flightmodepwm"; + this.LBL_flightmodepwm.Size = new System.Drawing.Size(13, 13); + this.LBL_flightmodepwm.TabIndex = 141; + this.LBL_flightmodepwm.Text = "0"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label13.Location = new System.Drawing.Point(94, 15); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(74, 13); + this.label13.TabIndex = 140; + this.label13.Text = "Current Mode:"; + // + // lbl_currentmode + // + this.lbl_currentmode.AutoSize = true; + this.lbl_currentmode.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.currentStateBindingSource, "mode", true)); + this.lbl_currentmode.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.lbl_currentmode.Location = new System.Drawing.Point(174, 15); + this.lbl_currentmode.Name = "lbl_currentmode"; + this.lbl_currentmode.Size = new System.Drawing.Size(42, 13); + this.lbl_currentmode.TabIndex = 139; + this.lbl_currentmode.Text = "Manual"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label12.Location = new System.Drawing.Point(358, 66); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(76, 13); + this.label12.TabIndex = 138; + this.label12.Text = "PWM 0 - 1230"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label11.Location = new System.Drawing.Point(358, 201); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(70, 13); + this.label11.TabIndex = 137; + this.label11.Text = "PWM 1750 +"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label10.Location = new System.Drawing.Point(358, 174); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(94, 13); + this.label10.TabIndex = 136; + this.label10.Text = "PWM 1621 - 1749"; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label9.Location = new System.Drawing.Point(358, 147); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(94, 13); + this.label9.TabIndex = 135; + this.label9.Text = "PWM 1491 - 1620"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label8.Location = new System.Drawing.Point(358, 120); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(94, 13); + this.label8.TabIndex = 134; + this.label8.Text = "PWM 1361 - 1490"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label7.Location = new System.Drawing.Point(358, 93); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(94, 13); + this.label7.TabIndex = 133; + this.label7.Text = "PWM 1231 - 1360"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label6.Location = new System.Drawing.Point(20, 201); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(71, 13); + this.label6.TabIndex = 131; + this.label6.Text = "Flight Mode 6"; + // + // CMB_fmode6 + // + this.CMB_fmode6.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.CMB_fmode6.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; + this.CMB_fmode6.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_fmode6.FormattingEnabled = true; + this.CMB_fmode6.Location = new System.Drawing.Point(97, 198); + this.CMB_fmode6.Name = "CMB_fmode6"; + this.CMB_fmode6.Size = new System.Drawing.Size(121, 21); + this.CMB_fmode6.TabIndex = 130; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label5.Location = new System.Drawing.Point(20, 174); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(71, 13); + this.label5.TabIndex = 129; + this.label5.Text = "Flight Mode 5"; + // + // CMB_fmode5 + // + this.CMB_fmode5.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.CMB_fmode5.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; + this.CMB_fmode5.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_fmode5.FormattingEnabled = true; + this.CMB_fmode5.Location = new System.Drawing.Point(97, 171); + this.CMB_fmode5.Name = "CMB_fmode5"; + this.CMB_fmode5.Size = new System.Drawing.Size(121, 21); + this.CMB_fmode5.TabIndex = 128; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label4.Location = new System.Drawing.Point(20, 147); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(71, 13); + this.label4.TabIndex = 127; + this.label4.Text = "Flight Mode 4"; + // + // CMB_fmode4 + // + this.CMB_fmode4.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.CMB_fmode4.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; + this.CMB_fmode4.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_fmode4.FormattingEnabled = true; + this.CMB_fmode4.Location = new System.Drawing.Point(97, 144); + this.CMB_fmode4.Name = "CMB_fmode4"; + this.CMB_fmode4.Size = new System.Drawing.Size(121, 21); + this.CMB_fmode4.TabIndex = 126; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label3.Location = new System.Drawing.Point(20, 120); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(71, 13); + this.label3.TabIndex = 125; + this.label3.Text = "Flight Mode 3"; + // + // CMB_fmode3 + // + this.CMB_fmode3.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.CMB_fmode3.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; + this.CMB_fmode3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_fmode3.FormattingEnabled = true; + this.CMB_fmode3.Location = new System.Drawing.Point(97, 117); + this.CMB_fmode3.Name = "CMB_fmode3"; + this.CMB_fmode3.Size = new System.Drawing.Size(121, 21); + this.CMB_fmode3.TabIndex = 124; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label2.Location = new System.Drawing.Point(20, 93); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(71, 13); + this.label2.TabIndex = 123; + this.label2.Text = "Flight Mode 2"; + // + // CMB_fmode2 + // + this.CMB_fmode2.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.CMB_fmode2.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; + this.CMB_fmode2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_fmode2.FormattingEnabled = true; + this.CMB_fmode2.Location = new System.Drawing.Point(97, 90); + this.CMB_fmode2.Name = "CMB_fmode2"; + this.CMB_fmode2.Size = new System.Drawing.Size(121, 21); + this.CMB_fmode2.TabIndex = 122; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label1.Location = new System.Drawing.Point(20, 66); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(71, 13); + this.label1.TabIndex = 121; + this.label1.Text = "Flight Mode 1"; + // + // CMB_fmode1 + // + this.CMB_fmode1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.CMB_fmode1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; + this.CMB_fmode1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_fmode1.FormattingEnabled = true; + this.CMB_fmode1.Location = new System.Drawing.Point(97, 63); + this.CMB_fmode1.Name = "CMB_fmode1"; + this.CMB_fmode1.Size = new System.Drawing.Size(121, 21); + this.CMB_fmode1.TabIndex = 120; + // + // BUT_SaveModes + // + this.BUT_SaveModes.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_SaveModes.Location = new System.Drawing.Point(97, 225); + this.BUT_SaveModes.Name = "BUT_SaveModes"; + this.BUT_SaveModes.Size = new System.Drawing.Size(121, 23); + this.BUT_SaveModes.TabIndex = 132; + this.BUT_SaveModes.Text = "Save Modes"; + this.BUT_SaveModes.UseVisualStyleBackColor = true; + this.BUT_SaveModes.Click += new System.EventHandler(this.BUT_SaveModes_Click); + // + // ConfigFlightModes + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.CB_simple6); + this.Controls.Add(this.CB_simple5); + this.Controls.Add(this.CB_simple4); + this.Controls.Add(this.CB_simple3); + this.Controls.Add(this.CB_simple2); + this.Controls.Add(this.CB_simple1); + this.Controls.Add(this.label14); + this.Controls.Add(this.LBL_flightmodepwm); + this.Controls.Add(this.label13); + this.Controls.Add(this.lbl_currentmode); + this.Controls.Add(this.label12); + this.Controls.Add(this.label11); + this.Controls.Add(this.label10); + this.Controls.Add(this.label9); + this.Controls.Add(this.label8); + this.Controls.Add(this.label7); + this.Controls.Add(this.label6); + this.Controls.Add(this.CMB_fmode6); + this.Controls.Add(this.label5); + this.Controls.Add(this.CMB_fmode5); + this.Controls.Add(this.label4); + this.Controls.Add(this.CMB_fmode4); + this.Controls.Add(this.label3); + this.Controls.Add(this.CMB_fmode3); + this.Controls.Add(this.label2); + this.Controls.Add(this.CMB_fmode2); + this.Controls.Add(this.label1); + this.Controls.Add(this.CMB_fmode1); + this.Controls.Add(this.BUT_SaveModes); + this.Name = "ConfigFlightModes"; + this.Size = new System.Drawing.Size(500, 270); + this.Load += new System.EventHandler(this.ConfigFlightModes_Load); + ((System.ComponentModel.ISupportInitialize)(this.currentStateBindingSource)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.CheckBox CB_simple6; + private System.Windows.Forms.CheckBox CB_simple5; + private System.Windows.Forms.CheckBox CB_simple4; + private System.Windows.Forms.CheckBox CB_simple3; + private System.Windows.Forms.CheckBox CB_simple2; + private System.Windows.Forms.CheckBox CB_simple1; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label LBL_flightmodepwm; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label lbl_currentmode; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox CMB_fmode6; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.ComboBox CMB_fmode5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox CMB_fmode4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox CMB_fmode3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ComboBox CMB_fmode2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox CMB_fmode1; + private MyButton BUT_SaveModes; + private System.Windows.Forms.BindingSource currentStateBindingSource; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.cs new file mode 100644 index 000000000..d9acf7002 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.cs @@ -0,0 +1,215 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class ConfigFlightModes : UserControl + { + Timer timer = new Timer(); + + public ConfigFlightModes() + { + InitializeComponent(); + + timer.Tick += new EventHandler(timer_Tick); + + timer.Enabled = true; + timer.Interval = 100; + timer.Start(); + } + + void timer_Tick(object sender, EventArgs e) + { + try + { + MainV2.cs.UpdateCurrentSettings(currentStateBindingSource); + } + catch { } + + float pwm = 0; + + if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) // APM + { + if (MainV2.comPort.param.ContainsKey("FLTMODE_CH")) + { + switch ((int)(float)MainV2.comPort.param["FLTMODE_CH"]) + { + case 5: + pwm = MainV2.cs.ch5in; + break; + case 6: + pwm = MainV2.cs.ch6in; + break; + case 7: + pwm = MainV2.cs.ch7in; + break; + case 8: + pwm = MainV2.cs.ch8in; + break; + default: + + break; + } + + LBL_flightmodepwm.Text = MainV2.comPort.param["FLTMODE_CH"].ToString() + ": " + pwm.ToString(); + } + } + + if (MainV2.cs.firmware == MainV2.Firmwares.ArduCopter2) // ac2 + { + pwm = MainV2.cs.ch5in; + LBL_flightmodepwm.Text = "5: " + MainV2.cs.ch5in.ToString(); + } + + Control[] fmodelist = new Control[] { CMB_fmode1, CMB_fmode2, CMB_fmode3, CMB_fmode4, CMB_fmode5, CMB_fmode6 }; + + foreach (Control ctl in fmodelist) + { + ctl.BackColor = Color.FromArgb(0x43, 0x44, 0x45); + } + + byte no = readSwitch(pwm); + + fmodelist[no].BackColor = Color.Green; + } + + // from arducopter code + byte readSwitch(float inpwm) + { + int pulsewidth = (int)inpwm; // default for Arducopter + + if (pulsewidth > 1230 && pulsewidth <= 1360) return 1; + if (pulsewidth > 1360 && pulsewidth <= 1490) return 2; + if (pulsewidth > 1490 && pulsewidth <= 1620) return 3; + if (pulsewidth > 1620 && pulsewidth <= 1749) return 4; // Software Manual + if (pulsewidth >= 1750) return 5; // Hardware Manual + return 0; + } + + private void BUT_SaveModes_Click(object sender, EventArgs e) + { + try + { + if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) // APM + { + MainV2.comPort.setParam("FLTMODE1", (float)(int)Enum.Parse(typeof(Common.apmmodes), CMB_fmode1.Text)); + MainV2.comPort.setParam("FLTMODE2", (float)(int)Enum.Parse(typeof(Common.apmmodes), CMB_fmode2.Text)); + MainV2.comPort.setParam("FLTMODE3", (float)(int)Enum.Parse(typeof(Common.apmmodes), CMB_fmode3.Text)); + MainV2.comPort.setParam("FLTMODE4", (float)(int)Enum.Parse(typeof(Common.apmmodes), CMB_fmode4.Text)); + MainV2.comPort.setParam("FLTMODE5", (float)(int)Enum.Parse(typeof(Common.apmmodes), CMB_fmode5.Text)); + MainV2.comPort.setParam("FLTMODE6", (float)(int)Enum.Parse(typeof(Common.apmmodes), CMB_fmode6.Text)); + } + if (MainV2.cs.firmware == MainV2.Firmwares.ArduCopter2) // ac2 + { + MainV2.comPort.setParam("FLTMODE1", (float)(int)Enum.Parse(typeof(Common.ac2modes), CMB_fmode1.Text)); + MainV2.comPort.setParam("FLTMODE2", (float)(int)Enum.Parse(typeof(Common.ac2modes), CMB_fmode2.Text)); + MainV2.comPort.setParam("FLTMODE3", (float)(int)Enum.Parse(typeof(Common.ac2modes), CMB_fmode3.Text)); + MainV2.comPort.setParam("FLTMODE4", (float)(int)Enum.Parse(typeof(Common.ac2modes), CMB_fmode4.Text)); + MainV2.comPort.setParam("FLTMODE5", (float)(int)Enum.Parse(typeof(Common.ac2modes), CMB_fmode5.Text)); + MainV2.comPort.setParam("FLTMODE6", (float)(int)Enum.Parse(typeof(Common.ac2modes), CMB_fmode6.Text)); + + float value = (float)(CB_simple1.Checked ? (int)SimpleMode.Simple1 : 0) + (CB_simple2.Checked ? (int)SimpleMode.Simple2 : 0) + (CB_simple3.Checked ? (int)SimpleMode.Simple3 : 0) + + (CB_simple4.Checked ? (int)SimpleMode.Simple4 : 0) + (CB_simple5.Checked ? (int)SimpleMode.Simple5 : 0) + (CB_simple6.Checked ? (int)SimpleMode.Simple6 : 0); + if (MainV2.comPort.param.ContainsKey("SIMPLE")) + MainV2.comPort.setParam("SIMPLE", value); + } + } + catch { CustomMessageBox.Show("Failed to set Flight modes"); } + BUT_SaveModes.Text = "Complete"; + } + + [Flags] + public enum SimpleMode + { + None = 0, + Simple1 = 1, + Simple2 = 2, + Simple3 = 4, + Simple4 = 8, + Simple5 = 16, + Simple6 = 32, + } + + private void ConfigFlightModes_Load(object sender, EventArgs e) + { + if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) // APM + { + CB_simple1.Visible = false; + CB_simple2.Visible = false; + CB_simple3.Visible = false; + CB_simple4.Visible = false; + CB_simple5.Visible = false; + CB_simple6.Visible = false; + + CMB_fmode1.Items.Clear(); + CMB_fmode2.Items.Clear(); + CMB_fmode3.Items.Clear(); + CMB_fmode4.Items.Clear(); + CMB_fmode5.Items.Clear(); + CMB_fmode6.Items.Clear(); + + CMB_fmode1.Items.AddRange(Enum.GetNames(typeof(Common.apmmodes))); + CMB_fmode2.Items.AddRange(Enum.GetNames(typeof(Common.apmmodes))); + CMB_fmode3.Items.AddRange(Enum.GetNames(typeof(Common.apmmodes))); + CMB_fmode4.Items.AddRange(Enum.GetNames(typeof(Common.apmmodes))); + CMB_fmode5.Items.AddRange(Enum.GetNames(typeof(Common.apmmodes))); + CMB_fmode6.Items.AddRange(Enum.GetNames(typeof(Common.apmmodes))); + + try + { + CMB_fmode1.Text = Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.param["FLTMODE1"].ToString()).ToString(); + CMB_fmode2.Text = Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.param["FLTMODE2"].ToString()).ToString(); + CMB_fmode3.Text = Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.param["FLTMODE3"].ToString()).ToString(); + CMB_fmode4.Text = Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.param["FLTMODE4"].ToString()).ToString(); + CMB_fmode5.Text = Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.param["FLTMODE5"].ToString()).ToString(); + CMB_fmode6.Text = Common.apmmodes.MANUAL.ToString(); + CMB_fmode6.Enabled = false; + } + catch { } + } + if (MainV2.cs.firmware == MainV2.Firmwares.ArduCopter2) // ac2 + { + CMB_fmode1.Items.Clear(); + CMB_fmode2.Items.Clear(); + CMB_fmode3.Items.Clear(); + CMB_fmode4.Items.Clear(); + CMB_fmode5.Items.Clear(); + CMB_fmode6.Items.Clear(); + + CMB_fmode1.Items.AddRange(Enum.GetNames(typeof(Common.ac2modes))); + CMB_fmode2.Items.AddRange(Enum.GetNames(typeof(Common.ac2modes))); + CMB_fmode3.Items.AddRange(Enum.GetNames(typeof(Common.ac2modes))); + CMB_fmode4.Items.AddRange(Enum.GetNames(typeof(Common.ac2modes))); + CMB_fmode5.Items.AddRange(Enum.GetNames(typeof(Common.ac2modes))); + CMB_fmode6.Items.AddRange(Enum.GetNames(typeof(Common.ac2modes))); + + try + { + CMB_fmode1.Text = Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE1"].ToString()).ToString(); + CMB_fmode2.Text = Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE2"].ToString()).ToString(); + CMB_fmode3.Text = Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE3"].ToString()).ToString(); + CMB_fmode4.Text = Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE4"].ToString()).ToString(); + CMB_fmode5.Text = Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE5"].ToString()).ToString(); + CMB_fmode6.Text = Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE6"].ToString()).ToString(); + CMB_fmode6.Enabled = true; + + int simple = int.Parse(MainV2.comPort.param["SIMPLE"].ToString()); + + CB_simple1.Checked = ((simple >> 0 & 1) == 1); + CB_simple2.Checked = ((simple >> 1 & 1) == 1); + CB_simple3.Checked = ((simple >> 2 & 1) == 1); + CB_simple4.Checked = ((simple >> 3 & 1) == 1); + CB_simple5.Checked = ((simple >> 4 & 1) == 1); + CB_simple6.Checked = ((simple >> 5 & 1) == 1); + } + catch { } + } + } + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.resx new file mode 100644 index 000000000..ff1f88db6 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.resx @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="currentStateBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> + <metadata name="currentStateBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.Designer.cs new file mode 100644 index 000000000..909cb7731 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.Designer.cs @@ -0,0 +1,248 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigHardwareOptions + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.BUT_MagCalibration = new ArdupilotMega.MyButton(); + this.label27 = new System.Windows.Forms.Label(); + this.CMB_sonartype = new System.Windows.Forms.ComboBox(); + this.CHK_enableoptflow = new System.Windows.Forms.CheckBox(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.linkLabelmagdec = new System.Windows.Forms.LinkLabel(); + this.label100 = new System.Windows.Forms.Label(); + this.TXT_declination = new System.Windows.Forms.TextBox(); + this.CHK_enableairspeed = new System.Windows.Forms.CheckBox(); + this.CHK_enablesonar = new System.Windows.Forms.CheckBox(); + this.CHK_enablecompass = new System.Windows.Forms.CheckBox(); + this.pictureBox4 = new System.Windows.Forms.PictureBox(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // BUT_MagCalibration + // + this.BUT_MagCalibration.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_MagCalibration.Location = new System.Drawing.Point(340, 13); + this.BUT_MagCalibration.Name = "BUT_MagCalibration"; + this.BUT_MagCalibration.Size = new System.Drawing.Size(75, 23); + this.BUT_MagCalibration.TabIndex = 47; + this.BUT_MagCalibration.Text = "Calibration"; + this.BUT_MagCalibration.UseVisualStyleBackColor = true; + // + // label27 + // + this.label27.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label27.Location = new System.Drawing.Point(445, 45); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(150, 20); + this.label27.TabIndex = 46; + this.label27.Text = "in Degrees eg 2° 3\' W is -2.3"; + // + // CMB_sonartype + // + this.CMB_sonartype.FormattingEnabled = true; + this.CMB_sonartype.Items.AddRange(new object[] { + "XL-EZ0", + "LV-EZ0", + "XL-EZL0"}); + this.CMB_sonartype.Location = new System.Drawing.Point(243, 122); + this.CMB_sonartype.Name = "CMB_sonartype"; + this.CMB_sonartype.Size = new System.Drawing.Size(121, 21); + this.CMB_sonartype.TabIndex = 45; + // + // CHK_enableoptflow + // + this.CHK_enableoptflow.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_enableoptflow.Location = new System.Drawing.Point(97, 285); + this.CHK_enableoptflow.Name = "CHK_enableoptflow"; + this.CHK_enableoptflow.Size = new System.Drawing.Size(134, 19); + this.CHK_enableoptflow.TabIndex = 44; + this.CHK_enableoptflow.Text = "Enable Optical Flow"; + this.CHK_enableoptflow.UseVisualStyleBackColor = true; + // + // pictureBox2 + // + this.pictureBox2.BackColor = System.Drawing.Color.White; + this.pictureBox2.BackgroundImage = global::ArdupilotMega.Properties.Resources.opticalflow; + this.pictureBox2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pictureBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox2.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.pictureBox2.Location = new System.Drawing.Point(13, 259); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(75, 75); + this.pictureBox2.TabIndex = 43; + this.pictureBox2.TabStop = false; + // + // linkLabelmagdec + // + this.linkLabelmagdec.AutoSize = true; + this.linkLabelmagdec.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.linkLabelmagdec.Location = new System.Drawing.Point(325, 68); + this.linkLabelmagdec.Name = "linkLabelmagdec"; + this.linkLabelmagdec.Size = new System.Drawing.Size(104, 13); + this.linkLabelmagdec.TabIndex = 42; + this.linkLabelmagdec.TabStop = true; + this.linkLabelmagdec.Text = "Declination WebSite"; + // + // label100 + // + this.label100.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label100.Location = new System.Drawing.Point(240, 45); + this.label100.Name = "label100"; + this.label100.Size = new System.Drawing.Size(72, 16); + this.label100.TabIndex = 38; + this.label100.Text = "Declination"; + // + // TXT_declination + // + this.TXT_declination.Location = new System.Drawing.Point(318, 45); + this.TXT_declination.Name = "TXT_declination"; + this.TXT_declination.Size = new System.Drawing.Size(121, 20); + this.TXT_declination.TabIndex = 37; + // + // CHK_enableairspeed + // + this.CHK_enableairspeed.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_enableairspeed.Location = new System.Drawing.Point(97, 202); + this.CHK_enableairspeed.Name = "CHK_enableairspeed"; + this.CHK_enableairspeed.Size = new System.Drawing.Size(103, 17); + this.CHK_enableairspeed.TabIndex = 39; + this.CHK_enableairspeed.Text = "Enable Airspeed"; + this.CHK_enableairspeed.UseVisualStyleBackColor = true; + // + // CHK_enablesonar + // + this.CHK_enablesonar.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_enablesonar.Location = new System.Drawing.Point(94, 124); + this.CHK_enablesonar.Name = "CHK_enablesonar"; + this.CHK_enablesonar.Size = new System.Drawing.Size(90, 17); + this.CHK_enablesonar.TabIndex = 40; + this.CHK_enablesonar.Text = "Enable Sonar"; + this.CHK_enablesonar.UseVisualStyleBackColor = true; + // + // CHK_enablecompass + // + this.CHK_enablecompass.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_enablecompass.Location = new System.Drawing.Point(97, 44); + this.CHK_enablecompass.Name = "CHK_enablecompass"; + this.CHK_enablecompass.Size = new System.Drawing.Size(105, 17); + this.CHK_enablecompass.TabIndex = 41; + this.CHK_enablecompass.Text = "Enable Compass"; + this.CHK_enablecompass.UseVisualStyleBackColor = true; + // + // pictureBox4 + // + this.pictureBox4.BackColor = System.Drawing.Color.White; + this.pictureBox4.BackgroundImage = global::ArdupilotMega.Properties.Resources.airspeed; + this.pictureBox4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pictureBox4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox4.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.pictureBox4.Location = new System.Drawing.Point(13, 176); + this.pictureBox4.Name = "pictureBox4"; + this.pictureBox4.Size = new System.Drawing.Size(75, 75); + this.pictureBox4.TabIndex = 36; + this.pictureBox4.TabStop = false; + // + // pictureBox3 + // + this.pictureBox3.BackColor = System.Drawing.Color.White; + this.pictureBox3.BackgroundImage = global::ArdupilotMega.Properties.Resources.sonar; + this.pictureBox3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pictureBox3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox3.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.pictureBox3.Location = new System.Drawing.Point(13, 94); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(75, 75); + this.pictureBox3.TabIndex = 35; + this.pictureBox3.TabStop = false; + // + // pictureBox1 + // + this.pictureBox1.BackgroundImage = global::ArdupilotMega.Properties.Resources.compass; + this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox1.ErrorImage = null; + this.pictureBox1.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.pictureBox1.InitialImage = null; + this.pictureBox1.Location = new System.Drawing.Point(13, 13); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(75, 75); + this.pictureBox1.TabIndex = 34; + this.pictureBox1.TabStop = false; + // + // ConfigHardwareOptions + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BUT_MagCalibration); + this.Controls.Add(this.label27); + this.Controls.Add(this.CMB_sonartype); + this.Controls.Add(this.CHK_enableoptflow); + this.Controls.Add(this.pictureBox2); + this.Controls.Add(this.linkLabelmagdec); + this.Controls.Add(this.label100); + this.Controls.Add(this.TXT_declination); + this.Controls.Add(this.CHK_enableairspeed); + this.Controls.Add(this.CHK_enablesonar); + this.Controls.Add(this.CHK_enablecompass); + this.Controls.Add(this.pictureBox4); + this.Controls.Add(this.pictureBox3); + this.Controls.Add(this.pictureBox1); + this.Name = "ConfigHardwareOptions"; + this.Size = new System.Drawing.Size(602, 351); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private MyButton BUT_MagCalibration; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.ComboBox CMB_sonartype; + private System.Windows.Forms.CheckBox CHK_enableoptflow; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.LinkLabel linkLabelmagdec; + private System.Windows.Forms.Label label100; + private System.Windows.Forms.TextBox TXT_declination; + private System.Windows.Forms.CheckBox CHK_enableairspeed; + private System.Windows.Forms.CheckBox CHK_enablesonar; + private System.Windows.Forms.CheckBox CHK_enablecompass; + private System.Windows.Forms.PictureBox pictureBox4; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.PictureBox pictureBox1; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.cs new file mode 100644 index 000000000..ed884a1ae --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class ConfigHardwareOptions : UserControl + { + public ConfigHardwareOptions() + { + InitializeComponent(); + } + + private void CHK_enableoptflow_CheckedChanged(object sender, EventArgs e) + { + + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + + } + + private void TXT_declination_Validated(object sender, EventArgs e) + { + + } + + private void CHK_enableairspeed_CheckedChanged(object sender, EventArgs e) + { + + } + + private void CHK_enablesonar_CheckedChanged(object sender, EventArgs e) + { + + } + + private void CHK_enablecompass_CheckedChanged(object sender, EventArgs e) + { + + } + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.resx new file mode 100644 index 000000000..7080a7d11 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs new file mode 100644 index 000000000..ec5a15499 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs @@ -0,0 +1,677 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigPlanner + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.label33 = new System.Windows.Forms.Label(); + this.CMB_ratesensors = new System.Windows.Forms.ComboBox(); + this.label26 = new System.Windows.Forms.Label(); + this.CMB_videoresolutions = new System.Windows.Forms.ComboBox(); + this.label12 = new System.Windows.Forms.Label(); + this.CHK_GDIPlus = new System.Windows.Forms.CheckBox(); + this.label24 = new System.Windows.Forms.Label(); + this.CHK_loadwponconnect = new System.Windows.Forms.CheckBox(); + this.label23 = new System.Windows.Forms.Label(); + this.NUM_tracklength = new System.Windows.Forms.NumericUpDown(); + this.CHK_speechaltwarning = new System.Windows.Forms.CheckBox(); + this.label108 = new System.Windows.Forms.Label(); + this.CHK_resetapmonconnect = new System.Windows.Forms.CheckBox(); + this.CHK_mavdebug = new System.Windows.Forms.CheckBox(); + this.label107 = new System.Windows.Forms.Label(); + this.CMB_raterc = new System.Windows.Forms.ComboBox(); + this.label104 = new System.Windows.Forms.Label(); + this.label103 = new System.Windows.Forms.Label(); + this.label102 = new System.Windows.Forms.Label(); + this.label101 = new System.Windows.Forms.Label(); + this.CMB_ratestatus = new System.Windows.Forms.ComboBox(); + this.CMB_rateposition = new System.Windows.Forms.ComboBox(); + this.CMB_rateattitude = new System.Windows.Forms.ComboBox(); + this.label99 = new System.Windows.Forms.Label(); + this.label98 = new System.Windows.Forms.Label(); + this.label97 = new System.Windows.Forms.Label(); + this.CMB_speedunits = new System.Windows.Forms.ComboBox(); + this.CMB_distunits = new System.Windows.Forms.ComboBox(); + this.label96 = new System.Windows.Forms.Label(); + this.label95 = new System.Windows.Forms.Label(); + this.CHK_speechbattery = new System.Windows.Forms.CheckBox(); + this.CHK_speechcustom = new System.Windows.Forms.CheckBox(); + this.CHK_speechmode = new System.Windows.Forms.CheckBox(); + this.CHK_speechwaypoint = new System.Windows.Forms.CheckBox(); + this.label94 = new System.Windows.Forms.Label(); + this.CMB_osdcolor = new System.Windows.Forms.ComboBox(); + this.CMB_language = new System.Windows.Forms.ComboBox(); + this.label93 = new System.Windows.Forms.Label(); + this.CHK_enablespeech = new System.Windows.Forms.CheckBox(); + this.CHK_hudshow = new System.Windows.Forms.CheckBox(); + this.label92 = new System.Windows.Forms.Label(); + this.CMB_videosources = new System.Windows.Forms.ComboBox(); + this.BUT_Joystick = new ArdupilotMega.MyButton(); + this.BUT_videostop = new ArdupilotMega.MyButton(); + this.BUT_videostart = new ArdupilotMega.MyButton(); + ((System.ComponentModel.ISupportInitialize)(this.NUM_tracklength)).BeginInit(); + this.SuspendLayout(); + // + // label33 + // + this.label33.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label33.Location = new System.Drawing.Point(517, 246); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(43, 13); + this.label33.TabIndex = 87; + this.label33.Text = "Sensor"; + // + // CMB_ratesensors + // + this.CMB_ratesensors.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_ratesensors.FormattingEnabled = true; + this.CMB_ratesensors.Items.AddRange(new object[] { + "0", + "1", + "3", + "10", + "50"}); + this.CMB_ratesensors.Location = new System.Drawing.Point(564, 243); + this.CMB_ratesensors.Name = "CMB_ratesensors"; + this.CMB_ratesensors.Size = new System.Drawing.Size(40, 21); + this.CMB_ratesensors.TabIndex = 88; + // + // label26 + // + this.label26.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label26.Location = new System.Drawing.Point(15, 52); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(100, 23); + this.label26.TabIndex = 86; + this.label26.Text = "Video Format"; + // + // CMB_videoresolutions + // + this.CMB_videoresolutions.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_videoresolutions.FormattingEnabled = true; + this.CMB_videoresolutions.Location = new System.Drawing.Point(124, 49); + this.CMB_videoresolutions.Name = "CMB_videoresolutions"; + this.CMB_videoresolutions.Size = new System.Drawing.Size(408, 21); + this.CMB_videoresolutions.TabIndex = 44; + // + // label12 + // + this.label12.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label12.Location = new System.Drawing.Point(15, 342); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(61, 13); + this.label12.TabIndex = 84; + this.label12.Text = "HUD"; + // + // CHK_GDIPlus + // + this.CHK_GDIPlus.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_GDIPlus.Location = new System.Drawing.Point(124, 342); + this.CHK_GDIPlus.Name = "CHK_GDIPlus"; + this.CHK_GDIPlus.Size = new System.Drawing.Size(177, 17); + this.CHK_GDIPlus.TabIndex = 85; + this.CHK_GDIPlus.Text = "GDI+ (old type)"; + this.CHK_GDIPlus.UseVisualStyleBackColor = true; + this.CHK_GDIPlus.CheckedChanged += new System.EventHandler(this.CHK_GDIPlus_CheckedChanged); + // + // label24 + // + this.label24.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label24.Location = new System.Drawing.Point(15, 320); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(61, 13); + this.label24.TabIndex = 82; + this.label24.Text = "Waypoints"; + // + // CHK_loadwponconnect + // + this.CHK_loadwponconnect.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_loadwponconnect.Location = new System.Drawing.Point(124, 319); + this.CHK_loadwponconnect.Name = "CHK_loadwponconnect"; + this.CHK_loadwponconnect.Size = new System.Drawing.Size(177, 17); + this.CHK_loadwponconnect.TabIndex = 83; + this.CHK_loadwponconnect.Text = "Load Waypoints on connect?"; + this.CHK_loadwponconnect.UseVisualStyleBackColor = true; + this.CHK_loadwponconnect.CheckedChanged += new System.EventHandler(this.CHK_loadwponconnect_CheckedChanged); + // + // label23 + // + this.label23.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label23.Location = new System.Drawing.Point(15, 294); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(103, 18); + this.label23.TabIndex = 81; + this.label23.Text = "Track Length"; + // + // NUM_tracklength + // + this.NUM_tracklength.Increment = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.NUM_tracklength.Location = new System.Drawing.Point(124, 293); + this.NUM_tracklength.Maximum = new decimal(new int[] { + 2000, + 0, + 0, + 0}); + this.NUM_tracklength.Minimum = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.NUM_tracklength.Name = "NUM_tracklength"; + this.NUM_tracklength.Size = new System.Drawing.Size(67, 20); + this.NUM_tracklength.TabIndex = 80; + this.NUM_tracklength.Value = new decimal(new int[] { + 200, + 0, + 0, + 0}); + this.NUM_tracklength.ValueChanged += new System.EventHandler(this.NUM_tracklength_ValueChanged); + // + // CHK_speechaltwarning + // + this.CHK_speechaltwarning.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_speechaltwarning.Location = new System.Drawing.Point(564, 109); + this.CHK_speechaltwarning.Name = "CHK_speechaltwarning"; + this.CHK_speechaltwarning.Size = new System.Drawing.Size(102, 17); + this.CHK_speechaltwarning.TabIndex = 79; + this.CHK_speechaltwarning.Text = "Alt Warning"; + this.CHK_speechaltwarning.UseVisualStyleBackColor = true; + this.CHK_speechaltwarning.CheckedChanged += new System.EventHandler(this.CHK_speechaltwarning_CheckedChanged); + // + // label108 + // + this.label108.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label108.Location = new System.Drawing.Point(15, 271); + this.label108.Name = "label108"; + this.label108.Size = new System.Drawing.Size(61, 13); + this.label108.TabIndex = 45; + this.label108.Text = "APM Reset"; + // + // CHK_resetapmonconnect + // + this.CHK_resetapmonconnect.Checked = true; + this.CHK_resetapmonconnect.CheckState = System.Windows.Forms.CheckState.Checked; + this.CHK_resetapmonconnect.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_resetapmonconnect.Location = new System.Drawing.Point(124, 269); + this.CHK_resetapmonconnect.Name = "CHK_resetapmonconnect"; + this.CHK_resetapmonconnect.Size = new System.Drawing.Size(163, 17); + this.CHK_resetapmonconnect.TabIndex = 46; + this.CHK_resetapmonconnect.Text = "Reset APM on USB Connect"; + this.CHK_resetapmonconnect.UseVisualStyleBackColor = true; + this.CHK_resetapmonconnect.CheckedChanged += new System.EventHandler(this.CHK_resetapmonconnect_CheckedChanged); + // + // CHK_mavdebug + // + this.CHK_mavdebug.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.CHK_mavdebug.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_mavdebug.Location = new System.Drawing.Point(15, 378); + this.CHK_mavdebug.Name = "CHK_mavdebug"; + this.CHK_mavdebug.Size = new System.Drawing.Size(144, 17); + this.CHK_mavdebug.TabIndex = 47; + this.CHK_mavdebug.Text = "Mavlink Message Debug"; + this.CHK_mavdebug.UseVisualStyleBackColor = true; + this.CHK_mavdebug.CheckedChanged += new System.EventHandler(this.CHK_mavdebug_CheckedChanged); + // + // label107 + // + this.label107.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label107.Location = new System.Drawing.Point(439, 246); + this.label107.Name = "label107"; + this.label107.Size = new System.Drawing.Size(22, 13); + this.label107.TabIndex = 48; + this.label107.Text = "RC"; + // + // CMB_raterc + // + this.CMB_raterc.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_raterc.FormattingEnabled = true; + this.CMB_raterc.Items.AddRange(new object[] { + "0", + "1", + "3", + "10"}); + this.CMB_raterc.Location = new System.Drawing.Point(470, 242); + this.CMB_raterc.Name = "CMB_raterc"; + this.CMB_raterc.Size = new System.Drawing.Size(40, 21); + this.CMB_raterc.TabIndex = 49; + this.CMB_raterc.SelectedIndexChanged += new System.EventHandler(this.CMB_raterc_SelectedIndexChanged); + // + // label104 + // + this.label104.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label104.Location = new System.Drawing.Point(319, 246); + this.label104.Name = "label104"; + this.label104.Size = new System.Drawing.Size(69, 13); + this.label104.TabIndex = 50; + this.label104.Text = "Mode/Status"; + // + // label103 + // + this.label103.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label103.Location = new System.Drawing.Point(219, 246); + this.label103.Name = "label103"; + this.label103.Size = new System.Drawing.Size(44, 13); + this.label103.TabIndex = 51; + this.label103.Text = "Position"; + // + // label102 + // + this.label102.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label102.Location = new System.Drawing.Point(121, 246); + this.label102.Name = "label102"; + this.label102.Size = new System.Drawing.Size(43, 13); + this.label102.TabIndex = 52; + this.label102.Text = "Attitude"; + // + // label101 + // + this.label101.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label101.Location = new System.Drawing.Point(12, 246); + this.label101.Name = "label101"; + this.label101.Size = new System.Drawing.Size(84, 13); + this.label101.TabIndex = 53; + this.label101.Text = "Telemetry Rates"; + // + // CMB_ratestatus + // + this.CMB_ratestatus.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_ratestatus.FormattingEnabled = true; + this.CMB_ratestatus.Items.AddRange(new object[] { + "0", + "1", + "3", + "10"}); + this.CMB_ratestatus.Location = new System.Drawing.Point(393, 242); + this.CMB_ratestatus.Name = "CMB_ratestatus"; + this.CMB_ratestatus.Size = new System.Drawing.Size(40, 21); + this.CMB_ratestatus.TabIndex = 54; + this.CMB_ratestatus.SelectedIndexChanged += new System.EventHandler(this.CMB_ratestatus_SelectedIndexChanged); + // + // CMB_rateposition + // + this.CMB_rateposition.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_rateposition.FormattingEnabled = true; + this.CMB_rateposition.Items.AddRange(new object[] { + "0", + "1", + "3", + "10"}); + this.CMB_rateposition.Location = new System.Drawing.Point(273, 242); + this.CMB_rateposition.Name = "CMB_rateposition"; + this.CMB_rateposition.Size = new System.Drawing.Size(40, 21); + this.CMB_rateposition.TabIndex = 55; + this.CMB_rateposition.SelectedIndexChanged += new System.EventHandler(this.CMB_rateposition_SelectedIndexChanged); + // + // CMB_rateattitude + // + this.CMB_rateattitude.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_rateattitude.FormattingEnabled = true; + this.CMB_rateattitude.Items.AddRange(new object[] { + "0", + "1", + "3", + "10"}); + this.CMB_rateattitude.Location = new System.Drawing.Point(173, 242); + this.CMB_rateattitude.Name = "CMB_rateattitude"; + this.CMB_rateattitude.Size = new System.Drawing.Size(40, 21); + this.CMB_rateattitude.TabIndex = 56; + this.CMB_rateattitude.SelectedIndexChanged += new System.EventHandler(this.CMB_rateattitude_SelectedIndexChanged); + // + // label99 + // + this.label99.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label99.Location = new System.Drawing.Point(268, 211); + this.label99.Name = "label99"; + this.label99.Size = new System.Drawing.Size(402, 13); + this.label99.TabIndex = 57; + this.label99.Text = "NOTE: The Configuration Tab will NOT display these units, as those are raw values" + + ".\r\n"; + // + // label98 + // + this.label98.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label98.Location = new System.Drawing.Point(15, 219); + this.label98.Name = "label98"; + this.label98.Size = new System.Drawing.Size(65, 13); + this.label98.TabIndex = 58; + this.label98.Text = "Speed Units"; + // + // label97 + // + this.label97.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label97.Location = new System.Drawing.Point(15, 191); + this.label97.Name = "label97"; + this.label97.Size = new System.Drawing.Size(52, 13); + this.label97.TabIndex = 59; + this.label97.Text = "Dist Units"; + // + // CMB_speedunits + // + this.CMB_speedunits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_speedunits.FormattingEnabled = true; + this.CMB_speedunits.Location = new System.Drawing.Point(124, 216); + this.CMB_speedunits.Name = "CMB_speedunits"; + this.CMB_speedunits.Size = new System.Drawing.Size(138, 21); + this.CMB_speedunits.TabIndex = 60; + this.CMB_speedunits.SelectedIndexChanged += new System.EventHandler(this.CMB_speedunits_SelectedIndexChanged); + // + // CMB_distunits + // + this.CMB_distunits.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_distunits.FormattingEnabled = true; + this.CMB_distunits.Location = new System.Drawing.Point(124, 189); + this.CMB_distunits.Name = "CMB_distunits"; + this.CMB_distunits.Size = new System.Drawing.Size(138, 21); + this.CMB_distunits.TabIndex = 61; + this.CMB_distunits.SelectedIndexChanged += new System.EventHandler(this.CMB_distunits_SelectedIndexChanged); + // + // label96 + // + this.label96.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label96.Location = new System.Drawing.Point(15, 164); + this.label96.Name = "label96"; + this.label96.Size = new System.Drawing.Size(45, 13); + this.label96.TabIndex = 62; + this.label96.Text = "Joystick"; + // + // label95 + // + this.label95.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label95.Location = new System.Drawing.Point(15, 113); + this.label95.Name = "label95"; + this.label95.Size = new System.Drawing.Size(44, 13); + this.label95.TabIndex = 63; + this.label95.Text = "Speech"; + // + // CHK_speechbattery + // + this.CHK_speechbattery.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_speechbattery.Location = new System.Drawing.Point(456, 109); + this.CHK_speechbattery.Name = "CHK_speechbattery"; + this.CHK_speechbattery.Size = new System.Drawing.Size(102, 17); + this.CHK_speechbattery.TabIndex = 64; + this.CHK_speechbattery.Text = "Battery Warning"; + this.CHK_speechbattery.UseVisualStyleBackColor = true; + this.CHK_speechbattery.CheckedChanged += new System.EventHandler(this.CHK_speechbattery_CheckedChanged); + // + // CHK_speechcustom + // + this.CHK_speechcustom.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_speechcustom.Location = new System.Drawing.Point(363, 109); + this.CHK_speechcustom.Name = "CHK_speechcustom"; + this.CHK_speechcustom.Size = new System.Drawing.Size(87, 17); + this.CHK_speechcustom.TabIndex = 65; + this.CHK_speechcustom.Text = "Time Interval"; + this.CHK_speechcustom.UseVisualStyleBackColor = true; + this.CHK_speechcustom.CheckedChanged += new System.EventHandler(this.CHK_speechcustom_CheckedChanged); + // + // CHK_speechmode + // + this.CHK_speechmode.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_speechmode.Location = new System.Drawing.Point(307, 109); + this.CHK_speechmode.Name = "CHK_speechmode"; + this.CHK_speechmode.Size = new System.Drawing.Size(56, 17); + this.CHK_speechmode.TabIndex = 66; + this.CHK_speechmode.Text = "Mode "; + this.CHK_speechmode.UseVisualStyleBackColor = true; + this.CHK_speechmode.CheckedChanged += new System.EventHandler(this.CHK_speechmode_CheckedChanged); + // + // CHK_speechwaypoint + // + this.CHK_speechwaypoint.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_speechwaypoint.Location = new System.Drawing.Point(230, 109); + this.CHK_speechwaypoint.Name = "CHK_speechwaypoint"; + this.CHK_speechwaypoint.Size = new System.Drawing.Size(71, 17); + this.CHK_speechwaypoint.TabIndex = 67; + this.CHK_speechwaypoint.Text = "Waypoint"; + this.CHK_speechwaypoint.UseVisualStyleBackColor = true; + this.CHK_speechwaypoint.CheckedChanged += new System.EventHandler(this.CHK_speechwaypoint_CheckedChanged); + // + // label94 + // + this.label94.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label94.Location = new System.Drawing.Point(15, 85); + this.label94.Name = "label94"; + this.label94.Size = new System.Drawing.Size(57, 13); + this.label94.TabIndex = 68; + this.label94.Text = "OSD Color"; + // + // CMB_osdcolor + // + this.CMB_osdcolor.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.CMB_osdcolor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_osdcolor.FormattingEnabled = true; + this.CMB_osdcolor.Location = new System.Drawing.Point(124, 82); + this.CMB_osdcolor.Name = "CMB_osdcolor"; + this.CMB_osdcolor.Size = new System.Drawing.Size(138, 21); + this.CMB_osdcolor.TabIndex = 69; + this.CMB_osdcolor.SelectedIndexChanged += new System.EventHandler(this.CMB_osdcolor_SelectedIndexChanged); + // + // CMB_language + // + this.CMB_language.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_language.FormattingEnabled = true; + this.CMB_language.Location = new System.Drawing.Point(124, 133); + this.CMB_language.Name = "CMB_language"; + this.CMB_language.Size = new System.Drawing.Size(138, 21); + this.CMB_language.TabIndex = 70; + this.CMB_language.SelectedIndexChanged += new System.EventHandler(this.CMB_language_SelectedIndexChanged); + // + // label93 + // + this.label93.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label93.Location = new System.Drawing.Point(15, 137); + this.label93.Name = "label93"; + this.label93.Size = new System.Drawing.Size(69, 13); + this.label93.TabIndex = 71; + this.label93.Text = "UI Language"; + // + // CHK_enablespeech + // + this.CHK_enablespeech.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_enablespeech.Location = new System.Drawing.Point(124, 109); + this.CHK_enablespeech.Name = "CHK_enablespeech"; + this.CHK_enablespeech.Size = new System.Drawing.Size(99, 17); + this.CHK_enablespeech.TabIndex = 72; + this.CHK_enablespeech.Text = "Enable Speech"; + this.CHK_enablespeech.UseVisualStyleBackColor = true; + this.CHK_enablespeech.CheckedChanged += new System.EventHandler(this.CHK_enablespeech_CheckedChanged); + // + // CHK_hudshow + // + this.CHK_hudshow.Checked = true; + this.CHK_hudshow.CheckState = System.Windows.Forms.CheckState.Checked; + this.CHK_hudshow.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_hudshow.Location = new System.Drawing.Point(537, 17); + this.CHK_hudshow.Name = "CHK_hudshow"; + this.CHK_hudshow.Size = new System.Drawing.Size(125, 17); + this.CHK_hudshow.TabIndex = 73; + this.CHK_hudshow.Text = "Enable HUD Overlay"; + this.CHK_hudshow.UseVisualStyleBackColor = true; + this.CHK_hudshow.Click += new System.EventHandler(this.CHK_hudshow_CheckedChanged); + // + // label92 + // + this.label92.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label92.Location = new System.Drawing.Point(15, 18); + this.label92.Name = "label92"; + this.label92.Size = new System.Drawing.Size(100, 23); + this.label92.TabIndex = 74; + this.label92.Text = "Video Device"; + // + // CMB_videosources + // + this.CMB_videosources.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CMB_videosources.FormattingEnabled = true; + this.CMB_videosources.Location = new System.Drawing.Point(124, 15); + this.CMB_videosources.Name = "CMB_videosources"; + this.CMB_videosources.Size = new System.Drawing.Size(245, 21); + this.CMB_videosources.TabIndex = 75; + this.CMB_videosources.SelectedIndexChanged += new System.EventHandler(this.CMB_videosources_SelectedIndexChanged); + // + // BUT_Joystick + // + this.BUT_Joystick.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_Joystick.Location = new System.Drawing.Point(124, 160); + this.BUT_Joystick.Name = "BUT_Joystick"; + this.BUT_Joystick.Size = new System.Drawing.Size(99, 23); + this.BUT_Joystick.TabIndex = 76; + this.BUT_Joystick.Text = "Joystick Setup"; + this.BUT_Joystick.UseVisualStyleBackColor = true; + this.BUT_Joystick.Click += new System.EventHandler(this.BUT_Joystick_Click); + // + // BUT_videostop + // + this.BUT_videostop.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_videostop.Location = new System.Drawing.Point(456, 13); + this.BUT_videostop.Name = "BUT_videostop"; + this.BUT_videostop.Size = new System.Drawing.Size(75, 23); + this.BUT_videostop.TabIndex = 77; + this.BUT_videostop.Text = "Stop"; + this.BUT_videostop.UseVisualStyleBackColor = true; + this.BUT_videostop.Click += new System.EventHandler(this.BUT_videostop_Click); + // + // BUT_videostart + // + this.BUT_videostart.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_videostart.Location = new System.Drawing.Point(375, 13); + this.BUT_videostart.Name = "BUT_videostart"; + this.BUT_videostart.Size = new System.Drawing.Size(75, 23); + this.BUT_videostart.TabIndex = 78; + this.BUT_videostart.Text = "Start"; + this.BUT_videostart.UseVisualStyleBackColor = true; + this.BUT_videostart.Click += new System.EventHandler(this.BUT_videostart_Click); + // + // ConfigPlanner + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.label33); + this.Controls.Add(this.CMB_ratesensors); + this.Controls.Add(this.label26); + this.Controls.Add(this.CMB_videoresolutions); + this.Controls.Add(this.label12); + this.Controls.Add(this.CHK_GDIPlus); + this.Controls.Add(this.label24); + this.Controls.Add(this.CHK_loadwponconnect); + this.Controls.Add(this.label23); + this.Controls.Add(this.NUM_tracklength); + this.Controls.Add(this.CHK_speechaltwarning); + this.Controls.Add(this.label108); + this.Controls.Add(this.CHK_resetapmonconnect); + this.Controls.Add(this.CHK_mavdebug); + this.Controls.Add(this.label107); + this.Controls.Add(this.CMB_raterc); + this.Controls.Add(this.label104); + this.Controls.Add(this.label103); + this.Controls.Add(this.label102); + this.Controls.Add(this.label101); + this.Controls.Add(this.CMB_ratestatus); + this.Controls.Add(this.CMB_rateposition); + this.Controls.Add(this.CMB_rateattitude); + this.Controls.Add(this.label99); + this.Controls.Add(this.label98); + this.Controls.Add(this.label97); + this.Controls.Add(this.CMB_speedunits); + this.Controls.Add(this.CMB_distunits); + this.Controls.Add(this.label96); + this.Controls.Add(this.label95); + this.Controls.Add(this.CHK_speechbattery); + this.Controls.Add(this.CHK_speechcustom); + this.Controls.Add(this.CHK_speechmode); + this.Controls.Add(this.CHK_speechwaypoint); + this.Controls.Add(this.label94); + this.Controls.Add(this.CMB_osdcolor); + this.Controls.Add(this.CMB_language); + this.Controls.Add(this.label93); + this.Controls.Add(this.CHK_enablespeech); + this.Controls.Add(this.CHK_hudshow); + this.Controls.Add(this.label92); + this.Controls.Add(this.CMB_videosources); + this.Controls.Add(this.BUT_Joystick); + this.Controls.Add(this.BUT_videostop); + this.Controls.Add(this.BUT_videostart); + this.Name = "ConfigPlanner"; + this.Size = new System.Drawing.Size(682, 398); + ((System.ComponentModel.ISupportInitialize)(this.NUM_tracklength)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label33; + private System.Windows.Forms.ComboBox CMB_ratesensors; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.ComboBox CMB_videoresolutions; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.CheckBox CHK_GDIPlus; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.CheckBox CHK_loadwponconnect; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.NumericUpDown NUM_tracklength; + private System.Windows.Forms.CheckBox CHK_speechaltwarning; + private System.Windows.Forms.Label label108; + private System.Windows.Forms.CheckBox CHK_resetapmonconnect; + private System.Windows.Forms.CheckBox CHK_mavdebug; + private System.Windows.Forms.Label label107; + private System.Windows.Forms.ComboBox CMB_raterc; + private System.Windows.Forms.Label label104; + private System.Windows.Forms.Label label103; + private System.Windows.Forms.Label label102; + private System.Windows.Forms.Label label101; + private System.Windows.Forms.ComboBox CMB_ratestatus; + private System.Windows.Forms.ComboBox CMB_rateposition; + private System.Windows.Forms.ComboBox CMB_rateattitude; + private System.Windows.Forms.Label label99; + private System.Windows.Forms.Label label98; + private System.Windows.Forms.Label label97; + private System.Windows.Forms.ComboBox CMB_speedunits; + private System.Windows.Forms.ComboBox CMB_distunits; + private System.Windows.Forms.Label label96; + private System.Windows.Forms.Label label95; + private System.Windows.Forms.CheckBox CHK_speechbattery; + private System.Windows.Forms.CheckBox CHK_speechcustom; + private System.Windows.Forms.CheckBox CHK_speechmode; + private System.Windows.Forms.CheckBox CHK_speechwaypoint; + private System.Windows.Forms.Label label94; + private System.Windows.Forms.ComboBox CMB_osdcolor; + private System.Windows.Forms.ComboBox CMB_language; + private System.Windows.Forms.Label label93; + private System.Windows.Forms.CheckBox CHK_enablespeech; + private System.Windows.Forms.CheckBox CHK_hudshow; + private System.Windows.Forms.Label label92; + private System.Windows.Forms.ComboBox CMB_videosources; + private MyButton BUT_Joystick; + private MyButton BUT_videostop; + private MyButton BUT_videostart; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs new file mode 100644 index 000000000..5040d85be --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs @@ -0,0 +1,372 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Globalization; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; +using DirectShowLib; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class ConfigPlanner : UserControl + { + // AR todo: replicate this functionality + private bool startup = false; + + public ConfigPlanner() + { + InitializeComponent(); + } + + + private void BUT_videostart_Click(object sender, EventArgs e) + { + // stop first + BUT_videostop_Click(sender, e); + + var bmp = (GCSViews.Configuration.GCSBitmapInfo)CMB_videoresolutions.SelectedItem; + + try + { + MainV2.cam = new WebCamService.Capture(CMB_videosources.SelectedIndex, bmp.Media); + + MainV2.cam.showhud = CHK_hudshow.Checked; + + MainV2.cam.Start(); + + MainV2.config["video_options"] = CMB_videoresolutions.SelectedIndex; + + BUT_videostart.Enabled = false; + } + catch (Exception ex) { CustomMessageBox.Show("Camera Fail: " + ex.Message); } + + } + + private void BUT_videostop_Click(object sender, EventArgs e) + { + BUT_videostart.Enabled = true; + if (MainV2.cam != null) + { + MainV2.cam.Dispose(); + MainV2.cam = null; + } + } + + private void CMB_videosources_MouseClick(object sender, MouseEventArgs e) + { + // the reason why i dont populate this list is because on linux/mac this call will fail. + WebCamService.Capture capt = new WebCamService.Capture(); + + List<string> devices = WebCamService.Capture.getDevices(); + + CMB_videosources.DataSource = devices; + + capt.Dispose(); + } + + private void CMB_videosources_SelectedIndexChanged(object sender, EventArgs e) + { + int hr; + int count; + int size; + object o; + IBaseFilter capFilter = null; + ICaptureGraphBuilder2 capGraph = null; + AMMediaType media = null; + VideoInfoHeader v; + VideoStreamConfigCaps c; + List<GCSViews.Configuration.GCSBitmapInfo> modes = new List<GCSViews.Configuration.GCSBitmapInfo>(); + + // Get the ICaptureGraphBuilder2 + capGraph = (ICaptureGraphBuilder2)new CaptureGraphBuilder2(); + IFilterGraph2 m_FilterGraph = (IFilterGraph2)new FilterGraph(); + + DsDevice[] capDevices; + capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); + + // Add the video device + hr = m_FilterGraph.AddSourceFilterForMoniker(capDevices[CMB_videosources.SelectedIndex].Mon, null, "Video input", out capFilter); + try + { + DsError.ThrowExceptionForHR(hr); + } + catch (Exception ex) + { + CustomMessageBox.Show("Can not add video source\n" + ex.ToString()); + return; + } + + // Find the stream config interface + hr = capGraph.FindInterface(PinCategory.Capture, MediaType.Video, capFilter, typeof(IAMStreamConfig).GUID, out o); + DsError.ThrowExceptionForHR(hr); + + IAMStreamConfig videoStreamConfig = o as IAMStreamConfig; + if (videoStreamConfig == null) + { + throw new Exception("Failed to get IAMStreamConfig"); + } + + hr = videoStreamConfig.GetNumberOfCapabilities(out count, out size); + DsError.ThrowExceptionForHR(hr); + IntPtr TaskMemPointer = Marshal.AllocCoTaskMem(size); + for (int i = 0; i < count; i++) + { + IntPtr ptr = IntPtr.Zero; + + hr = videoStreamConfig.GetStreamCaps(i, out media, TaskMemPointer); + v = (VideoInfoHeader)Marshal.PtrToStructure(media.formatPtr, typeof(VideoInfoHeader)); + c = (VideoStreamConfigCaps)Marshal.PtrToStructure(TaskMemPointer, typeof(VideoStreamConfigCaps)); + modes.Add(new GCSViews.Configuration.GCSBitmapInfo(v.BmiHeader.Width, v.BmiHeader.Height, c.MaxFrameInterval, c.VideoStandard.ToString(), media)); + } + Marshal.FreeCoTaskMem(TaskMemPointer); + DsUtils.FreeAMMediaType(media); + + CMB_videoresolutions.DataSource = modes; + + if (MainV2.getConfig("video_options") != "" && CMB_videosources.Text != "") + { + CMB_videoresolutions.SelectedIndex = int.Parse(MainV2.getConfig("video_options")); + } + } + + private void CHK_hudshow_CheckedChanged(object sender, EventArgs e) + { + GCSViews.FlightData.myhud.hudon = CHK_hudshow.Checked; + } + + private void CHK_enablespeech_CheckedChanged(object sender, EventArgs e) + { + MainV2.speechEnable = CHK_enablespeech.Checked; + MainV2.config["speechenable"] = CHK_enablespeech.Checked; + if (MainV2.speechEngine != null) + MainV2.speechEngine.SpeakAsyncCancelAll(); + } + + private void CMB_language_SelectedIndexChanged(object sender, EventArgs e) + { + MainV2.instance.changelanguage((CultureInfo)CMB_language.SelectedItem); + +#if !DEBUG + MessageBox.Show("Please Restart the Planner"); + + Application.Exit(); +#endif + } + + private void CMB_osdcolor_SelectedIndexChanged(object sender, EventArgs e) + { + if (startup) + return; + if (CMB_osdcolor.Text != "") + { + MainV2.config["hudcolor"] = CMB_osdcolor.Text; + GCSViews.FlightData.myhud.hudcolor = Color.FromKnownColor((KnownColor)Enum.Parse(typeof(KnownColor), CMB_osdcolor.Text)); + } + } + + private void CHK_speechwaypoint_CheckedChanged(object sender, EventArgs e) + { + if (startup) + return; + MainV2.config["speechwaypointenabled"] = ((CheckBox)sender).Checked.ToString(); + + if (((CheckBox)sender).Checked) + { + string speechstring = "Heading to Waypoint {wpn}"; + if (MainV2.config["speechwaypoint"] != null) + speechstring = MainV2.config["speechwaypoint"].ToString(); + Common.InputBox("Notification", "What do you want it to say?", ref speechstring); + MainV2.config["speechwaypoint"] = speechstring; + } + } + + private void CHK_speechmode_CheckedChanged(object sender, EventArgs e) + { + if (startup) + return; + MainV2.config["speechmodeenabled"] = ((CheckBox)sender).Checked.ToString(); + + if (((CheckBox)sender).Checked) + { + string speechstring = "Mode changed to {mode}"; + if (MainV2.config["speechmode"] != null) + speechstring = MainV2.config["speechmode"].ToString(); + Common.InputBox("Notification", "What do you want it to say?", ref speechstring); + MainV2.config["speechmode"] = speechstring; + } + } + + private void CHK_speechcustom_CheckedChanged(object sender, EventArgs e) + { + if (startup) + return; + MainV2.config["speechcustomenabled"] = ((CheckBox)sender).Checked.ToString(); + + if (((CheckBox)sender).Checked) + { + string speechstring = "Heading to Waypoint {wpn}, altitude is {alt}, Ground speed is {gsp} "; + if (MainV2.config["speechcustom"] != null) + speechstring = MainV2.config["speechcustom"].ToString(); + Common.InputBox("Notification", "What do you want it to say?", ref speechstring); + MainV2.config["speechcustom"] = speechstring; + } + } + + private void BUT_rerequestparams_Click(object sender, EventArgs e) + { + if (!MainV2.comPort.BaseStream.IsOpen) + return; + ((MyButton)sender).Enabled = false; + try + { + + MainV2.comPort.getParamList(); + + + + + } + catch { CustomMessageBox.Show("Error: getting param list"); } + + + ((MyButton)sender).Enabled = true; + startup = true; + + // AR todo: fix this up + //Configuration_Load(null, null); + } + + private void CHK_speechbattery_CheckedChanged(object sender, EventArgs e) + { + if (startup) + return; + MainV2.config["speechbatteryenabled"] = ((CheckBox)sender).Checked.ToString(); + + if (((CheckBox)sender).Checked) + { + string speechstring = "WARNING, Battery at {batv} Volt"; + if (MainV2.config["speechbattery"] != null) + speechstring = MainV2.config["speechbattery"].ToString(); + Common.InputBox("Notification", "What do you want it to say?", ref speechstring); + MainV2.config["speechbattery"] = speechstring; + + speechstring = "9.6"; + if (MainV2.config["speechbatteryvolt"] != null) + speechstring = MainV2.config["speechbatteryvolt"].ToString(); + Common.InputBox("Battery Level", "What Voltage do you want to warn at?", ref speechstring); + MainV2.config["speechbatteryvolt"] = speechstring; + + } + } + + private void BUT_Joystick_Click(object sender, EventArgs e) + { + Form joy = new JoystickSetup(); + ThemeManager.ApplyThemeTo(joy); + joy.Show(); + } + + private void CMB_distunits_SelectedIndexChanged(object sender, EventArgs e) + { + if (startup) + return; + MainV2.config["distunits"] = CMB_distunits.Text; + MainV2.instance.changeunits(); + } + + private void CMB_speedunits_SelectedIndexChanged(object sender, EventArgs e) + { + if (startup) + return; + MainV2.config["speedunits"] = CMB_speedunits.Text; + MainV2.instance.changeunits(); + } + + private void CMB_rateattitude_SelectedIndexChanged(object sender, EventArgs e) + { + MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text; + MainV2.cs.rateattitude = byte.Parse(((ComboBox)sender).Text); + } + + private void CMB_rateposition_SelectedIndexChanged(object sender, EventArgs e) + { + MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text; + MainV2.cs.rateposition = byte.Parse(((ComboBox)sender).Text); + } + + private void CMB_ratestatus_SelectedIndexChanged(object sender, EventArgs e) + { + MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text; + MainV2.cs.ratestatus = byte.Parse(((ComboBox)sender).Text); + } + + private void CMB_raterc_SelectedIndexChanged(object sender, EventArgs e) + { + MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text; + MainV2.cs.raterc = byte.Parse(((ComboBox)sender).Text); + } + + private void CMB_ratesensors_SelectedIndexChanged(object sender, EventArgs e) + { + MainV2.config[((ComboBox)sender).Name] = ((ComboBox)sender).Text; + MainV2.cs.ratesensors = byte.Parse(((ComboBox)sender).Text); + } + + private void CHK_mavdebug_CheckedChanged(object sender, EventArgs e) + { + MainV2.comPort.debugmavlink = CHK_mavdebug.Checked; + } + + private void CHK_resetapmonconnect_CheckedChanged(object sender, EventArgs e) + { + MainV2.config[((CheckBox)sender).Name] = ((CheckBox)sender).Checked.ToString(); + } + + private void CHK_speechaltwarning_CheckedChanged(object sender, EventArgs e) + { + if (startup) + return; + MainV2.config["speechaltenabled"] = ((CheckBox)sender).Checked.ToString(); + + if (((CheckBox)sender).Checked) + { + string speechstring = "WARNING, low altitude {alt}"; + if (MainV2.config["speechalt"] != null) + speechstring = MainV2.config["speechalt"].ToString(); + Common.InputBox("Notification", "What do you want it to say?", ref speechstring); + MainV2.config["speechalt"] = speechstring; + + speechstring = "2"; + if (MainV2.config["speechaltheight"] != null) + speechstring = MainV2.config["speechaltheight"].ToString(); + Common.InputBox("Min Alt", "What altitude do you want to warn at? (relative to home)", ref speechstring); + MainV2.config["speechaltheight"] = (double.Parse(speechstring) / MainV2.cs.multiplierdist).ToString(); // save as m + + } + } + + private void NUM_tracklength_ValueChanged(object sender, EventArgs e) + { + MainV2.config["NUM_tracklength"] = NUM_tracklength.Value.ToString(); + + } + + private void CHK_loadwponconnect_CheckedChanged(object sender, EventArgs e) + { + MainV2.config["loadwpsonconnect"] = CHK_loadwponconnect.Checked.ToString(); + } + + private void CHK_GDIPlus_CheckedChanged(object sender, EventArgs e) + { + if (startup) + return; + CustomMessageBox.Show("You need to restart the planner for this to take effect"); + MainV2.config["CHK_GDIPlus"] = CHK_GDIPlus.Checked.ToString(); + } + + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.resx new file mode 100644 index 000000000..7080a7d11 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.Designer.cs new file mode 100644 index 000000000..04dca22d3 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.Designer.cs @@ -0,0 +1,366 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigRadioInput + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.groupBoxElevons = new System.Windows.Forms.GroupBox(); + this.CHK_mixmode = new System.Windows.Forms.CheckBox(); + this.CHK_elevonch2rev = new System.Windows.Forms.CheckBox(); + this.CHK_elevonrev = new System.Windows.Forms.CheckBox(); + this.CHK_elevonch1rev = new System.Windows.Forms.CheckBox(); + this.CHK_revch3 = new System.Windows.Forms.CheckBox(); + this.CHK_revch4 = new System.Windows.Forms.CheckBox(); + this.CHK_revch2 = new System.Windows.Forms.CheckBox(); + this.CHK_revch1 = new System.Windows.Forms.CheckBox(); + this.BUT_Calibrateradio = new ArdupilotMega.MyButton(); + this.BAR8 = new ArdupilotMega.HorizontalProgressBar2(); + this.BAR7 = new ArdupilotMega.HorizontalProgressBar2(); + this.BAR6 = new ArdupilotMega.HorizontalProgressBar2(); + this.BAR5 = new ArdupilotMega.HorizontalProgressBar2(); + this.BARpitch = new ArdupilotMega.VerticalProgressBar2(); + this.BARthrottle = new ArdupilotMega.VerticalProgressBar2(); + this.BARyaw = new ArdupilotMega.HorizontalProgressBar2(); + this.BARroll = new ArdupilotMega.HorizontalProgressBar2(); + this.currentStateBindingSource = new System.Windows.Forms.BindingSource(this.components); + this.groupBoxElevons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.currentStateBindingSource)).BeginInit(); + this.SuspendLayout(); + // + // groupBoxElevons + // + this.groupBoxElevons.Controls.Add(this.CHK_mixmode); + this.groupBoxElevons.Controls.Add(this.CHK_elevonch2rev); + this.groupBoxElevons.Controls.Add(this.CHK_elevonrev); + this.groupBoxElevons.Controls.Add(this.CHK_elevonch1rev); + this.groupBoxElevons.Location = new System.Drawing.Point(12, 356); + this.groupBoxElevons.Name = "groupBoxElevons"; + this.groupBoxElevons.Size = new System.Drawing.Size(409, 42); + this.groupBoxElevons.TabIndex = 125; + this.groupBoxElevons.TabStop = false; + this.groupBoxElevons.Text = "Elevon Config"; + // + // CHK_mixmode + // + this.CHK_mixmode.AutoSize = true; + this.CHK_mixmode.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_mixmode.Location = new System.Drawing.Point(13, 19); + this.CHK_mixmode.Name = "CHK_mixmode"; + this.CHK_mixmode.Size = new System.Drawing.Size(64, 17); + this.CHK_mixmode.TabIndex = 107; + this.CHK_mixmode.Text = "Elevons"; + this.CHK_mixmode.UseVisualStyleBackColor = true; + this.CHK_mixmode.CheckedChanged += new System.EventHandler(this.CHK_mixmode_CheckedChanged); + // + // CHK_elevonch2rev + // + this.CHK_elevonch2rev.AutoSize = true; + this.CHK_elevonch2rev.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_elevonch2rev.Location = new System.Drawing.Point(292, 19); + this.CHK_elevonch2rev.Name = "CHK_elevonch2rev"; + this.CHK_elevonch2rev.Size = new System.Drawing.Size(111, 17); + this.CHK_elevonch2rev.TabIndex = 110; + this.CHK_elevonch2rev.Text = "Elevons CH2 Rev"; + this.CHK_elevonch2rev.UseVisualStyleBackColor = true; + this.CHK_elevonch2rev.CheckedChanged += new System.EventHandler(this.CHK_elevonch2rev_CheckedChanged); + // + // CHK_elevonrev + // + this.CHK_elevonrev.AutoSize = true; + this.CHK_elevonrev.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_elevonrev.Location = new System.Drawing.Point(82, 19); + this.CHK_elevonrev.Name = "CHK_elevonrev"; + this.CHK_elevonrev.Size = new System.Drawing.Size(87, 17); + this.CHK_elevonrev.TabIndex = 108; + this.CHK_elevonrev.Text = "Elevons Rev"; + this.CHK_elevonrev.UseVisualStyleBackColor = true; + this.CHK_elevonrev.CheckedChanged += new System.EventHandler(this.CHK_elevonrev_CheckedChanged); + // + // CHK_elevonch1rev + // + this.CHK_elevonch1rev.AutoSize = true; + this.CHK_elevonch1rev.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_elevonch1rev.Location = new System.Drawing.Point(175, 19); + this.CHK_elevonch1rev.Name = "CHK_elevonch1rev"; + this.CHK_elevonch1rev.Size = new System.Drawing.Size(111, 17); + this.CHK_elevonch1rev.TabIndex = 109; + this.CHK_elevonch1rev.Text = "Elevons CH1 Rev"; + this.CHK_elevonch1rev.UseVisualStyleBackColor = true; + this.CHK_elevonch1rev.CheckedChanged += new System.EventHandler(this.CHK_elevonch1rev_CheckedChanged); + // + // CHK_revch3 + // + this.CHK_revch3.AutoSize = true; + this.CHK_revch3.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_revch3.Location = new System.Drawing.Point(278, 161); + this.CHK_revch3.Name = "CHK_revch3"; + this.CHK_revch3.Size = new System.Drawing.Size(66, 17); + this.CHK_revch3.TabIndex = 124; + this.CHK_revch3.Text = "Reverse"; + this.CHK_revch3.UseVisualStyleBackColor = true; + this.CHK_revch3.CheckedChanged += new System.EventHandler(this.CHK_revch3_CheckedChanged); + // + // CHK_revch4 + // + this.CHK_revch4.AutoSize = true; + this.CHK_revch4.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_revch4.Location = new System.Drawing.Point(306, 313); + this.CHK_revch4.Name = "CHK_revch4"; + this.CHK_revch4.Size = new System.Drawing.Size(66, 17); + this.CHK_revch4.TabIndex = 123; + this.CHK_revch4.Text = "Reverse"; + this.CHK_revch4.UseVisualStyleBackColor = true; + this.CHK_revch4.CheckedChanged += new System.EventHandler(this.CHK_revch4_CheckedChanged); + // + // CHK_revch2 + // + this.CHK_revch2.AutoSize = true; + this.CHK_revch2.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_revch2.Location = new System.Drawing.Point(62, 161); + this.CHK_revch2.Name = "CHK_revch2"; + this.CHK_revch2.Size = new System.Drawing.Size(66, 17); + this.CHK_revch2.TabIndex = 122; + this.CHK_revch2.Text = "Reverse"; + this.CHK_revch2.UseVisualStyleBackColor = true; + this.CHK_revch2.CheckedChanged += new System.EventHandler(this.CHK_revch2_CheckedChanged); + // + // CHK_revch1 + // + this.CHK_revch1.AutoSize = true; + this.CHK_revch1.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CHK_revch1.Location = new System.Drawing.Point(306, 19); + this.CHK_revch1.Name = "CHK_revch1"; + this.CHK_revch1.Size = new System.Drawing.Size(66, 17); + this.CHK_revch1.TabIndex = 121; + this.CHK_revch1.Text = "Reverse"; + this.CHK_revch1.UseVisualStyleBackColor = true; + this.CHK_revch1.CheckedChanged += new System.EventHandler(this.CHK_revch1_CheckedChanged); + // + // BUT_Calibrateradio + // + this.BUT_Calibrateradio.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_Calibrateradio.Location = new System.Drawing.Point(473, 347); + this.BUT_Calibrateradio.Name = "BUT_Calibrateradio"; + this.BUT_Calibrateradio.Size = new System.Drawing.Size(134, 23); + this.BUT_Calibrateradio.TabIndex = 120; + this.BUT_Calibrateradio.Text = "Calibrate Radio"; + this.BUT_Calibrateradio.UseVisualStyleBackColor = true; + this.BUT_Calibrateradio.Click += new System.EventHandler(this.BUT_Calibrateradio_Click); + // + // BAR8 + // + this.BAR8.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(255))))); + this.BAR8.BorderColor = System.Drawing.SystemColors.ActiveBorder; + this.BAR8.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.currentStateBindingSource, "ch8in", true)); + this.BAR8.Label = "Radio 8"; + this.BAR8.Location = new System.Drawing.Point(437, 247); + this.BAR8.Maximum = 2200; + this.BAR8.maxline = 0; + this.BAR8.Minimum = 800; + this.BAR8.minline = 0; + this.BAR8.Name = "BAR8"; + this.BAR8.Size = new System.Drawing.Size(170, 25); + this.BAR8.TabIndex = 119; + this.BAR8.Value = 1500; + this.BAR8.ValueColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(255))))); + // + // BAR7 + // + this.BAR7.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(255))))); + this.BAR7.BorderColor = System.Drawing.SystemColors.ActiveBorder; + this.BAR7.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.currentStateBindingSource, "ch7in", true)); + this.BAR7.Label = "Radio 7"; + this.BAR7.Location = new System.Drawing.Point(437, 192); + this.BAR7.Maximum = 2200; + this.BAR7.maxline = 0; + this.BAR7.Minimum = 800; + this.BAR7.minline = 0; + this.BAR7.Name = "BAR7"; + this.BAR7.Size = new System.Drawing.Size(170, 25); + this.BAR7.TabIndex = 118; + this.BAR7.Value = 1500; + this.BAR7.ValueColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(255))))); + // + // BAR6 + // + this.BAR6.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(255))))); + this.BAR6.BorderColor = System.Drawing.SystemColors.ActiveBorder; + this.BAR6.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.currentStateBindingSource, "ch6in", true)); + this.BAR6.Label = "Radio 6"; + this.BAR6.Location = new System.Drawing.Point(437, 137); + this.BAR6.Maximum = 2200; + this.BAR6.maxline = 0; + this.BAR6.Minimum = 800; + this.BAR6.minline = 0; + this.BAR6.Name = "BAR6"; + this.BAR6.Size = new System.Drawing.Size(170, 25); + this.BAR6.TabIndex = 117; + this.BAR6.Value = 1500; + this.BAR6.ValueColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(255))))); + // + // BAR5 + // + this.BAR5.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(255))))); + this.BAR5.BorderColor = System.Drawing.SystemColors.ActiveBorder; + this.BAR5.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.currentStateBindingSource, "ch5in", true)); + this.BAR5.Label = "Radio 5"; + this.BAR5.Location = new System.Drawing.Point(437, 82); + this.BAR5.Maximum = 2200; + this.BAR5.maxline = 0; + this.BAR5.Minimum = 800; + this.BAR5.minline = 0; + this.BAR5.Name = "BAR5"; + this.BAR5.Size = new System.Drawing.Size(170, 25); + this.BAR5.TabIndex = 116; + this.BAR5.Value = 1500; + this.BAR5.ValueColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(255))))); + // + // BARpitch + // + this.BARpitch.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(255))))); + this.BARpitch.BorderColor = System.Drawing.SystemColors.ActiveBorder; + this.BARpitch.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.currentStateBindingSource, "ch2in", true)); + this.BARpitch.Label = "Pitch"; + this.BARpitch.Location = new System.Drawing.Point(134, 64); + this.BARpitch.Maximum = 2200; + this.BARpitch.maxline = 0; + this.BARpitch.Minimum = 800; + this.BARpitch.minline = 0; + this.BARpitch.Name = "BARpitch"; + this.BARpitch.Size = new System.Drawing.Size(47, 211); + this.BARpitch.TabIndex = 115; + this.BARpitch.Value = 1500; + this.BARpitch.ValueColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(255))))); + // + // BARthrottle + // + this.BARthrottle.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(68)))), ((int)(((byte)(69))))); + this.BARthrottle.BorderColor = System.Drawing.SystemColors.ActiveBorder; + this.BARthrottle.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.currentStateBindingSource, "ch3in", true)); + this.BARthrottle.Label = "Throttle"; + this.BARthrottle.Location = new System.Drawing.Point(350, 64); + this.BARthrottle.Maximum = 2200; + this.BARthrottle.maxline = 0; + this.BARthrottle.Minimum = 800; + this.BARthrottle.minline = 0; + this.BARthrottle.Name = "BARthrottle"; + this.BARthrottle.Size = new System.Drawing.Size(47, 211); + this.BARthrottle.TabIndex = 114; + this.BARthrottle.Value = 1000; + this.BARthrottle.ValueColor = System.Drawing.Color.Magenta; + // + // BARyaw + // + this.BARyaw.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(255))))); + this.BARyaw.BorderColor = System.Drawing.SystemColors.ActiveBorder; + this.BARyaw.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.currentStateBindingSource, "ch4in", true)); + this.BARyaw.Label = "Yaw"; + this.BARyaw.Location = new System.Drawing.Point(12, 307); + this.BARyaw.Maximum = 2200; + this.BARyaw.maxline = 0; + this.BARyaw.Minimum = 800; + this.BARyaw.minline = 0; + this.BARyaw.Name = "BARyaw"; + this.BARyaw.Size = new System.Drawing.Size(288, 23); + this.BARyaw.TabIndex = 113; + this.BARyaw.Value = 1500; + this.BARyaw.ValueColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(255))))); + // + // BARroll + // + this.BARroll.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(255))))); + this.BARroll.BorderColor = System.Drawing.SystemColors.ActiveBorder; + this.BARroll.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.currentStateBindingSource, "ch1in", true)); + this.BARroll.Label = "Roll"; + this.BARroll.Location = new System.Drawing.Point(12, 13); + this.BARroll.Maximum = 2200; + this.BARroll.maxline = 0; + this.BARroll.Minimum = 800; + this.BARroll.minline = 0; + this.BARroll.Name = "BARroll"; + this.BARroll.Size = new System.Drawing.Size(288, 23); + this.BARroll.TabIndex = 112; + this.BARroll.Value = 1500; + this.BARroll.ValueColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(0)))), ((int)(((byte)(255))))); + // + // currentStateBindingSource + // + this.currentStateBindingSource.DataSource = typeof(ArdupilotMega.CurrentState); + // + // ConfigRadioInput + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBoxElevons); + this.Controls.Add(this.CHK_revch3); + this.Controls.Add(this.CHK_revch4); + this.Controls.Add(this.CHK_revch2); + this.Controls.Add(this.CHK_revch1); + this.Controls.Add(this.BUT_Calibrateradio); + this.Controls.Add(this.BAR8); + this.Controls.Add(this.BAR7); + this.Controls.Add(this.BAR6); + this.Controls.Add(this.BAR5); + this.Controls.Add(this.BARpitch); + this.Controls.Add(this.BARthrottle); + this.Controls.Add(this.BARyaw); + this.Controls.Add(this.BARroll); + this.Name = "ConfigRadioInput"; + this.Size = new System.Drawing.Size(628, 406); + this.Load += new System.EventHandler(this.ConfigRadioInput_Load); + this.groupBoxElevons.ResumeLayout(false); + this.groupBoxElevons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.currentStateBindingSource)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBoxElevons; + private System.Windows.Forms.CheckBox CHK_mixmode; + private System.Windows.Forms.CheckBox CHK_elevonch2rev; + private System.Windows.Forms.CheckBox CHK_elevonrev; + private System.Windows.Forms.CheckBox CHK_elevonch1rev; + private System.Windows.Forms.CheckBox CHK_revch3; + private System.Windows.Forms.CheckBox CHK_revch4; + private System.Windows.Forms.CheckBox CHK_revch2; + private System.Windows.Forms.CheckBox CHK_revch1; + private MyButton BUT_Calibrateradio; + private HorizontalProgressBar2 BAR8; + private HorizontalProgressBar2 BAR7; + private HorizontalProgressBar2 BAR6; + private HorizontalProgressBar2 BAR5; + private VerticalProgressBar2 BARpitch; + private VerticalProgressBar2 BARthrottle; + private HorizontalProgressBar2 BARyaw; + private HorizontalProgressBar2 BARroll; + private System.Windows.Forms.BindingSource currentStateBindingSource; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.cs new file mode 100644 index 000000000..1be32e8e8 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.cs @@ -0,0 +1,357 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class ConfigRadioInput : UserControl + { + bool startup = false; + bool run = false; + + float[] rcmin = new float[8]; + float[] rcmax = new float[8]; + float[] rctrim = new float[8]; + + Timer timer = new Timer(); + + public ConfigRadioInput() + { + InitializeComponent(); + + // setup rc calib extents + for (int a = 0; a < rcmin.Length; a++) + { + rcmin[a] = 3000; + rcmax[a] = 0; + rctrim[a] = 1500; + } + + // setup rc update + timer.Tick += new EventHandler(timer_Tick); + + timer.Enabled = true; + timer.Interval = 100; + timer.Start(); + } + + void timer_Tick(object sender, EventArgs e) + { + // update all linked controls - 10hz + try + { + MainV2.cs.UpdateCurrentSettings(currentStateBindingSource); + } + catch { } + } + + private void ConfigRadioInput_Load(object sender, EventArgs e) + { + startup = true; + + if (MainV2.cs.firmware == MainV2.Firmwares.ArduCopter2) + { + groupBoxElevons.Visible = false; + } + else + { + try + { + CHK_mixmode.Checked = MainV2.comPort.param["ELEVON_MIXING"].ToString() == "1"; + CHK_elevonrev.Checked = MainV2.comPort.param["ELEVON_REVERSE"].ToString() == "1"; + CHK_elevonch1rev.Checked = MainV2.comPort.param["ELEVON_CH1_REV"].ToString() == "1"; + CHK_elevonch2rev.Checked = MainV2.comPort.param["ELEVON_CH2_REV"].ToString() == "1"; + } + catch { } // this will fail on arducopter + } + try + { + CHK_revch1.Checked = MainV2.comPort.param["RC1_REV"].ToString() == "-1"; + CHK_revch2.Checked = MainV2.comPort.param["RC2_REV"].ToString() == "-1"; + CHK_revch3.Checked = MainV2.comPort.param["RC3_REV"].ToString() == "-1"; + CHK_revch4.Checked = MainV2.comPort.param["RC4_REV"].ToString() == "-1"; + } + catch (Exception ex) { CustomMessageBox.Show("Missing RC rev Param " + ex.ToString()); } + startup = false; + } + + private void BUT_Calibrateradio_Click(object sender, EventArgs e) + { + if (run) + { + BUT_Calibrateradio.Text = "Completed"; + run = false; + return; + } + + CustomMessageBox.Show("Ensure your transmitter is on and receiver is powered and connected\nEnsure your motor does not have power/no props!!!"); + + byte oldrc = MainV2.cs.raterc; + byte oldatt = MainV2.cs.rateattitude; + byte oldpos = MainV2.cs.rateposition; + byte oldstatus = MainV2.cs.ratestatus; + + MainV2.cs.raterc = 10; + MainV2.cs.rateattitude = 0; + MainV2.cs.rateposition = 0; + MainV2.cs.ratestatus = 0; + + try + { + + MainV2.comPort.requestDatastream((byte)ArdupilotMega.MAVLink.MAV_DATA_STREAM.MAV_DATA_STREAM_RC_CHANNELS, 10); + + } + catch { } + + BUT_Calibrateradio.Text = "Click when Done"; + + run = true; + + + while (run) + { + Application.DoEvents(); + + System.Threading.Thread.Sleep(5); + + MainV2.cs.UpdateCurrentSettings(currentStateBindingSource, true, MainV2.comPort); + + // check for non 0 values + if (MainV2.cs.ch1in > 800 && MainV2.cs.ch1in < 2200) + { + rcmin[0] = Math.Min(rcmin[0], MainV2.cs.ch1in); + rcmax[0] = Math.Max(rcmax[0], MainV2.cs.ch1in); + + rcmin[1] = Math.Min(rcmin[1], MainV2.cs.ch2in); + rcmax[1] = Math.Max(rcmax[1], MainV2.cs.ch2in); + + rcmin[2] = Math.Min(rcmin[2], MainV2.cs.ch3in); + rcmax[2] = Math.Max(rcmax[2], MainV2.cs.ch3in); + + rcmin[3] = Math.Min(rcmin[3], MainV2.cs.ch4in); + rcmax[3] = Math.Max(rcmax[3], MainV2.cs.ch4in); + + rcmin[4] = Math.Min(rcmin[4], MainV2.cs.ch5in); + rcmax[4] = Math.Max(rcmax[4], MainV2.cs.ch5in); + + rcmin[5] = Math.Min(rcmin[5], MainV2.cs.ch6in); + rcmax[5] = Math.Max(rcmax[5], MainV2.cs.ch6in); + + rcmin[6] = Math.Min(rcmin[6], MainV2.cs.ch7in); + rcmax[6] = Math.Max(rcmax[6], MainV2.cs.ch7in); + + rcmin[7] = Math.Min(rcmin[7], MainV2.cs.ch8in); + rcmax[7] = Math.Max(rcmax[7], MainV2.cs.ch8in); + + BARroll.minline = (int)rcmin[0]; + BARroll.maxline = (int)rcmax[0]; + + BARpitch.minline = (int)rcmin[1]; + BARpitch.maxline = (int)rcmax[1]; + + BARthrottle.minline = (int)rcmin[2]; + BARthrottle.maxline = (int)rcmax[2]; + + BARyaw.minline = (int)rcmin[3]; + BARyaw.maxline = (int)rcmax[3]; + + BAR5.minline = (int)rcmin[4]; + BAR5.maxline = (int)rcmax[4]; + + BAR6.minline = (int)rcmin[5]; + BAR6.maxline = (int)rcmax[5]; + + BAR7.minline = (int)rcmin[6]; + BAR7.maxline = (int)rcmax[6]; + + BAR8.minline = (int)rcmin[7]; + BAR8.maxline = (int)rcmax[7]; + + } + } + + CustomMessageBox.Show("Ensure all your sticks are centered and throttle is down, and click ok to continue"); + + MainV2.cs.UpdateCurrentSettings(currentStateBindingSource, true, MainV2.comPort); + + rctrim[0] = MainV2.cs.ch1in; + rctrim[1] = MainV2.cs.ch2in; + rctrim[2] = MainV2.cs.ch3in; + rctrim[3] = MainV2.cs.ch4in; + rctrim[4] = MainV2.cs.ch5in; + rctrim[5] = MainV2.cs.ch6in; + rctrim[6] = MainV2.cs.ch7in; + rctrim[7] = MainV2.cs.ch8in; + + string data = "---------------\n"; + + for (int a = 0; a < 8; a++) + { + // we want these to save no matter what + BUT_Calibrateradio.Text = "Saving"; + try + { + if (rcmin[a] != rcmax[a]) + { + MainV2.comPort.setParam("RC" + (a + 1).ToString("0") + "_MIN", rcmin[a]); + MainV2.comPort.setParam("RC" + (a + 1).ToString("0") + "_MAX", rcmax[a]); + } + if (rctrim[a] < 1195 || rctrim[a] > 1205) + MainV2.comPort.setParam("RC" + (a + 1).ToString("0") + "_TRIM", rctrim[a]); + } + catch { CustomMessageBox.Show("Failed to set Channel " + (a + 1).ToString()); } + + data = data + "CH" + (a + 1) + " " + rcmin[a] + " | " + rcmax[a] + "\n"; + } + + MainV2.cs.raterc = oldrc; + MainV2.cs.rateattitude = oldatt; + MainV2.cs.rateposition = oldpos; + MainV2.cs.ratestatus = oldstatus; + + try + { + + MainV2.comPort.requestDatastream((byte)ArdupilotMega.MAVLink.MAV_DATA_STREAM.MAV_DATA_STREAM_RC_CHANNELS, oldrc); + + } + catch { } + + CustomMessageBox.Show("Here are the detected radio options\nNOTE Channels not connected are displayed as 1500 +-2\nNormal values are around 1100 | 1900\nChannel:Min | Max \n" + data, "Radio"); + + BUT_Calibrateradio.Text = "Completed"; + } + + private void CHK_mixmode_CheckedChanged(object sender, EventArgs e) + { + if (startup) + return; + try + { + if (MainV2.comPort.param["ELEVON_MIXING"] == null) + { + CustomMessageBox.Show("Not Available on " + MainV2.cs.firmware.ToString()); + } + else + { + MainV2.comPort.setParam("ELEVON_MIXING", ((CheckBox)sender).Checked == true ? 1 : 0); + } + } + catch { CustomMessageBox.Show("Set ELEVON_MIXING Failed"); } + } + + private void CHK_elevonrev_CheckedChanged(object sender, EventArgs e) + { + if (startup) + return; + try + { + if (MainV2.comPort.param["ELEVON_REVERSE"] == null) + { + CustomMessageBox.Show("Not Available on " + MainV2.cs.firmware.ToString()); + } + else + { + MainV2.comPort.setParam("ELEVON_REVERSE", ((CheckBox)sender).Checked == true ? 1 : 0); + } + } + catch { CustomMessageBox.Show("Set ELEVON_REVERSE Failed"); } + } + + private void CHK_elevonch1rev_CheckedChanged(object sender, EventArgs e) + { + if (startup) + return; + try + { + if (MainV2.comPort.param["ELEVON_CH1_REV"] == null) + { + CustomMessageBox.Show("Not Available on " + MainV2.cs.firmware.ToString()); + } + else + { + MainV2.comPort.setParam("ELEVON_CH1_REV", ((CheckBox)sender).Checked == true ? 1 : 0); + } + } + catch { CustomMessageBox.Show("Set ELEVON_CH1_REV Failed"); } + } + + private void CHK_elevonch2rev_CheckedChanged(object sender, EventArgs e) + { + if (startup) + return; + try + { + if (MainV2.comPort.param["ELEVON_CH2_REV"] == null) + { + CustomMessageBox.Show("Not Available on " + MainV2.cs.firmware.ToString()); + } + else + { + MainV2.comPort.setParam("ELEVON_CH2_REV", ((CheckBox)sender).Checked == true ? 1 : 0); + } + } + catch { CustomMessageBox.Show("Set ELEVON_CH2_REV Failed"); } + } + + private void CHK_revch1_CheckedChanged(object sender, EventArgs e) + { + reverseChannel("RC1_REV", ((CheckBox)sender).Checked, BARroll); + } + + private void CHK_revch2_CheckedChanged(object sender, EventArgs e) + { + reverseChannel("RC2_REV", ((CheckBox)sender).Checked, BARpitch); + } + + private void CHK_revch3_CheckedChanged(object sender, EventArgs e) + { + reverseChannel("RC3_REV", ((CheckBox)sender).Checked, BARthrottle); + } + + private void CHK_revch4_CheckedChanged(object sender, EventArgs e) + { + reverseChannel("RC4_REV", ((CheckBox)sender).Checked, BARyaw); + } + + void reverseChannel(string name, bool normalreverse, Control progressbar) + { + if (normalreverse == true) + { + ((HorizontalProgressBar2)progressbar).reverse = true; + ((HorizontalProgressBar2)progressbar).BackgroundColor = Color.FromArgb(148, 193, 31); + ((HorizontalProgressBar2)progressbar).ValueColor = Color.FromArgb(0x43, 0x44, 0x45); + } + else + { + ((HorizontalProgressBar2)progressbar).reverse = false; + ((HorizontalProgressBar2)progressbar).BackgroundColor = Color.FromArgb(0x43, 0x44, 0x45); + ((HorizontalProgressBar2)progressbar).ValueColor = Color.FromArgb(148, 193, 31); + } + + if (startup) + return; + if (MainV2.comPort.param["SWITCH_ENABLE"] != null && (float)MainV2.comPort.param["SWITCH_ENABLE"] == 1) + { + try + { + MainV2.comPort.setParam("SWITCH_ENABLE", 0); + CustomMessageBox.Show("Disabled Dip Switchs"); + } + catch { CustomMessageBox.Show("Error Disableing Dip Switch"); } + } + try + { + int i = normalreverse == false ? 1 : -1; + MainV2.comPort.setParam(name, i); + } + catch { CustomMessageBox.Show("Error Reversing"); } + } + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.resx new file mode 100644 index 000000000..6791def87 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.resx @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="currentStateBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> + <value>17, 17</value> + </metadata> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.Designer.cs new file mode 100644 index 000000000..7887cd29c --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.Designer.cs @@ -0,0 +1,205 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigRawParams + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + this.BUT_compare = new ArdupilotMega.MyButton(); + this.BUT_rerequestparams = new ArdupilotMega.MyButton(); + this.BUT_writePIDS = new ArdupilotMega.MyButton(); + this.BUT_save = new ArdupilotMega.MyButton(); + this.BUT_load = new ArdupilotMega.MyButton(); + this.Params = new System.Windows.Forms.DataGridView(); + this.Command = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Value = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.Default = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.mavScale = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.RawValue = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.Params)).BeginInit(); + this.SuspendLayout(); + // + // BUT_compare + // + this.BUT_compare.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_compare.Location = new System.Drawing.Point(341, 119); + this.BUT_compare.Name = "BUT_compare"; + this.BUT_compare.Size = new System.Drawing.Size(103, 19); + this.BUT_compare.TabIndex = 72; + this.BUT_compare.Text = "Compare Params"; + this.BUT_compare.UseVisualStyleBackColor = true; + this.BUT_compare.Click += new System.EventHandler(this.BUT_compare_Click); + // + // BUT_rerequestparams + // + this.BUT_rerequestparams.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_rerequestparams.Location = new System.Drawing.Point(341, 94); + this.BUT_rerequestparams.Name = "BUT_rerequestparams"; + this.BUT_rerequestparams.Size = new System.Drawing.Size(103, 19); + this.BUT_rerequestparams.TabIndex = 67; + this.BUT_rerequestparams.Text = "Refresh Params"; + this.BUT_rerequestparams.UseVisualStyleBackColor = true; + this.BUT_rerequestparams.Click += new System.EventHandler(this.BUT_rerequestparams_Click); + // + // BUT_writePIDS + // + this.BUT_writePIDS.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_writePIDS.Location = new System.Drawing.Point(341, 69); + this.BUT_writePIDS.Name = "BUT_writePIDS"; + this.BUT_writePIDS.Size = new System.Drawing.Size(103, 19); + this.BUT_writePIDS.TabIndex = 69; + this.BUT_writePIDS.Text = "Write Params"; + this.BUT_writePIDS.UseVisualStyleBackColor = true; + this.BUT_writePIDS.Click += new System.EventHandler(this.BUT_writePIDS_Click); + // + // BUT_save + // + this.BUT_save.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_save.Location = new System.Drawing.Point(341, 35); + this.BUT_save.Margin = new System.Windows.Forms.Padding(0); + this.BUT_save.Name = "BUT_save"; + this.BUT_save.Size = new System.Drawing.Size(104, 19); + this.BUT_save.TabIndex = 70; + this.BUT_save.Text = "Save"; + this.BUT_save.UseVisualStyleBackColor = true; + this.BUT_save.Click += new System.EventHandler(this.BUT_save_Click); + // + // BUT_load + // + this.BUT_load.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_load.Location = new System.Drawing.Point(341, 7); + this.BUT_load.Margin = new System.Windows.Forms.Padding(0); + this.BUT_load.Name = "BUT_load"; + this.BUT_load.Size = new System.Drawing.Size(104, 19); + this.BUT_load.TabIndex = 71; + this.BUT_load.Text = "Load"; + this.BUT_load.UseVisualStyleBackColor = true; + this.BUT_load.Click += new System.EventHandler(this.BUT_load_Click); + // + // Params + // + this.Params.AllowUserToAddRows = false; + this.Params.AllowUserToDeleteRows = false; + this.Params.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.Maroon; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.Params.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.Params.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.Params.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Command, + this.Value, + this.Default, + this.mavScale, + this.RawValue}); + this.Params.Location = new System.Drawing.Point(14, 3); + this.Params.Name = "Params"; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.ActiveCaption; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.Params.RowHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.Params.RowHeadersVisible = false; + this.Params.RowHeadersWidth = 150; + this.Params.Size = new System.Drawing.Size(321, 302); + this.Params.TabIndex = 68; + // + // Command + // + this.Command.HeaderText = "Command"; + this.Command.Name = "Command"; + this.Command.ReadOnly = true; + this.Command.Width = 150; + // + // Value + // + this.Value.HeaderText = "Value"; + this.Value.Name = "Value"; + this.Value.Width = 80; + // + // Default + // + this.Default.HeaderText = "Default"; + this.Default.Name = "Default"; + this.Default.Visible = false; + // + // mavScale + // + this.mavScale.HeaderText = "mavScale"; + this.mavScale.Name = "mavScale"; + this.mavScale.Visible = false; + // + // RawValue + // + this.RawValue.HeaderText = "RawValue"; + this.RawValue.Name = "RawValue"; + this.RawValue.Visible = false; + // + // ConfigRawParams + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BUT_compare); + this.Controls.Add(this.BUT_rerequestparams); + this.Controls.Add(this.BUT_writePIDS); + this.Controls.Add(this.BUT_save); + this.Controls.Add(this.BUT_load); + this.Controls.Add(this.Params); + this.Name = "ConfigRawParams"; + this.Size = new System.Drawing.Size(460, 305); + this.Load += new System.EventHandler(this.ConfigRawParams_Load); + this.ControlAdded += new System.Windows.Forms.ControlEventHandler(this.ConfigRawParams_ControlAdded); + this.ControlRemoved += new System.Windows.Forms.ControlEventHandler(this.ConfigRawParams_ControlRemoved); + ((System.ComponentModel.ISupportInitialize)(this.Params)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private MyButton BUT_compare; + private MyButton BUT_rerequestparams; + private MyButton BUT_writePIDS; + private MyButton BUT_save; + private MyButton BUT_load; + private System.Windows.Forms.DataGridView Params; + private System.Windows.Forms.DataGridViewTextBoxColumn Command; + private System.Windows.Forms.DataGridViewTextBoxColumn Value; + private System.Windows.Forms.DataGridViewTextBoxColumn Default; + private System.Windows.Forms.DataGridViewTextBoxColumn mavScale; + private System.Windows.Forms.DataGridViewTextBoxColumn RawValue; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs new file mode 100644 index 000000000..5b2c7d1d8 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs @@ -0,0 +1,287 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.IO; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using log4net; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class ConfigRawParams : UserControl + { + private static readonly ILog log = + LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + + // Changes made to the params between writing to the copter + readonly Hashtable _changes = new Hashtable(); + + // ? + internal bool startup = true; + + + public ConfigRawParams() + { + InitializeComponent(); + } + + Hashtable loadParamFile(string Filename) + { + Hashtable param = new Hashtable(); + + StreamReader sr = new StreamReader(Filename); + while (!sr.EndOfStream) + { + string line = sr.ReadLine(); + + if (line.Contains("NOTE:")) + CustomMessageBox.Show(line, "Saved Note"); + + if (line.StartsWith("#")) + continue; + + string[] items = line.Split(new char[] { ' ', ',', '\t' }, StringSplitOptions.RemoveEmptyEntries); + + if (items.Length != 2) + continue; + + string name = items[0]; + float value = float.Parse(items[1], new System.Globalization.CultureInfo("en-US")); + + MAVLink.modifyParamForDisplay(true, name, ref value); + + if (name == "SYSID_SW_MREV") + continue; + if (name == "WP_TOTAL") + continue; + if (name == "CMD_TOTAL") + continue; + if (name == "FENCE_TOTAL") + continue; + if (name == "SYS_NUM_RESETS") + continue; + if (name == "ARSPD_OFFSET") + continue; + if (name == "GND_ABS_PRESS") + continue; + if (name == "GND_TEMP") + continue; + if (name == "CMD_INDEX") + continue; + if (name == "LOG_LASTFILE") + continue; + + param[name] = value; + } + sr.Close(); + + return param; + } + + private void BUT_load_Click(object sender, EventArgs e) + { + var ofd = new OpenFileDialog + { + AddExtension = true, + DefaultExt = ".param", + RestoreDirectory = true, + Filter = "Param List|*.param;*.parm" + }; + var dr = ofd.ShowDialog(); + + if (dr == DialogResult.OK) + { + Hashtable param2 = loadParamFile(ofd.FileName); + + foreach (string name in param2.Keys) + { + string value = param2[name].ToString(); + // set param table as well + foreach (DataGridViewRow row in Params.Rows) + { + if (name == "SYSID_SW_MREV") + continue; + if (name == "WP_TOTAL") + continue; + if (name == "CMD_TOTAL") + continue; + if (name == "FENCE_TOTAL") + continue; + if (name == "SYS_NUM_RESETS") + continue; + if (name == "ARSPD_OFFSET") + continue; + if (name == "GND_ABS_PRESS") + continue; + if (name == "GND_TEMP") + continue; + if (name == "CMD_INDEX") + continue; + if (name == "LOG_LASTFILE") + continue; + if (row.Cells[0].Value.ToString() == name) + { + if (row.Cells[1].Value.ToString() != value.ToString()) + row.Cells[1].Value = value; + break; + } + } + } + } + } + + private void BUT_save_Click(object sender, EventArgs e) + { + var sfd = new SaveFileDialog + { + AddExtension = true, + DefaultExt = ".param", + RestoreDirectory = true, + Filter = "Param List|*.param;*.parm" + }; + + var dr = sfd.ShowDialog(); + if (dr == DialogResult.OK) + { + StreamWriter sw = new StreamWriter(sfd.OpenFile()); + string input = DateTime.Now + " Frame : + | Arducopter Kit | Kit motors"; + if (MainV2.APMFirmware == MainV2.Firmwares.ArduPlane) + { + input = DateTime.Now + " Plane: Skywalker"; + } + Common.InputBox("Custom Note", "Enter your Notes/Frame Type etc", ref input); + if (input != "") + sw.WriteLine("NOTE: " + input.Replace(',', '|')); + foreach (DataGridViewRow row in Params.Rows) + { + float value = float.Parse(row.Cells[1].Value.ToString()); + + MAVLink.modifyParamForDisplay(false, row.Cells[0].Value.ToString(), ref value); + + sw.WriteLine(row.Cells[0].Value.ToString() + "," + value.ToString(new System.Globalization.CultureInfo("en-US"))); + } + sw.Close(); + } + } + + private void BUT_writePIDS_Click(object sender, EventArgs e) + { + var temp = (Hashtable)_changes.Clone(); + + foreach (string value in temp.Keys) + { + try + { + MainV2.comPort.setParam(value, (float)_changes[value]); + + try + { + // set control as well + var textControls = this.Controls.Find(value, true); + if (textControls.Length > 0) + { + textControls[0].BackColor = Color.FromArgb(0x43, 0x44, 0x45); + } + } + catch + { + + } + + try + { + // set param table as well + foreach (DataGridViewRow row in Params.Rows) + { + if (row.Cells[0].Value.ToString() == value) + { + row.Cells[1].Style.BackColor = Color.FromArgb(0x43, 0x44, 0x45); + _changes.Remove(value); + break; + } + } + } + catch { } + + } + catch + { + CustomMessageBox.Show("Set " + value + " Failed"); + } + } + } + + + private void BUT_compare_Click(object sender, EventArgs e) + { + Hashtable param2 = new Hashtable(); + + var ofd = new OpenFileDialog + { + AddExtension = true, + DefaultExt = ".param", + RestoreDirectory = true, + Filter = "Param List|*.param;*.parm" + }; + + var dr = ofd.ShowDialog(); + if (dr == DialogResult.OK) + { + param2 = loadParamFile(ofd.FileName); + + int fixme; + //var paramCompareForm = new ParamCompare((Form)this, MainV2.comPort.param, param2); + + //ThemeManager.ApplyThemeTo(paramCompareForm); + //paramCompareForm.ShowDialog(); + } + } + + + private void BUT_rerequestparams_Click(object sender, EventArgs e) + { + if (!MainV2.comPort.BaseStream.IsOpen) + return; + + ((Control)sender).Enabled = false; + + try + { + MainV2.comPort.getParamList(); + } + catch (Exception ex) + { + log.Error("Exception getting param list", ex); + CustomMessageBox.Show("Error: getting param list"); + } + + + ((Control)sender).Enabled = true; + + startup = true; + + // Todo: this populates or the combos etc and what not. This shoudl prob be a bsv button + + } + + private void ConfigRawParams_Load(object sender, EventArgs e) + { + + } + + private void ConfigRawParams_ControlRemoved(object sender, ControlEventArgs e) + { + + } + + private void ConfigRawParams_ControlAdded(object sender, ControlEventArgs e) + { + + } + + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.resx new file mode 100644 index 000000000..3267b6926 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.resx @@ -0,0 +1,132 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <metadata name="Command.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>True</value> + </metadata> + <metadata name="Value.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>True</value> + </metadata> + <metadata name="Default.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>True</value> + </metadata> + <metadata name="RawValue.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <value>True</value> + </metadata> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.Designer.cs new file mode 100644 index 000000000..fd4b1fcd6 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.Designer.cs @@ -0,0 +1,857 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigTradHeli + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.H1_ENABLE = new System.Windows.Forms.RadioButton(); + this.CCPM = new System.Windows.Forms.RadioButton(); + this.BUT_swash_manual = new ArdupilotMega.MyButton(); + this.label41 = new System.Windows.Forms.Label(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.label46 = new System.Windows.Forms.Label(); + this.label45 = new System.Windows.Forms.Label(); + this.GYR_ENABLE = new System.Windows.Forms.CheckBox(); + this.GYR_GAIN = new System.Windows.Forms.TextBox(); + this.BUT_HS4save = new ArdupilotMega.MyButton(); + this.label21 = new System.Windows.Forms.Label(); + this.COL_MIN = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.COL_MID = new System.Windows.Forms.TextBox(); + this.COL_MAX = new System.Windows.Forms.TextBox(); + this.BUT_0collective = new ArdupilotMega.MyButton(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.label24 = new System.Windows.Forms.Label(); + this.HS4_MIN = new System.Windows.Forms.TextBox(); + this.HS4_MAX = new System.Windows.Forms.TextBox(); + this.label40 = new System.Windows.Forms.Label(); + this.HS3_TRIM = new System.Windows.Forms.NumericUpDown(); + this.HS2_TRIM = new System.Windows.Forms.NumericUpDown(); + this.HS1_TRIM = new System.Windows.Forms.NumericUpDown(); + this.label39 = new System.Windows.Forms.Label(); + this.label38 = new System.Windows.Forms.Label(); + this.label37 = new System.Windows.Forms.Label(); + this.label36 = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.PIT_MAX = new System.Windows.Forms.TextBox(); + this.label25 = new System.Windows.Forms.Label(); + this.ROL_MAX = new System.Windows.Forms.TextBox(); + this.label23 = new System.Windows.Forms.Label(); + this.label22 = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.SV3_POS = new System.Windows.Forms.TextBox(); + this.SV2_POS = new System.Windows.Forms.TextBox(); + this.SV1_POS = new System.Windows.Forms.TextBox(); + this.HS3_REV = new System.Windows.Forms.CheckBox(); + this.HS2_REV = new System.Windows.Forms.CheckBox(); + this.HS1_REV = new System.Windows.Forms.CheckBox(); + this.label17 = new System.Windows.Forms.Label(); + this.HS4 = new ArdupilotMega.HorizontalProgressBar2(); + this.HS3 = new ArdupilotMega.VerticalProgressBar2(); + this.Gservoloc = new AGaugeApp.AGauge(); + this.groupBox5.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.HS3_TRIM)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.HS2_TRIM)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.HS1_TRIM)).BeginInit(); + this.SuspendLayout(); + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.H1_ENABLE); + this.groupBox5.Controls.Add(this.CCPM); + this.groupBox5.Location = new System.Drawing.Point(257, 11); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(120, 43); + this.groupBox5.TabIndex = 169; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "Swash Type"; + // + // H1_ENABLE + // + this.H1_ENABLE.AutoSize = true; + this.H1_ENABLE.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.H1_ENABLE.Location = new System.Drawing.Point(67, 19); + this.H1_ENABLE.Name = "H1_ENABLE"; + this.H1_ENABLE.Size = new System.Drawing.Size(39, 17); + this.H1_ENABLE.TabIndex = 137; + this.H1_ENABLE.TabStop = true; + this.H1_ENABLE.Text = "H1"; + this.H1_ENABLE.UseVisualStyleBackColor = true; + // + // CCPM + // + this.CCPM.AutoSize = true; + this.CCPM.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CCPM.Location = new System.Drawing.Point(6, 19); + this.CCPM.Name = "CCPM"; + this.CCPM.Size = new System.Drawing.Size(55, 17); + this.CCPM.TabIndex = 136; + this.CCPM.TabStop = true; + this.CCPM.Text = "CCPM"; + this.CCPM.UseVisualStyleBackColor = true; + // + // BUT_swash_manual + // + this.BUT_swash_manual.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_swash_manual.Location = new System.Drawing.Point(302, 83); + this.BUT_swash_manual.Name = "BUT_swash_manual"; + this.BUT_swash_manual.Size = new System.Drawing.Size(69, 23); + this.BUT_swash_manual.TabIndex = 138; + this.BUT_swash_manual.Text = "Manual"; + this.BUT_swash_manual.UseVisualStyleBackColor = true; + // + // label41 + // + this.label41.AutoSize = true; + this.label41.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label41.Location = new System.Drawing.Point(19, 157); + this.label41.Name = "label41"; + this.label41.Size = new System.Drawing.Size(40, 13); + this.label41.TabIndex = 122; + this.label41.Text = "Bottom"; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.label46); + this.groupBox3.Controls.Add(this.label45); + this.groupBox3.Controls.Add(this.GYR_ENABLE); + this.groupBox3.Controls.Add(this.GYR_GAIN); + this.groupBox3.Location = new System.Drawing.Point(437, 314); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(101, 63); + this.groupBox3.TabIndex = 168; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Gyro"; + // + // label46 + // + this.label46.AutoSize = true; + this.label46.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label46.Location = new System.Drawing.Point(6, 38); + this.label46.Name = "label46"; + this.label46.Size = new System.Drawing.Size(29, 13); + this.label46.TabIndex = 137; + this.label46.Text = "Gain"; + // + // label45 + // + this.label45.AutoSize = true; + this.label45.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label45.Location = new System.Drawing.Point(6, 19); + this.label45.Name = "label45"; + this.label45.Size = new System.Drawing.Size(40, 13); + this.label45.TabIndex = 136; + this.label45.Text = "Enable"; + // + // GYR_ENABLE + // + this.GYR_ENABLE.AutoSize = true; + this.GYR_ENABLE.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.GYR_ENABLE.Location = new System.Drawing.Point(57, 19); + this.GYR_ENABLE.Name = "GYR_ENABLE"; + this.GYR_ENABLE.Size = new System.Drawing.Size(15, 14); + this.GYR_ENABLE.TabIndex = 118; + this.GYR_ENABLE.UseVisualStyleBackColor = true; + // + // GYR_GAIN + // + this.GYR_GAIN.Location = new System.Drawing.Point(41, 35); + this.GYR_GAIN.Name = "GYR_GAIN"; + this.GYR_GAIN.Size = new System.Drawing.Size(47, 20); + this.GYR_GAIN.TabIndex = 119; + this.GYR_GAIN.Text = "1000"; + // + // BUT_HS4save + // + this.BUT_HS4save.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_HS4save.Location = new System.Drawing.Point(483, 174); + this.BUT_HS4save.Name = "BUT_HS4save"; + this.BUT_HS4save.Size = new System.Drawing.Size(69, 23); + this.BUT_HS4save.TabIndex = 167; + this.BUT_HS4save.Text = "Manual"; + this.BUT_HS4save.UseVisualStyleBackColor = true; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label21.Location = new System.Drawing.Point(24, 28); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(26, 13); + this.label21.TabIndex = 120; + this.label21.Text = "Top"; + // + // COL_MIN + // + this.COL_MIN.Enabled = false; + this.COL_MIN.Location = new System.Drawing.Point(18, 173); + this.COL_MIN.Name = "COL_MIN"; + this.COL_MIN.Size = new System.Drawing.Size(43, 20); + this.COL_MIN.TabIndex = 119; + this.COL_MIN.Text = "1500"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label41); + this.groupBox1.Controls.Add(this.label21); + this.groupBox1.Controls.Add(this.COL_MIN); + this.groupBox1.Controls.Add(this.COL_MID); + this.groupBox1.Controls.Add(this.COL_MAX); + this.groupBox1.Controls.Add(this.BUT_0collective); + this.groupBox1.Location = new System.Drawing.Point(297, 95); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(80, 209); + this.groupBox1.TabIndex = 165; + this.groupBox1.TabStop = false; + // + // COL_MID + // + this.COL_MID.Enabled = false; + this.COL_MID.Location = new System.Drawing.Point(17, 117); + this.COL_MID.Name = "COL_MID"; + this.COL_MID.Size = new System.Drawing.Size(44, 20); + this.COL_MID.TabIndex = 117; + this.COL_MID.Text = "1500"; + // + // COL_MAX + // + this.COL_MAX.Enabled = false; + this.COL_MAX.Location = new System.Drawing.Point(18, 45); + this.COL_MAX.Name = "COL_MAX"; + this.COL_MAX.Size = new System.Drawing.Size(43, 20); + this.COL_MAX.TabIndex = 115; + this.COL_MAX.Text = "1500"; + // + // BUT_0collective + // + this.BUT_0collective.Enabled = false; + this.BUT_0collective.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.BUT_0collective.Location = new System.Drawing.Point(11, 89); + this.BUT_0collective.Name = "BUT_0collective"; + this.BUT_0collective.Size = new System.Drawing.Size(58, 23); + this.BUT_0collective.TabIndex = 110; + this.BUT_0collective.Text = "Zero"; + this.BUT_0collective.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.label24); + this.groupBox2.Controls.Add(this.HS4_MIN); + this.groupBox2.Controls.Add(this.HS4_MAX); + this.groupBox2.Controls.Add(this.label40); + this.groupBox2.Location = new System.Drawing.Point(437, 186); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(169, 78); + this.groupBox2.TabIndex = 166; + this.groupBox2.TabStop = false; + // + // label24 + // + this.label24.AutoSize = true; + this.label24.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label24.Location = new System.Drawing.Point(112, 23); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(27, 13); + this.label24.TabIndex = 135; + this.label24.Text = "Max"; + // + // HS4_MIN + // + this.HS4_MIN.Enabled = false; + this.HS4_MIN.Location = new System.Drawing.Point(21, 40); + this.HS4_MIN.Name = "HS4_MIN"; + this.HS4_MIN.Size = new System.Drawing.Size(43, 20); + this.HS4_MIN.TabIndex = 132; + this.HS4_MIN.Text = "1500"; + // + // HS4_MAX + // + this.HS4_MAX.Enabled = false; + this.HS4_MAX.Location = new System.Drawing.Point(106, 40); + this.HS4_MAX.Name = "HS4_MAX"; + this.HS4_MAX.Size = new System.Drawing.Size(43, 20); + this.HS4_MAX.TabIndex = 133; + this.HS4_MAX.Text = "1500"; + // + // label40 + // + this.label40.AutoSize = true; + this.label40.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label40.Location = new System.Drawing.Point(27, 23); + this.label40.Name = "label40"; + this.label40.Size = new System.Drawing.Size(24, 13); + this.label40.TabIndex = 134; + this.label40.Text = "Min"; + // + // HS3_TRIM + // + this.HS3_TRIM.Location = new System.Drawing.Point(126, 314); + this.HS3_TRIM.Maximum = new decimal(new int[] { + 2000, + 0, + 0, + 0}); + this.HS3_TRIM.Minimum = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.HS3_TRIM.Name = "HS3_TRIM"; + this.HS3_TRIM.Size = new System.Drawing.Size(44, 20); + this.HS3_TRIM.TabIndex = 164; + this.HS3_TRIM.Value = new decimal(new int[] { + 1500, + 0, + 0, + 0}); + // + // HS2_TRIM + // + this.HS2_TRIM.Location = new System.Drawing.Point(126, 288); + this.HS2_TRIM.Maximum = new decimal(new int[] { + 2000, + 0, + 0, + 0}); + this.HS2_TRIM.Minimum = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.HS2_TRIM.Name = "HS2_TRIM"; + this.HS2_TRIM.Size = new System.Drawing.Size(44, 20); + this.HS2_TRIM.TabIndex = 163; + this.HS2_TRIM.Value = new decimal(new int[] { + 1500, + 0, + 0, + 0}); + // + // HS1_TRIM + // + this.HS1_TRIM.Location = new System.Drawing.Point(126, 262); + this.HS1_TRIM.Maximum = new decimal(new int[] { + 2000, + 0, + 0, + 0}); + this.HS1_TRIM.Minimum = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.HS1_TRIM.Name = "HS1_TRIM"; + this.HS1_TRIM.Size = new System.Drawing.Size(44, 20); + this.HS1_TRIM.TabIndex = 162; + this.HS1_TRIM.Value = new decimal(new int[] { + 1500, + 0, + 0, + 0}); + // + // label39 + // + this.label39.AutoSize = true; + this.label39.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label39.Location = new System.Drawing.Point(131, 249); + this.label39.Name = "label39"; + this.label39.Size = new System.Drawing.Size(27, 13); + this.label39.TabIndex = 161; + this.label39.Text = "Trim"; + // + // label38 + // + this.label38.AutoSize = true; + this.label38.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label38.Location = new System.Drawing.Point(102, 249); + this.label38.Name = "label38"; + this.label38.Size = new System.Drawing.Size(27, 13); + this.label38.TabIndex = 160; + this.label38.Text = "Rev"; + // + // label37 + // + this.label37.AutoSize = true; + this.label37.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label37.Location = new System.Drawing.Point(54, 249); + this.label37.Name = "label37"; + this.label37.Size = new System.Drawing.Size(44, 13); + this.label37.TabIndex = 159; + this.label37.Text = "Position"; + // + // label36 + // + this.label36.AutoSize = true; + this.label36.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label36.Location = new System.Drawing.Point(17, 249); + this.label36.Name = "label36"; + this.label36.Size = new System.Drawing.Size(35, 13); + this.label36.TabIndex = 158; + this.label36.Text = "Servo"; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label26.Location = new System.Drawing.Point(260, 365); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(54, 13); + this.label26.TabIndex = 157; + this.label26.Text = "Pitch Max"; + // + // PIT_MAX + // + this.PIT_MAX.Location = new System.Drawing.Point(314, 362); + this.PIT_MAX.Name = "PIT_MAX"; + this.PIT_MAX.Size = new System.Drawing.Size(47, 20); + this.PIT_MAX.TabIndex = 156; + this.PIT_MAX.Text = "4500"; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label25.Location = new System.Drawing.Point(260, 341); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(48, 13); + this.label25.TabIndex = 155; + this.label25.Text = "Roll Max"; + // + // ROL_MAX + // + this.ROL_MAX.Location = new System.Drawing.Point(314, 336); + this.ROL_MAX.Name = "ROL_MAX"; + this.ROL_MAX.Size = new System.Drawing.Size(47, 20); + this.ROL_MAX.TabIndex = 154; + this.ROL_MAX.Text = "4500"; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label23.Location = new System.Drawing.Point(480, 66); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(75, 13); + this.label23.TabIndex = 153; + this.label23.Text = "Rudder Travel"; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label22.Location = new System.Drawing.Point(236, 66); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(72, 13); + this.label22.TabIndex = 150; + this.label22.Text = "Swash Travel"; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label20.Location = new System.Drawing.Point(27, 317); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(13, 13); + this.label20.TabIndex = 149; + this.label20.Text = "3"; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label19.Location = new System.Drawing.Point(27, 291); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(13, 13); + this.label19.TabIndex = 148; + this.label19.Text = "2"; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label18.Location = new System.Drawing.Point(27, 265); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(13, 13); + this.label18.TabIndex = 147; + this.label18.Text = "1"; + // + // SV3_POS + // + this.SV3_POS.Location = new System.Drawing.Point(57, 314); + this.SV3_POS.Name = "SV3_POS"; + this.SV3_POS.Size = new System.Drawing.Size(39, 20); + this.SV3_POS.TabIndex = 146; + this.SV3_POS.Text = "180"; + // + // SV2_POS + // + this.SV2_POS.Location = new System.Drawing.Point(57, 288); + this.SV2_POS.Name = "SV2_POS"; + this.SV2_POS.Size = new System.Drawing.Size(39, 20); + this.SV2_POS.TabIndex = 145; + this.SV2_POS.Text = "60"; + // + // SV1_POS + // + this.SV1_POS.Location = new System.Drawing.Point(57, 262); + this.SV1_POS.Name = "SV1_POS"; + this.SV1_POS.Size = new System.Drawing.Size(39, 20); + this.SV1_POS.TabIndex = 144; + this.SV1_POS.Text = "-60"; + // + // HS3_REV + // + this.HS3_REV.AutoSize = true; + this.HS3_REV.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.HS3_REV.Location = new System.Drawing.Point(105, 317); + this.HS3_REV.Name = "HS3_REV"; + this.HS3_REV.Size = new System.Drawing.Size(15, 14); + this.HS3_REV.TabIndex = 143; + this.HS3_REV.UseVisualStyleBackColor = true; + // + // HS2_REV + // + this.HS2_REV.AutoSize = true; + this.HS2_REV.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.HS2_REV.Location = new System.Drawing.Point(105, 291); + this.HS2_REV.Name = "HS2_REV"; + this.HS2_REV.Size = new System.Drawing.Size(15, 14); + this.HS2_REV.TabIndex = 142; + this.HS2_REV.UseVisualStyleBackColor = true; + // + // HS1_REV + // + this.HS1_REV.AutoSize = true; + this.HS1_REV.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.HS1_REV.Location = new System.Drawing.Point(105, 268); + this.HS1_REV.Name = "HS1_REV"; + this.HS1_REV.Size = new System.Drawing.Size(15, 14); + this.HS1_REV.TabIndex = 141; + this.HS1_REV.UseVisualStyleBackColor = true; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label17.Location = new System.Drawing.Point(42, 66); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(109, 13); + this.label17.TabIndex = 140; + this.label17.Text = "Swash-Servo position"; + // + // HS4 + // + this.HS4.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(68)))), ((int)(((byte)(69))))); + this.HS4.BorderColor = System.Drawing.SystemColors.ActiveBorder; + this.HS4.Label = "Rudder"; + this.HS4.Location = new System.Drawing.Point(396, 93); + this.HS4.Maximum = 2200; + this.HS4.maxline = 0; + this.HS4.Minimum = 800; + this.HS4.minline = 0; + this.HS4.Name = "HS4"; + this.HS4.Size = new System.Drawing.Size(242, 42); + this.HS4.TabIndex = 152; + this.HS4.Value = 1500; + this.HS4.ValueColor = System.Drawing.Color.FromArgb(((int)(((byte)(148)))), ((int)(((byte)(193)))), ((int)(((byte)(31))))); + // + // HS3 + // + this.HS3.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(67)))), ((int)(((byte)(68)))), ((int)(((byte)(69))))); + this.HS3.BorderColor = System.Drawing.SystemColors.ActiveBorder; + this.HS3.Label = "Collective"; + this.HS3.Location = new System.Drawing.Point(239, 95); + this.HS3.Maximum = 2200; + this.HS3.maxline = 0; + this.HS3.Minimum = 800; + this.HS3.minline = 0; + this.HS3.Name = "HS3"; + this.HS3.Size = new System.Drawing.Size(42, 213); + this.HS3.TabIndex = 151; + this.HS3.Value = 1500; + this.HS3.ValueColor = System.Drawing.Color.FromArgb(((int)(((byte)(148)))), ((int)(((byte)(193)))), ((int)(((byte)(31))))); + // + // Gservoloc + // + this.Gservoloc.BackColor = System.Drawing.Color.Transparent; + this.Gservoloc.BackgroundImage = global::ArdupilotMega.Properties.Resources.Gaugebg; + this.Gservoloc.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + this.Gservoloc.BaseArcColor = System.Drawing.Color.Transparent; + this.Gservoloc.BaseArcRadius = 60; + this.Gservoloc.BaseArcStart = 90; + this.Gservoloc.BaseArcSweep = 360; + this.Gservoloc.BaseArcWidth = 2; + this.Gservoloc.basesize = new System.Drawing.Size(150, 150); + this.Gservoloc.Cap_Idx = ((byte)(0)); + this.Gservoloc.CapColor = System.Drawing.Color.White; + this.Gservoloc.CapColors = new System.Drawing.Color[] { + System.Drawing.Color.White, + System.Drawing.Color.Black, + System.Drawing.Color.Black, + System.Drawing.Color.Black, + System.Drawing.Color.Black}; + this.Gservoloc.CapPosition = new System.Drawing.Point(55, 85); + this.Gservoloc.CapsPosition = new System.Drawing.Point[] { + new System.Drawing.Point(55, 85), + new System.Drawing.Point(40, 67), + new System.Drawing.Point(10, 10), + new System.Drawing.Point(10, 10), + new System.Drawing.Point(10, 10)}; + this.Gservoloc.CapsText = new string[] { + "Position", + "", + "", + "", + ""}; + this.Gservoloc.CapText = "Position"; + this.Gservoloc.Center = new System.Drawing.Point(75, 75); + this.Gservoloc.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F); + this.Gservoloc.Location = new System.Drawing.Point(20, 93); + this.Gservoloc.Margin = new System.Windows.Forms.Padding(0); + this.Gservoloc.MaxValue = 180F; + this.Gservoloc.MinValue = -180F; + this.Gservoloc.Name = "Gservoloc"; + this.Gservoloc.Need_Idx = ((byte)(3)); + this.Gservoloc.NeedleColor1 = AGaugeApp.AGauge.NeedleColorEnum.Gray; + this.Gservoloc.NeedleColor2 = System.Drawing.Color.White; + this.Gservoloc.NeedleEnabled = false; + this.Gservoloc.NeedleRadius = 80; + this.Gservoloc.NeedlesColor1 = new AGaugeApp.AGauge.NeedleColorEnum[] { + AGaugeApp.AGauge.NeedleColorEnum.Gray, + AGaugeApp.AGauge.NeedleColorEnum.Red, + AGaugeApp.AGauge.NeedleColorEnum.Green, + AGaugeApp.AGauge.NeedleColorEnum.Gray}; + this.Gservoloc.NeedlesColor2 = new System.Drawing.Color[] { + System.Drawing.Color.White, + System.Drawing.Color.White, + System.Drawing.Color.White, + System.Drawing.Color.White}; + this.Gservoloc.NeedlesEnabled = new bool[] { + true, + true, + true, + false}; + this.Gservoloc.NeedlesRadius = new int[] { + 60, + 60, + 60, + 80}; + this.Gservoloc.NeedlesType = new int[] { + 0, + 0, + 0, + 0}; + this.Gservoloc.NeedlesWidth = new int[] { + 2, + 2, + 2, + 2}; + this.Gservoloc.NeedleType = 0; + this.Gservoloc.NeedleWidth = 2; + this.Gservoloc.Range_Idx = ((byte)(0)); + this.Gservoloc.RangeColor = System.Drawing.Color.LightGreen; + this.Gservoloc.RangeEnabled = false; + this.Gservoloc.RangeEndValue = 360F; + this.Gservoloc.RangeInnerRadius = 1; + this.Gservoloc.RangeOuterRadius = 60; + this.Gservoloc.RangesColor = new System.Drawing.Color[] { + System.Drawing.Color.LightGreen, + System.Drawing.Color.Red, + System.Drawing.Color.Orange, + System.Drawing.SystemColors.Control, + System.Drawing.SystemColors.Control}; + this.Gservoloc.RangesEnabled = new bool[] { + false, + false, + false, + false, + false}; + this.Gservoloc.RangesEndValue = new float[] { + 360F, + 200F, + 150F, + 0F, + 0F}; + this.Gservoloc.RangesInnerRadius = new int[] { + 1, + 1, + 1, + 70, + 70}; + this.Gservoloc.RangesOuterRadius = new int[] { + 60, + 60, + 60, + 80, + 80}; + this.Gservoloc.RangesStartValue = new float[] { + 0F, + 150F, + 75F, + 0F, + 0F}; + this.Gservoloc.RangeStartValue = 0F; + this.Gservoloc.ScaleLinesInterColor = System.Drawing.Color.White; + this.Gservoloc.ScaleLinesInterInnerRadius = 52; + this.Gservoloc.ScaleLinesInterOuterRadius = 60; + this.Gservoloc.ScaleLinesInterWidth = 1; + this.Gservoloc.ScaleLinesMajorColor = System.Drawing.Color.White; + this.Gservoloc.ScaleLinesMajorInnerRadius = 50; + this.Gservoloc.ScaleLinesMajorOuterRadius = 60; + this.Gservoloc.ScaleLinesMajorStepValue = 30F; + this.Gservoloc.ScaleLinesMajorWidth = 2; + this.Gservoloc.ScaleLinesMinorColor = System.Drawing.Color.White; + this.Gservoloc.ScaleLinesMinorInnerRadius = 55; + this.Gservoloc.ScaleLinesMinorNumOf = 2; + this.Gservoloc.ScaleLinesMinorOuterRadius = 60; + this.Gservoloc.ScaleLinesMinorWidth = 1; + this.Gservoloc.ScaleNumbersColor = System.Drawing.Color.White; + this.Gservoloc.ScaleNumbersFormat = null; + this.Gservoloc.ScaleNumbersRadius = 44; + this.Gservoloc.ScaleNumbersRotation = 45; + this.Gservoloc.ScaleNumbersStartScaleLine = 2; + this.Gservoloc.ScaleNumbersStepScaleLines = 1; + this.Gservoloc.Size = new System.Drawing.Size(150, 150); + this.Gservoloc.TabIndex = 139; + this.Gservoloc.Value = 0F; + this.Gservoloc.Value0 = -60F; + this.Gservoloc.Value1 = 60F; + this.Gservoloc.Value2 = 180F; + this.Gservoloc.Value3 = 0F; + // + // ConfigTradHeli + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupBox5); + this.Controls.Add(this.BUT_swash_manual); + this.Controls.Add(this.groupBox3); + this.Controls.Add(this.BUT_HS4save); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.HS3_TRIM); + this.Controls.Add(this.HS2_TRIM); + this.Controls.Add(this.HS1_TRIM); + this.Controls.Add(this.label39); + this.Controls.Add(this.label38); + this.Controls.Add(this.label37); + this.Controls.Add(this.label36); + this.Controls.Add(this.label26); + this.Controls.Add(this.PIT_MAX); + this.Controls.Add(this.label25); + this.Controls.Add(this.ROL_MAX); + this.Controls.Add(this.label23); + this.Controls.Add(this.label22); + this.Controls.Add(this.label20); + this.Controls.Add(this.label19); + this.Controls.Add(this.label18); + this.Controls.Add(this.SV3_POS); + this.Controls.Add(this.SV2_POS); + this.Controls.Add(this.SV1_POS); + this.Controls.Add(this.HS3_REV); + this.Controls.Add(this.HS2_REV); + this.Controls.Add(this.HS1_REV); + this.Controls.Add(this.label17); + this.Controls.Add(this.HS4); + this.Controls.Add(this.HS3); + this.Controls.Add(this.Gservoloc); + this.Name = "ConfigTradHeli"; + this.Size = new System.Drawing.Size(654, 397); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.HS3_TRIM)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.HS2_TRIM)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.HS1_TRIM)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.RadioButton H1_ENABLE; + private System.Windows.Forms.RadioButton CCPM; + private MyButton BUT_swash_manual; + private System.Windows.Forms.Label label41; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.Label label46; + private System.Windows.Forms.Label label45; + private System.Windows.Forms.CheckBox GYR_ENABLE; + private System.Windows.Forms.TextBox GYR_GAIN; + private MyButton BUT_HS4save; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.TextBox COL_MIN; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox COL_MID; + private System.Windows.Forms.TextBox COL_MAX; + private MyButton BUT_0collective; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.TextBox HS4_MIN; + private System.Windows.Forms.TextBox HS4_MAX; + private System.Windows.Forms.Label label40; + private System.Windows.Forms.NumericUpDown HS3_TRIM; + private System.Windows.Forms.NumericUpDown HS2_TRIM; + private System.Windows.Forms.NumericUpDown HS1_TRIM; + private System.Windows.Forms.Label label39; + private System.Windows.Forms.Label label38; + private System.Windows.Forms.Label label37; + private System.Windows.Forms.Label label36; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.TextBox PIT_MAX; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.TextBox ROL_MAX; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.TextBox SV3_POS; + private System.Windows.Forms.TextBox SV2_POS; + private System.Windows.Forms.TextBox SV1_POS; + private System.Windows.Forms.CheckBox HS3_REV; + private System.Windows.Forms.CheckBox HS2_REV; + private System.Windows.Forms.CheckBox HS1_REV; + private System.Windows.Forms.Label label17; + private HorizontalProgressBar2 HS4; + private VerticalProgressBar2 HS3; + private AGaugeApp.AGauge Gservoloc; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.cs new file mode 100644 index 000000000..7c90f1b31 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class ConfigTradHeli : UserControl + { + public ConfigTradHeli() + { + InitializeComponent(); + } + + + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.resx new file mode 100644 index 000000000..7080a7d11 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.Designer.cs new file mode 100644 index 000000000..714e60eda --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.Designer.cs @@ -0,0 +1,59 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class Configuration + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Configuration)); + this.backstageView = new ArdupilotMega.Controls.BackstageView.BackstageView(); + this.SuspendLayout(); + // + // backstageView + // + this.backstageView.AutoSize = true; + this.backstageView.Dock = System.Windows.Forms.DockStyle.Fill; + this.backstageView.Location = new System.Drawing.Point(0, 0); + this.backstageView.Name = "backstageView"; + this.backstageView.Size = new System.Drawing.Size(634, 336); + this.backstageView.TabIndex = 0; + // + // Configuration + // + this.ClientSize = new System.Drawing.Size(634, 336); + this.Controls.Add(this.backstageView); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Configuration"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Controls.BackstageView.BackstageView backstageView; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.cs new file mode 100644 index 000000000..33869ddb0 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using ArdupilotMega.Controls.BackstageView; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class Configuration : Form + { + public Configuration() + { + InitializeComponent(); + + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigRadioInput(), "Radio Calibration")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigFlightModes(), "Flight Modes")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigHardwareOptions(), "Hardware Options")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigBatteryMonitoring(), "Battery Monitor")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigAccelerometerCalibration(), "Level Calibration")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigArducopter(), "Arducopter Setup")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigArduplane(), "Arduplane Setup")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigArduplane(), "Heli Setup")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigRawParams(), "Raw params (Advanced)")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigPlanner(), "Planner")); + } + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.resx new file mode 100644 index 000000000..222a74add --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.resx @@ -0,0 +1,197 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAA + AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOxkjAtnoOAKpJ4vyiK + c+8nh3D/J4Zv/yeHcP8oi3PvKpJ4vy6fg4AzsZIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADjGo2AyspPfLZ+D/yiQ + d/8hlXj/G6F9/xeqg/8XqYL/GKqD/xuhfv8ilnn/KZB3/y2fhP8yspPfN8ajYAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADvRrDA1vpzfL6uN/yel + hP8XvJD/DMyY/wfQl/8FzJP/A8qS/wPJkf8EypL/BsyU/wnRmP8PzZn/Gb2R/yemhP8tqoz/Mb2a3zbQ + qkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAA4y6ZgMbWV/yin + iP8WwZP/Btqf/wDPlf8AyI7/A8aP/yfNnv9T2LP/UNax/03XsP8506b/G8ya/wHKkf8F0Zf/CNuf/xLB + kv8fpYT/J7KQ/y7IomAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAANcajny+w + kf8hqoj/CNSd/wDRlf8Axor/Hcyd/3Lhwf+p7Nj/o+vV/57m0/+X5dD/k+TN/4/jzf+K5Mz/fuHH/0PW + rf8HzJT/ANCT/wDRlv8OpX//HayI/yrFn58AAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAADDC + nmAtro7/H62J/wPWmv8Ay47/AMaO/3XhxP+e6tT/mObP/5Pjy/+Q4sr/jODJ/4ffx/+C3MT/f9vC/3nb + wf9y2r7/adq7/2DauP8ZzZv/Fdae/8T/9/9WxKj/HKuI/y7IomAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAiuZMwKKyM/x6ohf8C1Zr/AMmL/wHGjv+49OL///////////9+3ML/f9zD/4Dcwv9+28L/e9rA/3bZ + vv9w1rr/Z9S4/17Rs/9Qz63/Qcyn/3LewP////////////n///8MpH7/JbKP/zXQqUAAAAAAAAAAAP// + /wAAAAAAAAAAABymhN8dnn//BNGa/wDKjP8AxY3/sfHf/////////////////2nXt/9w1rv/c9e8/3TX + vP9x17z/a9W5/2TTtf9Y0K//SMyp/zXFoP9i07X/////////////////f/LR/wDQlf8epYT/Mb2a3wAA + AAAAAAAA////AAAAAAADlnJgFZR1/wq4iv8AzpH/AMCD/4rmzf//////////////////////WdGv/2PU + tf9p1rf/atS4/2nUtv9i0rT/Vc+u/0fKpv8zxZz/Ws+w//////////////////////8GyJL/ANCS/xLB + kv8tq4z/OMajYAAAAAD///8AAAAAAACHZt8NkW//ANKV/wDChP9i27r//////////////////////9Dx + 6P9MzKn/Vc+v/17Rsv9g0rP/XNCx/1XNrv9Fyaf/McSd/1fPr///////////////////////QM2m/ynK + oP8JzJX/C9yh/ymmhf80spPfAAAAAP///wAAcUwwAHtc/wCrfP8AyIv/AMKK//////////////////// + /////////////5Dgyv9Gyqb/TMyq/07Nq/9MzKn/Qcmj/y/Fnf9Wzq3//////////////////////57k + 0v8av5T/Lceg/yzOo/8M05v/Hr6T/zCghf80spIw////AABoRYAAclT/AL2H/wDBhf9R1rL///////// + ////////4vfw//////////////////H8+P9KzKn/Ocah/zTFnv8qwpj/Us2t//////////////////// + ////////DLqM/yDBlv8wxp//OM6m/xPPm/8Xz53/LZF5/y+fg4////8AAGNAvwB7Wf8Aw4j/ALyC/4bj + yP+g5tL/g93E/2HSsv9Pzqz/Us6s//////////////////////9Yzq//Gr2S/0jLp/////////////// + /////////////yrDm/8SvI//JMGY/zDHn/81zKT/Is2e/xTUnf8nl3v/LJJ5v////wAAXz3vAIlg/wDA + hf8AuoD/quzZ/5Hjyv9628D/ada2/1jRsP9Jy6f/a9a4//////////////////////+Y4s7///////// + //////////////////+c4tD/AbaH/xW8kf8jwZj/LcWd/y/Jn/8kzJ3/E9Ca/yGjgf8ri3Tv////AABd + PP8Ak2b/AL6D/w/Ekv+m6tf/j+HJ/3vawP9p1rf/W9Gx/0rNqf85yJ//Nsaf//////////////////// + /////////////////////////////wCwe/8AtoT/ELqP/xu+k/8jwZj/KMeb/yHKm/8QzZf/HqyG/ymI + cf////8AAF07/wCSZP8AvYL/GMWU/6Dn1P+K38f/ddi+/27Wuf+E3MX/leHN/6fm1f+l5tX/neLQ//// + ////////////////////////////////////////j9/J/27Vuv9Tzq7/JsKY/xa/kv8aw5T/FcaW/wvL + lf8aqoT/J4dw/////wAAXTv/AJFk/wC9gP8GwY3/mObQ/5rkz/+26dv/y/Hl/8Dt3/+06tz/pebV/5bg + zP+g5NL//////////////v///f7+//7+/v//////7fn2////////////tOnb/6Ll0v+v6Nj/jeDI/zXK + o/8IxJD/BMqS/xaqgv8lh2//////AABeO+8AgVf/AL1//wDBif/R9uv/1PPq/8Tv5P+36t3/rujY/6Lk + 0v+U4cv/jt7J//j8+///////+/38//f8+//2+/r/+Pz7//3+/v/m9/P/9Pv6//D6+P9/28L/jd7J/5jj + z/+h5dL/qOvX/4Hmyf8f1J//E596/yOJcO////8AAGA8vwB3U/8p06P/hufM/8Ty5f/D7+T/s+vb/6bm + 1P+c4c//j9/K/4vcyP/t+fb///7///j8/P/0+/r/8vr5//P7+f/1+/r/+/39///////i9fL/ZNO1/3HW + vP992sH/htzG/4vhyv+S5dD/mO7W/6X74v80noT/Io90v////wAAZkCAAHla/33ny/945cb/nunV/7Xr + 3v+l5tT/luDN/4ndxv992cL/1vLq//v9/P/1+/n/8vv4//L69//z+/j/9Pv5/7Xo2//x+vn///////// + //+y59n/aNS3/3LWvP932r//fNzD/4Ljyf+J7ND/l/bd/yORdf8knH6A////AABuRzAAdlT/Xc6x/23o + xv9s4MH/qurZ/5jiz/+I3cb/edjA/8ju5f/3/Pv/8vv4//H6+P/y+/j/6/f0/7np3v/7/fz//v7+/6fk + 1f+56tz///////////9h0bT/aNW4/23Wu/9v3L//dOLG/37w0f9m1rn/Hpt8/ymujTD///8AAAAAAACD + X98po4X/Z+7K/1vgvP+A4sf/jOHK/3rZwv+r59f/9Pv6/+/69//v+vf/8vr4/9fy6/9n0rf/VM6t/6Di + 0v/N7+f/adO4/1PMrf9t1Lr/i9zI/1/Rs/9h0rX/ZNe4/2bbvf9s5sb/ePfV/z2ylf8lrozfAAAAAP// + /wAAAAAAAJNsYAWQbf9U1rP/Vee//0rYsf993sb/pebV//P7+v/s+Pb/6/f1/+749v+s5tj/Vc2u/1jP + r/9ZzrD/btW5/1bOr/9Wza//Vs6v/1fOr/9Z0LD/WdCy/1vTtP9d1rX/Xt+8/2btyP9k4L//IaaF/y7D + nmAAAAAA////AAAAAAAAAAAAD6J9zyCjgv9S68L/P9+0/2Pevv/5////7/v6/+v59//j9/L/gtvF/1PN + r/9Wz7D/Wc+x/1nQsf9Zz7H/WM6w/1fPsP9UzrD/VM+w/1TPrv9U0a//U9Oy/1Tatv9Z5sD/Y/LL/zSx + lP8qupbPAAAAAAAAAAD///8AAAAAAAAAAAAYto4wGaeE/y23lP8+5rn/6/////j////w//3/ve/i/2bV + uP9Tzq7/Vc+v/1jPsP9Z0LL/WM+w/1fOsf9Wz7D/Us2w/1HOrf9Qzq3/T9Cu/0zSr/9M2LP/TeC5/1bt + xP9HxaX/KLKQ/zTPqDAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAkvpdgG6iF/y++m//e/////P///3rl + yf9G0K3/VdKy/1bPsf9Wz7H/Vs6w/1bPsP9Sza//Ucyu/0/Nrf9NzKz/S82s/0fOrP9G0a7/QdWv/0Le + tP9I6L7/Q8Ok/yitjP8yyKJgAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAmwJlgG6iF/yK3 + kP8k3q7/H9el/x7Pn/8tzKT/Q9Cs/1HQsP9Q0K7/TM6u/0nMrf9Hzaz/RMyp/0LNqf8+zqn/ONGo/zTV + qf833rD/O+S4/zvCof8orIv/MMSfYAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAkvpdgG6iE/xukgv8gy53/HNql/xzRn/8czJz/HcmZ/yXJnP8qyp7/Lcqg/yzLn/8nypz/JMqc/yTO + n/8l1KT/KN2r/y3Tpv8nq4n/JaqJ/yzAm2AAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAato8wFKN/zxCScv8RnHn/DbqM/wjIlP8GyZT/BsaS/wbFkf8GxZH/B8WR/wfH + k/8IypX/DMmV/xG3jP8WoX3/Fph2/xqkgs8ft5EwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJVvYACGZM8Aelr/AHlZ/wCFX/8AiWL/AJlr/wCb + bP8AlGf/AI5k/wB/W/8AeFj/AHtb/wCHZd8ClXBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwSzAAaESAAGI/vwBf + Pd8AXTz/AF08/wBdPP8AXz3fAGJAvwBoRIAAcUswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A/+AD//+AAP/+AAA//AAAH/gAAA/wAAAH4AAAA+AAAAPAAAABwAAAAYAA + AACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAwAAAAcAAAAHgAAAD4AAAA/AA + AAf4AAAP/AAAH/4AAD//gAD//+AD//////8= +</value> + </data> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs new file mode 100644 index 000000000..b75d5ddcf --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs @@ -0,0 +1,59 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class Setup + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Setup)); + this.backstageView = new ArdupilotMega.Controls.BackstageView.BackstageView(); + this.SuspendLayout(); + // + // backstageView + // + this.backstageView.AutoSize = true; + this.backstageView.Dock = System.Windows.Forms.DockStyle.Fill; + this.backstageView.Location = new System.Drawing.Point(0, 0); + this.backstageView.Name = "backstageView"; + this.backstageView.Size = new System.Drawing.Size(831, 455); + this.backstageView.TabIndex = 0; + // + // Setup + // + this.ClientSize = new System.Drawing.Size(831, 455); + this.Controls.Add(this.backstageView); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Setup"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Controls.BackstageView.BackstageView backstageView; + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.cs new file mode 100644 index 000000000..c87e0f21b --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using ArdupilotMega.Controls.BackstageView; + +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + public partial class Setup : Form + { + public Setup() + { + InitializeComponent(); + + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigRadioInput(), "Radio Calibration")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigFlightModes(), "Flight Modes")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigHardwareOptions(), "Hardware Options")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigBatteryMonitoring(), "Battery Monitor")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigAccelerometerCalibration(), "Level Calibration")); + this.backstageView.AddPage(new BackstageView.BackstageViewPage(new ConfigTradHeli(), "Heli Setup")); + } + } +} diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.resx new file mode 100644 index 000000000..222a74add --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.resx @@ -0,0 +1,197 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> + <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value> + AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAAAAAAA + AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOxkjAtnoOAKpJ4vyiK + c+8nh3D/J4Zv/yeHcP8oi3PvKpJ4vy6fg4AzsZIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADjGo2AyspPfLZ+D/yiQ + d/8hlXj/G6F9/xeqg/8XqYL/GKqD/xuhfv8ilnn/KZB3/y2fhP8yspPfN8ajYAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADvRrDA1vpzfL6uN/yel + hP8XvJD/DMyY/wfQl/8FzJP/A8qS/wPJkf8EypL/BsyU/wnRmP8PzZn/Gb2R/yemhP8tqoz/Mb2a3zbQ + qkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAA4y6ZgMbWV/yin + iP8WwZP/Btqf/wDPlf8AyI7/A8aP/yfNnv9T2LP/UNax/03XsP8506b/G8ya/wHKkf8F0Zf/CNuf/xLB + kv8fpYT/J7KQ/y7IomAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAANcajny+w + kf8hqoj/CNSd/wDRlf8Axor/Hcyd/3Lhwf+p7Nj/o+vV/57m0/+X5dD/k+TN/4/jzf+K5Mz/fuHH/0PW + rf8HzJT/ANCT/wDRlv8OpX//HayI/yrFn58AAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAADDC + nmAtro7/H62J/wPWmv8Ay47/AMaO/3XhxP+e6tT/mObP/5Pjy/+Q4sr/jODJ/4ffx/+C3MT/f9vC/3nb + wf9y2r7/adq7/2DauP8ZzZv/Fdae/8T/9/9WxKj/HKuI/y7IomAAAAAAAAAAAAAAAAD///8AAAAAAAAA + AAAiuZMwKKyM/x6ohf8C1Zr/AMmL/wHGjv+49OL///////////9+3ML/f9zD/4Dcwv9+28L/e9rA/3bZ + vv9w1rr/Z9S4/17Rs/9Qz63/Qcyn/3LewP////////////n///8MpH7/JbKP/zXQqUAAAAAAAAAAAP// + /wAAAAAAAAAAABymhN8dnn//BNGa/wDKjP8AxY3/sfHf/////////////////2nXt/9w1rv/c9e8/3TX + vP9x17z/a9W5/2TTtf9Y0K//SMyp/zXFoP9i07X/////////////////f/LR/wDQlf8epYT/Mb2a3wAA + AAAAAAAA////AAAAAAADlnJgFZR1/wq4iv8AzpH/AMCD/4rmzf//////////////////////WdGv/2PU + tf9p1rf/atS4/2nUtv9i0rT/Vc+u/0fKpv8zxZz/Ws+w//////////////////////8GyJL/ANCS/xLB + kv8tq4z/OMajYAAAAAD///8AAAAAAACHZt8NkW//ANKV/wDChP9i27r//////////////////////9Dx + 6P9MzKn/Vc+v/17Rsv9g0rP/XNCx/1XNrv9Fyaf/McSd/1fPr///////////////////////QM2m/ynK + oP8JzJX/C9yh/ymmhf80spPfAAAAAP///wAAcUwwAHtc/wCrfP8AyIv/AMKK//////////////////// + /////////////5Dgyv9Gyqb/TMyq/07Nq/9MzKn/Qcmj/y/Fnf9Wzq3//////////////////////57k + 0v8av5T/Lceg/yzOo/8M05v/Hr6T/zCghf80spIw////AABoRYAAclT/AL2H/wDBhf9R1rL///////// + ////////4vfw//////////////////H8+P9KzKn/Ocah/zTFnv8qwpj/Us2t//////////////////// + ////////DLqM/yDBlv8wxp//OM6m/xPPm/8Xz53/LZF5/y+fg4////8AAGNAvwB7Wf8Aw4j/ALyC/4bj + yP+g5tL/g93E/2HSsv9Pzqz/Us6s//////////////////////9Yzq//Gr2S/0jLp/////////////// + /////////////yrDm/8SvI//JMGY/zDHn/81zKT/Is2e/xTUnf8nl3v/LJJ5v////wAAXz3vAIlg/wDA + hf8AuoD/quzZ/5Hjyv9628D/ada2/1jRsP9Jy6f/a9a4//////////////////////+Y4s7///////// + //////////////////+c4tD/AbaH/xW8kf8jwZj/LcWd/y/Jn/8kzJ3/E9Ca/yGjgf8ri3Tv////AABd + PP8Ak2b/AL6D/w/Ekv+m6tf/j+HJ/3vawP9p1rf/W9Gx/0rNqf85yJ//Nsaf//////////////////// + /////////////////////////////wCwe/8AtoT/ELqP/xu+k/8jwZj/KMeb/yHKm/8QzZf/HqyG/ymI + cf////8AAF07/wCSZP8AvYL/GMWU/6Dn1P+K38f/ddi+/27Wuf+E3MX/leHN/6fm1f+l5tX/neLQ//// + ////////////////////////////////////////j9/J/27Vuv9Tzq7/JsKY/xa/kv8aw5T/FcaW/wvL + lf8aqoT/J4dw/////wAAXTv/AJFk/wC9gP8GwY3/mObQ/5rkz/+26dv/y/Hl/8Dt3/+06tz/pebV/5bg + zP+g5NL//////////////v///f7+//7+/v//////7fn2////////////tOnb/6Ll0v+v6Nj/jeDI/zXK + o/8IxJD/BMqS/xaqgv8lh2//////AABeO+8AgVf/AL1//wDBif/R9uv/1PPq/8Tv5P+36t3/rujY/6Lk + 0v+U4cv/jt7J//j8+///////+/38//f8+//2+/r/+Pz7//3+/v/m9/P/9Pv6//D6+P9/28L/jd7J/5jj + z/+h5dL/qOvX/4Hmyf8f1J//E596/yOJcO////8AAGA8vwB3U/8p06P/hufM/8Ty5f/D7+T/s+vb/6bm + 1P+c4c//j9/K/4vcyP/t+fb///7///j8/P/0+/r/8vr5//P7+f/1+/r/+/39///////i9fL/ZNO1/3HW + vP992sH/htzG/4vhyv+S5dD/mO7W/6X74v80noT/Io90v////wAAZkCAAHla/33ny/945cb/nunV/7Xr + 3v+l5tT/luDN/4ndxv992cL/1vLq//v9/P/1+/n/8vv4//L69//z+/j/9Pv5/7Xo2//x+vn///////// + //+y59n/aNS3/3LWvP932r//fNzD/4Ljyf+J7ND/l/bd/yORdf8knH6A////AABuRzAAdlT/Xc6x/23o + xv9s4MH/qurZ/5jiz/+I3cb/edjA/8ju5f/3/Pv/8vv4//H6+P/y+/j/6/f0/7np3v/7/fz//v7+/6fk + 1f+56tz///////////9h0bT/aNW4/23Wu/9v3L//dOLG/37w0f9m1rn/Hpt8/ymujTD///8AAAAAAACD + X98po4X/Z+7K/1vgvP+A4sf/jOHK/3rZwv+r59f/9Pv6/+/69//v+vf/8vr4/9fy6/9n0rf/VM6t/6Di + 0v/N7+f/adO4/1PMrf9t1Lr/i9zI/1/Rs/9h0rX/ZNe4/2bbvf9s5sb/ePfV/z2ylf8lrozfAAAAAP// + /wAAAAAAAJNsYAWQbf9U1rP/Vee//0rYsf993sb/pebV//P7+v/s+Pb/6/f1/+749v+s5tj/Vc2u/1jP + r/9ZzrD/btW5/1bOr/9Wza//Vs6v/1fOr/9Z0LD/WdCy/1vTtP9d1rX/Xt+8/2btyP9k4L//IaaF/y7D + nmAAAAAA////AAAAAAAAAAAAD6J9zyCjgv9S68L/P9+0/2Pevv/5////7/v6/+v59//j9/L/gtvF/1PN + r/9Wz7D/Wc+x/1nQsf9Zz7H/WM6w/1fPsP9UzrD/VM+w/1TPrv9U0a//U9Oy/1Tatv9Z5sD/Y/LL/zSx + lP8qupbPAAAAAAAAAAD///8AAAAAAAAAAAAYto4wGaeE/y23lP8+5rn/6/////j////w//3/ve/i/2bV + uP9Tzq7/Vc+v/1jPsP9Z0LL/WM+w/1fOsf9Wz7D/Us2w/1HOrf9Qzq3/T9Cu/0zSr/9M2LP/TeC5/1bt + xP9HxaX/KLKQ/zTPqDAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAkvpdgG6iF/y++m//e/////P///3rl + yf9G0K3/VdKy/1bPsf9Wz7H/Vs6w/1bPsP9Sza//Ucyu/0/Nrf9NzKz/S82s/0fOrP9G0a7/QdWv/0Le + tP9I6L7/Q8Ok/yitjP8yyKJgAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAmwJlgG6iF/yK3 + kP8k3q7/H9el/x7Pn/8tzKT/Q9Cs/1HQsP9Q0K7/TM6u/0nMrf9Hzaz/RMyp/0LNqf8+zqn/ONGo/zTV + qf833rD/O+S4/zvCof8orIv/MMSfYAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAkvpdgG6iE/xukgv8gy53/HNql/xzRn/8czJz/HcmZ/yXJnP8qyp7/Lcqg/yzLn/8nypz/JMqc/yTO + n/8l1KT/KN2r/y3Tpv8nq4n/JaqJ/yzAm2AAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAato8wFKN/zxCScv8RnHn/DbqM/wjIlP8GyZT/BsaS/wbFkf8GxZH/B8WR/wfH + k/8IypX/DMmV/xG3jP8WoX3/Fph2/xqkgs8ft5EwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJVvYACGZM8Aelr/AHlZ/wCFX/8AiWL/AJlr/wCb + bP8AlGf/AI5k/wB/W/8AeFj/AHtb/wCHZd8ClXBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwSzAAaESAAGI/vwBf + Pd8AXTz/AF08/wBdPP8AXz3fAGJAvwBoRIAAcUswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP// + /wD///8A////AP///wD///8A/+AD//+AAP/+AAA//AAAH/gAAA/wAAAH4AAAA+AAAAPAAAABwAAAAYAA + AACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAwAAAAcAAAAHgAAAD4AAAA/AA + AAf4AAAP/AAAH/4AAD//gAD//+AD//////8= +</value> + </data> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs index 651bfd7e7..3f3143eaf 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs @@ -219,6 +219,7 @@ namespace ArdupilotMega.GCSViews private void FlightData_Load(object sender, EventArgs e) { + MainV2.bs = bindingSource1; System.Threading.Thread t11 = new System.Threading.Thread(new System.Threading.ThreadStart(mainloop)) { @@ -1670,7 +1671,7 @@ namespace ArdupilotMega.GCSViews return; } - MainV2.comPort.setMountConfigure(MAVLink.MAV_MOUNT_MODE.MAV_MOUNT_MODE_GPS_POINT, true, true, true); + MainV2.comPort.setMountConfigure(MAVLink.MAV_MOUNT_MODE.GPS_POINT, true, true, true); MainV2.comPort.setMountControl(gotolocation.Lat, gotolocation.Lng, (int)(intalt / MainV2.cs.multiplierdist), true); } diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/Simulation.cs b/Tools/ArdupilotMegaPlanner/GCSViews/Simulation.cs index 0310e66b2..d97921914 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/Simulation.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/Simulation.cs @@ -51,7 +51,7 @@ namespace ArdupilotMega.GCSViews // gps buffer int gpsbufferindex = 0; - ArdupilotMega.MAVLink.__mavlink_gps_raw_t[] gpsbuffer = new MAVLink.__mavlink_gps_raw_t[2]; + ArdupilotMega.MAVLink.mavlink_gps_raw_t[] gpsbuffer = new MAVLink.mavlink_gps_raw_t[5]; // set defaults int rollgain = 10000; @@ -704,10 +704,10 @@ namespace ArdupilotMega.GCSViews float oldax = 0, olday = 0, oldaz = 0; DateTime oldtime = DateTime.Now; #if MAVLINK10 - ArdupilotMega.MAVLink.__mavlink_gps_raw_int_t oldgps = new MAVLink.__mavlink_gps_raw_int_t(); + ArdupilotMega.MAVLink.mavlink_gps_raw_int_t oldgps = new MAVLink.mavlink_gps_raw_int_t(); #endif - ArdupilotMega.MAVLink.__mavlink_attitude_t oldatt = new ArdupilotMega.MAVLink.__mavlink_attitude_t(); + ArdupilotMega.MAVLink.mavlink_attitude_t oldatt = new ArdupilotMega.MAVLink.mavlink_attitude_t(); /// <summary> /// Recevied UDP packet, process and send required data to serial port. @@ -718,18 +718,18 @@ namespace ArdupilotMega.GCSViews private void RECVprocess(byte[] data, int receviedbytes, ArdupilotMega.MAVLink comPort) { #if MAVLINK10 - ArdupilotMega.MAVLink.__mavlink_hil_state_t hilstate = new ArdupilotMega.MAVLink.__mavlink_hil_state_t(); + ArdupilotMega.MAVLink.mavlink_hil_state_t hilstate = new ArdupilotMega.MAVLink.mavlink_hil_state_t(); - ArdupilotMega.MAVLink.__mavlink_gps_raw_int_t gps = new ArdupilotMega.MAVLink.__mavlink_gps_raw_int_t(); + ArdupilotMega.MAVLink.mavlink_gps_raw_int_t gps = new ArdupilotMega.MAVLink.mavlink_gps_raw_int_t(); #else - ArdupilotMega.MAVLink.__mavlink_gps_raw_t gps = new ArdupilotMega.MAVLink.__mavlink_gps_raw_t(); + ArdupilotMega.MAVLink.mavlink_gps_raw_t gps = new ArdupilotMega.MAVLink.mavlink_gps_raw_t(); #endif - ArdupilotMega.MAVLink.__mavlink_raw_imu_t imu = new ArdupilotMega.MAVLink.__mavlink_raw_imu_t(); + ArdupilotMega.MAVLink.mavlink_raw_imu_t imu = new ArdupilotMega.MAVLink.mavlink_raw_imu_t(); - ArdupilotMega.MAVLink.__mavlink_attitude_t att = new ArdupilotMega.MAVLink.__mavlink_attitude_t(); + ArdupilotMega.MAVLink.mavlink_attitude_t att = new ArdupilotMega.MAVLink.mavlink_attitude_t(); - ArdupilotMega.MAVLink.__mavlink_vfr_hud_t asp = new ArdupilotMega.MAVLink.__mavlink_vfr_hud_t(); + ArdupilotMega.MAVLink.mavlink_vfr_hud_t asp = new ArdupilotMega.MAVLink.mavlink_vfr_hud_t(); if (data[0] == 'D' && data[1] == 'A') { @@ -1245,7 +1245,7 @@ namespace ArdupilotMega.GCSViews #endif - MAVLink.__mavlink_raw_pressure_t pres = new MAVLink.__mavlink_raw_pressure_t(); + MAVLink.mavlink_raw_pressure_t pres = new MAVLink.mavlink_raw_pressure_t(); double calc = (101325 * Math.Pow(1 - 2.25577 * Math.Pow(10, -5) * gps.alt, 5.25588)); // updated from valid gps pres.press_diff1 = (short)(int)(calc - 101325); // 0 alt is 0 pa @@ -1263,6 +1263,8 @@ namespace ArdupilotMega.GCSViews // save current fix = 3 gpsbuffer[gpsbufferindex % gpsbuffer.Length] = gps; +// Console.WriteLine((gpsbufferindex % gpsbuffer.Length) + " " + ((gpsbufferindex + (gpsbuffer.Length - 1)) % gpsbuffer.Length)); + // return buffer index + 5 = (3 + 5) = 8 % 6 = 2 comPort.sendPacket(gpsbuffer[(gpsbufferindex + (gpsbuffer.Length - 1)) % gpsbuffer.Length]); diff --git a/Tools/ArdupilotMegaPlanner/HIL/QuadCopter.cs b/Tools/ArdupilotMegaPlanner/HIL/QuadCopter.cs index 16414cbbb..98d32185e 100644 --- a/Tools/ArdupilotMegaPlanner/HIL/QuadCopter.cs +++ b/Tools/ArdupilotMegaPlanner/HIL/QuadCopter.cs @@ -330,14 +330,14 @@ namespace ArdupilotMega.HIL // send to apm #if MAVLINK10 - ArdupilotMega.MAVLink.__mavlink_gps_raw_int_t gps = new ArdupilotMega.MAVLink.__mavlink_gps_raw_int_t(); + ArdupilotMega.MAVLink.mavlink_gps_raw_int_t gps = new ArdupilotMega.MAVLink.mavlink_gps_raw_int_t(); #else - ArdupilotMega.MAVLink.__mavlink_gps_raw_t gps = new ArdupilotMega.MAVLink.__mavlink_gps_raw_t(); + ArdupilotMega.MAVLink.mavlink_gps_raw_t gps = new ArdupilotMega.MAVLink.mavlink_gps_raw_t(); #endif - ArdupilotMega.MAVLink.__mavlink_attitude_t att = new ArdupilotMega.MAVLink.__mavlink_attitude_t(); + ArdupilotMega.MAVLink.mavlink_attitude_t att = new ArdupilotMega.MAVLink.mavlink_attitude_t(); - ArdupilotMega.MAVLink.__mavlink_vfr_hud_t asp = new ArdupilotMega.MAVLink.__mavlink_vfr_hud_t(); + ArdupilotMega.MAVLink.mavlink_vfr_hud_t asp = new ArdupilotMega.MAVLink.mavlink_vfr_hud_t(); att.roll = (float)roll * deg2rad; att.pitch = (float)pitch * deg2rad; @@ -380,7 +380,7 @@ namespace ArdupilotMega.HIL MainV2.comPort.sendPacket(att); - MAVLink.__mavlink_raw_pressure_t pres = new MAVLink.__mavlink_raw_pressure_t(); + MAVLink.mavlink_raw_pressure_t pres = new MAVLink.mavlink_raw_pressure_t(); double calc = (101325 * Math.Pow(1 - 2.25577 * Math.Pow(10, -5) * gps.alt, 5.25588)); pres.press_diff1 = (short)(int)(calc); // 0 alt is 0 pa diff --git a/Tools/ArdupilotMegaPlanner/JoystickSetup.cs b/Tools/ArdupilotMegaPlanner/JoystickSetup.cs index 9d491c7a6..92e7c613d 100644 --- a/Tools/ArdupilotMegaPlanner/JoystickSetup.cs +++ b/Tools/ArdupilotMegaPlanner/JoystickSetup.cs @@ -148,7 +148,7 @@ namespace ArdupilotMega } else { - MAVLink.__mavlink_rc_channels_override_t rc = new MAVLink.__mavlink_rc_channels_override_t(); + MAVLink.mavlink_rc_channels_override_t rc = new MAVLink.mavlink_rc_channels_override_t(); rc.target_component = MainV2.comPort.compid; rc.target_system = MainV2.comPort.sysid; diff --git a/Tools/ArdupilotMegaPlanner/MAVLink.cs b/Tools/ArdupilotMegaPlanner/MAVLink.cs index 380303e23..b9051e669 100644 --- a/Tools/ArdupilotMegaPlanner/MAVLink.cs +++ b/Tools/ArdupilotMegaPlanner/MAVLink.cs @@ -269,7 +269,7 @@ namespace ArdupilotMega if (buffer.Length > 5 && buffer1.Length > 5 && buffer[3] == buffer1[3] && buffer[4] == buffer1[4]) { - __mavlink_heartbeat_t hb = buffer.ByteArrayToStructure<__mavlink_heartbeat_t>(6); + mavlink_heartbeat_t hb = buffer.ByteArrayToStructure<mavlink_heartbeat_t>(6); mavlinkversion = hb.mavlink_version; aptype = hb.type; @@ -345,7 +345,7 @@ namespace ArdupilotMega { bool validPacket = false; byte a = 0; - foreach (Type ty in mavstructs) + foreach (Type ty in MAVLINK_MESSAGE_INFO) { if (ty == indata.GetType()) { @@ -432,7 +432,7 @@ namespace ArdupilotMega try { - if (logfile != null) + if (logfile != null && logfile.BaseStream.CanWrite) { lock (logwritelock) { @@ -491,7 +491,7 @@ namespace ArdupilotMega MainV2.giveComport = true; - __mavlink_param_set_t req = new __mavlink_param_set_t(); + mavlink_param_set_t req = new mavlink_param_set_t(); req.target_system = sysid; req.target_component = compid; @@ -534,7 +534,7 @@ namespace ArdupilotMega { if (buffer[5] == MAVLINK_MSG_ID_PARAM_VALUE) { - __mavlink_param_value_t par = buffer.ByteArrayToStructure<__mavlink_param_value_t>(6); + mavlink_param_value_t par = buffer.ByteArrayToStructure<mavlink_param_value_t>(6); string st = System.Text.ASCIIEncoding.ASCII.GetString(par.param_id); @@ -612,7 +612,7 @@ namespace ArdupilotMega goagain: - __mavlink_param_request_list_t req = new __mavlink_param_request_list_t(); + mavlink_param_request_list_t req = new mavlink_param_request_list_t(); req.target_system = sysid; req.target_component = compid; @@ -657,7 +657,7 @@ namespace ArdupilotMega restart = DateTime.Now; start = DateTime.Now; - __mavlink_param_value_t par = buffer.ByteArrayToStructure<__mavlink_param_value_t>(6); + mavlink_param_value_t par = buffer.ByteArrayToStructure<mavlink_param_value_t>(6); // set new target param_total = (par.param_count - 1); @@ -755,7 +755,7 @@ namespace ArdupilotMega /// </summary> public void stopall(bool forget) { - __mavlink_request_data_stream_t req = new __mavlink_request_data_stream_t(); + mavlink_request_data_stream_t req = new mavlink_request_data_stream_t(); req.target_system = sysid; req.target_component = compid; @@ -780,14 +780,14 @@ namespace ArdupilotMega public void setWPACK() { #if MAVLINK10 - MAVLink.__mavlink_mission_ack_t req = new MAVLink.__mavlink_mission_ack_t(); + MAVLink.mavlink_mission_ack_t req = new MAVLink.mavlink_mission_ack_t(); req.target_system = sysid; req.target_component = compid; req.type = 0; generatePacket(MAVLINK_MSG_ID_MISSION_ACK, req); #else - MAVLink.__mavlink_waypoint_ack_t req = new MAVLink.__mavlink_waypoint_ack_t(); + MAVLink.mavlink_waypoint_ack_t req = new MAVLink.mavlink_waypoint_ack_t(); req.target_system = sysid; req.target_component = compid; req.type = 0; @@ -802,7 +802,7 @@ namespace ArdupilotMega MainV2.givecomport = true; byte[] buffer; - __mavlink_mission_set_current_t req = new __mavlink_mission_set_current_t(); + mavlink_mission_set_current_t req = new mavlink_mission_set_current_t(); req.target_system = sysid; req.target_component = compid; @@ -847,7 +847,7 @@ namespace ArdupilotMega MainV2.givecomport = true; byte[] buffer; - __mavlink_command_long_t req = new __mavlink_command_long_t(); + mavlink_command_long_t req = new mavlink_command_long_t(); req.target_system = sysid; req.target_component = compid; @@ -899,7 +899,7 @@ namespace ArdupilotMega { - var ack = buffer.ByteArrayToStructure<__mavlink_command_ack_t>(6); + var ack = buffer.ByteArrayToStructure<mavlink_command_ack_t>(6); if (ack.result == (byte)MAV_RESULT.MAV_RESULT_ACCEPTED) @@ -919,7 +919,7 @@ namespace ArdupilotMega MainV2.giveComport = true; byte[] buffer; - __mavlink_waypoint_set_current_t req = new __mavlink_waypoint_set_current_t(); + mavlink_waypoint_set_current_t req = new mavlink_waypoint_set_current_t(); req.target_system = sysid; req.target_component = compid; @@ -963,7 +963,7 @@ namespace ArdupilotMega MainV2.giveComport = true; byte[] buffer; - __mavlink_action_t req = new __mavlink_action_t(); + mavlink_action_t req = new mavlink_action_t(); req.target = sysid; req.target_component = compid; @@ -1063,9 +1063,9 @@ namespace ArdupilotMega } break; case (byte)MAVLink.MAV_DATA_STREAM.MAV_DATA_STREAM_EXTRA3: - if (packetspersecondbuild[MAVLINK_MSG_ID_DCM] < DateTime.Now.AddSeconds(-2)) + if (packetspersecondbuild[MAVLINK_MSG_ID_AHRS] < DateTime.Now.AddSeconds(-2)) break; - pps = packetspersecond[MAVLINK_MSG_ID_DCM]; + pps = packetspersecond[MAVLINK_MSG_ID_AHRS]; if (hzratecheck(pps, hzrate)) { return; @@ -1154,7 +1154,7 @@ namespace ArdupilotMega void getDatastream(byte id, byte hzrate) { - __mavlink_request_data_stream_t req = new __mavlink_request_data_stream_t(); + mavlink_request_data_stream_t req = new mavlink_request_data_stream_t(); req.target_system = sysid; req.target_component = compid; @@ -1176,7 +1176,7 @@ namespace ArdupilotMega MainV2.giveComport = true; byte[] buffer; #if MAVLINK10 - __mavlink_mission_request_list_t req = new __mavlink_mission_request_list_t(); + mavlink_mission_request_list_t req = new mavlink_mission_request_list_t(); req.target_system = sysid; req.target_component = compid; @@ -1212,7 +1212,7 @@ namespace ArdupilotMega - var count = buffer.ByteArrayToStructure<__mavlink_mission_count_t>(6); + var count = buffer.ByteArrayToStructure<mavlink_mission_count_t>(6); log.Info("wpcount: " + count.count); @@ -1227,7 +1227,7 @@ namespace ArdupilotMega } #else - __mavlink_waypoint_request_list_t req = new __mavlink_waypoint_request_list_t(); + mavlink_waypoint_request_list_t req = new mavlink_waypoint_request_list_t(); req.target_system = sysid; req.target_component = compid; @@ -1284,7 +1284,7 @@ namespace ArdupilotMega MainV2.giveComport = true; Locationwp loc = new Locationwp(); #if MAVLINK10 - __mavlink_mission_request_t req = new __mavlink_mission_request_t(); + mavlink_mission_request_t req = new mavlink_mission_request_t(); req.target_system = sysid; req.target_component = compid; @@ -1326,12 +1326,12 @@ namespace ArdupilotMega //Array.Copy(buffer, 6, buffer, 0, buffer.Length - 6); - var wp = buffer.ByteArrayToStructure<__mavlink_mission_item_t>(6); + var wp = buffer.ByteArrayToStructure<mavlink_mission_item_t>(6); #else - __mavlink_waypoint_request_t req = new __mavlink_waypoint_request_t(); + mavlink_waypoint_request_t req = new mavlink_waypoint_request_t(); req.target_system = sysid; req.target_component = compid; @@ -1369,7 +1369,7 @@ namespace ArdupilotMega if (buffer[5] == MAVLINK_MSG_ID_WAYPOINT) { //Console.WriteLine("getwp ans " + DateTime.Now.Millisecond); - __mavlink_waypoint_t wp = buffer.ByteArrayToStructure<__mavlink_waypoint_t>(6); + mavlink_waypoint_t wp = buffer.ByteArrayToStructure<mavlink_waypoint_t>(6); #endif @@ -1499,7 +1499,7 @@ namespace ArdupilotMega textoutput = string.Format("{0:X} {1:X} {2:X} {3:X} {4:X} {5:X} ", header, length, seq, sysid, compid, messid); - object data = Activator.CreateInstance(mavstructs[messid]); + object data = Activator.CreateInstance(MAVLINK_MESSAGE_INFO[messid]); MavlinkUtil.ByteArrayToStructure(datin, ref data, 6); @@ -1562,7 +1562,7 @@ namespace ArdupilotMega { #if MAVLINK10 MainV2.givecomport = true; - __mavlink_mission_count_t req = new __mavlink_mission_count_t(); + mavlink_mission_count_t req = new mavlink_mission_count_t(); req.target_system = sysid; req.target_component = compid; // MAVLINK_MSG_ID_MISSION_COUNT @@ -1597,7 +1597,7 @@ namespace ArdupilotMega - var request = buffer.ByteArrayToStructure<__mavlink_mission_request_t>(6); + var request = buffer.ByteArrayToStructure<mavlink_mission_request_t>(6); if (request.seq == 0) { @@ -1617,7 +1617,7 @@ namespace ArdupilotMega } #else MainV2.giveComport = true; - __mavlink_waypoint_count_t req = new __mavlink_waypoint_count_t(); + mavlink_waypoint_count_t req = new mavlink_waypoint_count_t(); req.target_system = sysid; req.target_component = compid; // MAVLINK_MSG_ID_WAYPOINT_COUNT @@ -1649,7 +1649,7 @@ namespace ArdupilotMega { if (buffer[5] == MAVLINK_MSG_ID_WAYPOINT_REQUEST) { - __mavlink_waypoint_request_t request = buffer.ByteArrayToStructure<__mavlink_waypoint_request_t>(6); + mavlink_waypoint_request_t request = buffer.ByteArrayToStructure<mavlink_waypoint_request_t>(6); if (request.seq == 0) { @@ -1682,9 +1682,9 @@ namespace ArdupilotMega { MainV2.giveComport = true; #if MAVLINK10 - __mavlink_mission_item_t req = new __mavlink_mission_item_t(); + mavlink_mission_item_t req = new mavlink_mission_item_t(); #else - __mavlink_waypoint_t req = new __mavlink_waypoint_t(); + mavlink_waypoint_t req = new mavlink_waypoint_t(); #endif req.target_system = sysid; @@ -1797,7 +1797,7 @@ namespace ArdupilotMega { - var ans = buffer.ByteArrayToStructure<__mavlink_mission_ack_t>(6); + var ans = buffer.ByteArrayToStructure<mavlink_mission_ack_t>(6); log.Info("set wp " + index + " ACK 47 : " + buffer[5] + " ans " + Enum.Parse(typeof(MAV_MISSION_RESULT), ans.type.ToString())); @@ -1805,7 +1805,7 @@ namespace ArdupilotMega } else if (buffer[5] == MAVLINK_MSG_ID_MISSION_REQUEST) { - var ans = buffer.ByteArrayToStructure<__mavlink_mission_request_t>(6); + var ans = buffer.ByteArrayToStructure<mavlink_mission_request_t>(6); @@ -1828,13 +1828,13 @@ namespace ArdupilotMega } #else if (buffer[5] == MAVLINK_MSG_ID_WAYPOINT_ACK) - { //__mavlink_waypoint_request_t + { //mavlink_waypoint_request_t log.Info("set wp " + index + " ACK 47 : " + buffer[5]); break; } else if (buffer[5] == MAVLINK_MSG_ID_WAYPOINT_REQUEST) { - __mavlink_waypoint_request_t ans = buffer.ByteArrayToStructure<__mavlink_waypoint_request_t>(6); + mavlink_waypoint_request_t ans = buffer.ByteArrayToStructure<mavlink_waypoint_request_t>(6); if (ans.seq == (index + 1)) { @@ -1859,7 +1859,7 @@ namespace ArdupilotMega public void setMountConfigure(MAV_MOUNT_MODE mountmode, bool stabroll, bool stabpitch, bool stabyaw) { - __mavlink_mount_configure_t req = new __mavlink_mount_configure_t(); + mavlink_mount_configure_t req = new mavlink_mount_configure_t(); req.target_system = sysid; req.target_component = compid; @@ -1875,7 +1875,7 @@ namespace ArdupilotMega public void setMountControl(double pa, double pb, double pc, bool islatlng) { - __mavlink_mount_control_t req = new __mavlink_mount_control_t(); + mavlink_mount_control_t req = new mavlink_mount_control_t(); req.target_system = sysid; req.target_component = compid; @@ -1902,7 +1902,7 @@ namespace ArdupilotMega #if MAVLINK10 try { - MAVLink.__mavlink_set_mode_t mode = new MAVLink.__mavlink_set_mode_t(); + MAVLink.mavlink_set_mode_t mode = new MAVLink.mavlink_set_mode_t(); if (Common.translateMode(modein, ref mode)) { @@ -1915,9 +1915,9 @@ namespace ArdupilotMega #else try { - MAVLink.__mavlink_set_nav_mode_t navmode = new MAVLink.__mavlink_set_nav_mode_t(); + MAVLink.mavlink_set_nav_mode_t navmode = new MAVLink.mavlink_set_nav_mode_t(); - MAVLink.__mavlink_set_mode_t mode = new MAVLink.__mavlink_set_mode_t(); + MAVLink.mavlink_set_mode_t mode = new MAVLink.mavlink_set_mode_t(); if (Common.translateMode(modein, ref navmode, ref mode)) { @@ -2026,7 +2026,7 @@ namespace ArdupilotMega if (BaseStream.IsOpen) { temp[count] = (byte)BaseStream.ReadByte(); - if (rawlogfile != null) + if (rawlogfile != null && rawlogfile.BaseStream.CanWrite) rawlogfile.Write(temp[count]); } } @@ -2092,7 +2092,7 @@ namespace ArdupilotMega if (BaseStream.IsOpen) { int read = BaseStream.Read(temp, 6, length - 4); - if (rawlogfile != null) + if (rawlogfile != null && rawlogfile.BaseStream.CanWrite) { rawlogfile.Write(temp, 0, read); rawlogfile.BaseStream.Flush(); @@ -2243,7 +2243,7 @@ namespace ArdupilotMega try { - if (logfile != null) + if (logfile != null && logfile.BaseStream.CanWrite) { lock (logwritelock) { @@ -2282,7 +2282,7 @@ namespace ArdupilotMega if (buffer[5] == MAVLink.MAVLINK_MSG_ID_MISSION_ITEM) { - __mavlink_mission_item_t wp = buffer.ByteArrayToStructure<__mavlink_mission_item_t>(6); + mavlink_mission_item_t wp = buffer.ByteArrayToStructure<mavlink_mission_item_t>(6); #else if (buffer[5] == MAVLINK_MSG_ID_WAYPOINT_COUNT) @@ -2293,7 +2293,7 @@ namespace ArdupilotMega if (buffer[5] == MAVLink.MAVLINK_MSG_ID_WAYPOINT) { - __mavlink_waypoint_t wp = buffer.ByteArrayToStructure<__mavlink_waypoint_t>(6); + mavlink_waypoint_t wp = buffer.ByteArrayToStructure<mavlink_waypoint_t>(6); #endif wps[wp.seq] = new PointLatLngAlt(wp.x, wp.y, wp.z, wp.seq.ToString()); @@ -2307,7 +2307,7 @@ namespace ArdupilotMega MainV2.giveComport = true; PointLatLngAlt plla = new PointLatLngAlt(); - __mavlink_fence_fetch_point_t req = new __mavlink_fence_fetch_point_t(); + mavlink_fence_fetch_point_t req = new mavlink_fence_fetch_point_t(); req.idx = (byte)no; req.target_component = compid; @@ -2342,7 +2342,7 @@ namespace ArdupilotMega { MainV2.giveComport = false; - __mavlink_fence_point_t fp = buffer.ByteArrayToStructure<__mavlink_fence_point_t>(6); + mavlink_fence_point_t fp = buffer.ByteArrayToStructure<mavlink_fence_point_t>(6); plla.Lat = fp.lat; plla.Lng = fp.lng; @@ -2358,7 +2358,7 @@ namespace ArdupilotMega public bool setFencePoint(byte index, PointLatLngAlt plla, byte fencepointcount) { - __mavlink_fence_point_t fp = new __mavlink_fence_point_t(); + mavlink_fence_point_t fp = new mavlink_fence_point_t(); fp.idx = index; fp.count = fencepointcount; diff --git a/Tools/ArdupilotMegaPlanner/MAVLinkTypes.cs b/Tools/ArdupilotMegaPlanner/MAVLinkTypes.cs index 2f855af56..215c9c545 100644 --- a/Tools/ArdupilotMegaPlanner/MAVLinkTypes.cs +++ b/Tools/ArdupilotMegaPlanner/MAVLinkTypes.cs @@ -8,1453 +8,1928 @@ namespace ArdupilotMega #if MAVLINK10 partial class MAVLink { + public const string MAVLINK_BUILD_DATE = "Wed Apr 4 18:13:10 2012"; + public const string MAVLINK_WIRE_PROTOCOL_VERSION = "1.0"; + public const int MAVLINK_MAX_DIALECT_PAYLOAD_SIZE = 42; - public const byte MAVLINK_MSG_ID_FENCED_POINT_LEN = 10; - public const byte MAVLINK_MSG_ID_FENCE_FETCH_POINT = 161; - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct __mavlink_fence_fetch_point_t + public const int MAVLINK_LITTLE_ENDIAN = 1; + public const int MAVLINK_BIG_ENDIAN = 0; + + public const byte MAVLINK_STX = 254; + + public const byte MAVLINK_ENDIAN = MAVLINK_LITTLE_ENDIAN; + + public const bool MAVLINK_ALIGNED_FIELDS = (1 == 1); + + public const byte MAVLINK_CRC_EXTRA = 1; + + public const bool MAVLINK_NEED_BYTE_SWAP = (MAVLINK_ENDIAN == MAVLINK_LITTLE_ENDIAN); + + public byte[] MAVLINK_MESSAGE_LENGTHS = new byte[] {9, 31, 12, 0, 14, 28, 3, 32, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 25, 23, 30, 101, 22, 26, 16, 14, 28, 32, 28, 28, 22, 22, 21, 6, 6, 37, 4, 4, 2, 2, 4, 2, 2, 3, 13, 12, 19, 17, 15, 15, 27, 25, 18, 18, 20, 20, 0, 0, 26, 0, 36, 0, 6, 4, 0, 21, 18, 0, 0, 0, 20, 0, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 42, 33, 0, 0, 0, 0, 0, 0, 0, 18, 32, 32, 20, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 8, 4, 12, 15, 13, 6, 15, 14, 0, 12, 3, 8, 28, 36, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 30, 18, 18, 51, 9, 3}; + + public byte[] MAVLINK_MESSAGE_CRCS = new byte[] {50, 124, 137, 0, 237, 217, 104, 119, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 214, 159, 220, 168, 24, 23, 170, 144, 67, 115, 39, 246, 185, 104, 237, 244, 222, 212, 9, 254, 230, 28, 28, 132, 221, 232, 11, 153, 41, 39, 214, 223, 141, 33, 15, 3, 100, 24, 239, 238, 0, 0, 183, 0, 130, 0, 148, 21, 0, 52, 124, 0, 0, 0, 20, 0, 152, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 63, 54, 0, 0, 0, 0, 0, 0, 0, 19, 102, 158, 208, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 219, 208, 188, 84, 22, 19, 21, 134, 0, 78, 68, 189, 127, 42, 21, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 49, 170, 44, 83, 46, 247}; + + public Type[] MAVLINK_MESSAGE_INFO = new Type[] {typeof( mavlink_heartbeat_t ), typeof( mavlink_sys_status_t ), typeof( mavlink_system_time_t ), null, typeof( mavlink_ping_t ), typeof( mavlink_change_operator_control_t ), typeof( mavlink_change_operator_control_ack_t ), typeof( mavlink_auth_key_t ), null, null, null, typeof( mavlink_set_mode_t ), null, null, null, null, null, null, null, null, typeof( mavlink_param_request_read_t ), typeof( mavlink_param_request_list_t ), typeof( mavlink_param_value_t ), typeof( mavlink_param_set_t ), typeof( mavlink_gps_raw_int_t ), typeof( mavlink_gps_status_t ), typeof( mavlink_scaled_imu_t ), typeof( mavlink_raw_imu_t ), typeof( mavlink_raw_pressure_t ), typeof( mavlink_scaled_pressure_t ), typeof( mavlink_attitude_t ), typeof( mavlink_attitude_quaternion_t ), typeof( mavlink_local_position_ned_t ), typeof( mavlink_global_position_int_t ), typeof( mavlink_rc_channels_scaled_t ), typeof( mavlink_rc_channels_raw_t ), typeof( mavlink_servo_output_raw_t ), typeof( mavlink_mission_request_partial_list_t ), typeof( mavlink_mission_write_partial_list_t ), typeof( mavlink_mission_item_t ), typeof( mavlink_mission_request_t ), typeof( mavlink_mission_set_current_t ), typeof( mavlink_mission_current_t ), typeof( mavlink_mission_request_list_t ), typeof( mavlink_mission_count_t ), typeof( mavlink_mission_clear_all_t ), typeof( mavlink_mission_item_reached_t ), typeof( mavlink_mission_ack_t ), typeof( mavlink_set_gps_global_origin_t ), typeof( mavlink_gps_global_origin_t ), typeof( mavlink_set_local_position_setpoint_t ), typeof( mavlink_local_position_setpoint_t ), typeof( mavlink_global_position_setpoint_int_t ), typeof( mavlink_set_global_position_setpoint_int_t ), typeof( mavlink_safety_set_allowed_area_t ), typeof( mavlink_safety_allowed_area_t ), typeof( mavlink_set_roll_pitch_yaw_thrust_t ), typeof( mavlink_set_roll_pitch_yaw_speed_thrust_t ), typeof( mavlink_roll_pitch_yaw_thrust_setpoint_t ), typeof( mavlink_roll_pitch_yaw_speed_thrust_setpoint_t ), null, null, typeof( mavlink_nav_controller_output_t ), null, typeof( mavlink_state_correction_t ), null, typeof( mavlink_request_data_stream_t ), typeof( mavlink_data_stream_t ), null, typeof( mavlink_manual_control_t ), typeof( mavlink_rc_channels_override_t ), null, null, null, typeof( mavlink_vfr_hud_t ), null, typeof( mavlink_command_long_t ), typeof( mavlink_command_ack_t ), null, null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_hil_state_t ), typeof( mavlink_hil_controls_t ), typeof( mavlink_hil_rc_inputs_raw_t ), null, null, null, null, null, null, null, typeof( mavlink_optical_flow_t ), typeof( mavlink_global_vision_position_estimate_t ), typeof( mavlink_vision_position_estimate_t ), typeof( mavlink_vision_speed_estimate_t ), typeof( mavlink_vicon_position_estimate_t ), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_sensor_offsets_t ), typeof( mavlink_set_mag_offsets_t ), typeof( mavlink_meminfo_t ), typeof( mavlink_ap_adc_t ), typeof( mavlink_digicam_configure_t ), typeof( mavlink_digicam_control_t ), typeof( mavlink_mount_configure_t ), typeof( mavlink_mount_control_t ), typeof( mavlink_mount_status_t ), null, typeof( mavlink_fence_point_t ), typeof( mavlink_fence_fetch_point_t ), typeof( mavlink_fence_status_t ), typeof( mavlink_ahrs_t ), typeof( mavlink_simstate_t ), typeof( mavlink_hwstatus_t ), typeof( mavlink_radio_t ), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_memory_vect_t ), typeof( mavlink_debug_vect_t ), typeof( mavlink_named_value_float_t ), typeof( mavlink_named_value_int_t ), typeof( mavlink_statustext_t ), typeof( mavlink_debug_t ), typeof( mavlink_extended_message_t )}; + + public const byte MAVLINK_VERSION = 3; + + + /** @brief Enumeration of possible mount operation modes */ + public enum MAV_MOUNT_MODE { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte idx; /// point index (first point is 1, 0 is for return point) + ///<summary> Load and keep safe position (Roll,Pitch,Yaw) from EEPROM and stop stabilization | </summary> + RETRACT=0, + ///<summary> Load and keep neutral position (Roll,Pitch,Yaw) from EEPROM. | </summary> + NEUTRAL=1, + ///<summary> Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | </summary> + MAVLINK_TARGETING=2, + ///<summary> Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | </summary> + RC_TARGETING=3, + ///<summary> Load neutral position and start to point to Lat,Lon,Alt | </summary> + GPS_POINT=4, + ///<summary> | </summary> + ENUM_END=5, + }; - - public const byte MAVLINK_MSG_ID_FENCE_FETCH_POINT_LEN = 3; - public const byte MAVLINK_MSG_ID_FENCE_POINT = 160; - [StructLayout(LayoutKind.Sequential, Pack = 1)] - public struct __mavlink_fence_point_t + + /** @brief */ + public enum MAV_CMD { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte idx; /// point index (first point is 1, 0 is for return point) - public byte count; /// total number of points (for sanity checking) - public float lat; /// Latitude of point - public float lng; /// Longitude of point + ///<summary> Navigate to MISSION. |Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)| Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached)| 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.| Desired yaw angle at MISSION (rotary wing)| Latitude| Longitude| Altitude| </summary> + NAV_WAYPOINT=16, + ///<summary> Loiter around this MISSION an unlimited amount of time |Empty| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| </summary> + NAV_LOITER_UNLIM=17, + ///<summary> Loiter around this MISSION for X turns |Turns| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| </summary> + NAV_LOITER_TURNS=18, + ///<summary> Loiter around this MISSION for X seconds |Seconds (decimal)| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| </summary> + NAV_LOITER_TIME=19, + ///<summary> Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + NAV_RETURN_TO_LAUNCH=20, + ///<summary> Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| </summary> + NAV_LAND=21, + ///<summary> Takeoff from ground / hand |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| </summary> + NAV_TAKEOFF=22, + ///<summary> Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of intereset mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| </summary> + NAV_ROI=80, + ///<summary> Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning| 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid| Empty| Yaw angle at goal, in compass degrees, [0..360]| Latitude/X of goal| Longitude/Y of goal| Altitude/Z of goal| </summary> + NAV_PATHPLANNING=81, + ///<summary> NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + NAV_LAST=95, + ///<summary> Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + CONDITION_DELAY=112, + ///<summary> Ascend/descend at rate. Delay mission state machine until desired altitude reached. |Descent / Ascend rate (m/s)| Empty| Empty| Empty| Empty| Empty| Finish Altitude| </summary> + CONDITION_CHANGE_ALT=113, + ///<summary> Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + CONDITION_DISTANCE=114, + ///<summary> Reach a certain target angle. |target angle: [0-360], 0 is north| speed during yaw change:[deg per second]| direction: negative: counter clockwise, positive: clockwise [-1,1]| relative offset or absolute angle: [ 1,0]| Empty| Empty| Empty| </summary> + CONDITION_YAW=115, + ///<summary> NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + CONDITION_LAST=159, + ///<summary> Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + DO_SET_MODE=176, + ///<summary> Jump to the desired command in the mission list. Repeat this action only the specified number of times |Sequence number| Repeat count| Empty| Empty| Empty| Empty| Empty| </summary> + DO_JUMP=177, + ///<summary> Change speed and/or throttle set points. |Speed type (0=Airspeed, 1=Ground Speed)| Speed (m/s, -1 indicates no change)| Throttle ( Percent, -1 indicates no change)| Empty| Empty| Empty| Empty| </summary> + DO_CHANGE_SPEED=178, + ///<summary> Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)| Empty| Empty| Empty| Latitude| Longitude| Altitude| </summary> + DO_SET_HOME=179, + ///<summary> Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number| Parameter value| Empty| Empty| Empty| Empty| Empty| </summary> + DO_SET_PARAMETER=180, + ///<summary> Set a relay to a condition. |Relay number| Setting (1=on, 0=off, others possible depending on system hardware)| Empty| Empty| Empty| Empty| Empty| </summary> + DO_SET_RELAY=181, + ///<summary> Cycle a relay on and off for a desired number of cyles with a desired period. |Relay number| Cycle count| Cycle time (seconds, decimal)| Empty| Empty| Empty| Empty| </summary> + DO_REPEAT_RELAY=182, + ///<summary> Set a servo to a desired PWM value. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Empty| Empty| Empty| Empty| Empty| </summary> + DO_SET_SERVO=183, + ///<summary> Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Cycle count| Cycle time (seconds)| Empty| Empty| Empty| </summary> + DO_REPEAT_SERVO=184, + ///<summary> Control onboard camera system. |Camera ID (-1 for all)| Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw| Transmission mode: 0: video stream, >0: single images every n seconds (decimal)| Recording: 0: disabled, 1: enabled compressed, 2: enabled raw| Empty| Empty| Empty| </summary> + DO_CONTROL_VIDEO=200, + ///<summary> Mission command to configure an on-board camera controller system. |Modes: P, TV, AV, M, Etc| Shutter speed: Divisor number for one second| Aperture: F stop number| ISO number e.g. 80, 100, 200, Etc| Exposure type enumerator| Command Identity| Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)| </summary> + DO_DIGICAM_CONFIGURE=202, + ///<summary> Mission command to control an on-board camera controller system. |Session control e.g. show/hide lens| Zoom's absolute position| Zooming step value to offset zoom from the current position| Focus Locking, Unlocking or Re-locking| Shooting Command| Command Identity| Empty| </summary> + DO_DIGICAM_CONTROL=203, + ///<summary> Mission command to configure a camera or antenna mount |Mount operation mode (see MAV_MOUNT_MODE enum)| stabilize roll? (1 = yes, 0 = no)| stabilize pitch? (1 = yes, 0 = no)| stabilize yaw? (1 = yes, 0 = no)| Empty| Empty| Empty| </summary> + DO_MOUNT_CONFIGURE=204, + ///<summary> Mission command to control a camera or antenna mount |pitch(deg*100) or lat, depending on mount mode.| roll(deg*100) or lon depending on mount mode| yaw(deg*100) or alt (in cm) depending on mount mode| Empty| Empty| Empty| Empty| </summary> + DO_MOUNT_CONTROL=205, + ///<summary> NOP - This command is only used to mark the upper limit of the DO commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + DO_LAST=240, + ///<summary> Trigger calibration. This command will be only accepted if in pre-flight mode. |Gyro calibration: 0: no, 1: yes| Magnetometer calibration: 0: no, 1: yes| Ground pressure: 0: no, 1: yes| Radio calibration: 0: no, 1: yes| Empty| Empty| Empty| </summary> + PREFLIGHT_CALIBRATION=241, + ///<summary> Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow| X axis offset (or generic dimension 1), in the sensor's raw units| Y axis offset (or generic dimension 2), in the sensor's raw units| Z axis offset (or generic dimension 3), in the sensor's raw units| Generic dimension 4, in the sensor's raw units| Generic dimension 5, in the sensor's raw units| Generic dimension 6, in the sensor's raw units| </summary> + PREFLIGHT_SET_SENSOR_OFFSETS=242, + ///<summary> Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Reserved| Reserved| Empty| Empty| Empty| </summary> + PREFLIGHT_STORAGE=245, + ///<summary> Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.| 0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.| Reserved| Reserved| Empty| Empty| Empty| </summary> + PREFLIGHT_REBOOT_SHUTDOWN=246, + ///<summary> Hold / continue the current action |MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan| MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position| MAV_FRAME coordinate frame of hold point| Desired yaw angle in degrees| Latitude / X position| Longitude / Y position| Altitude / Z position| </summary> + OVERRIDE_GOTO=252, + ///<summary> start running a mission |first_item: the first mission item to run| last_item: the last mission item to run (after this item is run, the mission ends)| </summary> + MISSION_START=300, + ///<summary> | </summary> + ENUM_END=301, + }; + + /** @brief */ + public enum FENCE_ACTION + { + ///<summary> Disable fenced mode | </summary> + NONE=0, + ///<summary> Switched to guided mode to return point (fence point 0) | </summary> + GUIDED=1, + ///<summary> | </summary> + ENUM_END=2, + + }; + + /** @brief */ + public enum FENCE_BREACH + { + ///<summary> No last fence breach | </summary> + NONE=0, + ///<summary> Breached minimum altitude | </summary> + MINALT=1, + ///<summary> Breached minimum altitude | </summary> + MAXALT=2, + ///<summary> Breached fence boundary | </summary> + BOUNDARY=3, + ///<summary> | </summary> + ENUM_END=4, + + }; + + + + public const byte MAVLINK_MSG_ID_SENSOR_OFFSETS = 150; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=42)] + public struct mavlink_sensor_offsets_t + { + /// <summary> magnetic declination (radians) </summary> + public Single mag_declination; + /// <summary> raw pressure from barometer </summary> + public Int32 raw_press; + /// <summary> raw temperature from barometer </summary> + public Int32 raw_temp; + /// <summary> gyro X calibration </summary> + public Single gyro_cal_x; + /// <summary> gyro Y calibration </summary> + public Single gyro_cal_y; + /// <summary> gyro Z calibration </summary> + public Single gyro_cal_z; + /// <summary> accel X calibration </summary> + public Single accel_cal_x; + /// <summary> accel Y calibration </summary> + public Single accel_cal_y; + /// <summary> accel Z calibration </summary> + public Single accel_cal_z; + /// <summary> magnetometer X offset </summary> + public Int16 mag_ofs_x; + /// <summary> magnetometer Y offset </summary> + public Int16 mag_ofs_y; + /// <summary> magnetometer Z offset </summary> + public Int16 mag_ofs_z; + + }; + + + public const byte MAVLINK_MSG_ID_SET_MAG_OFFSETS = 151; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=8)] + public struct mavlink_set_mag_offsets_t + { + /// <summary> magnetometer X offset </summary> + public Int16 mag_ofs_x; + /// <summary> magnetometer Y offset </summary> + public Int16 mag_ofs_y; + /// <summary> magnetometer Z offset </summary> + public Int16 mag_ofs_z; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_MEMINFO = 152; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_meminfo_t + { + /// <summary> heap top </summary> + public UInt16 brkval; + /// <summary> free memory </summary> + public UInt16 freemem; + + }; + + + public const byte MAVLINK_MSG_ID_AP_ADC = 153; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=12)] + public struct mavlink_ap_adc_t + { + /// <summary> ADC output 1 </summary> + public UInt16 adc1; + /// <summary> ADC output 2 </summary> + public UInt16 adc2; + /// <summary> ADC output 3 </summary> + public UInt16 adc3; + /// <summary> ADC output 4 </summary> + public UInt16 adc4; + /// <summary> ADC output 5 </summary> + public UInt16 adc5; + /// <summary> ADC output 6 </summary> + public UInt16 adc6; + + }; + + + public const byte MAVLINK_MSG_ID_DIGICAM_CONFIGURE = 154; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=15)] + public struct mavlink_digicam_configure_t + { + /// <summary> Correspondent value to given extra_param </summary> + public Single extra_value; + /// <summary> Divisor number //e.g. 1000 means 1/1000 (0 means ignore) </summary> + public UInt16 shutter_speed; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore) </summary> + public byte mode; + /// <summary> F stop number x 10 //e.g. 28 means 2.8 (0 means ignore) </summary> + public byte aperture; + /// <summary> ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore) </summary> + public byte iso; + /// <summary> Exposure type enumeration from 1 to N (0 means ignore) </summary> + public byte exposure_type; + /// <summary> Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once </summary> + public byte command_id; + /// <summary> Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) </summary> + public byte engine_cut_off; + /// <summary> Extra parameters enumeration (0 means ignore) </summary> + public byte extra_param; + + }; + + + public const byte MAVLINK_MSG_ID_DIGICAM_CONTROL = 155; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=13)] + public struct mavlink_digicam_control_t + { + /// <summary> Correspondent value to given extra_param </summary> + public Single extra_value; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> 0: stop, 1: start or keep it up //Session control e.g. show/hide lens </summary> + public byte session; + /// <summary> 1 to N //Zoom's absolute position (0 means ignore) </summary> + public byte zoom_pos; + /// <summary> -100 to 100 //Zooming step value to offset zoom from the current position </summary> + public byte zoom_step; + /// <summary> 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus </summary> + public byte focus_lock; + /// <summary> 0: ignore, 1: shot or start filming </summary> + public byte shot; + /// <summary> Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once </summary> + public byte command_id; + /// <summary> Extra parameters enumeration (0 means ignore) </summary> + public byte extra_param; + + }; + + + public const byte MAVLINK_MSG_ID_MOUNT_CONFIGURE = 156; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=6)] + public struct mavlink_mount_configure_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> mount operating mode (see MAV_MOUNT_MODE enum) </summary> + public byte mount_mode; + /// <summary> (1 = yes, 0 = no) </summary> + public byte stab_roll; + /// <summary> (1 = yes, 0 = no) </summary> + public byte stab_pitch; + /// <summary> (1 = yes, 0 = no) </summary> + public byte stab_yaw; + + }; + + + public const byte MAVLINK_MSG_ID_MOUNT_CONTROL = 157; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=15)] + public struct mavlink_mount_control_t + { + /// <summary> pitch(deg*100) or lat, depending on mount mode </summary> + public Int32 input_a; + /// <summary> roll(deg*100) or lon depending on mount mode </summary> + public Int32 input_b; + /// <summary> yaw(deg*100) or alt (in cm) depending on mount mode </summary> + public Int32 input_c; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING) </summary> + public byte save_position; + + }; + + + public const byte MAVLINK_MSG_ID_MOUNT_STATUS = 158; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=14)] + public struct mavlink_mount_status_t + { + /// <summary> pitch(deg*100) or lat, depending on mount mode </summary> + public Int32 pointing_a; + /// <summary> roll(deg*100) or lon depending on mount mode </summary> + public Int32 pointing_b; + /// <summary> yaw(deg*100) or alt (in cm) depending on mount mode </summary> + public Int32 pointing_c; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_FENCE_POINT = 160; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=12)] + public struct mavlink_fence_point_t + { + /// <summary> Latitude of point </summary> + public Single lat; + /// <summary> Longitude of point </summary> + public Single lng; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> point index (first point is 1, 0 is for return point) </summary> + public byte idx; + /// <summary> total number of points (for sanity checking) </summary> + public byte count; + + }; + + + public const byte MAVLINK_MSG_ID_FENCE_FETCH_POINT = 161; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_fence_fetch_point_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> point index (first point is 1, 0 is for return point) </summary> + public byte idx; + + }; + + + public const byte MAVLINK_MSG_ID_FENCE_STATUS = 162; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=8)] + public struct mavlink_fence_status_t + { + /// <summary> time of last breach in milliseconds since boot </summary> + public UInt32 breach_time; + /// <summary> number of fence breaches </summary> + public UInt16 breach_count; + /// <summary> 0 if currently inside fence, 1 if outside </summary> + public byte breach_status; + /// <summary> last breach type (see FENCE_BREACH_* enum) </summary> + public byte breach_type; + + }; + + + public const byte MAVLINK_MSG_ID_AHRS = 163; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=28)] + public struct mavlink_ahrs_t + { + /// <summary> X gyro drift estimate rad/s </summary> + public Single omegaIx; + /// <summary> Y gyro drift estimate rad/s </summary> + public Single omegaIy; + /// <summary> Z gyro drift estimate rad/s </summary> + public Single omegaIz; + /// <summary> average accel_weight </summary> + public Single accel_weight; + /// <summary> average renormalisation value </summary> + public Single renorm_val; + /// <summary> average error_roll_pitch value </summary> + public Single error_rp; + /// <summary> average error_yaw value </summary> + public Single error_yaw; + + }; + + + public const byte MAVLINK_MSG_ID_SIMSTATE = 164; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=36)] + public struct mavlink_simstate_t + { + /// <summary> Roll angle (rad) </summary> + public Single roll; + /// <summary> Pitch angle (rad) </summary> + public Single pitch; + /// <summary> Yaw angle (rad) </summary> + public Single yaw; + /// <summary> X acceleration m/s/s </summary> + public Single xacc; + /// <summary> Y acceleration m/s/s </summary> + public Single yacc; + /// <summary> Z acceleration m/s/s </summary> + public Single zacc; + /// <summary> Angular speed around X axis rad/s </summary> + public Single xgyro; + /// <summary> Angular speed around Y axis rad/s </summary> + public Single ygyro; + /// <summary> Angular speed around Z axis rad/s </summary> + public Single zgyro; + + }; + + + public const byte MAVLINK_MSG_ID_HWSTATUS = 165; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_hwstatus_t + { + /// <summary> board voltage (mV) </summary> + public UInt16 Vcc; + /// <summary> I2C error count </summary> + public byte I2Cerr; + + }; - public byte[] MAVLINK_MESSAGE_LENGTHS = new byte[] {9, 31, 12, 0, 14, 28, 3, 32, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 25, 23, 30, 101, 22, 26, 16, 14, 28, 32, 28, 28, 22, 22, 21, 6, 6, 37, 4, 4, 2, 2, 4, 2, 2, 3, 13, 12, 19, 17, 15, 15, 27, 25, 18, 18, 20, 20, 0, 0, 26, 0, 36, 0, 6, 4, 0, 21, 18, 0, 0, 0, 20, 0, 33, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 42, 33, 0, 0, 0, 0, 0, 0, 0, 18, 32, 32, 20, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 8, 4, 12, 15, 13, 6, 15, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 30, 18, 18, 51, 9, 3}; - public byte[] MAVLINK_MESSAGE_CRCS = new byte[] {50, 124, 137, 0, 237, 217, 104, 119, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 214, 159, 220, 168, 24, 23, 170, 144, 67, 115, 39, 246, 185, 104, 237, 244, 222, 212, 9, 254, 230, 28, 28, 132, 221, 232, 11, 153, 41, 39, 214, 223, 141, 33, 15, 3, 100, 24, 239, 238, 0, 0, 183, 0, 130, 0, 148, 21, 0, 52, 124, 0, 0, 0, 20, 0, 152, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 63, 54, 0, 0, 0, 0, 0, 0, 0, 19, 102, 158, 208, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 219, 208, 188, 84, 22, 19, 21, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 49, 170, 44, 83, 46, 247}; - public enum MAV_MOUNT_MODE - { - MAV_MOUNT_MODE_RETRACT=0, /* Load and keep safe position (Roll,Pitch,Yaw) from EEPROM and stop stabilization | */ - MAV_MOUNT_MODE_NEUTRAL=1, /* Load and keep neutral position (Roll,Pitch,Yaw) from EEPROM. | */ - MAV_MOUNT_MODE_MAVLINK_TARGETING=2, /* Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | */ - MAV_MOUNT_MODE_RC_TARGETING=3, /* Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | */ - MAV_MOUNT_MODE_GPS_POINT=4, /* Load neutral position and start to point to Lat,Lon,Alt | */ - MAV_MOUNT_MODE_ENUM_END=5, /* | */ - }; - - public enum MAV_CMD - { - WAYPOINT=16, /* Navigate to MISSION. |Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)| Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached)| 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.| Desired yaw angle at MISSION (rotary wing)| Latitude| Longitude| Altitude| */ - LOITER_UNLIM=17, /* Loiter around this MISSION an unlimited amount of time |Empty| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */ - LOITER_TURNS=18, /* Loiter around this MISSION for X turns |Turns| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */ - LOITER_TIME=19, /* Loiter around this MISSION for X seconds |Seconds (decimal)| Empty| Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */ - RETURN_TO_LAUNCH=20, /* Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */ - LAND=21, /* Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| */ - TAKEOFF=22, /* Takeoff from ground / hand |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| */ - ROI=80, /* Sets the region of interest (ROI) for a sensor set or the - vehicle itself. This can then be used by the vehicles control - system to control the vehicle attitude and the attitude of various - sensors such as cameras. |Region of intereset mode. (see MAV_ROI enum)| MISSION index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| */ - PATHPLANNING=81, /* Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning| 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid| Empty| Yaw angle at goal, in compass degrees, [0..360]| Latitude/X of goal| Longitude/Y of goal| Altitude/Z of goal| */ - LAST=95, /* NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */ - CONDITION_DELAY=112, /* Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| */ - CONDITION_CHANGE_ALT=113, /* Ascend/descend at rate. Delay mission state machine until desired altitude reached. |Descent / Ascend rate (m/s)| Empty| Empty| Empty| Empty| Empty| Finish Altitude| */ - CONDITION_DISTANCE=114, /* Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| */ - CONDITION_YAW=115, /* Reach a certain target angle. |target angle: [0-360], 0 is north| speed during yaw change:[deg per second]| direction: negative: counter clockwise, positive: clockwise [-1,1]| relative offset or absolute angle: [ 1,0]| Empty| Empty| Empty| */ - CONDITION_LAST=159, /* NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */ - DO_SET_MODE=176, /* Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| */ - DO_JUMP=177, /* Jump to the desired command in the mission list. Repeat this action only the specified number of times |Sequence number| Repeat count| Empty| Empty| Empty| Empty| Empty| */ - DO_CHANGE_SPEED=178, /* Change speed and/or throttle set points. |Speed type (0=Airspeed, 1=Ground Speed)| Speed (m/s, -1 indicates no change)| Throttle ( Percent, -1 indicates no change)| Empty| Empty| Empty| Empty| */ - DO_SET_HOME=179, /* Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)| Empty| Empty| Empty| Latitude| Longitude| Altitude| */ - DO_SET_PARAMETER=180, /* Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number| Parameter value| Empty| Empty| Empty| Empty| Empty| */ - DO_SET_RELAY=181, /* Set a relay to a condition. |Relay number| Setting (1=on, 0=off, others possible depending on system hardware)| Empty| Empty| Empty| Empty| Empty| */ - DO_REPEAT_RELAY=182, /* Cycle a relay on and off for a desired number of cyles with a desired period. |Relay number| Cycle count| Cycle time (seconds, decimal)| Empty| Empty| Empty| Empty| */ - DO_SET_SERVO=183, /* Set a servo to a desired PWM value. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Empty| Empty| Empty| Empty| Empty| */ - DO_REPEAT_SERVO=184, /* Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Cycle count| Cycle time (seconds)| Empty| Empty| Empty| */ - DO_CONTROL_VIDEO=200, /* Control onboard camera system. |Camera ID (-1 for all)| Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw| Transmission mode: 0: video stream, >0: single images every n seconds (decimal)| Recording: 0: disabled, 1: enabled compressed, 2: enabled raw| Empty| Empty| Empty| */ - DO_DIGICAM_CONFIGURE=202, /* Mission command to configure an on-board camera controller system. |Modes: P, TV, AV, M, Etc| Shutter speed: Divisor number for one second| Aperture: F stop number| ISO number e.g. 80, 100, 200, Etc| Exposure type enumerator| Command Identity| Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)| */ - DO_DIGICAM_CONTROL=203, /* Mission command to control an on-board camera controller system. |Session control e.g. show/hide lens| Zoom's absolute position| Zooming step value to offset zoom from the current position| Focus Locking, Unlocking or Re-locking| Shooting Command| Command Identity| Empty| */ - DO_MOUNT_CONFIGURE=204, /* Mission command to configure a camera or antenna mount |Mount operation mode (see MAV_MOUNT_MODE enum)| stabilize roll? (1 = yes, 0 = no)| stabilize pitch? (1 = yes, 0 = no)| stabilize yaw? (1 = yes, 0 = no)| Empty| Empty| Empty| */ - DO_MOUNT_CONTROL=205, /* Mission command to control a camera or antenna mount |pitch(deg*100) or lat, depending on mount mode.| roll(deg*100) or lon depending on mount mode| yaw(deg*100) or alt (in cm) depending on mount mode| Empty| Empty| Empty| Empty| */ - DO_LAST=240, /* NOP - This command is only used to mark the upper limit of the DO commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */ - PREFLIGHT_CALIBRATION=241, /* Trigger calibration. This command will be only accepted if in pre-flight mode. |Gyro calibration: 0: no, 1: yes| Magnetometer calibration: 0: no, 1: yes| Ground pressure: 0: no, 1: yes| Radio calibration: 0: no, 1: yes| Empty| Empty| Empty| */ - PREFLIGHT_SET_SENSOR_OFFSETS=242, /* Set sensor offsets. This command will be only accepted if in pre-flight mode. |Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow| X axis offset (or generic dimension 1), in the sensor's raw units| Y axis offset (or generic dimension 2), in the sensor's raw units| Z axis offset (or generic dimension 3), in the sensor's raw units| Generic dimension 4, in the sensor's raw units| Generic dimension 5, in the sensor's raw units| Generic dimension 6, in the sensor's raw units| */ - PREFLIGHT_STORAGE=245, /* Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Reserved| Reserved| Empty| Empty| Empty| */ - PREFLIGHT_REBOOT_SHUTDOWN=246, /* Request the reboot or shutdown of system components. |0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot.| 0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer.| Reserved| Reserved| Empty| Empty| Empty| */ - OVERRIDE_GOTO=252, /* Hold / continue the current action |MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan| MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position| MAV_FRAME coordinate frame of hold point| Desired yaw angle in degrees| Latitude / X position| Longitude / Y position| Altitude / Z position| */ - MISSION_START=300, /* start running a mission |first_item: the first mission item to run| last_item: the last mission item to run (after this item is run, the mission ends)| */ - ENUM_END=301, /* | */ - }; - - public const byte MAVLINK_MSG_ID_AP_ADC = 153; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_ap_adc_t - { - public ushort adc1; /// ADC output 1 - public ushort adc2; /// ADC output 2 - public ushort adc3; /// ADC output 3 - public ushort adc4; /// ADC output 4 - public ushort adc5; /// ADC output 5 - public ushort adc6; /// ADC output 6 - }; - - public const byte MAVLINK_MSG_ID_AP_ADC_LEN = 12; - public const byte MAVLINK_MSG_ID_DIGICAM_CONFIGURE = 154; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_digicam_configure_t - { - public float extra_value; /// Correspondent value to given extra_param - public ushort shutter_speed; /// Divisor number //e.g. 1000 means 1/1000 (0 means ignore) - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte mode; /// Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore) - public byte aperture; /// F stop number x 10 //e.g. 28 means 2.8 (0 means ignore) - public byte iso; /// ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore) - public byte exposure_type; /// Exposure type enumeration from 1 to N (0 means ignore) - public byte command_id; /// Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - public byte engine_cut_off; /// Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) - public byte extra_param; /// Extra parameters enumeration (0 means ignore) - }; - - public const byte MAVLINK_MSG_ID_DIGICAM_CONFIGURE_LEN = 15; - public const byte MAVLINK_MSG_ID_DIGICAM_CONTROL = 155; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_digicam_control_t - { - public float extra_value; /// Correspondent value to given extra_param - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte session; /// 0: stop, 1: start or keep it up //Session control e.g. show/hide lens - public byte zoom_pos; /// 1 to N //Zoom's absolute position (0 means ignore) - public byte zoom_step; /// -100 to 100 //Zooming step value to offset zoom from the current position - public byte focus_lock; /// 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus - public byte shot; /// 0: ignore, 1: shot or start filming - public byte command_id; /// Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - public byte extra_param; /// Extra parameters enumeration (0 means ignore) - }; - - public const byte MAVLINK_MSG_ID_DIGICAM_CONTROL_LEN = 13; - public const byte MAVLINK_MSG_ID_MEMINFO = 152; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_meminfo_t - { - public ushort brkval; /// heap top - public ushort freemem; /// free memory - }; - - public const byte MAVLINK_MSG_ID_MEMINFO_LEN = 4; - public const byte MAVLINK_MSG_ID_MOUNT_CONFIGURE = 156; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mount_configure_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte mount_mode; /// mount operating mode (see MAV_MOUNT_MODE enum) - public byte stab_roll; /// (1 = yes, 0 = no) - public byte stab_pitch; /// (1 = yes, 0 = no) - public byte stab_yaw; /// (1 = yes, 0 = no) - }; - - public const byte MAVLINK_MSG_ID_MOUNT_CONFIGURE_LEN = 6; - public const byte MAVLINK_MSG_ID_MOUNT_CONTROL = 157; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mount_control_t - { - public int input_a; /// pitch(deg*100) or lat, depending on mount mode - public int input_b; /// roll(deg*100) or lon depending on mount mode - public int input_c; /// yaw(deg*100) or alt (in cm) depending on mount mode - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte save_position; /// if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING) - }; - - public const byte MAVLINK_MSG_ID_MOUNT_CONTROL_LEN = 15; - public const byte MAVLINK_MSG_ID_MOUNT_STATUS = 158; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mount_status_t - { - public int pointing_a; /// pitch(deg*100) or lat, depending on mount mode - public int pointing_b; /// roll(deg*100) or lon depending on mount mode - public int pointing_c; /// yaw(deg*100) or alt (in cm) depending on mount mode - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_MOUNT_STATUS_LEN = 14; - public const byte MAVLINK_MSG_ID_SENSOR_OFFSETS = 150; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_sensor_offsets_t - { - public float mag_declination; /// magnetic declination (radians) - public int raw_press; /// raw pressure from barometer - public int raw_temp; /// raw temperature from barometer - public float gyro_cal_x; /// gyro X calibration - public float gyro_cal_y; /// gyro Y calibration - public float gyro_cal_z; /// gyro Z calibration - public float accel_cal_x; /// accel X calibration - public float accel_cal_y; /// accel Y calibration - public float accel_cal_z; /// accel Z calibration - public short mag_ofs_x; /// magnetometer X offset - public short mag_ofs_y; /// magnetometer Y offset - public short mag_ofs_z; /// magnetometer Z offset - }; - - public const byte MAVLINK_MSG_ID_SENSOR_OFFSETS_LEN = 42; - public const byte MAVLINK_MSG_ID_SET_MAG_OFFSETS = 151; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_mag_offsets_t - { - public short mag_ofs_x; /// magnetometer X offset - public short mag_ofs_y; /// magnetometer Y offset - public short mag_ofs_z; /// magnetometer Z offset - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_SET_MAG_OFFSETS_LEN = 8; - public enum MAV_AUTOPILOT - { - MAV_AUTOPILOT_GENERIC=0, /* Generic autopilot, full support for everything | */ - MAV_AUTOPILOT_PIXHAWK=1, /* PIXHAWK autopilot, http://pixhawk.ethz.ch | */ - MAV_AUTOPILOT_SLUGS=2, /* SLUGS autopilot, http://slugsuav.soe.ucsc.edu | */ - MAV_AUTOPILOT_ARDUPILOTMEGA=3, /* ArduPilotMega / ArduCopter, http://diydrones.com | */ - MAV_AUTOPILOT_OPENPILOT=4, /* OpenPilot, http://openpilot.org | */ - MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY=5, /* Generic autopilot only supporting simple waypoints | */ - MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY=6, /* Generic autopilot supporting waypoints and other simple navigation commands | */ - MAV_AUTOPILOT_GENERIC_MISSION_FULL=7, /* Generic autopilot supporting the full mission command set | */ - MAV_AUTOPILOT_INVALID=8, /* No valid autopilot, e.g. a GCS or other MAVLink component | */ - MAV_AUTOPILOT_PPZ=9, /* PPZ UAV - http://nongnu.org/paparazzi | */ - MAV_AUTOPILOT_UDB=10, /* UAV Dev Board | */ - MAV_AUTOPILOT_FP=11, /* FlexiPilot | */ - MAV_AUTOPILOT_ENUM_END=12, /* | */ - }; - - public enum MAV_MODE_FLAG - { - MAV_MODE_FLAG_CUSTOM_MODE_ENABLED=1, /* 0b00000001 Reserved for future use. | */ - MAV_MODE_FLAG_TEST_ENABLED=2, /* 0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations. | */ - MAV_MODE_FLAG_AUTO_ENABLED=4, /* 0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation. | */ - MAV_MODE_FLAG_GUIDED_ENABLED=8, /* 0b00001000 guided mode enabled, system flies MISSIONs / mission items. | */ - MAV_MODE_FLAG_STABILIZE_ENABLED=16, /* 0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around. | */ - MAV_MODE_FLAG_HIL_ENABLED=32, /* 0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational. | */ - MAV_MODE_FLAG_MANUAL_INPUT_ENABLED=64, /* 0b01000000 remote control input is enabled. | */ - MAV_MODE_FLAG_SAFETY_ARMED=128, /* 0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly. | */ - MAV_MODE_FLAG_ENUM_END=129, /* | */ - }; - - public enum MAV_MODE_FLAG_DECODE_POSITION - { - MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE=1, /* Eighth bit: 00000001 | */ - MAV_MODE_FLAG_DECODE_POSITION_TEST=2, /* Seventh bit: 00000010 | */ - MAV_MODE_FLAG_DECODE_POSITION_AUTO=4, /* Sixt bit: 00000100 | */ - MAV_MODE_FLAG_DECODE_POSITION_GUIDED=8, /* Fifth bit: 00001000 | */ - MAV_MODE_FLAG_DECODE_POSITION_STABILIZE=16, /* Fourth bit: 00010000 | */ - MAV_MODE_FLAG_DECODE_POSITION_HIL=32, /* Third bit: 00100000 | */ - MAV_MODE_FLAG_DECODE_POSITION_MANUAL=64, /* Second bit: 01000000 | */ - MAV_MODE_FLAG_DECODE_POSITION_SAFETY=128, /* First bit: 10000000 | */ - MAV_MODE_FLAG_DECODE_POSITION_ENUM_END=129, /* | */ - }; - - public enum MAV_GOTO - { - MAV_GOTO_DO_HOLD=0, /* Hold at the current position. | */ - MAV_GOTO_DO_CONTINUE=1, /* Continue with the next item in mission execution. | */ - MAV_GOTO_HOLD_AT_CURRENT_POSITION=2, /* Hold at the current position of the system | */ - MAV_GOTO_HOLD_AT_SPECIFIED_POSITION=3, /* Hold at the position specified in the parameters of the DO_HOLD action | */ - MAV_GOTO_ENUM_END=4, /* | */ - }; - - public enum MAV_MODE - { - MAV_MODE_PREFLIGHT=0, /* System is not ready to fly, booting, calibrating, etc. No flag is set. | */ - MAV_MODE_MANUAL_DISARMED=64, /* System is allowed to be active, under manual (RC) control, no stabilization | */ - MAV_MODE_TEST_DISARMED=66, /* UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only. | */ - MAV_MODE_STABILIZE_DISARMED=80, /* System is allowed to be active, under assisted RC control. | */ - MAV_MODE_GUIDED_DISARMED=88, /* System is allowed to be active, under autonomous control, manual setpoint | */ - MAV_MODE_AUTO_DISARMED=92, /* System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs) | */ - MAV_MODE_MANUAL_ARMED=192, /* System is allowed to be active, under manual (RC) control, no stabilization | */ - MAV_MODE_TEST_ARMED=194, /* UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only. | */ - MAV_MODE_STABILIZE_ARMED=208, /* System is allowed to be active, under assisted RC control. | */ - MAV_MODE_GUIDED_ARMED=216, /* System is allowed to be active, under autonomous control, manual setpoint | */ - MAV_MODE_AUTO_ARMED=220, /* System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs) | */ - MAV_MODE_ENUM_END=221, /* | */ - }; - - public enum MAV_STATE - { - MAV_STATE_UNINIT=0, /* Uninitialized system, state is unknown. | */ - MAV_STATE_BOOT=1, /* System is booting up. | */ - MAV_STATE_CALIBRATING=2, /* System is calibrating and not flight-ready. | */ - MAV_STATE_STANDBY=3, /* System is grounded and on standby. It can be launched any time. | */ - MAV_STATE_ACTIVE=4, /* System is active and might be already airborne. Motors are engaged. | */ - MAV_STATE_CRITICAL=5, /* System is in a non-normal flight mode. It can however still navigate. | */ - MAV_STATE_EMERGENCY=6, /* System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down. | */ - MAV_STATE_POWEROFF=7, /* System just initialized its power-down sequence, will shut down now. | */ - MAV_STATE_ENUM_END=8, /* | */ - }; - - public enum MAV_TYPE - { - MAV_TYPE_GENERIC=0, /* Generic micro air vehicle. | */ - MAV_TYPE_FIXED_WING=1, /* Fixed wing aircraft. | */ - MAV_TYPE_QUADROTOR=2, /* Quadrotor | */ - MAV_TYPE_COAXIAL=3, /* Coaxial helicopter | */ - MAV_TYPE_HELICOPTER=4, /* Normal helicopter with tail rotor. | */ - MAV_TYPE_ANTENNA_TRACKER=5, /* Ground installation | */ - MAV_TYPE_GCS=6, /* Operator control unit / ground control station | */ - MAV_TYPE_AIRSHIP=7, /* Airship, controlled | */ - MAV_TYPE_FREE_BALLOON=8, /* Free balloon, uncontrolled | */ - MAV_TYPE_ROCKET=9, /* Rocket | */ - MAV_TYPE_GROUND_ROVER=10, /* Ground rover | */ - MAV_TYPE_SURFACE_BOAT=11, /* Surface vessel, boat, ship | */ - MAV_TYPE_SUBMARINE=12, /* Submarine | */ - MAV_TYPE_HEXAROTOR=13, /* Hexarotor | */ - MAV_TYPE_OCTOROTOR=14, /* Octorotor | */ - MAV_TYPE_TRICOPTER=15, /* Octorotor | */ - MAV_TYPE_FLAPPING_WING=16, /* Flapping wing | */ - MAV_TYPE_ENUM_END=17, /* | */ - }; - - public enum MAV_COMPONENT - { - MAV_COMP_ID_ALL=0, /* | */ - MAV_COMP_ID_CAMERA=100, /* | */ - MAV_COMP_ID_SERVO1=140, /* | */ - MAV_COMP_ID_SERVO2=141, /* | */ - MAV_COMP_ID_SERVO3=142, /* | */ - MAV_COMP_ID_SERVO4=143, /* | */ - MAV_COMP_ID_SERVO5=144, /* | */ - MAV_COMP_ID_SERVO6=145, /* | */ - MAV_COMP_ID_SERVO7=146, /* | */ - MAV_COMP_ID_SERVO8=147, /* | */ - MAV_COMP_ID_SERVO9=148, /* | */ - MAV_COMP_ID_SERVO10=149, /* | */ - MAV_COMP_ID_SERVO11=150, /* | */ - MAV_COMP_ID_SERVO12=151, /* | */ - MAV_COMP_ID_SERVO13=152, /* | */ - MAV_COMP_ID_SERVO14=153, /* | */ - MAV_COMP_ID_MAPPER=180, /* | */ - MAV_COMP_ID_MISSIONPLANNER=190, /* | */ - MAV_COMP_ID_PATHPLANNER=195, /* | */ - MAV_COMP_ID_IMU=200, /* | */ - MAV_COMP_ID_IMU_2=201, /* | */ - MAV_COMP_ID_IMU_3=202, /* | */ - MAV_COMP_ID_GPS=220, /* | */ - MAV_COMP_ID_UDP_BRIDGE=240, /* | */ - MAV_COMP_ID_UART_BRIDGE=241, /* | */ - MAV_COMP_ID_SYSTEM_CONTROL=250, /* | */ - MAV_COMPONENT_ENUM_END=251, /* | */ - }; - - public enum MAV_FRAME - { - MAV_FRAME_GLOBAL=0, /* Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL) | */ - MAV_FRAME_LOCAL_NED=1, /* Local coordinate frame, Z-up (x: north, y: east, z: down). | */ - MAV_FRAME_MISSION=2, /* NOT a coordinate frame, indicates a mission command. | */ - MAV_FRAME_GLOBAL_RELATIVE_ALT=3, /* Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location. | */ - MAV_FRAME_LOCAL_ENU=4, /* Local coordinate frame, Z-down (x: east, y: north, z: up) | */ - MAV_FRAME_ENUM_END=5, /* | */ - }; - - public enum MAV_DATA_STREAM - { - MAV_DATA_STREAM_ALL=0, /* Enable all data streams | */ - MAV_DATA_STREAM_RAW_SENSORS=1, /* Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. | */ - MAV_DATA_STREAM_EXTENDED_STATUS=2, /* Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS | */ - MAV_DATA_STREAM_RC_CHANNELS=3, /* Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW | */ - MAV_DATA_STREAM_RAW_CONTROLLER=4, /* Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT. | */ - MAV_DATA_STREAM_POSITION=6, /* Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. | */ - MAV_DATA_STREAM_EXTRA1=10, /* Dependent on the autopilot | */ - MAV_DATA_STREAM_EXTRA2=11, /* Dependent on the autopilot | */ - MAV_DATA_STREAM_EXTRA3=12, /* Dependent on the autopilot | */ - MAV_DATA_STREAM_ENUM_END=13, /* | */ - }; - - public enum MAV_ROI - { - MAV_ROI_NONE=0, /* No region of interest. | */ - MAV_ROI_WPNEXT=1, /* Point toward next MISSION. | */ - MAV_ROI_WPINDEX=2, /* Point toward given MISSION. | */ - MAV_ROI_LOCATION=3, /* Point toward fixed location. | */ - MAV_ROI_TARGET=4, /* Point toward of given id. | */ - MAV_ROI_ENUM_END=5, /* | */ - }; - - public enum ACK - { - ACK_OK=1, /* Command / mission item is ok. | */ - ACK_ERR_FAIL=2, /* Generic error message if none of the other reasons fails or if no detailed error reporting is implemented. | */ - ACK_ERR_ACCESS_DENIED=3, /* The system is refusing to accept this command from this source / communication partner. | */ - ACK_ERR_NOT_SUPPORTED=4, /* Command or mission item is not supported, other commands would be accepted. | */ - ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED=5, /* The coordinate frame of this command / mission item is not supported. | */ - ACK_ERR_COORDINATES_OUT_OF_RANGE=6, /* The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible. | */ - ACK_ERR_X_LAT_OUT_OF_RANGE=7, /* The X or latitude value is out of range. | */ - ACK_ERR_Y_LON_OUT_OF_RANGE=8, /* The Y or longitude value is out of range. | */ - ACK_ERR_Z_ALT_OUT_OF_RANGE=9, /* The Z or altitude value is out of range. | */ - ACK_ENUM_END=10, /* | */ - }; - - public enum MAV_VAR - { - MAV_VAR_FLOAT=0, /* 32 bit float | */ - MAV_VAR_UINT8=1, /* 8 bit unsigned integer | */ - MAV_VAR_INT8=2, /* 8 bit signed integer | */ - MAV_VAR_UINT16=3, /* 16 bit unsigned integer | */ - MAV_VAR_INT16=4, /* 16 bit signed integer | */ - MAV_VAR_UINT32=5, /* 32 bit unsigned integer | */ - MAV_VAR_INT32=6, /* 32 bit signed integer | */ - MAV_VAR_ENUM_END=7, /* | */ - }; - - public enum MAV_RESULT - { - MAV_RESULT_ACCEPTED=0, /* Command ACCEPTED and EXECUTED | */ - MAV_RESULT_TEMPORARILY_REJECTED=1, /* Command TEMPORARY REJECTED/DENIED | */ - MAV_RESULT_DENIED=2, /* Command PERMANENTLY DENIED | */ - MAV_RESULT_UNSUPPORTED=3, /* Command UNKNOWN/UNSUPPORTED | */ - MAV_RESULT_FAILED=4, /* Command executed, but failed | */ - MAV_RESULT_ENUM_END=5, /* | */ - }; - - public enum MAV_MISSION_RESULT - { - MAV_MISSION_ACCEPTED=0, /* mission accepted OK | */ - MAV_MISSION_ERROR=1, /* generic error / not accepting mission commands at all right now | */ - MAV_MISSION_UNSUPPORTED_FRAME=2, /* coordinate frame is not supported | */ - MAV_MISSION_UNSUPPORTED=3, /* command is not supported | */ - MAV_MISSION_NO_SPACE=4, /* mission item exceeds storage space | */ - MAV_MISSION_INVALID=5, /* one of the parameters has an invalid value | */ - MAV_MISSION_INVALID_PARAM1=6, /* param1 has an invalid value | */ - MAV_MISSION_INVALID_PARAM2=7, /* param2 has an invalid value | */ - MAV_MISSION_INVALID_PARAM3=8, /* param3 has an invalid value | */ - MAV_MISSION_INVALID_PARAM4=9, /* param4 has an invalid value | */ - MAV_MISSION_INVALID_PARAM5_X=10, /* x/param5 has an invalid value | */ - MAV_MISSION_INVALID_PARAM6_Y=11, /* y/param6 has an invalid value | */ - MAV_MISSION_INVALID_PARAM7=12, /* param7 has an invalid value | */ - MAV_MISSION_INVALID_SEQUENCE=13, /* received waypoint out of sequence | */ - MAV_MISSION_DENIED=14, /* not accepting any mission commands from this communication partner | */ - MAV_MISSION_RESULT_ENUM_END=15, /* | */ - }; - - public const byte MAVLINK_MSG_ID_ATTITUDE = 30; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_attitude_t - { - public uint time_boot_ms; /// Timestamp (milliseconds since system boot) - public float roll; /// Roll angle (rad) - public float pitch; /// Pitch angle (rad) - public float yaw; /// Yaw angle (rad) - public float rollspeed; /// Roll angular speed (rad/s) - public float pitchspeed; /// Pitch angular speed (rad/s) - public float yawspeed; /// Yaw angular speed (rad/s) - }; - - public const byte MAVLINK_MSG_ID_ATTITUDE_LEN = 28; - public const byte MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_attitude_quaternion_t - { - public uint time_boot_ms; /// Timestamp (milliseconds since system boot) - public float q1; /// Quaternion component 1 - public float q2; /// Quaternion component 2 - public float q3; /// Quaternion component 3 - public float q4; /// Quaternion component 4 - public float rollspeed; /// Roll angular speed (rad/s) - public float pitchspeed; /// Pitch angular speed (rad/s) - public float yawspeed; /// Yaw angular speed (rad/s) - }; - - public const byte MAVLINK_MSG_ID_ATTITUDE_QUATERNION_LEN = 32; - public const byte MAVLINK_MSG_ID_AUTH_KEY = 7; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_auth_key_t - { - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=32)] - public byte[] key; /// key - }; - - public const byte MAVLINK_MSG_ID_AUTH_KEY_LEN = 32; - public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_change_operator_control_t - { - public byte target_system; /// System the GCS requests control for - public byte control_request; /// 0: request control of this MAV, 1: Release control of this MAV - public byte version; /// 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=25)] - public byte[] passkey; /// Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" - }; - - public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN = 28; - public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_change_operator_control_ack_t - { - public byte gcs_system_id; /// ID of the GCS this message - public byte control_request; /// 0: request control of this MAV, 1: Release control of this MAV - public byte ack; /// 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control - }; - - public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN = 3; - public const byte MAVLINK_MSG_ID_COMMAND_ACK = 77; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_command_ack_t - { - public ushort command; /// Command ID, as defined by MAV_CMD enum. - public byte result; /// See MAV_RESULT enum - }; - - public const byte MAVLINK_MSG_ID_COMMAND_ACK_LEN = 3; - public const byte MAVLINK_MSG_ID_COMMAND_LONG = 76; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_command_long_t - { - public float param1; /// Parameter 1, as defined by MAV_CMD enum. - public float param2; /// Parameter 2, as defined by MAV_CMD enum. - public float param3; /// Parameter 3, as defined by MAV_CMD enum. - public float param4; /// Parameter 4, as defined by MAV_CMD enum. - public float param5; /// Parameter 5, as defined by MAV_CMD enum. - public float param6; /// Parameter 6, as defined by MAV_CMD enum. - public float param7; /// Parameter 7, as defined by MAV_CMD enum. - public ushort command; /// Command ID, as defined by MAV_CMD enum. - public byte target_system; /// System which should execute the command - public byte target_component; /// Component which should execute the command, 0 for all components - public byte confirmation; /// 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) - }; - - public const byte MAVLINK_MSG_ID_COMMAND_LONG_LEN = 33; - public const byte MAVLINK_MSG_ID_DATA_STREAM = 67; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_data_stream_t - { - public ushort message_rate; /// The requested interval between two messages of this type - public byte stream_id; /// The ID of the requested data stream - public byte on_off; /// 1 stream is enabled, 0 stream is stopped. - }; - - public const byte MAVLINK_MSG_ID_DATA_STREAM_LEN = 4; - public const byte MAVLINK_MSG_ID_DEBUG = 254; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_debug_t - { - public uint time_boot_ms; /// Timestamp (milliseconds since system boot) - public float value; /// DEBUG value - public byte ind; /// index of debug variable - }; - - public const byte MAVLINK_MSG_ID_DEBUG_LEN = 9; - public const byte MAVLINK_MSG_ID_DEBUG_VECT = 250; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_debug_vect_t - { - public ulong time_usec; /// Timestamp - public float x; /// x - public float y; /// y - public float z; /// z - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=10)] - public byte[] name; /// Name - }; - - public const byte MAVLINK_MSG_ID_DEBUG_VECT_LEN = 30; - public const byte MAVLINK_MSG_ID_EXTENDED_MESSAGE = 255; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_extended_message_t - { - public byte target_system; /// System which should execute the command - public byte target_component; /// Component which should execute the command, 0 for all components - public byte protocol_flags; /// Retransmission / ACK flags - }; - - public const byte MAVLINK_MSG_ID_EXTENDED_MESSAGE_LEN = 3; - public const byte MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_global_position_int_t - { - public uint time_boot_ms; /// Timestamp (milliseconds since system boot) - public int lat; /// Latitude, expressed as * 1E7 - public int lon; /// Longitude, expressed as * 1E7 - public int alt; /// Altitude in meters, expressed as * 1000 (millimeters), above MSL - public int relative_alt; /// Altitude above ground in meters, expressed as * 1000 (millimeters) - public short vx; /// Ground X Speed (Latitude), expressed as m/s * 100 - public short vy; /// Ground Y Speed (Longitude), expressed as m/s * 100 - public short vz; /// Ground Z Speed (Altitude), expressed as m/s * 100 - public ushort hdg; /// Compass heading in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 - }; - - public const byte MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN = 28; - public const byte MAVLINK_MSG_ID_GLOBAL_POSITION_SETPOINT_INT = 52; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_global_position_setpoint_int_t - { - public int latitude; /// WGS84 Latitude position in degrees * 1E7 - public int longitude; /// WGS84 Longitude position in degrees * 1E7 - public int altitude; /// WGS84 Altitude in meters * 1000 (positive for up) - public short yaw; /// Desired yaw angle in degrees * 100 - public byte coordinate_frame; /// Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT - }; - - public const byte MAVLINK_MSG_ID_GLOBAL_POSITION_SETPOINT_INT_LEN = 15; - public const byte MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_global_vision_position_estimate_t - { - public ulong usec; /// Timestamp (milliseconds) - public float x; /// Global X position - public float y; /// Global Y position - public float z; /// Global Z position - public float roll; /// Roll angle in rad - public float pitch; /// Pitch angle in rad - public float yaw; /// Yaw angle in rad - }; - - public const byte MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE_LEN = 32; - public const byte MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_gps_global_origin_t - { - public int latitude; /// Latitude (WGS84), expressed as * 1E7 - public int longitude; /// Longitude (WGS84), expressed as * 1E7 - public int altitude; /// Altitude(WGS84), expressed as * 1000 - }; - - public const byte MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN_LEN = 12; - public const byte MAVLINK_MSG_ID_GPS_RAW_INT = 24; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_gps_raw_int_t - { - public ulong time_usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public int lat; /// Latitude in 1E7 degrees - public int lon; /// Longitude in 1E7 degrees - public int alt; /// Altitude in 1E3 meters (millimeters) above MSL - public ushort eph; /// GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 - public ushort epv; /// GPS VDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 - public ushort vel; /// GPS ground speed (m/s * 100). If unknown, set to: 65535 - public ushort cog; /// Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 - public byte fix_type; /// 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. - public byte satellites_visible; /// Number of satellites visible. If unknown, set to 255 - }; - - public const byte MAVLINK_MSG_ID_GPS_RAW_INT_LEN = 30; - public const byte MAVLINK_MSG_ID_GPS_STATUS = 25; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_gps_status_t - { - public byte satellites_visible; /// Number of satellites visible - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=20)] - public byte[] satellite_prn; /// Global satellite ID - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=20)] - public byte[] satellite_used; /// 0: Satellite not used, 1: used for localization - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=20)] - public byte[] satellite_elevation; /// Elevation (0: right on top of receiver, 90: on the horizon) of satellite - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=20)] - public byte[] satellite_azimuth; /// Direction of satellite, 0: 0 deg, 255: 360 deg. - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=20)] - public byte[] satellite_snr; /// Signal to noise ratio of satellite - }; - - public const byte MAVLINK_MSG_ID_GPS_STATUS_LEN = 101; - public const byte MAVLINK_MSG_ID_HEARTBEAT = 0; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_heartbeat_t - { - public uint custom_mode; /// Navigation mode bitfield, see MAV_AUTOPILOT_CUSTOM_MODE ENUM for some examples. This field is autopilot-specific. - public byte type; /// Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) - public byte autopilot; /// Autopilot type / class. defined in MAV_CLASS ENUM - public byte base_mode; /// System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h - public byte system_status; /// System status flag, see MAV_STATUS ENUM - public byte mavlink_version; /// MAVLink version - }; - - public const byte MAVLINK_MSG_ID_HEARTBEAT_LEN = 9; - public const byte MAVLINK_MSG_ID_HIL_CONTROLS = 91; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_hil_controls_t - { - public ulong time_usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public float roll_ailerons; /// Control output -1 .. 1 - public float pitch_elevator; /// Control output -1 .. 1 - public float yaw_rudder; /// Control output -1 .. 1 - public float throttle; /// Throttle 0 .. 1 - public float aux1; /// Aux 1, -1 .. 1 - public float aux2; /// Aux 2, -1 .. 1 - public float aux3; /// Aux 3, -1 .. 1 - public float aux4; /// Aux 4, -1 .. 1 - public byte mode; /// System mode (MAV_MODE) - public byte nav_mode; /// Navigation mode (MAV_NAV_MODE) - }; - - public const byte MAVLINK_MSG_ID_HIL_CONTROLS_LEN = 42; - public const byte MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_hil_rc_inputs_raw_t - { - public ulong time_usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public ushort chan1_raw; /// RC channel 1 value, in microseconds - public ushort chan2_raw; /// RC channel 2 value, in microseconds - public ushort chan3_raw; /// RC channel 3 value, in microseconds - public ushort chan4_raw; /// RC channel 4 value, in microseconds - public ushort chan5_raw; /// RC channel 5 value, in microseconds - public ushort chan6_raw; /// RC channel 6 value, in microseconds - public ushort chan7_raw; /// RC channel 7 value, in microseconds - public ushort chan8_raw; /// RC channel 8 value, in microseconds - public ushort chan9_raw; /// RC channel 9 value, in microseconds - public ushort chan10_raw; /// RC channel 10 value, in microseconds - public ushort chan11_raw; /// RC channel 11 value, in microseconds - public ushort chan12_raw; /// RC channel 12 value, in microseconds - public byte rssi; /// Receive signal strength indicator, 0: 0%, 255: 100% - }; - - public const byte MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW_LEN = 33; - public const byte MAVLINK_MSG_ID_HIL_STATE = 90; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_hil_state_t - { - public ulong time_usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public float roll; /// Roll angle (rad) - public float pitch; /// Pitch angle (rad) - public float yaw; /// Yaw angle (rad) - public float rollspeed; /// Roll angular speed (rad/s) - public float pitchspeed; /// Pitch angular speed (rad/s) - public float yawspeed; /// Yaw angular speed (rad/s) - public int lat; /// Latitude, expressed as * 1E7 - public int lon; /// Longitude, expressed as * 1E7 - public int alt; /// Altitude in meters, expressed as * 1000 (millimeters) - public short vx; /// Ground X Speed (Latitude), expressed as m/s * 100 - public short vy; /// Ground Y Speed (Longitude), expressed as m/s * 100 - public short vz; /// Ground Z Speed (Altitude), expressed as m/s * 100 - public short xacc; /// X acceleration (mg) - public short yacc; /// Y acceleration (mg) - public short zacc; /// Z acceleration (mg) - }; - - public const byte MAVLINK_MSG_ID_HIL_STATE_LEN = 56; - public const byte MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_local_position_ned_t - { - public uint time_boot_ms; /// Timestamp (milliseconds since system boot) - public float x; /// X Position - public float y; /// Y Position - public float z; /// Z Position - public float vx; /// X Speed - public float vy; /// Y Speed - public float vz; /// Z Speed - }; - - public const byte MAVLINK_MSG_ID_LOCAL_POSITION_NED_LEN = 28; - public const byte MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT = 51; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_local_position_setpoint_t - { - public float x; /// x position - public float y; /// y position - public float z; /// z position - public float yaw; /// Desired yaw angle - public byte coordinate_frame; /// Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU - }; - - public const byte MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_LEN = 17; - public const byte MAVLINK_MSG_ID_MANUAL_CONTROL = 69; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_manual_control_t - { - public float roll; /// roll - public float pitch; /// pitch - public float yaw; /// yaw - public float thrust; /// thrust - public byte target; /// The system to be controlled - public byte roll_manual; /// roll control enabled auto:0, manual:1 - public byte pitch_manual; /// pitch auto:0, manual:1 - public byte yaw_manual; /// yaw auto:0, manual:1 - public byte thrust_manual; /// thrust auto:0, manual:1 - }; - - public const byte MAVLINK_MSG_ID_MANUAL_CONTROL_LEN = 21; - public const byte MAVLINK_MSG_ID_MEMORY_VECT = 249; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_memory_vect_t - { - public ushort address; /// Starting address of the debug variables - public byte ver; /// Version code of the type variable. 0=unknown, type ignored and assumed public short. 1=as below - public byte type; /// Type code of the memory variables. for ver = 1: 0=16 x public short, 1=16 x public ushort, 2=16 x Q15, 3=16 x 1Q14 - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=32)] - public byte[] value; /// Memory contents at specified address - }; - - public const byte MAVLINK_MSG_ID_MEMORY_VECT_LEN = 36; - public const byte MAVLINK_MSG_ID_MISSION_ACK = 47; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mission_ack_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte type; /// See MAV_MISSION_RESULT enum - }; - - public const byte MAVLINK_MSG_ID_MISSION_ACK_LEN = 3; - public const byte MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mission_clear_all_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_MISSION_CLEAR_ALL_LEN = 2; - public const byte MAVLINK_MSG_ID_MISSION_COUNT = 44; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mission_count_t - { - public ushort count; /// Number of mission items in the sequence - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_MISSION_COUNT_LEN = 4; - public const byte MAVLINK_MSG_ID_MISSION_CURRENT = 42; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mission_current_t - { - public ushort seq; /// Sequence - }; - - public const byte MAVLINK_MSG_ID_MISSION_CURRENT_LEN = 2; - public const byte MAVLINK_MSG_ID_MISSION_ITEM = 39; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mission_item_t - { - public float param1; /// PARAM1 / For NAV command MISSIONs: Radius in which the MISSION is accepted as reached, in meters - public float param2; /// PARAM2 / For NAV command MISSIONs: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds - public float param3; /// PARAM3 / For LOITER command MISSIONs: Orbit to circle around the MISSION, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise. - public float param4; /// PARAM4 / For NAV and LOITER command MISSIONs: Yaw orientation in degrees, [0..360] 0 = NORTH - public float x; /// PARAM5 / local: x position, global: latitude - public float y; /// PARAM6 / y position: global: longitude - public float z; /// PARAM7 / z position: global: altitude - public ushort seq; /// Sequence - public ushort command; /// The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte frame; /// The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h - public byte current; /// false:0, true:1 - public byte autocontinue; /// autocontinue to next wp - }; - - public const byte MAVLINK_MSG_ID_MISSION_ITEM_LEN = 37; - public const byte MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mission_item_reached_t - { - public ushort seq; /// Sequence - }; - - public const byte MAVLINK_MSG_ID_MISSION_ITEM_REACHED_LEN = 2; - public const byte MAVLINK_MSG_ID_MISSION_REQUEST = 40; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mission_request_t - { - public ushort seq; /// Sequence - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_MISSION_REQUEST_LEN = 4; - public const byte MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mission_request_list_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_MISSION_REQUEST_LIST_LEN = 2; - public const byte MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mission_request_partial_list_t - { - public short start_index; /// Start index, 0 by default - public short end_index; /// End index, -1 by default (-1: send list to end). Else a valid index of the list - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST_LEN = 6; - public const byte MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mission_set_current_t - { - public ushort seq; /// Sequence - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_MISSION_SET_CURRENT_LEN = 4; - public const byte MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mission_write_partial_list_t - { - public short start_index; /// Start index, 0 by default and smaller / equal to the largest index of the current onboard list. - public short end_index; /// End index, equal or greater than start index. - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST_LEN = 6; - public const byte MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_named_value_float_t - { - public uint time_boot_ms; /// Timestamp (milliseconds since system boot) - public float value; /// Floating point value - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=10)] - public byte[] name; /// Name of the debug variable - }; - - public const byte MAVLINK_MSG_ID_NAMED_VALUE_FLOAT_LEN = 18; - public const byte MAVLINK_MSG_ID_NAMED_VALUE_INT = 252; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_named_value_int_t - { - public uint time_boot_ms; /// Timestamp (milliseconds since system boot) - public int value; /// Signed integer value - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=10)] - public byte[] name; /// Name of the debug variable - }; - - public const byte MAVLINK_MSG_ID_NAMED_VALUE_INT_LEN = 18; - public const byte MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_nav_controller_output_t - { - public float nav_roll; /// Current desired roll in degrees - public float nav_pitch; /// Current desired pitch in degrees - public float alt_error; /// Current altitude error in meters - public float aspd_error; /// Current airspeed error in meters/second - public float xtrack_error; /// Current crosstrack error on x-y plane in meters - public short nav_bearing; /// Current desired heading in degrees - public short target_bearing; /// Bearing to current MISSION/target in degrees - public ushort wp_dist; /// Distance to active MISSION in meters - }; - - public const byte MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT_LEN = 26; - public const byte MAVLINK_MSG_ID_OPTICAL_FLOW = 100; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_optical_flow_t - { - public ulong time_usec; /// Timestamp (UNIX) - public float ground_distance; /// Ground distance in meters - public short flow_x; /// Flow in pixels in x-sensor direction - public short flow_y; /// Flow in pixels in y-sensor direction - public byte sensor_id; /// Sensor ID - public byte quality; /// Optical flow quality / confidence. 0: bad, 255: maximum quality - }; - - public const byte MAVLINK_MSG_ID_OPTICAL_FLOW_LEN = 18; - public const byte MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_param_request_list_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_PARAM_REQUEST_LIST_LEN = 2; - public const byte MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_param_request_read_t - { - public short param_index; /// Parameter index. Send -1 to use the param ID field as identifier - public byte target_system; /// System ID - public byte target_component; /// Component ID - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=16)] - public byte[] param_id; /// Onboard parameter id - }; - - public const byte MAVLINK_MSG_ID_PARAM_REQUEST_READ_LEN = 20; - public const byte MAVLINK_MSG_ID_PARAM_SET = 23; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_param_set_t - { - public float param_value; /// Onboard parameter value - public byte target_system; /// System ID - public byte target_component; /// Component ID - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=16)] - public byte[] param_id; /// Onboard parameter id - public byte param_type; /// Onboard parameter type: see MAV_VAR enum - }; - - public const byte MAVLINK_MSG_ID_PARAM_SET_LEN = 23; - public const byte MAVLINK_MSG_ID_PARAM_VALUE = 22; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_param_value_t - { - public float param_value; /// Onboard parameter value - public ushort param_count; /// Total number of onboard parameters - public ushort param_index; /// Index of this onboard parameter - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=16)] - public byte[] param_id; /// Onboard parameter id - public byte param_type; /// Onboard parameter type: see MAV_VAR enum - }; - - public const byte MAVLINK_MSG_ID_PARAM_VALUE_LEN = 25; - public const byte MAVLINK_MSG_ID_PING = 4; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_ping_t - { - public ulong time_usec; /// Unix timestamp in microseconds - public uint seq; /// PING sequence - public byte target_system; /// 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system - public byte target_component; /// 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system - }; - - public const byte MAVLINK_MSG_ID_PING_LEN = 14; - public const byte MAVLINK_MSG_ID_RAW_IMU = 27; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_raw_imu_t - { - public ulong time_usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public short xacc; /// X acceleration (raw) - public short yacc; /// Y acceleration (raw) - public short zacc; /// Z acceleration (raw) - public short xgyro; /// Angular speed around X axis (raw) - public short ygyro; /// Angular speed around Y axis (raw) - public short zgyro; /// Angular speed around Z axis (raw) - public short xmag; /// X Magnetic field (raw) - public short ymag; /// Y Magnetic field (raw) - public short zmag; /// Z Magnetic field (raw) - }; - - public const byte MAVLINK_MSG_ID_RAW_IMU_LEN = 26; - public const byte MAVLINK_MSG_ID_RAW_PRESSURE = 28; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_raw_pressure_t - { - public ulong time_usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public short press_abs; /// Absolute pressure (raw) - public short press_diff1; /// Differential pressure 1 (raw) - public short press_diff2; /// Differential pressure 2 (raw) - public short temperature; /// Raw Temperature measurement (raw) - }; - - public const byte MAVLINK_MSG_ID_RAW_PRESSURE_LEN = 16; - public const byte MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_rc_channels_override_t - { - public ushort chan1_raw; /// RC channel 1 value, in microseconds - public ushort chan2_raw; /// RC channel 2 value, in microseconds - public ushort chan3_raw; /// RC channel 3 value, in microseconds - public ushort chan4_raw; /// RC channel 4 value, in microseconds - public ushort chan5_raw; /// RC channel 5 value, in microseconds - public ushort chan6_raw; /// RC channel 6 value, in microseconds - public ushort chan7_raw; /// RC channel 7 value, in microseconds - public ushort chan8_raw; /// RC channel 8 value, in microseconds - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE_LEN = 18; - public const byte MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_rc_channels_raw_t - { - public uint time_boot_ms; /// Timestamp (milliseconds since system boot) - public ushort chan1_raw; /// RC channel 1 value, in microseconds - public ushort chan2_raw; /// RC channel 2 value, in microseconds - public ushort chan3_raw; /// RC channel 3 value, in microseconds - public ushort chan4_raw; /// RC channel 4 value, in microseconds - public ushort chan5_raw; /// RC channel 5 value, in microseconds - public ushort chan6_raw; /// RC channel 6 value, in microseconds - public ushort chan7_raw; /// RC channel 7 value, in microseconds - public ushort chan8_raw; /// RC channel 8 value, in microseconds - public byte port; /// Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. - public byte rssi; /// Receive signal strength indicator, 0: 0%, 255: 100% - }; - - public const byte MAVLINK_MSG_ID_RC_CHANNELS_RAW_LEN = 22; - public const byte MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_rc_channels_scaled_t - { - public uint time_boot_ms; /// Timestamp (milliseconds since system boot) - public short chan1_scaled; /// RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan2_scaled; /// RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan3_scaled; /// RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan4_scaled; /// RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan5_scaled; /// RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan6_scaled; /// RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan7_scaled; /// RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan8_scaled; /// RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public byte port; /// Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. - public byte rssi; /// Receive signal strength indicator, 0: 0%, 255: 100% - }; - - public const byte MAVLINK_MSG_ID_RC_CHANNELS_SCALED_LEN = 22; - public const byte MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_request_data_stream_t - { - public ushort req_message_rate; /// The requested interval between two messages of this type - public byte target_system; /// The target requested to send the message stream. - public byte target_component; /// The target requested to send the message stream. - public byte req_stream_id; /// The ID of the requested data stream - public byte start_stop; /// 1 to start sending, 0 to stop sending. - }; - - public const byte MAVLINK_MSG_ID_REQUEST_DATA_STREAM_LEN = 6; - public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT = 59; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_roll_pitch_yaw_speed_thrust_setpoint_t - { - public uint time_boot_ms; /// Timestamp in milliseconds since system boot - public float roll_speed; /// Desired roll angular speed in rad/s - public float pitch_speed; /// Desired pitch angular speed in rad/s - public float yaw_speed; /// Desired yaw angular speed in rad/s - public float thrust; /// Collective thrust, normalized to 0 .. 1 - }; - - public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT_LEN = 20; - public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT = 58; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_roll_pitch_yaw_thrust_setpoint_t - { - public uint time_boot_ms; /// Timestamp in milliseconds since system boot - public float roll; /// Desired roll angle in radians - public float pitch; /// Desired pitch angle in radians - public float yaw; /// Desired yaw angle in radians - public float thrust; /// Collective thrust, normalized to 0 .. 1 - }; - - public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT_LEN = 20; - public const byte MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_safety_allowed_area_t - { - public float p1x; /// x position 1 / Latitude 1 - public float p1y; /// y position 1 / Longitude 1 - public float p1z; /// z position 1 / Altitude 1 - public float p2x; /// x position 2 / Latitude 2 - public float p2y; /// y position 2 / Longitude 2 - public float p2z; /// z position 2 / Altitude 2 - public byte frame; /// Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - }; - - public const byte MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA_LEN = 25; - public const byte MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_safety_set_allowed_area_t - { - public float p1x; /// x position 1 / Latitude 1 - public float p1y; /// y position 1 / Longitude 1 - public float p1z; /// z position 1 / Altitude 1 - public float p2x; /// x position 2 / Latitude 2 - public float p2y; /// y position 2 / Longitude 2 - public float p2z; /// z position 2 / Altitude 2 - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte frame; /// Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - }; - - public const byte MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA_LEN = 27; - public const byte MAVLINK_MSG_ID_SCALED_IMU = 26; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_scaled_imu_t - { - public uint time_boot_ms; /// Timestamp (milliseconds since system boot) - public short xacc; /// X acceleration (mg) - public short yacc; /// Y acceleration (mg) - public short zacc; /// Z acceleration (mg) - public short xgyro; /// Angular speed around X axis (millirad /sec) - public short ygyro; /// Angular speed around Y axis (millirad /sec) - public short zgyro; /// Angular speed around Z axis (millirad /sec) - public short xmag; /// X Magnetic field (milli tesla) - public short ymag; /// Y Magnetic field (milli tesla) - public short zmag; /// Z Magnetic field (milli tesla) - }; - - public const byte MAVLINK_MSG_ID_SCALED_IMU_LEN = 22; - public const byte MAVLINK_MSG_ID_SCALED_PRESSURE = 29; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_scaled_pressure_t - { - public uint time_boot_ms; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public float press_abs; /// Absolute pressure (hectopascal) - public float press_diff; /// Differential pressure 1 (hectopascal) - public short temperature; /// Temperature measurement (0.01 degrees celsius) - }; - - public const byte MAVLINK_MSG_ID_SCALED_PRESSURE_LEN = 14; - public const byte MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_servo_output_raw_t - { - public uint time_usec; /// Timestamp (since UNIX epoch or microseconds since system boot) - public ushort servo1_raw; /// Servo output 1 value, in microseconds - public ushort servo2_raw; /// Servo output 2 value, in microseconds - public ushort servo3_raw; /// Servo output 3 value, in microseconds - public ushort servo4_raw; /// Servo output 4 value, in microseconds - public ushort servo5_raw; /// Servo output 5 value, in microseconds - public ushort servo6_raw; /// Servo output 6 value, in microseconds - public ushort servo7_raw; /// Servo output 7 value, in microseconds - public ushort servo8_raw; /// Servo output 8 value, in microseconds - public byte port; /// Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. - }; - - public const byte MAVLINK_MSG_ID_SERVO_OUTPUT_RAW_LEN = 21; - public const byte MAVLINK_MSG_ID_SET_GLOBAL_POSITION_SETPOINT_INT = 53; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_global_position_setpoint_int_t - { - public int latitude; /// WGS84 Latitude position in degrees * 1E7 - public int longitude; /// WGS84 Longitude position in degrees * 1E7 - public int altitude; /// WGS84 Altitude in meters * 1000 (positive for up) - public short yaw; /// Desired yaw angle in degrees * 100 - public byte coordinate_frame; /// Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT - }; - - public const byte MAVLINK_MSG_ID_SET_GLOBAL_POSITION_SETPOINT_INT_LEN = 15; - public const byte MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_gps_global_origin_t - { - public int latitude; /// global position * 1E7 - public int longitude; /// global position * 1E7 - public int altitude; /// global position * 1000 - public byte target_system; /// System ID - }; - - public const byte MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN_LEN = 13; - public const byte MAVLINK_MSG_ID_SET_LOCAL_POSITION_SETPOINT = 50; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_local_position_setpoint_t - { - public float x; /// x position - public float y; /// y position - public float z; /// z position - public float yaw; /// Desired yaw angle - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte coordinate_frame; /// Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU - }; - - public const byte MAVLINK_MSG_ID_SET_LOCAL_POSITION_SETPOINT_LEN = 19; - public const byte MAVLINK_MSG_ID_SET_MODE = 11; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_mode_t - { - public uint custom_mode; /// The new autopilot-specific mode. This field can be ignored by an autopilot. - public byte target_system; /// The system setting the mode - public byte base_mode; /// The new base mode - }; - - public const byte MAVLINK_MSG_ID_SET_MODE_LEN = 6; - public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST = 57; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_roll_pitch_yaw_speed_thrust_t - { - public float roll_speed; /// Desired roll angular speed in rad/s - public float pitch_speed; /// Desired pitch angular speed in rad/s - public float yaw_speed; /// Desired yaw angular speed in rad/s - public float thrust; /// Collective thrust, normalized to 0 .. 1 - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST_LEN = 18; - public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST = 56; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_roll_pitch_yaw_thrust_t - { - public float roll; /// Desired roll angle in radians - public float pitch; /// Desired pitch angle in radians - public float yaw; /// Desired yaw angle in radians - public float thrust; /// Collective thrust, normalized to 0 .. 1 - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST_LEN = 18; - public const byte MAVLINK_MSG_ID_STATE_CORRECTION = 64; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_state_correction_t - { - public float xErr; /// x position error - public float yErr; /// y position error - public float zErr; /// z position error - public float rollErr; /// roll error (radians) - public float pitchErr; /// pitch error (radians) - public float yawErr; /// yaw error (radians) - public float vxErr; /// x velocity - public float vyErr; /// y velocity - public float vzErr; /// z velocity - }; - - public const byte MAVLINK_MSG_ID_STATE_CORRECTION_LEN = 36; - public const byte MAVLINK_MSG_ID_STATUSTEXT = 253; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_statustext_t - { - public byte severity; /// Severity of status, 0 = info message, 255 = critical fault - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=50)] - public byte[] text; /// Status text message, without null termination character - }; - - public const byte MAVLINK_MSG_ID_STATUSTEXT_LEN = 51; - public const byte MAVLINK_MSG_ID_SYSTEM_TIME = 2; - public const byte MAVLINK_MSG_ID_SYS_STATUS = 1; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_sys_status_t - { - public uint onboard_control_sensors_present; /// Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control - public uint onboard_control_sensors_enabled; /// Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control - public uint onboard_control_sensors_health; /// Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control - public ushort load; /// Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 - public ushort voltage_battery; /// Battery voltage, in millivolts (1 = 1 millivolt) - public short current_battery; /// Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current - public ushort drop_rate_comm; /// Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) - public ushort errors_comm; /// Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) - public ushort errors_count1; /// Autopilot-specific errors - public ushort errors_count2; /// Autopilot-specific errors - public ushort errors_count3; /// Autopilot-specific errors - public ushort errors_count4; /// Autopilot-specific errors - public byte battery_remaining; /// Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery - }; - - public const byte MAVLINK_MSG_ID_SYS_STATUS_LEN = 31; - public const byte MAVLINK_MSG_ID_VFR_HUD = 74; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_vfr_hud_t - { - public float airspeed; /// Current airspeed in m/s - public float groundspeed; /// Current ground speed in m/s - public float alt; /// Current altitude (MSL), in meters - public float climb; /// Current climb rate in meters/second - public short heading; /// Current heading in degrees, in compass units (0..360, 0=north) - public ushort throttle; /// Current throttle setting in integer percent, 0 to 100 - }; - - public const byte MAVLINK_MSG_ID_VFR_HUD_LEN = 20; - public const byte MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_vicon_position_estimate_t - { - public ulong usec; /// Timestamp (milliseconds) - public float x; /// Global X position - public float y; /// Global Y position - public float z; /// Global Z position - public float roll; /// Roll angle in rad - public float pitch; /// Pitch angle in rad - public float yaw; /// Yaw angle in rad - }; - - public const byte MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE_LEN = 32; - public const byte MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_vision_position_estimate_t - { - public ulong usec; /// Timestamp (milliseconds) - public float x; /// Global X position - public float y; /// Global Y position - public float z; /// Global Z position - public float roll; /// Roll angle in rad - public float pitch; /// Pitch angle in rad - public float yaw; /// Yaw angle in rad - }; - - public const byte MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE_LEN = 32; - public const byte MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_vision_speed_estimate_t - { - public ulong usec; /// Timestamp (milliseconds) - public float x; /// Global X speed - public float y; /// Global Y speed - public float z; /// Global Z speed - }; - - public const byte MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE_LEN = 20; - public enum MAV_ACTION - { - MAV_ACTION_HOLD = 0, - MAV_ACTION_MOTORS_START = 1, - MAV_ACTION_LAUNCH = 2, - MAV_ACTION_RETURN = 3, - MAV_ACTION_EMCY_LAND = 4, - MAV_ACTION_EMCY_KILL = 5, - MAV_ACTION_CONFIRM_KILL = 6, - MAV_ACTION_CONTINUE = 7, - MAV_ACTION_MOTORS_STOP = 8, - MAV_ACTION_HALT = 9, - MAV_ACTION_SHUTDOWN = 10, - MAV_ACTION_REBOOT = 11, - MAV_ACTION_SET_MANUAL = 12, - MAV_ACTION_SET_AUTO = 13, - MAV_ACTION_STORAGE_READ = 14, - MAV_ACTION_STORAGE_WRITE = 15, - MAV_ACTION_CALIBRATE_RC = 16, - MAV_ACTION_CALIBRATE_GYRO = 17, - MAV_ACTION_CALIBRATE_MAG = 18, - MAV_ACTION_CALIBRATE_ACC = 19, - MAV_ACTION_CALIBRATE_PRESSURE = 20, - MAV_ACTION_REC_START = 21, - MAV_ACTION_REC_PAUSE = 22, - MAV_ACTION_REC_STOP = 23, - MAV_ACTION_TAKEOFF = 24, - MAV_ACTION_NAVIGATE = 25, - MAV_ACTION_LAND = 26, - MAV_ACTION_LOITER = 27, - MAV_ACTION_SET_ORIGIN = 28, - MAV_ACTION_RELAY_ON = 29, - MAV_ACTION_RELAY_OFF = 30, - MAV_ACTION_GET_IMAGE = 31, - MAV_ACTION_VIDEO_START = 32, - MAV_ACTION_VIDEO_STOP = 33, - MAV_ACTION_RESET_MAP = 34, - MAV_ACTION_RESET_PLAN = 35, - MAV_ACTION_DELAY_BEFORE_COMMAND = 36, - MAV_ACTION_ASCEND_AT_RATE = 37, - MAV_ACTION_CHANGE_MODE = 38, - MAV_ACTION_LOITER_MAX_TURNS = 39, - MAV_ACTION_LOITER_MAX_TIME = 40, - MAV_ACTION_START_HILSIM = 41, - MAV_ACTION_STOP_HILSIM = 42, - MAV_ACTION_NB /// Number of MAV actions - }; - -Type[] mavstructs = new Type[] {typeof( __mavlink_heartbeat_t) ,typeof( __mavlink_sys_status_t) ,null ,null ,typeof( __mavlink_ping_t) ,typeof( __mavlink_change_operator_control_t) ,typeof( __mavlink_change_operator_control_ack_t) ,typeof( __mavlink_auth_key_t) ,null ,null ,null ,typeof( __mavlink_set_mode_t) ,null ,null ,null ,null ,null ,null ,null ,null ,typeof( __mavlink_param_request_read_t) ,typeof( __mavlink_param_request_list_t) ,typeof( __mavlink_param_value_t) ,typeof( __mavlink_param_set_t) ,typeof( __mavlink_gps_raw_int_t) ,typeof( __mavlink_gps_status_t) ,typeof( __mavlink_scaled_imu_t) ,typeof( __mavlink_raw_imu_t) ,typeof( __mavlink_raw_pressure_t) ,typeof( __mavlink_scaled_pressure_t) ,typeof( __mavlink_attitude_t) ,typeof( __mavlink_attitude_quaternion_t) ,typeof( __mavlink_local_position_ned_t) ,typeof( __mavlink_global_position_int_t) ,typeof( __mavlink_rc_channels_scaled_t) ,typeof( __mavlink_rc_channels_raw_t) ,typeof( __mavlink_servo_output_raw_t) ,typeof( __mavlink_mission_request_partial_list_t) ,typeof( __mavlink_mission_write_partial_list_t) ,typeof( __mavlink_mission_item_t) ,typeof( __mavlink_mission_request_t) ,typeof( __mavlink_mission_set_current_t) ,typeof( __mavlink_mission_current_t) ,typeof( __mavlink_mission_request_list_t) ,typeof( __mavlink_mission_count_t) ,typeof( __mavlink_mission_clear_all_t) ,typeof( __mavlink_mission_item_reached_t) ,typeof( __mavlink_mission_ack_t) ,typeof( __mavlink_set_gps_global_origin_t) ,typeof( __mavlink_gps_global_origin_t) ,typeof( __mavlink_set_local_position_setpoint_t) ,typeof( __mavlink_local_position_setpoint_t) ,typeof( __mavlink_global_position_setpoint_int_t) ,typeof( __mavlink_set_global_position_setpoint_int_t) ,typeof( __mavlink_safety_set_allowed_area_t) ,typeof( __mavlink_safety_allowed_area_t) ,typeof( __mavlink_set_roll_pitch_yaw_thrust_t) ,typeof( __mavlink_set_roll_pitch_yaw_speed_thrust_t) ,typeof( __mavlink_roll_pitch_yaw_thrust_setpoint_t) ,typeof( __mavlink_roll_pitch_yaw_speed_thrust_setpoint_t) ,null ,null ,typeof( __mavlink_nav_controller_output_t) ,null ,typeof( __mavlink_state_correction_t) ,null ,typeof( __mavlink_request_data_stream_t) ,typeof( __mavlink_data_stream_t) ,null ,typeof( __mavlink_manual_control_t) ,typeof( __mavlink_rc_channels_override_t) ,null ,null ,null ,typeof( __mavlink_vfr_hud_t) ,null ,typeof( __mavlink_command_long_t) ,typeof( __mavlink_command_ack_t) ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,typeof( __mavlink_hil_state_t) ,typeof( __mavlink_hil_controls_t) ,typeof( __mavlink_hil_rc_inputs_raw_t) ,null ,null ,null ,null ,null ,null ,null ,typeof( __mavlink_optical_flow_t) ,typeof( __mavlink_global_vision_position_estimate_t) ,typeof( __mavlink_vision_position_estimate_t) ,typeof( __mavlink_vision_speed_estimate_t) ,typeof( __mavlink_vicon_position_estimate_t) ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,typeof( __mavlink_sensor_offsets_t) ,typeof( __mavlink_set_mag_offsets_t) ,typeof( __mavlink_meminfo_t) ,typeof( __mavlink_ap_adc_t) ,typeof( __mavlink_digicam_configure_t) ,typeof( __mavlink_digicam_control_t) ,typeof( __mavlink_mount_configure_t) ,typeof( __mavlink_mount_control_t) ,typeof( __mavlink_mount_status_t) ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,typeof( __mavlink_memory_vect_t) ,typeof( __mavlink_debug_vect_t) ,typeof( __mavlink_named_value_float_t) ,typeof( __mavlink_named_value_int_t) ,typeof( __mavlink_statustext_t) ,typeof( __mavlink_debug_t) ,typeof( __mavlink_extended_message_t) ,null ,}; - - } - #endif -} + public const byte MAVLINK_MSG_ID_RADIO = 166; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=9)] + public struct mavlink_radio_t + { + /// <summary> receive errors </summary> + public UInt16 rxerrors; + /// <summary> serial errors </summary> + public UInt16 serrors; + /// <summary> count of error corrected packets </summary> + public UInt16 fixed; + /// <summary> local signal strength </summary> + public byte rssi; + /// <summary> remote signal strength </summary> + public byte remrssi; + /// <summary> how full the tx buffer is as a percentage </summary> + public byte txbuf; + + }; + + + public const byte MAVLINK_MSG_ID_HEARTBEAT = 0; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=9)] + public struct mavlink_heartbeat_t + { + /// <summary> Navigation mode bitfield, see MAV_AUTOPILOT_CUSTOM_MODE ENUM for some examples. This field is autopilot-specific. </summary> + public UInt32 custom_mode; + /// <summary> Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) </summary> + public byte type; + /// <summary> Autopilot type / class. defined in MAV_CLASS ENUM </summary> + public byte autopilot; + /// <summary> System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h </summary> + public byte base_mode; + /// <summary> System status flag, see MAV_STATUS ENUM </summary> + public byte system_status; + /// <summary> MAVLink version </summary> + public byte mavlink_version; + + }; + + + public const byte MAVLINK_MSG_ID_SYS_STATUS = 1; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=31)] + public struct mavlink_sys_status_t + { + /// <summary> Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control </summary> + public UInt32 onboard_control_sensors_present; + /// <summary> Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control </summary> + public UInt32 onboard_control_sensors_enabled; + /// <summary> Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices: 0: 3D gyro, 1: 3D acc, 2: 3D mag, 3: absolute pressure, 4: differential pressure, 5: GPS, 6: optical flow, 7: computer vision position, 8: laser based position, 9: external ground-truth (Vicon or Leica). Controllers: 10: 3D angular rate control 11: attitude stabilization, 12: yaw position, 13: z/altitude control, 14: x/y position control, 15: motor outputs / control </summary> + public UInt32 onboard_control_sensors_health; + /// <summary> Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 </summary> + public UInt16 load; + /// <summary> Battery voltage, in millivolts (1 = 1 millivolt) </summary> + public UInt16 voltage_battery; + /// <summary> Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current </summary> + public Int16 current_battery; + /// <summary> Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) </summary> + public UInt16 drop_rate_comm; + /// <summary> Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) </summary> + public UInt16 errors_comm; + /// <summary> Autopilot-specific errors </summary> + public UInt16 errors_count1; + /// <summary> Autopilot-specific errors </summary> + public UInt16 errors_count2; + /// <summary> Autopilot-specific errors </summary> + public UInt16 errors_count3; + /// <summary> Autopilot-specific errors </summary> + public UInt16 errors_count4; + /// <summary> Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery </summary> + public byte battery_remaining; + + }; + + + public const byte MAVLINK_MSG_ID_SYSTEM_TIME = 2; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=12)] + public struct mavlink_system_time_t + { + /// <summary> Timestamp of the master clock in microseconds since UNIX epoch. </summary> + public UInt64 time_unix_usec; + /// <summary> Timestamp of the component clock since boot time in milliseconds. </summary> + public UInt32 time_boot_ms; + + }; + + + public const byte MAVLINK_MSG_ID_PING = 4; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=14)] + public struct mavlink_ping_t + { + /// <summary> Unix timestamp in microseconds </summary> + public UInt64 time_usec; + /// <summary> PING sequence </summary> + public UInt32 seq; + /// <summary> 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system </summary> + public byte target_system; + /// <summary> 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=28)] + public struct mavlink_change_operator_control_t + { + /// <summary> System the GCS requests control for </summary> + public byte target_system; + /// <summary> 0: request control of this MAV, 1: Release control of this MAV </summary> + public byte control_request; + /// <summary> 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. </summary> + public byte version; + /// <summary> Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=25)] + public string passkey; + + }; + + + public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_change_operator_control_ack_t + { + /// <summary> ID of the GCS this message </summary> + public byte gcs_system_id; + /// <summary> 0: request control of this MAV, 1: Release control of this MAV </summary> + public byte control_request; + /// <summary> 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control </summary> + public byte ack; + + }; + + + public const byte MAVLINK_MSG_ID_AUTH_KEY = 7; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=32)] + public struct mavlink_auth_key_t + { + /// <summary> key </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=32)] + public string key; + + }; + + + public const byte MAVLINK_MSG_ID_SET_MODE = 11; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=6)] + public struct mavlink_set_mode_t + { + /// <summary> The new autopilot-specific mode. This field can be ignored by an autopilot. </summary> + public UInt32 custom_mode; + /// <summary> The system setting the mode </summary> + public byte target_system; + /// <summary> The new base mode </summary> + public byte base_mode; + + }; + + + public const byte MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=20)] + public struct mavlink_param_request_read_t + { + /// <summary> Parameter index. Send -1 to use the param ID field as identifier </summary> + public Int16 param_index; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Onboard parameter id </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=16)] + public string param_id; + + }; + + + public const byte MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_param_request_list_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_PARAM_VALUE = 22; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=25)] + public struct mavlink_param_value_t + { + /// <summary> Onboard parameter value </summary> + public Single param_value; + /// <summary> Total number of onboard parameters </summary> + public UInt16 param_count; + /// <summary> Index of this onboard parameter </summary> + public UInt16 param_index; + /// <summary> Onboard parameter id </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=16)] + public string param_id; + /// <summary> Onboard parameter type: see MAV_VAR enum </summary> + public byte param_type; + + }; + + + public const byte MAVLINK_MSG_ID_PARAM_SET = 23; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=23)] + public struct mavlink_param_set_t + { + /// <summary> Onboard parameter value </summary> + public Single param_value; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Onboard parameter id </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=16)] + public string param_id; + /// <summary> Onboard parameter type: see MAV_VAR enum </summary> + public byte param_type; + + }; + + + public const byte MAVLINK_MSG_ID_GPS_RAW_INT = 24; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=30)] + public struct mavlink_gps_raw_int_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 time_usec; + /// <summary> Latitude in 1E7 degrees </summary> + public Int32 lat; + /// <summary> Longitude in 1E7 degrees </summary> + public Int32 lon; + /// <summary> Altitude in 1E3 meters (millimeters) above MSL </summary> + public Int32 alt; + /// <summary> GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 </summary> + public UInt16 eph; + /// <summary> GPS VDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 </summary> + public UInt16 epv; + /// <summary> GPS ground speed (m/s * 100). If unknown, set to: 65535 </summary> + public UInt16 vel; + /// <summary> Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 </summary> + public UInt16 cog; + /// <summary> 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. </summary> + public byte fix_type; + /// <summary> Number of satellites visible. If unknown, set to 255 </summary> + public byte satellites_visible; + + }; + + + public const byte MAVLINK_MSG_ID_GPS_STATUS = 25; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=101)] + public struct mavlink_gps_status_t + { + /// <summary> Number of satellites visible </summary> + public byte satellites_visible; + /// <summary> Global satellite ID </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_prn; + /// <summary> 0: Satellite not used, 1: used for localization </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_used; + /// <summary> Elevation (0: right on top of receiver, 90: on the horizon) of satellite </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_elevation; + /// <summary> Direction of satellite, 0: 0 deg, 255: 360 deg. </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_azimuth; + /// <summary> Signal to noise ratio of satellite </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_snr; + + }; + + + public const byte MAVLINK_MSG_ID_SCALED_IMU = 26; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=22)] + public struct mavlink_scaled_imu_t + { + /// <summary> Timestamp (milliseconds since system boot) </summary> + public UInt32 time_boot_ms; + /// <summary> X acceleration (mg) </summary> + public Int16 xacc; + /// <summary> Y acceleration (mg) </summary> + public Int16 yacc; + /// <summary> Z acceleration (mg) </summary> + public Int16 zacc; + /// <summary> Angular speed around X axis (millirad /sec) </summary> + public Int16 xgyro; + /// <summary> Angular speed around Y axis (millirad /sec) </summary> + public Int16 ygyro; + /// <summary> Angular speed around Z axis (millirad /sec) </summary> + public Int16 zgyro; + /// <summary> X Magnetic field (milli tesla) </summary> + public Int16 xmag; + /// <summary> Y Magnetic field (milli tesla) </summary> + public Int16 ymag; + /// <summary> Z Magnetic field (milli tesla) </summary> + public Int16 zmag; + + }; + + + public const byte MAVLINK_MSG_ID_RAW_IMU = 27; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=26)] + public struct mavlink_raw_imu_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 time_usec; + /// <summary> X acceleration (raw) </summary> + public Int16 xacc; + /// <summary> Y acceleration (raw) </summary> + public Int16 yacc; + /// <summary> Z acceleration (raw) </summary> + public Int16 zacc; + /// <summary> Angular speed around X axis (raw) </summary> + public Int16 xgyro; + /// <summary> Angular speed around Y axis (raw) </summary> + public Int16 ygyro; + /// <summary> Angular speed around Z axis (raw) </summary> + public Int16 zgyro; + /// <summary> X Magnetic field (raw) </summary> + public Int16 xmag; + /// <summary> Y Magnetic field (raw) </summary> + public Int16 ymag; + /// <summary> Z Magnetic field (raw) </summary> + public Int16 zmag; + + }; + + + public const byte MAVLINK_MSG_ID_RAW_PRESSURE = 28; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=16)] + public struct mavlink_raw_pressure_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 time_usec; + /// <summary> Absolute pressure (raw) </summary> + public Int16 press_abs; + /// <summary> Differential pressure 1 (raw) </summary> + public Int16 press_diff1; + /// <summary> Differential pressure 2 (raw) </summary> + public Int16 press_diff2; + /// <summary> Raw Temperature measurement (raw) </summary> + public Int16 temperature; + + }; + + + public const byte MAVLINK_MSG_ID_SCALED_PRESSURE = 29; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=14)] + public struct mavlink_scaled_pressure_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt32 time_boot_ms; + /// <summary> Absolute pressure (hectopascal) </summary> + public Single press_abs; + /// <summary> Differential pressure 1 (hectopascal) </summary> + public Single press_diff; + /// <summary> Temperature measurement (0.01 degrees celsius) </summary> + public Int16 temperature; + + }; + + + public const byte MAVLINK_MSG_ID_ATTITUDE = 30; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=28)] + public struct mavlink_attitude_t + { + /// <summary> Timestamp (milliseconds since system boot) </summary> + public UInt32 time_boot_ms; + /// <summary> Roll angle (rad) </summary> + public Single roll; + /// <summary> Pitch angle (rad) </summary> + public Single pitch; + /// <summary> Yaw angle (rad) </summary> + public Single yaw; + /// <summary> Roll angular speed (rad/s) </summary> + public Single rollspeed; + /// <summary> Pitch angular speed (rad/s) </summary> + public Single pitchspeed; + /// <summary> Yaw angular speed (rad/s) </summary> + public Single yawspeed; + + }; + + + public const byte MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=32)] + public struct mavlink_attitude_quaternion_t + { + /// <summary> Timestamp (milliseconds since system boot) </summary> + public UInt32 time_boot_ms; + /// <summary> Quaternion component 1 </summary> + public Single q1; + /// <summary> Quaternion component 2 </summary> + public Single q2; + /// <summary> Quaternion component 3 </summary> + public Single q3; + /// <summary> Quaternion component 4 </summary> + public Single q4; + /// <summary> Roll angular speed (rad/s) </summary> + public Single rollspeed; + /// <summary> Pitch angular speed (rad/s) </summary> + public Single pitchspeed; + /// <summary> Yaw angular speed (rad/s) </summary> + public Single yawspeed; + + }; + + + public const byte MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=28)] + public struct mavlink_local_position_ned_t + { + /// <summary> Timestamp (milliseconds since system boot) </summary> + public UInt32 time_boot_ms; + /// <summary> X Position </summary> + public Single x; + /// <summary> Y Position </summary> + public Single y; + /// <summary> Z Position </summary> + public Single z; + /// <summary> X Speed </summary> + public Single vx; + /// <summary> Y Speed </summary> + public Single vy; + /// <summary> Z Speed </summary> + public Single vz; + + }; + + + public const byte MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=28)] + public struct mavlink_global_position_int_t + { + /// <summary> Timestamp (milliseconds since system boot) </summary> + public UInt32 time_boot_ms; + /// <summary> Latitude, expressed as * 1E7 </summary> + public Int32 lat; + /// <summary> Longitude, expressed as * 1E7 </summary> + public Int32 lon; + /// <summary> Altitude in meters, expressed as * 1000 (millimeters), above MSL </summary> + public Int32 alt; + /// <summary> Altitude above ground in meters, expressed as * 1000 (millimeters) </summary> + public Int32 relative_alt; + /// <summary> Ground X Speed (Latitude), expressed as m/s * 100 </summary> + public Int16 vx; + /// <summary> Ground Y Speed (Longitude), expressed as m/s * 100 </summary> + public Int16 vy; + /// <summary> Ground Z Speed (Altitude), expressed as m/s * 100 </summary> + public Int16 vz; + /// <summary> Compass heading in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 </summary> + public UInt16 hdg; + + }; + + + public const byte MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=22)] + public struct mavlink_rc_channels_scaled_t + { + /// <summary> Timestamp (milliseconds since system boot) </summary> + public UInt32 time_boot_ms; + /// <summary> RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan1_scaled; + /// <summary> RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan2_scaled; + /// <summary> RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan3_scaled; + /// <summary> RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan4_scaled; + /// <summary> RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan5_scaled; + /// <summary> RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan6_scaled; + /// <summary> RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan7_scaled; + /// <summary> RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan8_scaled; + /// <summary> Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. </summary> + public byte port; + /// <summary> Receive signal strength indicator, 0: 0%, 255: 100% </summary> + public byte rssi; + + }; + + + public const byte MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=22)] + public struct mavlink_rc_channels_raw_t + { + /// <summary> Timestamp (milliseconds since system boot) </summary> + public UInt32 time_boot_ms; + /// <summary> RC channel 1 value, in microseconds </summary> + public UInt16 chan1_raw; + /// <summary> RC channel 2 value, in microseconds </summary> + public UInt16 chan2_raw; + /// <summary> RC channel 3 value, in microseconds </summary> + public UInt16 chan3_raw; + /// <summary> RC channel 4 value, in microseconds </summary> + public UInt16 chan4_raw; + /// <summary> RC channel 5 value, in microseconds </summary> + public UInt16 chan5_raw; + /// <summary> RC channel 6 value, in microseconds </summary> + public UInt16 chan6_raw; + /// <summary> RC channel 7 value, in microseconds </summary> + public UInt16 chan7_raw; + /// <summary> RC channel 8 value, in microseconds </summary> + public UInt16 chan8_raw; + /// <summary> Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. </summary> + public byte port; + /// <summary> Receive signal strength indicator, 0: 0%, 255: 100% </summary> + public byte rssi; + + }; + + + public const byte MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=21)] + public struct mavlink_servo_output_raw_t + { + /// <summary> Timestamp (since UNIX epoch or microseconds since system boot) </summary> + public UInt32 time_usec; + /// <summary> Servo output 1 value, in microseconds </summary> + public UInt16 servo1_raw; + /// <summary> Servo output 2 value, in microseconds </summary> + public UInt16 servo2_raw; + /// <summary> Servo output 3 value, in microseconds </summary> + public UInt16 servo3_raw; + /// <summary> Servo output 4 value, in microseconds </summary> + public UInt16 servo4_raw; + /// <summary> Servo output 5 value, in microseconds </summary> + public UInt16 servo5_raw; + /// <summary> Servo output 6 value, in microseconds </summary> + public UInt16 servo6_raw; + /// <summary> Servo output 7 value, in microseconds </summary> + public UInt16 servo7_raw; + /// <summary> Servo output 8 value, in microseconds </summary> + public UInt16 servo8_raw; + /// <summary> Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. </summary> + public byte port; + + }; + + + public const byte MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=6)] + public struct mavlink_mission_request_partial_list_t + { + /// <summary> Start index, 0 by default </summary> + public Int16 start_index; + /// <summary> End index, -1 by default (-1: send list to end). Else a valid index of the list </summary> + public Int16 end_index; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=6)] + public struct mavlink_mission_write_partial_list_t + { + /// <summary> Start index, 0 by default and smaller / equal to the largest index of the current onboard list. </summary> + public Int16 start_index; + /// <summary> End index, equal or greater than start index. </summary> + public Int16 end_index; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_MISSION_ITEM = 39; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=37)] + public struct mavlink_mission_item_t + { + /// <summary> PARAM1 / For NAV command MISSIONs: Radius in which the MISSION is accepted as reached, in meters </summary> + public Single param1; + /// <summary> PARAM2 / For NAV command MISSIONs: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds </summary> + public Single param2; + /// <summary> PARAM3 / For LOITER command MISSIONs: Orbit to circle around the MISSION, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise. </summary> + public Single param3; + /// <summary> PARAM4 / For NAV and LOITER command MISSIONs: Yaw orientation in degrees, [0..360] 0 = NORTH </summary> + public Single param4; + /// <summary> PARAM5 / local: x position, global: latitude </summary> + public Single x; + /// <summary> PARAM6 / y position: global: longitude </summary> + public Single y; + /// <summary> PARAM7 / z position: global: altitude </summary> + public Single z; + /// <summary> Sequence </summary> + public UInt16 seq; + /// <summary> The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs </summary> + public UInt16 command; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h </summary> + public byte frame; + /// <summary> false:0, true:1 </summary> + public byte current; + /// <summary> autocontinue to next wp </summary> + public byte autocontinue; + + }; + + + public const byte MAVLINK_MSG_ID_MISSION_REQUEST = 40; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_mission_request_t + { + /// <summary> Sequence </summary> + public UInt16 seq; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_mission_set_current_t + { + /// <summary> Sequence </summary> + public UInt16 seq; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_MISSION_CURRENT = 42; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_mission_current_t + { + /// <summary> Sequence </summary> + public UInt16 seq; + + }; + + + public const byte MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_mission_request_list_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_MISSION_COUNT = 44; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_mission_count_t + { + /// <summary> Number of mission items in the sequence </summary> + public UInt16 count; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_mission_clear_all_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_mission_item_reached_t + { + /// <summary> Sequence </summary> + public UInt16 seq; + + }; + + + public const byte MAVLINK_MSG_ID_MISSION_ACK = 47; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_mission_ack_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> See MAV_MISSION_RESULT enum </summary> + public byte type; + + }; + + + public const byte MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=13)] + public struct mavlink_set_gps_global_origin_t + { + /// <summary> global position * 1E7 </summary> + public Int32 latitude; + /// <summary> global position * 1E7 </summary> + public Int32 longitude; + /// <summary> global position * 1000 </summary> + public Int32 altitude; + /// <summary> System ID </summary> + public byte target_system; + + }; + + + public const byte MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=12)] + public struct mavlink_gps_global_origin_t + { + /// <summary> Latitude (WGS84), expressed as * 1E7 </summary> + public Int32 latitude; + /// <summary> Longitude (WGS84), expressed as * 1E7 </summary> + public Int32 longitude; + /// <summary> Altitude(WGS84), expressed as * 1000 </summary> + public Int32 altitude; + + }; + + + public const byte MAVLINK_MSG_ID_SET_LOCAL_POSITION_SETPOINT = 50; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=19)] + public struct mavlink_set_local_position_setpoint_t + { + /// <summary> x position </summary> + public Single x; + /// <summary> y position </summary> + public Single y; + /// <summary> z position </summary> + public Single z; + /// <summary> Desired yaw angle </summary> + public Single yaw; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU </summary> + public byte coordinate_frame; + + }; + + + public const byte MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT = 51; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=17)] + public struct mavlink_local_position_setpoint_t + { + /// <summary> x position </summary> + public Single x; + /// <summary> y position </summary> + public Single y; + /// <summary> z position </summary> + public Single z; + /// <summary> Desired yaw angle </summary> + public Single yaw; + /// <summary> Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU </summary> + public byte coordinate_frame; + + }; + + + public const byte MAVLINK_MSG_ID_GLOBAL_POSITION_SETPOINT_INT = 52; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=15)] + public struct mavlink_global_position_setpoint_int_t + { + /// <summary> WGS84 Latitude position in degrees * 1E7 </summary> + public Int32 latitude; + /// <summary> WGS84 Longitude position in degrees * 1E7 </summary> + public Int32 longitude; + /// <summary> WGS84 Altitude in meters * 1000 (positive for up) </summary> + public Int32 altitude; + /// <summary> Desired yaw angle in degrees * 100 </summary> + public Int16 yaw; + /// <summary> Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT </summary> + public byte coordinate_frame; + + }; + + + public const byte MAVLINK_MSG_ID_SET_GLOBAL_POSITION_SETPOINT_INT = 53; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=15)] + public struct mavlink_set_global_position_setpoint_int_t + { + /// <summary> WGS84 Latitude position in degrees * 1E7 </summary> + public Int32 latitude; + /// <summary> WGS84 Longitude position in degrees * 1E7 </summary> + public Int32 longitude; + /// <summary> WGS84 Altitude in meters * 1000 (positive for up) </summary> + public Int32 altitude; + /// <summary> Desired yaw angle in degrees * 100 </summary> + public Int16 yaw; + /// <summary> Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT </summary> + public byte coordinate_frame; + + }; + + + public const byte MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=27)] + public struct mavlink_safety_set_allowed_area_t + { + /// <summary> x position 1 / Latitude 1 </summary> + public Single p1x; + /// <summary> y position 1 / Longitude 1 </summary> + public Single p1y; + /// <summary> z position 1 / Altitude 1 </summary> + public Single p1z; + /// <summary> x position 2 / Latitude 2 </summary> + public Single p2x; + /// <summary> y position 2 / Longitude 2 </summary> + public Single p2y; + /// <summary> z position 2 / Altitude 2 </summary> + public Single p2z; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. </summary> + public byte frame; + + }; + + + public const byte MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=25)] + public struct mavlink_safety_allowed_area_t + { + /// <summary> x position 1 / Latitude 1 </summary> + public Single p1x; + /// <summary> y position 1 / Longitude 1 </summary> + public Single p1y; + /// <summary> z position 1 / Altitude 1 </summary> + public Single p1z; + /// <summary> x position 2 / Latitude 2 </summary> + public Single p2x; + /// <summary> y position 2 / Longitude 2 </summary> + public Single p2y; + /// <summary> z position 2 / Altitude 2 </summary> + public Single p2z; + /// <summary> Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. </summary> + public byte frame; + + }; + + + public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST = 56; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_set_roll_pitch_yaw_thrust_t + { + /// <summary> Desired roll angle in radians </summary> + public Single roll; + /// <summary> Desired pitch angle in radians </summary> + public Single pitch; + /// <summary> Desired yaw angle in radians </summary> + public Single yaw; + /// <summary> Collective thrust, normalized to 0 .. 1 </summary> + public Single thrust; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST = 57; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_set_roll_pitch_yaw_speed_thrust_t + { + /// <summary> Desired roll angular speed in rad/s </summary> + public Single roll_speed; + /// <summary> Desired pitch angular speed in rad/s </summary> + public Single pitch_speed; + /// <summary> Desired yaw angular speed in rad/s </summary> + public Single yaw_speed; + /// <summary> Collective thrust, normalized to 0 .. 1 </summary> + public Single thrust; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT = 58; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=20)] + public struct mavlink_roll_pitch_yaw_thrust_setpoint_t + { + /// <summary> Timestamp in milliseconds since system boot </summary> + public UInt32 time_boot_ms; + /// <summary> Desired roll angle in radians </summary> + public Single roll; + /// <summary> Desired pitch angle in radians </summary> + public Single pitch; + /// <summary> Desired yaw angle in radians </summary> + public Single yaw; + /// <summary> Collective thrust, normalized to 0 .. 1 </summary> + public Single thrust; + + }; + + + public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT = 59; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=20)] + public struct mavlink_roll_pitch_yaw_speed_thrust_setpoint_t + { + /// <summary> Timestamp in milliseconds since system boot </summary> + public UInt32 time_boot_ms; + /// <summary> Desired roll angular speed in rad/s </summary> + public Single roll_speed; + /// <summary> Desired pitch angular speed in rad/s </summary> + public Single pitch_speed; + /// <summary> Desired yaw angular speed in rad/s </summary> + public Single yaw_speed; + /// <summary> Collective thrust, normalized to 0 .. 1 </summary> + public Single thrust; + + }; + + + public const byte MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=26)] + public struct mavlink_nav_controller_output_t + { + /// <summary> Current desired roll in degrees </summary> + public Single nav_roll; + /// <summary> Current desired pitch in degrees </summary> + public Single nav_pitch; + /// <summary> Current altitude error in meters </summary> + public Single alt_error; + /// <summary> Current airspeed error in meters/second </summary> + public Single aspd_error; + /// <summary> Current crosstrack error on x-y plane in meters </summary> + public Single xtrack_error; + /// <summary> Current desired heading in degrees </summary> + public Int16 nav_bearing; + /// <summary> Bearing to current MISSION/target in degrees </summary> + public Int16 target_bearing; + /// <summary> Distance to active MISSION in meters </summary> + public UInt16 wp_dist; + + }; + + + public const byte MAVLINK_MSG_ID_STATE_CORRECTION = 64; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=36)] + public struct mavlink_state_correction_t + { + /// <summary> x position error </summary> + public Single xErr; + /// <summary> y position error </summary> + public Single yErr; + /// <summary> z position error </summary> + public Single zErr; + /// <summary> roll error (radians) </summary> + public Single rollErr; + /// <summary> pitch error (radians) </summary> + public Single pitchErr; + /// <summary> yaw error (radians) </summary> + public Single yawErr; + /// <summary> x velocity </summary> + public Single vxErr; + /// <summary> y velocity </summary> + public Single vyErr; + /// <summary> z velocity </summary> + public Single vzErr; + + }; + + + public const byte MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=6)] + public struct mavlink_request_data_stream_t + { + /// <summary> The requested interval between two messages of this type </summary> + public UInt16 req_message_rate; + /// <summary> The target requested to send the message stream. </summary> + public byte target_system; + /// <summary> The target requested to send the message stream. </summary> + public byte target_component; + /// <summary> The ID of the requested data stream </summary> + public byte req_stream_id; + /// <summary> 1 to start sending, 0 to stop sending. </summary> + public byte start_stop; + + }; + + + public const byte MAVLINK_MSG_ID_DATA_STREAM = 67; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_data_stream_t + { + /// <summary> The requested interval between two messages of this type </summary> + public UInt16 message_rate; + /// <summary> The ID of the requested data stream </summary> + public byte stream_id; + /// <summary> 1 stream is enabled, 0 stream is stopped. </summary> + public byte on_off; + + }; + + + public const byte MAVLINK_MSG_ID_MANUAL_CONTROL = 69; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=21)] + public struct mavlink_manual_control_t + { + /// <summary> roll </summary> + public Single roll; + /// <summary> pitch </summary> + public Single pitch; + /// <summary> yaw </summary> + public Single yaw; + /// <summary> thrust </summary> + public Single thrust; + /// <summary> The system to be controlled </summary> + public byte target; + /// <summary> roll control enabled auto:0, manual:1 </summary> + public byte roll_manual; + /// <summary> pitch auto:0, manual:1 </summary> + public byte pitch_manual; + /// <summary> yaw auto:0, manual:1 </summary> + public byte yaw_manual; + /// <summary> thrust auto:0, manual:1 </summary> + public byte thrust_manual; + + }; + + + public const byte MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_rc_channels_override_t + { + /// <summary> RC channel 1 value, in microseconds </summary> + public UInt16 chan1_raw; + /// <summary> RC channel 2 value, in microseconds </summary> + public UInt16 chan2_raw; + /// <summary> RC channel 3 value, in microseconds </summary> + public UInt16 chan3_raw; + /// <summary> RC channel 4 value, in microseconds </summary> + public UInt16 chan4_raw; + /// <summary> RC channel 5 value, in microseconds </summary> + public UInt16 chan5_raw; + /// <summary> RC channel 6 value, in microseconds </summary> + public UInt16 chan6_raw; + /// <summary> RC channel 7 value, in microseconds </summary> + public UInt16 chan7_raw; + /// <summary> RC channel 8 value, in microseconds </summary> + public UInt16 chan8_raw; + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_VFR_HUD = 74; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=20)] + public struct mavlink_vfr_hud_t + { + /// <summary> Current airspeed in m/s </summary> + public Single airspeed; + /// <summary> Current ground speed in m/s </summary> + public Single groundspeed; + /// <summary> Current altitude (MSL), in meters </summary> + public Single alt; + /// <summary> Current climb rate in meters/second </summary> + public Single climb; + /// <summary> Current heading in degrees, in compass units (0..360, 0=north) </summary> + public Int16 heading; + /// <summary> Current throttle setting in integer percent, 0 to 100 </summary> + public UInt16 throttle; + + }; + + + public const byte MAVLINK_MSG_ID_COMMAND_LONG = 76; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=33)] + public struct mavlink_command_long_t + { + /// <summary> Parameter 1, as defined by MAV_CMD enum. </summary> + public Single param1; + /// <summary> Parameter 2, as defined by MAV_CMD enum. </summary> + public Single param2; + /// <summary> Parameter 3, as defined by MAV_CMD enum. </summary> + public Single param3; + /// <summary> Parameter 4, as defined by MAV_CMD enum. </summary> + public Single param4; + /// <summary> Parameter 5, as defined by MAV_CMD enum. </summary> + public Single param5; + /// <summary> Parameter 6, as defined by MAV_CMD enum. </summary> + public Single param6; + /// <summary> Parameter 7, as defined by MAV_CMD enum. </summary> + public Single param7; + /// <summary> Command ID, as defined by MAV_CMD enum. </summary> + public UInt16 command; + /// <summary> System which should execute the command </summary> + public byte target_system; + /// <summary> Component which should execute the command, 0 for all components </summary> + public byte target_component; + /// <summary> 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) </summary> + public byte confirmation; + + }; + + + public const byte MAVLINK_MSG_ID_COMMAND_ACK = 77; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_command_ack_t + { + /// <summary> Command ID, as defined by MAV_CMD enum. </summary> + public UInt16 command; + /// <summary> See MAV_RESULT enum </summary> + public byte result; + + }; + + + public const byte MAVLINK_MSG_ID_HIL_STATE = 90; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=56)] + public struct mavlink_hil_state_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 time_usec; + /// <summary> Roll angle (rad) </summary> + public Single roll; + /// <summary> Pitch angle (rad) </summary> + public Single pitch; + /// <summary> Yaw angle (rad) </summary> + public Single yaw; + /// <summary> Roll angular speed (rad/s) </summary> + public Single rollspeed; + /// <summary> Pitch angular speed (rad/s) </summary> + public Single pitchspeed; + /// <summary> Yaw angular speed (rad/s) </summary> + public Single yawspeed; + /// <summary> Latitude, expressed as * 1E7 </summary> + public Int32 lat; + /// <summary> Longitude, expressed as * 1E7 </summary> + public Int32 lon; + /// <summary> Altitude in meters, expressed as * 1000 (millimeters) </summary> + public Int32 alt; + /// <summary> Ground X Speed (Latitude), expressed as m/s * 100 </summary> + public Int16 vx; + /// <summary> Ground Y Speed (Longitude), expressed as m/s * 100 </summary> + public Int16 vy; + /// <summary> Ground Z Speed (Altitude), expressed as m/s * 100 </summary> + public Int16 vz; + /// <summary> X acceleration (mg) </summary> + public Int16 xacc; + /// <summary> Y acceleration (mg) </summary> + public Int16 yacc; + /// <summary> Z acceleration (mg) </summary> + public Int16 zacc; + + }; + + + public const byte MAVLINK_MSG_ID_HIL_CONTROLS = 91; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=42)] + public struct mavlink_hil_controls_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 time_usec; + /// <summary> Control output -1 .. 1 </summary> + public Single roll_ailerons; + /// <summary> Control output -1 .. 1 </summary> + public Single pitch_elevator; + /// <summary> Control output -1 .. 1 </summary> + public Single yaw_rudder; + /// <summary> Throttle 0 .. 1 </summary> + public Single throttle; + /// <summary> Aux 1, -1 .. 1 </summary> + public Single aux1; + /// <summary> Aux 2, -1 .. 1 </summary> + public Single aux2; + /// <summary> Aux 3, -1 .. 1 </summary> + public Single aux3; + /// <summary> Aux 4, -1 .. 1 </summary> + public Single aux4; + /// <summary> System mode (MAV_MODE) </summary> + public byte mode; + /// <summary> Navigation mode (MAV_NAV_MODE) </summary> + public byte nav_mode; + + }; + + + public const byte MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=33)] + public struct mavlink_hil_rc_inputs_raw_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 time_usec; + /// <summary> RC channel 1 value, in microseconds </summary> + public UInt16 chan1_raw; + /// <summary> RC channel 2 value, in microseconds </summary> + public UInt16 chan2_raw; + /// <summary> RC channel 3 value, in microseconds </summary> + public UInt16 chan3_raw; + /// <summary> RC channel 4 value, in microseconds </summary> + public UInt16 chan4_raw; + /// <summary> RC channel 5 value, in microseconds </summary> + public UInt16 chan5_raw; + /// <summary> RC channel 6 value, in microseconds </summary> + public UInt16 chan6_raw; + /// <summary> RC channel 7 value, in microseconds </summary> + public UInt16 chan7_raw; + /// <summary> RC channel 8 value, in microseconds </summary> + public UInt16 chan8_raw; + /// <summary> RC channel 9 value, in microseconds </summary> + public UInt16 chan9_raw; + /// <summary> RC channel 10 value, in microseconds </summary> + public UInt16 chan10_raw; + /// <summary> RC channel 11 value, in microseconds </summary> + public UInt16 chan11_raw; + /// <summary> RC channel 12 value, in microseconds </summary> + public UInt16 chan12_raw; + /// <summary> Receive signal strength indicator, 0: 0%, 255: 100% </summary> + public byte rssi; + + }; + + + public const byte MAVLINK_MSG_ID_OPTICAL_FLOW = 100; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_optical_flow_t + { + /// <summary> Timestamp (UNIX) </summary> + public UInt64 time_usec; + /// <summary> Ground distance in meters </summary> + public Single ground_distance; + /// <summary> Flow in pixels in x-sensor direction </summary> + public Int16 flow_x; + /// <summary> Flow in pixels in y-sensor direction </summary> + public Int16 flow_y; + /// <summary> Sensor ID </summary> + public byte sensor_id; + /// <summary> Optical flow quality / confidence. 0: bad, 255: maximum quality </summary> + public byte quality; + + }; + + + public const byte MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=32)] + public struct mavlink_global_vision_position_estimate_t + { + /// <summary> Timestamp (milliseconds) </summary> + public UInt64 usec; + /// <summary> Global X position </summary> + public Single x; + /// <summary> Global Y position </summary> + public Single y; + /// <summary> Global Z position </summary> + public Single z; + /// <summary> Roll angle in rad </summary> + public Single roll; + /// <summary> Pitch angle in rad </summary> + public Single pitch; + /// <summary> Yaw angle in rad </summary> + public Single yaw; + + }; + + + public const byte MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=32)] + public struct mavlink_vision_position_estimate_t + { + /// <summary> Timestamp (milliseconds) </summary> + public UInt64 usec; + /// <summary> Global X position </summary> + public Single x; + /// <summary> Global Y position </summary> + public Single y; + /// <summary> Global Z position </summary> + public Single z; + /// <summary> Roll angle in rad </summary> + public Single roll; + /// <summary> Pitch angle in rad </summary> + public Single pitch; + /// <summary> Yaw angle in rad </summary> + public Single yaw; + + }; + + + public const byte MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=20)] + public struct mavlink_vision_speed_estimate_t + { + /// <summary> Timestamp (milliseconds) </summary> + public UInt64 usec; + /// <summary> Global X speed </summary> + public Single x; + /// <summary> Global Y speed </summary> + public Single y; + /// <summary> Global Z speed </summary> + public Single z; + + }; + + + public const byte MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=32)] + public struct mavlink_vicon_position_estimate_t + { + /// <summary> Timestamp (milliseconds) </summary> + public UInt64 usec; + /// <summary> Global X position </summary> + public Single x; + /// <summary> Global Y position </summary> + public Single y; + /// <summary> Global Z position </summary> + public Single z; + /// <summary> Roll angle in rad </summary> + public Single roll; + /// <summary> Pitch angle in rad </summary> + public Single pitch; + /// <summary> Yaw angle in rad </summary> + public Single yaw; + + }; + + + public const byte MAVLINK_MSG_ID_MEMORY_VECT = 249; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=36)] + public struct mavlink_memory_vect_t + { + /// <summary> Starting address of the debug variables </summary> + public UInt16 address; + /// <summary> Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below </summary> + public byte ver; + /// <summary> Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 </summary> + public byte type; + /// <summary> Memory contents at specified address </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=32)] + public byte[] value; + + }; + + + public const byte MAVLINK_MSG_ID_DEBUG_VECT = 250; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=30)] + public struct mavlink_debug_vect_t + { + /// <summary> Timestamp </summary> + public UInt64 time_usec; + /// <summary> x </summary> + public Single x; + /// <summary> y </summary> + public Single y; + /// <summary> z </summary> + public Single z; + /// <summary> Name </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=10)] + public string name; + + }; + + + public const byte MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_named_value_float_t + { + /// <summary> Timestamp (milliseconds since system boot) </summary> + public UInt32 time_boot_ms; + /// <summary> Floating point value </summary> + public Single value; + /// <summary> Name of the debug variable </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=10)] + public string name; + + }; + + + public const byte MAVLINK_MSG_ID_NAMED_VALUE_INT = 252; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_named_value_int_t + { + /// <summary> Timestamp (milliseconds since system boot) </summary> + public UInt32 time_boot_ms; + /// <summary> Signed integer value </summary> + public Int32 value; + /// <summary> Name of the debug variable </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=10)] + public string name; + + }; + + + public const byte MAVLINK_MSG_ID_STATUSTEXT = 253; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=51)] + public struct mavlink_statustext_t + { + /// <summary> Severity of status, 0 = info message, 255 = critical fault </summary> + public byte severity; + /// <summary> Status text message, without null termination character </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=50)] + public string text; + + }; + + + public const byte MAVLINK_MSG_ID_DEBUG = 254; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=9)] + public struct mavlink_debug_t + { + /// <summary> Timestamp (milliseconds since system boot) </summary> + public UInt32 time_boot_ms; + /// <summary> DEBUG value </summary> + public Single value; + /// <summary> index of debug variable </summary> + public byte ind; + + }; + + + public const byte MAVLINK_MSG_ID_EXTENDED_MESSAGE = 255; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_extended_message_t + { + /// <summary> System which should execute the command </summary> + public byte target_system; + /// <summary> Component which should execute the command, 0 for all components </summary> + public byte target_component; + /// <summary> Retransmission / ACK flags </summary> + public byte protocol_flags; + + }; + + } +#endif +} diff --git a/Tools/ArdupilotMegaPlanner/MAVLinkTypes0.9.cs b/Tools/ArdupilotMegaPlanner/MAVLinkTypes0.9.cs index 73d32cf4b..c869616dc 100644 --- a/Tools/ArdupilotMegaPlanner/MAVLinkTypes0.9.cs +++ b/Tools/ArdupilotMegaPlanner/MAVLinkTypes0.9.cs @@ -5,1192 +5,1783 @@ using System.Runtime.InteropServices; namespace ArdupilotMega { - #if !MAVLINK10 +#if !MAVLINK10 partial class MAVLink { - public byte[] MAVLINK_MESSAGE_LENGTHS = new byte[] {3, 4, 8, 14, 8, 28, 3, 32, 0, 2, 3, 2, 2, 0, 0, 0, 0, 0, 0, 0, 19, 2, 23, 21, 0, 37, 26, 101, 26, 16, 32, 32, 37, 32, 11, 17, 17, 16, 18, 36, 4, 4, 2, 2, 4, 2, 2, 3, 14, 12, 18, 16, 8, 27, 25, 18, 18, 24, 24, 0, 0, 0, 26, 16, 36, 5, 6, 56, 26, 21, 18, 0, 0, 18, 20, 20, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 8, 4, 12, 15, 13, 6, 15, 14, 0, 12, 3, 8, 28, 36, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 14, 14, 51, 5}; - public byte[] MAVLINK_MESSAGE_CRCS = new byte[] {72, 39, 190, 92, 191, 217, 104, 119, 0, 219, 60, 186, 10, 0, 0, 0, 0, 0, 0, 0, 89, 159, 162, 121, 0, 149, 222, 110, 179, 136, 66, 126, 185, 147, 112, 252, 162, 215, 229, 128, 9, 106, 101, 213, 4, 229, 21, 214, 215, 14, 206, 50, 157, 126, 108, 213, 95, 5, 127, 0, 0, 0, 57, 126, 130, 119, 193, 191, 236, 158, 143, 0, 0, 104, 123, 131, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 29, 208, 188, 118, 242, 19, 97, 233, 0, 18, 68, 136, 205, 42, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 224, 60, 106, 7}; - public enum MAV_MOUNT_MODE - { - MAV_MOUNT_MODE_RETRACT=0, /* Load and keep safe position (Roll,Pitch,Yaw) from EEPROM and stop stabilization | */ - MAV_MOUNT_MODE_NEUTRAL=1, /* Load and keep neutral position (Roll,Pitch,Yaw) from EEPROM. | */ - MAV_MOUNT_MODE_MAVLINK_TARGETING=2, /* Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | */ - MAV_MOUNT_MODE_RC_TARGETING=3, /* Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | */ - MAV_MOUNT_MODE_GPS_POINT=4, /* Load neutral position and start to point to Lat,Lon,Alt | */ - MAV_MOUNT_MODE_ENUM_END=5, /* | */ - }; - - public enum MAV_CMD - { - WAYPOINT=16, /* Navigate to waypoint. |Hold time in decimal seconds. (ignored by fixed wing, time to stay at waypoint for rotary wing)| Acceptance radius in meters (if the sphere with this radius is hit, the waypoint counts as reached)| 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.| Desired yaw angle at waypoint (rotary wing)| Latitude| Longitude| Altitude| */ - LOITER_UNLIM=17, /* Loiter around this waypoint an unlimited amount of time |Empty| Empty| Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */ - LOITER_TURNS=18, /* Loiter around this waypoint for X turns |Turns| Empty| Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */ - LOITER_TIME=19, /* Loiter around this waypoint for X seconds |Seconds (decimal)| Empty| Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| */ - RETURN_TO_LAUNCH=20, /* Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */ - LAND=21, /* Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| */ - TAKEOFF=22, /* Takeoff from ground / hand |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| */ - ROI=80, /* Sets the region of interest (ROI) for a sensor set or the - vehicle itself. This can then be used by the vehicles control - system to control the vehicle attitude and the attitude of various - sensors such as cameras. |Region of intereset mode. (see MAV_ROI enum)| Waypoint index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| */ - PATHPLANNING=81, /* Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning| 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid| Empty| Yaw angle at goal, in compass degrees, [0..360]| Latitude/X of goal| Longitude/Y of goal| Altitude/Z of goal| */ - LAST=95, /* NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */ - CONDITION_DELAY=112, /* Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| */ - CONDITION_CHANGE_ALT=113, /* Ascend/descend at rate. Delay mission state machine until desired altitude reached. |Descent / Ascend rate (m/s)| Empty| Empty| Empty| Empty| Empty| Finish Altitude| */ - CONDITION_DISTANCE=114, /* Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| */ - CONDITION_YAW=115, /* Reach a certain target angle. |target angle: [0-360], 0 is north| speed during yaw change:[deg per second]| direction: negative: counter clockwise, positive: clockwise [-1,1]| relative offset or absolute angle: [ 1,0]| Empty| Empty| Empty| */ - CONDITION_LAST=159, /* NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */ - DO_SET_MODE=176, /* Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| */ - DO_JUMP=177, /* Jump to the desired command in the mission list. Repeat this action only the specified number of times |Sequence number| Repeat count| Empty| Empty| Empty| Empty| Empty| */ - DO_CHANGE_SPEED=178, /* Change speed and/or throttle set points. |Speed type (0=Airspeed, 1=Ground Speed)| Speed (m/s, -1 indicates no change)| Throttle ( Percent, -1 indicates no change)| Empty| Empty| Empty| Empty| */ - DO_SET_HOME=179, /* Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)| Empty| Empty| Empty| Latitude| Longitude| Altitude| */ - DO_SET_PARAMETER=180, /* Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number| Parameter value| Empty| Empty| Empty| Empty| Empty| */ - DO_SET_RELAY=181, /* Set a relay to a condition. |Relay number| Setting (1=on, 0=off, others possible depending on system hardware)| Empty| Empty| Empty| Empty| Empty| */ - DO_REPEAT_RELAY=182, /* Cycle a relay on and off for a desired number of cyles with a desired period. |Relay number| Cycle count| Cycle time (seconds, decimal)| Empty| Empty| Empty| Empty| */ - DO_SET_SERVO=183, /* Set a servo to a desired PWM value. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Empty| Empty| Empty| Empty| Empty| */ - DO_REPEAT_SERVO=184, /* Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Cycle count| Cycle time (seconds)| Empty| Empty| Empty| */ - DO_CONTROL_VIDEO=200, /* Control onboard camera capturing. |Camera ID (-1 for all)| Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw| Transmission mode: 0: video stream, >0: single images every n seconds (decimal)| Recording: 0: disabled, 1: enabled compressed, 2: enabled raw| Empty| Empty| Empty| */ - DO_SET_ROI=201, /* Sets the region of interest (ROI) for a sensor set or the - vehicle itself. This can then be used by the vehicles control - system to control the vehicle attitude and the attitude of various - devices such as cameras. - |Region of interest mode. (see MAV_ROI enum)| Waypoint index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple cameras etc.)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| */ - DO_DIGICAM_CONFIGURE=202, /* Mission command to configure an on-board camera controller system. |Modes: P, TV, AV, M, Etc| Shutter speed: Divisor number for one second| Aperture: F stop number| ISO number e.g. 80, 100, 200, Etc| Exposure type enumerator| Command Identity| Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)| */ - DO_DIGICAM_CONTROL=203, /* Mission command to control an on-board camera controller system. |Session control e.g. show/hide lens| Zoom's absolute position| Zooming step value to offset zoom from the current position| Focus Locking, Unlocking or Re-locking| Shooting Command| Command Identity| Empty| */ - DO_MOUNT_CONFIGURE=204, /* Mission command to configure a camera or antenna mount |Mount operation mode (see MAV_MOUNT_MODE enum)| stabilize roll? (1 = yes, 0 = no)| stabilize pitch? (1 = yes, 0 = no)| stabilize yaw? (1 = yes, 0 = no)| Empty| Empty| Empty| */ - DO_MOUNT_CONTROL=205, /* Mission command to control a camera or antenna mount |pitch(deg*100) or lat, depending on mount mode.| roll(deg*100) or lon depending on mount mode| yaw(deg*100) or alt (in cm) depending on mount mode| Empty| Empty| Empty| Empty| */ - DO_LAST=240, /* NOP - This command is only used to mark the upper limit of the DO commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| */ - PREFLIGHT_CALIBRATION=241, /* Trigger calibration. This command will be only accepted if in pre-flight mode. |Gyro calibration: 0: no, 1: yes| Magnetometer calibration: 0: no, 1: yes| Ground pressure: 0: no, 1: yes| Radio calibration: 0: no, 1: yes| Empty| Empty| Empty| */ - PREFLIGHT_STORAGE=245, /* Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Reserved| Reserved| Empty| Empty| Empty| */ - ENUM_END=246, /* | */ - }; - - public const byte MAVLINK_MSG_ID_AP_ADC = 153; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_ap_adc_t - { - public ushort adc1; /// ADC output 1 - public ushort adc2; /// ADC output 2 - public ushort adc3; /// ADC output 3 - public ushort adc4; /// ADC output 4 - public ushort adc5; /// ADC output 5 - public ushort adc6; /// ADC output 6 - }; - - public const byte MAVLINK_MSG_ID_AP_ADC_LEN = 12; - public const byte MAVLINK_MSG_ID_DCM = 163; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_dcm_t - { - public float omegaIx; /// X gyro drift estimate rad/s - public float omegaIy; /// Y gyro drift estimate rad/s - public float omegaIz; /// Z gyro drift estimate rad/s - public float accel_weight; /// average accel_weight - public float renorm_val; /// average renormalisation value - public float error_rp; /// average error_roll_pitch value - public float error_yaw; /// average error_yaw value - }; - - public const byte MAVLINK_MSG_ID_DCM_LEN = 28; - public const byte MAVLINK_MSG_ID_DIGICAM_CONFIGURE = 154; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_digicam_configure_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte mode; /// Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore) - public ushort shutter_speed; /// Divisor number //e.g. 1000 means 1/1000 (0 means ignore) - public byte aperture; /// F stop number x 10 //e.g. 28 means 2.8 (0 means ignore) - public byte iso; /// ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore) - public byte exposure_type; /// Exposure type enumeration from 1 to N (0 means ignore) - public byte command_id; /// Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - public byte engine_cut_off; /// Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) - public byte extra_param; /// Extra parameters enumeration (0 means ignore) - public float extra_value; /// Correspondent value to given extra_param - }; - - public const byte MAVLINK_MSG_ID_DIGICAM_CONFIGURE_LEN = 15; - public const byte MAVLINK_MSG_ID_DIGICAM_CONTROL = 155; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_digicam_control_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte session; /// 0: stop, 1: start or keep it up //Session control e.g. show/hide lens - public byte zoom_pos; /// 1 to N //Zoom's absolute position (0 means ignore) - public byte zoom_step; /// -100 to 100 //Zooming step value to offset zoom from the current position - public byte focus_lock; /// 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus - public byte shot; /// 0: ignore, 1: shot or start filming - public byte command_id; /// Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - public byte extra_param; /// Extra parameters enumeration (0 means ignore) - public float extra_value; /// Correspondent value to given extra_param - }; - - public const byte MAVLINK_MSG_ID_DIGICAM_CONTROL_LEN = 13; - public const byte MAVLINK_MSG_ID_FENCED_FETCH_POINT = 161; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_fenced_fetch_point_t - { - public byte idx; /// point index (first point is 1, 0 is for return point) - }; - - public const byte MAVLINK_MSG_ID_FENCED_FETCH_POINT_LEN = 1; - public const byte MAVLINK_MSG_ID_FENCED_POINT = 160; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_fenced_point_t - { - public byte idx; /// point index (first point is 1, 0 is for return point) - public byte count; /// total number of points (for sanity checking) - public float lat; /// Latitude of point - public float lng; /// Longitude of point - }; - - public const byte MAVLINK_MSG_ID_FENCED_POINT_LEN = 10; - public const byte MAVLINK_MSG_ID_FENCE_FETCH_POINT = 161; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_fence_fetch_point_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte idx; /// point index (first point is 1, 0 is for return point) - }; - - public const byte MAVLINK_MSG_ID_FENCE_FETCH_POINT_LEN = 3; - public const byte MAVLINK_MSG_ID_FENCE_POINT = 160; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_fence_point_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte idx; /// point index (first point is 1, 0 is for return point) - public byte count; /// total number of points (for sanity checking) - public float lat; /// Latitude of point - public float lng; /// Longitude of point - }; - - public const byte MAVLINK_MSG_ID_FENCE_POINT_LEN = 12; - public const byte MAVLINK_MSG_ID_FENCE_STATUS = 162; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_fence_status_t - { - public byte breach_status; /// 0 if currently inside fence, 1 if outside - public ushort breach_count; /// number of fence breaches - public byte breach_type; /// last breach type (see FENCE_BREACH_* enum) - public uint breach_time; /// time of last breach in milliseconds since boot - }; - - public const byte MAVLINK_MSG_ID_FENCE_STATUS_LEN = 8; - public const byte MAVLINK_MSG_ID_HWSTATUS = 165; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_hwstatus_t - { - public ushort Vcc; /// board voltage (mV) - public byte I2Cerr; /// I2C error count - }; - - public const byte MAVLINK_MSG_ID_HWSTATUS_LEN = 3; - public const byte MAVLINK_MSG_ID_MEMINFO = 152; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_meminfo_t - { - public ushort brkval; /// heap top - public ushort freemem; /// free memory - }; - - public const byte MAVLINK_MSG_ID_MEMINFO_LEN = 4; - public const byte MAVLINK_MSG_ID_MOUNT_CONFIGURE = 156; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mount_configure_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte mount_mode; /// mount operating mode (see MAV_MOUNT_MODE enum) - public byte stab_roll; /// (1 = yes, 0 = no) - public byte stab_pitch; /// (1 = yes, 0 = no) - public byte stab_yaw; /// (1 = yes, 0 = no) - }; - - public const byte MAVLINK_MSG_ID_MOUNT_CONFIGURE_LEN = 6; - public const byte MAVLINK_MSG_ID_MOUNT_CONTROL = 157; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mount_control_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public int input_a; /// pitch(deg*100) or lat, depending on mount mode - public int input_b; /// roll(deg*100) or lon depending on mount mode - public int input_c; /// yaw(deg*100) or alt (in cm) depending on mount mode - public byte save_position; /// if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING) - }; - - public const byte MAVLINK_MSG_ID_MOUNT_CONTROL_LEN = 15; - public const byte MAVLINK_MSG_ID_MOUNT_STATUS = 158; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_mount_status_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public int pointing_a; /// pitch(deg*100) or lat, depending on mount mode - public int pointing_b; /// roll(deg*100) or lon depending on mount mode - public int pointing_c; /// yaw(deg*100) or alt (in cm) depending on mount mode - }; - - public const byte MAVLINK_MSG_ID_MOUNT_STATUS_LEN = 14; - public const byte MAVLINK_MSG_ID_SENSOR_OFFSETS = 150; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_sensor_offsets_t - { - public short mag_ofs_x; /// magnetometer X offset - public short mag_ofs_y; /// magnetometer Y offset - public short mag_ofs_z; /// magnetometer Z offset - public float mag_declination; /// magnetic declination (radians) - public int raw_press; /// raw pressure from barometer - public int raw_temp; /// raw temperature from barometer - public float gyro_cal_x; /// gyro X calibration - public float gyro_cal_y; /// gyro Y calibration - public float gyro_cal_z; /// gyro Z calibration - public float accel_cal_x; /// accel X calibration - public float accel_cal_y; /// accel Y calibration - public float accel_cal_z; /// accel Z calibration - }; - - public const byte MAVLINK_MSG_ID_SENSOR_OFFSETS_LEN = 42; - public const byte MAVLINK_MSG_ID_SET_MAG_OFFSETS = 151; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_mag_offsets_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public short mag_ofs_x; /// magnetometer X offset - public short mag_ofs_y; /// magnetometer Y offset - public short mag_ofs_z; /// magnetometer Z offset - }; - - public const byte MAVLINK_MSG_ID_SET_MAG_OFFSETS_LEN = 8; - public const byte MAVLINK_MSG_ID_SIMSTATE = 164; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_simstate_t - { - public float roll; /// Roll angle (rad) - public float pitch; /// Pitch angle (rad) - public float yaw; /// Yaw angle (rad) - public float xacc; /// X acceleration m/s/s - public float yacc; /// Y acceleration m/s/s - public float zacc; /// Z acceleration m/s/s - public float xgyro; /// Angular speed around X axis rad/s - public float ygyro; /// Angular speed around Y axis rad/s - public float zgyro; /// Angular speed around Z axis rad/s - }; - - public const byte MAVLINK_MSG_ID_SIMSTATE_LEN = 36; - public enum MAV_DATA_STREAM - { - MAV_DATA_STREAM_ALL=0, /* Enable all data streams | */ - MAV_DATA_STREAM_RAW_SENSORS=1, /* Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. | */ - MAV_DATA_STREAM_EXTENDED_STATUS=2, /* Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS | */ - MAV_DATA_STREAM_RC_CHANNELS=3, /* Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW | */ - MAV_DATA_STREAM_RAW_CONTROLLER=4, /* Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT. | */ - MAV_DATA_STREAM_POSITION=6, /* Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. | */ - MAV_DATA_STREAM_EXTRA1=10, /* Dependent on the autopilot | */ - MAV_DATA_STREAM_EXTRA2=11, /* Dependent on the autopilot | */ - MAV_DATA_STREAM_EXTRA3=12, /* Dependent on the autopilot | */ - MAV_DATA_STREAM_ENUM_END=13, /* | */ - }; - - public enum MAV_ROI - { - MAV_ROI_NONE=0, /* No region of interest. | */ - MAV_ROI_WPNEXT=1, /* Point toward next waypoint. | */ - MAV_ROI_WPINDEX=2, /* Point toward given waypoint. | */ - MAV_ROI_LOCATION=3, /* Point toward fixed location. | */ - MAV_ROI_TARGET=4, /* Point toward of given id. | */ - MAV_ROI_ENUM_END=5, /* | */ - }; - - public const byte MAVLINK_MSG_ID_ACTION = 10; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_action_t - { - public byte target; /// The system executing the action - public byte target_component; /// The component executing the action - public byte action; /// The action id - }; - - public const byte MAVLINK_MSG_ID_ACTION_LEN = 3; - public const byte MAVLINK_MSG_ID_ACTION_ACK = 9; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_action_ack_t - { - public byte action; /// The action id - public byte result; /// 0: Action DENIED, 1: Action executed - }; - - public const byte MAVLINK_MSG_ID_ACTION_ACK_LEN = 2; - public const byte MAVLINK_MSG_ID_ATTITUDE = 30; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_attitude_t - { - public ulong usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public float roll; /// Roll angle (rad) - public float pitch; /// Pitch angle (rad) - public float yaw; /// Yaw angle (rad) - public float rollspeed; /// Roll angular speed (rad/s) - public float pitchspeed; /// Pitch angular speed (rad/s) - public float yawspeed; /// Yaw angular speed (rad/s) - }; - - public const byte MAVLINK_MSG_ID_ATTITUDE_LEN = 32; - public const byte MAVLINK_MSG_ID_AUTH_KEY = 7; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_auth_key_t - { - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=32)] - public byte[] key; /// key - }; - - public const byte MAVLINK_MSG_ID_AUTH_KEY_LEN = 32; - public const byte MAVLINK_MSG_ID_BOOT = 1; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_boot_t - { - public uint version; /// The onboard software version - }; - - public const byte MAVLINK_MSG_ID_BOOT_LEN = 4; - public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_change_operator_control_t - { - public byte target_system; /// System the GCS requests control for - public byte control_request; /// 0: request control of this MAV, 1: Release control of this MAV - public byte version; /// 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=25)] - public byte[] passkey; /// Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" - }; - - public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_LEN = 28; - public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_change_operator_control_ack_t - { - public byte gcs_system_id; /// ID of the GCS this message - public byte control_request; /// 0: request control of this MAV, 1: Release control of this MAV - public byte ack; /// 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control - }; - - public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK_LEN = 3; - public const byte MAVLINK_MSG_ID_COMMAND = 75; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_command_t - { - public byte target_system; /// System which should execute the command - public byte target_component; /// Component which should execute the command, 0 for all components - public byte command; /// Command ID, as defined by MAV_CMD enum. - public byte confirmation; /// 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) - public float param1; /// Parameter 1, as defined by MAV_CMD enum. - public float param2; /// Parameter 2, as defined by MAV_CMD enum. - public float param3; /// Parameter 3, as defined by MAV_CMD enum. - public float param4; /// Parameter 4, as defined by MAV_CMD enum. - }; - - public const byte MAVLINK_MSG_ID_COMMAND_LEN = 20; - public const byte MAVLINK_MSG_ID_COMMAND_ACK = 76; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_command_ack_t - { - public float command; /// Current airspeed in m/s - public float result; /// 1: Action ACCEPTED and EXECUTED, 1: Action TEMPORARY REJECTED/DENIED, 2: Action PERMANENTLY DENIED, 3: Action UNKNOWN/UNSUPPORTED, 4: Requesting CONFIRMATION - }; - - public const byte MAVLINK_MSG_ID_COMMAND_ACK_LEN = 8; - public const byte MAVLINK_MSG_ID_CONTROL_STATUS = 52; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_control_status_t - { - public byte position_fix; /// Position fix: 0: lost, 2: 2D position fix, 3: 3D position fix - public byte vision_fix; /// Vision position fix: 0: lost, 1: 2D local position hold, 2: 2D global position fix, 3: 3D global position fix - public byte gps_fix; /// GPS position fix: 0: no reception, 1: Minimum 1 satellite, but no position fix, 2: 2D position fix, 3: 3D position fix - public byte ahrs_health; /// Attitude estimation health: 0: poor, 255: excellent - public byte control_att; /// 0: Attitude control disabled, 1: enabled - public byte control_pos_xy; /// 0: X, Y position control disabled, 1: enabled - public byte control_pos_z; /// 0: Z position control disabled, 1: enabled - public byte control_pos_yaw; /// 0: Yaw angle control disabled, 1: enabled - }; - - public const byte MAVLINK_MSG_ID_CONTROL_STATUS_LEN = 8; - public const byte MAVLINK_MSG_ID_DEBUG = 255; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_debug_t - { - public byte ind; /// index of debug variable - public float value; /// DEBUG value - }; - - public const byte MAVLINK_MSG_ID_DEBUG_LEN = 5; - public const byte MAVLINK_MSG_ID_DEBUG_VECT = 251; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_debug_vect_t - { - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=10)] - public byte[] name; /// Name - public ulong usec; /// Timestamp - public float x; /// x - public float y; /// y - public float z; /// z - }; - - public const byte MAVLINK_MSG_ID_DEBUG_VECT_LEN = 30; - public const byte MAVLINK_MSG_ID_GLOBAL_POSITION = 33; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_global_position_t - { - public ulong usec; /// Timestamp (microseconds since unix epoch) - public float lat; /// Latitude, in degrees - public float lon; /// Longitude, in degrees - public float alt; /// Absolute altitude, in meters - public float vx; /// X Speed (in Latitude direction, positive: going north) - public float vy; /// Y Speed (in Longitude direction, positive: going east) - public float vz; /// Z Speed (in Altitude direction, positive: going up) - }; - - public const byte MAVLINK_MSG_ID_GLOBAL_POSITION_LEN = 32; - public const byte MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 73; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_global_position_int_t - { - public int lat; /// Latitude, expressed as * 1E7 - public int lon; /// Longitude, expressed as * 1E7 - public int alt; /// Altitude in meters, expressed as * 1000 (millimeters) - public short vx; /// Ground X Speed (Latitude), expressed as m/s * 100 - public short vy; /// Ground Y Speed (Longitude), expressed as m/s * 100 - public short vz; /// Ground Z Speed (Altitude), expressed as m/s * 100 - }; - - public const byte MAVLINK_MSG_ID_GLOBAL_POSITION_INT_LEN = 18; - public const byte MAVLINK_MSG_ID_GPS_LOCAL_ORIGIN_SET = 49; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_gps_local_origin_set_t - { - public int latitude; /// Latitude (WGS84), expressed as * 1E7 - public int longitude; /// Longitude (WGS84), expressed as * 1E7 - public int altitude; /// Altitude(WGS84), expressed as * 1000 - }; - - public const byte MAVLINK_MSG_ID_GPS_LOCAL_ORIGIN_SET_LEN = 12; - public const byte MAVLINK_MSG_ID_GPS_RAW = 32; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_gps_raw_t - { - public ulong usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public byte fix_type; /// 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. - public float lat; /// Latitude in degrees - public float lon; /// Longitude in degrees - public float alt; /// Altitude in meters - public float eph; /// GPS HDOP - public float epv; /// GPS VDOP - public float v; /// GPS ground speed - public float hdg; /// Compass heading in degrees, 0..360 degrees - }; - - public const byte MAVLINK_MSG_ID_GPS_RAW_LEN = 37; - public const byte MAVLINK_MSG_ID_GPS_RAW_INT = 25; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_gps_raw_int_t - { - public ulong usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public byte fix_type; /// 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. - public int lat; /// Latitude in 1E7 degrees - public int lon; /// Longitude in 1E7 degrees - public int alt; /// Altitude in 1E3 meters (millimeters) - public float eph; /// GPS HDOP - public float epv; /// GPS VDOP - public float v; /// GPS ground speed (m/s) - public float hdg; /// Compass heading in degrees, 0..360 degrees - }; - - public const byte MAVLINK_MSG_ID_GPS_RAW_INT_LEN = 37; - public const byte MAVLINK_MSG_ID_GPS_SET_GLOBAL_ORIGIN = 48; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_gps_set_global_origin_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public int latitude; /// global position * 1E7 - public int longitude; /// global position * 1E7 - public int altitude; /// global position * 1000 - }; - - public const byte MAVLINK_MSG_ID_GPS_SET_GLOBAL_ORIGIN_LEN = 14; - public const byte MAVLINK_MSG_ID_GPS_STATUS = 27; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_gps_status_t - { - public byte satellites_visible; /// Number of satellites visible - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=20)] - public byte[] satellite_prn; /// Global satellite ID - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=20)] - public byte[] satellite_used; /// 0: Satellite not used, 1: used for localization - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=20)] - public byte[] satellite_elevation; /// Elevation (0: right on top of receiver, 90: on the horizon) of satellite - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=20)] - public byte[] satellite_azimuth; /// Direction of satellite, 0: 0 deg, 255: 360 deg. - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=20)] - public byte[] satellite_snr; /// Signal to noise ratio of satellite - }; - - public const byte MAVLINK_MSG_ID_GPS_STATUS_LEN = 101; - public const byte MAVLINK_MSG_ID_HEARTBEAT = 0; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_heartbeat_t - { - public byte type; /// Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) - public byte autopilot; /// Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM - public byte mavlink_version; /// MAVLink version - }; - - public const byte MAVLINK_MSG_ID_HEARTBEAT_LEN = 3; - public const byte MAVLINK_MSG_ID_HIL_CONTROLS = 68; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_hil_controls_t - { - public ulong time_us; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public float roll_ailerons; /// Control output -3 .. 1 - public float pitch_elevator; /// Control output -1 .. 1 - public float yaw_rudder; /// Control output -1 .. 1 - public float throttle; /// Throttle 0 .. 1 - public byte mode; /// System mode (MAV_MODE) - public byte nav_mode; /// Navigation mode (MAV_NAV_MODE) - }; - - public const byte MAVLINK_MSG_ID_HIL_CONTROLS_LEN = 26; - public const byte MAVLINK_MSG_ID_HIL_STATE = 67; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_hil_state_t - { - public ulong usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public float roll; /// Roll angle (rad) - public float pitch; /// Pitch angle (rad) - public float yaw; /// Yaw angle (rad) - public float rollspeed; /// Roll angular speed (rad/s) - public float pitchspeed; /// Pitch angular speed (rad/s) - public float yawspeed; /// Yaw angular speed (rad/s) - public int lat; /// Latitude, expressed as * 1E7 - public int lon; /// Longitude, expressed as * 1E7 - public int alt; /// Altitude in meters, expressed as * 1000 (millimeters) - public short vx; /// Ground X Speed (Latitude), expressed as m/s * 100 - public short vy; /// Ground Y Speed (Longitude), expressed as m/s * 100 - public short vz; /// Ground Z Speed (Altitude), expressed as m/s * 100 - public short xacc; /// X acceleration (mg) - public short yacc; /// Y acceleration (mg) - public short zacc; /// Z acceleration (mg) - }; - - public const byte MAVLINK_MSG_ID_HIL_STATE_LEN = 56; - public const byte MAVLINK_MSG_ID_LOCAL_POSITION = 31; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_local_position_t - { - public ulong usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public float x; /// X Position - public float y; /// Y Position - public float z; /// Z Position - public float vx; /// X Speed - public float vy; /// Y Speed - public float vz; /// Z Speed - }; - - public const byte MAVLINK_MSG_ID_LOCAL_POSITION_LEN = 32; - public const byte MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT = 51; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_local_position_setpoint_t - { - public float x; /// x position - public float y; /// y position - public float z; /// z position - public float yaw; /// Desired yaw angle - }; - - public const byte MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_LEN = 16; - public const byte MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_SET = 50; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_local_position_setpoint_set_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public float x; /// x position - public float y; /// y position - public float z; /// z position - public float yaw; /// Desired yaw angle - }; - - public const byte MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_SET_LEN = 18; - public const byte MAVLINK_MSG_ID_MANUAL_CONTROL = 69; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_manual_control_t - { - public byte target; /// The system to be controlled - public float roll; /// roll - public float pitch; /// pitch - public float yaw; /// yaw - public float thrust; /// thrust - public byte roll_manual; /// roll control enabled auto:0, manual:1 - public byte pitch_manual; /// pitch auto:0, manual:1 - public byte yaw_manual; /// yaw auto:0, manual:1 - public byte thrust_manual; /// thrust auto:0, manual:1 - }; - - public const byte MAVLINK_MSG_ID_MANUAL_CONTROL_LEN = 21; - public const byte MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 252; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_named_value_float_t - { - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=10)] - public byte[] name; /// Name of the debug variable - public float value; /// Floating point value - }; - - public const byte MAVLINK_MSG_ID_NAMED_VALUE_FLOAT_LEN = 14; - public const byte MAVLINK_MSG_ID_NAMED_VALUE_INT = 253; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_named_value_int_t - { - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=10)] - public byte[] name; /// Name of the debug variable - public int value; /// Signed integer value - }; - - public const byte MAVLINK_MSG_ID_NAMED_VALUE_INT_LEN = 14; - public const byte MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_nav_controller_output_t - { - public float nav_roll; /// Current desired roll in degrees - public float nav_pitch; /// Current desired pitch in degrees - public short nav_bearing; /// Current desired heading in degrees - public short target_bearing; /// Bearing to current waypoint/target in degrees - public ushort wp_dist; /// Distance to active waypoint in meters - public float alt_error; /// Current altitude error in meters - public float aspd_error; /// Current airspeed error in meters/second - public float xtrack_error; /// Current crosstrack error on x-y plane in meters - }; - - public const byte MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT_LEN = 26; - public const byte MAVLINK_MSG_ID_OBJECT_DETECTION_EVENT = 140; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_object_detection_event_t - { - public uint time; /// Timestamp in milliseconds since system boot - public ushort object_id; /// Object ID - public byte type; /// Object type: 0: image, 1: letter, 2: ground vehicle, 3: air vehicle, 4: surface vehicle, 5: sub-surface vehicle, 6: human, 7: animal - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=20)] - public byte[] name; /// Name of the object as defined by the detector - public byte quality; /// Detection quality / confidence. 0: bad, 255: maximum confidence - public float bearing; /// Angle of the object with respect to the body frame in NED coordinates in radians. 0: front - public float distance; /// Ground distance in meters - }; - - public const byte MAVLINK_MSG_ID_OBJECT_DETECTION_EVENT_LEN = 36; - public const byte MAVLINK_MSG_ID_OPTICAL_FLOW = 100; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_optical_flow_t - { - public ulong time; /// Timestamp (UNIX) - public byte sensor_id; /// Sensor ID - public short flow_x; /// Flow in pixels in x-sensor direction - public short flow_y; /// Flow in pixels in y-sensor direction - public byte quality; /// Optical flow quality / confidence. 0: bad, 255: maximum quality - public float ground_distance; /// Ground distance in meters - }; - - public const byte MAVLINK_MSG_ID_OPTICAL_FLOW_LEN = 18; - public const byte MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_param_request_list_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - - public const byte MAVLINK_MSG_ID_PARAM_REQUEST_LIST_LEN = 2; - public const byte MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_param_request_read_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=15)] - public byte[] param_id; /// Onboard parameter id - public short param_index; /// Parameter index. Send -1 to use the param ID field as identifier - }; - - public const byte MAVLINK_MSG_ID_PARAM_REQUEST_READ_LEN = 19; - public const byte MAVLINK_MSG_ID_PARAM_SET = 23; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_param_set_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=15)] - public byte[] param_id; /// Onboard parameter id - public float param_value; /// Onboard parameter value - }; - - public const byte MAVLINK_MSG_ID_PARAM_SET_LEN = 21; - public const byte MAVLINK_MSG_ID_PARAM_VALUE = 22; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_param_value_t - { - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=15)] - public byte[] param_id; /// Onboard parameter id - public float param_value; /// Onboard parameter value - public ushort param_count; /// Total number of onboard parameters - public ushort param_index; /// Index of this onboard parameter - }; - - public const byte MAVLINK_MSG_ID_PARAM_VALUE_LEN = 23; - public const byte MAVLINK_MSG_ID_PING = 3; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_ping_t - { - public uint seq; /// PING sequence - public byte target_system; /// 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system - public byte target_component; /// 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system - public ulong time; /// Unix timestamp in microseconds - }; - - public const byte MAVLINK_MSG_ID_PING_LEN = 14; - public const byte MAVLINK_MSG_ID_POSITION_TARGET = 63; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_position_target_t - { - public float x; /// x position - public float y; /// y position - public float z; /// z position - public float yaw; /// yaw orientation in radians, 0 = NORTH - }; + public const string MAVLINK_BUILD_DATE = "Wed Apr 4 18:13:05 2012"; + public const string MAVLINK_WIRE_PROTOCOL_VERSION = "0.9"; + public const int MAVLINK_MAX_DIALECT_PAYLOAD_SIZE = 42; + + public const int MAVLINK_LITTLE_ENDIAN = 1; + public const int MAVLINK_BIG_ENDIAN = 0; + + public const byte MAVLINK_STX = 85; + + public const byte MAVLINK_ENDIAN = MAVLINK_BIG_ENDIAN; + + public const bool MAVLINK_ALIGNED_FIELDS = (0 == 1); + + public const byte MAVLINK_CRC_EXTRA = 0; + + public const bool MAVLINK_NEED_BYTE_SWAP = (MAVLINK_ENDIAN == MAVLINK_LITTLE_ENDIAN); + + public byte[] MAVLINK_MESSAGE_LENGTHS = new byte[] {3, 4, 8, 14, 8, 28, 3, 32, 0, 2, 3, 2, 2, 0, 0, 0, 0, 0, 0, 0, 19, 2, 23, 21, 0, 37, 26, 101, 26, 16, 32, 32, 37, 32, 11, 17, 17, 16, 18, 36, 4, 4, 2, 2, 4, 2, 2, 3, 14, 12, 18, 16, 8, 27, 25, 18, 18, 24, 24, 0, 0, 0, 26, 16, 36, 5, 6, 56, 26, 21, 18, 0, 0, 18, 20, 20, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 8, 4, 12, 15, 13, 6, 15, 14, 0, 12, 3, 8, 28, 36, 3, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 14, 14, 51, 5}; + + public byte[] MAVLINK_MESSAGE_CRCS = new byte[] {72, 39, 190, 92, 191, 217, 104, 119, 0, 219, 60, 186, 10, 0, 0, 0, 0, 0, 0, 0, 89, 159, 162, 121, 0, 149, 222, 110, 179, 136, 66, 126, 185, 147, 112, 252, 162, 215, 229, 128, 9, 106, 101, 213, 4, 229, 21, 214, 215, 14, 206, 50, 157, 126, 108, 213, 95, 5, 127, 0, 0, 0, 57, 126, 130, 119, 193, 191, 236, 158, 143, 0, 0, 104, 123, 131, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 29, 208, 188, 118, 242, 19, 97, 233, 0, 18, 68, 136, 127, 42, 21, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 224, 60, 106, 7}; + + public Type[] MAVLINK_MESSAGE_INFO = new Type[] {typeof( mavlink_heartbeat_t ), typeof( mavlink_boot_t ), typeof( mavlink_system_time_t ), typeof( mavlink_ping_t ), typeof( mavlink_system_time_utc_t ), typeof( mavlink_change_operator_control_t ), typeof( mavlink_change_operator_control_ack_t ), typeof( mavlink_auth_key_t ), null, typeof( mavlink_action_ack_t ), typeof( mavlink_action_t ), typeof( mavlink_set_mode_t ), typeof( mavlink_set_nav_mode_t ), null, null, null, null, null, null, null, typeof( mavlink_param_request_read_t ), typeof( mavlink_param_request_list_t ), typeof( mavlink_param_value_t ), typeof( mavlink_param_set_t ), null, typeof( mavlink_gps_raw_int_t ), typeof( mavlink_scaled_imu_t ), typeof( mavlink_gps_status_t ), typeof( mavlink_raw_imu_t ), typeof( mavlink_raw_pressure_t ), typeof( mavlink_attitude_t ), typeof( mavlink_local_position_t ), typeof( mavlink_gps_raw_t ), typeof( mavlink_global_position_t ), typeof( mavlink_sys_status_t ), typeof( mavlink_rc_channels_raw_t ), typeof( mavlink_rc_channels_scaled_t ), typeof( mavlink_servo_output_raw_t ), typeof( mavlink_scaled_pressure_t ), typeof( mavlink_waypoint_t ), typeof( mavlink_waypoint_request_t ), typeof( mavlink_waypoint_set_current_t ), typeof( mavlink_waypoint_current_t ), typeof( mavlink_waypoint_request_list_t ), typeof( mavlink_waypoint_count_t ), typeof( mavlink_waypoint_clear_all_t ), typeof( mavlink_waypoint_reached_t ), typeof( mavlink_waypoint_ack_t ), typeof( mavlink_gps_set_global_origin_t ), typeof( mavlink_gps_local_origin_set_t ), typeof( mavlink_local_position_setpoint_set_t ), typeof( mavlink_local_position_setpoint_t ), typeof( mavlink_control_status_t ), typeof( mavlink_safety_set_allowed_area_t ), typeof( mavlink_safety_allowed_area_t ), typeof( mavlink_set_roll_pitch_yaw_thrust_t ), typeof( mavlink_set_roll_pitch_yaw_speed_thrust_t ), typeof( mavlink_roll_pitch_yaw_thrust_setpoint_t ), typeof( mavlink_roll_pitch_yaw_speed_thrust_setpoint_t ), null, null, null, typeof( mavlink_nav_controller_output_t ), typeof( mavlink_position_target_t ), typeof( mavlink_state_correction_t ), typeof( mavlink_set_altitude_t ), typeof( mavlink_request_data_stream_t ), typeof( mavlink_hil_state_t ), typeof( mavlink_hil_controls_t ), typeof( mavlink_manual_control_t ), typeof( mavlink_rc_channels_override_t ), null, null, typeof( mavlink_global_position_int_t ), typeof( mavlink_vfr_hud_t ), typeof( mavlink_command_t ), typeof( mavlink_command_ack_t ), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_optical_flow_t ), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_object_detection_event_t ), null, null, null, null, null, null, null, null, null, typeof( mavlink_sensor_offsets_t ), typeof( mavlink_set_mag_offsets_t ), typeof( mavlink_meminfo_t ), typeof( mavlink_ap_adc_t ), typeof( mavlink_digicam_configure_t ), typeof( mavlink_digicam_control_t ), typeof( mavlink_mount_configure_t ), typeof( mavlink_mount_control_t ), typeof( mavlink_mount_status_t ), null, typeof( mavlink_fence_point_t ), typeof( mavlink_fence_fetch_point_t ), typeof( mavlink_fence_status_t ), typeof( mavlink_ahrs_t ), typeof( mavlink_simstate_t ), typeof( mavlink_hwstatus_t ), typeof( mavlink_radio_t ), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, typeof( mavlink_debug_vect_t ), typeof( mavlink_named_value_float_t ), typeof( mavlink_named_value_int_t ), typeof( mavlink_statustext_t ), typeof( mavlink_debug_t )}; + + public const byte MAVLINK_VERSION = 2; + + + /** @brief Enumeration of possible mount operation modes */ + public enum MAV_MOUNT_MODE + { + ///<summary> Load and keep safe position (Roll,Pitch,Yaw) from EEPROM and stop stabilization | </summary> + RETRACT=0, + ///<summary> Load and keep neutral position (Roll,Pitch,Yaw) from EEPROM. | </summary> + NEUTRAL=1, + ///<summary> Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | </summary> + MAVLINK_TARGETING=2, + ///<summary> Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | </summary> + RC_TARGETING=3, + ///<summary> Load neutral position and start to point to Lat,Lon,Alt | </summary> + GPS_POINT=4, + ///<summary> | </summary> + ENUM_END=5, + + }; + + /** @brief */ + public enum MAV_CMD + { + ///<summary> Navigate to waypoint. |Hold time in decimal seconds. (ignored by fixed wing, time to stay at waypoint for rotary wing)| Acceptance radius in meters (if the sphere with this radius is hit, the waypoint counts as reached)| 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.| Desired yaw angle at waypoint (rotary wing)| Latitude| Longitude| Altitude| </summary> + WAYPOINT=16, + ///<summary> Loiter around this waypoint an unlimited amount of time |Empty| Empty| Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| </summary> + LOITER_UNLIM=17, + ///<summary> Loiter around this waypoint for X turns |Turns| Empty| Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| </summary> + LOITER_TURNS=18, + ///<summary> Loiter around this waypoint for X seconds |Seconds (decimal)| Empty| Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise| Desired yaw angle.| Latitude| Longitude| Altitude| </summary> + LOITER_TIME=19, + ///<summary> Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + RETURN_TO_LAUNCH=20, + ///<summary> Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| </summary> + LAND=21, + ///<summary> Takeoff from ground / hand |Minimum pitch (if airspeed sensor present), desired pitch without sensor| Empty| Empty| Yaw angle (if magnetometer present), ignored without magnetometer| Latitude| Longitude| Altitude| </summary> + TAKEOFF=22, + ///<summary> Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. |Region of intereset mode. (see MAV_ROI enum)| Waypoint index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple ROI's)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| </summary> + ROI=80, + ///<summary> Control autonomous path planning on the MAV. |0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning| 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid| Empty| Yaw angle at goal, in compass degrees, [0..360]| Latitude/X of goal| Longitude/Y of goal| Altitude/Z of goal| </summary> + PATHPLANNING=81, + ///<summary> NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + LAST=95, + ///<summary> Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + CONDITION_DELAY=112, + ///<summary> Ascend/descend at rate. Delay mission state machine until desired altitude reached. |Descent / Ascend rate (m/s)| Empty| Empty| Empty| Empty| Empty| Finish Altitude| </summary> + CONDITION_CHANGE_ALT=113, + ///<summary> Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + CONDITION_DISTANCE=114, + ///<summary> Reach a certain target angle. |target angle: [0-360], 0 is north| speed during yaw change:[deg per second]| direction: negative: counter clockwise, positive: clockwise [-1,1]| relative offset or absolute angle: [ 1,0]| Empty| Empty| Empty| </summary> + CONDITION_YAW=115, + ///<summary> NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + CONDITION_LAST=159, + ///<summary> Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + DO_SET_MODE=176, + ///<summary> Jump to the desired command in the mission list. Repeat this action only the specified number of times |Sequence number| Repeat count| Empty| Empty| Empty| Empty| Empty| </summary> + DO_JUMP=177, + ///<summary> Change speed and/or throttle set points. |Speed type (0=Airspeed, 1=Ground Speed)| Speed (m/s, -1 indicates no change)| Throttle ( Percent, -1 indicates no change)| Empty| Empty| Empty| Empty| </summary> + DO_CHANGE_SPEED=178, + ///<summary> Changes the home location either to the current location or a specified location. |Use current (1=use current location, 0=use specified location)| Empty| Empty| Empty| Latitude| Longitude| Altitude| </summary> + DO_SET_HOME=179, + ///<summary> Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. |Parameter number| Parameter value| Empty| Empty| Empty| Empty| Empty| </summary> + DO_SET_PARAMETER=180, + ///<summary> Set a relay to a condition. |Relay number| Setting (1=on, 0=off, others possible depending on system hardware)| Empty| Empty| Empty| Empty| Empty| </summary> + DO_SET_RELAY=181, + ///<summary> Cycle a relay on and off for a desired number of cyles with a desired period. |Relay number| Cycle count| Cycle time (seconds, decimal)| Empty| Empty| Empty| Empty| </summary> + DO_REPEAT_RELAY=182, + ///<summary> Set a servo to a desired PWM value. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Empty| Empty| Empty| Empty| Empty| </summary> + DO_SET_SERVO=183, + ///<summary> Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Cycle count| Cycle time (seconds)| Empty| Empty| Empty| </summary> + DO_REPEAT_SERVO=184, + ///<summary> Control onboard camera capturing. |Camera ID (-1 for all)| Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw| Transmission mode: 0: video stream, >0: single images every n seconds (decimal)| Recording: 0: disabled, 1: enabled compressed, 2: enabled raw| Empty| Empty| Empty| </summary> + DO_CONTROL_VIDEO=200, + ///<summary> Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various devices such as cameras. |Region of interest mode. (see MAV_ROI enum)| Waypoint index/ target ID. (see MAV_ROI enum)| ROI index (allows a vehicle to manage multiple cameras etc.)| Empty| x the location of the fixed ROI (see MAV_FRAME)| y| z| </summary> + DO_SET_ROI=201, + ///<summary> Mission command to configure an on-board camera controller system. |Modes: P, TV, AV, M, Etc| Shutter speed: Divisor number for one second| Aperture: F stop number| ISO number e.g. 80, 100, 200, Etc| Exposure type enumerator| Command Identity| Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)| </summary> + DO_DIGICAM_CONFIGURE=202, + ///<summary> Mission command to control an on-board camera controller system. |Session control e.g. show/hide lens| Zoom's absolute position| Zooming step value to offset zoom from the current position| Focus Locking, Unlocking or Re-locking| Shooting Command| Command Identity| Empty| </summary> + DO_DIGICAM_CONTROL=203, + ///<summary> Mission command to configure a camera or antenna mount |Mount operation mode (see MAV_MOUNT_MODE enum)| stabilize roll? (1 = yes, 0 = no)| stabilize pitch? (1 = yes, 0 = no)| stabilize yaw? (1 = yes, 0 = no)| Empty| Empty| Empty| </summary> + DO_MOUNT_CONFIGURE=204, + ///<summary> Mission command to control a camera or antenna mount |pitch(deg*100) or lat, depending on mount mode.| roll(deg*100) or lon depending on mount mode| yaw(deg*100) or alt (in cm) depending on mount mode| Empty| Empty| Empty| Empty| </summary> + DO_MOUNT_CONTROL=205, + ///<summary> NOP - This command is only used to mark the upper limit of the DO commands in the enumeration |Empty| Empty| Empty| Empty| Empty| Empty| Empty| </summary> + DO_LAST=240, + ///<summary> Trigger calibration. This command will be only accepted if in pre-flight mode. |Gyro calibration: 0: no, 1: yes| Magnetometer calibration: 0: no, 1: yes| Ground pressure: 0: no, 1: yes| Radio calibration: 0: no, 1: yes| Empty| Empty| Empty| </summary> + PREFLIGHT_CALIBRATION=241, + ///<summary> Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. |Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM| Reserved| Reserved| Empty| Empty| Empty| </summary> + PREFLIGHT_STORAGE=245, + ///<summary> | </summary> + ENUM_END=246, + + }; + + /** @brief */ + public enum FENCE_ACTION + { + ///<summary> Disable fenced mode | </summary> + NONE=0, + ///<summary> Switched to guided mode to return point (fence point 0) | </summary> + GUIDED=1, + ///<summary> | </summary> + ENUM_END=2, + + }; + + /** @brief */ + public enum FENCE_BREACH + { + ///<summary> No last fence breach | </summary> + NONE=0, + ///<summary> Breached minimum altitude | </summary> + MINALT=1, + ///<summary> Breached minimum altitude | </summary> + MAXALT=2, + ///<summary> Breached fence boundary | </summary> + BOUNDARY=3, + ///<summary> | </summary> + ENUM_END=4, + + }; + + + + public const byte MAVLINK_MSG_ID_SENSOR_OFFSETS = 150; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=42)] + public struct mavlink_sensor_offsets_t + { + /// <summary> magnetometer X offset </summary> + public Int16 mag_ofs_x; + /// <summary> magnetometer Y offset </summary> + public Int16 mag_ofs_y; + /// <summary> magnetometer Z offset </summary> + public Int16 mag_ofs_z; + /// <summary> magnetic declination (radians) </summary> + public Single mag_declination; + /// <summary> raw pressure from barometer </summary> + public Int32 raw_press; + /// <summary> raw temperature from barometer </summary> + public Int32 raw_temp; + /// <summary> gyro X calibration </summary> + public Single gyro_cal_x; + /// <summary> gyro Y calibration </summary> + public Single gyro_cal_y; + /// <summary> gyro Z calibration </summary> + public Single gyro_cal_z; + /// <summary> accel X calibration </summary> + public Single accel_cal_x; + /// <summary> accel Y calibration </summary> + public Single accel_cal_y; + /// <summary> accel Z calibration </summary> + public Single accel_cal_z; + + }; + + + public const byte MAVLINK_MSG_ID_SET_MAG_OFFSETS = 151; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=8)] + public struct mavlink_set_mag_offsets_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> magnetometer X offset </summary> + public Int16 mag_ofs_x; + /// <summary> magnetometer Y offset </summary> + public Int16 mag_ofs_y; + /// <summary> magnetometer Z offset </summary> + public Int16 mag_ofs_z; + + }; + + + public const byte MAVLINK_MSG_ID_MEMINFO = 152; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_meminfo_t + { + /// <summary> heap top </summary> + public UInt16 brkval; + /// <summary> free memory </summary> + public UInt16 freemem; + + }; - public const byte MAVLINK_MSG_ID_POSITION_TARGET_LEN = 16; - public const byte MAVLINK_MSG_ID_RAW_IMU = 28; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_raw_imu_t - { - public ulong usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public short xacc; /// X acceleration (raw) - public short yacc; /// Y acceleration (raw) - public short zacc; /// Z acceleration (raw) - public short xgyro; /// Angular speed around X axis (raw) - public short ygyro; /// Angular speed around Y axis (raw) - public short zgyro; /// Angular speed around Z axis (raw) - public short xmag; /// X Magnetic field (raw) - public short ymag; /// Y Magnetic field (raw) - public short zmag; /// Z Magnetic field (raw) - }; - public const byte MAVLINK_MSG_ID_RAW_IMU_LEN = 26; - public const byte MAVLINK_MSG_ID_RAW_PRESSURE = 29; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_raw_pressure_t - { - public ulong usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public short press_abs; /// Absolute pressure (raw) - public short press_diff1; /// Differential pressure 1 (raw) - public short press_diff2; /// Differential pressure 2 (raw) - public short temperature; /// Raw Temperature measurement (raw) - }; + public const byte MAVLINK_MSG_ID_AP_ADC = 153; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=12)] + public struct mavlink_ap_adc_t + { + /// <summary> ADC output 1 </summary> + public UInt16 adc1; + /// <summary> ADC output 2 </summary> + public UInt16 adc2; + /// <summary> ADC output 3 </summary> + public UInt16 adc3; + /// <summary> ADC output 4 </summary> + public UInt16 adc4; + /// <summary> ADC output 5 </summary> + public UInt16 adc5; + /// <summary> ADC output 6 </summary> + public UInt16 adc6; + + }; + + + public const byte MAVLINK_MSG_ID_DIGICAM_CONFIGURE = 154; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=15)] + public struct mavlink_digicam_configure_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore) </summary> + public byte mode; + /// <summary> Divisor number //e.g. 1000 means 1/1000 (0 means ignore) </summary> + public UInt16 shutter_speed; + /// <summary> F stop number x 10 //e.g. 28 means 2.8 (0 means ignore) </summary> + public byte aperture; + /// <summary> ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore) </summary> + public byte iso; + /// <summary> Exposure type enumeration from 1 to N (0 means ignore) </summary> + public byte exposure_type; + /// <summary> Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once </summary> + public byte command_id; + /// <summary> Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) </summary> + public byte engine_cut_off; + /// <summary> Extra parameters enumeration (0 means ignore) </summary> + public byte extra_param; + /// <summary> Correspondent value to given extra_param </summary> + public Single extra_value; + + }; + + + public const byte MAVLINK_MSG_ID_DIGICAM_CONTROL = 155; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=13)] + public struct mavlink_digicam_control_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> 0: stop, 1: start or keep it up //Session control e.g. show/hide lens </summary> + public byte session; + /// <summary> 1 to N //Zoom's absolute position (0 means ignore) </summary> + public byte zoom_pos; + /// <summary> -100 to 100 //Zooming step value to offset zoom from the current position </summary> + public byte zoom_step; + /// <summary> 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus </summary> + public byte focus_lock; + /// <summary> 0: ignore, 1: shot or start filming </summary> + public byte shot; + /// <summary> Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once </summary> + public byte command_id; + /// <summary> Extra parameters enumeration (0 means ignore) </summary> + public byte extra_param; + /// <summary> Correspondent value to given extra_param </summary> + public Single extra_value; + + }; + + + public const byte MAVLINK_MSG_ID_MOUNT_CONFIGURE = 156; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=6)] + public struct mavlink_mount_configure_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> mount operating mode (see MAV_MOUNT_MODE enum) </summary> + public byte mount_mode; + /// <summary> (1 = yes, 0 = no) </summary> + public byte stab_roll; + /// <summary> (1 = yes, 0 = no) </summary> + public byte stab_pitch; + /// <summary> (1 = yes, 0 = no) </summary> + public byte stab_yaw; + + }; + + + public const byte MAVLINK_MSG_ID_MOUNT_CONTROL = 157; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=15)] + public struct mavlink_mount_control_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> pitch(deg*100) or lat, depending on mount mode </summary> + public Int32 input_a; + /// <summary> roll(deg*100) or lon depending on mount mode </summary> + public Int32 input_b; + /// <summary> yaw(deg*100) or alt (in cm) depending on mount mode </summary> + public Int32 input_c; + /// <summary> if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING) </summary> + public byte save_position; + + }; + + + public const byte MAVLINK_MSG_ID_MOUNT_STATUS = 158; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=14)] + public struct mavlink_mount_status_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> pitch(deg*100) or lat, depending on mount mode </summary> + public Int32 pointing_a; + /// <summary> roll(deg*100) or lon depending on mount mode </summary> + public Int32 pointing_b; + /// <summary> yaw(deg*100) or alt (in cm) depending on mount mode </summary> + public Int32 pointing_c; + + }; + + + public const byte MAVLINK_MSG_ID_FENCE_POINT = 160; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=12)] + public struct mavlink_fence_point_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> point index (first point is 1, 0 is for return point) </summary> + public byte idx; + /// <summary> total number of points (for sanity checking) </summary> + public byte count; + /// <summary> Latitude of point </summary> + public Single lat; + /// <summary> Longitude of point </summary> + public Single lng; + + }; + + + public const byte MAVLINK_MSG_ID_FENCE_FETCH_POINT = 161; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_fence_fetch_point_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> point index (first point is 1, 0 is for return point) </summary> + public byte idx; + + }; + + + public const byte MAVLINK_MSG_ID_FENCE_STATUS = 162; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=8)] + public struct mavlink_fence_status_t + { + /// <summary> 0 if currently inside fence, 1 if outside </summary> + public byte breach_status; + /// <summary> number of fence breaches </summary> + public UInt16 breach_count; + /// <summary> last breach type (see FENCE_BREACH_* enum) </summary> + public byte breach_type; + /// <summary> time of last breach in milliseconds since boot </summary> + public UInt32 breach_time; + + }; + + + public const byte MAVLINK_MSG_ID_AHRS = 163; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=28)] + public struct mavlink_ahrs_t + { + /// <summary> X gyro drift estimate rad/s </summary> + public Single omegaIx; + /// <summary> Y gyro drift estimate rad/s </summary> + public Single omegaIy; + /// <summary> Z gyro drift estimate rad/s </summary> + public Single omegaIz; + /// <summary> average accel_weight </summary> + public Single accel_weight; + /// <summary> average renormalisation value </summary> + public Single renorm_val; + /// <summary> average error_roll_pitch value </summary> + public Single error_rp; + /// <summary> average error_yaw value </summary> + public Single error_yaw; + + }; + + + public const byte MAVLINK_MSG_ID_SIMSTATE = 164; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=36)] + public struct mavlink_simstate_t + { + /// <summary> Roll angle (rad) </summary> + public Single roll; + /// <summary> Pitch angle (rad) </summary> + public Single pitch; + /// <summary> Yaw angle (rad) </summary> + public Single yaw; + /// <summary> X acceleration m/s/s </summary> + public Single xacc; + /// <summary> Y acceleration m/s/s </summary> + public Single yacc; + /// <summary> Z acceleration m/s/s </summary> + public Single zacc; + /// <summary> Angular speed around X axis rad/s </summary> + public Single xgyro; + /// <summary> Angular speed around Y axis rad/s </summary> + public Single ygyro; + /// <summary> Angular speed around Z axis rad/s </summary> + public Single zgyro; + + }; + + + public const byte MAVLINK_MSG_ID_HWSTATUS = 165; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_hwstatus_t + { + /// <summary> board voltage (mV) </summary> + public UInt16 Vcc; + /// <summary> I2C error count </summary> + public byte I2Cerr; + + }; - public const byte MAVLINK_MSG_ID_RAW_PRESSURE_LEN = 16; - public const byte MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_rc_channels_override_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public ushort chan1_raw; /// RC channel 1 value, in microseconds - public ushort chan2_raw; /// RC channel 2 value, in microseconds - public ushort chan3_raw; /// RC channel 3 value, in microseconds - public ushort chan4_raw; /// RC channel 4 value, in microseconds - public ushort chan5_raw; /// RC channel 5 value, in microseconds - public ushort chan6_raw; /// RC channel 6 value, in microseconds - public ushort chan7_raw; /// RC channel 7 value, in microseconds - public ushort chan8_raw; /// RC channel 8 value, in microseconds - }; - public const byte MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE_LEN = 18; - public const byte MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_rc_channels_raw_t - { - public ushort chan1_raw; /// RC channel 1 value, in microseconds - public ushort chan2_raw; /// RC channel 2 value, in microseconds - public ushort chan3_raw; /// RC channel 3 value, in microseconds - public ushort chan4_raw; /// RC channel 4 value, in microseconds - public ushort chan5_raw; /// RC channel 5 value, in microseconds - public ushort chan6_raw; /// RC channel 6 value, in microseconds - public ushort chan7_raw; /// RC channel 7 value, in microseconds - public ushort chan8_raw; /// RC channel 8 value, in microseconds - public byte rssi; /// Receive signal strength indicator, 0: 0%, 255: 100% - }; + public const byte MAVLINK_MSG_ID_RADIO = 166; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=9)] + public struct mavlink_radio_t + { + /// <summary> local signal strength </summary> + public byte rssi; + /// <summary> remote signal strength </summary> + public byte remrssi; + /// <summary> how full the tx buffer is as a percentage </summary> + public byte txbuf; + /// <summary> receive errors </summary> + public UInt16 rxerrors; + /// <summary> serial errors </summary> + public UInt16 serrors; + /// <summary> count of error corrected packets </summary> + public UInt16 fixedp; + + }; + + + public const byte MAVLINK_MSG_ID_HEARTBEAT = 0; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_heartbeat_t + { + /// <summary> Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) </summary> + public byte type; + /// <summary> Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM </summary> + public byte autopilot; + /// <summary> MAVLink version </summary> + public byte mavlink_version; + + }; + + + public const byte MAVLINK_MSG_ID_BOOT = 1; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_boot_t + { + /// <summary> The onboard software version </summary> + public UInt32 version; + + }; - public const byte MAVLINK_MSG_ID_RC_CHANNELS_RAW_LEN = 17; - public const byte MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 36; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_rc_channels_scaled_t - { - public short chan1_scaled; /// RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan2_scaled; /// RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan3_scaled; /// RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan4_scaled; /// RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan5_scaled; /// RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan6_scaled; /// RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan7_scaled; /// RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public short chan8_scaled; /// RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - public byte rssi; /// Receive signal strength indicator, 0: 0%, 255: 100% - }; - public const byte MAVLINK_MSG_ID_RC_CHANNELS_SCALED_LEN = 17; - public const byte MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_request_data_stream_t - { - public byte target_system; /// The target requested to send the message stream. - public byte target_component; /// The target requested to send the message stream. - public byte req_stream_id; /// The ID of the requested message type - public ushort req_message_rate; /// Update rate in Hertz - public byte start_stop; /// 1 to start sending, 0 to stop sending. - }; + public const byte MAVLINK_MSG_ID_SYSTEM_TIME = 2; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=8)] + public struct mavlink_system_time_t + { + /// <summary> Timestamp of the master clock in microseconds since UNIX epoch. </summary> + public UInt64 time_usec; + + }; - public const byte MAVLINK_MSG_ID_REQUEST_DATA_STREAM_LEN = 6; - public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT = 58; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_roll_pitch_yaw_speed_thrust_setpoint_t - { - public ulong time_us; /// Timestamp in micro seconds since unix epoch - public float roll_speed; /// Desired roll angular speed in rad/s - public float pitch_speed; /// Desired pitch angular speed in rad/s - public float yaw_speed; /// Desired yaw angular speed in rad/s - public float thrust; /// Collective thrust, normalized to 0 .. 1 - }; - public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT_LEN = 24; - public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT = 57; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_roll_pitch_yaw_thrust_setpoint_t - { - public ulong time_us; /// Timestamp in micro seconds since unix epoch - public float roll; /// Desired roll angle in radians - public float pitch; /// Desired pitch angle in radians - public float yaw; /// Desired yaw angle in radians - public float thrust; /// Collective thrust, normalized to 0 .. 1 - }; + public const byte MAVLINK_MSG_ID_PING = 3; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=14)] + public struct mavlink_ping_t + { + /// <summary> PING sequence </summary> + public UInt32 seq; + /// <summary> 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system </summary> + public byte target_system; + /// <summary> 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system </summary> + public byte target_component; + /// <summary> Unix timestamp in microseconds </summary> + public UInt64 time; + + }; + + + public const byte MAVLINK_MSG_ID_SYSTEM_TIME_UTC = 4; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=8)] + public struct mavlink_system_time_utc_t + { + /// <summary> GPS UTC date ddmmyy </summary> + public UInt32 utc_date; + /// <summary> GPS UTC time hhmmss </summary> + public UInt32 utc_time; + + }; - public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT_LEN = 24; - public const byte MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 54; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_safety_allowed_area_t - { - public byte frame; /// Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - public float p1x; /// x position 1 / Latitude 1 - public float p1y; /// y position 1 / Longitude 1 - public float p1z; /// z position 1 / Altitude 1 - public float p2x; /// x position 2 / Latitude 2 - public float p2y; /// y position 2 / Longitude 2 - public float p2z; /// z position 2 / Altitude 2 - }; - public const byte MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA_LEN = 25; - public const byte MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 53; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_safety_set_allowed_area_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte frame; /// Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - public float p1x; /// x position 1 / Latitude 1 - public float p1y; /// y position 1 / Longitude 1 - public float p1z; /// z position 1 / Altitude 1 - public float p2x; /// x position 2 / Latitude 2 - public float p2y; /// y position 2 / Longitude 2 - public float p2z; /// z position 2 / Altitude 2 - }; + public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=28)] + public struct mavlink_change_operator_control_t + { + /// <summary> System the GCS requests control for </summary> + public byte target_system; + /// <summary> 0: request control of this MAV, 1: Release control of this MAV </summary> + public byte control_request; + /// <summary> 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. </summary> + public byte version; + /// <summary> Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=25)] + public string passkey; + + }; + + + public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_change_operator_control_ack_t + { + /// <summary> ID of the GCS this message </summary> + public byte gcs_system_id; + /// <summary> 0: request control of this MAV, 1: Release control of this MAV </summary> + public byte control_request; + /// <summary> 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control </summary> + public byte ack; + + }; + + + public const byte MAVLINK_MSG_ID_AUTH_KEY = 7; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=32)] + public struct mavlink_auth_key_t + { + /// <summary> key </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=32)] + public string key; + + }; - public const byte MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA_LEN = 27; - public const byte MAVLINK_MSG_ID_SCALED_IMU = 26; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_scaled_imu_t - { - public ulong usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public short xacc; /// X acceleration (mg) - public short yacc; /// Y acceleration (mg) - public short zacc; /// Z acceleration (mg) - public short xgyro; /// Angular speed around X axis (millirad /sec) - public short ygyro; /// Angular speed around Y axis (millirad /sec) - public short zgyro; /// Angular speed around Z axis (millirad /sec) - public short xmag; /// X Magnetic field (milli tesla) - public short ymag; /// Y Magnetic field (milli tesla) - public short zmag; /// Z Magnetic field (milli tesla) - }; - public const byte MAVLINK_MSG_ID_SCALED_IMU_LEN = 26; - public const byte MAVLINK_MSG_ID_SCALED_PRESSURE = 38; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_scaled_pressure_t - { - public ulong usec; /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) - public float press_abs; /// Absolute pressure (hectopascal) - public float press_diff; /// Differential pressure 1 (hectopascal) - public short temperature; /// Temperature measurement (0.01 degrees celsius) - }; + public const byte MAVLINK_MSG_ID_ACTION_ACK = 9; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_action_ack_t + { + /// <summary> The action id </summary> + public byte action; + /// <summary> 0: Action DENIED, 1: Action executed </summary> + public byte result; + + }; - public const byte MAVLINK_MSG_ID_SCALED_PRESSURE_LEN = 18; - public const byte MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 37; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_servo_output_raw_t - { - public ushort servo1_raw; /// Servo output 1 value, in microseconds - public ushort servo2_raw; /// Servo output 2 value, in microseconds - public ushort servo3_raw; /// Servo output 3 value, in microseconds - public ushort servo4_raw; /// Servo output 4 value, in microseconds - public ushort servo5_raw; /// Servo output 5 value, in microseconds - public ushort servo6_raw; /// Servo output 6 value, in microseconds - public ushort servo7_raw; /// Servo output 7 value, in microseconds - public ushort servo8_raw; /// Servo output 8 value, in microseconds - }; - public const byte MAVLINK_MSG_ID_SERVO_OUTPUT_RAW_LEN = 16; - public const byte MAVLINK_MSG_ID_SET_ALTITUDE = 65; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_altitude_t - { - public byte target; /// The system setting the altitude - public uint mode; /// The new altitude in meters - }; + public const byte MAVLINK_MSG_ID_ACTION = 10; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_action_t + { + /// <summary> The system executing the action </summary> + public byte target; + /// <summary> The component executing the action </summary> + public byte target_component; + /// <summary> The action id </summary> + public byte action; + + }; + + + public const byte MAVLINK_MSG_ID_SET_MODE = 11; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_set_mode_t + { + /// <summary> The system setting the mode </summary> + public byte target; + /// <summary> The new mode </summary> + public byte mode; + + }; - public const byte MAVLINK_MSG_ID_SET_ALTITUDE_LEN = 5; - public const byte MAVLINK_MSG_ID_SET_MODE = 11; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_mode_t - { - public byte target; /// The system setting the mode - public byte mode; /// The new mode - }; - public const byte MAVLINK_MSG_ID_SET_MODE_LEN = 2; - public const byte MAVLINK_MSG_ID_SET_NAV_MODE = 12; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_nav_mode_t - { - public byte target; /// The system setting the mode - public byte nav_mode; /// The new navigation mode - }; + public const byte MAVLINK_MSG_ID_SET_NAV_MODE = 12; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_set_nav_mode_t + { + /// <summary> The system setting the mode </summary> + public byte target; + /// <summary> The new navigation mode </summary> + public byte nav_mode; + + }; - public const byte MAVLINK_MSG_ID_SET_NAV_MODE_LEN = 2; - public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST = 56; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_roll_pitch_yaw_speed_thrust_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public float roll_speed; /// Desired roll angular speed in rad/s - public float pitch_speed; /// Desired pitch angular speed in rad/s - public float yaw_speed; /// Desired yaw angular speed in rad/s - public float thrust; /// Collective thrust, normalized to 0 .. 1 - }; - public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST_LEN = 18; - public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST = 55; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_set_roll_pitch_yaw_thrust_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public float roll; /// Desired roll angle in radians - public float pitch; /// Desired pitch angle in radians - public float yaw; /// Desired yaw angle in radians - public float thrust; /// Collective thrust, normalized to 0 .. 1 - }; + public const byte MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=19)] + public struct mavlink_param_request_read_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Onboard parameter id </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=15)] + public byte[] param_id; + /// <summary> Parameter index. Send -1 to use the param ID field as identifier </summary> + public Int16 param_index; + + }; + + + public const byte MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_param_request_list_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; - public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST_LEN = 18; - public const byte MAVLINK_MSG_ID_STATE_CORRECTION = 64; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_state_correction_t - { - public float xErr; /// x position error - public float yErr; /// y position error - public float zErr; /// z position error - public float rollErr; /// roll error (radians) - public float pitchErr; /// pitch error (radians) - public float yawErr; /// yaw error (radians) - public float vxErr; /// x velocity - public float vyErr; /// y velocity - public float vzErr; /// z velocity - }; - public const byte MAVLINK_MSG_ID_STATE_CORRECTION_LEN = 36; - public const byte MAVLINK_MSG_ID_STATUSTEXT = 254; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_statustext_t - { - public byte severity; /// Severity of status, 0 = info message, 255 = critical fault - [MarshalAs( - UnmanagedType.ByValArray, - SizeConst=50)] - public byte[] text; /// Status text message, without null termination public byteacter - }; + public const byte MAVLINK_MSG_ID_PARAM_VALUE = 22; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=23)] + public struct mavlink_param_value_t + { + /// <summary> Onboard parameter id </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=15)] + public byte[] param_id; + /// <summary> Onboard parameter value </summary> + public Single param_value; + /// <summary> Total number of onboard parameters </summary> + public UInt16 param_count; + /// <summary> Index of this onboard parameter </summary> + public UInt16 param_index; + + }; + + + public const byte MAVLINK_MSG_ID_PARAM_SET = 23; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=21)] + public struct mavlink_param_set_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Onboard parameter id </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=15)] + public byte[] param_id; + /// <summary> Onboard parameter value </summary> + public Single param_value; + + }; + + + public const byte MAVLINK_MSG_ID_GPS_RAW_INT = 25; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=37)] + public struct mavlink_gps_raw_int_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 usec; + /// <summary> 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. </summary> + public byte fix_type; + /// <summary> Latitude in 1E7 degrees </summary> + public Int32 lat; + /// <summary> Longitude in 1E7 degrees </summary> + public Int32 lon; + /// <summary> Altitude in 1E3 meters (millimeters) </summary> + public Int32 alt; + /// <summary> GPS HDOP </summary> + public Single eph; + /// <summary> GPS VDOP </summary> + public Single epv; + /// <summary> GPS ground speed (m/s) </summary> + public Single v; + /// <summary> Compass heading in degrees, 0..360 degrees </summary> + public Single hdg; + + }; + + + public const byte MAVLINK_MSG_ID_SCALED_IMU = 26; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=26)] + public struct mavlink_scaled_imu_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 usec; + /// <summary> X acceleration (mg) </summary> + public Int16 xacc; + /// <summary> Y acceleration (mg) </summary> + public Int16 yacc; + /// <summary> Z acceleration (mg) </summary> + public Int16 zacc; + /// <summary> Angular speed around X axis (millirad /sec) </summary> + public Int16 xgyro; + /// <summary> Angular speed around Y axis (millirad /sec) </summary> + public Int16 ygyro; + /// <summary> Angular speed around Z axis (millirad /sec) </summary> + public Int16 zgyro; + /// <summary> X Magnetic field (milli tesla) </summary> + public Int16 xmag; + /// <summary> Y Magnetic field (milli tesla) </summary> + public Int16 ymag; + /// <summary> Z Magnetic field (milli tesla) </summary> + public Int16 zmag; + + }; + + + public const byte MAVLINK_MSG_ID_GPS_STATUS = 27; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=101)] + public struct mavlink_gps_status_t + { + /// <summary> Number of satellites visible </summary> + public byte satellites_visible; + /// <summary> Global satellite ID </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_prn; + /// <summary> 0: Satellite not used, 1: used for localization </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_used; + /// <summary> Elevation (0: right on top of receiver, 90: on the horizon) of satellite </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_elevation; + /// <summary> Direction of satellite, 0: 0 deg, 255: 360 deg. </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_azimuth; + /// <summary> Signal to noise ratio of satellite </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_snr; + + }; + + + public const byte MAVLINK_MSG_ID_RAW_IMU = 28; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=26)] + public struct mavlink_raw_imu_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 usec; + /// <summary> X acceleration (raw) </summary> + public Int16 xacc; + /// <summary> Y acceleration (raw) </summary> + public Int16 yacc; + /// <summary> Z acceleration (raw) </summary> + public Int16 zacc; + /// <summary> Angular speed around X axis (raw) </summary> + public Int16 xgyro; + /// <summary> Angular speed around Y axis (raw) </summary> + public Int16 ygyro; + /// <summary> Angular speed around Z axis (raw) </summary> + public Int16 zgyro; + /// <summary> X Magnetic field (raw) </summary> + public Int16 xmag; + /// <summary> Y Magnetic field (raw) </summary> + public Int16 ymag; + /// <summary> Z Magnetic field (raw) </summary> + public Int16 zmag; + + }; + + + public const byte MAVLINK_MSG_ID_RAW_PRESSURE = 29; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=16)] + public struct mavlink_raw_pressure_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 usec; + /// <summary> Absolute pressure (raw) </summary> + public Int16 press_abs; + /// <summary> Differential pressure 1 (raw) </summary> + public Int16 press_diff1; + /// <summary> Differential pressure 2 (raw) </summary> + public Int16 press_diff2; + /// <summary> Raw Temperature measurement (raw) </summary> + public Int16 temperature; + + }; + + + public const byte MAVLINK_MSG_ID_SCALED_PRESSURE = 38; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_scaled_pressure_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 usec; + /// <summary> Absolute pressure (hectopascal) </summary> + public Single press_abs; + /// <summary> Differential pressure 1 (hectopascal) </summary> + public Single press_diff; + /// <summary> Temperature measurement (0.01 degrees celsius) </summary> + public Int16 temperature; + + }; + + + public const byte MAVLINK_MSG_ID_ATTITUDE = 30; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=32)] + public struct mavlink_attitude_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 usec; + /// <summary> Roll angle (rad) </summary> + public Single roll; + /// <summary> Pitch angle (rad) </summary> + public Single pitch; + /// <summary> Yaw angle (rad) </summary> + public Single yaw; + /// <summary> Roll angular speed (rad/s) </summary> + public Single rollspeed; + /// <summary> Pitch angular speed (rad/s) </summary> + public Single pitchspeed; + /// <summary> Yaw angular speed (rad/s) </summary> + public Single yawspeed; + + }; + + + public const byte MAVLINK_MSG_ID_LOCAL_POSITION = 31; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=32)] + public struct mavlink_local_position_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 usec; + /// <summary> X Position </summary> + public Single x; + /// <summary> Y Position </summary> + public Single y; + /// <summary> Z Position </summary> + public Single z; + /// <summary> X Speed </summary> + public Single vx; + /// <summary> Y Speed </summary> + public Single vy; + /// <summary> Z Speed </summary> + public Single vz; + + }; + + + public const byte MAVLINK_MSG_ID_GLOBAL_POSITION = 33; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=32)] + public struct mavlink_global_position_t + { + /// <summary> Timestamp (microseconds since unix epoch) </summary> + public UInt64 usec; + /// <summary> Latitude, in degrees </summary> + public Single lat; + /// <summary> Longitude, in degrees </summary> + public Single lon; + /// <summary> Absolute altitude, in meters </summary> + public Single alt; + /// <summary> X Speed (in Latitude direction, positive: going north) </summary> + public Single vx; + /// <summary> Y Speed (in Longitude direction, positive: going east) </summary> + public Single vy; + /// <summary> Z Speed (in Altitude direction, positive: going up) </summary> + public Single vz; + + }; + + + public const byte MAVLINK_MSG_ID_GPS_RAW = 32; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=37)] + public struct mavlink_gps_raw_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 usec; + /// <summary> 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. </summary> + public byte fix_type; + /// <summary> Latitude in degrees </summary> + public Single lat; + /// <summary> Longitude in degrees </summary> + public Single lon; + /// <summary> Altitude in meters </summary> + public Single alt; + /// <summary> GPS HDOP </summary> + public Single eph; + /// <summary> GPS VDOP </summary> + public Single epv; + /// <summary> GPS ground speed </summary> + public Single v; + /// <summary> Compass heading in degrees, 0..360 degrees </summary> + public Single hdg; + + }; + + + public const byte MAVLINK_MSG_ID_SYS_STATUS = 34; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=11)] + public struct mavlink_sys_status_t + { + /// <summary> System mode, see MAV_MODE ENUM in mavlink/include/mavlink_types.h </summary> + public byte mode; + /// <summary> Navigation mode, see MAV_NAV_MODE ENUM </summary> + public byte nav_mode; + /// <summary> System status flag, see MAV_STATUS ENUM </summary> + public byte status; + /// <summary> Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 </summary> + public UInt16 load; + /// <summary> Battery voltage, in millivolts (1 = 1 millivolt) </summary> + public UInt16 vbat; + /// <summary> Remaining battery energy: (0%: 0, 100%: 1000) </summary> + public UInt16 battery_remaining; + /// <summary> Dropped packets (packets that were corrupted on reception on the MAV) </summary> + public UInt16 packet_drop; + + }; + + + public const byte MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=17)] + public struct mavlink_rc_channels_raw_t + { + /// <summary> RC channel 1 value, in microseconds </summary> + public UInt16 chan1_raw; + /// <summary> RC channel 2 value, in microseconds </summary> + public UInt16 chan2_raw; + /// <summary> RC channel 3 value, in microseconds </summary> + public UInt16 chan3_raw; + /// <summary> RC channel 4 value, in microseconds </summary> + public UInt16 chan4_raw; + /// <summary> RC channel 5 value, in microseconds </summary> + public UInt16 chan5_raw; + /// <summary> RC channel 6 value, in microseconds </summary> + public UInt16 chan6_raw; + /// <summary> RC channel 7 value, in microseconds </summary> + public UInt16 chan7_raw; + /// <summary> RC channel 8 value, in microseconds </summary> + public UInt16 chan8_raw; + /// <summary> Receive signal strength indicator, 0: 0%, 255: 100% </summary> + public byte rssi; + + }; + + + public const byte MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 36; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=17)] + public struct mavlink_rc_channels_scaled_t + { + /// <summary> RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan1_scaled; + /// <summary> RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan2_scaled; + /// <summary> RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan3_scaled; + /// <summary> RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan4_scaled; + /// <summary> RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan5_scaled; + /// <summary> RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan6_scaled; + /// <summary> RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan7_scaled; + /// <summary> RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 </summary> + public Int16 chan8_scaled; + /// <summary> Receive signal strength indicator, 0: 0%, 255: 100% </summary> + public byte rssi; + + }; + + + public const byte MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 37; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=16)] + public struct mavlink_servo_output_raw_t + { + /// <summary> Servo output 1 value, in microseconds </summary> + public UInt16 servo1_raw; + /// <summary> Servo output 2 value, in microseconds </summary> + public UInt16 servo2_raw; + /// <summary> Servo output 3 value, in microseconds </summary> + public UInt16 servo3_raw; + /// <summary> Servo output 4 value, in microseconds </summary> + public UInt16 servo4_raw; + /// <summary> Servo output 5 value, in microseconds </summary> + public UInt16 servo5_raw; + /// <summary> Servo output 6 value, in microseconds </summary> + public UInt16 servo6_raw; + /// <summary> Servo output 7 value, in microseconds </summary> + public UInt16 servo7_raw; + /// <summary> Servo output 8 value, in microseconds </summary> + public UInt16 servo8_raw; + + }; + + + public const byte MAVLINK_MSG_ID_WAYPOINT = 39; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=36)] + public struct mavlink_waypoint_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Sequence </summary> + public UInt16 seq; + /// <summary> The coordinate system of the waypoint. see MAV_FRAME in mavlink_types.h </summary> + public byte frame; + /// <summary> The scheduled action for the waypoint. see MAV_COMMAND in common.xml MAVLink specs </summary> + public byte command; + /// <summary> false:0, true:1 </summary> + public byte current; + /// <summary> autocontinue to next wp </summary> + public byte autocontinue; + /// <summary> PARAM1 / For NAV command waypoints: Radius in which the waypoint is accepted as reached, in meters </summary> + public Single param1; + /// <summary> PARAM2 / For NAV command waypoints: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds </summary> + public Single param2; + /// <summary> PARAM3 / For LOITER command waypoints: Orbit to circle around the waypoint, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise. </summary> + public Single param3; + /// <summary> PARAM4 / For NAV and LOITER command waypoints: Yaw orientation in degrees, [0..360] 0 = NORTH </summary> + public Single param4; + /// <summary> PARAM5 / local: x position, global: latitude </summary> + public Single x; + /// <summary> PARAM6 / y position: global: longitude </summary> + public Single y; + /// <summary> PARAM7 / z position: global: altitude </summary> + public Single z; + + }; + + + public const byte MAVLINK_MSG_ID_WAYPOINT_REQUEST = 40; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_waypoint_request_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Sequence </summary> + public UInt16 seq; + + }; + + + public const byte MAVLINK_MSG_ID_WAYPOINT_SET_CURRENT = 41; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_waypoint_set_current_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Sequence </summary> + public UInt16 seq; + + }; + + + public const byte MAVLINK_MSG_ID_WAYPOINT_CURRENT = 42; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_waypoint_current_t + { + /// <summary> Sequence </summary> + public UInt16 seq; + + }; - public const byte MAVLINK_MSG_ID_STATUSTEXT_LEN = 51; - public const byte MAVLINK_MSG_ID_SYSTEM_TIME = 2; - public const byte MAVLINK_MSG_ID_SYSTEM_TIME_UTC = 4; - public const byte MAVLINK_MSG_ID_SYS_STATUS = 34; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_sys_status_t - { - public byte mode; /// System mode, see MAV_MODE ENUM in mavlink/include/mavlink_types.h - public byte nav_mode; /// Navigation mode, see MAV_NAV_MODE ENUM - public byte status; /// System status flag, see MAV_STATUS ENUM - public ushort load; /// Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 - public ushort vbat; /// Battery voltage, in millivolts (1 = 1 millivolt) - public ushort battery_remaining; /// Remaining battery energy: (0%: 0, 100%: 1000) - public ushort packet_drop; /// Dropped packets (packets that were corrupted on reception on the MAV) - }; - public const byte MAVLINK_MSG_ID_SYS_STATUS_LEN = 11; - public const byte MAVLINK_MSG_ID_VFR_HUD = 74; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_vfr_hud_t - { - public float airspeed; /// Current airspeed in m/s - public float groundspeed; /// Current ground speed in m/s - public short heading; /// Current heading in degrees, in compass units (0..360, 0=north) - public ushort throttle; /// Current throttle setting in integer percent, 0 to 100 - public float alt; /// Current altitude (MSL), in meters - public float climb; /// Current climb rate in meters/second - }; + public const byte MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST = 43; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_waypoint_request_list_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; - public const byte MAVLINK_MSG_ID_VFR_HUD_LEN = 20; - public const byte MAVLINK_MSG_ID_WAYPOINT = 39; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_waypoint_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public ushort seq; /// Sequence - public byte frame; /// The coordinate system of the waypoint. see MAV_FRAME in mavlink_types.h - public byte command; /// The scheduled action for the waypoint. see MAV_COMMAND in common.xml MAVLink specs - public byte current; /// false:0, true:1 - public byte autocontinue; /// autocontinue to next wp - public float param1; /// PARAM1 / For NAV command waypoints: Radius in which the waypoint is accepted as reached, in meters - public float param2; /// PARAM2 / For NAV command waypoints: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds - public float param3; /// PARAM3 / For LOITER command waypoints: Orbit to circle around the waypoint, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise. - public float param4; /// PARAM4 / For NAV and LOITER command waypoints: Yaw orientation in degrees, [0..360] 0 = NORTH - public float x; /// PARAM5 / local: x position, global: latitude - public float y; /// PARAM6 / y position: global: longitude - public float z; /// PARAM7 / z position: global: altitude - }; - public const byte MAVLINK_MSG_ID_WAYPOINT_LEN = 36; - public const byte MAVLINK_MSG_ID_WAYPOINT_ACK = 47; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_waypoint_ack_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public byte type; /// 0: OK, 1: Error - }; + public const byte MAVLINK_MSG_ID_WAYPOINT_COUNT = 44; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_waypoint_count_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Number of Waypoints in the Sequence </summary> + public UInt16 count; + + }; + + + public const byte MAVLINK_MSG_ID_WAYPOINT_CLEAR_ALL = 45; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_waypoint_clear_all_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + + }; - public const byte MAVLINK_MSG_ID_WAYPOINT_ACK_LEN = 3; - public const byte MAVLINK_MSG_ID_WAYPOINT_CLEAR_ALL = 45; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_waypoint_clear_all_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; - public const byte MAVLINK_MSG_ID_WAYPOINT_CLEAR_ALL_LEN = 2; - public const byte MAVLINK_MSG_ID_WAYPOINT_COUNT = 44; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_waypoint_count_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public ushort count; /// Number of Waypoints in the Sequence - }; + public const byte MAVLINK_MSG_ID_WAYPOINT_REACHED = 46; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_waypoint_reached_t + { + /// <summary> Sequence </summary> + public UInt16 seq; + + }; - public const byte MAVLINK_MSG_ID_WAYPOINT_COUNT_LEN = 4; - public const byte MAVLINK_MSG_ID_WAYPOINT_CURRENT = 42; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_waypoint_current_t - { - public ushort seq; /// Sequence - }; - public const byte MAVLINK_MSG_ID_WAYPOINT_CURRENT_LEN = 2; - public const byte MAVLINK_MSG_ID_WAYPOINT_REACHED = 46; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_waypoint_reached_t - { - public ushort seq; /// Sequence - }; + public const byte MAVLINK_MSG_ID_WAYPOINT_ACK = 47; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_waypoint_ack_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> 0: OK, 1: Error </summary> + public byte type; + + }; + + + public const byte MAVLINK_MSG_ID_GPS_SET_GLOBAL_ORIGIN = 48; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=14)] + public struct mavlink_gps_set_global_origin_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> global position * 1E7 </summary> + public Int32 latitude; + /// <summary> global position * 1E7 </summary> + public Int32 longitude; + /// <summary> global position * 1000 </summary> + public Int32 altitude; + + }; + + + public const byte MAVLINK_MSG_ID_GPS_LOCAL_ORIGIN_SET = 49; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=12)] + public struct mavlink_gps_local_origin_set_t + { + /// <summary> Latitude (WGS84), expressed as * 1E7 </summary> + public Int32 latitude; + /// <summary> Longitude (WGS84), expressed as * 1E7 </summary> + public Int32 longitude; + /// <summary> Altitude(WGS84), expressed as * 1000 </summary> + public Int32 altitude; + + }; + + + public const byte MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT_SET = 50; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_local_position_setpoint_set_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> x position </summary> + public Single x; + /// <summary> y position </summary> + public Single y; + /// <summary> z position </summary> + public Single z; + /// <summary> Desired yaw angle </summary> + public Single yaw; + + }; + + + public const byte MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT = 51; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=16)] + public struct mavlink_local_position_setpoint_t + { + /// <summary> x position </summary> + public Single x; + /// <summary> y position </summary> + public Single y; + /// <summary> z position </summary> + public Single z; + /// <summary> Desired yaw angle </summary> + public Single yaw; + + }; + + + public const byte MAVLINK_MSG_ID_CONTROL_STATUS = 52; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=8)] + public struct mavlink_control_status_t + { + /// <summary> Position fix: 0: lost, 2: 2D position fix, 3: 3D position fix </summary> + public byte position_fix; + /// <summary> Vision position fix: 0: lost, 1: 2D local position hold, 2: 2D global position fix, 3: 3D global position fix </summary> + public byte vision_fix; + /// <summary> GPS position fix: 0: no reception, 1: Minimum 1 satellite, but no position fix, 2: 2D position fix, 3: 3D position fix </summary> + public byte gps_fix; + /// <summary> Attitude estimation health: 0: poor, 255: excellent </summary> + public byte ahrs_health; + /// <summary> 0: Attitude control disabled, 1: enabled </summary> + public byte control_att; + /// <summary> 0: X, Y position control disabled, 1: enabled </summary> + public byte control_pos_xy; + /// <summary> 0: Z position control disabled, 1: enabled </summary> + public byte control_pos_z; + /// <summary> 0: Yaw angle control disabled, 1: enabled </summary> + public byte control_pos_yaw; + + }; + + + public const byte MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 53; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=27)] + public struct mavlink_safety_set_allowed_area_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. </summary> + public byte frame; + /// <summary> x position 1 / Latitude 1 </summary> + public Single p1x; + /// <summary> y position 1 / Longitude 1 </summary> + public Single p1y; + /// <summary> z position 1 / Altitude 1 </summary> + public Single p1z; + /// <summary> x position 2 / Latitude 2 </summary> + public Single p2x; + /// <summary> y position 2 / Longitude 2 </summary> + public Single p2y; + /// <summary> z position 2 / Altitude 2 </summary> + public Single p2z; + + }; + + + public const byte MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 54; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=25)] + public struct mavlink_safety_allowed_area_t + { + /// <summary> Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. </summary> + public byte frame; + /// <summary> x position 1 / Latitude 1 </summary> + public Single p1x; + /// <summary> y position 1 / Longitude 1 </summary> + public Single p1y; + /// <summary> z position 1 / Altitude 1 </summary> + public Single p1z; + /// <summary> x position 2 / Latitude 2 </summary> + public Single p2x; + /// <summary> y position 2 / Longitude 2 </summary> + public Single p2y; + /// <summary> z position 2 / Altitude 2 </summary> + public Single p2z; + + }; + + + public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_THRUST = 55; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_set_roll_pitch_yaw_thrust_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Desired roll angle in radians </summary> + public Single roll; + /// <summary> Desired pitch angle in radians </summary> + public Single pitch; + /// <summary> Desired yaw angle in radians </summary> + public Single yaw; + /// <summary> Collective thrust, normalized to 0 .. 1 </summary> + public Single thrust; + + }; + + + public const byte MAVLINK_MSG_ID_SET_ROLL_PITCH_YAW_SPEED_THRUST = 56; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_set_roll_pitch_yaw_speed_thrust_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> Desired roll angular speed in rad/s </summary> + public Single roll_speed; + /// <summary> Desired pitch angular speed in rad/s </summary> + public Single pitch_speed; + /// <summary> Desired yaw angular speed in rad/s </summary> + public Single yaw_speed; + /// <summary> Collective thrust, normalized to 0 .. 1 </summary> + public Single thrust; + + }; + + + public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT = 57; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=24)] + public struct mavlink_roll_pitch_yaw_thrust_setpoint_t + { + /// <summary> Timestamp in micro seconds since unix epoch </summary> + public UInt64 time_us; + /// <summary> Desired roll angle in radians </summary> + public Single roll; + /// <summary> Desired pitch angle in radians </summary> + public Single pitch; + /// <summary> Desired yaw angle in radians </summary> + public Single yaw; + /// <summary> Collective thrust, normalized to 0 .. 1 </summary> + public Single thrust; + + }; + + + public const byte MAVLINK_MSG_ID_ROLL_PITCH_YAW_SPEED_THRUST_SETPOINT = 58; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=24)] + public struct mavlink_roll_pitch_yaw_speed_thrust_setpoint_t + { + /// <summary> Timestamp in micro seconds since unix epoch </summary> + public UInt64 time_us; + /// <summary> Desired roll angular speed in rad/s </summary> + public Single roll_speed; + /// <summary> Desired pitch angular speed in rad/s </summary> + public Single pitch_speed; + /// <summary> Desired yaw angular speed in rad/s </summary> + public Single yaw_speed; + /// <summary> Collective thrust, normalized to 0 .. 1 </summary> + public Single thrust; + + }; + + + public const byte MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=26)] + public struct mavlink_nav_controller_output_t + { + /// <summary> Current desired roll in degrees </summary> + public Single nav_roll; + /// <summary> Current desired pitch in degrees </summary> + public Single nav_pitch; + /// <summary> Current desired heading in degrees </summary> + public Int16 nav_bearing; + /// <summary> Bearing to current waypoint/target in degrees </summary> + public Int16 target_bearing; + /// <summary> Distance to active waypoint in meters </summary> + public UInt16 wp_dist; + /// <summary> Current altitude error in meters </summary> + public Single alt_error; + /// <summary> Current airspeed error in meters/second </summary> + public Single aspd_error; + /// <summary> Current crosstrack error on x-y plane in meters </summary> + public Single xtrack_error; + + }; + + + public const byte MAVLINK_MSG_ID_POSITION_TARGET = 63; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=16)] + public struct mavlink_position_target_t + { + /// <summary> x position </summary> + public Single x; + /// <summary> y position </summary> + public Single y; + /// <summary> z position </summary> + public Single z; + /// <summary> yaw orientation in radians, 0 = NORTH </summary> + public Single yaw; + + }; + + + public const byte MAVLINK_MSG_ID_STATE_CORRECTION = 64; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=36)] + public struct mavlink_state_correction_t + { + /// <summary> x position error </summary> + public Single xErr; + /// <summary> y position error </summary> + public Single yErr; + /// <summary> z position error </summary> + public Single zErr; + /// <summary> roll error (radians) </summary> + public Single rollErr; + /// <summary> pitch error (radians) </summary> + public Single pitchErr; + /// <summary> yaw error (radians) </summary> + public Single yawErr; + /// <summary> x velocity </summary> + public Single vxErr; + /// <summary> y velocity </summary> + public Single vyErr; + /// <summary> z velocity </summary> + public Single vzErr; + + }; + + + public const byte MAVLINK_MSG_ID_SET_ALTITUDE = 65; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=5)] + public struct mavlink_set_altitude_t + { + /// <summary> The system setting the altitude </summary> + public byte target; + /// <summary> The new altitude in meters </summary> + public UInt32 mode; + + }; - public const byte MAVLINK_MSG_ID_WAYPOINT_REACHED_LEN = 2; - public const byte MAVLINK_MSG_ID_WAYPOINT_REQUEST = 40; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_waypoint_request_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public ushort seq; /// Sequence - }; - public const byte MAVLINK_MSG_ID_WAYPOINT_REQUEST_LEN = 4; - public const byte MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST = 43; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_waypoint_request_list_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - }; + public const byte MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=6)] + public struct mavlink_request_data_stream_t + { + /// <summary> The target requested to send the message stream. </summary> + public byte target_system; + /// <summary> The target requested to send the message stream. </summary> + public byte target_component; + /// <summary> The ID of the requested message type </summary> + public byte req_stream_id; + /// <summary> Update rate in Hertz </summary> + public UInt16 req_message_rate; + /// <summary> 1 to start sending, 0 to stop sending. </summary> + public byte start_stop; + + }; + + + public const byte MAVLINK_MSG_ID_HIL_STATE = 67; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=56)] + public struct mavlink_hil_state_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 usec; + /// <summary> Roll angle (rad) </summary> + public Single roll; + /// <summary> Pitch angle (rad) </summary> + public Single pitch; + /// <summary> Yaw angle (rad) </summary> + public Single yaw; + /// <summary> Roll angular speed (rad/s) </summary> + public Single rollspeed; + /// <summary> Pitch angular speed (rad/s) </summary> + public Single pitchspeed; + /// <summary> Yaw angular speed (rad/s) </summary> + public Single yawspeed; + /// <summary> Latitude, expressed as * 1E7 </summary> + public Int32 lat; + /// <summary> Longitude, expressed as * 1E7 </summary> + public Int32 lon; + /// <summary> Altitude in meters, expressed as * 1000 (millimeters) </summary> + public Int32 alt; + /// <summary> Ground X Speed (Latitude), expressed as m/s * 100 </summary> + public Int16 vx; + /// <summary> Ground Y Speed (Longitude), expressed as m/s * 100 </summary> + public Int16 vy; + /// <summary> Ground Z Speed (Altitude), expressed as m/s * 100 </summary> + public Int16 vz; + /// <summary> X acceleration (mg) </summary> + public Int16 xacc; + /// <summary> Y acceleration (mg) </summary> + public Int16 yacc; + /// <summary> Z acceleration (mg) </summary> + public Int16 zacc; + + }; + + + public const byte MAVLINK_MSG_ID_HIL_CONTROLS = 68; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=26)] + public struct mavlink_hil_controls_t + { + /// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary> + public UInt64 time_us; + /// <summary> Control output -3 .. 1 </summary> + public Single roll_ailerons; + /// <summary> Control output -1 .. 1 </summary> + public Single pitch_elevator; + /// <summary> Control output -1 .. 1 </summary> + public Single yaw_rudder; + /// <summary> Throttle 0 .. 1 </summary> + public Single throttle; + /// <summary> System mode (MAV_MODE) </summary> + public byte mode; + /// <summary> Navigation mode (MAV_NAV_MODE) </summary> + public byte nav_mode; + + }; + + + public const byte MAVLINK_MSG_ID_MANUAL_CONTROL = 69; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=21)] + public struct mavlink_manual_control_t + { + /// <summary> The system to be controlled </summary> + public byte target; + /// <summary> roll </summary> + public Single roll; + /// <summary> pitch </summary> + public Single pitch; + /// <summary> yaw </summary> + public Single yaw; + /// <summary> thrust </summary> + public Single thrust; + /// <summary> roll control enabled auto:0, manual:1 </summary> + public byte roll_manual; + /// <summary> pitch auto:0, manual:1 </summary> + public byte pitch_manual; + /// <summary> yaw auto:0, manual:1 </summary> + public byte yaw_manual; + /// <summary> thrust auto:0, manual:1 </summary> + public byte thrust_manual; + + }; + + + public const byte MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_rc_channels_override_t + { + /// <summary> System ID </summary> + public byte target_system; + /// <summary> Component ID </summary> + public byte target_component; + /// <summary> RC channel 1 value, in microseconds </summary> + public UInt16 chan1_raw; + /// <summary> RC channel 2 value, in microseconds </summary> + public UInt16 chan2_raw; + /// <summary> RC channel 3 value, in microseconds </summary> + public UInt16 chan3_raw; + /// <summary> RC channel 4 value, in microseconds </summary> + public UInt16 chan4_raw; + /// <summary> RC channel 5 value, in microseconds </summary> + public UInt16 chan5_raw; + /// <summary> RC channel 6 value, in microseconds </summary> + public UInt16 chan6_raw; + /// <summary> RC channel 7 value, in microseconds </summary> + public UInt16 chan7_raw; + /// <summary> RC channel 8 value, in microseconds </summary> + public UInt16 chan8_raw; + + }; + + + public const byte MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 73; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_global_position_int_t + { + /// <summary> Latitude, expressed as * 1E7 </summary> + public Int32 lat; + /// <summary> Longitude, expressed as * 1E7 </summary> + public Int32 lon; + /// <summary> Altitude in meters, expressed as * 1000 (millimeters) </summary> + public Int32 alt; + /// <summary> Ground X Speed (Latitude), expressed as m/s * 100 </summary> + public Int16 vx; + /// <summary> Ground Y Speed (Longitude), expressed as m/s * 100 </summary> + public Int16 vy; + /// <summary> Ground Z Speed (Altitude), expressed as m/s * 100 </summary> + public Int16 vz; + + }; + + + public const byte MAVLINK_MSG_ID_VFR_HUD = 74; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=20)] + public struct mavlink_vfr_hud_t + { + /// <summary> Current airspeed in m/s </summary> + public Single airspeed; + /// <summary> Current ground speed in m/s </summary> + public Single groundspeed; + /// <summary> Current heading in degrees, in compass units (0..360, 0=north) </summary> + public Int16 heading; + /// <summary> Current throttle setting in integer percent, 0 to 100 </summary> + public UInt16 throttle; + /// <summary> Current altitude (MSL), in meters </summary> + public Single alt; + /// <summary> Current climb rate in meters/second </summary> + public Single climb; + + }; + + + public const byte MAVLINK_MSG_ID_COMMAND = 75; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=20)] + public struct mavlink_command_t + { + /// <summary> System which should execute the command </summary> + public byte target_system; + /// <summary> Component which should execute the command, 0 for all components </summary> + public byte target_component; + /// <summary> Command ID, as defined by MAV_CMD enum. </summary> + public byte command; + /// <summary> 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) </summary> + public byte confirmation; + /// <summary> Parameter 1, as defined by MAV_CMD enum. </summary> + public Single param1; + /// <summary> Parameter 2, as defined by MAV_CMD enum. </summary> + public Single param2; + /// <summary> Parameter 3, as defined by MAV_CMD enum. </summary> + public Single param3; + /// <summary> Parameter 4, as defined by MAV_CMD enum. </summary> + public Single param4; + + }; + + + public const byte MAVLINK_MSG_ID_COMMAND_ACK = 76; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=8)] + public struct mavlink_command_ack_t + { + /// <summary> Current airspeed in m/s </summary> + public Single command; + /// <summary> 1: Action ACCEPTED and EXECUTED, 1: Action TEMPORARY REJECTED/DENIED, 2: Action PERMANENTLY DENIED, 3: Action UNKNOWN/UNSUPPORTED, 4: Requesting CONFIRMATION </summary> + public Single result; + + }; - public const byte MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST_LEN = 2; - public const byte MAVLINK_MSG_ID_WAYPOINT_SET_CURRENT = 41; - [StructLayout(LayoutKind.Sequential,Pack=1)] - public struct __mavlink_waypoint_set_current_t - { - public byte target_system; /// System ID - public byte target_component; /// Component ID - public ushort seq; /// Sequence - }; - public const byte MAVLINK_MSG_ID_WAYPOINT_SET_CURRENT_LEN = 4; - public enum MAV_CLASS + public const byte MAVLINK_MSG_ID_OPTICAL_FLOW = 100; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_optical_flow_t + { + /// <summary> Timestamp (UNIX) </summary> + public UInt64 time; + /// <summary> Sensor ID </summary> + public byte sensor_id; + /// <summary> Flow in pixels in x-sensor direction </summary> + public Int16 flow_x; + /// <summary> Flow in pixels in y-sensor direction </summary> + public Int16 flow_y; + /// <summary> Optical flow quality / confidence. 0: bad, 255: maximum quality </summary> + public byte quality; + /// <summary> Ground distance in meters </summary> + public Single ground_distance; + + }; + + + public const byte MAVLINK_MSG_ID_OBJECT_DETECTION_EVENT = 140; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=36)] + public struct mavlink_object_detection_event_t + { + /// <summary> Timestamp in milliseconds since system boot </summary> + public UInt32 time; + /// <summary> Object ID </summary> + public UInt16 object_id; + /// <summary> Object type: 0: image, 1: letter, 2: ground vehicle, 3: air vehicle, 4: surface vehicle, 5: sub-surface vehicle, 6: human, 7: animal </summary> + public byte type; + /// <summary> Name of the object as defined by the detector </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public string name; + /// <summary> Detection quality / confidence. 0: bad, 255: maximum confidence </summary> + public byte quality; + /// <summary> Angle of the object with respect to the body frame in NED coordinates in radians. 0: front </summary> + public Single bearing; + /// <summary> Ground distance in meters </summary> + public Single distance; + + }; + + + public const byte MAVLINK_MSG_ID_DEBUG_VECT = 251; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=30)] + public struct mavlink_debug_vect_t + { + /// <summary> Name </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=10)] + public string name; + /// <summary> Timestamp </summary> + public UInt64 usec; + /// <summary> x </summary> + public Single x; + /// <summary> y </summary> + public Single y; + /// <summary> z </summary> + public Single z; + + }; + + + public const byte MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 252; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=14)] + public struct mavlink_named_value_float_t + { + /// <summary> Name of the debug variable </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=10)] + public string name; + /// <summary> Floating point value </summary> + public Single value; + + }; + + + public const byte MAVLINK_MSG_ID_NAMED_VALUE_INT = 253; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=14)] + public struct mavlink_named_value_int_t + { + /// <summary> Name of the debug variable </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=10)] + public string name; + /// <summary> Signed integer value </summary> + public Int32 value; + + }; + + + public const byte MAVLINK_MSG_ID_STATUSTEXT = 254; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=51)] + public struct mavlink_statustext_t + { + /// <summary> Severity of status, 0 = info message, 255 = critical fault </summary> + public byte severity; + /// <summary> Status text message, without null termination character </summary> + [MarshalAs(UnmanagedType.ByValArray,SizeConst=50)] + public byte[] text; + + }; + + + public const byte MAVLINK_MSG_ID_DEBUG = 255; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=5)] + public struct mavlink_debug_t + { + /// <summary> index of debug variable </summary> + public byte ind; + /// <summary> DEBUG value </summary> + public Single value; }; +public enum MAV_CLASS { MAV_CLASS_GENERIC = 0, /// Generic autopilot, full support for everything MAV_CLASS_PIXHAWK = 1, /// PIXHAWK autopilot, http://pixhawk.ethz.ch @@ -1344,9 +1935,20 @@ namespace ArdupilotMega MAV_FRAME_LOCAL_ENU = 4 }; -Type[] mavstructs = new Type[] {typeof( __mavlink_heartbeat_t) ,typeof( __mavlink_boot_t) ,null ,typeof( __mavlink_ping_t) ,null ,typeof( __mavlink_change_operator_control_t) ,typeof( __mavlink_change_operator_control_ack_t) ,typeof( __mavlink_auth_key_t) ,null ,typeof( __mavlink_action_ack_t) ,typeof( __mavlink_action_t) ,typeof( __mavlink_set_mode_t) ,typeof( __mavlink_set_nav_mode_t) ,null ,null ,null ,null ,null ,null ,null ,typeof( __mavlink_param_request_read_t) ,typeof( __mavlink_param_request_list_t) ,typeof( __mavlink_param_value_t) ,typeof( __mavlink_param_set_t) ,null ,typeof( __mavlink_gps_raw_int_t) ,typeof( __mavlink_scaled_imu_t) ,typeof( __mavlink_gps_status_t) ,typeof( __mavlink_raw_imu_t) ,typeof( __mavlink_raw_pressure_t) ,typeof( __mavlink_attitude_t) ,typeof( __mavlink_local_position_t) ,typeof( __mavlink_gps_raw_t) ,typeof( __mavlink_global_position_t) ,typeof( __mavlink_sys_status_t) ,typeof( __mavlink_rc_channels_raw_t) ,typeof( __mavlink_rc_channels_scaled_t) ,typeof( __mavlink_servo_output_raw_t) ,typeof( __mavlink_scaled_pressure_t) ,typeof( __mavlink_waypoint_t) ,typeof( __mavlink_waypoint_request_t) ,typeof( __mavlink_waypoint_set_current_t) ,typeof( __mavlink_waypoint_current_t) ,typeof( __mavlink_waypoint_request_list_t) ,typeof( __mavlink_waypoint_count_t) ,typeof( __mavlink_waypoint_clear_all_t) ,typeof( __mavlink_waypoint_reached_t) ,typeof( __mavlink_waypoint_ack_t) ,typeof( __mavlink_gps_set_global_origin_t) ,typeof( __mavlink_gps_local_origin_set_t) ,typeof( __mavlink_local_position_setpoint_set_t) ,typeof( __mavlink_local_position_setpoint_t) ,typeof( __mavlink_control_status_t) ,typeof( __mavlink_safety_set_allowed_area_t) ,typeof( __mavlink_safety_allowed_area_t) ,typeof( __mavlink_set_roll_pitch_yaw_thrust_t) ,typeof( __mavlink_set_roll_pitch_yaw_speed_thrust_t) ,typeof( __mavlink_roll_pitch_yaw_thrust_setpoint_t) ,typeof( __mavlink_roll_pitch_yaw_speed_thrust_setpoint_t) ,null ,null ,null ,typeof( __mavlink_nav_controller_output_t) ,typeof( __mavlink_position_target_t) ,typeof( __mavlink_state_correction_t) ,typeof( __mavlink_set_altitude_t) ,typeof( __mavlink_request_data_stream_t) ,typeof( __mavlink_hil_state_t) ,typeof( __mavlink_hil_controls_t) ,typeof( __mavlink_manual_control_t) ,typeof( __mavlink_rc_channels_override_t) ,null ,null ,typeof( __mavlink_global_position_int_t) ,typeof( __mavlink_vfr_hud_t) ,typeof( __mavlink_command_t) ,typeof( __mavlink_command_ack_t) ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,typeof( __mavlink_optical_flow_t) ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,typeof( __mavlink_object_detection_event_t) ,null ,null ,null ,null ,null ,null ,null ,null ,null ,typeof( __mavlink_sensor_offsets_t) ,typeof( __mavlink_set_mag_offsets_t) ,typeof( __mavlink_meminfo_t) ,typeof( __mavlink_ap_adc_t) ,typeof( __mavlink_digicam_configure_t) ,typeof( __mavlink_digicam_control_t) ,typeof( __mavlink_mount_configure_t) ,typeof( __mavlink_mount_control_t) ,typeof( __mavlink_mount_status_t) ,null ,typeof( __mavlink_fence_point_t) ,typeof( __mavlink_fence_fetch_point_t) ,typeof( __mavlink_fence_status_t) ,typeof( __mavlink_dcm_t) ,typeof( __mavlink_simstate_t) ,typeof( __mavlink_hwstatus_t) ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,null ,typeof( __mavlink_debug_vect_t) ,typeof( __mavlink_named_value_float_t) ,typeof( __mavlink_named_value_int_t) ,typeof( __mavlink_statustext_t) ,typeof( __mavlink_debug_t) ,null ,}; + public enum MAV_DATA_STREAM + { + MAV_DATA_STREAM_ALL=0, /* Enable all data streams | */ + MAV_DATA_STREAM_RAW_SENSORS=1, /* Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. | */ + MAV_DATA_STREAM_EXTENDED_STATUS=2, /* Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS | */ + MAV_DATA_STREAM_RC_CHANNELS=3, /* Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW | */ + MAV_DATA_STREAM_RAW_CONTROLLER=4, /* Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT. | */ + MAV_DATA_STREAM_POSITION=6, /* Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. | */ + MAV_DATA_STREAM_EXTRA1=10, /* Dependent on the autopilot | */ + MAV_DATA_STREAM_EXTRA2=11, /* Dependent on the autopilot | */ + MAV_DATA_STREAM_EXTRA3=12, /* Dependent on the autopilot | */ + MAV_DATA_STREAM_ENUM_END=13, /* | */ + }; - } + } #endif } - diff --git a/Tools/ArdupilotMegaPlanner/MagCalib.cs b/Tools/ArdupilotMegaPlanner/MagCalib.cs index e94a63993..199bcb497 100644 --- a/Tools/ArdupilotMegaPlanner/MagCalib.cs +++ b/Tools/ArdupilotMegaPlanner/MagCalib.cs @@ -98,9 +98,9 @@ namespace ArdupilotMega if (packet == null) continue; - if (packet.GetType() == typeof(MAVLink.__mavlink_vfr_hud_t)) + if (packet.GetType() == typeof(MAVLink.mavlink_vfr_hud_t)) { - if (((MAVLink.__mavlink_vfr_hud_t)packet).throttle >= throttleThreshold) + if (((MAVLink.mavlink_vfr_hud_t)packet).throttle >= throttleThreshold) { useData = true; } @@ -111,35 +111,35 @@ namespace ArdupilotMega } - if (packet.GetType() == typeof(MAVLink.__mavlink_sensor_offsets_t)) + if (packet.GetType() == typeof(MAVLink.mavlink_sensor_offsets_t)) { offset = new Tuple<float, float, float>( - ((MAVLink.__mavlink_sensor_offsets_t)packet).mag_ofs_x, - ((MAVLink.__mavlink_sensor_offsets_t)packet).mag_ofs_y, - ((MAVLink.__mavlink_sensor_offsets_t)packet).mag_ofs_z); + ((MAVLink.mavlink_sensor_offsets_t)packet).mag_ofs_x, + ((MAVLink.mavlink_sensor_offsets_t)packet).mag_ofs_y, + ((MAVLink.mavlink_sensor_offsets_t)packet).mag_ofs_z); } - else if (packet.GetType() == typeof(MAVLink.__mavlink_raw_imu_t) && useData) + else if (packet.GetType() == typeof(MAVLink.mavlink_raw_imu_t) && useData) { int div = 20; // fox dxf vertex = new Polyline3dVertex(new Vector3f( - ((MAVLink.__mavlink_raw_imu_t)packet).xmag - offset.Item1, - ((MAVLink.__mavlink_raw_imu_t)packet).ymag - offset.Item2, - ((MAVLink.__mavlink_raw_imu_t)packet).zmag - offset.Item3) + ((MAVLink.mavlink_raw_imu_t)packet).xmag - offset.Item1, + ((MAVLink.mavlink_raw_imu_t)packet).ymag - offset.Item2, + ((MAVLink.mavlink_raw_imu_t)packet).zmag - offset.Item3) ); vertexes.Add(vertex); // for old method - setMinorMax(((MAVLink.__mavlink_raw_imu_t)packet).xmag - offset.Item1, ref minx, ref maxx); - setMinorMax(((MAVLink.__mavlink_raw_imu_t)packet).ymag - offset.Item2, ref miny, ref maxy); - setMinorMax(((MAVLink.__mavlink_raw_imu_t)packet).zmag - offset.Item3, ref minz, ref maxz); + setMinorMax(((MAVLink.mavlink_raw_imu_t)packet).xmag - offset.Item1, ref minx, ref maxx); + setMinorMax(((MAVLink.mavlink_raw_imu_t)packet).ymag - offset.Item2, ref miny, ref maxy); + setMinorMax(((MAVLink.mavlink_raw_imu_t)packet).zmag - offset.Item3, ref minz, ref maxz); // for new lease sq - string item = (int)(((MAVLink.__mavlink_raw_imu_t)packet).xmag / div) + "," + - (int)(((MAVLink.__mavlink_raw_imu_t)packet).ymag / div) + "," + - (int)(((MAVLink.__mavlink_raw_imu_t)packet).zmag / div); + string item = (int)(((MAVLink.mavlink_raw_imu_t)packet).xmag / div) + "," + + (int)(((MAVLink.mavlink_raw_imu_t)packet).ymag / div) + "," + + (int)(((MAVLink.mavlink_raw_imu_t)packet).zmag / div); if (filter.ContainsKey(item)) { @@ -155,9 +155,9 @@ namespace ArdupilotMega data.Add(new Tuple<float, float, float>( - ((MAVLink.__mavlink_raw_imu_t)packet).xmag - offset.Item1, - ((MAVLink.__mavlink_raw_imu_t)packet).ymag - offset.Item2, - ((MAVLink.__mavlink_raw_imu_t)packet).zmag - offset.Item3)); + ((MAVLink.mavlink_raw_imu_t)packet).xmag - offset.Item1, + ((MAVLink.mavlink_raw_imu_t)packet).ymag - offset.Item2, + ((MAVLink.mavlink_raw_imu_t)packet).zmag - offset.Item3)); } diff --git a/Tools/ArdupilotMegaPlanner/MainV2.cs b/Tools/ArdupilotMegaPlanner/MainV2.cs index 6de12700b..76ee48fc3 100644 --- a/Tools/ArdupilotMegaPlanner/MainV2.cs +++ b/Tools/ArdupilotMegaPlanner/MainV2.cs @@ -58,6 +58,8 @@ namespace ArdupilotMega bool serialThread = false; + static internal BindingSource bs; + TcpListener listener; DateTime heatbeatSend = DateTime.Now; @@ -187,7 +189,6 @@ namespace ArdupilotMega if (config["MainWidth"] != null) this.Width = int.Parse(config["MainWidth"].ToString()); - if (config["CMB_rateattitude"] != null) MainV2.cs.rateattitude = byte.Parse(config["CMB_rateattitude"].ToString()); if (config["rateposition"] != null) @@ -794,7 +795,7 @@ namespace ArdupilotMega if (joystick != null && joystick.enabled) { - MAVLink.__mavlink_rc_channels_override_t rc = new MAVLink.__mavlink_rc_channels_override_t(); + MAVLink.mavlink_rc_channels_override_t rc = new MAVLink.mavlink_rc_channels_override_t(); rc.target_component = comPort.compid; rc.target_system = comPort.sysid; @@ -956,7 +957,7 @@ namespace ArdupilotMega { // Console.WriteLine("remote lost {0}", cs.packetdropremote); - MAVLink.__mavlink_heartbeat_t htb = new MAVLink.__mavlink_heartbeat_t(); + MAVLink.mavlink_heartbeat_t htb = new MAVLink.mavlink_heartbeat_t(); #if MAVLINK10 htb.type = (byte)MAVLink.MAV_TYPE.MAV_TYPE_GCS; @@ -1862,7 +1863,7 @@ namespace ArdupilotMega } if (keyData == (Keys.Control | Keys.W)) // test { - Form frm = new GCSViews.ConfigurationView.Configuration(); + Form frm = new GCSViews.ConfigurationView.Setup(); ThemeManager.ApplyThemeTo(frm); frm.Show(); return true; @@ -1942,6 +1943,9 @@ namespace ArdupilotMega if (comPort.rawlogfile != null) comPort.rawlogfile.Close(); + + comPort.logfile = null; + comPort.rawlogfile = null; } catch { } diff --git a/Tools/ArdupilotMegaPlanner/MavlinkLog.cs b/Tools/ArdupilotMegaPlanner/MavlinkLog.cs index 73f5cfac0..707f84ff7 100644 --- a/Tools/ArdupilotMegaPlanner/MavlinkLog.cs +++ b/Tools/ArdupilotMegaPlanner/MavlinkLog.cs @@ -744,7 +744,7 @@ namespace ArdupilotMega int colorvalue = ColourValues[step % ColourValues.Length]; step++; - myCurve = zg1.GraphPane.AddCurve(lookforfields[a].Replace("__mavlink_", ""), lists[a], Color.FromArgb(unchecked(colorvalue + (int)0xff000000)), SymbolType.None); + myCurve = zg1.GraphPane.AddCurve(lookforfields[a].Replace("mavlink_", ""), lists[a], Color.FromArgb(unchecked(colorvalue + (int)0xff000000)), SymbolType.None); double xMin, xMax, yMin, yMax; @@ -795,6 +795,12 @@ namespace ArdupilotMega object data = MavlinkInterface.DebugPacket(packet, false); + if (data == null) + { + log.Info("No info on packet"); + continue; + } + Type test = data.GetType(); foreach (var field in test.GetFields()) @@ -890,9 +896,9 @@ namespace ArdupilotMega PointPairList list = ((PointPairList)this.data[field]); - PointPairList listx = ((PointPairList)this.data["xmag __mavlink_raw_imu_t"]); - PointPairList listy = ((PointPairList)this.data["ymag __mavlink_raw_imu_t"]); - PointPairList listz = ((PointPairList)this.data["zmag __mavlink_raw_imu_t"]); + PointPairList listx = ((PointPairList)this.data["xmag mavlink_raw_imu_t"]); + PointPairList listy = ((PointPairList)this.data["ymag mavlink_raw_imu_t"]); + PointPairList listz = ((PointPairList)this.data["zmag mavlink_raw_imu_t"]); //(float)Math.Sqrt(Math.Pow(mx, 2) + Math.Pow(my, 2) + Math.Pow(mz, 2)); @@ -949,13 +955,13 @@ namespace ArdupilotMega int colorvalue = ColourValues[colorStep % ColourValues.Length]; colorStep++; - myCurve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name.Replace("__mavlink_", ""), (PointPairList)data[((CheckBox)sender).Name], Color.FromArgb(unchecked(colorvalue + (int)0xff000000)), SymbolType.None); + myCurve = zg1.GraphPane.AddCurve(((CheckBox)sender).Name.Replace("mavlink_", ""), (PointPairList)data[((CheckBox)sender).Name], Color.FromArgb(unchecked(colorvalue + (int)0xff000000)), SymbolType.None); myCurve.Tag = ((CheckBox)sender).Name; - if (myCurve.Tag.ToString() == "roll __mavlink_attitude_t" || - myCurve.Tag.ToString() == "pitch __mavlink_attitude_t" || - myCurve.Tag.ToString() == "yaw __mavlink_attitude_t") + if (myCurve.Tag.ToString() == "roll mavlink_attitude_t" || + myCurve.Tag.ToString() == "pitch mavlink_attitude_t" || + myCurve.Tag.ToString() == "yaw mavlink_attitude_t") { PointPairList ppl = new PointPairList((PointPairList)data[((CheckBox)sender).Name]); for (int a = 0; a < ppl.Count; a++) diff --git a/Tools/ArdupilotMegaPlanner/Msi/installer.wxs b/Tools/ArdupilotMegaPlanner/Msi/installer.wxs index 3b70d3950..7d03a402f 100644 --- a/Tools/ArdupilotMegaPlanner/Msi/installer.wxs +++ b/Tools/ArdupilotMegaPlanner/Msi/installer.wxs @@ -23,100 +23,100 @@ <Permission User="Everyone" GenericAll="yes" /> </CreateFolder> </Component> -<Component Id="_comp0" Guid="ac593651-82f6-4297-bb94-f8a233d91b6f"> -<File Id="_1" Source="..\bin\release\AeroSimRCAPMHil.zip" /> -<File Id="_2" Source="..\bin\release\alglibnet2.dll" /> -<File Id="_3" Source="..\bin\release\arducopter-xplane.zip" /> -<File Id="_4" Source="..\bin\release\ArdupilotMegaPlanner.exe" /> -<File Id="_5" Source="..\bin\release\ArdupilotMegaPlanner.exe.config" /> -<File Id="_6" Source="..\bin\release\ArdupilotMegaPlanner.pdb" /> -<File Id="_7" Source="..\bin\release\block_plane_0.dae" /> -<File Id="_8" Source="..\bin\release\BSE.Windows.Forms.dll" /> -<File Id="_9" Source="..\bin\release\Core.dll" /> -<File Id="_10" Source="..\bin\release\dataflashlog.xml" /> -<File Id="_11" Source="..\bin\release\DirectShowLib-2005.dll" /> -<File Id="_12" Source="..\bin\release\GMap.NET.Core.dll" /> -<File Id="_13" Source="..\bin\release\GMap.NET.WindowsForms.dll" /> -<File Id="_14" Source="..\bin\release\hud.html" /> -<File Id="_15" Source="..\bin\release\ICSharpCode.SharpZipLib.dll" /> -<File Id="_16" Source="..\bin\release\Ionic.Zip.Reduced.dll" /> -<File Id="_17" Source="..\bin\release\IronPython.dll" /> -<File Id="_18" Source="..\bin\release\IronPython.Modules.dll" /> -<File Id="_19" Source="..\bin\release\JSBSim.exe" /> -<File Id="_20" Source="..\bin\release\KMLib.dll" /> -<File Id="_21" Source="..\bin\release\log4net.dll" /> -<File Id="_22" Source="..\bin\release\mavcmd.xml" /> -<File Id="_23" Source="..\bin\release\MAVLink.xml" /> -<File Id="_24" Source="..\bin\release\MetaDataExtractor.dll" /> -<File Id="_25" Source="..\bin\release\Microsoft.Dynamic.dll" /> -<File Id="_26" Source="..\bin\release\Microsoft.Scripting.Core.dll" /> -<File Id="_27" Source="..\bin\release\Microsoft.Scripting.Debugging.dll" /> -<File Id="_28" Source="..\bin\release\Microsoft.Scripting.dll" /> -<File Id="_29" Source="..\bin\release\Microsoft.Scripting.ExtensionAttribute.dll" /> -<File Id="_30" Source="..\bin\release\netDxf.dll" /> -<File Id="_31" Source="..\bin\release\OpenTK.dll" /> -<File Id="_32" Source="..\bin\release\OpenTK.GLControl.dll" /> -<File Id="_33" Source="..\bin\release\quadhil.xml" /> -<File Id="_34" Source="..\bin\release\SharpKml.dll" /> -<File Id="_35" Source="..\bin\release\System.Data.SQLite.dll" /> -<File Id="_36" Source="..\bin\release\System.Speech.dll" /> -<File Id="_37" Source="..\bin\release\Updater.exe" /> -<File Id="_38" Source="..\bin\release\Updater.exe.config" /> -<File Id="_39" Source="..\bin\release\Updater.pdb" /> -<File Id="_40" Source="..\bin\release\ZedGraph.dll" /> +<Component Id="_comp1" Guid="34295c8e-0d23-4735-b56d-d2b6652756e5"> +<File Id="_2" Source="..\bin\release\AeroSimRCAPMHil.zip" /> +<File Id="_3" Source="..\bin\release\alglibnet2.dll" /> +<File Id="_4" Source="..\bin\release\arducopter-xplane.zip" /> +<File Id="_5" Source="..\bin\release\ArdupilotMegaPlanner.exe" /> +<File Id="_6" Source="..\bin\release\ArdupilotMegaPlanner.exe.config" /> +<File Id="_7" Source="..\bin\release\ArdupilotMegaPlanner.pdb" /> +<File Id="_8" Source="..\bin\release\block_plane_0.dae" /> +<File Id="_9" Source="..\bin\release\BSE.Windows.Forms.dll" /> +<File Id="_10" Source="..\bin\release\Core.dll" /> +<File Id="_11" Source="..\bin\release\dataflashlog.xml" /> +<File Id="_12" Source="..\bin\release\DirectShowLib-2005.dll" /> +<File Id="_13" Source="..\bin\release\GMap.NET.Core.dll" /> +<File Id="_14" Source="..\bin\release\GMap.NET.WindowsForms.dll" /> +<File Id="_15" Source="..\bin\release\hud.html" /> +<File Id="_16" Source="..\bin\release\ICSharpCode.SharpZipLib.dll" /> +<File Id="_17" Source="..\bin\release\Ionic.Zip.Reduced.dll" /> +<File Id="_18" Source="..\bin\release\IronPython.dll" /> +<File Id="_19" Source="..\bin\release\IronPython.Modules.dll" /> +<File Id="_20" Source="..\bin\release\JSBSim.exe" /> +<File Id="_21" Source="..\bin\release\KMLib.dll" /> +<File Id="_22" Source="..\bin\release\log4net.dll" /> +<File Id="_23" Source="..\bin\release\mavcmd.xml" /> +<File Id="_24" Source="..\bin\release\MAVLink.xml" /> +<File Id="_25" Source="..\bin\release\MetaDataExtractor.dll" /> +<File Id="_26" Source="..\bin\release\Microsoft.Dynamic.dll" /> +<File Id="_27" Source="..\bin\release\Microsoft.Scripting.Core.dll" /> +<File Id="_28" Source="..\bin\release\Microsoft.Scripting.Debugging.dll" /> +<File Id="_29" Source="..\bin\release\Microsoft.Scripting.dll" /> +<File Id="_30" Source="..\bin\release\Microsoft.Scripting.ExtensionAttribute.dll" /> +<File Id="_31" Source="..\bin\release\netDxf.dll" /> +<File Id="_32" Source="..\bin\release\OpenTK.dll" /> +<File Id="_33" Source="..\bin\release\OpenTK.GLControl.dll" /> +<File Id="_34" Source="..\bin\release\quadhil.xml" /> +<File Id="_35" Source="..\bin\release\SharpKml.dll" /> +<File Id="_36" Source="..\bin\release\System.Data.SQLite.dll" /> +<File Id="_37" Source="..\bin\release\System.Speech.dll" /> +<File Id="_38" Source="..\bin\release\Updater.exe" /> +<File Id="_39" Source="..\bin\release\Updater.exe.config" /> +<File Id="_40" Source="..\bin\release\Updater.pdb" /> +<File Id="_41" Source="..\bin\release\ZedGraph.dll" /> </Component> -<Directory Id="Driver" Name="Driver"> -<Component Id="_comp40" Guid="2fdf06ca-6e78-41c1-a558-0b0970ef8cdd"> -<File Id="_41" Source="..\bin\release\Driver\Arduino MEGA 2560.inf" /> +<Directory Id="Driver41" Name="Driver"> +<Component Id="_comp42" Guid="3975a290-2f19-4aa9-97b9-37d45672d063"> +<File Id="_43" Source="..\bin\release\Driver\Arduino MEGA 2560.inf" /> </Component> </Directory> -<Directory Id="es_ES" Name="es-ES"> -<Component Id="_comp41" Guid="7c2d0e6e-be62-414e-87d3-15c3408a6689"> -<File Id="_42" Source="..\bin\release\es-ES\ArdupilotMegaPlanner.resources.dll" /> +<Directory Id="es_ES43" Name="es-ES"> +<Component Id="_comp44" Guid="02407d9c-9e9f-4e5d-a48d-d7d9fc0846a7"> +<File Id="_45" Source="..\bin\release\es-ES\ArdupilotMegaPlanner.resources.dll" /> </Component> </Directory> -<Directory Id="fr" Name="fr"> -<Component Id="_comp42" Guid="a96af704-563a-4606-902c-f5ada5f0e2e4"> -<File Id="_43" Source="..\bin\release\fr\ArdupilotMegaPlanner.resources.dll" /> +<Directory Id="fr45" Name="fr"> +<Component Id="_comp46" Guid="74e19d89-486a-487d-9053-be1c34b8e7d9"> +<File Id="_47" Source="..\bin\release\fr\ArdupilotMegaPlanner.resources.dll" /> </Component> </Directory> -<Directory Id="it_IT" Name="it-IT"> -<Component Id="_comp43" Guid="f25da795-c709-42ed-b395-68b30354db54"> -<File Id="_44" Source="..\bin\release\it-IT\ArdupilotMegaPlanner.resources.dll" /> +<Directory Id="it_IT47" Name="it-IT"> +<Component Id="_comp48" Guid="0003cdb4-191e-4771-a098-4e35e5eea039"> +<File Id="_49" Source="..\bin\release\it-IT\ArdupilotMegaPlanner.resources.dll" /> </Component> </Directory> -<Directory Id="m3u" Name="m3u"> -<Component Id="_comp44" Guid="201b2c11-e385-4176-ba7f-cff62934e41f"> -<File Id="_45" Source="..\bin\release\m3u\both.m3u" /> -<File Id="_46" Source="..\bin\release\m3u\hud.m3u" /> -<File Id="_47" Source="..\bin\release\m3u\map.m3u" /> -<File Id="_48" Source="..\bin\release\m3u\networklink.kml" /> +<Directory Id="m3u49" Name="m3u"> +<Component Id="_comp50" Guid="fc43d9e6-6966-4682-884f-655b48d2cb21"> +<File Id="_51" Source="..\bin\release\m3u\both.m3u" /> +<File Id="_52" Source="..\bin\release\m3u\hud.m3u" /> +<File Id="_53" Source="..\bin\release\m3u\map.m3u" /> +<File Id="_54" Source="..\bin\release\m3u\networklink.kml" /> </Component> </Directory> -<Directory Id="pl" Name="pl"> -<Component Id="_comp48" Guid="91e14b63-64b9-43d5-9f3c-dc3eccac202f"> -<File Id="_49" Source="..\bin\release\pl\ArdupilotMegaPlanner.resources.dll" /> +<Directory Id="pl54" Name="pl"> +<Component Id="_comp55" Guid="f8b404d3-6d8b-459b-81ae-5538993f5f93"> +<File Id="_56" Source="..\bin\release\pl\ArdupilotMegaPlanner.resources.dll" /> </Component> </Directory> -<Directory Id="Resources" Name="Resources"> -<Component Id="_comp49" Guid="16f71db5-f216-4ce9-8379-1c5d8e9cfc1a"> -<File Id="_50" Source="..\bin\release\Resources\MAVCmd.txt" /> -<File Id="_51" Source="..\bin\release\Resources\Welcome_to_Michael_Oborne.rtf" /> +<Directory Id="Resources56" Name="Resources"> +<Component Id="_comp57" Guid="455d632e-d45a-4d33-8686-48c2e734c6a2"> +<File Id="_58" Source="..\bin\release\Resources\MAVCmd.txt" /> +<File Id="_59" Source="..\bin\release\Resources\Welcome_to_Michael_Oborne.rtf" /> </Component> </Directory> -<Directory Id="ru_RU" Name="ru-RU"> -<Component Id="_comp51" Guid="41050916-508f-4f5e-b547-5374fe279b0f"> -<File Id="_52" Source="..\bin\release\ru-RU\ArdupilotMegaPlanner.resources.dll" /> +<Directory Id="ru_RU59" Name="ru-RU"> +<Component Id="_comp60" Guid="d8f500bc-350b-4b04-9926-ba6308e4dbb4"> +<File Id="_61" Source="..\bin\release\ru-RU\ArdupilotMegaPlanner.resources.dll" /> </Component> </Directory> -<Directory Id="zh_Hans" Name="zh-Hans"> -<Component Id="_comp52" Guid="bbcbc38d-f1d3-4686-895d-9db643ac93aa"> -<File Id="_53" Source="..\bin\release\zh-Hans\ArdupilotMegaPlanner.resources.dll" /> +<Directory Id="zh_Hans61" Name="zh-Hans"> +<Component Id="_comp62" Guid="698d99e5-250c-435f-b596-dd99d9c68e64"> +<File Id="_63" Source="..\bin\release\zh-Hans\ArdupilotMegaPlanner.resources.dll" /> </Component> </Directory> -<Directory Id="zh_TW" Name="zh-TW"> -<Component Id="_comp53" Guid="1abb66a4-ec2e-46a5-8ec7-df5ead6615ac"> -<File Id="_54" Source="..\bin\release\zh-TW\ArdupilotMegaPlanner.resources.dll" /> +<Directory Id="zh_TW63" Name="zh-TW"> +<Component Id="_comp64" Guid="d051d520-b580-4990-b1ab-12107aa8571f"> +<File Id="_65" Source="..\bin\release\zh-TW\ArdupilotMegaPlanner.resources.dll" /> </Component> </Directory> @@ -157,17 +157,17 @@ <Feature Id="MyFeature" Title="My 1st Feature" Level="1"> <ComponentRef Id="InstallDirPermissions" /> -<ComponentRef Id="_comp0" /> -<ComponentRef Id="_comp40" /> -<ComponentRef Id="_comp41" /> +<ComponentRef Id="_comp1" /> <ComponentRef Id="_comp42" /> -<ComponentRef Id="_comp43" /> <ComponentRef Id="_comp44" /> +<ComponentRef Id="_comp46" /> <ComponentRef Id="_comp48" /> -<ComponentRef Id="_comp49" /> -<ComponentRef Id="_comp51" /> -<ComponentRef Id="_comp52" /> -<ComponentRef Id="_comp53" /> +<ComponentRef Id="_comp50" /> +<ComponentRef Id="_comp55" /> +<ComponentRef Id="_comp57" /> +<ComponentRef Id="_comp60" /> +<ComponentRef Id="_comp62" /> +<ComponentRef Id="_comp64" /> <ComponentRef Id="ApplicationShortcut" /> @@ -188,7 +188,7 @@ <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch APM Planner" /> <!-- Step 3: Include the custom action --> - <Property Id="WixShellExecTarget" Value="[#_4]" /> + <Property Id="WixShellExecTarget" Value="[#_5]" /> <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" diff --git a/Tools/ArdupilotMegaPlanner/Msi/wix.pdb b/Tools/ArdupilotMegaPlanner/Msi/wix.pdb index 6dc9934ea7b74ecfbed52623defbbc9c6536421b..8fb53eec78ed739b330092c5331470c195ec9319 100644 GIT binary patch literal 19968 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 literal 13824 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 C%Kje! diff --git a/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs b/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs index c21a96831..d2c9210b8 100644 --- a/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs +++ b/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs @@ -34,5 +34,5 @@ using System.Resources; // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.1.60")] +[assembly: AssemblyFileVersion("1.1.61")] [assembly: NeutralResourcesLanguageAttribute("")] diff --git a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs index 62c057b62..cfd1fb933 100644 --- a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs +++ b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs @@ -55,12 +55,12 @@ this.RS3 = new System.Windows.Forms.ComboBox(); this.RS2 = new System.Windows.Forms.ComboBox(); this.RS1 = new System.Windows.Forms.ComboBox(); + this.RSSI = new System.Windows.Forms.TextBox(); this.RS0 = new System.Windows.Forms.TextBox(); this.label9 = new System.Windows.Forms.Label(); this.label10 = new System.Windows.Forms.Label(); this.RTI = new System.Windows.Forms.TextBox(); this.ATI = new System.Windows.Forms.TextBox(); - this.RSSI = new System.Windows.Forms.TextBox(); this.label11 = new System.Windows.Forms.Label(); this.label12 = new System.Windows.Forms.Label(); this.BUT_savesettings = new ArdupilotMega.MyButton(); @@ -139,13 +139,16 @@ // this.S2.FormattingEnabled = true; this.S2.Items.AddRange(new object[] { + "250", "192", - "160", "128", "96", "64", "32", - "16"}); + "16", + "8", + "4", + "2"}); this.S2.Location = new System.Drawing.Point(87, 168); this.S2.Name = "S2"; this.S2.Size = new System.Drawing.Size(80, 21); @@ -283,9 +286,9 @@ this.label8.AutoSize = true; this.label8.Location = new System.Drawing.Point(15, 311); this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(68, 13); + this.label8.Size = new System.Drawing.Size(61, 13); this.label8.TabIndex = 20; - this.label8.Text = "Op Pre Send"; + this.label8.Text = "Op Resend"; // // S7 // @@ -395,13 +398,16 @@ // this.RS2.FormattingEnabled = true; this.RS2.Items.AddRange(new object[] { + "250", "192", - "160", "128", "96", "64", "32", - "16"}); + "16", + "8", + "4", + "2"}); this.RS2.Location = new System.Drawing.Point(201, 168); this.RS2.Name = "RS2"; this.RS2.Size = new System.Drawing.Size(80, 21); @@ -429,6 +435,16 @@ this.RS1.TabIndex = 22; this.toolTip1.SetToolTip(this.RS1, "Serial baud rate in rounded kbps. So 57 means 57600. \r\n"); // + // RSSI + // + this.RSSI.Location = new System.Drawing.Point(87, 51); + this.RSSI.Multiline = true; + this.RSSI.Name = "RSSI"; + this.RSSI.ReadOnly = true; + this.RSSI.Size = new System.Drawing.Size(194, 58); + this.RSSI.TabIndex = 34; + this.toolTip1.SetToolTip(this.RSSI, resources.GetString("RSSI.ToolTip")); + // // RS0 // this.RS0.Location = new System.Drawing.Point(201, 115); @@ -471,16 +487,6 @@ this.ATI.Size = new System.Drawing.Size(80, 20); this.ATI.TabIndex = 32; // - // RSSI - // - this.RSSI.Location = new System.Drawing.Point(87, 51); - this.RSSI.Multiline = true; - this.RSSI.Name = "RSSI"; - this.RSSI.ReadOnly = true; - this.RSSI.Size = new System.Drawing.Size(194, 58); - this.RSSI.TabIndex = 34; - this.toolTip1.SetToolTip(this.RSSI, resources.GetString("RSSI.ToolTip")); - // // label11 // this.label11.AutoSize = true; @@ -501,6 +507,7 @@ // // BUT_savesettings // + this.BUT_savesettings.Enabled = false; this.BUT_savesettings.Location = new System.Drawing.Point(99, 330); this.BUT_savesettings.Name = "BUT_savesettings"; this.BUT_savesettings.Size = new System.Drawing.Size(75, 39); diff --git a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.cs b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.cs index 19d2f1f20..40901cf4c 100644 --- a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.cs +++ b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.cs @@ -29,9 +29,10 @@ namespace ArdupilotMega bool getFirmware() { - //https://raw.github.com/tridge/SiK/master/Firmware/dst/radio.hm_trp.hex + // was https://raw.github.com/tridge/SiK/master/Firmware/dst/radio.hm_trp.hex + // now http://www.samba.org/tridge/UAV/3DR/radio.hm_trp.hex - return Common.getFilefromNet("https://raw.github.com/tridge/SiK/master/Firmware/dst/radio.hm_trp.hex", firmwarefile); + return Common.getFilefromNet("http://www.samba.org/tridge/UAV/3DR/radio.hm_trp.hex", firmwarefile); } void Sleep(int mstimeout) @@ -449,6 +450,9 @@ namespace ArdupilotMega { Control[] controls = this.Controls.Find("R" + values[0].Trim(), false); + if (controls.Length == 0) + continue; + if (controls[0].GetType() == typeof(CheckBox)) { ((CheckBox)controls[0]).Checked = values[2].Trim() == "1"; @@ -485,6 +489,8 @@ namespace ArdupilotMega } comPort.Close(); + + BUT_savesettings.Enabled = true; } string Serial_ReadLine(ArdupilotMega.ICommsSerial comPort) diff --git a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx index 5194d642e..6d793168a 100644 --- a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx +++ b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx @@ -120,9 +120,6 @@ <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <value>17, 17</value> </metadata> - <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> - <value>17, 17</value> - </metadata> <data name="S3.ToolTip" xml:space="preserve"> <value>NETID is a 16 bit 'network ID'. This is used to seed the frequency hopping sequence and to identify packets as coming from the right radio. Make sure you use a different NETID from anyone else running the same sort of radio in the area. </value> </data> diff --git a/Tools/ArdupilotMegaPlanner/Script.cs b/Tools/ArdupilotMegaPlanner/Script.cs index 60d5ea4fa..9face19c3 100644 --- a/Tools/ArdupilotMegaPlanner/Script.cs +++ b/Tools/ArdupilotMegaPlanner/Script.cs @@ -14,7 +14,7 @@ namespace ArdupilotMega static Microsoft.Scripting.Hosting.ScriptScope scope; // keeps history - MAVLink.__mavlink_rc_channels_override_t rc = new MAVLink.__mavlink_rc_channels_override_t(); + MAVLink.mavlink_rc_channels_override_t rc = new MAVLink.mavlink_rc_channels_override_t(); public Script() { diff --git a/Tools/ArdupilotMegaPlanner/Setup/Setup.resx b/Tools/ArdupilotMegaPlanner/Setup/Setup.resx index 0524d1cf2..078647e4e 100644 --- a/Tools/ArdupilotMegaPlanner/Setup/Setup.resx +++ b/Tools/ArdupilotMegaPlanner/Setup/Setup.resx @@ -117,1656 +117,15 @@ <resheader name="writer"> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> - <data name=">>groupBoxElevons.Name" xml:space="preserve"> - <value>groupBoxElevons</value> - </data> - <data name=">>groupBoxElevons.Type" xml:space="preserve"> - <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>groupBoxElevons.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>groupBoxElevons.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>CHK_revch3.Name" xml:space="preserve"> - <value>CHK_revch3</value> - </data> - <data name=">>CHK_revch3.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_revch3.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>CHK_revch3.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name=">>CHK_revch4.Name" xml:space="preserve"> - <value>CHK_revch4</value> - </data> - <data name=">>CHK_revch4.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_revch4.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>CHK_revch4.ZOrder" xml:space="preserve"> - <value>2</value> - </data> - <data name=">>CHK_revch2.Name" xml:space="preserve"> - <value>CHK_revch2</value> - </data> - <data name=">>CHK_revch2.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_revch2.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>CHK_revch2.ZOrder" xml:space="preserve"> - <value>3</value> - </data> - <data name=">>CHK_revch1.Name" xml:space="preserve"> - <value>CHK_revch1</value> - </data> - <data name=">>CHK_revch1.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_revch1.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>CHK_revch1.ZOrder" xml:space="preserve"> - <value>4</value> - </data> - <data name=">>BUT_Calibrateradio.Name" xml:space="preserve"> - <value>BUT_Calibrateradio</value> - </data> - <data name=">>BUT_Calibrateradio.Type" xml:space="preserve"> - <value>ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BUT_Calibrateradio.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>BUT_Calibrateradio.ZOrder" xml:space="preserve"> - <value>5</value> - </data> - <data name=">>BAR8.Name" xml:space="preserve"> - <value>BAR8</value> - </data> - <data name=">>BAR8.Type" xml:space="preserve"> - <value>ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BAR8.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>BAR8.ZOrder" xml:space="preserve"> - <value>6</value> - </data> - <data name=">>BAR7.Name" xml:space="preserve"> - <value>BAR7</value> - </data> - <data name=">>BAR7.Type" xml:space="preserve"> - <value>ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BAR7.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>BAR7.ZOrder" xml:space="preserve"> - <value>7</value> - </data> - <data name=">>BAR6.Name" xml:space="preserve"> - <value>BAR6</value> - </data> - <data name=">>BAR6.Type" xml:space="preserve"> - <value>ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BAR6.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>BAR6.ZOrder" xml:space="preserve"> - <value>8</value> - </data> - <data name=">>BAR5.Name" xml:space="preserve"> - <value>BAR5</value> - </data> - <data name=">>BAR5.Type" xml:space="preserve"> - <value>ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BAR5.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>BAR5.ZOrder" xml:space="preserve"> - <value>9</value> - </data> - <data name=">>BARpitch.Name" xml:space="preserve"> - <value>BARpitch</value> - </data> - <data name=">>BARpitch.Type" xml:space="preserve"> - <value>ArdupilotMega.VerticalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BARpitch.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>BARpitch.ZOrder" xml:space="preserve"> - <value>10</value> - </data> - <data name=">>BARthrottle.Name" xml:space="preserve"> - <value>BARthrottle</value> - </data> - <data name=">>BARthrottle.Type" xml:space="preserve"> - <value>ArdupilotMega.VerticalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BARthrottle.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>BARthrottle.ZOrder" xml:space="preserve"> - <value>11</value> - </data> - <data name=">>BARyaw.Name" xml:space="preserve"> - <value>BARyaw</value> - </data> - <data name=">>BARyaw.Type" xml:space="preserve"> - <value>ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BARyaw.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>BARyaw.ZOrder" xml:space="preserve"> - <value>12</value> - </data> - <data name=">>BARroll.Name" xml:space="preserve"> - <value>BARroll</value> - </data> - <data name=">>BARroll.Type" xml:space="preserve"> - <value>ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BARroll.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>BARroll.ZOrder" xml:space="preserve"> - <value>13</value> - </data> - <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> - <data name="tabRadioIn.Location" type="System.Drawing.Point, System.Drawing"> - <value>4, 22</value> - </data> - <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> - <data name="tabRadioIn.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms"> - <value>3, 3, 3, 3</value> - </data> - <data name="tabRadioIn.Size" type="System.Drawing.Size, System.Drawing"> - <value>666, 393</value> - </data> - <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> - <data name="tabRadioIn.TabIndex" type="System.Int32, mscorlib"> - <value>0</value> - </data> - <data name="tabRadioIn.Text" xml:space="preserve"> - <value>Radio Input</value> - </data> - <data name=">>tabRadioIn.Name" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>tabRadioIn.Type" xml:space="preserve"> - <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>tabRadioIn.Parent" xml:space="preserve"> - <value>Tabs</value> - </data> - <data name=">>tabRadioIn.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>CB_simple6.Name" xml:space="preserve"> - <value>CB_simple6</value> - </data> - <data name=">>CB_simple6.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CB_simple6.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CB_simple6.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>CB_simple5.Name" xml:space="preserve"> - <value>CB_simple5</value> - </data> - <data name=">>CB_simple5.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CB_simple5.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CB_simple5.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name=">>CB_simple4.Name" xml:space="preserve"> - <value>CB_simple4</value> - </data> - <data name=">>CB_simple4.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CB_simple4.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CB_simple4.ZOrder" xml:space="preserve"> - <value>2</value> - </data> - <data name=">>CB_simple3.Name" xml:space="preserve"> - <value>CB_simple3</value> - </data> - <data name=">>CB_simple3.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CB_simple3.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CB_simple3.ZOrder" xml:space="preserve"> - <value>3</value> - </data> - <data name=">>CB_simple2.Name" xml:space="preserve"> - <value>CB_simple2</value> - </data> - <data name=">>CB_simple2.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CB_simple2.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CB_simple2.ZOrder" xml:space="preserve"> - <value>4</value> - </data> - <data name=">>CB_simple1.Name" xml:space="preserve"> - <value>CB_simple1</value> - </data> - <data name=">>CB_simple1.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CB_simple1.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CB_simple1.ZOrder" xml:space="preserve"> - <value>5</value> - </data> - <data name=">>label14.Name" xml:space="preserve"> - <value>label14</value> - </data> - <data name=">>label14.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label14.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label14.ZOrder" xml:space="preserve"> - <value>6</value> - </data> - <data name=">>LBL_flightmodepwm.Name" xml:space="preserve"> - <value>LBL_flightmodepwm</value> - </data> - <data name=">>LBL_flightmodepwm.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>LBL_flightmodepwm.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>LBL_flightmodepwm.ZOrder" xml:space="preserve"> - <value>7</value> - </data> - <data name=">>label13.Name" xml:space="preserve"> - <value>label13</value> - </data> - <data name=">>label13.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label13.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label13.ZOrder" xml:space="preserve"> - <value>8</value> - </data> - <data name=">>lbl_currentmode.Name" xml:space="preserve"> - <value>lbl_currentmode</value> - </data> - <data name=">>lbl_currentmode.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>lbl_currentmode.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>lbl_currentmode.ZOrder" xml:space="preserve"> - <value>9</value> - </data> - <data name=">>label12.Name" xml:space="preserve"> - <value>label12</value> - </data> - <data name=">>label12.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label12.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label12.ZOrder" xml:space="preserve"> - <value>10</value> - </data> - <data name=">>label11.Name" xml:space="preserve"> - <value>label11</value> - </data> - <data name=">>label11.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label11.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label11.ZOrder" xml:space="preserve"> - <value>11</value> - </data> - <data name=">>label10.Name" xml:space="preserve"> - <value>label10</value> - </data> - <data name=">>label10.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label10.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label10.ZOrder" xml:space="preserve"> - <value>12</value> - </data> - <data name=">>label9.Name" xml:space="preserve"> - <value>label9</value> - </data> - <data name=">>label9.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label9.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label9.ZOrder" xml:space="preserve"> - <value>13</value> - </data> - <data name=">>label8.Name" xml:space="preserve"> - <value>label8</value> - </data> - <data name=">>label8.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label8.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label8.ZOrder" xml:space="preserve"> - <value>14</value> - </data> - <data name=">>label7.Name" xml:space="preserve"> - <value>label7</value> - </data> - <data name=">>label7.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label7.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label7.ZOrder" xml:space="preserve"> - <value>15</value> - </data> - <data name=">>label6.Name" xml:space="preserve"> - <value>label6</value> - </data> - <data name=">>label6.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label6.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label6.ZOrder" xml:space="preserve"> - <value>16</value> - </data> - <data name=">>CMB_fmode6.Name" xml:space="preserve"> - <value>CMB_fmode6</value> - </data> - <data name=">>CMB_fmode6.Type" xml:space="preserve"> - <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CMB_fmode6.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CMB_fmode6.ZOrder" xml:space="preserve"> - <value>17</value> - </data> - <data name=">>label5.Name" xml:space="preserve"> - <value>label5</value> - </data> - <data name=">>label5.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label5.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label5.ZOrder" xml:space="preserve"> - <value>18</value> - </data> - <data name=">>CMB_fmode5.Name" xml:space="preserve"> - <value>CMB_fmode5</value> - </data> - <data name=">>CMB_fmode5.Type" xml:space="preserve"> - <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CMB_fmode5.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CMB_fmode5.ZOrder" xml:space="preserve"> - <value>19</value> - </data> - <data name=">>label4.Name" xml:space="preserve"> - <value>label4</value> - </data> - <data name=">>label4.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label4.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label4.ZOrder" xml:space="preserve"> - <value>20</value> - </data> - <data name=">>CMB_fmode4.Name" xml:space="preserve"> - <value>CMB_fmode4</value> - </data> - <data name=">>CMB_fmode4.Type" xml:space="preserve"> - <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CMB_fmode4.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CMB_fmode4.ZOrder" xml:space="preserve"> - <value>21</value> - </data> - <data name=">>label3.Name" xml:space="preserve"> - <value>label3</value> - </data> - <data name=">>label3.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label3.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label3.ZOrder" xml:space="preserve"> - <value>22</value> - </data> - <data name=">>CMB_fmode3.Name" xml:space="preserve"> - <value>CMB_fmode3</value> - </data> - <data name=">>CMB_fmode3.Type" xml:space="preserve"> - <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CMB_fmode3.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CMB_fmode3.ZOrder" xml:space="preserve"> - <value>23</value> - </data> - <data name=">>label2.Name" xml:space="preserve"> - <value>label2</value> - </data> - <data name=">>label2.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label2.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label2.ZOrder" xml:space="preserve"> - <value>24</value> - </data> - <data name=">>CMB_fmode2.Name" xml:space="preserve"> - <value>CMB_fmode2</value> - </data> - <data name=">>CMB_fmode2.Type" xml:space="preserve"> - <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CMB_fmode2.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CMB_fmode2.ZOrder" xml:space="preserve"> - <value>25</value> - </data> - <data name=">>label1.Name" xml:space="preserve"> - <value>label1</value> - </data> - <data name=">>label1.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label1.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>label1.ZOrder" xml:space="preserve"> - <value>26</value> - </data> - <data name=">>CMB_fmode1.Name" xml:space="preserve"> - <value>CMB_fmode1</value> - </data> - <data name=">>CMB_fmode1.Type" xml:space="preserve"> - <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CMB_fmode1.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>CMB_fmode1.ZOrder" xml:space="preserve"> - <value>27</value> - </data> - <data name=">>BUT_SaveModes.Name" xml:space="preserve"> - <value>BUT_SaveModes</value> - </data> - <data name=">>BUT_SaveModes.Type" xml:space="preserve"> - <value>ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BUT_SaveModes.Parent" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>BUT_SaveModes.ZOrder" xml:space="preserve"> - <value>28</value> - </data> - <data name="tabModes.Location" type="System.Drawing.Point, System.Drawing"> - <value>4, 22</value> - </data> - <data name="tabModes.Size" type="System.Drawing.Size, System.Drawing"> - <value>666, 393</value> - </data> - <data name="tabModes.TabIndex" type="System.Int32, mscorlib"> - <value>3</value> - </data> - <data name="tabModes.Text" xml:space="preserve"> - <value>Modes</value> - </data> - <data name=">>tabModes.Name" xml:space="preserve"> - <value>tabModes</value> - </data> - <data name=">>tabModes.Type" xml:space="preserve"> - <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>tabModes.Parent" xml:space="preserve"> - <value>Tabs</value> - </data> - <data name=">>tabModes.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name=">>BUT_MagCalibration.Name" xml:space="preserve"> - <value>BUT_MagCalibration</value> - </data> - <data name=">>BUT_MagCalibration.Type" xml:space="preserve"> - <value>ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BUT_MagCalibration.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>BUT_MagCalibration.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>label27.Name" xml:space="preserve"> - <value>label27</value> - </data> - <data name=">>label27.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label27.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>label27.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name=">>CMB_sonartype.Name" xml:space="preserve"> - <value>CMB_sonartype</value> - </data> - <data name=">>CMB_sonartype.Type" xml:space="preserve"> - <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CMB_sonartype.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>CMB_sonartype.ZOrder" xml:space="preserve"> - <value>2</value> - </data> - <data name=">>CHK_enableoptflow.Name" xml:space="preserve"> - <value>CHK_enableoptflow</value> - </data> - <data name=">>CHK_enableoptflow.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_enableoptflow.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>CHK_enableoptflow.ZOrder" xml:space="preserve"> - <value>3</value> - </data> - <data name=">>pictureBox2.Name" xml:space="preserve"> - <value>pictureBox2</value> - </data> - <data name=">>pictureBox2.Type" xml:space="preserve"> - <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>pictureBox2.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>pictureBox2.ZOrder" xml:space="preserve"> - <value>4</value> - </data> - <data name=">>linkLabelmagdec.Name" xml:space="preserve"> - <value>linkLabelmagdec</value> - </data> - <data name=">>linkLabelmagdec.Type" xml:space="preserve"> - <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>linkLabelmagdec.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>linkLabelmagdec.ZOrder" xml:space="preserve"> - <value>5</value> - </data> - <data name=">>label100.Name" xml:space="preserve"> - <value>label100</value> - </data> - <data name=">>label100.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label100.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>label100.ZOrder" xml:space="preserve"> - <value>6</value> - </data> - <data name=">>TXT_declination.Name" xml:space="preserve"> - <value>TXT_declination</value> - </data> - <data name=">>TXT_declination.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>TXT_declination.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>TXT_declination.ZOrder" xml:space="preserve"> - <value>7</value> - </data> - <data name=">>CHK_enableairspeed.Name" xml:space="preserve"> - <value>CHK_enableairspeed</value> - </data> - <data name=">>CHK_enableairspeed.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_enableairspeed.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>CHK_enableairspeed.ZOrder" xml:space="preserve"> - <value>8</value> - </data> - <data name=">>CHK_enablesonar.Name" xml:space="preserve"> - <value>CHK_enablesonar</value> - </data> - <data name=">>CHK_enablesonar.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_enablesonar.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>CHK_enablesonar.ZOrder" xml:space="preserve"> - <value>9</value> - </data> - <data name=">>CHK_enablecompass.Name" xml:space="preserve"> - <value>CHK_enablecompass</value> - </data> - <data name=">>CHK_enablecompass.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_enablecompass.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>CHK_enablecompass.ZOrder" xml:space="preserve"> - <value>10</value> - </data> - <data name=">>pictureBox4.Name" xml:space="preserve"> - <value>pictureBox4</value> - </data> - <data name=">>pictureBox4.Type" xml:space="preserve"> - <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>pictureBox4.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>pictureBox4.ZOrder" xml:space="preserve"> - <value>11</value> - </data> - <data name=">>pictureBox3.Name" xml:space="preserve"> - <value>pictureBox3</value> - </data> - <data name=">>pictureBox3.Type" xml:space="preserve"> - <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>pictureBox3.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>pictureBox3.ZOrder" xml:space="preserve"> - <value>12</value> - </data> - <data name=">>pictureBox1.Name" xml:space="preserve"> - <value>pictureBox1</value> - </data> - <data name=">>pictureBox1.Type" xml:space="preserve"> - <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>pictureBox1.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>pictureBox1.ZOrder" xml:space="preserve"> - <value>13</value> - </data> - <data name="tabHardware.Location" type="System.Drawing.Point, System.Drawing"> - <value>4, 22</value> - </data> - <data name="tabHardware.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms"> - <value>3, 3, 3, 3</value> - </data> - <data name="tabHardware.Size" type="System.Drawing.Size, System.Drawing"> - <value>666, 393</value> - </data> - <data name="tabHardware.TabIndex" type="System.Int32, mscorlib"> - <value>1</value> - </data> - <data name="tabHardware.Text" xml:space="preserve"> - <value>Hardware</value> - </data> - <data name=">>tabHardware.Name" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>tabHardware.Type" xml:space="preserve"> - <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>tabHardware.Parent" xml:space="preserve"> - <value>Tabs</value> - </data> - <data name=">>tabHardware.ZOrder" xml:space="preserve"> - <value>2</value> - </data> - <data name=">>groupBox4.Name" xml:space="preserve"> - <value>groupBox4</value> - </data> - <data name=">>groupBox4.Type" xml:space="preserve"> - <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>groupBox4.Parent" xml:space="preserve"> - <value>tabBattery</value> - </data> - <data name=">>groupBox4.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>label47.Name" xml:space="preserve"> - <value>label47</value> - </data> - <data name=">>label47.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label47.Parent" xml:space="preserve"> - <value>tabBattery</value> - </data> - <data name=">>label47.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name=">>CMB_batmonsensortype.Name" xml:space="preserve"> - <value>CMB_batmonsensortype</value> - </data> - <data name=">>CMB_batmonsensortype.Type" xml:space="preserve"> - <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CMB_batmonsensortype.Parent" xml:space="preserve"> - <value>tabBattery</value> - </data> - <data name=">>CMB_batmonsensortype.ZOrder" xml:space="preserve"> - <value>2</value> - </data> - <data name=">>textBox3.Name" xml:space="preserve"> - <value>textBox3</value> - </data> - <data name=">>textBox3.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>textBox3.Parent" xml:space="preserve"> - <value>tabBattery</value> - </data> - <data name=">>textBox3.ZOrder" xml:space="preserve"> - <value>3</value> - </data> - <data name=">>label29.Name" xml:space="preserve"> - <value>label29</value> - </data> - <data name=">>label29.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label29.Parent" xml:space="preserve"> - <value>tabBattery</value> - </data> - <data name=">>label29.ZOrder" xml:space="preserve"> - <value>4</value> - </data> - <data name=">>label30.Name" xml:space="preserve"> - <value>label30</value> - </data> - <data name=">>label30.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label30.Parent" xml:space="preserve"> - <value>tabBattery</value> - </data> - <data name=">>label30.ZOrder" xml:space="preserve"> - <value>5</value> - </data> - <data name=">>TXT_battcapacity.Name" xml:space="preserve"> - <value>TXT_battcapacity</value> - </data> - <data name=">>TXT_battcapacity.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>TXT_battcapacity.Parent" xml:space="preserve"> - <value>tabBattery</value> - </data> - <data name=">>TXT_battcapacity.ZOrder" xml:space="preserve"> - <value>6</value> - </data> - <data name=">>CMB_batmontype.Name" xml:space="preserve"> - <value>CMB_batmontype</value> - </data> - <data name=">>CMB_batmontype.Type" xml:space="preserve"> - <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CMB_batmontype.Parent" xml:space="preserve"> - <value>tabBattery</value> - </data> - <data name=">>CMB_batmontype.ZOrder" xml:space="preserve"> - <value>7</value> - </data> - <data name=">>pictureBox5.Name" xml:space="preserve"> - <value>pictureBox5</value> - </data> - <data name=">>pictureBox5.Type" xml:space="preserve"> - <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>pictureBox5.Parent" xml:space="preserve"> - <value>tabBattery</value> - </data> - <data name=">>pictureBox5.ZOrder" xml:space="preserve"> - <value>8</value> - </data> - <data name="tabBattery.Location" type="System.Drawing.Point, System.Drawing"> - <value>4, 22</value> - </data> - <data name="tabBattery.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms"> - <value>2, 2, 2, 2</value> - </data> - <data name="tabBattery.Size" type="System.Drawing.Size, System.Drawing"> - <value>666, 393</value> - </data> - <data name="tabBattery.TabIndex" type="System.Int32, mscorlib"> - <value>6</value> - </data> - <data name="tabBattery.Text" xml:space="preserve"> - <value>Battery</value> - </data> - <data name=">>tabBattery.Name" xml:space="preserve"> - <value>tabBattery</value> - </data> - <data name=">>tabBattery.Type" xml:space="preserve"> - <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>tabBattery.Parent" xml:space="preserve"> - <value>Tabs</value> - </data> - <data name=">>tabBattery.ZOrder" xml:space="preserve"> - <value>3</value> - </data> - <data name="label48.AutoSize" type="System.Boolean, mscorlib"> - <value>True</value> - </data> - <data name="label48.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> - <value>NoControl</value> - </data> - <data name="label48.Location" type="System.Drawing.Point, System.Drawing"> - <value>228, 170</value> - </data> - <data name="label48.Size" type="System.Drawing.Size, System.Drawing"> - <value>212, 13</value> - </data> - <data name="label48.TabIndex" type="System.Int32, mscorlib"> - <value>11</value> - </data> - <data name="label48.Text" xml:space="preserve"> - <value>Level your plane to set default accel offsets</value> - </data> - <data name=">>label48.Name" xml:space="preserve"> - <value>label48</value> - </data> - <data name=">>label48.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label48.Parent" xml:space="preserve"> - <value>tabArduplane</value> - </data> - <data name=">>label48.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name="BUT_levelplane.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> - <value>NoControl</value> - </data> - <data name="BUT_levelplane.Location" type="System.Drawing.Point, System.Drawing"> - <value>285, 199</value> - </data> - <data name="BUT_levelplane.Size" type="System.Drawing.Size, System.Drawing"> - <value>75, 23</value> - </data> - <data name="BUT_levelplane.TabIndex" type="System.Int32, mscorlib"> - <value>10</value> - </data> - <data name="BUT_levelplane.Text" xml:space="preserve"> - <value>Level</value> - </data> - <data name=">>BUT_levelplane.Name" xml:space="preserve"> - <value>BUT_levelplane</value> - </data> - <data name=">>BUT_levelplane.Type" xml:space="preserve"> - <value>ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BUT_levelplane.Parent" xml:space="preserve"> - <value>tabArduplane</value> - </data> - <data name=">>BUT_levelplane.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name="tabArduplane.Location" type="System.Drawing.Point, System.Drawing"> - <value>4, 22</value> - </data> - <data name="tabArduplane.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms"> - <value>3, 3, 3, 3</value> - </data> - <data name="tabArduplane.Size" type="System.Drawing.Size, System.Drawing"> - <value>666, 393</value> - </data> - <data name="tabArduplane.TabIndex" type="System.Int32, mscorlib"> - <value>7</value> - </data> - <data name="tabArduplane.Text" xml:space="preserve"> - <value>ArduPlane</value> - </data> - <data name=">>tabArduplane.Name" xml:space="preserve"> - <value>tabArduplane</value> - </data> - <data name=">>tabArduplane.Type" xml:space="preserve"> - <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>tabArduplane.Parent" xml:space="preserve"> - <value>Tabs</value> - </data> - <data name=">>tabArduplane.ZOrder" xml:space="preserve"> - <value>4</value> - </data> - <data name=">>label28.Name" xml:space="preserve"> - <value>label28</value> - </data> - <data name=">>label28.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label28.Parent" xml:space="preserve"> - <value>tabArducopter</value> - </data> - <data name=">>label28.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>label16.Name" xml:space="preserve"> - <value>label16</value> - </data> - <data name=">>label16.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label16.Parent" xml:space="preserve"> - <value>tabArducopter</value> - </data> - <data name=">>label16.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name=">>label15.Name" xml:space="preserve"> - <value>label15</value> - </data> - <data name=">>label15.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label15.Parent" xml:space="preserve"> - <value>tabArducopter</value> - </data> - <data name=">>label15.ZOrder" xml:space="preserve"> - <value>2</value> - </data> - <data name=">>pictureBoxQuadX.Name" xml:space="preserve"> - <value>pictureBoxQuadX</value> - </data> - <data name=">>pictureBoxQuadX.Type" xml:space="preserve"> - <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>pictureBoxQuadX.Parent" xml:space="preserve"> - <value>tabArducopter</value> - </data> - <data name=">>pictureBoxQuadX.ZOrder" xml:space="preserve"> - <value>3</value> - </data> - <data name=">>pictureBoxQuad.Name" xml:space="preserve"> - <value>pictureBoxQuad</value> - </data> - <data name=">>pictureBoxQuad.Type" xml:space="preserve"> - <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>pictureBoxQuad.Parent" xml:space="preserve"> - <value>tabArducopter</value> - </data> - <data name=">>pictureBoxQuad.ZOrder" xml:space="preserve"> - <value>4</value> - </data> - <data name=">>BUT_levelac2.Name" xml:space="preserve"> - <value>BUT_levelac2</value> - </data> - <data name=">>BUT_levelac2.Type" xml:space="preserve"> - <value>ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BUT_levelac2.Parent" xml:space="preserve"> - <value>tabArducopter</value> - </data> - <data name=">>BUT_levelac2.ZOrder" xml:space="preserve"> - <value>5</value> - </data> - <data name="tabArducopter.Location" type="System.Drawing.Point, System.Drawing"> - <value>4, 22</value> - </data> - <data name="tabArducopter.Size" type="System.Drawing.Size, System.Drawing"> - <value>666, 393</value> - </data> - <data name="tabArducopter.TabIndex" type="System.Int32, mscorlib"> - <value>2</value> - </data> - <data name="tabArducopter.Text" xml:space="preserve"> - <value>ArduCopter2</value> - </data> - <data name=">>tabArducopter.Name" xml:space="preserve"> - <value>tabArducopter</value> - </data> - <data name=">>tabArducopter.Type" xml:space="preserve"> - <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>tabArducopter.Parent" xml:space="preserve"> - <value>Tabs</value> - </data> - <data name=">>tabArducopter.ZOrder" xml:space="preserve"> - <value>5</value> - </data> - <data name=">>groupBox5.Name" xml:space="preserve"> - <value>groupBox5</value> - </data> - <data name=">>groupBox5.Type" xml:space="preserve"> - <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>groupBox5.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>groupBox5.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>BUT_HS4save.Name" xml:space="preserve"> - <value>BUT_HS4save</value> - </data> - <data name=">>BUT_HS4save.Type" xml:space="preserve"> - <value>ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BUT_HS4save.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>BUT_HS4save.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name=">>BUT_swash_manual.Name" xml:space="preserve"> - <value>BUT_swash_manual</value> - </data> - <data name=">>BUT_swash_manual.Type" xml:space="preserve"> - <value>ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BUT_swash_manual.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>BUT_swash_manual.ZOrder" xml:space="preserve"> - <value>2</value> - </data> - <data name=">>groupBox3.Name" xml:space="preserve"> - <value>groupBox3</value> - </data> - <data name=">>groupBox3.Type" xml:space="preserve"> - <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>groupBox3.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>groupBox3.ZOrder" xml:space="preserve"> - <value>3</value> - </data> - <data name=">>label44.Name" xml:space="preserve"> - <value>label44</value> - </data> - <data name=">>label44.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label44.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label44.ZOrder" xml:space="preserve"> - <value>4</value> - </data> - <data name=">>label43.Name" xml:space="preserve"> - <value>label43</value> - </data> - <data name=">>label43.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label43.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label43.ZOrder" xml:space="preserve"> - <value>5</value> - </data> - <data name=">>label42.Name" xml:space="preserve"> - <value>label42</value> - </data> - <data name=">>label42.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label42.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label42.ZOrder" xml:space="preserve"> - <value>6</value> - </data> - <data name=">>groupBox2.Name" xml:space="preserve"> - <value>groupBox2</value> - </data> - <data name=">>groupBox2.Type" xml:space="preserve"> - <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>groupBox2.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>groupBox2.ZOrder" xml:space="preserve"> - <value>7</value> - </data> - <data name=">>groupBox1.Name" xml:space="preserve"> - <value>groupBox1</value> - </data> - <data name=">>groupBox1.Type" xml:space="preserve"> - <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>groupBox1.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>groupBox1.ZOrder" xml:space="preserve"> - <value>8</value> - </data> - <data name=">>HS4_TRIM.Name" xml:space="preserve"> - <value>HS4_TRIM</value> - </data> - <data name=">>HS4_TRIM.Type" xml:space="preserve"> - <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>HS4_TRIM.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>HS4_TRIM.ZOrder" xml:space="preserve"> - <value>9</value> - </data> - <data name=">>HS3_TRIM.Name" xml:space="preserve"> - <value>HS3_TRIM</value> - </data> - <data name=">>HS3_TRIM.Type" xml:space="preserve"> - <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>HS3_TRIM.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>HS3_TRIM.ZOrder" xml:space="preserve"> - <value>10</value> - </data> - <data name=">>HS2_TRIM.Name" xml:space="preserve"> - <value>HS2_TRIM</value> - </data> - <data name=">>HS2_TRIM.Type" xml:space="preserve"> - <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>HS2_TRIM.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>HS2_TRIM.ZOrder" xml:space="preserve"> - <value>11</value> - </data> - <data name=">>HS1_TRIM.Name" xml:space="preserve"> - <value>HS1_TRIM</value> - </data> - <data name=">>HS1_TRIM.Type" xml:space="preserve"> - <value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>HS1_TRIM.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>HS1_TRIM.ZOrder" xml:space="preserve"> - <value>12</value> - </data> - <data name=">>label39.Name" xml:space="preserve"> - <value>label39</value> - </data> - <data name=">>label39.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label39.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label39.ZOrder" xml:space="preserve"> - <value>13</value> - </data> - <data name=">>label38.Name" xml:space="preserve"> - <value>label38</value> - </data> - <data name=">>label38.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label38.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label38.ZOrder" xml:space="preserve"> - <value>14</value> - </data> - <data name=">>label37.Name" xml:space="preserve"> - <value>label37</value> - </data> - <data name=">>label37.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label37.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label37.ZOrder" xml:space="preserve"> - <value>15</value> - </data> - <data name=">>label36.Name" xml:space="preserve"> - <value>label36</value> - </data> - <data name=">>label36.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label36.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label36.ZOrder" xml:space="preserve"> - <value>16</value> - </data> - <data name=">>label26.Name" xml:space="preserve"> - <value>label26</value> - </data> - <data name=">>label26.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label26.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label26.ZOrder" xml:space="preserve"> - <value>17</value> - </data> - <data name=">>PIT_MAX.Name" xml:space="preserve"> - <value>PIT_MAX</value> - </data> - <data name=">>PIT_MAX.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>PIT_MAX.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>PIT_MAX.ZOrder" xml:space="preserve"> - <value>18</value> - </data> - <data name=">>label25.Name" xml:space="preserve"> - <value>label25</value> - </data> - <data name=">>label25.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label25.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label25.ZOrder" xml:space="preserve"> - <value>19</value> - </data> - <data name=">>ROL_MAX.Name" xml:space="preserve"> - <value>ROL_MAX</value> - </data> - <data name=">>ROL_MAX.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>ROL_MAX.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>ROL_MAX.ZOrder" xml:space="preserve"> - <value>20</value> - </data> - <data name=">>label23.Name" xml:space="preserve"> - <value>label23</value> - </data> - <data name=">>label23.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label23.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label23.ZOrder" xml:space="preserve"> - <value>21</value> - </data> - <data name=">>label22.Name" xml:space="preserve"> - <value>label22</value> - </data> - <data name=">>label22.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label22.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label22.ZOrder" xml:space="preserve"> - <value>22</value> - </data> - <data name=">>HS4_REV.Name" xml:space="preserve"> - <value>HS4_REV</value> - </data> - <data name=">>HS4_REV.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>HS4_REV.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>HS4_REV.ZOrder" xml:space="preserve"> - <value>23</value> - </data> - <data name=">>label20.Name" xml:space="preserve"> - <value>label20</value> - </data> - <data name=">>label20.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label20.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label20.ZOrder" xml:space="preserve"> - <value>24</value> - </data> - <data name=">>label19.Name" xml:space="preserve"> - <value>label19</value> - </data> - <data name=">>label19.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label19.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label19.ZOrder" xml:space="preserve"> - <value>25</value> - </data> - <data name=">>label18.Name" xml:space="preserve"> - <value>label18</value> - </data> - <data name=">>label18.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label18.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label18.ZOrder" xml:space="preserve"> - <value>26</value> - </data> - <data name=">>SV3_POS.Name" xml:space="preserve"> - <value>SV3_POS</value> - </data> - <data name=">>SV3_POS.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>SV3_POS.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>SV3_POS.ZOrder" xml:space="preserve"> - <value>27</value> - </data> - <data name=">>SV2_POS.Name" xml:space="preserve"> - <value>SV2_POS</value> - </data> - <data name=">>SV2_POS.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>SV2_POS.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>SV2_POS.ZOrder" xml:space="preserve"> - <value>28</value> - </data> - <data name=">>SV1_POS.Name" xml:space="preserve"> - <value>SV1_POS</value> - </data> - <data name=">>SV1_POS.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>SV1_POS.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>SV1_POS.ZOrder" xml:space="preserve"> - <value>29</value> - </data> - <data name=">>HS3_REV.Name" xml:space="preserve"> - <value>HS3_REV</value> - </data> - <data name=">>HS3_REV.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>HS3_REV.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>HS3_REV.ZOrder" xml:space="preserve"> - <value>30</value> - </data> - <data name=">>HS2_REV.Name" xml:space="preserve"> - <value>HS2_REV</value> - </data> - <data name=">>HS2_REV.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>HS2_REV.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>HS2_REV.ZOrder" xml:space="preserve"> - <value>31</value> - </data> - <data name=">>HS1_REV.Name" xml:space="preserve"> - <value>HS1_REV</value> - </data> - <data name=">>HS1_REV.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>HS1_REV.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>HS1_REV.ZOrder" xml:space="preserve"> - <value>32</value> - </data> - <data name=">>label17.Name" xml:space="preserve"> - <value>label17</value> - </data> - <data name=">>label17.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label17.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label17.ZOrder" xml:space="preserve"> - <value>33</value> - </data> - <data name=">>HS4.Name" xml:space="preserve"> - <value>HS4</value> - </data> - <data name=">>HS4.Type" xml:space="preserve"> - <value>ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>HS4.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>HS4.ZOrder" xml:space="preserve"> - <value>34</value> - </data> - <data name=">>HS3.Name" xml:space="preserve"> - <value>HS3</value> - </data> - <data name=">>HS3.Type" xml:space="preserve"> - <value>ArdupilotMega.VerticalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>HS3.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>HS3.ZOrder" xml:space="preserve"> - <value>35</value> - </data> - <data name=">>Gservoloc.Name" xml:space="preserve"> - <value>Gservoloc</value> - </data> - <data name=">>Gservoloc.Type" xml:space="preserve"> - <value>AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>Gservoloc.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>Gservoloc.ZOrder" xml:space="preserve"> - <value>36</value> - </data> - <data name="tabHeli.Location" type="System.Drawing.Point, System.Drawing"> - <value>4, 22</value> - </data> - <data name="tabHeli.Size" type="System.Drawing.Size, System.Drawing"> - <value>666, 393</value> - </data> - <data name="tabHeli.TabIndex" type="System.Int32, mscorlib"> - <value>5</value> - </data> - <data name="tabHeli.Text" xml:space="preserve"> - <value>AC2 Heli</value> - </data> - <data name=">>tabHeli.Name" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>tabHeli.Type" xml:space="preserve"> - <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>tabHeli.Parent" xml:space="preserve"> - <value>Tabs</value> - </data> - <data name=">>tabHeli.ZOrder" xml:space="preserve"> - <value>6</value> - </data> - <data name="Tabs.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"> - <value>Fill</value> - </data> - <data name="Tabs.Location" type="System.Drawing.Point, System.Drawing"> - <value>0, 0</value> - </data> - <data name="Tabs.Size" type="System.Drawing.Size, System.Drawing"> - <value>674, 419</value> - </data> - <data name="Tabs.TabIndex" type="System.Int32, mscorlib"> - <value>93</value> - </data> - <data name=">>Tabs.Name" xml:space="preserve"> - <value>Tabs</value> - </data> - <data name=">>Tabs.Type" xml:space="preserve"> - <value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>Tabs.Parent" xml:space="preserve"> - <value>$this</value> - </data> - <data name=">>Tabs.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>CHK_mixmode.Name" xml:space="preserve"> - <value>CHK_mixmode</value> - </data> - <data name=">>CHK_mixmode.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_mixmode.Parent" xml:space="preserve"> - <value>groupBoxElevons</value> - </data> - <data name=">>CHK_mixmode.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>CHK_elevonch2rev.Name" xml:space="preserve"> - <value>CHK_elevonch2rev</value> - </data> - <data name=">>CHK_elevonch2rev.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_elevonch2rev.Parent" xml:space="preserve"> - <value>groupBoxElevons</value> - </data> - <data name=">>CHK_elevonch2rev.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name=">>CHK_elevonrev.Name" xml:space="preserve"> - <value>CHK_elevonrev</value> - </data> - <data name=">>CHK_elevonrev.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_elevonrev.Parent" xml:space="preserve"> - <value>groupBoxElevons</value> - </data> - <data name=">>CHK_elevonrev.ZOrder" xml:space="preserve"> - <value>2</value> - </data> - <data name=">>CHK_elevonch1rev.Name" xml:space="preserve"> - <value>CHK_elevonch1rev</value> - </data> - <data name=">>CHK_elevonch1rev.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CHK_elevonch1rev.Parent" xml:space="preserve"> - <value>groupBoxElevons</value> - </data> - <data name=">>CHK_elevonch1rev.ZOrder" xml:space="preserve"> - <value>3</value> - </data> - <data name="groupBoxElevons.Location" type="System.Drawing.Point, System.Drawing"> - <value>21, 349</value> - </data> - <data name="groupBoxElevons.Size" type="System.Drawing.Size, System.Drawing"> - <value>409, 42</value> - </data> - <data name="groupBoxElevons.TabIndex" type="System.Int32, mscorlib"> - <value>111</value> - </data> - <data name="groupBoxElevons.Text" xml:space="preserve"> - <value>Elevon Config</value> - </data> - <data name=">>groupBoxElevons.Name" xml:space="preserve"> - <value>groupBoxElevons</value> - </data> - <data name=">>groupBoxElevons.Type" xml:space="preserve"> - <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>groupBoxElevons.Parent" xml:space="preserve"> - <value>tabRadioIn</value> - </data> - <data name=">>groupBoxElevons.ZOrder" xml:space="preserve"> - <value>0</value> - </data> + <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <data name="CHK_mixmode.AutoSize" type="System.Boolean, mscorlib"> <value>True</value> </data> + <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <data name="CHK_mixmode.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> <value>NoControl</value> </data> + <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <data name="CHK_mixmode.Location" type="System.Drawing.Point, System.Drawing"> <value>13, 19</value> </data> @@ -1896,6 +255,30 @@ <data name=">>CHK_elevonch1rev.ZOrder" xml:space="preserve"> <value>3</value> </data> + <data name="groupBoxElevons.Location" type="System.Drawing.Point, System.Drawing"> + <value>21, 349</value> + </data> + <data name="groupBoxElevons.Size" type="System.Drawing.Size, System.Drawing"> + <value>409, 42</value> + </data> + <data name="groupBoxElevons.TabIndex" type="System.Int32, mscorlib"> + <value>111</value> + </data> + <data name="groupBoxElevons.Text" xml:space="preserve"> + <value>Elevon Config</value> + </data> + <data name=">>groupBoxElevons.Name" xml:space="preserve"> + <value>groupBoxElevons</value> + </data> + <data name=">>groupBoxElevons.Type" xml:space="preserve"> + <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>groupBoxElevons.Parent" xml:space="preserve"> + <value>tabRadioIn</value> + </data> + <data name=">>groupBoxElevons.ZOrder" xml:space="preserve"> + <value>0</value> + </data> <data name="CHK_revch3.AutoSize" type="System.Boolean, mscorlib"> <value>True</value> </data> @@ -2067,9 +450,6 @@ <data name=">>BAR8.ZOrder" xml:space="preserve"> <value>6</value> </data> - <metadata name="currentStateBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> - <value>17, 17</value> - </metadata> <data name="BAR7.Location" type="System.Drawing.Point, System.Drawing"> <value>446, 185</value> </data> @@ -2217,6 +597,33 @@ <data name=">>BARroll.ZOrder" xml:space="preserve"> <value>13</value> </data> + <data name="tabRadioIn.Location" type="System.Drawing.Point, System.Drawing"> + <value>4, 22</value> + </data> + <data name="tabRadioIn.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms"> + <value>3, 3, 3, 3</value> + </data> + <data name="tabRadioIn.Size" type="System.Drawing.Size, System.Drawing"> + <value>666, 393</value> + </data> + <data name="tabRadioIn.TabIndex" type="System.Int32, mscorlib"> + <value>0</value> + </data> + <data name="tabRadioIn.Text" xml:space="preserve"> + <value>Radio Input</value> + </data> + <data name=">>tabRadioIn.Name" xml:space="preserve"> + <value>tabRadioIn</value> + </data> + <data name=">>tabRadioIn.Type" xml:space="preserve"> + <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>tabRadioIn.Parent" xml:space="preserve"> + <value>Tabs</value> + </data> + <data name=">>tabRadioIn.ZOrder" xml:space="preserve"> + <value>0</value> + </data> <data name="CB_simple6.AutoSize" type="System.Boolean, mscorlib"> <value>True</value> </data> @@ -3048,6 +1455,30 @@ <data name=">>BUT_SaveModes.ZOrder" xml:space="preserve"> <value>28</value> </data> + <data name="tabModes.Location" type="System.Drawing.Point, System.Drawing"> + <value>4, 22</value> + </data> + <data name="tabModes.Size" type="System.Drawing.Size, System.Drawing"> + <value>666, 393</value> + </data> + <data name="tabModes.TabIndex" type="System.Int32, mscorlib"> + <value>3</value> + </data> + <data name="tabModes.Text" xml:space="preserve"> + <value>Modes</value> + </data> + <data name=">>tabModes.Name" xml:space="preserve"> + <value>tabModes</value> + </data> + <data name=">>tabModes.Type" xml:space="preserve"> + <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>tabModes.Parent" xml:space="preserve"> + <value>Tabs</value> + </data> + <data name=">>tabModes.ZOrder" xml:space="preserve"> + <value>1</value> + </data> <data name="BUT_MagCalibration.Location" type="System.Drawing.Point, System.Drawing"> <value>405, 25</value> </data> @@ -3366,215 +1797,98 @@ <data name=">>pictureBox4.Type" xml:space="preserve"> <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>pictureBox4.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>pictureBox4.ZOrder" xml:space="preserve"> - <value>11</value> - </data> - <data name="pictureBox3.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms"> - <value>Zoom</value> - </data> - <data name="pictureBox3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> - <value>NoControl</value> - </data> - <data name="pictureBox3.Location" type="System.Drawing.Point, System.Drawing"> - <value>78, 106</value> - </data> - <data name="pictureBox3.Size" type="System.Drawing.Size, System.Drawing"> - <value>75, 75</value> - </data> - <data name="pictureBox3.TabIndex" type="System.Int32, mscorlib"> - <value>2</value> - </data> - <data name=">>pictureBox3.Name" xml:space="preserve"> - <value>pictureBox3</value> - </data> - <data name=">>pictureBox3.Type" xml:space="preserve"> - <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>pictureBox3.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>pictureBox3.ZOrder" xml:space="preserve"> - <value>12</value> - </data> - <data name="pictureBox1.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms"> - <value>Zoom</value> - </data> - <data name="pictureBox1.ErrorImage" type="System.Resources.ResXNullRef, System.Windows.Forms"> - <value /> - </data> - <data name="pictureBox1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> - <value>NoControl</value> - </data> - <data name="pictureBox1.InitialImage" type="System.Resources.ResXNullRef, System.Windows.Forms"> - <value /> - </data> - <data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing"> - <value>78, 25</value> - </data> - <data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing"> - <value>75, 75</value> - </data> - <data name="pictureBox1.TabIndex" type="System.Int32, mscorlib"> - <value>0</value> - </data> - <data name=">>pictureBox1.Name" xml:space="preserve"> - <value>pictureBox1</value> - </data> - <data name=">>pictureBox1.Type" xml:space="preserve"> - <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>pictureBox1.Parent" xml:space="preserve"> - <value>tabHardware</value> - </data> - <data name=">>pictureBox1.ZOrder" xml:space="preserve"> - <value>13</value> - </data> - <data name=">>label31.Name" xml:space="preserve"> - <value>label31</value> - </data> - <data name=">>label31.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label31.Parent" xml:space="preserve"> - <value>groupBox4</value> - </data> - <data name=">>label31.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>label32.Name" xml:space="preserve"> - <value>label32</value> - </data> - <data name=">>label32.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label32.Parent" xml:space="preserve"> - <value>groupBox4</value> - </data> - <data name=">>label32.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name=">>label33.Name" xml:space="preserve"> - <value>label33</value> - </data> - <data name=">>label33.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label33.Parent" xml:space="preserve"> - <value>groupBox4</value> - </data> - <data name=">>label33.ZOrder" xml:space="preserve"> - <value>2</value> - </data> - <data name=">>TXT_ampspervolt.Name" xml:space="preserve"> - <value>TXT_ampspervolt</value> - </data> - <data name=">>TXT_ampspervolt.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>TXT_ampspervolt.Parent" xml:space="preserve"> - <value>groupBox4</value> - </data> - <data name=">>TXT_ampspervolt.ZOrder" xml:space="preserve"> - <value>3</value> - </data> - <data name=">>label34.Name" xml:space="preserve"> - <value>label34</value> - </data> - <data name=">>label34.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label34.Parent" xml:space="preserve"> - <value>groupBox4</value> + <data name=">>pictureBox4.Parent" xml:space="preserve"> + <value>tabHardware</value> </data> - <data name=">>label34.ZOrder" xml:space="preserve"> - <value>4</value> + <data name=">>pictureBox4.ZOrder" xml:space="preserve"> + <value>11</value> </data> - <data name=">>TXT_divider.Name" xml:space="preserve"> - <value>TXT_divider</value> + <data name="pictureBox3.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms"> + <value>Zoom</value> </data> - <data name=">>TXT_divider.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <data name="pictureBox3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> + <value>NoControl</value> </data> - <data name=">>TXT_divider.Parent" xml:space="preserve"> - <value>groupBox4</value> + <data name="pictureBox3.Location" type="System.Drawing.Point, System.Drawing"> + <value>78, 106</value> </data> - <data name=">>TXT_divider.ZOrder" xml:space="preserve"> - <value>5</value> + <data name="pictureBox3.Size" type="System.Drawing.Size, System.Drawing"> + <value>75, 75</value> </data> - <data name=">>label35.Name" xml:space="preserve"> - <value>label35</value> + <data name="pictureBox3.TabIndex" type="System.Int32, mscorlib"> + <value>2</value> </data> - <data name=">>label35.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <data name=">>pictureBox3.Name" xml:space="preserve"> + <value>pictureBox3</value> </data> - <data name=">>label35.Parent" xml:space="preserve"> - <value>groupBox4</value> + <data name=">>pictureBox3.Type" xml:space="preserve"> + <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>label35.ZOrder" xml:space="preserve"> - <value>6</value> + <data name=">>pictureBox3.Parent" xml:space="preserve"> + <value>tabHardware</value> </data> - <data name=">>TXT_voltage.Name" xml:space="preserve"> - <value>TXT_voltage</value> + <data name=">>pictureBox3.ZOrder" xml:space="preserve"> + <value>12</value> </data> - <data name=">>TXT_voltage.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <data name="pictureBox1.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms"> + <value>Zoom</value> </data> - <data name=">>TXT_voltage.Parent" xml:space="preserve"> - <value>groupBox4</value> + <data name="pictureBox1.ErrorImage" type="System.Resources.ResXNullRef, System.Windows.Forms"> + <value /> </data> - <data name=">>TXT_voltage.ZOrder" xml:space="preserve"> - <value>7</value> + <data name="pictureBox1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> + <value>NoControl</value> </data> - <data name=">>TXT_inputvoltage.Name" xml:space="preserve"> - <value>TXT_inputvoltage</value> + <data name="pictureBox1.InitialImage" type="System.Resources.ResXNullRef, System.Windows.Forms"> + <value /> </data> - <data name=">>TXT_inputvoltage.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing"> + <value>78, 25</value> </data> - <data name=">>TXT_inputvoltage.Parent" xml:space="preserve"> - <value>groupBox4</value> + <data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing"> + <value>75, 75</value> </data> - <data name=">>TXT_inputvoltage.ZOrder" xml:space="preserve"> - <value>8</value> + <data name="pictureBox1.TabIndex" type="System.Int32, mscorlib"> + <value>0</value> </data> - <data name=">>TXT_measuredvoltage.Name" xml:space="preserve"> - <value>TXT_measuredvoltage</value> + <data name=">>pictureBox1.Name" xml:space="preserve"> + <value>pictureBox1</value> </data> - <data name=">>TXT_measuredvoltage.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <data name=">>pictureBox1.Type" xml:space="preserve"> + <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>TXT_measuredvoltage.Parent" xml:space="preserve"> - <value>groupBox4</value> + <data name=">>pictureBox1.Parent" xml:space="preserve"> + <value>tabHardware</value> </data> - <data name=">>TXT_measuredvoltage.ZOrder" xml:space="preserve"> - <value>9</value> + <data name=">>pictureBox1.ZOrder" xml:space="preserve"> + <value>13</value> </data> - <data name="groupBox4.Location" type="System.Drawing.Point, System.Drawing"> - <value>31, 177</value> + <data name="tabHardware.Location" type="System.Drawing.Point, System.Drawing"> + <value>4, 22</value> </data> - <data name="groupBox4.Size" type="System.Drawing.Size, System.Drawing"> - <value>238, 131</value> + <data name="tabHardware.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms"> + <value>3, 3, 3, 3</value> </data> - <data name="groupBox4.TabIndex" type="System.Int32, mscorlib"> - <value>41</value> + <data name="tabHardware.Size" type="System.Drawing.Size, System.Drawing"> + <value>666, 393</value> </data> - <data name="groupBox4.Text" xml:space="preserve"> - <value>Calibration</value> + <data name="tabHardware.TabIndex" type="System.Int32, mscorlib"> + <value>1</value> </data> - <data name=">>groupBox4.Name" xml:space="preserve"> - <value>groupBox4</value> + <data name="tabHardware.Text" xml:space="preserve"> + <value>Hardware</value> </data> - <data name=">>groupBox4.Type" xml:space="preserve"> - <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <data name=">>tabHardware.Name" xml:space="preserve"> + <value>tabHardware</value> </data> - <data name=">>groupBox4.Parent" xml:space="preserve"> - <value>tabBattery</value> + <data name=">>tabHardware.Type" xml:space="preserve"> + <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>groupBox4.ZOrder" xml:space="preserve"> - <value>0</value> + <data name=">>tabHardware.Parent" xml:space="preserve"> + <value>Tabs</value> + </data> + <data name=">>tabHardware.ZOrder" xml:space="preserve"> + <value>2</value> </data> <data name="label31.AutoSize" type="System.Boolean, mscorlib"> <value>True</value> @@ -3861,6 +2175,30 @@ <data name=">>TXT_measuredvoltage.ZOrder" xml:space="preserve"> <value>9</value> </data> + <data name="groupBox4.Location" type="System.Drawing.Point, System.Drawing"> + <value>31, 177</value> + </data> + <data name="groupBox4.Size" type="System.Drawing.Size, System.Drawing"> + <value>238, 131</value> + </data> + <data name="groupBox4.TabIndex" type="System.Int32, mscorlib"> + <value>41</value> + </data> + <data name="groupBox4.Text" xml:space="preserve"> + <value>Calibration</value> + </data> + <data name=">>groupBox4.Name" xml:space="preserve"> + <value>groupBox4</value> + </data> + <data name=">>groupBox4.Type" xml:space="preserve"> + <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>groupBox4.Parent" xml:space="preserve"> + <value>tabBattery</value> + </data> + <data name=">>groupBox4.ZOrder" xml:space="preserve"> + <value>0</value> + </data> <data name="label47.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> <value>NoControl</value> </data> @@ -4086,11 +2424,122 @@ Then subtract 0.3v from that value and enter it in field #1 at left. <data name=">>pictureBox5.Type" xml:space="preserve"> <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>pictureBox5.Parent" xml:space="preserve"> - <value>tabBattery</value> + <data name=">>pictureBox5.Parent" xml:space="preserve"> + <value>tabBattery</value> + </data> + <data name=">>pictureBox5.ZOrder" xml:space="preserve"> + <value>8</value> + </data> + <data name="tabBattery.Location" type="System.Drawing.Point, System.Drawing"> + <value>4, 22</value> + </data> + <data name="tabBattery.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms"> + <value>2, 2, 2, 2</value> + </data> + <data name="tabBattery.Size" type="System.Drawing.Size, System.Drawing"> + <value>666, 393</value> + </data> + <data name="tabBattery.TabIndex" type="System.Int32, mscorlib"> + <value>6</value> + </data> + <data name="tabBattery.Text" xml:space="preserve"> + <value>Battery</value> + </data> + <data name=">>tabBattery.Name" xml:space="preserve"> + <value>tabBattery</value> + </data> + <data name=">>tabBattery.Type" xml:space="preserve"> + <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>tabBattery.Parent" xml:space="preserve"> + <value>Tabs</value> + </data> + <data name=">>tabBattery.ZOrder" xml:space="preserve"> + <value>3</value> + </data> + <data name="label48.AutoSize" type="System.Boolean, mscorlib"> + <value>True</value> + </data> + <data name="label48.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> + <value>NoControl</value> + </data> + <data name="label48.Location" type="System.Drawing.Point, System.Drawing"> + <value>228, 170</value> + </data> + <data name="label48.Size" type="System.Drawing.Size, System.Drawing"> + <value>212, 13</value> + </data> + <data name="label48.TabIndex" type="System.Int32, mscorlib"> + <value>11</value> + </data> + <data name="label48.Text" xml:space="preserve"> + <value>Level your plane to set default accel offsets</value> + </data> + <data name=">>label48.Name" xml:space="preserve"> + <value>label48</value> + </data> + <data name=">>label48.Type" xml:space="preserve"> + <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>label48.Parent" xml:space="preserve"> + <value>tabArduplane</value> + </data> + <data name=">>label48.ZOrder" xml:space="preserve"> + <value>0</value> + </data> + <data name="BUT_levelplane.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> + <value>NoControl</value> + </data> + <data name="BUT_levelplane.Location" type="System.Drawing.Point, System.Drawing"> + <value>285, 199</value> + </data> + <data name="BUT_levelplane.Size" type="System.Drawing.Size, System.Drawing"> + <value>75, 23</value> + </data> + <data name="BUT_levelplane.TabIndex" type="System.Int32, mscorlib"> + <value>10</value> + </data> + <data name="BUT_levelplane.Text" xml:space="preserve"> + <value>Level</value> + </data> + <data name=">>BUT_levelplane.Name" xml:space="preserve"> + <value>BUT_levelplane</value> + </data> + <data name=">>BUT_levelplane.Type" xml:space="preserve"> + <value>ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> + </data> + <data name=">>BUT_levelplane.Parent" xml:space="preserve"> + <value>tabArduplane</value> + </data> + <data name=">>BUT_levelplane.ZOrder" xml:space="preserve"> + <value>1</value> + </data> + <data name="tabArduplane.Location" type="System.Drawing.Point, System.Drawing"> + <value>4, 22</value> + </data> + <data name="tabArduplane.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms"> + <value>3, 3, 3, 3</value> + </data> + <data name="tabArduplane.Size" type="System.Drawing.Size, System.Drawing"> + <value>666, 393</value> + </data> + <data name="tabArduplane.TabIndex" type="System.Int32, mscorlib"> + <value>7</value> + </data> + <data name="tabArduplane.Text" xml:space="preserve"> + <value>ArduPlane</value> + </data> + <data name=">>tabArduplane.Name" xml:space="preserve"> + <value>tabArduplane</value> + </data> + <data name=">>tabArduplane.Type" xml:space="preserve"> + <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>tabArduplane.Parent" xml:space="preserve"> + <value>Tabs</value> </data> - <data name=">>pictureBox5.ZOrder" xml:space="preserve"> - <value>8</value> + <data name=">>tabArduplane.ZOrder" xml:space="preserve"> + <value>4</value> </data> <data name="label28.AutoSize" type="System.Boolean, mscorlib"> <value>True</value> @@ -4264,53 +2713,29 @@ will work with hexa's etc</value> <data name=">>BUT_levelac2.ZOrder" xml:space="preserve"> <value>5</value> </data> - <data name=">>H1_ENABLE.Name" xml:space="preserve"> - <value>H1_ENABLE</value> - </data> - <data name=">>H1_ENABLE.Type" xml:space="preserve"> - <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>H1_ENABLE.Parent" xml:space="preserve"> - <value>groupBox5</value> - </data> - <data name=">>H1_ENABLE.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>CCPM.Name" xml:space="preserve"> - <value>CCPM</value> - </data> - <data name=">>CCPM.Type" xml:space="preserve"> - <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>CCPM.Parent" xml:space="preserve"> - <value>groupBox5</value> - </data> - <data name=">>CCPM.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name="groupBox5.Location" type="System.Drawing.Point, System.Drawing"> - <value>253, 6</value> + <data name="tabArducopter.Location" type="System.Drawing.Point, System.Drawing"> + <value>4, 22</value> </data> - <data name="groupBox5.Size" type="System.Drawing.Size, System.Drawing"> - <value>120, 43</value> + <data name="tabArducopter.Size" type="System.Drawing.Size, System.Drawing"> + <value>666, 393</value> </data> - <data name="groupBox5.TabIndex" type="System.Int32, mscorlib"> - <value>137</value> + <data name="tabArducopter.TabIndex" type="System.Int32, mscorlib"> + <value>2</value> </data> - <data name="groupBox5.Text" xml:space="preserve"> - <value>Swash Type</value> + <data name="tabArducopter.Text" xml:space="preserve"> + <value>ArduCopter2</value> </data> - <data name=">>groupBox5.Name" xml:space="preserve"> - <value>groupBox5</value> + <data name=">>tabArducopter.Name" xml:space="preserve"> + <value>tabArducopter</value> </data> - <data name=">>groupBox5.Type" xml:space="preserve"> - <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <data name=">>tabArducopter.Type" xml:space="preserve"> + <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>groupBox5.Parent" xml:space="preserve"> - <value>tabHeli</value> + <data name=">>tabArducopter.Parent" xml:space="preserve"> + <value>Tabs</value> </data> - <data name=">>groupBox5.ZOrder" xml:space="preserve"> - <value>0</value> + <data name=">>tabArducopter.ZOrder" xml:space="preserve"> + <value>5</value> </data> <data name="H1_ENABLE.AutoSize" type="System.Boolean, mscorlib"> <value>True</value> @@ -4369,6 +2794,30 @@ will work with hexa's etc</value> <data name=">>CCPM.ZOrder" xml:space="preserve"> <value>1</value> </data> + <data name="groupBox5.Location" type="System.Drawing.Point, System.Drawing"> + <value>253, 6</value> + </data> + <data name="groupBox5.Size" type="System.Drawing.Size, System.Drawing"> + <value>120, 43</value> + </data> + <data name="groupBox5.TabIndex" type="System.Int32, mscorlib"> + <value>137</value> + </data> + <data name="groupBox5.Text" xml:space="preserve"> + <value>Swash Type</value> + </data> + <data name=">>groupBox5.Name" xml:space="preserve"> + <value>groupBox5</value> + </data> + <data name=">>groupBox5.Type" xml:space="preserve"> + <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>groupBox5.Parent" xml:space="preserve"> + <value>tabHeli</value> + </data> + <data name=">>groupBox5.ZOrder" xml:space="preserve"> + <value>0</value> + </data> <data name="BUT_HS4save.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> <value>NoControl</value> </data> @@ -4423,78 +2872,6 @@ will work with hexa's etc</value> <data name=">>BUT_swash_manual.ZOrder" xml:space="preserve"> <value>2</value> </data> - <data name=">>label46.Name" xml:space="preserve"> - <value>label46</value> - </data> - <data name=">>label46.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label46.Parent" xml:space="preserve"> - <value>groupBox3</value> - </data> - <data name=">>label46.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>label45.Name" xml:space="preserve"> - <value>label45</value> - </data> - <data name=">>label45.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label45.Parent" xml:space="preserve"> - <value>groupBox3</value> - </data> - <data name=">>label45.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name=">>GYR_ENABLE.Name" xml:space="preserve"> - <value>GYR_ENABLE</value> - </data> - <data name=">>GYR_ENABLE.Type" xml:space="preserve"> - <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>GYR_ENABLE.Parent" xml:space="preserve"> - <value>groupBox3</value> - </data> - <data name=">>GYR_ENABLE.ZOrder" xml:space="preserve"> - <value>2</value> - </data> - <data name=">>GYR_GAIN.Name" xml:space="preserve"> - <value>GYR_GAIN</value> - </data> - <data name=">>GYR_GAIN.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>GYR_GAIN.Parent" xml:space="preserve"> - <value>groupBox3</value> - </data> - <data name=">>GYR_GAIN.ZOrder" xml:space="preserve"> - <value>3</value> - </data> - <data name="groupBox3.Location" type="System.Drawing.Point, System.Drawing"> - <value>433, 309</value> - </data> - <data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing"> - <value>101, 63</value> - </data> - <data name="groupBox3.TabIndex" type="System.Int32, mscorlib"> - <value>135</value> - </data> - <data name="groupBox3.Text" xml:space="preserve"> - <value>Gyro</value> - </data> - <data name=">>groupBox3.Name" xml:space="preserve"> - <value>groupBox3</value> - </data> - <data name=">>groupBox3.Type" xml:space="preserve"> - <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>groupBox3.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>groupBox3.ZOrder" xml:space="preserve"> - <value>3</value> - </data> <data name="label46.AutoSize" type="System.Boolean, mscorlib"> <value>True</value> </data> @@ -4606,6 +2983,30 @@ will work with hexa's etc</value> <data name=">>GYR_GAIN.ZOrder" xml:space="preserve"> <value>3</value> </data> + <data name="groupBox3.Location" type="System.Drawing.Point, System.Drawing"> + <value>433, 309</value> + </data> + <data name="groupBox3.Size" type="System.Drawing.Size, System.Drawing"> + <value>101, 63</value> + </data> + <data name="groupBox3.TabIndex" type="System.Int32, mscorlib"> + <value>135</value> + </data> + <data name="groupBox3.Text" xml:space="preserve"> + <value>Gyro</value> + </data> + <data name=">>groupBox3.Name" xml:space="preserve"> + <value>groupBox3</value> + </data> + <data name=">>groupBox3.Type" xml:space="preserve"> + <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>groupBox3.Parent" xml:space="preserve"> + <value>tabHeli</value> + </data> + <data name=">>groupBox3.ZOrder" xml:space="preserve"> + <value>3</value> + </data> <data name="label44.AutoSize" type="System.Boolean, mscorlib"> <value>True</value> </data> @@ -4646,124 +3047,55 @@ will work with hexa's etc</value> <value>499, 263</value> </data> <data name="label43.Size" type="System.Drawing.Size, System.Drawing"> - <value>27, 13</value> - </data> - <data name="label43.TabIndex" type="System.Int32, mscorlib"> - <value>133</value> - </data> - <data name="label43.Text" xml:space="preserve"> - <value>Rev</value> - </data> - <data name=">>label43.Name" xml:space="preserve"> - <value>label43</value> - </data> - <data name=">>label43.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label43.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label43.ZOrder" xml:space="preserve"> - <value>5</value> - </data> - <data name="label42.AutoSize" type="System.Boolean, mscorlib"> - <value>True</value> - </data> - <data name="label42.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> - <value>NoControl</value> - </data> - <data name="label42.Location" type="System.Drawing.Point, System.Drawing"> - <value>451, 283</value> - </data> - <data name="label42.Size" type="System.Drawing.Size, System.Drawing"> - <value>42, 13</value> - </data> - <data name="label42.TabIndex" type="System.Int32, mscorlib"> - <value>132</value> - </data> - <data name="label42.Text" xml:space="preserve"> - <value>Rudder</value> - </data> - <data name=">>label42.Name" xml:space="preserve"> - <value>label42</value> - </data> - <data name=">>label42.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label42.Parent" xml:space="preserve"> - <value>tabHeli</value> - </data> - <data name=">>label42.ZOrder" xml:space="preserve"> - <value>6</value> - </data> - <data name=">>label24.Name" xml:space="preserve"> - <value>label24</value> - </data> - <data name=">>label24.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label24.Parent" xml:space="preserve"> - <value>groupBox2</value> - </data> - <data name=">>label24.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>HS4_MIN.Name" xml:space="preserve"> - <value>HS4_MIN</value> - </data> - <data name=">>HS4_MIN.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>HS4_MIN.Parent" xml:space="preserve"> - <value>groupBox2</value> + <value>27, 13</value> </data> - <data name=">>HS4_MIN.ZOrder" xml:space="preserve"> - <value>1</value> + <data name="label43.TabIndex" type="System.Int32, mscorlib"> + <value>133</value> </data> - <data name=">>HS4_MAX.Name" xml:space="preserve"> - <value>HS4_MAX</value> + <data name="label43.Text" xml:space="preserve"> + <value>Rev</value> </data> - <data name=">>HS4_MAX.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <data name=">>label43.Name" xml:space="preserve"> + <value>label43</value> </data> - <data name=">>HS4_MAX.Parent" xml:space="preserve"> - <value>groupBox2</value> + <data name=">>label43.Type" xml:space="preserve"> + <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>HS4_MAX.ZOrder" xml:space="preserve"> - <value>2</value> + <data name=">>label43.Parent" xml:space="preserve"> + <value>tabHeli</value> </data> - <data name=">>label40.Name" xml:space="preserve"> - <value>label40</value> + <data name=">>label43.ZOrder" xml:space="preserve"> + <value>5</value> </data> - <data name=">>label40.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <data name="label42.AutoSize" type="System.Boolean, mscorlib"> + <value>True</value> </data> - <data name=">>label40.Parent" xml:space="preserve"> - <value>groupBox2</value> + <data name="label42.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> + <value>NoControl</value> </data> - <data name=">>label40.ZOrder" xml:space="preserve"> - <value>3</value> + <data name="label42.Location" type="System.Drawing.Point, System.Drawing"> + <value>451, 283</value> </data> - <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing"> - <value>433, 181</value> + <data name="label42.Size" type="System.Drawing.Size, System.Drawing"> + <value>42, 13</value> </data> - <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing"> - <value>169, 78</value> + <data name="label42.TabIndex" type="System.Int32, mscorlib"> + <value>132</value> </data> - <data name="groupBox2.TabIndex" type="System.Int32, mscorlib"> - <value>130</value> + <data name="label42.Text" xml:space="preserve"> + <value>Rudder</value> </data> - <data name=">>groupBox2.Name" xml:space="preserve"> - <value>groupBox2</value> + <data name=">>label42.Name" xml:space="preserve"> + <value>label42</value> </data> - <data name=">>groupBox2.Type" xml:space="preserve"> - <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <data name=">>label42.Type" xml:space="preserve"> + <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>groupBox2.Parent" xml:space="preserve"> + <data name=">>label42.Parent" xml:space="preserve"> <value>tabHeli</value> </data> - <data name=">>groupBox2.ZOrder" xml:space="preserve"> - <value>7</value> + <data name=">>label42.ZOrder" xml:space="preserve"> + <value>6</value> </data> <data name="label24.AutoSize" type="System.Boolean, mscorlib"> <value>True</value> @@ -4879,98 +3211,26 @@ will work with hexa's etc</value> <data name=">>label40.ZOrder" xml:space="preserve"> <value>3</value> </data> - <data name=">>label41.Name" xml:space="preserve"> - <value>label41</value> - </data> - <data name=">>label41.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label41.Parent" xml:space="preserve"> - <value>groupBox1</value> - </data> - <data name=">>label41.ZOrder" xml:space="preserve"> - <value>0</value> - </data> - <data name=">>label21.Name" xml:space="preserve"> - <value>label21</value> - </data> - <data name=">>label21.Type" xml:space="preserve"> - <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>label21.Parent" xml:space="preserve"> - <value>groupBox1</value> - </data> - <data name=">>label21.ZOrder" xml:space="preserve"> - <value>1</value> - </data> - <data name=">>COL_MIN.Name" xml:space="preserve"> - <value>COL_MIN</value> - </data> - <data name=">>COL_MIN.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>COL_MIN.Parent" xml:space="preserve"> - <value>groupBox1</value> - </data> - <data name=">>COL_MIN.ZOrder" xml:space="preserve"> - <value>2</value> - </data> - <data name=">>COL_MID.Name" xml:space="preserve"> - <value>COL_MID</value> - </data> - <data name=">>COL_MID.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>COL_MID.Parent" xml:space="preserve"> - <value>groupBox1</value> - </data> - <data name=">>COL_MID.ZOrder" xml:space="preserve"> - <value>3</value> - </data> - <data name=">>COL_MAX.Name" xml:space="preserve"> - <value>COL_MAX</value> - </data> - <data name=">>COL_MAX.Type" xml:space="preserve"> - <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </data> - <data name=">>COL_MAX.Parent" xml:space="preserve"> - <value>groupBox1</value> - </data> - <data name=">>COL_MAX.ZOrder" xml:space="preserve"> - <value>4</value> - </data> - <data name=">>BUT_0collective.Name" xml:space="preserve"> - <value>BUT_0collective</value> - </data> - <data name=">>BUT_0collective.Type" xml:space="preserve"> - <value>ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> - </data> - <data name=">>BUT_0collective.Parent" xml:space="preserve"> - <value>groupBox1</value> - </data> - <data name=">>BUT_0collective.ZOrder" xml:space="preserve"> - <value>5</value> - </data> - <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing"> - <value>293, 90</value> + <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing"> + <value>433, 181</value> </data> - <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing"> - <value>80, 209</value> + <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing"> + <value>169, 78</value> </data> - <data name="groupBox1.TabIndex" type="System.Int32, mscorlib"> - <value>129</value> + <data name="groupBox2.TabIndex" type="System.Int32, mscorlib"> + <value>130</value> </data> - <data name=">>groupBox1.Name" xml:space="preserve"> - <value>groupBox1</value> + <data name=">>groupBox2.Name" xml:space="preserve"> + <value>groupBox2</value> </data> - <data name=">>groupBox1.Type" xml:space="preserve"> + <data name=">>groupBox2.Type" xml:space="preserve"> <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name=">>groupBox1.Parent" xml:space="preserve"> + <data name=">>groupBox2.Parent" xml:space="preserve"> <value>tabHeli</value> </data> - <data name=">>groupBox1.ZOrder" xml:space="preserve"> - <value>8</value> + <data name=">>groupBox2.ZOrder" xml:space="preserve"> + <value>7</value> </data> <data name="label41.AutoSize" type="System.Boolean, mscorlib"> <value>True</value> @@ -5143,6 +3403,27 @@ will work with hexa's etc</value> <data name=">>BUT_0collective.ZOrder" xml:space="preserve"> <value>5</value> </data> + <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing"> + <value>293, 90</value> + </data> + <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing"> + <value>80, 209</value> + </data> + <data name="groupBox1.TabIndex" type="System.Int32, mscorlib"> + <value>129</value> + </data> + <data name=">>groupBox1.Name" xml:space="preserve"> + <value>groupBox1</value> + </data> + <data name=">>groupBox1.Type" xml:space="preserve"> + <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>groupBox1.Parent" xml:space="preserve"> + <value>tabHeli</value> + </data> + <data name=">>groupBox1.ZOrder" xml:space="preserve"> + <value>8</value> + </data> <data name="HS4_TRIM.Location" type="System.Drawing.Point, System.Drawing"> <value>535, 279</value> </data> @@ -5887,35 +4168,53 @@ will work with hexa's etc</value> <data name=">>Gservoloc.ZOrder" xml:space="preserve"> <value>36</value> </data> - <data name=">>BUT_reset.Name" xml:space="preserve"> - <value>BUT_reset</value> + <data name="tabHeli.Location" type="System.Drawing.Point, System.Drawing"> + <value>4, 22</value> </data> - <data name=">>BUT_reset.Type" xml:space="preserve"> - <value>ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</value> + <data name="tabHeli.Size" type="System.Drawing.Size, System.Drawing"> + <value>666, 393</value> </data> - <data name=">>BUT_reset.Parent" xml:space="preserve"> - <value>tabReset</value> + <data name="tabHeli.TabIndex" type="System.Int32, mscorlib"> + <value>5</value> </data> - <data name=">>BUT_reset.ZOrder" xml:space="preserve"> - <value>0</value> + <data name="tabHeli.Text" xml:space="preserve"> + <value>AC2 Heli</value> </data> - <data name="tabReset.Location" type="System.Drawing.Point, System.Drawing"> - <value>4, 22</value> + <data name=">>tabHeli.Name" xml:space="preserve"> + <value>tabHeli</value> </data> - <data name="tabReset.Size" type="System.Drawing.Size, System.Drawing"> - <value>666, 393</value> + <data name=">>tabHeli.Type" xml:space="preserve"> + <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </data> - <data name="tabReset.TabIndex" type="System.Int32, mscorlib"> - <value>4</value> + <data name=">>tabHeli.Parent" xml:space="preserve"> + <value>Tabs</value> </data> - <data name="tabReset.Text" xml:space="preserve"> - <value>Reset</value> + <data name=">>tabHeli.ZOrder" xml:space="preserve"> + <value>6</value> </data> - <data name=">>tabReset.Name" xml:space="preserve"> - <value>tabReset</value> + <data name="Tabs.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"> + <value>Fill</value> </data> - <data name=">>tabReset.Type" xml:space="preserve"> - <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + <data name="Tabs.Location" type="System.Drawing.Point, System.Drawing"> + <value>0, 0</value> + </data> + <data name="Tabs.Size" type="System.Drawing.Size, System.Drawing"> + <value>674, 419</value> + </data> + <data name="Tabs.TabIndex" type="System.Int32, mscorlib"> + <value>93</value> + </data> + <data name=">>Tabs.Name" xml:space="preserve"> + <value>Tabs</value> + </data> + <data name=">>Tabs.Type" xml:space="preserve"> + <value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> + <data name=">>Tabs.Parent" xml:space="preserve"> + <value>$this</value> + </data> + <data name=">>Tabs.ZOrder" xml:space="preserve"> + <value>0</value> </data> <data name="BUT_reset.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> <value>NoControl</value> @@ -5944,6 +4243,24 @@ will work with hexa's etc</value> <data name=">>BUT_reset.ZOrder" xml:space="preserve"> <value>0</value> </data> + <data name="tabReset.Location" type="System.Drawing.Point, System.Drawing"> + <value>4, 22</value> + </data> + <data name="tabReset.Size" type="System.Drawing.Size, System.Drawing"> + <value>666, 393</value> + </data> + <data name="tabReset.TabIndex" type="System.Int32, mscorlib"> + <value>4</value> + </data> + <data name="tabReset.Text" xml:space="preserve"> + <value>Reset</value> + </data> + <data name=">>tabReset.Name" xml:space="preserve"> + <value>tabReset</value> + </data> + <data name=">>tabReset.Type" xml:space="preserve"> + <value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <value>True</value> </metadata> diff --git a/Tools/ArdupilotMegaPlanner/bin/Release/ArdupilotMegaPlanner.pdb b/Tools/ArdupilotMegaPlanner/bin/Release/ArdupilotMegaPlanner.pdb index bbb6da8b86018129116e28bd7c17a79bd7122a9f..11248adcb80cb55ccae9eff1ab698a7a1c19f950 100644 GIT binary patch delta 320837 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 NU7>f}8(OT?{twRu+AIJ7 delta 315261 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 diff --git a/Tools/ArdupilotMegaPlanner/bin/Release/aircraft/Rascal/Rascal.xml b/Tools/ArdupilotMegaPlanner/bin/Release/aircraft/Rascal/Rascal.xml index 2e2813a25..bf4321ee1 100644 --- a/Tools/ArdupilotMegaPlanner/bin/Release/aircraft/Rascal/Rascal.xml +++ b/Tools/ArdupilotMegaPlanner/bin/Release/aircraft/Rascal/Rascal.xml @@ -86,7 +86,7 @@ <location unit="IN"> <x> 68.9 </x> <y> 0 </y> - <z> -3 </z> + <z> -13.1 </z> </location> <static_friction> 8.0 </static_friction> <dynamic_friction> 5.0 </dynamic_friction> diff --git a/Tools/ArdupilotMegaPlanner/wix/Program.cs b/Tools/ArdupilotMegaPlanner/wix/Program.cs index c08e4452d..e66a3cda2 100644 --- a/Tools/ArdupilotMegaPlanner/wix/Program.cs +++ b/Tools/ArdupilotMegaPlanner/wix/Program.cs @@ -4,11 +4,55 @@ using System.Text; using System.IO; using System.Windows.Forms; using System.Diagnostics; +using System.Runtime.InteropServices; namespace wix { class Program { + /// <summary> + /// The operation completed successfully. + /// </summary> + public const int ERROR_SUCCESS = 0; + /// <summary> + /// Incorrect function. + /// </summary> + public const int ERROR_INVALID_FUNCTION = 1; + /// <summary> + /// The system cannot find the file specified. + /// </summary> + public const int ERROR_FILE_NOT_FOUND = 2; + /// <summary> + /// The system cannot find the path specified. + /// </summary> + public const int ERROR_PATH_NOT_FOUND = 3; + /// <summary> + /// The system cannot open the file. + /// </summary> + public const int ERROR_TOO_MANY_OPEN_FILES = 4; + /// <summary> + /// Access is denied. + /// </summary> + public const int ERROR_ACCESS_DENIED = 5; + + const Int32 DRIVER_PACKAGE_REPAIR = 0x00000001; + const Int32 DRIVER_PACKAGE_SILENT = 0x00000002; + const Int32 DRIVER_PACKAGE_FORCE = 0x00000004; + const Int32 DRIVER_PACKAGE_ONLY_IF_DEVICE_PRESENT = 0x00000008; + const Int32 DRIVER_PACKAGE_LEGACY_MODE = 0x00000010; + const Int32 DRIVER_PACKAGE_DELETE_FILES = 0x00000020; + + [DllImport("DIFXApi.dll", CharSet = CharSet.Unicode)] + public static extern Int32 DriverPackagePreinstall(string DriverPackageInfPath, Int32 Flags); + + static void driverinstall() + { + int result = DriverPackagePreinstall(@"..\Driver\Arduino MEGA 2560.inf", 0); + if (result != 0) + MessageBox.Show("Driver installation failed. " + result); + + } + static int no = 0; static StreamWriter sw; @@ -25,6 +69,12 @@ namespace wix return; } + if (args[0] == "driver") + { + driverinstall(); + return; + } + string path = args[0]; string file = Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar+ "installer.wxs"; @@ -190,12 +240,13 @@ data = @" string[] dirs = Directory.GetDirectories(path); if (level != 0) - sw.WriteLine("<Directory Id=\"" + Path.GetFileName(path).Replace('-', '_') + "\" Name=\"" + Path.GetFileName(path) + "\">"); + sw.WriteLine("<Directory Id=\"" + Path.GetFileName(path).Replace('-', '_') + no + "\" Name=\"" + Path.GetFileName(path) + "\">"); string[] files = Directory.GetFiles(path); - sw.WriteLine("<Component Id=\"_comp"+no+"\" Guid=\""+ System.Guid.NewGuid().ToString() +"\">"); + no++; + sw.WriteLine("<Component Id=\"_comp"+no+"\" Guid=\""+ System.Guid.NewGuid().ToString() +"\">"); components.Add("_comp"+no); foreach (string filepath in files) diff --git a/Tools/ArdupilotMegaPlanner/wix/Properties/Resources.Designer.cs b/Tools/ArdupilotMegaPlanner/wix/Properties/Resources.Designer.cs new file mode 100644 index 000000000..8e668211f --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/wix/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:4.0.30319.261 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace wix.Properties { + using System; + + + /// <summary> + /// A strongly-typed resource class, for looking up localized strings, etc. + /// </summary> + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// <summary> + /// Returns the cached ResourceManager instance used by this class. + /// </summary> + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("wix.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// <summary> + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// </summary> + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Tools/ArdupilotMegaPlanner/wix/Properties/Resources.resx b/Tools/ArdupilotMegaPlanner/wix/Properties/Resources.resx new file mode 100644 index 000000000..4fdb1b6af --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/wix/Properties/Resources.resx @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 1.3 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">1.3</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1">this is my long string</data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + [base64 mime encoded serialized .NET Framework object] + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + [base64 mime encoded string representing a byte array form of the .NET Framework object] + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>1.3</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/wix/Properties/Settings.Designer.cs b/Tools/ArdupilotMegaPlanner/wix/Properties/Settings.Designer.cs new file mode 100644 index 000000000..50ea81e4e --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/wix/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:4.0.30319.261 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace wix.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Tools/ArdupilotMegaPlanner/wix/Properties/Settings.settings b/Tools/ArdupilotMegaPlanner/wix/Properties/Settings.settings new file mode 100644 index 000000000..049245f40 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/wix/Properties/Settings.settings @@ -0,0 +1,6 @@ +<?xml version='1.0' encoding='utf-8'?> +<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)"> + <Profiles> + <Profile Name="(Default)" /> + </Profiles> +</SettingsFile> diff --git a/Tools/ArdupilotMegaPlanner/wix/Properties/app.manifest b/Tools/ArdupilotMegaPlanner/wix/Properties/app.manifest new file mode 100644 index 000000000..8948c3006 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/wix/Properties/app.manifest @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="utf-8"?> +<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <assemblyIdentity version="1.0.0.0" name="MyApplication.app" /> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> + <security> + <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> + <!-- UAC Manifest Options + If you want to change the Windows User Account Control level replace the + requestedExecutionLevel node with one of the following. + + <requestedExecutionLevel level="asInvoker" uiAccess="false" /> + <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> + <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> + + Specifying requestedExecutionLevel node will disable file and registry virtualization. + If you want to utilize File and Registry Virtualization for backward + compatibility then delete the requestedExecutionLevel node. + --> + <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> + </requestedPrivileges> + <applicationRequestMinimum> + <defaultAssemblyRequest permissionSetReference="Custom" /> + <PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" /> + </applicationRequestMinimum> + </security> + </trustInfo> + <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.--> + <!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node--> + <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>--> + </application> + </compatibility> + <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) --> + <!-- <dependency> + <dependentAssembly> + <assemblyIdentity + type="win32" + name="Microsoft.Windows.Common-Controls" + version="6.0.0.0" + processorArchitecture="*" + publicKeyToken="6595b64144ccf1df" + language="*" + /> + </dependentAssembly> + </dependency>--> +</asmv1:assembly> \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/wix/wix.csproj b/Tools/ArdupilotMegaPlanner/wix/wix.csproj index e20f10524..42fbee7ca 100644 --- a/Tools/ArdupilotMegaPlanner/wix/wix.csproj +++ b/Tools/ArdupilotMegaPlanner/wix/wix.csproj @@ -10,7 +10,7 @@ <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>wix</RootNamespace> <AssemblyName>wix</AssemblyName> - <TargetFrameworkVersion>v2.0</TargetFrameworkVersion> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> <TargetFrameworkProfile> </TargetFrameworkProfile> <FileAlignment>512</FileAlignment> @@ -49,6 +49,16 @@ <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup> + <PropertyGroup /> + <PropertyGroup> + <TargetZone>LocalIntranet</TargetZone> + </PropertyGroup> + <PropertyGroup> + <GenerateManifests>false</GenerateManifests> + </PropertyGroup> + <PropertyGroup> + <ApplicationManifest>Properties\app.manifest</ApplicationManifest> + </PropertyGroup> <ItemGroup> <Reference Include="System" /> <Reference Include="System.Data" /> @@ -58,9 +68,24 @@ <ItemGroup> <Compile Include="Program.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Properties\Resources.Designer.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> + <Compile Include="Properties\Settings.Designer.cs"> + <AutoGen>True</AutoGen> + <DesignTimeSharedInput>True</DesignTimeSharedInput> + <DependentUpon>Settings.settings</DependentUpon> + </Compile> </ItemGroup> <ItemGroup> <None Include="app.config" /> + <None Include="Properties\app.manifest" /> + <None Include="Properties\Settings.settings"> + <Generator>SettingsSingleFileGenerator</Generator> + <LastGenOutput>Settings.Designer.cs</LastGenOutput> + </None> </ItemGroup> <ItemGroup> <BootstrapperPackage Include="Microsoft.Net.Client.3.5"> @@ -79,6 +104,12 @@ <Install>true</Install> </BootstrapperPackage> </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="Properties\Resources.resx"> + <Generator>ResXFileCodeGenerator</Generator> + <LastGenOutput>Resources.Designer.cs</LastGenOutput> + </EmbeddedResource> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. -- GitLab