コード例 #1
0
        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;
        }
コード例 #2
0
        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)
            {
            }
        }
コード例 #3
0
        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;
        }
コード例 #4
0
        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");
                }
            }
        }
コード例 #5
0
 /// <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);
 }
コード例 #6
0
        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;
            }
        }