32#include <wx/tokenzr.h>
50#include "model/garmin_wrapper.h"
53void LogBroadcastOutputMessageColor(
const std::shared_ptr<const NavMsg>& msg,
56 ns.direction = NavmsgStatus::Direction::kOutput;
62void BroadcastNMEA0183Message(
const wxString& msg,
NmeaLog* nmea_log,
63 obs::EventVar& on_msg_sent) {
64 auto& registry = CommDriverRegistry::GetInstance();
65 const std::vector<std::unique_ptr<AbstractCommDriver>>& drivers =
66 registry.GetDrivers();
68 for (
auto& driver : drivers) {
69 if (driver->bus == NavAddr::Bus::N0183) {
74 if (params.IOSelect == DS_TYPE_INPUT_OUTPUT ||
75 params.IOSelect == DS_TYPE_OUTPUT) {
76 std::string
id = msg.ToStdString().substr(1, 5);
78 std::make_shared<NavAddr>(
NavAddr0183(params.GetStrippedDSPort()));
80 std::make_shared<Nmea0183Msg>(
id, msg.ToStdString(), source_addr);
82 ns.direction = NavmsgStatus::Direction::kOutput;
83 if (params.SentencePassesFilter(msg, FILTER_OUTPUT)) {
84 bool xmit_ok = driver->SendMessage(msg_out, source_addr);
85 if (!xmit_ok) ns.status = NavmsgStatus::State::kTxError;
87 ns.accepted = NavmsgStatus::Accepted::kFilteredDropped;
89 LogBroadcastOutputMessageColor(msg_out, ns, nmea_log);
94 on_msg_sent.Notify(msg.ToStdString());
97bool CreateOutputConnection(
const wxString& com_name,
102 auto& registry = CommDriverRegistry::GetInstance();
103 const std::vector<DriverPtr>& drivers = registry.GetDrivers();
107 bool bGarmin =
false;
108 if (com_name.Lower().StartsWith(
"serial")) {
109 comx = com_name.AfterFirst(
':');
111 comx.BeforeFirst(
' ');
112 DriverPtr& old_driver =
FindDriver(drivers, comx.ToStdString());
113 wxLogDebug(
"Looking for old stream %s", com_name);
116 auto drv_serial_n0183 =
118 if (drv_serial_n0183) {
119 params_save = drv_serial_n0183->GetParams();
120 baud = params_save.Baudrate;
121 bGarmin = params_save.Garmin;
122 drv_serial_n0183->Close();
124 registry.Deactivate(old_driver);
126 b_restoreStream =
true;
129 if (baud == 0) baud = 4800;
131 if (com_name.Lower().StartsWith(
"serial")) {
136 cp.Garmin = bGarminIn || bGarmin;
137 cp.IOSelect = DS_TYPE_OUTPUT;
146 if (drv_serial_n0183) {
147 if ((wxNOT_FOUND != com_name.Upper().Find(
"USB")) &&
148 (wxNOT_FOUND != com_name.Upper().Find(
"GARMIN"))) {
151 while (!drv_serial_n0183->IsGarminThreadActive() && (timeout < 50)) {
157 if (!drv_serial_n0183->IsGarminThreadActive()) {
158 MESSAGE_LOG <<
"-->GPS Port:" << com_name
159 <<
" ...Could not be opened for writing";
164 while (!drv_serial_n0183->IsSecThreadActive() && (timeout < 50)) {
169 if (!drv_serial_n0183->IsSecThreadActive()) {
170 MESSAGE_LOG <<
"-->GPS Port:" << com_name
171 <<
" ...Could not be opened for writing";
176 FindDriver(drivers, comx.ToStdString(), NavAddr::Bus::N0183).get();
181 if (com_name.Find(
"Bluetooth") != wxNOT_FOUND) {
182 wxString comm_addr = com_name.AfterFirst(
';');
184 driver =
FindDriver(drivers, comm_addr.ToStdString()).get();
189 }
else if (com_name.Lower().StartsWith(
"udp") ||
190 com_name.Lower().StartsWith(
"tcp")) {
193 FindDriver(drivers, com_name.ToStdString(), NavAddr::Bus::N0183).get();
196 NetworkProtocol protocol = UDP;
197 if (com_name.Lower().StartsWith(
"tcp")) protocol = TCP;
198 wxStringTokenizer tkz(com_name,
":");
199 wxString token = tkz.GetNextToken();
200 wxString address = tkz.GetNextToken();
201 token = tkz.GetNextToken();
207 cp.NetProtocol = protocol;
208 cp.NetworkAddress = address;
209 cp.NetworkPort = port;
210 cp.IOSelect = DS_TYPE_OUTPUT;
214 FindDriver(drivers, cp.GetStrippedDSPort(), cp.GetLastCommProtocol());
220 if (com_name.Lower().StartsWith(
"tcp")) {
222 std::string msg(_(
"Connecting to "));
224 dlg_ctx.set_message(msg);
230 for (bconnected =
false; !bconnected && (loopCount > 0); loopCount--) {
231 if (drv_net_n0183->GetSock()->IsConnected()) {
240 msg = _(
"Connected to ");
242 dlg_ctx.set_message(msg);
245 auto& me =
FindDriver(drivers, driver->iface, driver->bus);
246 registry.Deactivate(me);
253 return driver !=
nullptr;
256int PrepareOutputChannel(
const wxString& com_name,
N0183DlgCtx dlg_ctx,
260 auto& registry = CommDriverRegistry::GetInstance();
264 const std::vector<DriverPtr>& drivers = registry.GetDrivers();
265 bool is_garmin_serial =
false;
268 if (com_name.Lower().StartsWith(
"serial")) {
270 comx = com_name.AfterFirst(
':');
271 comx = comx.BeforeFirst(
' ');
272 DriverPtr& existing_driver =
FindDriver(drivers, comx.ToStdString());
273 wxLogDebug(
"Looking for old stream %s", com_name);
275 if (existing_driver) {
278 if (drv_serial_n0183) {
279 is_garmin_serial = drv_serial_n0183->GetParams().Garmin;
289 if (is_garmin_serial) {
290 params_save = drv_serial_n0183->GetParams();
291 b_restoreStream =
true;
292 drv_serial_n0183->Close();
294 FindDriver(drivers, drv_serial_n0183->GetParams().GetStrippedDSPort(),
295 drv_serial_n0183->GetParams().GetCommProtocol());
296 registry.Deactivate(me);
300 CreateOutputConnection(com_name, params_save, btempStream,
301 b_restoreStream, dlg_ctx, is_garmin_serial);
302 if (!conn_ok)
return 1;
304#ifdef xUSE_GARMINHOST
306 if (com_name.Upper().Matches(
"*GARMIN*"))
312 drv_n0183_serial->StopGarminUSBIOThread(
true);
314 if (!drv_n0183_serial->IsGarminThreadActive()) {
315 int v_init = Garmin_GPS_Init(wxString(
"usb:"));
317 MESSAGE_LOG <<
"Garmin USB GPS could not be initialized, last error: "
318 << v_init <<
" LastGarminError: " << GetLastGarminError();
322 MESSAGE_LOG <<
"Garmin USB Initialized, unit identifies as: "
323 << Garmin_GPS_GetSaveString();
326 wxLogMessage(
"Sending Waypoint...");
329 RoutePointList rplist;
330 rplist.push_back(prp);
332 int ret1 = Garmin_GPS_SendWaypoints(wxString(
"usb:"), &rplist);
335 MESSAGE_LOG <<
"Error Sending Waypoint to Garmin USB, last error: "
336 << GetLastGarminError();
349int SendRouteToGPS_N0183(
Route* pr,
const wxString& com_name,
355 bool b_restoreStream =
false;
356 bool btempStream =
false;
358 auto& registry = CommDriverRegistry::GetInstance();
360 PrepareOutputChannel(com_name, dlg_ctx, params_save, b_restoreStream,
363 std::string target_iface =
364 com_name.AfterFirst(
':').ToStdString();
365 if (com_name.Lower().StartsWith(
"udp") || com_name.Lower().StartsWith(
"tcp"))
366 target_iface = com_name.ToStdString();
368 auto& target_driver =
369 FindDriver(registry.GetDrivers(), target_iface, NavAddr::Bus::N0183);
378 if (com_name.Upper().Matches(
"*GARMIN*"))
380 auto drv_serial_n0183 =
382 if (drv_serial_n0183) {
383 drv_serial_n0183->Close();
384 auto& me =
FindDriver(CommDriverRegistry::GetInstance().GetDrivers(),
385 drv_serial_n0183->GetParams().GetStrippedDSPort(),
386 drv_serial_n0183->GetParams().GetCommProtocol());
387 registry.Deactivate(me);
391 int v_init = Garmin_GPS_Init(wxString(
"usb:"));
393 MESSAGE_LOG <<
"Garmin USB GPS could not be initialized, error code: "
394 << v_init <<
" LastGarminError: " << GetLastGarminError();
397 MESSAGE_LOG <<
"Garmin USB initialized, unit identifies as "
398 << Garmin_GPS_GetSaveString();
401 wxLogMessage(
"Sending Routes...");
402 int ret1 = Garmin_GPS_SendRoute(wxString(
"usb:"), pr, dlg_ctx);
405 MESSAGE_LOG <<
" Error sending routes, last garmin error: "
406 << GetLastGarminError();
417 if (g_bGarminHostUpload) {
419 auto drv_serial_n0183 =
421 if (drv_serial_n0183) {
422 drv_serial_n0183->Close();
423 auto& me =
FindDriver(CommDriverRegistry::GetInstance().GetDrivers(),
424 drv_serial_n0183->GetParams().GetStrippedDSPort(),
425 drv_serial_n0183->GetParams().GetCommProtocol());
426 registry.Deactivate(me);
430 dlg_ctx.set_value(20);
432 wxString short_com = com_name.Mid(7);
439 v_init = Garmin_GPS_Init(short_com);
440 if (v_init >= 0)
break;
445 MESSAGE_LOG <<
"Garmin GPS could not be initialized on port: "
446 << short_com <<
" Error Code: " << v_init
447 <<
" LastGarminError: " << GetLastGarminError();
452 MESSAGE_LOG <<
"Sendig Route to Garmin GPS on port: " << short_com
453 <<
"Unit identifies as: " << Garmin_GPS_GetSaveString();
456 dlg_ctx.set_value(40);
457 lret_val = Garmin_GPS_SendRoute(short_com, pr, dlg_ctx);
459 MESSAGE_LOG <<
"Error Sending Route to Garmin GPS on port: " << short_com
460 <<
" Error Code: " << lret_val
461 <<
" LastGarminError: " << GetLastGarminError();
470 dlg_ctx.set_value(100);
479 std::make_shared<NavAddr>(NavAddr::Bus::N0183, drv_n0183->iface);
481 NMEA0183 oNMEA0183(NmeaCtxFactory());
482 oNMEA0183.TalkerID = _T (
"EC" );
485 dlg_ctx.set_range(100);
487 int progress_stall = 500;
494 if (bsend_waypoints) {
496 for (
RoutePoint* prp : *pr->pRoutePointList) {
497 if (g_GPS_Ident ==
"Generic") {
499 oNMEA0183.Wpl.Position.Latitude.Set(-prp->m_lat, _T (
"S" ));
501 oNMEA0183.Wpl.Position.Latitude.Set(prp->m_lat, _T (
"N" ));
504 oNMEA0183.Wpl.Position.Longitude.Set(-prp->m_lon, _T (
"W" ));
506 oNMEA0183.Wpl.Position.Longitude.Set(prp->m_lon, _T (
"E" ));
508 oNMEA0183.Wpl.To = prp->GetName().Truncate(g_maxWPNameLength);
510 oNMEA0183.Wpl.Write(snt);
512 }
else if (g_GPS_Ident ==
"FurunoGP3X") {
515 wxString talker_save = g_TalkerIdText;
516 g_TalkerIdText.Clear();
518 oNMEA0183.TalkerID = _T (
"PFEC," );
521 oNMEA0183.GPwpl.Position.Latitude.Set(-prp->m_lat, _T (
"S" ));
523 oNMEA0183.GPwpl.Position.Latitude.Set(prp->m_lat, _T (
"N" ));
526 oNMEA0183.GPwpl.Position.Longitude.Set(-prp->m_lon, _T (
"W" ));
528 oNMEA0183.GPwpl.Position.Longitude.Set(prp->m_lon, _T (
"E" ));
530 wxString name = prp->GetName();
532 name.Truncate(g_maxWPNameLength);
533 oNMEA0183.GPwpl.To = name;
535 oNMEA0183.GPwpl.Write(snt);
537 g_TalkerIdText = talker_save;
540 wxString payload = snt.Sentence;
552 auto msg_out = std::make_shared<Nmea0183Msg>(
553 "ECWPL", snt.Sentence.ToStdString(), address);
555 drv_n0183->SendMessage(msg_out, std::make_shared<NavAddr>());
556 if (g_GPS_Ident !=
"FurunoGP3X")
557 drv_n0183->SendMessage(msg_out, std::make_shared<NavAddr>());
560 ns.direction = NavmsgStatus::Direction::kOutput;
561 multiplexer.LogOutputMessage(msg_out, ns);
563 wxString(
"-->GPS Port: ") + com_name +
" Sentence: " + snt.Sentence;
567 dlg_ctx.set_value((ip * 100) / nProg);
569 wxMilliSleep(progress_stall);
577 unsigned int max_length = 76;
578 unsigned int max_wp = 2;
582 if (g_GPS_Ident ==
"FurunoGP3X") {
588 wxString talker_save = g_TalkerIdText;
589 if (g_GPS_Ident ==
"FurunoGP3X") g_TalkerIdText.Clear();
591 oNMEA0183.Rte.Empty();
592 oNMEA0183.Rte.TypeOfRoute = CompleteRoute;
595 oNMEA0183.Rte.RouteName = _T (
"1" );
599 if (g_GPS_Ident ==
"FurunoGP3X") {
600 oNMEA0183.Rte.RouteName = _T (
"01" );
601 oNMEA0183.TalkerID = _T (
"GP" );
602 oNMEA0183.Rte.m_complete_char =
'C';
603 oNMEA0183.Rte.m_skip_checksum = 1;
606 oNMEA0183.Rte.total_number_of_messages = 1;
607 oNMEA0183.Rte.message_number = 1;
610 for (
RoutePoint* prp : *pr->pRoutePointList) {
611 wxString name = prp->GetName().Truncate(g_maxWPNameLength);
612 if (g_GPS_Ident ==
"FurunoGP3X") {
613 name = prp->GetName();
615 name.Truncate(g_maxWPNameLength);
619 oNMEA0183.Rte.AddWaypoint(name);
622 oNMEA0183.Rte.Write(snt);
624 if ((snt.Sentence.Len() > max_length) ||
628 NMEA0183 tNMEA0183(NmeaCtxFactory());
630 tNMEA0183.TalkerID = _T (
"EC" );
632 tNMEA0183.Rte.Empty();
633 tNMEA0183.Rte.TypeOfRoute = CompleteRoute;
635 if (g_GPS_Ident !=
"FurunoGP3X") {
637 tNMEA0183.Rte.RouteName = _T (
"1" );
642 tNMEA0183.Rte.RouteName = _T (
"01" );
645 tNMEA0183.Rte.Write(tsnt);
647 unsigned int tare_length = tsnt.Sentence.Len();
650 wxArrayString sentence_array;
654 bool bnew_sentence =
true;
656 unsigned int wp_count = 0;
661 unsigned int name_len =
662 prp->GetName().Truncate(g_maxWPNameLength).Len();
663 if (g_GPS_Ident ==
"FurunoGP3X")
667 sent_len = tare_length;
668 sent_len += name_len + 1;
669 bnew_sentence =
false;
674 if ((sent_len + name_len > max_length) || (wp_count >= max_wp)) {
676 bnew_sentence =
true;
678 if (wp_count == max_wp)
679 sent_len += name_len;
681 sent_len += name_len + 1;
690 int final_total = n_total;
692 bnew_sentence =
true;
697 wxString name = prp->GetName().Truncate(g_maxWPNameLength);
698 if (g_GPS_Ident ==
"FurunoGP3X") {
699 name = prp->GetName();
701 name.Truncate(g_maxWPNameLength);
706 unsigned int name_len = name.Len();
709 sent_len = tare_length;
710 sent_len += name_len + 1;
711 bnew_sentence =
false;
713 oNMEA0183.Rte.Empty();
714 oNMEA0183.Rte.TypeOfRoute = CompleteRoute;
716 if (g_GPS_Ident !=
"FurunoGP3X") {
718 oNMEA0183.Rte.RouteName =
"1";
722 oNMEA0183.Rte.RouteName =
"01";
725 oNMEA0183.Rte.total_number_of_messages = final_total;
726 oNMEA0183.Rte.message_number = n_run;
727 snt.Sentence.Clear();
730 oNMEA0183.Rte.AddWaypoint(name);
733 if ((sent_len + name_len > max_length) || (wp_count >= max_wp)) {
735 bnew_sentence =
true;
737 oNMEA0183.Rte.Write(snt);
739 sentence_array.Add(snt.Sentence);
741 sent_len += name_len + 1;
742 oNMEA0183.Rte.AddWaypoint(name);
749 oNMEA0183.Rte.Write(snt);
750 if (snt.Sentence.Len() > tare_length) sentence_array.Add(snt.Sentence);
752 for (
unsigned int ii = 0; ii < sentence_array.GetCount(); ii++) {
753 wxString sentence = sentence_array[ii];
755 auto msg_out = std::make_shared<Nmea0183Msg>(
756 "ECRTE", sentence.ToStdString(), std::make_shared<NavAddr>());
757 drv_n0183->SendMessage(msg_out, address);
760 ns.direction = NavmsgStatus::Direction::kOutput;
761 multiplexer.LogOutputMessage(msg_out, ns);
766 wxString(
"-->GPS Port: ") + com_name +
" Sentence: " + sentence;
770 wxMilliSleep(progress_stall);
774 auto msg_out = std::make_shared<Nmea0183Msg>(
775 "ECRTE", snt.Sentence.ToStdString(), address);
776 drv_n0183->SendMessage(msg_out, address);
779 ns.direction = NavmsgStatus::Direction::kOutput;
780 multiplexer.LogOutputMessage(msg_out, ns);
784 wxString(
"-->GPS Port:") + com_name +
" Sentence: " + snt.Sentence;
789 if (g_GPS_Ident ==
"FurunoGP3X") {
790 wxString name = pr->GetName();
791 if (name.IsEmpty()) name =
"RTECOMMENT";
793 rte.Printf(
"$PFEC,GPrtc,01,");
794 rte += name.Left(16);
796 rtep.Printf(
",%c%c", 0x0d, 0x0a);
800 std::make_shared<Nmea0183Msg>(
"GPRTC", rte.ToStdString(), address);
801 drv_n0183->SendMessage(msg_out, address);
803 ns.direction = NavmsgStatus::Direction::kOutput;
804 multiplexer.LogOutputMessage(msg_out, ns);
806 auto msg = wxString(
"-->GPS Port:") + com_name +
" Sentence: " + rte;
811 term.Printf(
"$PFEC,GPxfr,CTL,E%c%c", 0x0d, 0x0a);
814 std::make_shared<Nmea0183Msg>(
"GPRTC", term.ToStdString(), address);
815 drv_n0183->SendMessage(msg_outf, address);
818 ns.direction = NavmsgStatus::Direction::kOutput;
819 multiplexer.LogOutputMessage(msg_outf, ns);
821 msg = wxString(
"-->GPS Port:") + com_name +
" Sentence: " + term;
825 dlg_ctx.set_value(100);
827 wxMilliSleep(progress_stall);
831 if (g_GPS_Ident ==
"FurunoGP3X") g_TalkerIdText = talker_save;
836 registry.Deactivate(target_driver);
839 if (b_restoreStream) {
847int SendWaypointToGPS_N0183(
RoutePoint* prp,
const wxString& com_name,
852 bool b_restoreStream =
false;
853 bool btempStream =
false;
855 auto& registry = CommDriverRegistry::GetInstance();
857 PrepareOutputChannel(com_name, dlg_ctx, params_save, b_restoreStream,
860 auto& target_driver =
861 FindDriver(registry.GetDrivers(), com_name.AfterFirst(
':').ToStdString(),
862 NavAddr::Bus::N0183);
866 if (com_name.Upper().Matches(
"*GARMIN*"))
868 auto drv_serial_n0183 =
870 if (drv_serial_n0183) {
871 drv_serial_n0183->Close();
872 auto& me =
FindDriver(CommDriverRegistry::GetInstance().GetDrivers(),
873 drv_serial_n0183->GetParams().GetStrippedDSPort(),
874 drv_serial_n0183->GetParams().GetCommProtocol());
876 registry.Deactivate(me);
880 int v_init = Garmin_GPS_Init(wxString(
"usb:"));
882 MESSAGE_LOG <<
"Garmin USB GPS could not be initialized, last error: "
883 << v_init <<
" LastGarminError: " << GetLastGarminError();
887 MESSAGE_LOG <<
"Garmin USB Initialized, unit identifies as: "
888 << Garmin_GPS_GetSaveString();
891 wxLogMessage(
"Sending Waypoint...");
894 RoutePointList rplist;
895 rplist.push_back(prp);
897 int ret1 = Garmin_GPS_SendWaypoints(wxString(
"usb:"), &rplist);
900 MESSAGE_LOG <<
"Error Sending Waypoint to Garmin USB, last error: "
901 << GetLastGarminError();
915 if (g_bGarminHostUpload) {
920 serial_n0183->Close();
921 auto& me =
FindDriver(CommDriverRegistry::GetInstance().GetDrivers(),
922 serial_n0183->GetParams().GetStrippedDSPort(),
923 serial_n0183->GetParams().GetCommProtocol());
924 registry.Deactivate(me);
926 RoutePointList rplist;
928 wxString short_com = com_name.Mid(7);
935 v_init = Garmin_GPS_Init(short_com);
936 if (v_init >= 0)
break;
941 MESSAGE_LOG <<
"Garmin GPS could not be initialized on port: " << com_name
942 <<
" Error Code: " << v_init
943 <<
"LastGarminError: " << GetLastGarminError();
948 MESSAGE_LOG <<
"Sending waypoint(s) to Garmin GPS on port: " << com_name;
949 MESSAGE_LOG <<
"Unit identifies as: " << Garmin_GPS_GetSaveString();
953 rplist.push_back(prp);
955 ret_val = Garmin_GPS_SendWaypoints(short_com, &rplist);
957 MESSAGE_LOG <<
"Error Sending Waypoint(s) to Garmin GPS on port, "
958 << com_name <<
" error code: " << ret_val
959 <<
", last garmin error: " << GetLastGarminError();
976 auto address = std::make_shared<NavAddr>();
978 NMEA0183 oNMEA0183(NmeaCtxFactory());
979 oNMEA0183.TalkerID =
"EC";
980 dlg_ctx.set_range(100);
982 if (g_GPS_Ident ==
"Generic") {
984 oNMEA0183.Wpl.Position.Latitude.Set(-prp->m_lat,
"S");
986 oNMEA0183.Wpl.Position.Latitude.Set(prp->m_lat,
"N");
989 oNMEA0183.Wpl.Position.Longitude.Set(-prp->m_lon,
"W");
991 oNMEA0183.Wpl.Position.Longitude.Set(prp->m_lon,
"E");
993 oNMEA0183.Wpl.To = prp->GetName().Truncate(g_maxWPNameLength);
995 oNMEA0183.Wpl.Write(snt);
996 }
else if (g_GPS_Ident ==
"FurunoGP3X") {
997 oNMEA0183.TalkerID =
"PFEC,";
1000 oNMEA0183.GPwpl.Position.Latitude.Set(-prp->m_lat,
"S");
1002 oNMEA0183.GPwpl.Position.Latitude.Set(prp->m_lat,
"N");
1004 if (prp->m_lon < 0.)
1005 oNMEA0183.GPwpl.Position.Longitude.Set(-prp->m_lon,
"W");
1007 oNMEA0183.GPwpl.Position.Longitude.Set(prp->m_lon,
"E");
1009 wxString name = prp->GetName();
1011 name.Truncate(g_maxWPNameLength);
1012 oNMEA0183.GPwpl.To = name;
1014 oNMEA0183.GPwpl.Write(snt);
1017 auto msg_out = std::make_shared<Nmea0183Msg>(
1018 "ECWPL", snt.Sentence.ToStdString(), address);
1019 drv_n0183->SendMessage(msg_out, address);
1022 ns.direction = NavmsgStatus::Direction::kOutput;
1023 multiplexer.LogOutputMessage(msg_out, ns);
1024 auto msg = wxString(
"-->GPS Port:") + com_name +
" Sentence: ";
1028 if (g_GPS_Ident ==
"FurunoGP3X") {
1030 term.Printf(
"$PFEC,GPxfr,CTL,E%c%c", 0x0d, 0x0a);
1035 auto logmsg = wxString(
"-->GPS Port:") + com_name +
" Sentence: " + term;
1037 wxLogMessage(logmsg);
1039 dlg_ctx.set_value(100);
1048 if (btempStream) registry.Deactivate(target_driver);
1050 if (b_restoreStream) {
Common interface for all drivers.
NMEA0183 basic parsing common parts:
Handle logging and forwarding of incoming n0183/n2k messages.
Representation of message status as determined by the multiplexer.
virtual bool IsVisible() const =0
Return true if log is visible i.e., if it's any point using Add().
virtual void Add(const Logline &l)=0
Add a formatted string to log output.
Represents a waypoint or mark within the navigation system.
Represents a navigational route in the navigation system.
RoutePointList * pRoutePointList
Ordered list of waypoints (RoutePoints) that make up this route.
wxString m_RouteNameString
User-assigned name for the route.
Communication driver layer.
void MakeCommDriver(const ConnectionParams *params)
Create and register a driver for given connection.
Communication drivers factory and support.
Android nmea0183 internal bluetooth driver.
DriverPtr & FindDriver(const std::vector< DriverPtr > &drivers, const std::string &iface, const NavAddr::Bus _bus)
Search list of drivers for a driver with given interface string.
Driver registration container, a singleton.
NMEA Data Multiplexer Object.
#define ERR_GPS_DRIVER_NOT_AVAILAIBLE
GPS driver not available.
#define ERR_GARMIN_SEND_MESSAGE
Failed to send message to Garmin device.
#define ERR_GARMIN_INITIALIZE
Failed to initialize Garmin device.
Global variables stored in configuration file.
Enhanced logging interface on top of wx/log.h.
Wrapper for creating an NmeaContext based on global vars.
Basic DataMonitor logging interface: LogLine (reflects a line in the log) and NmeaLog,...