コード例 #1
0
ファイル: MainForm.cs プロジェクト: ucnl/WAYU
        public MainForm()
        {
            InitializeComponent();

            #region Early init

            string vString = string.Format("{0} v{1}", Application.ProductName, Assembly.GetExecutingAssembly().GetName().Version.ToString());
            this.Text = vString;

            #endregion

            #region paths & filenames

            DateTime startTime = DateTime.Now;
            settingsFileName = Path.ChangeExtension(Application.ExecutablePath, "settings");
            logPath          = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "LOG");
            logFileName      = StrUtils.GetTimeDirTreeFileName(startTime, Application.ExecutablePath, "LOG", "log", true);
            snapshotsPath    = StrUtils.GetTimeDirTree(startTime, Application.ExecutablePath, "SNAPSHOTS", false);
            tileDBPath       = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "Cache\\Tiles\\");

            #endregion

            #region logger

            logger = new TSLogProvider(logFileName);
            logger.WriteStart();
            logger.Write(vString);
            logger.TextAddedEvent += (o, e) => InvokeAppendHisotryLine(e.Text);

            #endregion

            #region settings

            settingsProvider = new SimpleSettingsProviderXML <SettingsContainer>();
            settingsProvider.isSwallowExceptions = false;

            logger.Write(string.Format("Loading settings from {0}", settingsFileName));

            try
            {
                settingsProvider.Load(settingsFileName);
            }
            catch (Exception ex)
            {
                ProcessException(ex, true);
            }

            logger.Write("Current application settings:");
            logger.Write(settingsProvider.Data.ToString());

            emuBtn.Visible = settingsProvider.Data.IsEmuEnabled;

            #endregion

            #region custom UI

            List <string> z_track_keys = new List <string>();

            z_track_keys.Add("ALL");
            z_track_keys.Add("WAYU (FLT)");
            z_track_keys.Add("Marked");
            z_track_keys.Add("WAYU (FLT)+Marked");

            geoPlot.InitTrack("WAYU (RAW)", 64, Color.Yellow, 1, 4, false, Color.Yellow, 1, 200);
            geoPlot.InitTrack("WAYU (FLT)", settingsProvider.Data.TrackPointsToShow, Color.Red, 1, 4, true, Color.Red, 1, 200);


            if (settingsProvider.Data.IsUseAUX1)
            {
                geoPlot.InitTrack("AUX1", 64, Color.Blue, 1, 4, true, Color.Blue, 1, 200);
                z_track_keys.Add("AUX1");
                z_track_keys.Add("WAYU (FLT)+AUX1");
                z_track_keys.Add("WAYU (FLT)+AUX1+Marked");
            }

            if (settingsProvider.Data.IsUseAUX2)
            {
                geoPlot.InitTrack("AUX2", 64, Color.Blue, 1, 4, true, Color.Violet, 1, 200);
                z_track_keys.Add("AUX2");
                z_track_keys.Add("WAYU (FLT)+AUX2");
                z_track_keys.Add("WAYU (FLT)+AUX2+Marked");
            }

            z_track_keys.Add("BASE 1");
            z_track_keys.Add("BASE 2");
            z_track_keys.Add("BASE 3");
            z_track_keys.Add("BASE 4");
            z_track_keys.Add("WAYU (FLT)+WAYU (RAW)");

            geoPlot.InitTrack("Marked", 256, Color.Black, 4, 4, false, Color.Black, 1, 200);

            geoPlot.InitTrack("BASE 1", 4, Color.DarkRed, 2, 4, false, Color.Salmon, 1, 200);
            geoPlot.InitTrack("BASE 2", 4, Color.DarkOrange, 2, 4, false, Color.Gold, 1, 200);
            geoPlot.InitTrack("BASE 3", 4, Color.Green, 2, 4, false, Color.MediumSpringGreen, 1, 200);
            geoPlot.InitTrack("BASE 4", 4, Color.Purple, 2, 4, false, Color.SkyBlue, 1, 200);


            fitTracksCbx.Items.Clear();
            fitTracksCbx.Items.AddRange(z_track_keys.ToArray());
            fitTracksCbx.SelectedIndex = 0;

            geoPlot.SetTracksVisibility(true);
            geoPlot.TextBackgroundColor = Color.FromArgb(127, Color.White);

            #endregion

            #region custom items

            tracks = new Dictionary <string, List <GeoPoint3DETm> >();

            #endregion

            #region aplCore

            Dictionary <string, SerialPortSettings> ports = new Dictionary <string, SerialPortSettings>();
            ports.Add("WAYU GIBs",
                      new SerialPortSettings(settingsProvider.Data.InPortName,
                                             settingsProvider.Data.InPortBaudrate,
                                             System.IO.Ports.Parity.None,
                                             DataBits.dataBits8,
                                             System.IO.Ports.StopBits.One,
                                             System.IO.Ports.Handshake.None));

            if (settingsProvider.Data.IsUseAUX1)
            {
                ports.Add("AUX1",
                          new SerialPortSettings(settingsProvider.Data.AUX1PortName,
                                                 settingsProvider.Data.AUX1PortBaudrate,
                                                 System.IO.Ports.Parity.None,
                                                 DataBits.dataBits8,
                                                 System.IO.Ports.StopBits.One,
                                                 System.IO.Ports.Handshake.None));
            }

            if (settingsProvider.Data.IsUseAUX2)
            {
                ports.Add("AUX2",
                          new SerialPortSettings(settingsProvider.Data.AUX2PortName,
                                                 settingsProvider.Data.AUX2PortBaudrate,
                                                 System.IO.Ports.Parity.None,
                                                 DataBits.dataBits8,
                                                 System.IO.Ports.StopBits.One,
                                                 System.IO.Ports.Handshake.None));
            }

            aplCore = new APLLBLCore(ports,
                                     settingsProvider.Data.RadialErrorThresholdM,
                                     settingsProvider.Data.InitialSimplexSizeM,
                                     settingsProvider.Data.CourseEstimatorFIFOSize,
                                     settingsProvider.Data.TrackFilterFIFOSize);

            if ((settingsProvider.Data.PrimaryGNSSAUXID == AUX_IDs.AUX1) &&
                (settingsProvider.Data.IsUseAUX1))
            {
                aplCore.SetPrimaryGNSSSource("AUX1");
            }
            else if ((settingsProvider.Data.PrimaryGNSSAUXID == AUX_IDs.AUX2) &&
                     (settingsProvider.Data.IsUseAUX2))
            {
                aplCore.SetPrimaryGNSSSource("AUX2");
            }

            if (settingsProvider.Data.IsUseOutputPort)
            {
                aplCore.InitOutputPort(
                    new SerialPortSettings(settingsProvider.Data.OutputPortName,
                                           settingsProvider.Data.OutputPortBaudrate,
                                           System.IO.Ports.Parity.None,
                                           DataBits.dataBits8,
                                           System.IO.Ports.StopBits.One,
                                           System.IO.Ports.Handshake.None));
            }

            aplCore.InfoEventHandler        += (o, e) => logger.Write(string.Format("({0}) {1}", e.EventType, e.LogString));
            aplCore.PortStateChangedHandler += (o, e) => InvokeSetStatusStripLblText(mainStatusStrip, portStatesLbl, aplCore.GetPortsStateDescription());
            aplCore.TrackUpdateHandler      += (o, e) =>
            {
                if (!tracks.ContainsKey(e.TrackID))
                {
                    tracks.Add(e.TrackID, new List <GeoPoint3DETm>());
                }
                tracks[e.TrackID].Add(e.TrackPoint);
                InvokeUpdateTracksPlot(e, true);

                if (isAutoScreenshot)
                {
                    InvokeSaveFullScreenshot();
                }

                TracksChanged = true;
            };
            aplCore.SystemUpdateHandler += (o, e) =>
            {
                if (geoPlot.InvokeRequired)
                {
                    var           sString = aplCore.GetSystemStateDescription();
                    var           tString = aplCore.GetTargetStateDescription();
                    StringBuilder sb      = new StringBuilder();
                    if (!string.IsNullOrEmpty(sString))
                    {
                        sb.AppendFormat("SYSTEM:\r\n{0}\r\n", sString);
                    }
                    if (!string.IsNullOrEmpty(tString))
                    {
                        sb.AppendFormat("TARGET:\r\n{0}", tString);
                    }

                    geoPlot.LeftUpperText = sb.ToString();
                    geoPlot.Invalidate();
                }
                else
                {
                    var           sString = aplCore.GetSystemStateDescription();
                    var           tString = aplCore.GetTargetStateDescription();
                    StringBuilder sb      = new StringBuilder();
                    if (!string.IsNullOrEmpty(sString))
                    {
                        sb.AppendFormat("SYSTEM:\r\n{0}\r\n", sString);
                    }
                    if (!string.IsNullOrEmpty(tString))
                    {
                        sb.AppendFormat("TARGET:\r\n{0}", tString);
                    }

                    geoPlot.LeftUpperText = sb.ToString();
                    geoPlot.Invalidate();
                }

                InvokeSetText(secondaryToolStrip, tbaLbl, aplCore.tbaQuality.ToString());
                InvokeSetColorMode(secondaryToolStrip, tbaLbl, tbaTextColors[aplCore.tbaQuality.Value]);

                InvokeSetText(secondaryToolStrip, hdopLbl, aplCore.dopState.ToString());
                InvokeSetColorMode(secondaryToolStrip, hdopLbl, dopTextColors[aplCore.dopState.Value]);
            };

            #endregion

            #region aplEmu

            if (settingsProvider.Data.IsEmuEnabled)
            {
                aplEmu = new APLEmulator();
                aplEmu.EmulatorOutputEvent += (o, e) =>
                {
                    aplCore.Emulate(e.Message);
                };
            }

            #endregion

            #region tProvider

            tProvider = new uOSMTileProvider(256, 19, new Size(256, 256), tileDBPath, settingsProvider.Data.TileServers);
            geoPlot.ConnectTileProvider(tProvider);

            #endregion
        }
コード例 #2
0
ファイル: MainForm.cs プロジェクト: ucnl/RWLT_Host
        public MainForm()
        {
            InitializeComponent();

            #region paths & filenames

            DateTime startTime = DateTime.Now;
            settingsFileName = Path.ChangeExtension(Application.ExecutablePath, "settings");
            logPath          = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "LOG");
            logFileName      = StrUtils.GetTimeDirTreeFileName(startTime, Application.ExecutablePath, "LOG", "log", true);
            snapshotsPath    = StrUtils.GetTimeDirTree(startTime, Application.ExecutablePath, "SNAPSHOTS", false);

            tileDBPath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "Cache\\Tiles\\");

            #endregion

            #region logger

            logger = new TSLogProvider(logFileName);
            logger.WriteStart();
            logger.Write(string.Format("{0} v{1}", Application.ProductName, Assembly.GetExecutingAssembly().GetName().Version.ToString()));
            logger.TextAddedEvent += (o, e) => InvokeAppendHisotryLine(e.Text);

            #endregion

            #region settings

            settingsProvider = new SimpleSettingsProviderXML <SettingsContainer>();
            settingsProvider.isSwallowExceptions = false;

            logger.Write(string.Format("Loading settings from {0}", settingsFileName));

            try
            {
                settingsProvider.Load(settingsFileName);
            }
            catch (Exception ex)
            {
                ProcessException(ex, true);
            }

            logger.Write("Current application settings:");
            logger.Write(settingsProvider.Data.ToString());

            #endregion

            #region core

            core = new RWLT_Core(new SerialPortSettings(settingsProvider.Data.InPortName, settingsProvider.Data.InPortBaudrate,
                                                        System.IO.Ports.Parity.None, DataBits.dataBits8, System.IO.Ports.StopBits.One, System.IO.Ports.Handshake.None),
                                 settingsProvider.Data.RadialErrorThrehsold, 10.0, settingsProvider.Data.CourseEstimatorFIFOSize, settingsProvider.Data.TrackFilterFIFOSize);

            core.Salinity = settingsProvider.Data.SalinityPSU;
            if (!settingsProvider.Data.IsSoundSpeedAuto)
            {
                core.Soundspeed = settingsProvider.Data.SoundSpeedMPS;
            }

            core.LogEvent += (o, e) => logger.Write(string.Format("{0}: {1}", e.EventType, e.LogString));

            core.SystemUpdateEvent    += new EventHandler(core_SystemUpdateEventHandler);
            core.LocationUpdatedEvent += new EventHandler <LocationUpdatedEventArgs>(core_LocationUpdatedEventHandler);

            if (settingsProvider.Data.IsUseOutPort)
            {
                core.InitOutputPort(new SerialPortSettings(settingsProvider.Data.OutPortName,
                                                           settingsProvider.Data.OutPortBaudrate,
                                                           System.IO.Ports.Parity.None,
                                                           DataBits.dataBits8,
                                                           System.IO.Ports.StopBits.One,
                                                           System.IO.Ports.Handshake.None));
            }

            if (settingsProvider.Data.IsUseAUXGNSSPort)
            {
                core.InitAUXGNSSPort(new SerialPortSettings(settingsProvider.Data.AUXGNSSPortName,
                                                            settingsProvider.Data.AUXGNSSPortBaudrate,
                                                            System.IO.Ports.Parity.None,
                                                            DataBits.dataBits8,
                                                            System.IO.Ports.StopBits.One,
                                                            System.IO.Ports.Handshake.None));
            }
            else
            {
                if (settingsProvider.Data.IsUseBuoyAsAUXGNSS && (settingsProvider.Data.AuxGNSSBuoyID != BaseIDs.BASE_INVALID))
                {
                    core.AuxGNSSBuoyID = settingsProvider.Data.AuxGNSSBuoyID;
                }
            }

            #endregion

            #region Misc. UI

            auxCrsLbl.Visible               = settingsProvider.Data.IsUseAUXGNSSPort || settingsProvider.Data.IsUseBuoyAsAUXGNSS;
            auxCapLbl.Visible               = settingsProvider.Data.IsUseAUXGNSSPort || settingsProvider.Data.IsUseBuoyAsAUXGNSS;
            auxGNSSStatusLbl.Visible        = settingsProvider.Data.IsUseAUXGNSSPort || settingsProvider.Data.IsUseBuoyAsAUXGNSS;
            auxGNSSStatusCaptionLbl.Visible = settingsProvider.Data.IsUseAUXGNSSPort || settingsProvider.Data.IsUseBuoyAsAUXGNSS;
            auxGNSSStatusCaptionLbl.Visible = settingsProvider.Data.IsUseAUXGNSSPort || settingsProvider.Data.IsUseBuoyAsAUXGNSS;
            auxGNSSStatusLbl.Visible        = settingsProvider.Data.IsUseAUXGNSSPort || settingsProvider.Data.IsUseBuoyAsAUXGNSS;

            List <string> fitTracksNames = new List <string>();
            fitTracksNames.Add("ALL");
            fitTracksNames.Add("RWLT (FLT)");
            fitTracksNames.Add("Marked");
            fitTracksNames.Add("RWLT (FLT)+Marked");
            fitTracksNames.Add("RWLT (FLT)+RWLT (RAW)");

            geoPlot.InitTrack("RWLT (RAW)", 64, Color.Yellow, 1, 4, false, Color.Yellow, 1, 200);
            geoPlot.InitTrack("RWLT (FLT)", settingsProvider.Data.TrackPointsToShow, Color.Red, 1, 4, true, Color.Red, 1, 200);

            if (settingsProvider.Data.IsUseAUXGNSSPort)
            {
                geoPlot.InitTrack("AUX GNSS", 64, Color.Blue, 1, 4, true, Color.Blue, 1, 200);
                fitTracksNames.Add("RWLT (FLT)+AUX GNSS");
                fitTracksNames.Add("RWLT (FLT)+AUX GNSS+Marked");
            }

            fitTracksNames.Add("BASE 1");
            fitTracksNames.Add("BASE 2");
            fitTracksNames.Add("BASE 3");
            fitTracksNames.Add("BASE 4");

            geoPlot.InitTrack("Marked", 256, Color.Black, 4, 4, false, Color.Black, 1, 200);

            geoPlot.InitTrack("BASE 1", 4, Color.DarkRed, 2, 4, false, Color.Salmon, 1, 200);
            geoPlot.InitTrack("BASE 2", 4, Color.DarkOrange, 2, 4, false, Color.Gold, 1, 200);
            geoPlot.InitTrack("BASE 3", 4, Color.Green, 2, 4, false, Color.MediumSpringGreen, 1, 200);
            geoPlot.InitTrack("BASE 4", 4, Color.Purple, 2, 4, false, Color.SkyBlue, 1, 200);


            TracksChanged = false;

            tracksToFitCbx.Items.Clear();
            tracksToFitCbx.Items.AddRange(fitTracksNames.ToArray());
            tracksToFitCbx.SelectedIndex = 0;

            geoPlot.SetTracksVisibility(true);

            geoPlot.TextBackgroundColor = Color.FromArgb(127, Color.White);

            #endregion

            #region emulator

            emulatorEnabled     = settingsProvider.Data.IsEmulatorButtonVisible;
            emulatorBtn.Visible = emulatorEnabled;
            if (emulatorEnabled)
            {
                emulator = new RWLT_Emulator(48 + 30 / 60.0 + 16.03 / 3600.0, 44 + 33 / 60.0 + 6.01 / 3600.0, 30, 10, 7);
                emulator.NewEmuStringEvent += (o, e) => core.Emulate(e.EmuString);
            }

            #endregion

            #region tProvider

            tProvider = new uOSMTileProvider(256, 19, new Size(256, 256), tileDBPath, settingsProvider.Data.TileServers);
            geoPlot.ConnectTileProvider(tProvider);

            #endregion
        }
コード例 #3
0
ファイル: MainForm.cs プロジェクト: ucnl/UGPSHub
        public MainForm()
        {
            InitializeComponent();

            #region paths & filenames

            DateTime startTime = DateTime.Now;
            settingsFileName = Path.ChangeExtension(Application.ExecutablePath, "settings");
            logPath          = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "LOG");
            logFileName      = StrUtils.GetTimeDirTreeFileName(startTime, Application.ExecutablePath, "LOG", "log", true);
            snapshotsPath    = StrUtils.GetTimeDirTree(startTime, Application.ExecutablePath, "SCREENSHOTS", false);
            tileDBPath       = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "Cache\\Tiles\\");

            #endregion

            #region MainForm text

            this.Text = string.Format("{0} v{1}", Application.ProductName, Assembly.GetExecutingAssembly().GetName().Version.ToString());

            #endregion

            #region logger

            logger = new TSLogProvider(logFileName);
            logger.WriteStart();
            logger.Write(string.Format("{0} v{1}", Application.ProductName, Assembly.GetExecutingAssembly().GetName().Version.ToString()));
            logger.TextAddedEvent += (o, e) => InvokeAppendHisotryLine(e.Text);

            #endregion

            #region settings

            settingsProvider = new SimpleSettingsProviderXML <SettingsContainer>();
            settingsProvider.isSwallowExceptions = false;

            logger.Write(string.Format("Loading settings from {0}", settingsFileName));

            try
            {
                settingsProvider.Load(settingsFileName);
            }
            catch (Exception ex)
            {
                ProcessException(ex, true);
            }

            logger.Write("Current application settings:");
            logger.Write(settingsProvider.Data.ToString());

            #endregion

            #region custom UI

            isScreenshotsNamesByTime = settingsProvider.Data.IsScreenshotsNamingByTime;

            List <string> trackNames = new List <string>();
            trackNames.Add("ALL");
            trackNames.Add("UNR (FLT)");
            trackNames.Add("UNR (FLT)+Marked");

            geoPlot.InitTrack("UNR (RAW)", 64, Color.Orange, 1, 4, true, Color.Yellow, 1, 200);
            geoPlot.InitTrack("UNR (FLT)", settingsProvider.Data.NumberOfPointsToShow, Color.Red, 1, 4, true, Color.Red, 1, 200);

            if (settingsProvider.Data.IsUseAUXGNSS)
            {
                geoPlot.InitTrack("AUX GNSS", 64, Color.Blue, 1, 4, true, Color.Blue, 1, 200);
                trackNames.Add("AUX GNSS");
                trackNames.Add("UNR (FLT)+AUX GNSS");
                trackNames.Add("UNR (FLT)+Marked+AUX GNSS");
            }

            geoPlot.InitTrack("Marked", 256, Color.Black, 4, 4, false, Color.Black, 1, 200);

            geoPlot.InitTrack("BASE 1", 4, Color.DarkRed, 2, 4, false, Color.Salmon, 1, 200);
            geoPlot.InitTrack("BASE 2", 4, Color.DarkOrange, 2, 4, false, Color.Gold, 1, 200);
            geoPlot.InitTrack("BASE 3", 4, Color.Green, 2, 4, false, Color.MediumSpringGreen, 1, 200);
            geoPlot.InitTrack("BASE 4", 4, Color.Purple, 2, 4, false, Color.SkyBlue, 1, 200);

            tracksToFitCbx.Items.Clear();
            tracksToFitCbx.Items.AddRange(trackNames.ToArray());
            tracksToFitCbx.SelectedIndex = 0;

            geoPlot.SetTracksVisibility(true);
            geoPlot.TextBackgroundColor = Color.FromArgb(127, Color.White);

            geoPlot.HistoryVisible = true;

            #endregion

            #region tProvider

            tProvider = new uOSMTileProvider(256, 19, new Size(256, 256), tileDBPath, settingsProvider.Data.TileServers);
            geoPlot.ConnectTileProvider(tProvider);

            #endregion

            #region core

            core = new CCore(new SerialPortSettings(settingsProvider.Data.RedNODEPortName,
                                                    settingsProvider.Data.RedNODEPortBaudrate,
                                                    System.IO.Ports.Parity.None,
                                                    DataBits.dataBits8,
                                                    System.IO.Ports.StopBits.One,
                                                    System.IO.Ports.Handshake.None),
                             settingsProvider.Data.CourseEstimatorFIFOSize,
                             settingsProvider.Data.TrackFilterFIFOSize,
                             settingsProvider.Data.MaxDistToResetTrackSmoother_m);

            core.SalinityPSU = settingsProvider.Data.Salinity_psu;

            if (!settingsProvider.Data.IsAutoSoundspeed)
            {
                core.SoundSpeed = settingsProvider.Data.SoundSpeed_mps;
            }

            core.DeviceInfoUpdatedChangedEvent += (o, e) =>
            {
                InvokeSetVisibleState(mainToolStrip, utilsDeviceInfoQueryBtn, !core.IsDeviceInfoUpdated);
                InvokeSetVisibleState(mainToolStrip, utilsDeviceInfoViewBtn, core.IsDeviceInfoUpdated);

                if (core.IsDeviceInfoUpdated)
                {
                    this.Invoke((MethodInvoker) delegate { utilsDeviceInfoViewBtn_Click(null, null); });
                }
            };

            core.LogEvent += (o, e) => logger.Write(string.Format("{0}: {1}", e.EventType, e.LogString));
            core.PortsStateChangedEvent += (o, e) =>
            {
                InvokeSetStatusStripLblText(mainStatusStrip, connectionStatusLbl, core.GetPortsStateDescription());
            };
            core.RadialErrorThresholdExceededChanged += (o, e) =>
            {
                InvokeSetVisibleState(mainStatusStrip, rerExeededFlagLbl, core.RadialErrorThrehsoldExceeded);
            };

            core.RedNODEPortBusyChanged += (o, e) =>
            {
                InvokeSetEnabledState(mainToolStrip, utilsDeviceInfoBtn, core.IsOpen && !core.RedNodePortBusy);
            };

            core.SystemUpdateEvent += (o, e) =>
            {
                StringBuilder sb = new StringBuilder();

                UPositionValid = core.UPositionValid;

                var nText = core.GetNavigationInfo();
                if (!string.IsNullOrEmpty(nText))
                {
                    sb.AppendFormat(" N̲A̲V̲I̲G̲A̲T̲I̲O̲N̲\r\n{0}\r\n", nText);
                }

                var pText = core.GetRNLocationInfo();
                if (!string.IsNullOrEmpty(pText))
                {
                    sb.AppendFormat(" U̲N̲R̲ ̲P̲O̲S̲I̲T̲I̲O̲N̲\r\n{0}\r\n", pText);
                }

                var aText = core.GetAmbInfo();
                if (!string.IsNullOrEmpty(aText))
                {
                    sb.AppendFormat("\r\n M̲I̲S̲C̲\r\n{0}", aText);
                }

                if (core.IsStatistics)
                {
                    var sText = core.GetStatistics();
                    if (!string.IsNullOrEmpty(sText))
                    {
                        sb.AppendFormat("\r\n S̲T̲A̲T̲I̲S̲T̲I̲C̲S̲\r\n{0}", sText);
                    }
                }

                InvokeSetLeftUpperCornerTextPlot(sb.ToString(), true);
                InvokeSetStatusStripLblText(secondaryStatusStrip, buoysStatusLbl, core.GetBasesDescription());
            };

            core.TrackUpdatedEvent += (o, e) =>
            {
                if (!tracks.ContainsKey(e.TrackID))
                {
                    tracks.Add(e.TrackID, new List <GeoPoint3DETm>());
                }
                tracks[e.TrackID].Add(e.TrackPoint);
                InvokeUpdateTracksPlot(e, true);

                TracksChanged = true;

                if (isAutoscreenshot)
                {
                    InvokeSaveFullScreenshot();
                }
            };

            if (settingsProvider.Data.IsUseAUXGNSS)
            {
                core.InitAuxPort(new SerialPortSettings(settingsProvider.Data.AUXGNSSPortName,
                                                        settingsProvider.Data.AUXGNSSPortBaudrate,
                                                        System.IO.Ports.Parity.None,
                                                        DataBits.dataBits8,
                                                        System.IO.Ports.StopBits.One,
                                                        System.IO.Ports.Handshake.None));
            }

            if (settingsProvider.Data.IsUseOutputPort)
            {
                core.InitOutPort(new SerialPortSettings(settingsProvider.Data.OutputPortName,
                                                        settingsProvider.Data.OutputPortBaudrate,
                                                        System.IO.Ports.Parity.None,
                                                        DataBits.dataBits8,
                                                        System.IO.Ports.StopBits.One,
                                                        System.IO.Ports.Handshake.None));
            }

            #endregion

            #region lPlayer

            lPlayer = new LogPlayer();
            lPlayer.NewLogLineHandler += (o, e) =>
            {
                core.Emulate(e.Line);
            };
            lPlayer.LogPlaybackFinishedHandler += (o, e) =>
            {
                if (InvokeRequired)
                {
                    Invoke((MethodInvoker) delegate
                    {
                        settingsBtn.Enabled   = true;
                        connectionBtn.Enabled = true;
                        logPlaybackBtn.Text   = "▶ Playback...";
                        MessageBox.Show(string.Format("Log file \"{0}\" playback is finished", lPlayer.LogFileName), "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    });
                }
                else
                {
                    settingsBtn.Enabled   = true;
                    connectionBtn.Enabled = true;
                    logPlaybackBtn.Text   = "▶ Playback...";
                    MessageBox.Show(string.Format("Log file \"{0}\" playback is finished", lPlayer.LogFileName), "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            };

            #endregion
        }
コード例 #4
0
        public MainForm()
        {
            InitializeComponent();

            #region Misc.

            this.Text = Assembly.GetExecutingAssembly().GetName().Name;

            #endregion

            #region logger

            loggerFileName         = StrUtils.GetTimeDirTreeFileName(DateTime.Now, Application.ExecutablePath, "LOG", "log", true);
            logger                 = new TSLogProvider(loggerFileName);
            logger.TextAddedEvent += (o, e) => { InvokeAppendLine(historyTxb, e.Text); };
            logger.WriteStart();

            #endregion

            #region settingsProvider

            settingsFileName = Path.ChangeExtension(Application.ExecutablePath, "settings");
            settingsProvider = new SimpleSettingsProviderXML <SettingsContainer>();
            settingsProvider.isSwallowExceptions = false;

            try
            {
                settingsProvider.Load(settingsFileName);
            }
            catch (Exception ex)
            {
                ProcessException(ex, true);
            }

            logger.Write(settingsProvider.Data.ToString());

            #endregion

            #region port

            port = new uWAVEPort(settingsProvider.Data.PortName, settingsProvider.Data.PortBaudrate);

            port.ACKReceived        += new EventHandler <ACKReceivedEventArgs>(port_ACKReceived);
            port.AMBDataReceived    += new EventHandler(port_AMBDataReceived);
            port.DeviceInfoReceived += new EventHandler(port_DeviceInfoReceived);
            port.DeviceTimeout      += new EventHandler <DeviceTimeoutEventArgs>(port_DeviceTimeout);
            port.RawDataReceived    += new EventHandler <RawDataReceivedEventArgs>(port_RawDataReceived);
            port.RCAsyncInReceived  += new EventHandler <RCAsyncInReceivedEventArgs>(port_RCAsyncInReceived);
            port.RCResponseReceived += new EventHandler <RCResponseReceivedEventArgs>(port_RCResponseReceived);
            port.RCTimeoutReceived  += new EventHandler <RCTimeoutReceivedEventArgs>(port_RCTimeoutReceived);

            port.InfoEvent += (o, e) => { logger.Write(string.Format("{0}: {1}", e.EventType, e.LogString)); };
            port.PortError += (o, e) => { logger.Write(string.Format("{0} in {1}", e.EventType.ToString(), settingsProvider.Data.PortName)); };
            port.UnknownSentenceReceived += (o, e) => { logger.Write(string.Format(" >> Unknown sentence: {0}", e.Sentence)); };

            port.PacketModeSettingsReceived += (o, e) =>
            {
                InvokeOnTransactionEnd();

                if (this.InvokeRequired)
                {
                    this.Invoke((MethodInvoker) delegate
                    {
                        isPtEnabled    = port.IsPacketMode;
                        ptLocalAddress = port.PacketMode_Address;
                    });
                }
                else
                {
                    isPtEnabled    = port.IsPacketMode;
                    ptLocalAddress = port.PacketMode_Address;
                }
            };

            port.PacketTransferFailed += (o, e) =>
            {
                var line = string.Format("Failed to deliver packet \"{0}\" to address {1}, {2} tries taken\r\n",
                                         Encoding.ASCII.GetString(e.DataPacket), e.Target_ptAddress, e.TriesTaken);

                InvokeAppendLine(ptHistoryTxb, line);

                logger.Write(line);
            };

            port.PacketTransferred += (o, e) =>
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("Delivered packet \"{0}\" to address {1}, {2} tries taken.",
                                Encoding.ASCII.GetString(e.DataPacket), e.Target_ptAddress, e.TriesTaken);

                if (!double.IsNaN(e.Azimuth))
                {
                    sb.AppendFormat(CultureInfo.InvariantCulture, " Azimuth {0:F01}°", e.Azimuth);
                }

                sb.AppendLine();

                InvokeAppendLine(ptHistoryTxb, sb.ToString());
                logger.Write(sb.ToString());
            };

            port.PacketReceived += (o, e) =>
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("Received packet \"{0}\" from address {1}",
                                Encoding.ASCII.GetString(e.DataPacket), e.Target_ptAddress);

                if (!double.IsNaN(e.Azimuth))
                {
                    sb.AppendFormat(CultureInfo.InvariantCulture, " Azimuth {0:F01}°", e.Azimuth);
                }

                sb.AppendLine();

                InvokeAppendLine(ptHistoryTxb, sb.ToString());
                logger.Write(sb.ToString());
            };

            port.PacketResponse += (o, e) =>
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("#{0} >> {1}={2:F03}", e.Target_ptAddress, e.DataId.ToString(), e.DataValue);

                if (!double.IsNaN(e.PropagationTime_s))
                {
                    sb.AppendFormat(CultureInfo.InvariantCulture, ", Prop. time={0:F05} sec.", e.PropagationTime_s);
                }

                if (!double.IsNaN(e.Azimuth))
                {
                    sb.AppendFormat(CultureInfo.InvariantCulture, ", Azimuth {0:F01}°", e.Azimuth);
                }

                sb.AppendLine();

                InvokeAppendLine(ptQueryHistoryTxb, sb.ToString());
                logger.Write(sb.ToString());
            };

            port.PacketRequestTimeout += (o, e) =>
            {
                var str = string.Format("#{0} >> Timeout caused by {1} query!\r\n", e.Target_ptAddress, e.DataId.ToString());
                InvokeAppendLine(ptQueryHistoryTxb, str);
                logger.Write(str);
            };

            port.PTCROLLDataReceived += (o, e) =>
            {
                StringBuilder sb = new StringBuilder();

                if (!double.IsNaN(port.Pitch))
                {
                    sb.AppendFormat(CultureInfo.InvariantCulture, "PITCH: {0:F01} °\r\n", port.Pitch);
                }

                if (!double.IsNaN(port.Roll))
                {
                    sb.AppendFormat(CultureInfo.InvariantCulture, "ROLL: {0:F01} °\r\n", port.Roll);
                }

                InvokeSetText(ptcRolTxb, sb.ToString());
            };

            #endregion

            #region Misc.

            isCommandModeByDefault = false;

            for (int i = 0; i < uWAVE.CR_STRONG_MAX_CODE_CHANNELS; i++)
            {
                txChIDCbx.Items.Add(i);
                rxChIDCbx.Items.Add(i);
                rcTargetTxChIDCbx.Items.Add(i);
                rcTargetRxChIDCbx.Items.Add(i);
            }

            txChannelID   = 0;
            rxChannelID   = 0;
            rcTxChannelID = 0;
            rcRxChannelID = 0;

            rcQueryIdCbx.Items.AddRange(new string[]
            {
                RC_CODES_Enum.RC_PING.ToString(),
                RC_CODES_Enum.RC_DPT_GET.ToString(),
                RC_CODES_Enum.RC_TMP_GET.ToString(),
                RC_CODES_Enum.RC_BAT_V_GET.ToString(),
                RC_CODES_Enum.RC_USR_CMD_000.ToString(),
                RC_CODES_Enum.RC_USR_CMD_001.ToString(),
                RC_CODES_Enum.RC_USR_CMD_002.ToString(),
                RC_CODES_Enum.RC_USR_CMD_003.ToString(),
                RC_CODES_Enum.RC_USR_CMD_004.ToString(),
                RC_CODES_Enum.RC_USR_CMD_005.ToString(),
                RC_CODES_Enum.RC_USR_CMD_006.ToString(),
                RC_CODES_Enum.RC_USR_CMD_007.ToString(),
                RC_CODES_Enum.RC_USR_CMD_008.ToString()
            });

            rcQueryID = RC_CODES_Enum.RC_PING;

            cmdModePnl.Enabled = false;
            rawModePnl.Enabled = false;

            rcStatistics = new RC_Statistics();
            rcStatistics.InitStatValue("DST, m", "F03");
            rcStatistics.InitStatValue("MSR, dB", "F01");
            rcStatistics.InitStatValue("BAT, V", "F01");
            rcStatistics.InitStatValue("DPT, m", "F01");
            rcStatistics.InitStatValue("TMP, °C", "F01");

            ptQueryDataIDCbx.Items.Clear();
            ptQueryDataIDCbx.Items.AddRange(new string[]
            {
                DataID.DPT.ToString(),
                DataID.TMP.ToString(),
                DataID.BAT.ToString()
            });

            ptQueryDataIDCbx.SelectedIndex = 0;

            #endregion
        }
コード例 #5
0
ファイル: MainForm.cs プロジェクト: ucnl/uWAVE_VLBL_Ino
        public MainForm()
        {
            InitializeComponent();

            #region filenames

            DateTime startTime = DateTime.Now;
            settingsFileName = Path.ChangeExtension(Application.ExecutablePath, "settings");
            loggerFileName   = StrUtils.GetTimeDirTreeFileName(startTime, Application.ExecutablePath, "LOG", "log", true);
            snapshotsPath    = StrUtils.GetTimeDirTree(startTime, Application.ExecutablePath, "SNAPSHOTS", false);

            #endregion

            #region logger

            logger = new TSLogProvider(loggerFileName);
            logger.WriteStart();
            logger.TextAddedEvent += (o, e) =>
            {
                if (geoPlotCartesian.InvokeRequired)
                {
                    geoPlotCartesian.Invoke((MethodInvoker) delegate
                    {
                        geoPlotCartesian.AppendHistoryLine(e.Text);
                        geoPlotCartesian.Invalidate();
                    });
                }
                else
                {
                    geoPlotCartesian.AppendHistoryLine(e.Text);
                    geoPlotCartesian.Invalidate();
                }
            };

            #endregion

            #region settingsProvider

            settingsProvider = new SimpeSettingsProviderXML <SettingsContainer>();
            settingsProvider.isSwallowExceptions = false;

            try
            {
                settingsProvider.Load(settingsFileName);
            }
            catch (Exception ex)
            {
                ProcessException(ex, true);
            }

            settingsProvider.isSwallowExceptions = true;

            logger.Write(settingsProvider.Data.ToString());

            #endregion

            #region NMEA

            NMEAParser.AddManufacturerToProprietarySentencesBase(ManufacturerCodes.VLB);
            NMEAParser.AddProprietarySentenceDescription(ManufacturerCodes.VLB, "L", "x.x,x.x,x.x,x.x,x,x.x,x.x,x.x");

            #endregion

            #region agingValues

            targetLatitude    = new AgingValue <double>(3, 20, (x) => string.Format(CultureInfo.InvariantCulture, "LAT: {0:F06}°", x));
            targetLongitude   = new AgingValue <double>(3, 20, (x) => string.Format(CultureInfo.InvariantCulture, "LON: {0:F06}°", x));
            targetRadialError = new AgingValue <double>(3, 300, (x) => string.Format(CultureInfo.InvariantCulture, "RER: {0:F03} m", x));
            targetTemperature = new AgingValue <double>(3, 600, (x) => string.Format(CultureInfo.InvariantCulture, "TMP: {0:F01} °C", x));
            targetDepth       = new AgingValue <double>(3, 60, (x) => string.Format(CultureInfo.InvariantCulture, "DPT: {0:F03} m", x));
            targetBatVoltage  = new AgingValue <double>(3, 300, (x) => string.Format(CultureInfo.InvariantCulture, "BAT: {0:F01} V", x));
            targetMSR         = new AgingValue <double>(3, 20, (x) => string.Format(CultureInfo.InvariantCulture, "MSR: {0:F01} dB", x));
            targetPTime       = new AgingValue <double>(3, 20, (x) => string.Format(CultureInfo.InvariantCulture, "TIM: {0:F04} sec", x));

            ownLatitude       = new AgingValue <double>(3, 20, (x) => string.Format(CultureInfo.InvariantCulture, "LAT: {0:F06}°", x));
            ownLongitude      = new AgingValue <double>(3, 20, (x) => string.Format(CultureInfo.InvariantCulture, "LON: {0:F06}°", x));
            ownDepth          = new AgingValue <double>(3, 20, (x) => string.Format(CultureInfo.InvariantCulture, "DPT: {0:F03} m", x));
            ownBatteryVoltage = new AgingValue <double>(3, 20, (x) => string.Format(CultureInfo.InvariantCulture, "BAT: {0:F01} V", x));

            #endregion

            #region geoPlotCartesian

            geoPlotCartesian.AddTrack("Rover", Color.Gray, 2, 2, settingsProvider.Data.MeasurementsFIFOSize, true);
            geoPlotCartesian.AddTrack("Measurements", Color.Blue, 2, 2, settingsProvider.Data.MeasurementsFIFOSize, true);
            geoPlotCartesian.AddTrack("Reference point", Color.Magenta, 4, 4, 1, false);
            geoPlotCartesian.AddTrack("Base", Color.Green, 4, 4, settingsProvider.Data.BaseSize, false);
            geoPlotCartesian.AddTrack("Target", Color.Red, 6, 6, settingsProvider.Data.TargetLocationFIFOSize, true);

            #endregion

            #region vlblCore

            vlblCore = new VLBLCore <VLBLTOAMeasurement>(settingsProvider.Data.MeasurementsFIFOSize,
                                                         settingsProvider.Data.BaseSize,
                                                         settingsProvider.Data.RadialErrorThreshold,
                                                         settingsProvider.Data.SimplexSize,
                                                         UCNLNav.Algorithms.WGS84Ellipsoid);

            vlblCore.BaseUpdatedEventHandler           += (o, e) => { UpdateTrack("Base", e.BasePoints); };
            vlblCore.ReferencePointUpdatedEventHandler += (o, e) => { UpdateTrack("Reference point", vlblCore.ReferencePoint); };

            vlblCore.TargetPositionUpdatedEventHandler += (o, e) =>
            {
                UpdateTrack("Target", e.TargetPosition);

                if (InvokeRequired)
                {
                    Invoke((MethodInvoker) delegate
                    {
                        targetLatitude.Value    = e.TargetPosition.Latitude;
                        targetLongitude.Value   = e.TargetPosition.Longitude;
                        targetRadialError.Value = e.RadialError;
                    });
                }
                else
                {
                    targetLatitude.Value    = e.TargetPosition.Latitude;
                    targetLongitude.Value   = e.TargetPosition.Longitude;
                    targetRadialError.Value = e.RadialError;
                }
            };

            #endregion

            #region tracks

            tracks = new Dictionary <string, List <GeoPoint3D> >();

            #endregion

            #region InPort

            inPort = new NMEASerialPort(new SerialPortSettings(settingsProvider.Data.InPortName, settingsProvider.Data.InPortBaudrate,
                                                               System.IO.Ports.Parity.None,
                                                               DataBits.dataBits8,
                                                               System.IO.Ports.StopBits.One,
                                                               System.IO.Ports.Handshake.None));

            inPort.NewNMEAMessage += new EventHandler <NewNMEAMessageEventArgs>(inPort_NewNMEAMessage);

            #endregion

            #region OutPort

            if (settingsProvider.Data.IsUseOutPort)
            {
                outPort = new SerialPort(settingsProvider.Data.OutPortName, (int)settingsProvider.Data.OutPortBaudrate);
            }

            #endregion

            #region timer

            timer        = new PrecisionTimer();
            timer.Period = 1000;
            timer.Mode   = Mode.Periodic;
            timer.Tick  += new EventHandler(timer_Tick);
            timer.Start();

            #endregion
        }