From 96c9c0041f0d6c2771cc2b2e0ac38b934616a061 Mon Sep 17 00:00:00 2001 From: Michael Oborne 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 | 3363 ++++++++++------- Tools/ArdupilotMegaPlanner/MAVLinkTypes0.9.cs | 2976 +++++++++------ 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 | 2461 ++---------- .../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, 13633 insertions(+), 4939 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 3f859b1805..f8c6bbcc04 100644 --- a/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj +++ b/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj @@ -308,6 +308,12 @@ ConfigRawParams.cs + + Form + + + Setup.cs + @@ -569,6 +575,9 @@ Configuration.cs + + Setup.cs + 3DRradio.cs diff --git a/Tools/ArdupilotMegaPlanner/Common.cs b/Tools/ArdupilotMegaPlanner/Common.cs index 03e53b26ba..2840e9b7c8 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 2970e499b6..edde25fc41 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 420b4544b3..e3e24d9bf0 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(6); + var hil = bytearray.ByteArrayToStructure(6); hilch1 = hil.chan1_scaled; hilch2 = hil.chan2_scaled; @@ -352,7 +352,7 @@ namespace ArdupilotMega if (bytearray != null) { - var nav = bytearray.ByteArrayToStructure(6); + var nav = bytearray.ByteArrayToStructure(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(6); + var hb = bytearray.ByteArrayToStructure(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(6); + var sysstatus = bytearray.ByteArrayToStructure(6); battery_voltage = sysstatus.voltage_battery; battery_remaining = sysstatus.battery_remaining; @@ -478,7 +478,7 @@ namespace ArdupilotMega if (bytearray != null) { - var sysstatus = bytearray.ByteArrayToStructure(6); + var sysstatus = bytearray.ByteArrayToStructure(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(6); + var pres = bytearray.ByteArrayToStructure(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(6); + var sensofs = bytearray.ByteArrayToStructure(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(6); + var att = bytearray.ByteArrayToStructure(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(6); + var gps = bytearray.ByteArrayToStructure(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(6); + var gps = bytearray.ByteArrayToStructure(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(6); + var gps = bytearray.ByteArrayToStructure(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(6); + var loc = bytearray.ByteArrayToStructure(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(6); + var wpcur = bytearray.ByteArrayToStructure(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(6); + var loc = bytearray.ByteArrayToStructure(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(6); + var wpcur = bytearray.ByteArrayToStructure(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(6); + var rcin = bytearray.ByteArrayToStructure(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(6); + var servoout = bytearray.ByteArrayToStructure(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(6); + var imu = bytearray.ByteArrayToStructure(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(6); + var imu = bytearray.ByteArrayToStructure(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(6); + var vfr = bytearray.ByteArrayToStructure(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(6); + var mem = bytearray.ByteArrayToStructure(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 0000000000..24df58eb87 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.Designer.cs @@ -0,0 +1,134 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigAccelerometerCalibration + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..fe4fe96bd2 --- /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 0000000000..7080a7d118 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigAccelerometerCalibration.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ 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 0000000000..2bcd2ea558 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.Designer.cs @@ -0,0 +1,1247 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigArducopter + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..772230d335 --- /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 0000000000..7080a7d118 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArducopter.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ 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 0000000000..a6928f5b21 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.Designer.cs @@ -0,0 +1,1270 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigArduplane + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..8a4ac7a73b --- /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 0000000000..7080a7d118 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigArduplane.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ 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 0000000000..2681862081 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.Designer.cs @@ -0,0 +1,300 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigBatteryMonitoring + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..9ad384538a --- /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 0000000000..94b1ff7c8d --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 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. + + + \ 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 0000000000..829ad3689e --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.Designer.cs @@ -0,0 +1,450 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigFlightModes + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..d9acf7002c --- /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 0000000000..ff1f88db64 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 17, 17 + + \ 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 0000000000..909cb77317 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.Designer.cs @@ -0,0 +1,248 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigHardwareOptions + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..ed884a1ae8 --- /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 0000000000..7080a7d118 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigHardwareOptions.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ 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 0000000000..ec5a15499e --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs @@ -0,0 +1,677 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigPlanner + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..5040d85be5 --- /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 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 modes = new List(); + + // 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 0000000000..7080a7d118 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ 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 0000000000..04dca22d3e --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.Designer.cs @@ -0,0 +1,366 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigRadioInput + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..1be32e8e81 --- /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 0000000000..6791def873 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRadioInput.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ 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 0000000000..7887cd29c9 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.Designer.cs @@ -0,0 +1,205 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigRawParams + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..5b2c7d1d82 --- /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 0000000000..3267b69260 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + \ 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 0000000000..fd4b1fcd6c --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.Designer.cs @@ -0,0 +1,857 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class ConfigTradHeli + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..7c90f1b31f --- /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 0000000000..7080a7d118 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ 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 0000000000..714e60edae --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.Designer.cs @@ -0,0 +1,59 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class Configuration + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..33869ddb02 --- /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 0000000000..222a74addf --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Configuration.resx @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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= + + + \ 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 0000000000..b75d5ddcf3 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs @@ -0,0 +1,59 @@ +namespace ArdupilotMega.GCSViews.ConfigurationView +{ + partial class Setup + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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 0000000000..c87e0f21bf --- /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 0000000000..222a74addf --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.resx @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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= + + + \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs index 651bfd7e74..3f3143eaf2 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 0310e66b2f..d97921914e 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(); /// /// 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 16414cbbb5..98d32185e9 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 9d491c7a68..92e7c613d4 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 380303e239..b9051e6693 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(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(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(6); // set new target param_total = (par.param_count - 1); @@ -755,7 +755,7 @@ namespace ArdupilotMega /// 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(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(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(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(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(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(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(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(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(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(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(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(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 2f855af568..215c9c545b 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) + /// Load and keep safe position (Roll,Pitch,Yaw) from EEPROM and stop stabilization | + RETRACT=0, + /// Load and keep neutral position (Roll,Pitch,Yaw) from EEPROM. | + NEUTRAL=1, + /// Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | + MAVLINK_TARGETING=2, + /// Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | + RC_TARGETING=3, + /// Load neutral position and start to point to Lat,Lon,Alt | + GPS_POINT=4, + /// | + 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 + /// 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| + NAV_WAYPOINT=16, + /// 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| + NAV_LOITER_UNLIM=17, + /// 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| + NAV_LOITER_TURNS=18, + /// 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| + NAV_LOITER_TIME=19, + /// Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| + NAV_RETURN_TO_LAUNCH=20, + /// Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| + NAV_LAND=21, + /// 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| + NAV_TAKEOFF=22, + /// 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| + NAV_ROI=80, + /// 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| + NAV_PATHPLANNING=81, + /// 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| + NAV_LAST=95, + /// Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| + CONDITION_DELAY=112, + /// 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_CHANGE_ALT=113, + /// Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| + CONDITION_DISTANCE=114, + /// 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_YAW=115, + /// 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| + CONDITION_LAST=159, + /// Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| + DO_SET_MODE=176, + /// 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_JUMP=177, + /// 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_CHANGE_SPEED=178, + /// 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_HOME=179, + /// 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_PARAMETER=180, + /// 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_SET_RELAY=181, + /// 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_REPEAT_RELAY=182, + /// Set a servo to a desired PWM value. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Empty| Empty| Empty| Empty| Empty| + DO_SET_SERVO=183, + /// 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_REPEAT_SERVO=184, + /// 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_CONTROL_VIDEO=200, + /// 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_CONFIGURE=202, + /// 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_DIGICAM_CONTROL=203, + /// 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_CONFIGURE=204, + /// 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_MOUNT_CONTROL=205, + /// 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| + DO_LAST=240, + /// 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_CALIBRATION=241, + /// 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_SET_SENSOR_OFFSETS=242, + /// 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_STORAGE=245, + /// 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| + PREFLIGHT_REBOOT_SHUTDOWN=246, + /// 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| + OVERRIDE_GOTO=252, + /// 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)| + MISSION_START=300, + /// | + ENUM_END=301, + }; - - 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 + + /** @brief */ + public enum FENCE_ACTION + { + /// Disable fenced mode | + NONE=0, + /// Switched to guided mode to return point (fence point 0) | + GUIDED=1, + /// | + ENUM_END=2, + + }; + + /** @brief */ + public enum FENCE_BREACH + { + /// No last fence breach | + NONE=0, + /// Breached minimum altitude | + MINALT=1, + /// Breached minimum altitude | + MAXALT=2, + /// Breached fence boundary | + BOUNDARY=3, + /// | + 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 + { + /// magnetic declination (radians) + public Single mag_declination; + /// raw pressure from barometer + public Int32 raw_press; + /// raw temperature from barometer + public Int32 raw_temp; + /// gyro X calibration + public Single gyro_cal_x; + /// gyro Y calibration + public Single gyro_cal_y; + /// gyro Z calibration + public Single gyro_cal_z; + /// accel X calibration + public Single accel_cal_x; + /// accel Y calibration + public Single accel_cal_y; + /// accel Z calibration + public Single accel_cal_z; + /// magnetometer X offset + public Int16 mag_ofs_x; + /// magnetometer Y offset + public Int16 mag_ofs_y; + /// magnetometer Z offset + 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 + { + /// magnetometer X offset + public Int16 mag_ofs_x; + /// magnetometer Y offset + public Int16 mag_ofs_y; + /// magnetometer Z offset + public Int16 mag_ofs_z; + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_MEMINFO = 152; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_meminfo_t + { + /// heap top + public UInt16 brkval; + /// free memory + 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 + { + /// ADC output 1 + public UInt16 adc1; + /// ADC output 2 + public UInt16 adc2; + /// ADC output 3 + public UInt16 adc3; + /// ADC output 4 + public UInt16 adc4; + /// ADC output 5 + public UInt16 adc5; + /// ADC output 6 + 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 + { + /// Correspondent value to given extra_param + public Single extra_value; + /// Divisor number //e.g. 1000 means 1/1000 (0 means ignore) + public UInt16 shutter_speed; + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore) + public byte mode; + /// F stop number x 10 //e.g. 28 means 2.8 (0 means ignore) + public byte aperture; + /// ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore) + public byte iso; + /// Exposure type enumeration from 1 to N (0 means ignore) + public byte exposure_type; + /// Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once + public byte command_id; + /// Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) + public byte engine_cut_off; + /// Extra parameters enumeration (0 means ignore) + 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 + { + /// Correspondent value to given extra_param + public Single extra_value; + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// 0: stop, 1: start or keep it up //Session control e.g. show/hide lens + public byte session; + /// 1 to N //Zoom's absolute position (0 means ignore) + public byte zoom_pos; + /// -100 to 100 //Zooming step value to offset zoom from the current position + public byte zoom_step; + /// 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus + public byte focus_lock; + /// 0: ignore, 1: shot or start filming + public byte shot; + /// Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once + public byte command_id; + /// Extra parameters enumeration (0 means ignore) + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// mount operating mode (see MAV_MOUNT_MODE enum) + public byte mount_mode; + /// (1 = yes, 0 = no) + public byte stab_roll; + /// (1 = yes, 0 = no) + public byte stab_pitch; + /// (1 = yes, 0 = no) + 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 + { + /// pitch(deg*100) or lat, depending on mount mode + public Int32 input_a; + /// roll(deg*100) or lon depending on mount mode + public Int32 input_b; + /// yaw(deg*100) or alt (in cm) depending on mount mode + public Int32 input_c; + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING) + 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 + { + /// pitch(deg*100) or lat, depending on mount mode + public Int32 pointing_a; + /// roll(deg*100) or lon depending on mount mode + public Int32 pointing_b; + /// yaw(deg*100) or alt (in cm) depending on mount mode + public Int32 pointing_c; + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// Latitude of point + public Single lat; + /// Longitude of point + public Single lng; + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// point index (first point is 1, 0 is for return point) + public byte idx; + /// total number of points (for sanity checking) + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// point index (first point is 1, 0 is for return point) + 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 + { + /// time of last breach in milliseconds since boot + public UInt32 breach_time; + /// number of fence breaches + public UInt16 breach_count; + /// 0 if currently inside fence, 1 if outside + public byte breach_status; + /// last breach type (see FENCE_BREACH_* enum) + public byte breach_type; + + }; + + + public const byte MAVLINK_MSG_ID_AHRS = 163; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=28)] + public struct mavlink_ahrs_t + { + /// X gyro drift estimate rad/s + public Single omegaIx; + /// Y gyro drift estimate rad/s + public Single omegaIy; + /// Z gyro drift estimate rad/s + public Single omegaIz; + /// average accel_weight + public Single accel_weight; + /// average renormalisation value + public Single renorm_val; + /// average error_roll_pitch value + public Single error_rp; + /// average error_yaw value + public Single error_yaw; + + }; + + + public const byte MAVLINK_MSG_ID_SIMSTATE = 164; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=36)] + public struct mavlink_simstate_t + { + /// Roll angle (rad) + public Single roll; + /// Pitch angle (rad) + public Single pitch; + /// Yaw angle (rad) + public Single yaw; + /// X acceleration m/s/s + public Single xacc; + /// Y acceleration m/s/s + public Single yacc; + /// Z acceleration m/s/s + public Single zacc; + /// Angular speed around X axis rad/s + public Single xgyro; + /// Angular speed around Y axis rad/s + public Single ygyro; + /// Angular speed around Z axis rad/s + public Single zgyro; + + }; + + + public const byte MAVLINK_MSG_ID_HWSTATUS = 165; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_hwstatus_t + { + /// board voltage (mV) + public UInt16 Vcc; + /// I2C error count + public byte I2Cerr; + + }; + + + public const byte MAVLINK_MSG_ID_RADIO = 166; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=9)] + public struct mavlink_radio_t + { + /// receive errors + public UInt16 rxerrors; + /// serial errors + public UInt16 serrors; + /// count of error corrected packets + public UInt16 fixed; + /// local signal strength + public byte rssi; + /// remote signal strength + public byte remrssi; + /// how full the tx buffer is as a percentage + public byte txbuf; + + }; + + + public const byte MAVLINK_MSG_ID_HEARTBEAT = 0; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=9)] + public struct mavlink_heartbeat_t + { + /// Navigation mode bitfield, see MAV_AUTOPILOT_CUSTOM_MODE ENUM for some examples. This field is autopilot-specific. + public UInt32 custom_mode; + /// Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) + public byte type; + /// Autopilot type / class. defined in MAV_CLASS ENUM + public byte autopilot; + /// System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h + public byte base_mode; + /// System status flag, see MAV_STATUS ENUM + public byte system_status; + /// MAVLink version + 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 + { + /// 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 UInt32 onboard_control_sensors_present; + /// 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 UInt32 onboard_control_sensors_enabled; + /// 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 UInt32 onboard_control_sensors_health; + /// Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 + public UInt16 load; + /// Battery voltage, in millivolts (1 = 1 millivolt) + public UInt16 voltage_battery; + /// Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current + public Int16 current_battery; + /// 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 UInt16 drop_rate_comm; + /// Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) + public UInt16 errors_comm; + /// Autopilot-specific errors + public UInt16 errors_count1; + /// Autopilot-specific errors + public UInt16 errors_count2; + /// Autopilot-specific errors + public UInt16 errors_count3; + /// Autopilot-specific errors + public UInt16 errors_count4; + /// Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery + 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 + { + /// Timestamp of the master clock in microseconds since UNIX epoch. + public UInt64 time_unix_usec; + /// Timestamp of the component clock since boot time in milliseconds. + 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 + { + /// Unix timestamp in microseconds + public UInt64 time_usec; + /// PING sequence + public UInt32 seq; + /// 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_system; + /// 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 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 + { + /// System the GCS requests control for + public byte target_system; + /// 0: request control of this MAV, 1: Release control of this MAV + public byte control_request; + /// 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. + public byte version; + /// 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 "!?,.-" + [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 + { + /// ID of the GCS this message + public byte gcs_system_id; + /// 0: request control of this MAV, 1: Release control of this MAV + public byte control_request; + /// 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control + 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 + { + /// key + [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 + { + /// The new autopilot-specific mode. This field can be ignored by an autopilot. + public UInt32 custom_mode; + /// The system setting the mode + public byte target_system; + /// The new base mode + 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 + { + /// Parameter index. Send -1 to use the param ID field as identifier + public Int16 param_index; + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Onboard parameter id + [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 + { + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// Onboard parameter value + public Single param_value; + /// Total number of onboard parameters + public UInt16 param_count; + /// Index of this onboard parameter + public UInt16 param_index; + /// Onboard parameter id + [MarshalAs(UnmanagedType.ByValArray,SizeConst=16)] + public string param_id; + /// Onboard parameter type: see MAV_VAR enum + 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 + { + /// Onboard parameter value + public Single param_value; + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Onboard parameter id + [MarshalAs(UnmanagedType.ByValArray,SizeConst=16)] + public string param_id; + /// Onboard parameter type: see MAV_VAR enum + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 time_usec; + /// Latitude in 1E7 degrees + public Int32 lat; + /// Longitude in 1E7 degrees + public Int32 lon; + /// Altitude in 1E3 meters (millimeters) above MSL + public Int32 alt; + /// GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 + public UInt16 eph; + /// GPS VDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 + public UInt16 epv; + /// GPS ground speed (m/s * 100). If unknown, set to: 65535 + public UInt16 vel; + /// Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 + public UInt16 cog; + /// 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 fix_type; + /// Number of satellites visible. If unknown, set to 255 + 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 + { + /// Number of satellites visible + public byte satellites_visible; + /// Global satellite ID + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_prn; + /// 0: Satellite not used, 1: used for localization + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_used; + /// Elevation (0: right on top of receiver, 90: on the horizon) of satellite + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_elevation; + /// Direction of satellite, 0: 0 deg, 255: 360 deg. + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_azimuth; + /// Signal to noise ratio of satellite + [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 + { + /// Timestamp (milliseconds since system boot) + public UInt32 time_boot_ms; + /// X acceleration (mg) + public Int16 xacc; + /// Y acceleration (mg) + public Int16 yacc; + /// Z acceleration (mg) + public Int16 zacc; + /// Angular speed around X axis (millirad /sec) + public Int16 xgyro; + /// Angular speed around Y axis (millirad /sec) + public Int16 ygyro; + /// Angular speed around Z axis (millirad /sec) + public Int16 zgyro; + /// X Magnetic field (milli tesla) + public Int16 xmag; + /// Y Magnetic field (milli tesla) + public Int16 ymag; + /// Z Magnetic field (milli tesla) + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 time_usec; + /// X acceleration (raw) + public Int16 xacc; + /// Y acceleration (raw) + public Int16 yacc; + /// Z acceleration (raw) + public Int16 zacc; + /// Angular speed around X axis (raw) + public Int16 xgyro; + /// Angular speed around Y axis (raw) + public Int16 ygyro; + /// Angular speed around Z axis (raw) + public Int16 zgyro; + /// X Magnetic field (raw) + public Int16 xmag; + /// Y Magnetic field (raw) + public Int16 ymag; + /// Z Magnetic field (raw) + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 time_usec; + /// Absolute pressure (raw) + public Int16 press_abs; + /// Differential pressure 1 (raw) + public Int16 press_diff1; + /// Differential pressure 2 (raw) + public Int16 press_diff2; + /// Raw Temperature measurement (raw) + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt32 time_boot_ms; + /// Absolute pressure (hectopascal) + public Single press_abs; + /// Differential pressure 1 (hectopascal) + public Single press_diff; + /// Temperature measurement (0.01 degrees celsius) + public Int16 temperature; + + }; + + + public const byte MAVLINK_MSG_ID_ATTITUDE = 30; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=28)] + public struct mavlink_attitude_t + { + /// Timestamp (milliseconds since system boot) + public UInt32 time_boot_ms; + /// Roll angle (rad) + public Single roll; + /// Pitch angle (rad) + public Single pitch; + /// Yaw angle (rad) + public Single yaw; + /// Roll angular speed (rad/s) + public Single rollspeed; + /// Pitch angular speed (rad/s) + public Single pitchspeed; + /// Yaw angular speed (rad/s) + 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 + { + /// Timestamp (milliseconds since system boot) + public UInt32 time_boot_ms; + /// Quaternion component 1 + public Single q1; + /// Quaternion component 2 + public Single q2; + /// Quaternion component 3 + public Single q3; + /// Quaternion component 4 + public Single q4; + /// Roll angular speed (rad/s) + public Single rollspeed; + /// Pitch angular speed (rad/s) + public Single pitchspeed; + /// Yaw angular speed (rad/s) + 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 + { + /// Timestamp (milliseconds since system boot) + public UInt32 time_boot_ms; + /// X Position + public Single x; + /// Y Position + public Single y; + /// Z Position + public Single z; + /// X Speed + public Single vx; + /// Y Speed + public Single vy; + /// Z Speed + 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 + { + /// Timestamp (milliseconds since system boot) + public UInt32 time_boot_ms; + /// Latitude, expressed as * 1E7 + public Int32 lat; + /// Longitude, expressed as * 1E7 + public Int32 lon; + /// Altitude in meters, expressed as * 1000 (millimeters), above MSL + public Int32 alt; + /// Altitude above ground in meters, expressed as * 1000 (millimeters) + public Int32 relative_alt; + /// Ground X Speed (Latitude), expressed as m/s * 100 + public Int16 vx; + /// Ground Y Speed (Longitude), expressed as m/s * 100 + public Int16 vy; + /// Ground Z Speed (Altitude), expressed as m/s * 100 + public Int16 vz; + /// Compass heading in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 + 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 + { + /// Timestamp (milliseconds since system boot) + public UInt32 time_boot_ms; + /// RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan1_scaled; + /// RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan2_scaled; + /// RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan3_scaled; + /// RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan4_scaled; + /// RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan5_scaled; + /// RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan6_scaled; + /// RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan7_scaled; + /// RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan8_scaled; + /// 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 port; + /// Receive signal strength indicator, 0: 0%, 255: 100% + 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 + { + /// Timestamp (milliseconds since system boot) + public UInt32 time_boot_ms; + /// RC channel 1 value, in microseconds + public UInt16 chan1_raw; + /// RC channel 2 value, in microseconds + public UInt16 chan2_raw; + /// RC channel 3 value, in microseconds + public UInt16 chan3_raw; + /// RC channel 4 value, in microseconds + public UInt16 chan4_raw; + /// RC channel 5 value, in microseconds + public UInt16 chan5_raw; + /// RC channel 6 value, in microseconds + public UInt16 chan6_raw; + /// RC channel 7 value, in microseconds + public UInt16 chan7_raw; + /// RC channel 8 value, in microseconds + public UInt16 chan8_raw; + /// 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 port; + /// Receive signal strength indicator, 0: 0%, 255: 100% + 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 + { + /// Timestamp (since UNIX epoch or microseconds since system boot) + public UInt32 time_usec; + /// Servo output 1 value, in microseconds + public UInt16 servo1_raw; + /// Servo output 2 value, in microseconds + public UInt16 servo2_raw; + /// Servo output 3 value, in microseconds + public UInt16 servo3_raw; + /// Servo output 4 value, in microseconds + public UInt16 servo4_raw; + /// Servo output 5 value, in microseconds + public UInt16 servo5_raw; + /// Servo output 6 value, in microseconds + public UInt16 servo6_raw; + /// Servo output 7 value, in microseconds + public UInt16 servo7_raw; + /// Servo output 8 value, in microseconds + public UInt16 servo8_raw; + /// 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 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 + { + /// Start index, 0 by default + public Int16 start_index; + /// End index, -1 by default (-1: send list to end). Else a valid index of the list + public Int16 end_index; + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// Start index, 0 by default and smaller / equal to the largest index of the current onboard list. + public Int16 start_index; + /// End index, equal or greater than start index. + public Int16 end_index; + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// PARAM1 / For NAV command MISSIONs: Radius in which the MISSION is accepted as reached, in meters + public Single param1; + /// PARAM2 / For NAV command MISSIONs: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds + public Single param2; + /// 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 Single param3; + /// PARAM4 / For NAV and LOITER command MISSIONs: Yaw orientation in degrees, [0..360] 0 = NORTH + public Single param4; + /// PARAM5 / local: x position, global: latitude + public Single x; + /// PARAM6 / y position: global: longitude + public Single y; + /// PARAM7 / z position: global: altitude + public Single z; + /// Sequence + public UInt16 seq; + /// The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs + public UInt16 command; + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h + public byte frame; + /// false:0, true:1 + public byte current; + /// autocontinue to next wp + 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 + { + /// Sequence + public UInt16 seq; + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// Sequence + public UInt16 seq; + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// Sequence + 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 + { + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// Number of mission items in the sequence + public UInt16 count; + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// Sequence + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// See MAV_MISSION_RESULT enum + 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 + { + /// global position * 1E7 + public Int32 latitude; + /// global position * 1E7 + public Int32 longitude; + /// global position * 1000 + public Int32 altitude; + /// System ID + 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 + { + /// Latitude (WGS84), expressed as * 1E7 + public Int32 latitude; + /// Longitude (WGS84), expressed as * 1E7 + public Int32 longitude; + /// Altitude(WGS84), expressed as * 1000 + 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 + { + /// x position + public Single x; + /// y position + public Single y; + /// z position + public Single z; + /// Desired yaw angle + public Single yaw; + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU + 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 + { + /// x position + public Single x; + /// y position + public Single y; + /// z position + public Single z; + /// Desired yaw angle + public Single yaw; + /// Coordinate frame - valid values are only MAV_FRAME_LOCAL_NED or MAV_FRAME_LOCAL_ENU + 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 + { + /// WGS84 Latitude position in degrees * 1E7 + public Int32 latitude; + /// WGS84 Longitude position in degrees * 1E7 + public Int32 longitude; + /// WGS84 Altitude in meters * 1000 (positive for up) + public Int32 altitude; + /// Desired yaw angle in degrees * 100 + public Int16 yaw; + /// Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT + 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 + { + /// WGS84 Latitude position in degrees * 1E7 + public Int32 latitude; + /// WGS84 Longitude position in degrees * 1E7 + public Int32 longitude; + /// WGS84 Altitude in meters * 1000 (positive for up) + public Int32 altitude; + /// Desired yaw angle in degrees * 100 + public Int16 yaw; + /// Coordinate frame - valid values are only MAV_FRAME_GLOBAL or MAV_FRAME_GLOBAL_RELATIVE_ALT + 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 + { + /// x position 1 / Latitude 1 + public Single p1x; + /// y position 1 / Longitude 1 + public Single p1y; + /// z position 1 / Altitude 1 + public Single p1z; + /// x position 2 / Latitude 2 + public Single p2x; + /// y position 2 / Longitude 2 + public Single p2y; + /// z position 2 / Altitude 2 + public Single p2z; + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// 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 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 + { + /// x position 1 / Latitude 1 + public Single p1x; + /// y position 1 / Longitude 1 + public Single p1y; + /// z position 1 / Altitude 1 + public Single p1z; + /// x position 2 / Latitude 2 + public Single p2x; + /// y position 2 / Longitude 2 + public Single p2y; + /// z position 2 / Altitude 2 + public Single p2z; + /// 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 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 + { + /// Desired roll angle in radians + public Single roll; + /// Desired pitch angle in radians + public Single pitch; + /// Desired yaw angle in radians + public Single yaw; + /// Collective thrust, normalized to 0 .. 1 + public Single thrust; + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// Desired roll angular speed in rad/s + public Single roll_speed; + /// Desired pitch angular speed in rad/s + public Single pitch_speed; + /// Desired yaw angular speed in rad/s + public Single yaw_speed; + /// Collective thrust, normalized to 0 .. 1 + public Single thrust; + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// Timestamp in milliseconds since system boot + public UInt32 time_boot_ms; + /// Desired roll angle in radians + public Single roll; + /// Desired pitch angle in radians + public Single pitch; + /// Desired yaw angle in radians + public Single yaw; + /// Collective thrust, normalized to 0 .. 1 + 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 + { + /// Timestamp in milliseconds since system boot + public UInt32 time_boot_ms; + /// Desired roll angular speed in rad/s + public Single roll_speed; + /// Desired pitch angular speed in rad/s + public Single pitch_speed; + /// Desired yaw angular speed in rad/s + public Single yaw_speed; + /// Collective thrust, normalized to 0 .. 1 + 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 + { + /// Current desired roll in degrees + public Single nav_roll; + /// Current desired pitch in degrees + public Single nav_pitch; + /// Current altitude error in meters + public Single alt_error; + /// Current airspeed error in meters/second + public Single aspd_error; + /// Current crosstrack error on x-y plane in meters + public Single xtrack_error; + /// Current desired heading in degrees + public Int16 nav_bearing; + /// Bearing to current MISSION/target in degrees + public Int16 target_bearing; + /// Distance to active MISSION in meters + 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 + { + /// x position error + public Single xErr; + /// y position error + public Single yErr; + /// z position error + public Single zErr; + /// roll error (radians) + public Single rollErr; + /// pitch error (radians) + public Single pitchErr; + /// yaw error (radians) + public Single yawErr; + /// x velocity + public Single vxErr; + /// y velocity + public Single vyErr; + /// z velocity + 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 + { + /// The requested interval between two messages of this type + public UInt16 req_message_rate; + /// The target requested to send the message stream. + public byte target_system; + /// The target requested to send the message stream. + public byte target_component; + /// The ID of the requested data stream + public byte req_stream_id; + /// 1 to start sending, 0 to stop sending. + 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 + { + /// The requested interval between two messages of this type + public UInt16 message_rate; + /// The ID of the requested data stream + public byte stream_id; + /// 1 stream is enabled, 0 stream is stopped. + 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 + { + /// roll + public Single roll; + /// pitch + public Single pitch; + /// yaw + public Single yaw; + /// thrust + public Single thrust; + /// The system to be controlled + public byte target; + /// roll control enabled auto:0, manual:1 + public byte roll_manual; + /// pitch auto:0, manual:1 + public byte pitch_manual; + /// yaw auto:0, manual:1 + public byte yaw_manual; + /// thrust auto:0, manual:1 + 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 + { + /// RC channel 1 value, in microseconds + public UInt16 chan1_raw; + /// RC channel 2 value, in microseconds + public UInt16 chan2_raw; + /// RC channel 3 value, in microseconds + public UInt16 chan3_raw; + /// RC channel 4 value, in microseconds + public UInt16 chan4_raw; + /// RC channel 5 value, in microseconds + public UInt16 chan5_raw; + /// RC channel 6 value, in microseconds + public UInt16 chan6_raw; + /// RC channel 7 value, in microseconds + public UInt16 chan7_raw; + /// RC channel 8 value, in microseconds + public UInt16 chan8_raw; + /// System ID + public byte target_system; + /// Component ID + 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 + { + /// Current airspeed in m/s + public Single airspeed; + /// Current ground speed in m/s + public Single groundspeed; + /// Current altitude (MSL), in meters + public Single alt; + /// Current climb rate in meters/second + public Single climb; + /// Current heading in degrees, in compass units (0..360, 0=north) + public Int16 heading; + /// Current throttle setting in integer percent, 0 to 100 + 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 + { + /// Parameter 1, as defined by MAV_CMD enum. + public Single param1; + /// Parameter 2, as defined by MAV_CMD enum. + public Single param2; + /// Parameter 3, as defined by MAV_CMD enum. + public Single param3; + /// Parameter 4, as defined by MAV_CMD enum. + public Single param4; + /// Parameter 5, as defined by MAV_CMD enum. + public Single param5; + /// Parameter 6, as defined by MAV_CMD enum. + public Single param6; + /// Parameter 7, as defined by MAV_CMD enum. + public Single param7; + /// Command ID, as defined by MAV_CMD enum. + public UInt16 command; + /// System which should execute the command + public byte target_system; + /// Component which should execute the command, 0 for all components + public byte target_component; + /// 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) + 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 + { + /// Command ID, as defined by MAV_CMD enum. + public UInt16 command; + /// See MAV_RESULT enum + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 time_usec; + /// Roll angle (rad) + public Single roll; + /// Pitch angle (rad) + public Single pitch; + /// Yaw angle (rad) + public Single yaw; + /// Roll angular speed (rad/s) + public Single rollspeed; + /// Pitch angular speed (rad/s) + public Single pitchspeed; + /// Yaw angular speed (rad/s) + public Single yawspeed; + /// Latitude, expressed as * 1E7 + public Int32 lat; + /// Longitude, expressed as * 1E7 + public Int32 lon; + /// Altitude in meters, expressed as * 1000 (millimeters) + public Int32 alt; + /// Ground X Speed (Latitude), expressed as m/s * 100 + public Int16 vx; + /// Ground Y Speed (Longitude), expressed as m/s * 100 + public Int16 vy; + /// Ground Z Speed (Altitude), expressed as m/s * 100 + public Int16 vz; + /// X acceleration (mg) + public Int16 xacc; + /// Y acceleration (mg) + public Int16 yacc; + /// Z acceleration (mg) + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 time_usec; + /// Control output -1 .. 1 + public Single roll_ailerons; + /// Control output -1 .. 1 + public Single pitch_elevator; + /// Control output -1 .. 1 + public Single yaw_rudder; + /// Throttle 0 .. 1 + public Single throttle; + /// Aux 1, -1 .. 1 + public Single aux1; + /// Aux 2, -1 .. 1 + public Single aux2; + /// Aux 3, -1 .. 1 + public Single aux3; + /// Aux 4, -1 .. 1 + public Single aux4; + /// System mode (MAV_MODE) + public byte mode; + /// Navigation mode (MAV_NAV_MODE) + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 time_usec; + /// RC channel 1 value, in microseconds + public UInt16 chan1_raw; + /// RC channel 2 value, in microseconds + public UInt16 chan2_raw; + /// RC channel 3 value, in microseconds + public UInt16 chan3_raw; + /// RC channel 4 value, in microseconds + public UInt16 chan4_raw; + /// RC channel 5 value, in microseconds + public UInt16 chan5_raw; + /// RC channel 6 value, in microseconds + public UInt16 chan6_raw; + /// RC channel 7 value, in microseconds + public UInt16 chan7_raw; + /// RC channel 8 value, in microseconds + public UInt16 chan8_raw; + /// RC channel 9 value, in microseconds + public UInt16 chan9_raw; + /// RC channel 10 value, in microseconds + public UInt16 chan10_raw; + /// RC channel 11 value, in microseconds + public UInt16 chan11_raw; + /// RC channel 12 value, in microseconds + public UInt16 chan12_raw; + /// Receive signal strength indicator, 0: 0%, 255: 100% + 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 + { + /// Timestamp (UNIX) + public UInt64 time_usec; + /// Ground distance in meters + public Single ground_distance; + /// Flow in pixels in x-sensor direction + public Int16 flow_x; + /// Flow in pixels in y-sensor direction + public Int16 flow_y; + /// Sensor ID + public byte sensor_id; + /// Optical flow quality / confidence. 0: bad, 255: maximum quality + 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 + { + /// Timestamp (milliseconds) + public UInt64 usec; + /// Global X position + public Single x; + /// Global Y position + public Single y; + /// Global Z position + public Single z; + /// Roll angle in rad + public Single roll; + /// Pitch angle in rad + public Single pitch; + /// Yaw angle in rad + 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 + { + /// Timestamp (milliseconds) + public UInt64 usec; + /// Global X position + public Single x; + /// Global Y position + public Single y; + /// Global Z position + public Single z; + /// Roll angle in rad + public Single roll; + /// Pitch angle in rad + public Single pitch; + /// Yaw angle in rad + 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 + { + /// Timestamp (milliseconds) + public UInt64 usec; + /// Global X speed + public Single x; + /// Global Y speed + public Single y; + /// Global Z speed + 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 + { + /// Timestamp (milliseconds) + public UInt64 usec; + /// Global X position + public Single x; + /// Global Y position + public Single y; + /// Global Z position + public Single z; + /// Roll angle in rad + public Single roll; + /// Pitch angle in rad + public Single pitch; + /// Yaw angle in rad + 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 + { + /// Starting address of the debug variables + public UInt16 address; + /// Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below + public byte ver; + /// 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 + public byte type; + /// Memory contents at specified address + [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 + { + /// Timestamp + public UInt64 time_usec; + /// x + public Single x; + /// y + public Single y; + /// z + public Single z; + /// Name + [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 + { + /// Timestamp (milliseconds since system boot) + public UInt32 time_boot_ms; + /// Floating point value + public Single value; + /// Name of the debug variable + [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 + { + /// Timestamp (milliseconds since system boot) + public UInt32 time_boot_ms; + /// Signed integer value + public Int32 value; + /// Name of the debug variable + [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 + { + /// Severity of status, 0 = info message, 255 = critical fault + public byte severity; + /// Status text message, without null termination character + [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 + { + /// Timestamp (milliseconds since system boot) + public UInt32 time_boot_ms; + /// DEBUG value + public Single value; + /// index of debug variable + 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 + { + /// System which should execute the command + public byte target_system; + /// Component which should execute the command, 0 for all components + public byte target_component; + /// Retransmission / ACK flags + public byte protocol_flags; + + }; + + } +#endif } - diff --git a/Tools/ArdupilotMegaPlanner/MAVLinkTypes0.9.cs b/Tools/ArdupilotMegaPlanner/MAVLinkTypes0.9.cs index 73d32cf4b8..c869616dcf 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 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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 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 + { + /// Load and keep safe position (Roll,Pitch,Yaw) from EEPROM and stop stabilization | + RETRACT=0, + /// Load and keep neutral position (Roll,Pitch,Yaw) from EEPROM. | + NEUTRAL=1, + /// Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization | + MAVLINK_TARGETING=2, + /// Load neutral position and start RC Roll,Pitch,Yaw control with stabilization | + RC_TARGETING=3, + /// Load neutral position and start to point to Lat,Lon,Alt | + GPS_POINT=4, + /// | + ENUM_END=5, + + }; + + /** @brief */ + public enum MAV_CMD + { + /// 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| + WAYPOINT=16, + /// 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_UNLIM=17, + /// 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_TURNS=18, + /// 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| + LOITER_TIME=19, + /// Return to launch location |Empty| Empty| Empty| Empty| Empty| Empty| Empty| + RETURN_TO_LAUNCH=20, + /// Land at location |Empty| Empty| Empty| Desired yaw angle.| Latitude| Longitude| Altitude| + LAND=21, + /// 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| + TAKEOFF=22, + /// 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| + ROI=80, + /// 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| + PATHPLANNING=81, + /// 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| + LAST=95, + /// Delay mission state machine. |Delay in seconds (decimal)| Empty| Empty| Empty| Empty| Empty| Empty| + CONDITION_DELAY=112, + /// 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_CHANGE_ALT=113, + /// Delay mission state machine until within desired distance of next NAV point. |Distance (meters)| Empty| Empty| Empty| Empty| Empty| Empty| + CONDITION_DISTANCE=114, + /// 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_YAW=115, + /// 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| + CONDITION_LAST=159, + /// Set system mode. |Mode, as defined by ENUM MAV_MODE| Empty| Empty| Empty| Empty| Empty| Empty| + DO_SET_MODE=176, + /// 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_JUMP=177, + /// 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_CHANGE_SPEED=178, + /// 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_HOME=179, + /// 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_PARAMETER=180, + /// 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_SET_RELAY=181, + /// 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_REPEAT_RELAY=182, + /// Set a servo to a desired PWM value. |Servo number| PWM (microseconds, 1000 to 2000 typical)| Empty| Empty| Empty| Empty| Empty| + DO_SET_SERVO=183, + /// 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_REPEAT_SERVO=184, + /// 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_CONTROL_VIDEO=200, + /// 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_SET_ROI=201, + /// 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_CONFIGURE=202, + /// 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_DIGICAM_CONTROL=203, + /// 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_CONFIGURE=204, + /// 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_MOUNT_CONTROL=205, + /// 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| + DO_LAST=240, + /// 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_CALIBRATION=241, + /// 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_STORAGE=245, + /// | + ENUM_END=246, + + }; + + /** @brief */ + public enum FENCE_ACTION + { + /// Disable fenced mode | + NONE=0, + /// Switched to guided mode to return point (fence point 0) | + GUIDED=1, + /// | + ENUM_END=2, + + }; + + /** @brief */ + public enum FENCE_BREACH + { + /// No last fence breach | + NONE=0, + /// Breached minimum altitude | + MINALT=1, + /// Breached minimum altitude | + MAXALT=2, + /// Breached fence boundary | + BOUNDARY=3, + /// | + 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 + { + /// magnetometer X offset + public Int16 mag_ofs_x; + /// magnetometer Y offset + public Int16 mag_ofs_y; + /// magnetometer Z offset + public Int16 mag_ofs_z; + /// magnetic declination (radians) + public Single mag_declination; + /// raw pressure from barometer + public Int32 raw_press; + /// raw temperature from barometer + public Int32 raw_temp; + /// gyro X calibration + public Single gyro_cal_x; + /// gyro Y calibration + public Single gyro_cal_y; + /// gyro Z calibration + public Single gyro_cal_z; + /// accel X calibration + public Single accel_cal_x; + /// accel Y calibration + public Single accel_cal_y; + /// accel Z calibration + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// magnetometer X offset + public Int16 mag_ofs_x; + /// magnetometer Y offset + public Int16 mag_ofs_y; + /// magnetometer Z offset + 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 + { + /// heap top + public UInt16 brkval; + /// free memory + 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 + { + /// ADC output 1 + public UInt16 adc1; + /// ADC output 2 + public UInt16 adc2; + /// ADC output 3 + public UInt16 adc3; + /// ADC output 4 + public UInt16 adc4; + /// ADC output 5 + public UInt16 adc5; + /// ADC output 6 + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore) + public byte mode; + /// Divisor number //e.g. 1000 means 1/1000 (0 means ignore) + public UInt16 shutter_speed; + /// F stop number x 10 //e.g. 28 means 2.8 (0 means ignore) + public byte aperture; + /// ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore) + public byte iso; + /// Exposure type enumeration from 1 to N (0 means ignore) + public byte exposure_type; + /// Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once + public byte command_id; + /// Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) + public byte engine_cut_off; + /// Extra parameters enumeration (0 means ignore) + public byte extra_param; + /// Correspondent value to given extra_param + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// 0: stop, 1: start or keep it up //Session control e.g. show/hide lens + public byte session; + /// 1 to N //Zoom's absolute position (0 means ignore) + public byte zoom_pos; + /// -100 to 100 //Zooming step value to offset zoom from the current position + public byte zoom_step; + /// 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus + public byte focus_lock; + /// 0: ignore, 1: shot or start filming + public byte shot; + /// Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once + public byte command_id; + /// Extra parameters enumeration (0 means ignore) + public byte extra_param; + /// Correspondent value to given extra_param + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// mount operating mode (see MAV_MOUNT_MODE enum) + public byte mount_mode; + /// (1 = yes, 0 = no) + public byte stab_roll; + /// (1 = yes, 0 = no) + public byte stab_pitch; + /// (1 = yes, 0 = no) + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// pitch(deg*100) or lat, depending on mount mode + public Int32 input_a; + /// roll(deg*100) or lon depending on mount mode + public Int32 input_b; + /// yaw(deg*100) or alt (in cm) depending on mount mode + public Int32 input_c; + /// if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING) + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// pitch(deg*100) or lat, depending on mount mode + public Int32 pointing_a; + /// roll(deg*100) or lon depending on mount mode + public Int32 pointing_b; + /// yaw(deg*100) or alt (in cm) depending on mount mode + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// point index (first point is 1, 0 is for return point) + public byte idx; + /// total number of points (for sanity checking) + public byte count; + /// Latitude of point + public Single lat; + /// Longitude of point + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// point index (first point is 1, 0 is for return point) + 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 + { + /// 0 if currently inside fence, 1 if outside + public byte breach_status; + /// number of fence breaches + public UInt16 breach_count; + /// last breach type (see FENCE_BREACH_* enum) + public byte breach_type; + /// time of last breach in milliseconds since boot + public UInt32 breach_time; + + }; + + + public const byte MAVLINK_MSG_ID_AHRS = 163; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=28)] + public struct mavlink_ahrs_t + { + /// X gyro drift estimate rad/s + public Single omegaIx; + /// Y gyro drift estimate rad/s + public Single omegaIy; + /// Z gyro drift estimate rad/s + public Single omegaIz; + /// average accel_weight + public Single accel_weight; + /// average renormalisation value + public Single renorm_val; + /// average error_roll_pitch value + public Single error_rp; + /// average error_yaw value + public Single error_yaw; + + }; + + + public const byte MAVLINK_MSG_ID_SIMSTATE = 164; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=36)] + public struct mavlink_simstate_t + { + /// Roll angle (rad) + public Single roll; + /// Pitch angle (rad) + public Single pitch; + /// Yaw angle (rad) + public Single yaw; + /// X acceleration m/s/s + public Single xacc; + /// Y acceleration m/s/s + public Single yacc; + /// Z acceleration m/s/s + public Single zacc; + /// Angular speed around X axis rad/s + public Single xgyro; + /// Angular speed around Y axis rad/s + public Single ygyro; + /// Angular speed around Z axis rad/s + public Single zgyro; + + }; + + + public const byte MAVLINK_MSG_ID_HWSTATUS = 165; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_hwstatus_t + { + /// board voltage (mV) + public UInt16 Vcc; + /// I2C error count + public byte I2Cerr; + + }; + + + public const byte MAVLINK_MSG_ID_RADIO = 166; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=9)] + public struct mavlink_radio_t + { + /// local signal strength + public byte rssi; + /// remote signal strength + public byte remrssi; + /// how full the tx buffer is as a percentage + public byte txbuf; + /// receive errors + public UInt16 rxerrors; + /// serial errors + public UInt16 serrors; + /// count of error corrected packets + public UInt16 fixedp; + + }; + + + public const byte MAVLINK_MSG_ID_HEARTBEAT = 0; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_heartbeat_t + { + /// Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) + public byte type; + /// Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM + public byte autopilot; + /// MAVLink version + public byte mavlink_version; + + }; + + + public const byte MAVLINK_MSG_ID_BOOT = 1; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_boot_t + { + /// The onboard software version + public UInt32 version; + + }; + + + public const byte MAVLINK_MSG_ID_SYSTEM_TIME = 2; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=8)] + public struct mavlink_system_time_t + { + /// Timestamp of the master clock in microseconds since UNIX epoch. + public UInt64 time_usec; + + }; + + + public const byte MAVLINK_MSG_ID_PING = 3; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=14)] + public struct mavlink_ping_t + { + /// PING sequence + public UInt32 seq; + /// 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_system; + /// 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 byte target_component; + /// Unix timestamp in microseconds + 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 + { + /// GPS UTC date ddmmyy + public UInt32 utc_date; + /// GPS UTC time hhmmss + public UInt32 utc_time; + + }; + + + public const byte MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=28)] + public struct mavlink_change_operator_control_t + { + /// System the GCS requests control for + public byte target_system; + /// 0: request control of this MAV, 1: Release control of this MAV + public byte control_request; + /// 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. + public byte version; + /// 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 "!?,.-" + [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 + { + /// ID of the GCS this message + public byte gcs_system_id; + /// 0: request control of this MAV, 1: Release control of this MAV + public byte control_request; + /// 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control + 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 + { + /// key + [MarshalAs(UnmanagedType.ByValArray,SizeConst=32)] + public string key; + + }; + + + public const byte MAVLINK_MSG_ID_ACTION_ACK = 9; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_action_ack_t + { + /// The action id + public byte action; + /// 0: Action DENIED, 1: Action executed + public byte result; + + }; + + + public const byte MAVLINK_MSG_ID_ACTION = 10; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_action_t + { + /// The system executing the action + public byte target; + /// The component executing the action + public byte target_component; + /// The action id + 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 + { + /// The system setting the mode + public byte target; + /// The new mode + public byte 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 + { + /// The system setting the mode + public byte target; + /// The new navigation mode + public byte nav_mode; + + }; + + + public const byte MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=19)] + public struct mavlink_param_request_read_t + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Onboard parameter id + [MarshalAs(UnmanagedType.ByValArray,SizeConst=15)] + public byte[] param_id; + /// Parameter index. Send -1 to use the param ID field as identifier + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_PARAM_VALUE = 22; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=23)] + public struct mavlink_param_value_t + { + /// Onboard parameter id + [MarshalAs(UnmanagedType.ByValArray,SizeConst=15)] + public byte[] param_id; + /// Onboard parameter value + public Single param_value; + /// Total number of onboard parameters + public UInt16 param_count; + /// Index of this onboard parameter + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Onboard parameter id + [MarshalAs(UnmanagedType.ByValArray,SizeConst=15)] + public byte[] param_id; + /// Onboard parameter value + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 usec; + /// 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 fix_type; + /// Latitude in 1E7 degrees + public Int32 lat; + /// Longitude in 1E7 degrees + public Int32 lon; + /// Altitude in 1E3 meters (millimeters) + public Int32 alt; + /// GPS HDOP + public Single eph; + /// GPS VDOP + public Single epv; + /// GPS ground speed (m/s) + public Single v; + /// Compass heading in degrees, 0..360 degrees + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 usec; + /// X acceleration (mg) + public Int16 xacc; + /// Y acceleration (mg) + public Int16 yacc; + /// Z acceleration (mg) + public Int16 zacc; + /// Angular speed around X axis (millirad /sec) + public Int16 xgyro; + /// Angular speed around Y axis (millirad /sec) + public Int16 ygyro; + /// Angular speed around Z axis (millirad /sec) + public Int16 zgyro; + /// X Magnetic field (milli tesla) + public Int16 xmag; + /// Y Magnetic field (milli tesla) + public Int16 ymag; + /// Z Magnetic field (milli tesla) + 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 + { + /// Number of satellites visible + public byte satellites_visible; + /// Global satellite ID + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_prn; + /// 0: Satellite not used, 1: used for localization + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_used; + /// Elevation (0: right on top of receiver, 90: on the horizon) of satellite + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_elevation; + /// Direction of satellite, 0: 0 deg, 255: 360 deg. + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public byte[] satellite_azimuth; + /// Signal to noise ratio of satellite + [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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 usec; + /// X acceleration (raw) + public Int16 xacc; + /// Y acceleration (raw) + public Int16 yacc; + /// Z acceleration (raw) + public Int16 zacc; + /// Angular speed around X axis (raw) + public Int16 xgyro; + /// Angular speed around Y axis (raw) + public Int16 ygyro; + /// Angular speed around Z axis (raw) + public Int16 zgyro; + /// X Magnetic field (raw) + public Int16 xmag; + /// Y Magnetic field (raw) + public Int16 ymag; + /// Z Magnetic field (raw) + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 usec; + /// Absolute pressure (raw) + public Int16 press_abs; + /// Differential pressure 1 (raw) + public Int16 press_diff1; + /// Differential pressure 2 (raw) + public Int16 press_diff2; + /// Raw Temperature measurement (raw) + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 usec; + /// Absolute pressure (hectopascal) + public Single press_abs; + /// Differential pressure 1 (hectopascal) + public Single press_diff; + /// Temperature measurement (0.01 degrees celsius) + public Int16 temperature; + + }; + + + public const byte MAVLINK_MSG_ID_ATTITUDE = 30; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=32)] + public struct mavlink_attitude_t + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 usec; + /// Roll angle (rad) + public Single roll; + /// Pitch angle (rad) + public Single pitch; + /// Yaw angle (rad) + public Single yaw; + /// Roll angular speed (rad/s) + public Single rollspeed; + /// Pitch angular speed (rad/s) + public Single pitchspeed; + /// Yaw angular speed (rad/s) + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 usec; + /// X Position + public Single x; + /// Y Position + public Single y; + /// Z Position + public Single z; + /// X Speed + public Single vx; + /// Y Speed + public Single vy; + /// Z Speed + 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 + { + /// Timestamp (microseconds since unix epoch) + public UInt64 usec; + /// Latitude, in degrees + public Single lat; + /// Longitude, in degrees + public Single lon; + /// Absolute altitude, in meters + public Single alt; + /// X Speed (in Latitude direction, positive: going north) + public Single vx; + /// Y Speed (in Longitude direction, positive: going east) + public Single vy; + /// Z Speed (in Altitude direction, positive: going up) + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 usec; + /// 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 fix_type; + /// Latitude in degrees + public Single lat; + /// Longitude in degrees + public Single lon; + /// Altitude in meters + public Single alt; + /// GPS HDOP + public Single eph; + /// GPS VDOP + public Single epv; + /// GPS ground speed + public Single v; + /// Compass heading in degrees, 0..360 degrees + 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 + { + /// System mode, see MAV_MODE ENUM in mavlink/include/mavlink_types.h + public byte mode; + /// Navigation mode, see MAV_NAV_MODE ENUM + public byte nav_mode; + /// System status flag, see MAV_STATUS ENUM + public byte status; + /// Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 + public UInt16 load; + /// Battery voltage, in millivolts (1 = 1 millivolt) + public UInt16 vbat; + /// Remaining battery energy: (0%: 0, 100%: 1000) + public UInt16 battery_remaining; + /// Dropped packets (packets that were corrupted on reception on the MAV) + 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 + { + /// RC channel 1 value, in microseconds + public UInt16 chan1_raw; + /// RC channel 2 value, in microseconds + public UInt16 chan2_raw; + /// RC channel 3 value, in microseconds + public UInt16 chan3_raw; + /// RC channel 4 value, in microseconds + public UInt16 chan4_raw; + /// RC channel 5 value, in microseconds + public UInt16 chan5_raw; + /// RC channel 6 value, in microseconds + public UInt16 chan6_raw; + /// RC channel 7 value, in microseconds + public UInt16 chan7_raw; + /// RC channel 8 value, in microseconds + public UInt16 chan8_raw; + /// Receive signal strength indicator, 0: 0%, 255: 100% + 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 + { + /// RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan1_scaled; + /// RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan2_scaled; + /// RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan3_scaled; + /// RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan4_scaled; + /// RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan5_scaled; + /// RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan6_scaled; + /// RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan7_scaled; + /// RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 + public Int16 chan8_scaled; + /// Receive signal strength indicator, 0: 0%, 255: 100% + 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 + { + /// Servo output 1 value, in microseconds + public UInt16 servo1_raw; + /// Servo output 2 value, in microseconds + public UInt16 servo2_raw; + /// Servo output 3 value, in microseconds + public UInt16 servo3_raw; + /// Servo output 4 value, in microseconds + public UInt16 servo4_raw; + /// Servo output 5 value, in microseconds + public UInt16 servo5_raw; + /// Servo output 6 value, in microseconds + public UInt16 servo6_raw; + /// Servo output 7 value, in microseconds + public UInt16 servo7_raw; + /// Servo output 8 value, in microseconds + public UInt16 servo8_raw; + + }; + + + public const byte MAVLINK_MSG_ID_WAYPOINT = 39; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=36)] + public struct mavlink_waypoint_t + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Sequence + public UInt16 seq; + /// The coordinate system of the waypoint. see MAV_FRAME in mavlink_types.h + public byte frame; + /// The scheduled action for the waypoint. see MAV_COMMAND in common.xml MAVLink specs + public byte command; + /// false:0, true:1 + public byte current; + /// autocontinue to next wp + public byte autocontinue; + /// PARAM1 / For NAV command waypoints: Radius in which the waypoint is accepted as reached, in meters + public Single param1; + /// PARAM2 / For NAV command waypoints: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds + public Single param2; + /// 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 Single param3; + /// PARAM4 / For NAV and LOITER command waypoints: Yaw orientation in degrees, [0..360] 0 = NORTH + public Single param4; + /// PARAM5 / local: x position, global: latitude + public Single x; + /// PARAM6 / y position: global: longitude + public Single y; + /// PARAM7 / z position: global: altitude + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Sequence + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Sequence + 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 + { + /// Sequence + public UInt16 seq; + + }; + + + public const byte MAVLINK_MSG_ID_WAYPOINT_REQUEST_LIST = 43; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_waypoint_request_list_t + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_WAYPOINT_COUNT = 44; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=4)] + public struct mavlink_waypoint_count_t + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Number of Waypoints in the Sequence + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + + }; + + + public const byte MAVLINK_MSG_ID_WAYPOINT_REACHED = 46; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=2)] + public struct mavlink_waypoint_reached_t + { + /// Sequence + public UInt16 seq; + + }; + + + public const byte MAVLINK_MSG_ID_WAYPOINT_ACK = 47; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=3)] + public struct mavlink_waypoint_ack_t + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// 0: OK, 1: Error + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// global position * 1E7 + public Int32 latitude; + /// global position * 1E7 + public Int32 longitude; + /// global position * 1000 + 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 + { + /// Latitude (WGS84), expressed as * 1E7 + public Int32 latitude; + /// Longitude (WGS84), expressed as * 1E7 + public Int32 longitude; + /// Altitude(WGS84), expressed as * 1000 + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// x position + public Single x; + /// y position + public Single y; + /// z position + public Single z; + /// Desired yaw angle + 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 + { + /// x position + public Single x; + /// y position + public Single y; + /// z position + public Single z; + /// Desired yaw angle + 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 + { + /// Position fix: 0: lost, 2: 2D position fix, 3: 3D position fix + public byte position_fix; + /// Vision position fix: 0: lost, 1: 2D local position hold, 2: 2D global position fix, 3: 3D global position fix + public byte vision_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 gps_fix; + /// Attitude estimation health: 0: poor, 255: excellent + public byte ahrs_health; + /// 0: Attitude control disabled, 1: enabled + public byte control_att; + /// 0: X, Y position control disabled, 1: enabled + public byte control_pos_xy; + /// 0: Z position control disabled, 1: enabled + public byte control_pos_z; + /// 0: Yaw angle control disabled, 1: enabled + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// 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 byte frame; + /// x position 1 / Latitude 1 + public Single p1x; + /// y position 1 / Longitude 1 + public Single p1y; + /// z position 1 / Altitude 1 + public Single p1z; + /// x position 2 / Latitude 2 + public Single p2x; + /// y position 2 / Longitude 2 + public Single p2y; + /// z position 2 / Altitude 2 + 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 + { + /// 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 byte frame; + /// x position 1 / Latitude 1 + public Single p1x; + /// y position 1 / Longitude 1 + public Single p1y; + /// z position 1 / Altitude 1 + public Single p1z; + /// x position 2 / Latitude 2 + public Single p2x; + /// y position 2 / Longitude 2 + public Single p2y; + /// z position 2 / Altitude 2 + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Desired roll angle in radians + public Single roll; + /// Desired pitch angle in radians + public Single pitch; + /// Desired yaw angle in radians + public Single yaw; + /// Collective thrust, normalized to 0 .. 1 + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// Desired roll angular speed in rad/s + public Single roll_speed; + /// Desired pitch angular speed in rad/s + public Single pitch_speed; + /// Desired yaw angular speed in rad/s + public Single yaw_speed; + /// Collective thrust, normalized to 0 .. 1 + 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 + { + /// Timestamp in micro seconds since unix epoch + public UInt64 time_us; + /// Desired roll angle in radians + public Single roll; + /// Desired pitch angle in radians + public Single pitch; + /// Desired yaw angle in radians + public Single yaw; + /// Collective thrust, normalized to 0 .. 1 + 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 + { + /// Timestamp in micro seconds since unix epoch + public UInt64 time_us; + /// Desired roll angular speed in rad/s + public Single roll_speed; + /// Desired pitch angular speed in rad/s + public Single pitch_speed; + /// Desired yaw angular speed in rad/s + public Single yaw_speed; + /// Collective thrust, normalized to 0 .. 1 + 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 + { + /// Current desired roll in degrees + public Single nav_roll; + /// Current desired pitch in degrees + public Single nav_pitch; + /// Current desired heading in degrees + public Int16 nav_bearing; + /// Bearing to current waypoint/target in degrees + public Int16 target_bearing; + /// Distance to active waypoint in meters + public UInt16 wp_dist; + /// Current altitude error in meters + public Single alt_error; + /// Current airspeed error in meters/second + public Single aspd_error; + /// Current crosstrack error on x-y plane in meters + 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 + { + /// x position + public Single x; + /// y position + public Single y; + /// z position + public Single z; + /// yaw orientation in radians, 0 = NORTH + 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 + { + /// x position error + public Single xErr; + /// y position error + public Single yErr; + /// z position error + public Single zErr; + /// roll error (radians) + public Single rollErr; + /// pitch error (radians) + public Single pitchErr; + /// yaw error (radians) + public Single yawErr; + /// x velocity + public Single vxErr; + /// y velocity + public Single vyErr; + /// z velocity + 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 + { + /// The system setting the altitude + public byte target; + /// The new altitude in meters + public UInt32 mode; + + }; + + + public const byte MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=6)] + public struct mavlink_request_data_stream_t + { + /// The target requested to send the message stream. + public byte target_system; + /// The target requested to send the message stream. + public byte target_component; + /// The ID of the requested message type + public byte req_stream_id; + /// Update rate in Hertz + public UInt16 req_message_rate; + /// 1 to start sending, 0 to stop sending. + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 usec; + /// Roll angle (rad) + public Single roll; + /// Pitch angle (rad) + public Single pitch; + /// Yaw angle (rad) + public Single yaw; + /// Roll angular speed (rad/s) + public Single rollspeed; + /// Pitch angular speed (rad/s) + public Single pitchspeed; + /// Yaw angular speed (rad/s) + public Single yawspeed; + /// Latitude, expressed as * 1E7 + public Int32 lat; + /// Longitude, expressed as * 1E7 + public Int32 lon; + /// Altitude in meters, expressed as * 1000 (millimeters) + public Int32 alt; + /// Ground X Speed (Latitude), expressed as m/s * 100 + public Int16 vx; + /// Ground Y Speed (Longitude), expressed as m/s * 100 + public Int16 vy; + /// Ground Z Speed (Altitude), expressed as m/s * 100 + public Int16 vz; + /// X acceleration (mg) + public Int16 xacc; + /// Y acceleration (mg) + public Int16 yacc; + /// Z acceleration (mg) + 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 + { + /// Timestamp (microseconds since UNIX epoch or microseconds since system boot) + public UInt64 time_us; + /// Control output -3 .. 1 + public Single roll_ailerons; + /// Control output -1 .. 1 + public Single pitch_elevator; + /// Control output -1 .. 1 + public Single yaw_rudder; + /// Throttle 0 .. 1 + public Single throttle; + /// System mode (MAV_MODE) + public byte mode; + /// Navigation mode (MAV_NAV_MODE) + 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 + { + /// The system to be controlled + public byte target; + /// roll + public Single roll; + /// pitch + public Single pitch; + /// yaw + public Single yaw; + /// thrust + public Single thrust; + /// roll control enabled auto:0, manual:1 + public byte roll_manual; + /// pitch auto:0, manual:1 + public byte pitch_manual; + /// yaw auto:0, manual:1 + public byte yaw_manual; + /// thrust auto:0, manual:1 + 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 + { + /// System ID + public byte target_system; + /// Component ID + public byte target_component; + /// RC channel 1 value, in microseconds + public UInt16 chan1_raw; + /// RC channel 2 value, in microseconds + public UInt16 chan2_raw; + /// RC channel 3 value, in microseconds + public UInt16 chan3_raw; + /// RC channel 4 value, in microseconds + public UInt16 chan4_raw; + /// RC channel 5 value, in microseconds + public UInt16 chan5_raw; + /// RC channel 6 value, in microseconds + public UInt16 chan6_raw; + /// RC channel 7 value, in microseconds + public UInt16 chan7_raw; + /// RC channel 8 value, in microseconds + 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 + { + /// Latitude, expressed as * 1E7 + public Int32 lat; + /// Longitude, expressed as * 1E7 + public Int32 lon; + /// Altitude in meters, expressed as * 1000 (millimeters) + public Int32 alt; + /// Ground X Speed (Latitude), expressed as m/s * 100 + public Int16 vx; + /// Ground Y Speed (Longitude), expressed as m/s * 100 + public Int16 vy; + /// Ground Z Speed (Altitude), expressed as m/s * 100 + 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 + { + /// Current airspeed in m/s + public Single airspeed; + /// Current ground speed in m/s + public Single groundspeed; + /// Current heading in degrees, in compass units (0..360, 0=north) + public Int16 heading; + /// Current throttle setting in integer percent, 0 to 100 + public UInt16 throttle; + /// Current altitude (MSL), in meters + public Single alt; + /// Current climb rate in meters/second + public Single climb; + + }; + + + public const byte MAVLINK_MSG_ID_COMMAND = 75; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=20)] + public struct mavlink_command_t + { + /// System which should execute the command + public byte target_system; + /// Component which should execute the command, 0 for all components + public byte target_component; + /// Command ID, as defined by MAV_CMD enum. + public byte command; + /// 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) + public byte confirmation; + /// Parameter 1, as defined by MAV_CMD enum. + public Single param1; + /// Parameter 2, as defined by MAV_CMD enum. + public Single param2; + /// Parameter 3, as defined by MAV_CMD enum. + public Single param3; + /// Parameter 4, as defined by MAV_CMD enum. + 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 + { + /// Current airspeed in m/s + public Single command; + /// 1: Action ACCEPTED and EXECUTED, 1: Action TEMPORARY REJECTED/DENIED, 2: Action PERMANENTLY DENIED, 3: Action UNKNOWN/UNSUPPORTED, 4: Requesting CONFIRMATION + public Single result; + + }; + + + public const byte MAVLINK_MSG_ID_OPTICAL_FLOW = 100; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=18)] + public struct mavlink_optical_flow_t + { + /// Timestamp (UNIX) + public UInt64 time; + /// Sensor ID + public byte sensor_id; + /// Flow in pixels in x-sensor direction + public Int16 flow_x; + /// Flow in pixels in y-sensor direction + public Int16 flow_y; + /// Optical flow quality / confidence. 0: bad, 255: maximum quality + public byte quality; + /// Ground distance in meters + 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 + { + /// Timestamp in milliseconds since system boot + public UInt32 time; + /// Object ID + public UInt16 object_id; + /// Object type: 0: image, 1: letter, 2: ground vehicle, 3: air vehicle, 4: surface vehicle, 5: sub-surface vehicle, 6: human, 7: animal + public byte type; + /// Name of the object as defined by the detector + [MarshalAs(UnmanagedType.ByValArray,SizeConst=20)] + public string name; + /// Detection quality / confidence. 0: bad, 255: maximum confidence + public byte quality; + /// Angle of the object with respect to the body frame in NED coordinates in radians. 0: front + public Single bearing; + /// Ground distance in meters + 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 + { + /// Name + [MarshalAs(UnmanagedType.ByValArray,SizeConst=10)] + public string name; + /// Timestamp + public UInt64 usec; + /// x + public Single x; + /// y + public Single y; + /// z + 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 + { + /// Name of the debug variable + [MarshalAs(UnmanagedType.ByValArray,SizeConst=10)] + public string name; + /// Floating point value + 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 + { + /// Name of the debug variable + [MarshalAs(UnmanagedType.ByValArray,SizeConst=10)] + public string name; + /// Signed integer value + public Int32 value; + + }; + + + public const byte MAVLINK_MSG_ID_STATUSTEXT = 254; + [StructLayout(LayoutKind.Sequential,Pack=1,Size=51)] + public struct mavlink_statustext_t + { + /// Severity of status, 0 = info message, 255 = critical fault + public byte severity; + /// Status text message, without null termination character + [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 + { + /// index of debug variable + public byte ind; + /// DEBUG value + 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 e94a639932..199bcb4975 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( - ((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( - ((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 6de12700b3..76ee48fc34 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 73f5cfac07..707f84ff7c 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 3b70d39505..7d03a402f9 100644 --- a/Tools/ArdupilotMegaPlanner/Msi/installer.wxs +++ b/Tools/ArdupilotMegaPlanner/Msi/installer.wxs @@ -23,100 +23,100 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - + + + @@ -157,17 +157,17 @@ - - - + - + - - - - + + + + + + @@ -188,7 +188,7 @@ - + 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 literal 13824 zcmeI2e{hsX8OQfRnkJ-2dj(QRD|29|{PJ=^ewnF-HlZ{F8G@k|Y-Y$Mxxkg=j=8%) zsC9aEI{o2~DZ@}5rs`0wKdaL}WRxOR9BVCVwTjl!j9! z{+Vled{Akq+JoZn81TTsQ$@OzJ+Q=>6PI%TFZI4x{;V!U3>b5j&p_CmI#mjeEAUgK zG3|kIW4d?6&YjHzyJB^rHTQgMb%=r;osFyK_21C6=RNQ1TYJ3zi%wTEagoNJ2hOzq zYflWW|4OUp!*T3+Kuev_5>bu8p{_VZlukF@rgXo^JsWp2ZdU(sun>u#Qx&O%t zUT*RCV)4LH|3$#z#bS5S&i~B=Cy$*xroH_Ks-~g7?Y3Mpn`_&Y+1S>Y>Fn!Grt`VB z+f%u|L{GFe-`ADOMCZrr;%zP2%$>BAHwp70gZpcszTH|^jPi5sYw=J4 z`NW5xdf-Up`Ovw(=cznbgx1?mx1IDXSat7tX;;NMU+zXHNxDcEh6gljVrEW6)-3Y} zus>iLS!GIEQF9`d=DEs@i%74WOjlO&@untnTkG~*KG|!g4L-*jGCe&k7O6}+7h91` zC$p(eb9F$zHrby?-AoANHLcb?^FV#EkEGIFnQgh)EtzaDO9?g%${JINjpG@yg-}AY-NjJ zFl~L84U=^x@(HqRAM^C_8I%{0egc*cWP?`aU^_jjv>gM*)j9+R;V5N(2s<75J*bl+ z$P@?izvI|D89yq#!mGC|ICjVVt>P|Zj>syDQ(iWh?o1}{kDa!a1F*_ExyAKb%NM&6t4cBq&nBrDrA>B97{SZ1U85ikl9`iV)J#0D0c=_y* zc$x3V%Y%NrETMi!G+*|p-?r&a^`{fPNy*;XT)gItbMc7Zj=niMV%;k{?AnQSDklG{ zHvUD0d;Lm7cuZ@rC=7qyKFNosK)=is@Jeths5SpOa1uBTRNO_u8^IZ116Tuo7`&dL zOn|kdweb+cg2GkD;xE;nDP=u8%V(QIgN=)W$a57(zy*{bG6XEDUpFU4{ zZygQUHC6hR@D4pdwEq=_#3Qt&1?F=gV`2NkSlBc^H@nGS=BMeem9Gb>|53fSJcWEa zxE~C&Qp<*!8YQU8Ovm0vtY;LV5Y`24Yzw*dE;O)S%D*k-i#R_Oh*6D0L2Jp6z&pSn zgB{>czysh*4DYS=Xk1}E2__1GeY+N7f6~?*wx3LSWsLsx9$9< z?m{(b`L+U$3gWs#vl)5|E{AcAr8vJ)m^p2jOQs9H8{P$f3w{oM1wH{^h0-jiNcut| z-RV|W)V|q{Q430p(cG7*%r%SO_Hnw83w`{!kFzPP@~`@7;?bu6?W10}C1;(nsOQmW zRC&SEjE+*lsQM%51?vmhQ68Zn*=MW&Z1Rz7K7&NTdJ)sIQEX@KX@9k=t>%*Eq~##VpM_HR{=pAhgyr8=BUcO(R#m$xfv@P$yXa;QZ^8NCQ5frKDfs5D!QTF_i zwi)+sp!c3~%4u)=zwU1rzTedKF-;odZ54GPjVtGtPga`D)+-q0b)@wkI}g@g?1;0m z&co2rgBJMl{yQM}{{c=StT4w}OGUR5XlkeB?Jq@@7V!}$=6@qHH^&z)S+wAT>?GWS z?T>NAv|q3L17~zjZZ@qv$@;;4N>~~yi__3uPBctU_f~^tG%45&1E}ly$=~3J( 17, 17 - - 17, 17 - 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. diff --git a/Tools/ArdupilotMegaPlanner/Script.cs b/Tools/ArdupilotMegaPlanner/Script.cs index 60d5ea4fa1..9face19c31 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 0524d1cf2e..078647e4e0 100644 --- a/Tools/ArdupilotMegaPlanner/Setup/Setup.resx +++ b/Tools/ArdupilotMegaPlanner/Setup/Setup.resx @@ -117,1656 +117,15 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBoxElevons - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabRadioIn - - - 0 - - - CHK_revch3 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabRadioIn - - - 1 - - - CHK_revch4 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabRadioIn - - - 2 - - - CHK_revch2 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabRadioIn - - - 3 - - - CHK_revch1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabRadioIn - - - 4 - - - BUT_Calibrateradio - - - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabRadioIn - - - 5 - - - BAR8 - - - ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabRadioIn - - - 6 - - - BAR7 - - - ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabRadioIn - - - 7 - - - BAR6 - - - ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabRadioIn - - - 8 - - - BAR5 - - - ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabRadioIn - - - 9 - - - BARpitch - - - ArdupilotMega.VerticalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabRadioIn - - - 10 - - - BARthrottle - - - ArdupilotMega.VerticalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabRadioIn - - - 11 - - - BARyaw - - - ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabRadioIn - - - 12 - - - BARroll - - - ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabRadioIn - - - 13 - - - - 4, 22 - - - - 3, 3, 3, 3 - - - 666, 393 - - - 0 - - - Radio Input - - - tabRadioIn - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Tabs - - - 0 - - - CB_simple6 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 0 - - - CB_simple5 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 1 - - - CB_simple4 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 2 - - - CB_simple3 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 3 - - - CB_simple2 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 4 - - - CB_simple1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 5 - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 6 - - - LBL_flightmodepwm - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 7 - - - label13 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 8 - - - lbl_currentmode - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 9 - - - label12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 10 - - - label11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 11 - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 12 - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 13 - - - label8 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 14 - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 15 - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 16 - - - CMB_fmode6 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 17 - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 18 - - - CMB_fmode5 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 19 - - - label4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 20 - - - CMB_fmode4 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 21 - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 22 - - - CMB_fmode3 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 23 - - - label2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 24 - - - CMB_fmode2 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 25 - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 26 - - - CMB_fmode1 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabModes - - - 27 - - - BUT_SaveModes - - - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabModes - - - 28 - - - 4, 22 - - - 666, 393 - - - 3 - - - Modes - - - tabModes - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Tabs - - - 1 - - - BUT_MagCalibration - - - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabHardware - - - 0 - - - label27 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 1 - - - CMB_sonartype - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 2 - - - CHK_enableoptflow - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 3 - - - pictureBox2 - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 4 - - - linkLabelmagdec - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 5 - - - label100 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 6 - - - TXT_declination - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 7 - - - CHK_enableairspeed - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 8 - - - CHK_enablesonar - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 9 - - - CHK_enablecompass - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 10 - - - pictureBox4 - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 11 - - - pictureBox3 - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 12 - - - pictureBox1 - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHardware - - - 13 - - - 4, 22 - - - 3, 3, 3, 3 - - - 666, 393 - - - 1 - - - Hardware - - - tabHardware - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Tabs - - - 2 - - - groupBox4 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabBattery - - - 0 - - - label47 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabBattery - - - 1 - - - CMB_batmonsensortype - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabBattery - - - 2 - - - textBox3 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabBattery - - - 3 - - - label29 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabBattery - - - 4 - - - label30 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabBattery - - - 5 - - - TXT_battcapacity - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabBattery - - - 6 - - - CMB_batmontype - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabBattery - - - 7 - - - pictureBox5 - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabBattery - - - 8 - - - 4, 22 - - - 2, 2, 2, 2 - - - 666, 393 - - - 6 - - - Battery - - - tabBattery - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Tabs - - - 3 - - - True - - - NoControl - - - 228, 170 - - - 212, 13 - - - 11 - - - Level your plane to set default accel offsets - - - label48 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabArduplane - - - 0 - - - NoControl - - - 285, 199 - - - 75, 23 - - - 10 - - - Level - - - BUT_levelplane - - - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabArduplane - - - 1 - - - 4, 22 - - - 3, 3, 3, 3 - - - 666, 393 - - - 7 - - - ArduPlane - - - tabArduplane - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Tabs - - - 4 - - - label28 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabArducopter - - - 0 - - - label16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabArducopter - - - 1 - - - label15 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabArducopter - - - 2 - - - pictureBoxQuadX - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabArducopter - - - 3 - - - pictureBoxQuad - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabArducopter - - - 4 - - - BUT_levelac2 - - - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabArducopter - - - 5 - - - 4, 22 - - - 666, 393 - - - 2 - - - ArduCopter2 - - - tabArducopter - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Tabs - - - 5 - - - groupBox5 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 0 - - - BUT_HS4save - - - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabHeli - - - 1 - - - BUT_swash_manual - - - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabHeli - - - 2 - - - groupBox3 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 3 - - - label44 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 4 - - - label43 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 5 - - - label42 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 6 - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 7 - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 8 - - - HS4_TRIM - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 9 - - - HS3_TRIM - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 10 - - - HS2_TRIM - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 11 - - - HS1_TRIM - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 12 - - - label39 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 13 - - - label38 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 14 - - - label37 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 15 - - - label36 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 16 - - - label26 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 17 - - - PIT_MAX - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 18 - - - label25 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 19 - - - ROL_MAX - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 20 - - - label23 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 21 - - - label22 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 22 - - - HS4_REV - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 23 - - - label20 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 24 - - - label19 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 25 - - - label18 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 26 - - - SV3_POS - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 27 - - - SV2_POS - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 28 - - - SV1_POS - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 29 - - - HS3_REV - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 30 - - - HS2_REV - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 31 - - - HS1_REV - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 32 - - - label17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 33 - - - HS4 - - - ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabHeli - - - 34 - - - HS3 - - - ArdupilotMega.VerticalProgressBar2, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabHeli - - - 35 - - - Gservoloc - - - AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabHeli - - - 36 - - - 4, 22 - - - 666, 393 - - - 5 - - - AC2 Heli - - - tabHeli - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Tabs - - - 6 - - - Fill - - - 0, 0 - - - 674, 419 - - - 93 - - - Tabs - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - CHK_mixmode - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxElevons - - - 0 - - - CHK_elevonch2rev - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxElevons - - - 1 - - - CHK_elevonrev - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxElevons - - - 2 - - - CHK_elevonch1rev - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxElevons - - - 3 - - - 21, 349 - - - 409, 42 - - - 111 - - - Elevon Config - - - groupBoxElevons - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabRadioIn - - - 0 - True + NoControl + 13, 19 @@ -1896,6 +255,30 @@ 3 + + 21, 349 + + + 409, 42 + + + 111 + + + Elevon Config + + + groupBoxElevons + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabRadioIn + + + 0 + True @@ -2067,9 +450,6 @@ 6 - - 17, 17 - 446, 185 @@ -2217,6 +597,33 @@ 13 + + 4, 22 + + + 3, 3, 3, 3 + + + 666, 393 + + + 0 + + + Radio Input + + + tabRadioIn + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tabs + + + 0 + True @@ -3048,6 +1455,30 @@ 28 + + 4, 22 + + + 666, 393 + + + 3 + + + Modes + + + tabModes + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tabs + + + 1 + 405, 25 @@ -3432,150 +1863,33 @@ 13 - - label31 + + 4, 22 - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 3, 3, 3, 3 - - groupBox4 + + 666, 393 - - 0 - - - label32 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox4 - - + 1 - - label33 + + Hardware - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tabHardware - - groupBox4 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + Tabs + + 2 - - TXT_ampspervolt - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox4 - - - 3 - - - label34 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox4 - - - 4 - - - TXT_divider - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox4 - - - 5 - - - label35 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox4 - - - 6 - - - TXT_voltage - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox4 - - - 7 - - - TXT_inputvoltage - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox4 - - - 8 - - - TXT_measuredvoltage - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox4 - - - 9 - - - 31, 177 - - - 238, 131 - - - 41 - - - Calibration - - - groupBox4 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabBattery - - - 0 - True @@ -3861,6 +2175,30 @@ 9 + + 31, 177 + + + 238, 131 + + + 41 + + + Calibration + + + groupBox4 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabBattery + + + 0 + NoControl @@ -4092,6 +2430,117 @@ Then subtract 0.3v from that value and enter it in field #1 at left. 8 + + 4, 22 + + + 2, 2, 2, 2 + + + 666, 393 + + + 6 + + + Battery + + + tabBattery + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tabs + + + 3 + + + True + + + NoControl + + + 228, 170 + + + 212, 13 + + + 11 + + + Level your plane to set default accel offsets + + + label48 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabArduplane + + + 0 + + + NoControl + + + 285, 199 + + + 75, 23 + + + 10 + + + Level + + + BUT_levelplane + + + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + + + tabArduplane + + + 1 + + + 4, 22 + + + 3, 3, 3, 3 + + + 666, 393 + + + 7 + + + ArduPlane + + + tabArduplane + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tabs + + + 4 + True @@ -4264,53 +2713,29 @@ will work with hexa's etc 5 - - H1_ENABLE + + 4, 22 - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 666, 393 - - groupBox5 + + 2 - - 0 + + ArduCopter2 - - CCPM + + tabArducopter - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox5 + + Tabs - - 1 - - - 253, 6 - - - 120, 43 - - - 137 - - - Swash Type - - - groupBox5 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 0 + + 5 True @@ -4369,6 +2794,30 @@ will work with hexa's etc 1 + + 253, 6 + + + 120, 43 + + + 137 + + + Swash Type + + + groupBox5 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabHeli + + + 0 + NoControl @@ -4423,78 +2872,6 @@ will work with hexa's etc 2 - - label46 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox3 - - - 0 - - - label45 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox3 - - - 1 - - - GYR_ENABLE - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox3 - - - 2 - - - GYR_GAIN - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox3 - - - 3 - - - 433, 309 - - - 101, 63 - - - 135 - - - Gyro - - - groupBox3 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 3 - True @@ -4606,6 +2983,30 @@ will work with hexa's etc 3 + + 433, 309 + + + 101, 63 + + + 135 + + + Gyro + + + groupBox3 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabHeli + + + 3 + True @@ -4696,75 +3097,6 @@ will work with hexa's etc 6 - - label24 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - HS4_MIN - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - HS4_MAX - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - label40 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - - - 433, 181 - - - 169, 78 - - - 130 - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabHeli - - - 7 - True @@ -4879,98 +3211,26 @@ will work with hexa's etc 3 - - label41 + + 433, 181 - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 169, 78 - - groupBox1 + + 130 - - 0 + + groupBox2 - - label21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 1 - - - COL_MIN - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 2 - - - COL_MID - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 3 - - - COL_MAX - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - - BUT_0collective - - - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - groupBox1 - - - 5 - - - 293, 90 - - - 80, 209 - - - 129 - - - groupBox1 - - + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + tabHeli - - 8 + + 7 True @@ -5143,6 +3403,27 @@ will work with hexa's etc 5 + + 293, 90 + + + 80, 209 + + + 129 + + + groupBox1 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabHeli + + + 8 + 535, 279 @@ -5887,6 +4168,69 @@ will work with hexa's etc 36 + + 4, 22 + + + 666, 393 + + + 5 + + + AC2 Heli + + + tabHeli + + + System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Tabs + + + 6 + + + Fill + + + 0, 0 + + + 674, 419 + + + 93 + + + Tabs + + + System.Windows.Forms.TabControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + NoControl + + + 214, 161 + + + 195, 23 + + + 0 + + + Reset APM Hardware to Default + BUT_reset @@ -5917,33 +4261,6 @@ will work with hexa's etc System.Windows.Forms.TabPage, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - NoControl - - - 214, 161 - - - 195, 23 - - - 0 - - - Reset APM Hardware to Default - - - BUT_reset - - - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - - - tabReset - - - 0 - True 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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

0oxY%tvR_xbNVD0B5aPV|5<0$;{3c&8{_Tl(CpP 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 delta 315261 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 z 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 68.9 0 - -3 + -13.1 8.0 5.0 diff --git a/Tools/ArdupilotMegaPlanner/wix/Program.cs b/Tools/ArdupilotMegaPlanner/wix/Program.cs index c08e4452db..e66a3cda2a 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 { + /// + /// The operation completed successfully. + /// + public const int ERROR_SUCCESS = 0; + /// + /// Incorrect function. + /// + public const int ERROR_INVALID_FUNCTION = 1; + /// + /// The system cannot find the file specified. + /// + public const int ERROR_FILE_NOT_FOUND = 2; + /// + /// The system cannot find the path specified. + /// + public const int ERROR_PATH_NOT_FOUND = 3; + /// + /// The system cannot open the file. + /// + public const int ERROR_TOO_MANY_OPEN_FILES = 4; + /// + /// Access is denied. + /// + 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(""); + sw.WriteLine(""); string[] files = Directory.GetFiles(path); - sw.WriteLine(""); + no++; + sw.WriteLine(""); 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 0000000000..8e668211f7 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/wix/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +namespace wix.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // 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() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [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; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [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 0000000000..4fdb1b6aff --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/wix/Properties/Resources.resx @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ 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 0000000000..50ea81e4e8 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/wix/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +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 0000000000..049245f401 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/wix/Properties/Settings.settings @@ -0,0 +1,6 @@ + + + + + + diff --git a/Tools/ArdupilotMegaPlanner/wix/Properties/app.manifest b/Tools/ArdupilotMegaPlanner/wix/Properties/app.manifest new file mode 100644 index 0000000000..8948c3006c --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/wix/Properties/app.manifest @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/wix/wix.csproj b/Tools/ArdupilotMegaPlanner/wix/wix.csproj index e20f105243..42fbee7ca3 100644 --- a/Tools/ArdupilotMegaPlanner/wix/wix.csproj +++ b/Tools/ArdupilotMegaPlanner/wix/wix.csproj @@ -10,7 +10,7 @@ Properties wix wix - v2.0 + v3.5 512 @@ -49,6 +49,16 @@ prompt 4 + + + LocalIntranet + + + false + + + Properties\app.manifest + @@ -58,9 +68,24 @@ + + True + True + Resources.resx + + + True + True + Settings.settings + + + + SettingsSingleFileGenerator + Settings.Designer.cs + @@ -79,6 +104,12 @@ true + + + ResXFileCodeGenerator + Resources.Designer.cs + +