You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
287 lines
11 KiB
287 lines
11 KiB
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(); |
|
} |
|
} |
|
} |
|
}
|
|
|