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 }
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 }
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 }
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 }
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 }