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; using System.Reflection; namespace ArdupilotMega.GCSViews.ConfigurationView { public partial class ConfigSignalization : UserControl, IActivate { [Flags] public enum BeeperMode : byte { Startup = 1, Arm = 2, Disarm = 4, Armed = 8, GPS = 16, Voltage = 32, CH7 = 64, Landing = 128 } public enum LedStyle : byte { None = 0, Legacy = 1, Features = 2, Disco = 3 } [Flags] public enum LedMode : byte { [Description("Motor, TODO: add description")] Motor = 1, [Description("GPS, TODO: add description")] GPS = 2, [Description("Aux, TODO: add description")] Aux = 4, [Description("Assign AN5 to LED (0) or beeper (1)")] Beeper = 8, [Description("Low battery - fast flash (0) / oscillate (1)")] Voltage = 16, [Description("Nav blink - motors")] Nav_blink_motor = 32, [Description("Nav blink - GPS")] Nav_blink_GPS = 64 } public enum LedModeX : byte { Off = 0, On = 1, Armed = 2, GPS = 3, Aux = 4, [Description("Low battery - fast flash")] Low_batt_fast = 5, [Description("Low battery - oscillate")] Low_batt_oscillate = 6, [Description("Nav blink - motors")] Nav_blink_motor = 7, [Description("Nav blink - GPS")] Nav_blink_GPS = 8 } public ConfigSignalization() { InitializeComponent(); } public void Activate() { if (MainV2.comPort.MAV.cs.firmware == MainV2.Firmwares.ArduPlane) { } else if (MainV2.comPort.MAV.cs.firmware == MainV2.Firmwares.ArduRover) { } else if (MainV2.comPort.MAV.cs.firmware == MainV2.Firmwares.ArduCopter2) { Object value; //read BEEPER_MODE try { value = MainV2.comPort.param["BEEPER_MODE"]; if (value == null) { Setup.flashMessage.FadeInOut("Reading BEEPER_MODE failed", false); } else { BeeperMode beeper_mode = (BeeperMode)System.Convert.ToSByte(value); CB_beeper_0.Checked = (beeper_mode & BeeperMode.Startup) == BeeperMode.Startup; CB_beeper_1.Checked = (beeper_mode & BeeperMode.Arm) == BeeperMode.Arm; CB_beeper_2.Checked = (beeper_mode & BeeperMode.Disarm) == BeeperMode.Disarm; CB_beeper_3.Checked = (beeper_mode & BeeperMode.Armed) == BeeperMode.Armed; CB_beeper_4.Checked = (beeper_mode & BeeperMode.GPS) == BeeperMode.GPS; CB_beeper_5.Checked = (beeper_mode & BeeperMode.Voltage) == BeeperMode.Voltage; CB_beeper_6.Checked = (beeper_mode & BeeperMode.CH7) == BeeperMode.CH7; CB_beeper_7.Checked = (beeper_mode & BeeperMode.Landing) == BeeperMode.Landing; Setup.flashMessage.FadeInOut("Reading BEEPER_MODE succeed", true); } } catch { Setup.flashMessage.FadeInOut("Reading BEEPER_MODE failed", false); } //read LED_STYLE try { value = MainV2.comPort.param["LED_STYLE"]; if (value == null) { Setup.flashMessage.FadeInOut("Reading LED_STYLE failed", false); } else { LedStyle led_style = (LedStyle)System.Convert.ToSByte(value); CMB_leds_style.DataSource = Enum.GetValues(typeof(LedStyle)); CMB_leds_style.SelectedItem = led_style; Setup.flashMessage.FadeInOut("Reading LED_STYLE succeed", true); } } catch { Setup.flashMessage.FadeInOut("Reading LED_STYLE failed", false); } CMB_led_1.DataSource = Enum.GetValues(typeof(LedMode)); //read LED_MODE try { value = MainV2.comPort.param["LED_MODE"]; if (value == null) { Setup.flashMessage.FadeInOut("Reading LED_MODE failed", false); } else { LedMode led_mode = (LedMode)System.Convert.ToSByte(value); CB_leds_legacy_1.Checked = (led_mode & LedMode.Motor) == LedMode.Motor; CB_leds_legacy_2.Checked = (led_mode & LedMode.GPS) == LedMode.GPS; CB_leds_legacy_3.Checked = (led_mode & LedMode.Aux) == LedMode.Aux; CB_leds_legacy_4.Checked = (led_mode & LedMode.Beeper) == LedMode.Beeper; CB_leds_legacy_5.Checked = (led_mode & LedMode.Voltage) == LedMode.Voltage; CB_leds_legacy_6.Checked = (led_mode & LedMode.Nav_blink_motor) == LedMode.Nav_blink_motor; CB_leds_legacy_7.Checked = (led_mode & LedMode.Nav_blink_GPS) == LedMode.Nav_blink_GPS; Setup.flashMessage.FadeInOut("Reading LED_MODE succeed", true); } } catch { Setup.flashMessage.FadeInOut("Reading LED_MODE failed", false); } } } private void B_beeper_write_Click(object sender, EventArgs e) { try { BeeperMode beeper_mode = (CB_beeper_0.Checked ? BeeperMode.Startup : 0) | (CB_beeper_1.Checked ? BeeperMode.Arm : 0) | (CB_beeper_2.Checked ? BeeperMode.Disarm : 0) | (CB_beeper_3.Checked ? BeeperMode.Armed : 0) | (CB_beeper_4.Checked ? BeeperMode.GPS : 0) | (CB_beeper_5.Checked ? BeeperMode.Voltage : 0) | (CB_beeper_6.Checked ? BeeperMode.CH7 : 0) | (CB_beeper_7.Checked ? BeeperMode.Landing : 0); if (MainV2.comPort.setParam("BEEPER_MODE", (byte)beeper_mode)) { Setup.flashMessage.FadeInOut("Writing BEEPER_MODE succeed", true); } else { Setup.flashMessage.FadeInOut("Writing BEEPER_MODE failed", false); } } catch { Setup.flashMessage.FadeInOut("Writing BEEPER_MODE failed", false); } } private void B_leds_write_Click(object sender, EventArgs e) { //write LED_STYLE try { LedStyle led_style = (LedStyle)Enum.Parse(typeof(LedStyle), CMB_leds_style.SelectedItem.ToString()); if (MainV2.comPort.setParam("LED_STYLE", (byte)led_style)) { Setup.flashMessage.FadeInOut("Writing LED_STYLE succeed", true); } else { Setup.flashMessage.FadeInOut("Writing LED_STYLE failed", false); } } catch { Setup.flashMessage.FadeInOut("Writing LED_STYLE failed", false); } //write LED_MODE try { LedMode led_mode = (CB_leds_legacy_1.Checked ? LedMode.Motor : 0) | (CB_leds_legacy_2.Checked ? LedMode.GPS : 0) | (CB_leds_legacy_3.Checked ? LedMode.Aux : 0) | (CB_leds_legacy_4.Checked ? LedMode.Beeper : 0) | (CB_leds_legacy_5.Checked ? LedMode.Voltage : 0) | (CB_leds_legacy_6.Checked ? LedMode.Nav_blink_motor : 0) | (CB_leds_legacy_7.Checked ? LedMode.Nav_blink_GPS : 0); if (MainV2.comPort.setParam("LED_MODE", (byte)led_mode)) { Setup.flashMessage.FadeInOut("Writing LED_MODE succeed", true); } else { Setup.flashMessage.FadeInOut("Writing LED_MODE failed", false); } } catch { Setup.flashMessage.FadeInOut("Writing LED_MODE failed", false); } } private void CMB_leds_style_SelectedIndexChanged(object sender, EventArgs e) { LedStyle led_style = (LedStyle)Enum.Parse(typeof(LedStyle), ((ComboBox)sender).SelectedItem.ToString()); switch (led_style) { case LedStyle.None: P_leds_mode_combo.Visible = false; P_leds_mode_legacy.Visible = false; break; case LedStyle.Legacy: P_leds_mode_combo.Visible = false; P_leds_mode_legacy.Visible = true; break; case LedStyle.Features: P_leds_mode_combo.Visible = true; P_leds_mode_legacy.Visible = false; break; case LedStyle.Disco: P_leds_mode_combo.Visible = false; P_leds_mode_legacy.Visible = false; break; } } private void CMB_Format(object sender, ListControlConvertEventArgs e) { LedMode item = (LedMode)e.ListItem; e.Value = GetEnumDescription((LedMode)item); } public static string GetEnumDescription(Enum value) { FieldInfo fi = value.GetType().GetField(value.ToString()); DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); if (attributes != null && attributes.Length > 0) { return attributes[0].Description; } else { return value.ToString(); } } } }