public ProgressReporterDialogue() { InitializeComponent(); doWorkArgs = new ProgressWorkerEventArgs(); this.btnClose.Visible = false; }
void FrmProgressReporterDoWorkNOParams(object sender, ProgressWorkerEventArgs e, object passdata = null) { OpenBg(false, e); }
private void OpenBg(bool getparams, ProgressWorkerEventArgs progressWorkerEventArgs) { frmProgressReporter.UpdateProgressAndStatus(-1, "Mavlink Connecting..."); giveComport = true; // allow settings to settle - previous dtr System.Threading.Thread.Sleep(500); // reset sysid = 0; compid = 0; param = new Hashtable(); packets.Initialize(); bool hbseen = false; try { BaseStream.ReadBufferSize = 4 * 1024; lock (objlock) // so we dont have random traffic { ////log.Info("Open port with " + BaseStream.PortName + " " + BaseStream.BaudRate); BaseStream.Open(); BaseStream.DiscardInBuffer(); Thread.Sleep(1000); } byte[] buffer = new byte[0]; byte[] buffer1 = new byte[0]; DateTime start = DateTime.Now; DateTime deadline = start.AddSeconds(CONNECT_TIMEOUT_SECONDS); var countDown = new System.Timers.Timer { Interval = 1000, AutoReset = false }; countDown.Elapsed += (sender, e) => { int secondsRemaining = (deadline - e.SignalTime).Seconds; //if (Progress != null) // Progress(-1, string.Format("Trying to connect.\nTimeout in {0}", secondsRemaining)); frmProgressReporter.UpdateProgressAndStatus(-1, string.Format("Trying to connect.\nTimeout in {0}", secondsRemaining)); if (secondsRemaining > 0) countDown.Start(); }; countDown.Start(); int count = 0; while (true) { if (progressWorkerEventArgs.CancelRequested) { progressWorkerEventArgs.CancelAcknowledged = true; countDown.Stop(); if (BaseStream.IsOpen) BaseStream.Close(); giveComport = false; return; } // incase we are in setup mode //BaseStream.WriteLine("planner\rgcs\r"); ////log.Info(DateTime.Now.Millisecond + " Start connect loop "); if (DateTime.Now > deadline) { //if (Progress != null) // Progress(-1, "No Heatbeat Packets"); countDown.Stop(); this.Close(); if (hbseen) { progressWorkerEventArgs.ErrorMessage = "Only 1 Heatbeat Received"; throw new Exception("Only 1 Mavlink Heartbeat Packets was read from this port - Verify your hardware is setup correctly\nAPM Planner waits for 2 valid heartbeat packets before connecting"); } else { progressWorkerEventArgs.ErrorMessage = "No Heatbeat Packets Received"; throw new Exception("No Mavlink Heartbeat Packets where read from this port - Verify Baud Rate and setup\nAPM Planner waits for 2 valid heartbeat packets before connecting"); } } System.Threading.Thread.Sleep(1); // incase we are in setup mode //BaseStream.WriteLine("planner\rgcs\r"); // can see 2 heartbeat packets at any time, and will connect - was one after the other if (buffer.Length == 0) buffer = getHeartBeat(); // incase we are in setup mode //BaseStream.WriteLine("planner\rgcs\r"); System.Threading.Thread.Sleep(1); if (buffer1.Length == 0) buffer1 = getHeartBeat(); if (buffer.Length > 0 || buffer1.Length > 0) hbseen = true; count++; 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); mavlinkversion = hb.mavlink_version; aptype = (MAV_TYPE)hb.type; apname = (MAV_AUTOPILOT)hb.autopilot; setAPType(); sysid = buffer[3]; compid = buffer[4]; recvpacketcount = buffer[2]; //log.InfoFormat("ID sys {0} comp {1} ver{2}", sysid, compid, mavlinkversion); break; } } countDown.Stop(); frmProgressReporter.UpdateProgressAndStatus(0, "Getting Params.. (sysid " + sysid + " compid " + compid + ") "); if (getparams) { getParamListBG(); } if (frmProgressReporter.doWorkArgs.CancelAcknowledged == true) { giveComport = false; if (BaseStream.IsOpen) BaseStream.Close(); return; } } catch (Exception e) { try { BaseStream.Close(); } catch { } giveComport = false; if (string.IsNullOrEmpty(progressWorkerEventArgs.ErrorMessage)) progressWorkerEventArgs.ErrorMessage = "Connect Failed"; //log.Error(e); throw; } //frmProgressReporter.Close(); giveComport = false; frmProgressReporter.UpdateProgressAndStatus(100, "Done."); //log.Info("Done open " + sysid + " " + compid); packetslost = 0; synclost = 0; }
void FrmProgressReporterGetParams(object sender, ProgressWorkerEventArgs e) { Hashtable old = new Hashtable(param); getParamListBG(); if (frmProgressReporter.doWorkArgs.CancelRequested) { param = old; } }