internal void ProcessDeviceChanged(MainV2.WM_DEVICECHANGE_enum dc) { if (DeviceChanged != null) { try { DeviceChanged(dc); } catch { } } }
public static CultureInfo GetConfigLang() { CultureInfo ci = CultureInfoEx.GetCultureInfo(MainV2.getConfig("language")); if (ci != null) { return(ci); } else { return(System.Globalization.CultureInfo.CurrentUICulture); } }
void deviceChanged(MainV2.WM_DEVICECHANGE_enum cause) { GPSDevice gpsModule = getDevice(); if ((gpsModule != null)) { if (_Available == false) { _Available = true; if (CustomMessageBox.Show("A GPS module was detected on your system. Would you like to use it to set your tracker home location?", "Tracker Home", MessageBoxButtons.YesNo) == DialogResult.Yes) { GPSPosition pos = gpsModule.GetCoordinates(); double alt = getGEAlt(pos.Lat, pos.Lng); Host.comPort.MAV.cs.TrackerLocation = new PointLatLngAlt(pos.Lat, pos.Lng, alt, "Tracker Home"); } } } else if (_Available == true) _Available = false; }
/// <summary> /// main serial reader thread /// controls /// serial reading /// link quality stats /// speech voltage - custom - alt warning - data lost /// heartbeat packet sending /// /// and can't fall out /// </summary> internal async Task SerialReader() { if (serialThread == true) return; serialThread = true; SerialThreadrunner.Reset(); int minbytes = 10; int altwarningmax = 0; bool armedstatus = false; string lastmessagehigh = ""; DateTime speechcustomtime = DateTime.Now; DateTime speechlowspeedtime = DateTime.Now; DateTime linkqualitytime = DateTime.Now; while (serialThread) { try { Thread.Sleep(1); // was 5 // update connect/disconnect button and info stats try { //UpdateConnectIcon(); } catch (Exception ex) { log.Error(ex); } // 30 seconds interval speech options if (MainV2.speechEnabled() && speechEngine != null && (DateTime.Now - speechcustomtime).TotalSeconds > 30 && (MainV2.comPort.logreadmode || comPort.BaseStream.IsOpen)) { if (MainV2.speechEngine.IsReady) { if (Settings.Instance.GetBoolean("speechcustomenabled")) { MainV2.speechEngine.SpeakAsync(ArduPilot.Common.speechConversion(comPort.MAV, "" + Settings.Instance["speechcustom"])); } speechcustomtime = DateTime.Now; } // speech for battery alerts //speechbatteryvolt float warnvolt = Settings.Instance.GetFloat("speechbatteryvolt"); float warnpercent = Settings.Instance.GetFloat("speechbatterypercent"); if (Settings.Instance.GetBoolean("speechbatteryenabled") == true && MainV2.comPort.MAV.cs.battery_voltage <= warnvolt && MainV2.comPort.MAV.cs.battery_voltage >= 5.0) { if (MainV2.speechEngine.IsReady) { MainV2.speechEngine.SpeakAsync(ArduPilot.Common.speechConversion(comPort.MAV, "" + Settings.Instance["speechbattery"])); } } else if (Settings.Instance.GetBoolean("speechbatteryenabled") == true && (MainV2.comPort.MAV.cs.battery_remaining) < warnpercent && MainV2.comPort.MAV.cs.battery_voltage >= 5.0 && MainV2.comPort.MAV.cs.battery_remaining != 0.0) { if (MainV2.speechEngine.IsReady) { MainV2.speechEngine.SpeakAsync( ArduPilot.Common.speechConversion(comPort.MAV, "" + Settings.Instance["speechbattery"])); } } } // speech for airspeed alerts if (speechEnabled() && speechEngine != null && (DateTime.Now - speechlowspeedtime).TotalSeconds > 10 && (MainV2.comPort.logreadmode || comPort.BaseStream.IsOpen)) { if (Settings.Instance.GetBoolean("speechlowspeedenabled") == true && MainV2.comPort.MAV.cs.armed) { float warngroundspeed = Settings.Instance.GetFloat("speechlowgroundspeedtrigger"); float warnairspeed = Settings.Instance.GetFloat("speechlowairspeedtrigger"); if (MainV2.comPort.MAV.cs.airspeed < warnairspeed) { if (MainV2.speechEngine.IsReady) { MainV2.speechEngine.SpeakAsync( ArduPilot.Common.speechConversion(comPort.MAV, "" + Settings.Instance["speechlowairspeed"])); speechlowspeedtime = DateTime.Now; } } else if (MainV2.comPort.MAV.cs.groundspeed < warngroundspeed) { if (MainV2.speechEngine.IsReady) { MainV2.speechEngine.SpeakAsync( ArduPilot.Common.speechConversion(comPort.MAV, "" + Settings.Instance["speechlowgroundspeed"])); speechlowspeedtime = DateTime.Now; } } else { speechlowspeedtime = DateTime.Now; } } } // speech altitude warning - message high warning if ((speechEnabled() && speechEngine != null && (MainV2.comPort.logreadmode || comPort.BaseStream.IsOpen)) { float warnalt = float.MaxValue; if (Settings.Instance.ContainsKey("speechaltheight")) { warnalt = Settings.Instance.GetFloat("speechaltheight"); } try { altwarningmax = (int)Math.Max(MainV2.comPort.MAV.cs.alt, altwarningmax); if (Settings.Instance.GetBoolean("speechaltenabled") == true && MainV2.comPort.MAV.cs.alt != 0.00 && (MainV2.comPort.MAV.cs.alt <= warnalt) && MainV2.comPort.MAV.cs.armed) { if (altwarningmax > warnalt) { if (MainV2.speechEngine.IsReady) MainV2.speechEngine.SpeakAsync( ArduPilot.Common.speechConversion(comPort.MAV, "" + Settings.Instance["speechalt"])); } } } catch { } // silent fail try { // say the latest high priority message if (MainV2.speechEngine.IsReady && lastmessagehigh != MainV2.comPort.MAV.cs.messageHigh && MainV2.comPort.MAV.cs.messageHigh != null) { if (!MainV2.comPort.MAV.cs.messageHigh.StartsWith("PX4v2 ")) { MainV2.speechEngine.SpeakAsync(MainV2.comPort.MAV.cs.messageHigh); lastmessagehigh = MainV2.comPort.MAV.cs.messageHigh; } } } catch { } } // not doing anything if (!MainV2.comPort.logreadmode && !comPort.BaseStream.IsOpen) { altwarningmax = 0; } // attenuate the link qualty over time if ((DateTime.Now - MainV2.comPort.MAV.lastvalidpacket).TotalSeconds >= 1) { if (linkqualitytime.Second != DateTime.Now.Second) { MainV2.comPort.MAV.cs.linkqualitygcs = (ushort)(MainV2.comPort.MAV.cs.linkqualitygcs * 0.8f); linkqualitytime = DateTime.Now; // force redraw if there are no other packets are being read } } // data loss warning - wait min of 10 seconds, ignore first 30 seconds of connect, repeat at 5 seconds interval if ((DateTime.Now - MainV2.comPort.MAV.lastvalidpacket).TotalSeconds > 10 && (DateTime.Now - connecttime).TotalSeconds > 30 && (DateTime.Now - nodatawarning).TotalSeconds > 5 && (MainV2.comPort.logreadmode || comPort.BaseStream.IsOpen) && MainV2.comPort.MAV.cs.armed) { if (speechEnable && speechEngine != null) { if (MainV2.speechEngine.IsReady) { MainV2.speechEngine.SpeakAsync("WARNING No Data for " + (int) (DateTime.Now - MainV2.comPort.MAV.lastvalidpacket) .TotalSeconds + " Seconds"); nodatawarning = DateTime.Now; } } } // get home point on armed status change. if (armedstatus != MainV2.comPort.MAV.cs.armed && comPort.BaseStream.IsOpen) { armedstatus = MainV2.comPort.MAV.cs.armed; // status just changed to armed if (MainV2.comPort.MAV.cs.armed == true && MainV2.comPort.MAV.apname != MAVLink.MAV_AUTOPILOT.INVALID && MainV2.comPort.MAV.aptype != MAVLink.MAV_TYPE.GIMBAL) { System.Threading.ThreadPool.QueueUserWorkItem(state => { Thread.CurrentThread.Name = "Arm State change"; try { while (comPort.giveComport == true) Thread.Sleep(100); MainV2.comPort.MAV.cs.HomeLocation = new PointLatLngAlt(MainV2.comPort.getWP(0)); } catch { // dont hang this loop } }); } if (speechEnable && speechEngine != null) { if (Settings.Instance.GetBoolean("speecharmenabled")) { string speech = armedstatus ? Settings.Instance["speecharm"] : Settings.Instance["speechdisarm"]; if (!string.IsNullOrEmpty(speech)) { MainV2.speechEngine.SpeakAsync(ArduPilot.Common.speechConversion(comPort.MAV, speech)); } } } } // send a hb every seconds from gcs to ap if (heatbeatSend.Second != DateTime.Now.Second) { MAVLink.mavlink_heartbeat_t htb = new MAVLink.mavlink_heartbeat_t() { type = (byte)MAVLink.MAV_TYPE.GCS, autopilot = (byte)MAVLink.MAV_AUTOPILOT.INVALID, mavlink_version = 3 // MAVLink.MAVLINK_VERSION }; // enumerate each link foreach (var port in Comports.ToArray()) { if (!port.BaseStream.IsOpen) continue; // poll for params at heartbeat interval - primary mav on this port only if (!port.giveComport) { try { // poll only when not armed if (!port.MAV.cs.armed) { port.getParamPoll(); port.getParamPoll(); } } catch { } } // there are 3 hb types we can send, mavlink1, mavlink2 signed and unsigned bool sentsigned = false; bool sentmavlink1 = false; bool sentmavlink2 = false; // enumerate each mav foreach (var MAV in port.MAVlist) { try { // poll for version if we dont have it - every mav every port if (!port.giveComport && !MAV.cs.armed && (DateTime.Now.Second % 20) == 0 && MAV.cs.version < new Version(0, 1)) port.getVersion(MAV.sysid, MAV.compid, false); // are we talking to a mavlink2 device if (MAV.mavlinkv2) { // is signing enabled if (MAV.signing) { // check if we have already sent if (sentsigned) continue; sentsigned = true; } else { // check if we have already sent if (sentmavlink2) continue; sentmavlink2 = true; } } else { // check if we have already sent if (sentmavlink1) continue; sentmavlink1 = true; } port.sendPacket(htb, MAV.sysid, MAV.compid); } catch (Exception ex) { log.Error(ex); // close the bad port try { port.Close(); } catch { } // refresh the screen if needed if (port == MainV2.comPort) { // refresh config window if needed } } } } heatbeatSend = DateTime.Now; } // if not connected or busy, sleep and loop if (!comPort.BaseStream.IsOpen || comPort.giveComport == true) { if (!comPort.BaseStream.IsOpen) { // check if other ports are still open foreach (var port in Comports) { if (port.BaseStream.IsOpen) { Console.WriteLine("Main comport shut, swapping to other mav"); comPort = port; break; } } } System.Threading.Thread.Sleep(100); } // read the interfaces foreach (var port in Comports.ToArray()) { if (!port.BaseStream.IsOpen) { // skip primary interface if (port == comPort) continue; // modify array and drop out Comports.Remove(port); port.Dispose(); break; } DateTime startread = DateTime.Now; // must be open, we have bytes, we are not yielding the port, // the thread is meant to be running and we only spend 1 seconds max in this read loop while (port.BaseStream.IsOpen && port.BaseStream.BytesToRead > minbytes && port.giveComport == false && serialThread && startread.AddSeconds(1) > DateTime.Now) { try { await port.readPacketAsync().ConfigureAwait(false); } catch (Exception ex) { log.Error(ex); } } // update currentstate of sysids on the port foreach (var MAV in port.MAVlist) { try { MAV.cs.UpdateCurrentSettings(null, false, port, MAV); } catch (Exception ex) { log.Error(ex); } } } } catch (Exception e) { log.Error("Serial Reader fail :" + e.ToString()); try { comPort.Close(); } catch (Exception ex) { log.Error(ex); } } } Console.WriteLine("SerialReader Done"); SerialThreadrunner.Set(); }
static MainV2() { instance = new MainV2(); }
public MainV2() { log.Info("Mainv2 ctor"); ShowAirports = true; // setup adsb Utilities.adsb.UpdatePlanePosition += adsb_UpdatePlanePosition; Form splash = Program.Splash; splash.Refresh(); Application.DoEvents(); instance = this; //disable dpi scaling if (Font.Name != "宋体") //Chinese displayed normally when scaling. But would be too small or large using this line of code. Font = new Font(Font.Name, 8.25f * 96f / CreateGraphics().DpiX, Font.Style, Font.Unit, Font.GdiCharSet, Font.GdiVerticalFont); InitializeComponent(); MyView = new MainSwitcher(this); View = MyView; AdvancedChanged += updateAdvanced; //startup console TCPConsole.Write((byte)'S'); // full screen //this.TopMost = true; //this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //this.WindowState = FormWindowState.Maximized; _connectionControl = toolStripConnectionControl.ConnectionControl; _connectionControl.CMB_baudrate.TextChanged += this.CMB_baudrate_TextChanged; _connectionControl.CMB_serialport.SelectedIndexChanged += this.CMB_serialport_SelectedIndexChanged; _connectionControl.CMB_serialport.Click += this.CMB_serialport_Click; _connectionControl.TOOL_APMFirmware.SelectedIndexChanged += this.TOOL_APMFirmware_SelectedIndexChanged; _connectionControl.ShowLinkStats += (sender, e) => ShowConnectionStatsForm(); srtm.datadirectory = Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + "srtm"; var t = Type.GetType("Mono.Runtime"); MONO = (t != null); speechEngine = new Speech(); Warnings.CustomWarning.defaultsrc = comPort.MAV.cs; Warnings.WarningEngine.Start(); // proxy loader - dll load now instead of on config form load new Transition(new TransitionType_EaseInEaseOut(2000)); //MyRenderer.currentpressed = MenuFlightData; //MainMenu.Renderer = new MyRenderer(); foreach (object obj in Enum.GetValues(typeof(Firmwares))) { _connectionControl.TOOL_APMFirmware.Items.Add(obj); } if (_connectionControl.TOOL_APMFirmware.Items.Count > 0) _connectionControl.TOOL_APMFirmware.SelectedIndex = 0; comPort.BaseStream.BaudRate = 115200; PopulateSerialportList(); if (_connectionControl.CMB_serialport.Items.Count > 0) { _connectionControl.CMB_baudrate.SelectedIndex = 8; _connectionControl.CMB_serialport.SelectedIndex = 0; } // ** Done splash.Refresh(); Application.DoEvents(); // set this before we reset it MainV2.config["NUM_tracklength"] = "200"; // create one here - but override on load MainV2.config["guid"] = Guid.NewGuid().ToString(); // load config xmlconfig(false); MissionPlanner.Utilities.Tracking.cid = new Guid(MainV2.config["guid"].ToString()); // setup guids for droneshare if (!MainV2.config.ContainsKey("plane_guid")) MainV2.config["plane_guid"] = Guid.NewGuid().ToString(); if (!MainV2.config.ContainsKey("copter_guid")) MainV2.config["copter_guid"] = Guid.NewGuid().ToString(); if (!MainV2.config.ContainsKey("rover_guid")) MainV2.config["rover_guid"] = Guid.NewGuid().ToString(); if (config.ContainsKey("language") && !string.IsNullOrEmpty((string)config["language"])) { changelanguage(CultureInfoEx.GetCultureInfo((string)config["language"])); } this.Text = splash.Text; titlebar = splash.Text; if (!MONO) // windows only { if (MainV2.config["showconsole"] != null && MainV2.config["showconsole"].ToString() == "True") { } else { int win = NativeMethods.FindWindow("ConsoleWindowClass", null); NativeMethods.ShowWindow(win, NativeMethods.SW_HIDE); // hide window } // prevent system from sleeping while mp open var previousExecutionState = NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED); } ChangeUnits(); if (config["theme"] != null) { ThemeManager.SetTheme((ThemeManager.Themes)Enum.Parse(typeof(ThemeManager.Themes), MainV2.config["theme"].ToString())); if (ThemeManager.CurrentTheme == ThemeManager.Themes.Custom) { try { ThemeManager.BGColor = Color.FromArgb(int.Parse(MainV2.config["theme_bg"].ToString())); ThemeManager.ControlBGColor = Color.FromArgb(int.Parse(MainV2.config["theme_ctlbg"].ToString())); ThemeManager.TextColor = Color.FromArgb(int.Parse(MainV2.config["theme_text"].ToString())); ThemeManager.ButBG = Color.FromArgb(int.Parse(MainV2.config["theme_butbg"].ToString())); ThemeManager.ButBorder = Color.FromArgb(int.Parse(MainV2.config["theme_butbord"].ToString())); } catch { log.Error("Bad Custom theme - reset to standard"); ThemeManager.SetTheme(ThemeManager.Themes.BurntKermit); } } if (ThemeManager.CurrentTheme == ThemeManager.Themes.HighContrast) { switchlight(new menuicons2()); } } if (MainV2.config["showairports"] != null) { MainV2.ShowAirports = bool.Parse(config["showairports"].ToString()); } // set default ShowTFR = true; // load saved if (MainV2.config["showtfr"] != null) { MainV2.ShowTFR = bool.Parse(config["showtfr"].ToString()); } if (MainV2.config["enableadsb"] != null) { MainV2.instance.EnableADSB = bool.Parse(config["enableadsb"].ToString()); } // load this before the other screens get loaded if (MainV2.config["advancedview"] != null) { MainV2.Advanced = bool.Parse(config["advancedview"].ToString()); } else { // existing user - enable advanced view if (MainV2.config.Count > 3) { config["advancedview"] = true.ToString(); MainV2.Advanced = true; } else { config["advancedview"] = false.ToString(); } } try { log.Info("Create FD"); FlightData = new GCSViews.FlightData(); log.Info("Create FP"); FlightPlanner = new GCSViews.FlightPlanner(); //Configuration = new GCSViews.ConfigurationView.Setup(); log.Info("Create SIM"); Simulation = new GCSViews.Simulation(); //Firmware = new GCSViews.Firmware(); //Terminal = new GCSViews.Terminal(); FlightData.Width = MyView.Width; FlightPlanner.Width = MyView.Width; Simulation.Width = MyView.Width; } catch (ArgumentException e) { //http://www.microsoft.com/en-us/download/details.aspx?id=16083 //System.ArgumentException: Font 'Arial' does not support style 'Regular'. log.Fatal(e); CustomMessageBox.Show(e.ToString() + "\n\n Font Issues? Please install this http://www.microsoft.com/en-us/download/details.aspx?id=16083"); //splash.Close(); //this.Close(); Application.Exit(); } catch (Exception e) { log.Fatal(e); CustomMessageBox.Show("A Major error has occured : " + e.ToString()); Application.Exit(); } if (MainV2.config["CHK_GDIPlus"] != null) GCSViews.FlightData.myhud.UseOpenGL = !bool.Parse(MainV2.config["CHK_GDIPlus"].ToString()); if (MainV2.config["CHK_hudshow"] != null) GCSViews.FlightData.myhud.hudon = bool.Parse(MainV2.config["CHK_hudshow"].ToString()); try { if (config["MainLocX"] != null && config["MainLocY"] != null) { this.StartPosition = FormStartPosition.Manual; Point startpos = new Point(int.Parse(config["MainLocX"].ToString()), int.Parse(config["MainLocY"].ToString())); this.Location = startpos; } if (config["MainMaximised"] != null) { this.WindowState = (FormWindowState)Enum.Parse(typeof(FormWindowState), config["MainMaximised"].ToString()); // dont allow minimised start state if (this.WindowState == FormWindowState.Minimized) { this.WindowState = FormWindowState.Normal; this.Location = new Point(100, 100); } } if (config["MainHeight"] != null) this.Height = int.Parse(config["MainHeight"].ToString()); if (config["MainWidth"] != null) this.Width = int.Parse(config["MainWidth"].ToString()); if (config["CMB_rateattitude"] != null) MainV2.comPort.MAV.cs.rateattitude = byte.Parse(config["CMB_rateattitude"].ToString()); if (config["CMB_rateposition"] != null) MainV2.comPort.MAV.cs.rateposition = byte.Parse(config["CMB_rateposition"].ToString()); if (config["CMB_ratestatus"] != null) MainV2.comPort.MAV.cs.ratestatus = byte.Parse(config["CMB_ratestatus"].ToString()); if (config["CMB_raterc"] != null) MainV2.comPort.MAV.cs.raterc = byte.Parse(config["CMB_raterc"].ToString()); if (config["CMB_ratesensors"] != null) MainV2.comPort.MAV.cs.ratesensors = byte.Parse(config["CMB_ratesensors"].ToString()); if (config["speechenable"] != null) MainV2.speechEnable = bool.Parse(config["speechenable"].ToString()); if (MainV2.config["analyticsoptout"] != null) MissionPlanner.Utilities.Tracking.OptOut = bool.Parse(config["analyticsoptout"].ToString()); try { if (config["TXT_homelat"] != null) MainV2.comPort.MAV.cs.HomeLocation.Lat = double.Parse(config["TXT_homelat"].ToString()); if (config["TXT_homelng"] != null) MainV2.comPort.MAV.cs.HomeLocation.Lng = double.Parse(config["TXT_homelng"].ToString()); if (config["TXT_homealt"] != null) MainV2.comPort.MAV.cs.HomeLocation.Alt = double.Parse(config["TXT_homealt"].ToString()); // remove invalid entrys if (Math.Abs(MainV2.comPort.MAV.cs.HomeLocation.Lat) > 90 || Math.Abs(MainV2.comPort.MAV.cs.HomeLocation.Lng) > 180) MainV2.comPort.MAV.cs.HomeLocation = new PointLatLngAlt(); } catch { } } catch { } if (MainV2.comPort.MAV.cs.rateattitude == 0) // initilised to 10, configured above from save { CustomMessageBox.Show("NOTE: your attitude rate is 0, the hud will not work\nChange in Configuration > Planner > Telemetry Rates"); } // log dir if (config["logdirectory"] != null) MainV2.LogDir = config["logdirectory"].ToString(); // create log dir if it doesnt exist if (!Directory.Exists(MainV2.LogDir)) Directory.CreateDirectory(MainV2.LogDir); //System.Threading.Thread.Sleep(2000); Microsoft.Win32.SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; // make sure new enough .net framework is installed if (!MONO) { Microsoft.Win32.RegistryKey installed_versions = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP"); string[] version_names = installed_versions.GetSubKeyNames(); //version names start with 'v', eg, 'v3.5' which needs to be trimmed off before conversion double Framework = Convert.ToDouble(version_names[version_names.Length - 1].Remove(0, 1), CultureInfo.InvariantCulture); int SP = Convert.ToInt32(installed_versions.OpenSubKey(version_names[version_names.Length - 1]).GetValue("SP", 0)); if (Framework < 4.0) { CustomMessageBox.Show("This program requires .NET Framework 4.0. You currently have " + Framework); } } if (Program.Logo != null) { this.Icon = Icon.FromHandle(((Bitmap)Program.Logo).GetHicon()); } if (Program.Logo != null && Program.vvvvz) { MenuDonate.Click -= this.toolStripMenuItem1_Click; MenuDonate.Text = ""; MenuDonate.Image = Program.Logo; MenuDonate.Click += MenuCustom_Click; MenuFlightData.Visible = false; MenuFlightPlanner.Visible = true; MenuConfigTune.Visible = false; MenuHelp.Visible = false; MenuInitConfig.Visible = false; MenuSimulation.Visible = false; MenuTerminal.Visible = false; } Application.DoEvents(); Comports.Add(comPort); // save config to test we have write access xmlconfig(true); }
public MainV2() { log.Info("Mainv2 ctor"); Form splash = Program.Splash; splash.Refresh(); Application.DoEvents(); instance = this; InitializeComponent(); MyView = new MainSwitcher(this); View = MyView; POIs.CollectionChanged += POIs_CollectionChanged; // full screen //this.TopMost = true; //this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //this.WindowState = FormWindowState.Maximized; _connectionControl = toolStripConnectionControl.ConnectionControl; _connectionControl.CMB_baudrate.TextChanged += this.CMB_baudrate_TextChanged; _connectionControl.CMB_serialport.SelectedIndexChanged += this.CMB_serialport_SelectedIndexChanged; _connectionControl.CMB_serialport.Enter += this.CMB_serialport_Enter; _connectionControl.CMB_serialport.Click += this.CMB_serialport_Click; _connectionControl.TOOL_APMFirmware.SelectedIndexChanged += this.TOOL_APMFirmware_SelectedIndexChanged; _connectionControl.ShowLinkStats += (sender, e) => ShowConnectionStatsForm(); srtm.datadirectory = Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + "srtm"; var t = Type.GetType("Mono.Runtime"); MONO = (t != null); speechEngine = new Speech(); // proxy loader - dll load now instead of on config form load new Transition(new TransitionType_EaseInEaseOut(2000)); //MyRenderer.currentpressed = MenuFlightData; //MainMenu.Renderer = new MyRenderer(); foreach (object obj in Enum.GetValues(typeof(Firmwares))) { _connectionControl.TOOL_APMFirmware.Items.Add(obj); } if (_connectionControl.TOOL_APMFirmware.Items.Count > 0) _connectionControl.TOOL_APMFirmware.SelectedIndex = 0; comPort.BaseStream.BaudRate = 115200; // ** Old // CMB_serialport.Items.AddRange(SerialPort.GetPortNames()); // CMB_serialport.Items.Add("TCP"); // CMB_serialport.Items.Add("UDP"); // if (CMB_serialport.Items.Count > 0) // { // CMB_baudrate.SelectedIndex = 7; // CMB_serialport.SelectedIndex = 0; // } // ** new _connectionControl.CMB_serialport.Items.Add("AUTO"); _connectionControl.CMB_serialport.Items.AddRange(SerialPort.GetPortNames()); _connectionControl.CMB_serialport.Items.Add("TCP"); _connectionControl.CMB_serialport.Items.Add("UDP"); if (_connectionControl.CMB_serialport.Items.Count > 0) { _connectionControl.CMB_baudrate.SelectedIndex = 8; _connectionControl.CMB_serialport.SelectedIndex = 0; } // ** Done splash.Refresh(); Application.DoEvents(); // set this before we reset it MainV2.config["NUM_tracklength"] = "200"; // create one here - but override on load MainV2.config["guid"] = Guid.NewGuid().ToString(); // load config xmlconfig(false); MissionPlanner.Utilities.Tracking.cid = new Guid(MainV2.config["guid"].ToString()); if (config.ContainsKey("language") && !string.IsNullOrEmpty((string)config["language"])) { changelanguage(CultureInfoEx.GetCultureInfo((string)config["language"])); } this.Text = splash.Text; if (!MONO) // windows only { if (MainV2.config["showconsole"] != null && MainV2.config["showconsole"].ToString() == "True") { } else { int win = NativeMethods.FindWindow("ConsoleWindowClass", null); NativeMethods.ShowWindow(win, NativeMethods.SW_HIDE); // hide window } } ChangeUnits(); if (config["theme"] != null) { ThemeManager.SetTheme((ThemeManager.Themes)Enum.Parse(typeof(ThemeManager.Themes), MainV2.config["theme"].ToString())); if (ThemeManager.CurrentTheme == ThemeManager.Themes.Custom) { try { ThemeManager.BGColor = Color.FromArgb(int.Parse(MainV2.config["theme_bg"].ToString())); ThemeManager.ControlBGColor = Color.FromArgb(int.Parse(MainV2.config["theme_ctlbg"].ToString())); ThemeManager.TextColor = Color.FromArgb(int.Parse(MainV2.config["theme_text"].ToString())); ThemeManager.ButBG = Color.FromArgb(int.Parse(MainV2.config["theme_butbg"].ToString())); ThemeManager.ButBorder = Color.FromArgb(int.Parse(MainV2.config["theme_butbord"].ToString())); } catch { log.Error("Bad Custom theme - reset to standard"); ThemeManager.SetTheme(ThemeManager.Themes.BurntKermit); } } } try { log.Info("Create FD"); FlightData = new GCSViews.FlightData(); log.Info("Create FP"); FlightPlanner = new GCSViews.FlightPlanner(); //Configuration = new GCSViews.ConfigurationView.Setup(); log.Info("Create SIM"); Simulation = new GCSViews.Simulation(); //Firmware = new GCSViews.Firmware(); //Terminal = new GCSViews.Terminal(); // preload log.Info("Create Python"); Python.CreateEngine(); FlightData.Width = MyView.Width; FlightPlanner.Width = MyView.Width; Simulation.Width = MyView.Width; } catch (ArgumentException e) { //http://www.microsoft.com/en-us/download/details.aspx?id=16083 //System.ArgumentException: Font 'Arial' does not support style 'Regular'. log.Fatal(e); CustomMessageBox.Show(e.ToString() + "\n\n Font Issues? Please install this http://www.microsoft.com/en-us/download/details.aspx?id=16083"); //splash.Close(); //this.Close(); Application.Exit(); } catch (Exception e) { log.Fatal(e); CustomMessageBox.Show("A Major error has occured : " + e.ToString()); Application.Exit(); } if (MainV2.config["CHK_GDIPlus"] != null) GCSViews.FlightData.myhud.UseOpenGL = !bool.Parse(MainV2.config["CHK_GDIPlus"].ToString()); try { if (config["MainLocX"] != null && config["MainLocY"] != null) { this.StartPosition = FormStartPosition.Manual; Point startpos = new Point(int.Parse(config["MainLocX"].ToString()), int.Parse(config["MainLocY"].ToString())); this.Location = startpos; } if (config["MainMaximised"] != null) { this.WindowState = (FormWindowState)Enum.Parse(typeof(FormWindowState), config["MainMaximised"].ToString()); // dont allow minimised start state if (this.WindowState == FormWindowState.Minimized) { this.WindowState = FormWindowState.Normal; this.Location = new Point(100, 100); } } if (config["MainHeight"] != null) this.Height = int.Parse(config["MainHeight"].ToString()); if (config["MainWidth"] != null) this.Width = int.Parse(config["MainWidth"].ToString()); if (config["CMB_rateattitude"] != null) MainV2.comPort.MAV.cs.rateattitude = byte.Parse(config["CMB_rateattitude"].ToString()); if (config["CMB_rateposition"] != null) MainV2.comPort.MAV.cs.rateposition = byte.Parse(config["CMB_rateposition"].ToString()); if (config["CMB_ratestatus"] != null) MainV2.comPort.MAV.cs.ratestatus = byte.Parse(config["CMB_ratestatus"].ToString()); if (config["CMB_raterc"] != null) MainV2.comPort.MAV.cs.raterc = byte.Parse(config["CMB_raterc"].ToString()); if (config["CMB_ratesensors"] != null) MainV2.comPort.MAV.cs.ratesensors = byte.Parse(config["CMB_ratesensors"].ToString()); if (config["speechenable"] != null) MainV2.speechEnable = bool.Parse(config["speechenable"].ToString()); if (MainV2.config["analyticsoptout"] != null) MissionPlanner.Utilities.Tracking.OptOut = bool.Parse(config["analyticsoptout"].ToString()); if (MainV2.config["advancedview"] != null) { MainV2.Advanced = bool.Parse(config["advancedview"].ToString()); } else { // existing user - enable advanced view if (MainV2.config.Count > 3) { config["advancedview"] = true.ToString(); MainV2.Advanced = true; } else { config["advancedview"] = false.ToString(); } } try { if (config["TXT_homelat"] != null) MainV2.comPort.MAV.cs.HomeLocation.Lat = double.Parse(config["TXT_homelat"].ToString()); if (config["TXT_homelng"] != null) MainV2.comPort.MAV.cs.HomeLocation.Lng = double.Parse(config["TXT_homelng"].ToString()); if (config["TXT_homealt"] != null) MainV2.comPort.MAV.cs.HomeLocation.Alt = double.Parse(config["TXT_homealt"].ToString()); } catch { } } catch { } if (MainV2.comPort.MAV.cs.rateattitude == 0) // initilised to 10, configured above from save { CustomMessageBox.Show("NOTE: your attitude rate is 0, the hud will not work\nChange in Configuration > Planner > Telemetry Rates"); } // log dir if (config["logdirectory"] != null) MainV2.LogDir = config["logdirectory"].ToString(); //System.Threading.Thread.Sleep(2000); // make sure new enough .net framework is installed if (!MONO) { Microsoft.Win32.RegistryKey installed_versions = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP"); string[] version_names = installed_versions.GetSubKeyNames(); //version names start with 'v', eg, 'v3.5' which needs to be trimmed off before conversion double Framework = Convert.ToDouble(version_names[version_names.Length - 1].Remove(0, 1), CultureInfo.InvariantCulture); int SP = Convert.ToInt32(installed_versions.OpenSubKey(version_names[version_names.Length - 1]).GetValue("SP", 0)); if (Framework < 4.0) { CustomMessageBox.Show("This program requires .NET Framework 4.0. You currently have " + Framework); } } if (Program.Logo != null) { this.Icon = Icon.FromHandle(((Bitmap)Program.Logo).GetHicon()); } if (Program.Logo != null && Program.vvvvz) { MenuDonate.Click -= this.toolStripMenuItem1_Click; MenuDonate.Text = ""; MenuDonate.Image = Program.Logo; MenuDonate.Click += MenuCustom_Click; MenuFlightData.Visible = false; MenuFlightPlanner.Visible = true; MenuConfigTune.Visible = false; MenuHelp.Visible = false; MenuInitConfig.Visible = false; MenuSimulation.Visible = false; MenuTerminal.Visible = false; } Application.DoEvents(); Comports.Add(comPort); // setup adsb Utilities.adsb.UpdatePlanePosition += adsb_UpdatePlanePosition; new Utilities.adsb(); //int fixmenextrelease; // if (MainV2.getConfig("fixparams") == "") { // Utilities.ParameterMetaDataParser.GetParameterInformation(); // MainV2.config["fixparams"] = 1; } }
public static void Main(string[] args) { Program.args = args; Console.WriteLine("If your error is about Microsoft.DirectX.DirectInput, please install the latest directx redist from here http://www.microsoft.com/en-us/download/details.aspx?id=35 \n\n"); Console.WriteLine("Debug under mono MONO_LOG_LEVEL=debug mono MissionPlanner.exe"); Thread = Thread.CurrentThread; System.Windows.Forms.Application.EnableVisualStyles(); XmlConfigurator.Configure(); log.Info("******************* Logging Configured *******************"); System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false); ServicePointManager.DefaultConnectionLimit = 10; System.Windows.Forms.Application.ThreadException += Application_ThreadException; AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); // fix ssl on mono ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) => { return true; }); if (args.Length > 0 && args[0] == "/update") { Utilities.Update.DoUpdate(); } // setup theme provider CustomMessageBox.ApplyTheme += MissionPlanner.Utilities.ThemeManager.ApplyThemeTo; Controls.MainSwitcher.ApplyTheme += MissionPlanner.Utilities.ThemeManager.ApplyThemeTo; MissionPlanner.Controls.InputBox.ApplyTheme += MissionPlanner.Utilities.ThemeManager.ApplyThemeTo; // setup settings provider MissionPlanner.Comms.CommsBase.Settings += CommsBase_Settings; // set the cache provider to my custom version GMap.NET.GMaps.Instance.PrimaryCache = new Maps.MyImageCache(); // add my custom map providers GMap.NET.MapProviders.GMapProviders.List.Add(Maps.WMSProvider.Instance); GMap.NET.MapProviders.GMapProviders.List.Add(Maps.Custom.Instance); GMap.NET.MapProviders.GMapProviders.List.Add(Maps.Earthbuilder.Instance); GMap.NET.MapProviders.GMapProviders.List.Add(Maps.Statkart_Topo2.Instance); GMap.NET.MapProviders.GMapProviders.List.Add(Maps.MapBox.Instance); GMap.NET.MapProviders.GMapProviders.List.Add(Maps.MapboxNoFly.Instance); // add proxy settings GMap.NET.MapProviders.GMapProvider.WebProxy = WebRequest.GetSystemWebProxy(); GMap.NET.MapProviders.GMapProvider.WebProxy.Credentials = CredentialCache.DefaultCredentials; WebRequest.DefaultWebProxy = WebRequest.GetSystemWebProxy(); WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials; string name = "Mission Planner"; if (File.Exists(Application.StartupPath + Path.DirectorySeparatorChar + "logo.txt")) name = File.ReadAllText(Application.StartupPath + Path.DirectorySeparatorChar + "logo.txt", Encoding.UTF8); if (File.Exists(Application.StartupPath + Path.DirectorySeparatorChar + "logo.png")) Logo = new Bitmap(Application.StartupPath + Path.DirectorySeparatorChar + "logo.png"); if (name == "VVVVZ") { vvvvz = true; // set pw MainV2.config["password"] = "******"; MainV2.config["password_protect"] = "True"; // prevent wizard MainV2.config["newuser"] = "******"; // invalidate update url System.Configuration.ConfigurationManager.AppSettings["UpdateLocationVersion"] = ""; } CleanupFiles(); //fontgen.dowork(); //adsb.server = "64.93.124.152"; //adsb.serverport = 31001; //adsb.serverport = 30003; //Utilities.Airports.ReadUNLOCODE(@"C:\Users\hog\Desktop\2013-2 UNLOCODE CodeListPart1.csv"); //Utilities.Airports.ReadUNLOCODE(@"C:\Users\hog\Desktop\2013-2 UNLOCODE CodeListPart2.csv"); //Utilities.Airports.ReadUNLOCODE(@"C:\Users\hog\Desktop\2013-2 UNLOCODE CodeListPart3.csv"); //Utilities.Airports.ReadPartow(@"C:\Users\hog\Desktop\GlobalAirportDatabase.txt"); /* Arduino.ArduinoSTKv2 comport = new Arduino.ArduinoSTKv2(); comport.PortName = "com8"; comport.BaudRate = 115200; comport.Open(); Arduino.Chip.Populate(); if (comport.connectAP()) { Arduino.Chip chip = comport.getChipType(); Console.WriteLine(chip); } Console.ReadLine(); return; */ /* Comms.SerialPort sp = new Comms.SerialPort(); sp.PortName = "com8"; sp.BaudRate = 115200; CurrentState cs = new CurrentState(); MAVLink mav = new MAVLink(); mav.BaseStream = sp; mav.Open(); HIL.XPlane xp = new HIL.XPlane(); xp.SetupSockets(49005, 49000, "127.0.0.1"); HIL.Hil.sitl_fdm data = new HIL.Hil.sitl_fdm(); while (true) { while (mav.BaseStream.BytesToRead > 0) mav.readPacket(); // update all stats cs.UpdateCurrentSettings(null); xp.GetFromSim(ref data); xp.GetFromAP(); // no function xp.SendToAP(data); xp.SendToSim(); MAVLink.mavlink_rc_channels_override_t rc = new MAVLink.mavlink_rc_channels_override_t(); rc.chan3_raw = 1500; mav.sendPacket(rc); } */ // return; // OSDVideo vid = new OSDVideo(); // vid.ShowDialog(); // return; // if (Debugger.IsAttached) // ThemeManager.doxamlgen(); if (File.Exists("simple.txt")) { Application.Run(new GCSViews.Simple()); return; } Splash = new MissionPlanner.Splash(); string strVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); Splash.Text = name+" " + Application.ProductVersion + " build " + strVersion; Splash.Show(); Application.DoEvents(); try { //System.Diagnostics.Process.GetCurrentProcess().PriorityClass = System.Diagnostics.ProcessPriorityClass.RealTime; Thread.CurrentThread.Name = "Base Thread"; MainV2 misplanner = new MainV2(); MissionPlanner.Wizard.Wizard a = new MissionPlanner.Wizard.Wizard(); Application.Run(misplanner); } catch (Exception ex) { log.Fatal("Fatal app exception", ex); Console.WriteLine(ex.ToString()); Console.WriteLine("\nPress any key to exit!"); Console.ReadLine(); } }
public MainV2() { log.Info("Mainv2 ctor"); SetStyle(ControlStyles.OptimizedDoubleBuffer, true); // set this before we reset it Settings.Instance["NUM_tracklength"] = "200"; // create one here - but override on load Settings.Instance["guid"] = Guid.NewGuid().ToString(); // load config LoadConfig(); // force language to be loaded L10N.GetConfigLang(); ShowAirports = true; // setup adsb Utilities.adsb.UpdatePlanePosition += adsb_UpdatePlanePosition; Form splash = Program.Splash; splash.Refresh(); Application.DoEvents(); instance = this; //disable dpi scaling if (Font.Name != "宋体") { //Chinese displayed normally when scaling. But would be too small or large using this line of code. using (var g = CreateGraphics()) { Font = new Font(Font.Name, 8.25f*96f/g.DpiX, Font.Style, Font.Unit, Font.GdiCharSet, Font.GdiVerticalFont); } } InitializeComponent(); try { if(Settings.Instance["theme"] != null) ThemeManager.SetTheme((ThemeManager.Themes)Enum.Parse(typeof(ThemeManager.Themes), Settings.Instance["theme"])); } catch { } Utilities.ThemeManager.ApplyThemeTo(this); MyView = new MainSwitcher(this); View = MyView; //startup console TCPConsole.Write((byte) 'S'); // start listener UDPVideoShim.Start(); _connectionControl = toolStripConnectionControl.ConnectionControl; _connectionControl.CMB_baudrate.TextChanged += this.CMB_baudrate_TextChanged; _connectionControl.CMB_serialport.SelectedIndexChanged += this.CMB_serialport_SelectedIndexChanged; _connectionControl.CMB_serialport.Click += this.CMB_serialport_Click; _connectionControl.cmb_sysid.Click += cmb_sysid_Click; _connectionControl.ShowLinkStats += (sender, e) => ShowConnectionStatsForm(); srtm.datadirectory = Settings.GetDataDirectory() + "srtm"; var t = Type.GetType("Mono.Runtime"); MONO = (t != null); speechEngine = new Speech(); Warnings.CustomWarning.defaultsrc = comPort.MAV.cs; Warnings.WarningEngine.Start(); // proxy loader - dll load now instead of on config form load new Transition(new TransitionType_EaseInEaseOut(2000)); foreach (object obj in Enum.GetValues(typeof (Firmwares))) { _connectionControl.TOOL_APMFirmware.Items.Add(obj); } if (_connectionControl.TOOL_APMFirmware.Items.Count > 0) _connectionControl.TOOL_APMFirmware.SelectedIndex = 0; comPort.BaseStream.BaudRate = 115200; PopulateSerialportList(); if (_connectionControl.CMB_serialport.Items.Count > 0) { _connectionControl.CMB_baudrate.SelectedIndex = 8; _connectionControl.CMB_serialport.SelectedIndex = 0; } // ** Done splash.Refresh(); Application.DoEvents(); // load last saved connection settings string temp = Settings.Instance.ComPort; if (!string.IsNullOrEmpty(temp)) { _connectionControl.CMB_serialport.SelectedIndex = _connectionControl.CMB_serialport.FindString(temp); if (_connectionControl.CMB_serialport.SelectedIndex == -1) { _connectionControl.CMB_serialport.Text = temp; // allows ports that dont exist - yet } comPort.BaseStream.PortName = temp; comPortName = temp; } string temp2 = Settings.Instance.BaudRate; if (!string.IsNullOrEmpty(temp2)) { _connectionControl.CMB_baudrate.SelectedIndex = _connectionControl.CMB_baudrate.FindString(temp2); if (_connectionControl.CMB_baudrate.SelectedIndex == -1) { _connectionControl.CMB_baudrate.Text = temp2; } } string temp3 = Settings.Instance.APMFirmware; if (!string.IsNullOrEmpty(temp3)) { _connectionControl.TOOL_APMFirmware.SelectedIndex = _connectionControl.TOOL_APMFirmware.FindStringExact(temp3); if (_connectionControl.TOOL_APMFirmware.SelectedIndex == -1) _connectionControl.TOOL_APMFirmware.SelectedIndex = 0; MainV2.comPort.MAV.cs.firmware = (MainV2.Firmwares) Enum.Parse(typeof (MainV2.Firmwares), _connectionControl.TOOL_APMFirmware.Text); } MissionPlanner.Utilities.Tracking.cid = new Guid(Settings.Instance["guid"].ToString()); // setup guids for droneshare if (!Settings.Instance.ContainsKey("plane_guid")) Settings.Instance["plane_guid"] = Guid.NewGuid().ToString(); if (!Settings.Instance.ContainsKey("copter_guid")) Settings.Instance["copter_guid"] = Guid.NewGuid().ToString(); if (!Settings.Instance.ContainsKey("rover_guid")) Settings.Instance["rover_guid"] = Guid.NewGuid().ToString(); if (Settings.Instance.ContainsKey("language") && !string.IsNullOrEmpty(Settings.Instance["language"])) { changelanguage(CultureInfoEx.GetCultureInfo(Settings.Instance["language"])); } this.Text = splash.Text; titlebar = splash.Text; if (!MONO) // windows only { if (Settings.Instance["showconsole"] != null && Settings.Instance["showconsole"].ToString() == "True") { } else { int win = NativeMethods.FindWindow("ConsoleWindowClass", null); NativeMethods.ShowWindow(win, NativeMethods.SW_HIDE); // hide window } // prevent system from sleeping while mp open var previousExecutionState = NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED); } ChangeUnits(); if (Settings.Instance["theme"] != null) { try { ThemeManager.SetTheme( (ThemeManager.Themes) Enum.Parse(typeof (ThemeManager.Themes), Settings.Instance["theme"].ToString())); } catch (Exception exception) { log.Error(exception); } if (ThemeManager.CurrentTheme == ThemeManager.Themes.Custom) { try { ThemeManager.BGColor = Color.FromArgb(int.Parse(Settings.Instance["theme_bg"].ToString())); ThemeManager.ControlBGColor = Color.FromArgb(int.Parse(Settings.Instance["theme_ctlbg"].ToString())); ThemeManager.TextColor = Color.FromArgb(int.Parse(Settings.Instance["theme_text"].ToString())); ThemeManager.ButBG = Color.FromArgb(int.Parse(Settings.Instance["theme_butbg"].ToString())); ThemeManager.ButBorder = Color.FromArgb(int.Parse(Settings.Instance["theme_butbord"].ToString())); } catch { log.Error("Bad Custom theme - reset to standard"); ThemeManager.SetTheme(ThemeManager.Themes.BurntKermit); } } if (ThemeManager.CurrentTheme == ThemeManager.Themes.HighContrast) { switchicons(new highcontrastmenuicons()); } } if (Settings.Instance["showairports"] != null) { MainV2.ShowAirports = bool.Parse(Settings.Instance["showairports"]); } // set default ShowTFR = true; // load saved if (Settings.Instance["showtfr"] != null) { MainV2.ShowTFR = Settings.Instance.GetBoolean("showtfr"); } if (Settings.Instance["enableadsb"] != null) { MainV2.instance.EnableADSB = Settings.Instance.GetBoolean("enableadsb"); } try { log.Info("Create FD"); FlightData = new GCSViews.FlightData(); log.Info("Create FP"); FlightPlanner = new GCSViews.FlightPlanner(); //Configuration = new GCSViews.ConfigurationView.Setup(); log.Info("Create SIM"); Simulation = new SITL(); //Firmware = new GCSViews.Firmware(); //Terminal = new GCSViews.Terminal(); FlightData.Width = MyView.Width; FlightPlanner.Width = MyView.Width; Simulation.Width = MyView.Width; } catch (ArgumentException e) { //http://www.microsoft.com/en-us/download/details.aspx?id=16083 //System.ArgumentException: Font 'Arial' does not support style 'Regular'. log.Fatal(e); CustomMessageBox.Show(e.ToString() + "\n\n Font Issues? Please install this http://www.microsoft.com/en-us/download/details.aspx?id=16083"); //splash.Close(); //this.Close(); Application.Exit(); } catch (Exception e) { log.Fatal(e); CustomMessageBox.Show("A Major error has occured : " + e.ToString()); Application.Exit(); } //set first instance display configuration if (DisplayConfiguration == null) { DisplayConfiguration = DisplayConfiguration.Basic(); } // load old config if (Settings.Instance["advancedview"] != null) { if (Settings.Instance.GetBoolean("advancedview") == true) { DisplayConfiguration = new DisplayView().Advanced(); } // remove old config Settings.Instance.Remove("advancedview"); } //// load this before the other screens get loaded if (Settings.Instance["displayview"] != null) { try { DisplayConfiguration = Settings.Instance.GetDisplayView("displayview"); } catch { DisplayConfiguration = DisplayConfiguration.Basic(); Settings.Instance["displayview"] = MainV2.DisplayConfiguration.ConvertToString(); } } LayoutChanged += updateLayout; LayoutChanged(null, EventArgs.Empty); if (Settings.Instance["CHK_GDIPlus"] != null) GCSViews.FlightData.myhud.UseOpenGL = !bool.Parse(Settings.Instance["CHK_GDIPlus"].ToString()); if (Settings.Instance["CHK_hudshow"] != null) GCSViews.FlightData.myhud.hudon = bool.Parse(Settings.Instance["CHK_hudshow"].ToString()); try { if (Settings.Instance["MainLocX"] != null && Settings.Instance["MainLocY"] != null) { this.StartPosition = FormStartPosition.Manual; Point startpos = new Point(Settings.Instance.GetInt32("MainLocX"), Settings.Instance.GetInt32("MainLocY")); // fix common bug which happens when user removes a monitor, the app shows up // offscreen and it is very hard to move it onscreen. Also happens with // remote desktop a lot. So this only restores position if the position // is visible. foreach (Screen s in Screen.AllScreens) { if (s.WorkingArea.Contains(startpos)) { this.Location = startpos; break; } } } if (Settings.Instance["MainMaximised"] != null) { this.WindowState = (FormWindowState) Enum.Parse(typeof (FormWindowState), Settings.Instance["MainMaximised"]); // dont allow minimised start state if (this.WindowState == FormWindowState.Minimized) { this.WindowState = FormWindowState.Normal; this.Location = new Point(100, 100); } } if (Settings.Instance["MainHeight"] != null) this.Height = Settings.Instance.GetInt32("MainHeight"); if (Settings.Instance["MainWidth"] != null) this.Width = Settings.Instance.GetInt32("MainWidth"); if (Settings.Instance["CMB_rateattitude"] != null) CurrentState.rateattitudebackup = Settings.Instance.GetByte("CMB_rateattitude"); if (Settings.Instance["CMB_rateposition"] != null) CurrentState.ratepositionbackup = Settings.Instance.GetByte("CMB_rateposition"); if (Settings.Instance["CMB_ratestatus"] != null) CurrentState.ratestatusbackup = Settings.Instance.GetByte("CMB_ratestatus"); if (Settings.Instance["CMB_raterc"] != null) CurrentState.ratercbackup = Settings.Instance.GetByte("CMB_raterc"); if (Settings.Instance["CMB_ratesensors"] != null) CurrentState.ratesensorsbackup = Settings.Instance.GetByte("CMB_ratesensors"); // make sure rates propogate MainV2.comPort.MAV.cs.ResetInternals(); if (Settings.Instance["speechenable"] != null) MainV2.speechEnable = Settings.Instance.GetBoolean("speechenable"); if (Settings.Instance["analyticsoptout"] != null) MissionPlanner.Utilities.Tracking.OptOut = Settings.Instance.GetBoolean("analyticsoptout"); try { if (Settings.Instance["TXT_homelat"] != null) MainV2.comPort.MAV.cs.HomeLocation.Lat = Settings.Instance.GetDouble("TXT_homelat"); if (Settings.Instance["TXT_homelng"] != null) MainV2.comPort.MAV.cs.HomeLocation.Lng = Settings.Instance.GetDouble("TXT_homelng"); if (Settings.Instance["TXT_homealt"] != null) MainV2.comPort.MAV.cs.HomeLocation.Alt = Settings.Instance.GetDouble("TXT_homealt"); // remove invalid entrys if (Math.Abs(MainV2.comPort.MAV.cs.HomeLocation.Lat) > 90 || Math.Abs(MainV2.comPort.MAV.cs.HomeLocation.Lng) > 180) MainV2.comPort.MAV.cs.HomeLocation = new PointLatLngAlt(); } catch { } } catch { } if (CurrentState.rateattitudebackup == 0) // initilised to 10, configured above from save { CustomMessageBox.Show( "NOTE: your attitude rate is 0, the hud will not work\nChange in Configuration > Planner > Telemetry Rates"); } // create log dir if it doesnt exist try { if (!Directory.Exists(Settings.Instance.LogDir)) Directory.CreateDirectory(Settings.Instance.LogDir); } catch (Exception ex) { log.Error(ex); } Microsoft.Win32.SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; // make sure new enough .net framework is installed if (!MONO) { Microsoft.Win32.RegistryKey installed_versions = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP"); string[] version_names = installed_versions.GetSubKeyNames(); //version names start with 'v', eg, 'v3.5' which needs to be trimmed off before conversion double Framework = Convert.ToDouble(version_names[version_names.Length - 1].Remove(0, 1), CultureInfo.InvariantCulture); int SP = Convert.ToInt32(installed_versions.OpenSubKey(version_names[version_names.Length - 1]) .GetValue("SP", 0)); if (Framework < 4.0) { CustomMessageBox.Show("This program requires .NET Framework 4.0. You currently have " + Framework); } } if (Program.IconFile != null) { this.Icon = Icon.FromHandle(((Bitmap)Program.IconFile).GetHicon()); } if (Program.Logo != null && Program.name == "VVVVZ") { MenuDonate.Click -= this.toolStripMenuItem1_Click; MenuDonate.Text = ""; MenuDonate.Image = Program.Logo; MenuDonate.Click += MenuCustom_Click; MenuFlightData.Visible = false; MenuFlightPlanner.Visible = true; MenuConfigTune.Visible = false; MenuHelp.Visible = false; MenuInitConfig.Visible = false; MenuSimulation.Visible = false; MenuTerminal.Visible = false; } else if (Program.Logo != null && Program.names.Contains(Program.name)) { MenuDonate.Click -= this.toolStripMenuItem1_Click; MenuDonate.Text = ""; MenuDonate.Image = Program.Logo; } Application.DoEvents(); Comports.Add(comPort); MainV2.comPort.MavChanged += comPort_MavChanged; // save config to test we have write access SaveConfig(); }