public MAVState(LinkInterface LinkInterface, byte sysid, byte compid) { this.parent = LinkInterface; this.sysid = sysid; this.compid = compid; this.packetspersecond = new Dictionary <uint, double>(); this.packetspersecondbuild = new Dictionary <uint, DateTime>(); this.lastvalidpacket = DateTime.MinValue; sendlinkid = (byte)(new Random().Next(256)); //this.param = new MAVLinkParamList(); this.packets = new Dictionary <uint, MAVLinkMessage>(); this.recvpacketcount = 0; this.VersionString = ""; camerapoints.Clear(); GMapMarkerOverlapCount.Clear(); this.packetslost = 0f; this.packetsnotlost = 0f; this.packetlosttimer = DateTime.MinValue; cs.parent = this; }
private void BUT_connect_Click(object sender, EventArgs e) { var mav = new LinkInterface(); try { MainV2.instance.doConnect(mav, CMB_serialport.Text, CMB_baudrate.Text); MainV2.Comports.Add(mav); MainV2._connectionControl.UpdateSysIDS(); } catch (Exception) { } }
public void doDisconnect(LinkInterface comPort) { log.Info("We are disconnecting"); try { comPort.BaseStream.DtrEnable = false; comPort.Close(); } catch (Exception ex) { log.Error(ex); } // now that we have closed the connection, cancel the connection stats // so that the 'time connected' etc does not grow, but the user can still // look at the now frozen stats on the still open form try { System.Threading.ThreadPool.QueueUserWorkItem((WaitCallback) delegate { try { aeromagtec.Log.LogSort.SortLogs(Directory.GetFiles(Settings.Instance.LogDir, "*.tlog")); } catch { } } ); } catch { } this.MenuConnect.Image = global::aeromagtec.Properties.Resources.light_connect_icon; }
public void UpdateCurrentSettings(System.Windows.Forms.BindingSource bs, bool updatenow, LinkInterface mavinterface, MAVState MAV) { lock (this) { if (updatenow) // { lastupdate = DateTime.Now; //MainV2.comPort.UartDataParser(); //check if valid mavinterface //if (parent != null && parent.packetsnotlost != 0) //{ // if ((DateTime.Now - parent.lastvalidpacket).TotalSeconds > 10) // { // linkqualitygcs = 0; // } // else // { // linkqualitygcs = // (ushort)((parent.packetsnotlost / (parent.packetsnotlost + parent.packetslost)) * 100.0); // } // if (linkqualitygcs > 100) // linkqualitygcs = 100; //} if (datetime.Second != lastsecondcounter.Second) { lastsecondcounter = datetime; if (lastpos.Lat != 0 && lastpos.Lng != 0) { // 应该判断接口打开后初始化distTraveled=0 distTraveled += (float)lastpos.GetDistance(new PointLatLngAlt(lat, lng, 0, "")) * multiplierdist; lastpos = new PointLatLngAlt(lat, lng, 0, ""); } else { lastpos = new PointLatLngAlt(lat, lng, 0, ""); } } // re-request streams } try { if (csCallBack != null) { csCallBack(this, null); } } catch { } //Console.Write(DateTime.Now.Millisecond + " start "); // update form try { if (bs != null) { bs.DataSource = this; //bs.DataSource = dataExp.RawDataTable(); bs.ResetBindings(false); return; /* * * sw.Start(); * bs.SuspendBinding(); * bs.Clear(); * bs.ResumeBinding(); * bs.Add(this); * sw.Stop(); * elaps = sw.Elapsed; * Console.WriteLine("2 " + elaps.ToString("0.#####") + " done "); * * sw.Start(); * if (bs.Count > 100) * bs.Clear(); * bs.Add(this); * sw.Stop(); * elaps = sw.Elapsed; * Console.WriteLine("3 " + elaps.ToString("0.#####") + " done "); */ } } catch { log.InfoFormat("CurrentState Binding error"); } } }
/// <summary> /// Use the default sysid /// </summary> /// <param name="bs"></param> /// <param name="updatenow"></param> /// <param name="mavinterface"></param> public void UpdateCurrentSettings(System.Windows.Forms.BindingSource bs, bool updatenow, LinkInterface mavinterface) { UpdateCurrentSettings(bs, updatenow, mavinterface, mavinterface.MAV); }
public void doConnect(LinkInterface comPort, string portname) { bool skipconnectcheck = false; switch (portname) { case "preset": skipconnectcheck = true; break; case "TCP": comPort.BaseStream = new TcpSerial(); break; case "UDP": comPort.BaseStream = new UdpSerial(); break; case "UDPCl": comPort.BaseStream = new UdpSerialConnect(); break; case "AUTO": // do autoscan Comms.CommsSerialScan.Scan(true); DateTime deadline = DateTime.Now.AddSeconds(50); while (Comms.CommsSerialScan.foundport == false) { System.Threading.Thread.Sleep(100); if (DateTime.Now > deadline || Comms.CommsSerialScan.run == 0) { CustomMessageBox.Show(Strings.Timeout); return; } } return; default: comPort.BaseStream = new SerialPort(); break; } // Tell the connection UI that we are now connected. //_connectionControl.IsConnected(true); // Here we want to reset the connection stats counter etc. comPort.MAV.cs.ResetInternals(); //cleanup any log being played comPort.logreadmode = false; if (comPort.logplaybackfile != null) { comPort.logplaybackfile.Close(); } comPort.logplaybackfile = null; try { log.Info("Set Portname"); // set port, then options if (portname.ToLower() != "preset") { comPort.BaseStream.PortName = portname; } log.Info("Set Baudrate"); try { if (baud != "" && baud != "0") { comPort.BaseStream.BaudRate = int.Parse(baud); } } catch (Exception exp) { log.Error(exp); } // prevent serialreader from doing anything comPort.giveComport = true; log.Info("About to do dtr if needed"); // reset on connect logic. if (Settings.Instance.GetBoolean("CHK_resetapmonconnect") == true) { log.Info("set dtr rts to false"); comPort.BaseStream.DtrEnable = false; comPort.BaseStream.RtsEnable = false; comPort.BaseStream.toggleDTR(); } comPort.giveComport = false; // setup to record new logs try { Directory.CreateDirectory(Settings.Instance.LogDir); lock (this) { // create log names var dt = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss"); var tlog = Settings.Instance.LogDir + Path.DirectorySeparatorChar + dt + ".tlog"; var rlog = Settings.Instance.LogDir + Path.DirectorySeparatorChar + dt + ".rlog"; // check if this logname already exists int a = 1; while (File.Exists(tlog)) { Thread.Sleep(1000); // create new names with a as an index dt = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "-" + a.ToString(); tlog = Settings.Instance.LogDir + Path.DirectorySeparatorChar + dt + ".tlog"; rlog = Settings.Instance.LogDir + Path.DirectorySeparatorChar + dt + ".rlog"; } //open the logs for writing comPort.logfile = new BufferedStream(File.Open(tlog, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None)); comPort.rawlogfile = new BufferedStream(File.Open(rlog, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None)); log.Info("creating logfile " + dt + ".tlog"); } } catch (Exception exp2) { log.Error(exp2); CustomMessageBox.Show(Strings.Failclog); } // soft fail // reset connect time - for timeout functions connecttime = DateTime.Now; // do the connect comPort.Open(skipconnectcheck); if (!comPort.BaseStream.IsOpen) { log.Info("comport is closed. existing connect"); try { IsConnected = false; UpdateConnectIcon(); comPort.Close(); } catch { } return; } // set connected icon this.MenuConnect.Image = displayicons.disconnect; } catch (Exception ex) { log.Warn(ex); try { IsConnected = false; UpdateConnectIcon(); comPort.Close(); } catch (Exception ex2) { log.Warn(ex2); } CustomMessageBox.Show("Can not establish a connection\n\n" + ex.Message); return; } }