32#include <wx/jsonreader.h>
33#include <wx/jsonval.h>
34#include <wx/jsonwriter.h>
35#include <wx/tokenzr.h>
53#include "model/garmin_wrapper.h"
56void LogBroadcastOutputMessageColor(
const std::shared_ptr<const NavMsg>& msg,
59 ns.direction = NavmsgStatus::Direction::kOutput;
65void BroadcastNMEA0183Message(
const wxString& msg,
NmeaLog* nmea_log,
67 auto& registry = CommDriverRegistry::GetInstance();
68 const std::vector<std::unique_ptr<AbstractCommDriver>>& drivers =
69 registry.GetDrivers();
71 for (
auto& driver : drivers) {
72 if (driver->bus == NavAddr::Bus::N0183) {
77 if (params.IOSelect == DS_TYPE_INPUT_OUTPUT ||
78 params.IOSelect == DS_TYPE_OUTPUT) {
79 std::string
id = msg.ToStdString().substr(1, 5);
81 std::make_shared<NavAddr>(
NavAddr0183(params.GetStrippedDSPort()));
83 std::make_shared<Nmea0183Msg>(
id, msg.ToStdString(), source_addr);
85 ns.direction = NavmsgStatus::Direction::kOutput;
86 if (params.SentencePassesFilter(msg, FILTER_OUTPUT)) {
87 bool xmit_ok = driver->SendMessage(msg_out, source_addr);
88 if (!xmit_ok) ns.status = NavmsgStatus::State::kTxError;
90 ns.accepted = NavmsgStatus::Accepted::kFilteredDropped;
92 LogBroadcastOutputMessageColor(msg_out, ns, nmea_log);
97 on_msg_sent.
Notify(msg.ToStdString());
100bool CreateOutputConnection(
const wxString& com_name,
105 auto& registry = CommDriverRegistry::GetInstance();
106 const std::vector<DriverPtr>& drivers = registry.GetDrivers();
110 bool bGarmin =
false;
111 if (com_name.Lower().StartsWith(
"serial")) {
112 comx = com_name.AfterFirst(
':');
114 comx.BeforeFirst(
' ');
115 DriverPtr& old_driver =
FindDriver(drivers, comx.ToStdString());
116 wxLogDebug(
"Looking for old stream %s", com_name);
119 auto drv_serial_n0183 =
121 if (drv_serial_n0183) {
122 params_save = drv_serial_n0183->GetParams();
123 baud = params_save.Baudrate;
124 bGarmin = params_save.Garmin;
125 drv_serial_n0183->Close();
127 registry.Deactivate(old_driver);
129 b_restoreStream =
true;
132 if (baud == 0) baud = 4800;
134 if (com_name.Lower().StartsWith(
"serial")) {
139 cp.Garmin = bGarminIn || bGarmin;
140 cp.IOSelect = DS_TYPE_OUTPUT;
149 if (drv_serial_n0183) {
150 if ((wxNOT_FOUND != com_name.Upper().Find(
"USB")) &&
151 (wxNOT_FOUND != com_name.Upper().Find(
"GARMIN"))) {
154 while (!drv_serial_n0183->IsGarminThreadActive() && (timeout < 50)) {
160 if (!drv_serial_n0183->IsGarminThreadActive()) {
161 MESSAGE_LOG <<
"-->GPS Port:" << com_name
162 <<
" ...Could not be opened for writing";
167 while (!drv_serial_n0183->IsSecThreadActive() && (timeout < 50)) {
172 if (!drv_serial_n0183->IsSecThreadActive()) {
173 MESSAGE_LOG <<
"-->GPS Port:" << com_name
174 <<
" ...Could not be opened for writing";
179 FindDriver(drivers, comx.ToStdString(), NavAddr::Bus::N0183).get();
184 if (com_name.Find(
"Bluetooth") != wxNOT_FOUND) {
185 wxString comm_addr = com_name.AfterFirst(
';');
187 driver =
FindDriver(drivers, comm_addr.ToStdString()).get();
192 }
else if (com_name.Lower().StartsWith(
"udp") ||
193 com_name.Lower().StartsWith(
"tcp")) {
196 FindDriver(drivers, com_name.ToStdString(), NavAddr::Bus::N0183).get();
199 NetworkProtocol protocol = UDP;
200 if (com_name.Lower().StartsWith(
"tcp")) protocol = TCP;
201 wxStringTokenizer tkz(com_name,
":");
202 wxString token = tkz.GetNextToken();
203 wxString address = tkz.GetNextToken();
204 token = tkz.GetNextToken();
210 cp.NetProtocol = protocol;
211 cp.NetworkAddress = address;
212 cp.NetworkPort = port;
213 cp.IOSelect = DS_TYPE_OUTPUT;
217 FindDriver(drivers, cp.GetStrippedDSPort(), cp.GetLastCommProtocol());
223 if (com_name.Lower().StartsWith(
"tcp")) {
225 std::string msg(_(
"Connecting to "));
227 dlg_ctx.set_message(msg);
233 for (bconnected =
false; !bconnected && (loopCount > 0); loopCount--) {
234 if (drv_net_n0183->GetSock()->IsConnected()) {
243 msg = _(
"Connected to ");
245 dlg_ctx.set_message(msg);
248 auto& me =
FindDriver(drivers, driver->iface, driver->bus);
249 registry.Deactivate(me);
256 return driver !=
nullptr;
259int PrepareOutputChannel(
const wxString& com_name,
N0183DlgCtx dlg_ctx,
263 auto& registry = CommDriverRegistry::GetInstance();
267 const std::vector<DriverPtr>& drivers = registry.GetDrivers();
268 bool is_garmin_serial =
false;
271 if (com_name.Lower().StartsWith(
"serial")) {
273 comx = com_name.AfterFirst(
':');
274 comx = comx.BeforeFirst(
' ');
275 DriverPtr& existing_driver =
FindDriver(drivers, comx.ToStdString());
276 wxLogDebug(
"Looking for old stream %s", com_name);
278 if (existing_driver) {
281 if (drv_serial_n0183) {
282 is_garmin_serial = drv_serial_n0183->GetParams().Garmin;
292 if (is_garmin_serial) {
293 params_save = drv_serial_n0183->GetParams();
294 b_restoreStream =
true;
295 drv_serial_n0183->Close();
297 FindDriver(drivers, drv_serial_n0183->GetParams().GetStrippedDSPort(),
298 drv_serial_n0183->GetParams().GetCommProtocol());
299 registry.Deactivate(me);
303 CreateOutputConnection(com_name, params_save, btempStream,
304 b_restoreStream, dlg_ctx, is_garmin_serial);
305 if (!conn_ok)
return 1;
307#ifdef xUSE_GARMINHOST
309 if (com_name.Upper().Matches(
"*GARMIN*"))
315 drv_n0183_serial->StopGarminUSBIOThread(
true);
317 if (!drv_n0183_serial->IsGarminThreadActive()) {
318 int v_init = Garmin_GPS_Init(wxString(
"usb:"));
320 MESSAGE_LOG <<
"Garmin USB GPS could not be initialized, last error: "
321 << v_init <<
" LastGarminError: " << GetLastGarminError();
325 MESSAGE_LOG <<
"Garmin USB Initialized, unit identifies as: "
326 << Garmin_GPS_GetSaveString();
329 wxLogMessage(
"Sending Waypoint...");
332 RoutePointList rplist;
333 rplist.push_back(prp);
335 int ret1 = Garmin_GPS_SendWaypoints(wxString(
"usb:"), &rplist);
338 MESSAGE_LOG <<
"Error Sending Waypoint to Garmin USB, last error: "
339 << GetLastGarminError();
352int SendRouteToGPS_N0183(
Route* pr,
const wxString& com_name,
358 bool b_restoreStream =
false;
359 bool btempStream =
false;
361 auto& registry = CommDriverRegistry::GetInstance();
363 PrepareOutputChannel(com_name, dlg_ctx, params_save, b_restoreStream,
366 std::string target_iface =
367 com_name.AfterFirst(
':').ToStdString();
368 if (com_name.Lower().StartsWith(
"udp") || com_name.Lower().StartsWith(
"tcp"))
369 target_iface = com_name.ToStdString();
371 auto& target_driver =
372 FindDriver(registry.GetDrivers(), target_iface, NavAddr::Bus::N0183);
381 if (com_name.Upper().Matches(
"*GARMIN*"))
383 auto drv_serial_n0183 =
385 if (drv_serial_n0183) {
386 drv_serial_n0183->Close();
387 auto& me =
FindDriver(CommDriverRegistry::GetInstance().GetDrivers(),
388 drv_serial_n0183->GetParams().GetStrippedDSPort(),
389 drv_serial_n0183->GetParams().GetCommProtocol());
390 registry.Deactivate(me);
394 int v_init = Garmin_GPS_Init(wxString(
"usb:"));
396 MESSAGE_LOG <<
"Garmin USB GPS could not be initialized, error code: "
397 << v_init <<
" LastGarminError: " << GetLastGarminError();
400 MESSAGE_LOG <<
"Garmin USB initialized, unit identifies as "
401 << Garmin_GPS_GetSaveString();
404 wxLogMessage(
"Sending Routes...");
405 int ret1 = Garmin_GPS_SendRoute(wxString(
"usb:"), pr, dlg_ctx);
408 MESSAGE_LOG <<
" Error sending routes, last garmin error: "
409 << GetLastGarminError();
420 if (g_bGarminHostUpload) {
422 auto drv_serial_n0183 =
424 if (drv_serial_n0183) {
425 drv_serial_n0183->Close();
426 auto& me =
FindDriver(CommDriverRegistry::GetInstance().GetDrivers(),
427 drv_serial_n0183->GetParams().GetStrippedDSPort(),
428 drv_serial_n0183->GetParams().GetCommProtocol());
429 registry.Deactivate(me);
433 dlg_ctx.set_value(20);
435 wxString short_com = com_name.Mid(7);
442 v_init = Garmin_GPS_Init(short_com);
443 if (v_init >= 0)
break;
448 MESSAGE_LOG <<
"Garmin GPS could not be initialized on port: "
449 << short_com <<
" Error Code: " << v_init
450 <<
" LastGarminError: " << GetLastGarminError();
455 MESSAGE_LOG <<
"Sendig Route to Garmin GPS on port: " << short_com
456 <<
"Unit identifies as: " << Garmin_GPS_GetSaveString();
459 dlg_ctx.set_value(40);
460 lret_val = Garmin_GPS_SendRoute(short_com, pr, dlg_ctx);
462 MESSAGE_LOG <<
"Error Sending Route to Garmin GPS on port: " << short_com
463 <<
" Error Code: " << lret_val
464 <<
" LastGarminError: " << GetLastGarminError();
473 dlg_ctx.set_value(100);
482 std::make_shared<NavAddr>(NavAddr::Bus::N0183, drv_n0183->iface);
484 NMEA0183 oNMEA0183(NmeaCtxFactory());
485 oNMEA0183.TalkerID = _T (
"EC" );
488 dlg_ctx.set_range(100);
490 int progress_stall = 500;
497 if (bsend_waypoints) {
499 for (
RoutePoint* prp : *pr->pRoutePointList) {
500 if (g_GPS_Ident ==
"Generic") {
502 oNMEA0183.Wpl.Position.Latitude.Set(-prp->m_lat, _T (
"S" ));
504 oNMEA0183.Wpl.Position.Latitude.Set(prp->m_lat, _T (
"N" ));
507 oNMEA0183.Wpl.Position.Longitude.Set(-prp->m_lon, _T (
"W" ));
509 oNMEA0183.Wpl.Position.Longitude.Set(prp->m_lon, _T (
"E" ));
511 oNMEA0183.Wpl.To = prp->GetName().Truncate(g_maxWPNameLength);
513 oNMEA0183.Wpl.Write(snt);
515 }
else if (g_GPS_Ident ==
"FurunoGP3X") {
518 wxString talker_save = g_TalkerIdText;
519 g_TalkerIdText.Clear();
521 oNMEA0183.TalkerID = _T (
"PFEC," );
524 oNMEA0183.GPwpl.Position.Latitude.Set(-prp->m_lat, _T (
"S" ));
526 oNMEA0183.GPwpl.Position.Latitude.Set(prp->m_lat, _T (
"N" ));
529 oNMEA0183.GPwpl.Position.Longitude.Set(-prp->m_lon, _T (
"W" ));
531 oNMEA0183.GPwpl.Position.Longitude.Set(prp->m_lon, _T (
"E" ));
533 wxString name = prp->GetName();
535 name.Truncate(g_maxWPNameLength);
536 oNMEA0183.GPwpl.To = name;
538 oNMEA0183.GPwpl.Write(snt);
540 g_TalkerIdText = talker_save;
543 wxString payload = snt.Sentence;
555 auto msg_out = std::make_shared<Nmea0183Msg>(
556 "ECWPL", snt.Sentence.ToStdString(), address);
558 drv_n0183->SendMessage(msg_out, std::make_shared<NavAddr>());
559 if (g_GPS_Ident !=
"FurunoGP3X")
560 drv_n0183->SendMessage(msg_out, std::make_shared<NavAddr>());
563 ns.direction = NavmsgStatus::Direction::kOutput;
564 multiplexer.LogOutputMessage(msg_out, ns);
566 wxString(
"-->GPS Port: ") + com_name +
" Sentence: " + snt.Sentence;
570 dlg_ctx.set_value((ip * 100) / nProg);
572 wxMilliSleep(progress_stall);
580 unsigned int max_length = 76;
581 unsigned int max_wp = 2;
585 if (g_GPS_Ident ==
"FurunoGP3X") {
591 wxString talker_save = g_TalkerIdText;
592 if (g_GPS_Ident ==
"FurunoGP3X") g_TalkerIdText.Clear();
594 oNMEA0183.Rte.Empty();
595 oNMEA0183.Rte.TypeOfRoute = CompleteRoute;
598 oNMEA0183.Rte.RouteName = _T (
"1" );
602 if (g_GPS_Ident ==
"FurunoGP3X") {
603 oNMEA0183.Rte.RouteName = _T (
"01" );
604 oNMEA0183.TalkerID = _T (
"GP" );
605 oNMEA0183.Rte.m_complete_char =
'C';
606 oNMEA0183.Rte.m_skip_checksum = 1;
609 oNMEA0183.Rte.total_number_of_messages = 1;
610 oNMEA0183.Rte.message_number = 1;
613 for (
RoutePoint* prp : *pr->pRoutePointList) {
614 wxString name = prp->GetName().Truncate(g_maxWPNameLength);
615 if (g_GPS_Ident ==
"FurunoGP3X") {
616 name = prp->GetName();
618 name.Truncate(g_maxWPNameLength);
622 oNMEA0183.Rte.AddWaypoint(name);
625 oNMEA0183.Rte.Write(snt);
627 if ((snt.Sentence.Len() > max_length) ||
631 NMEA0183 tNMEA0183(NmeaCtxFactory());
633 tNMEA0183.TalkerID = _T (
"EC" );
635 tNMEA0183.Rte.Empty();
636 tNMEA0183.Rte.TypeOfRoute = CompleteRoute;
638 if (g_GPS_Ident !=
"FurunoGP3X") {
640 tNMEA0183.Rte.RouteName = _T (
"1" );
645 tNMEA0183.Rte.RouteName = _T (
"01" );
648 tNMEA0183.Rte.Write(tsnt);
650 unsigned int tare_length = tsnt.Sentence.Len();
653 wxArrayString sentence_array;
657 bool bnew_sentence =
true;
659 unsigned int wp_count = 0;
664 unsigned int name_len =
665 prp->GetName().Truncate(g_maxWPNameLength).Len();
666 if (g_GPS_Ident ==
"FurunoGP3X")
670 sent_len = tare_length;
671 sent_len += name_len + 1;
672 bnew_sentence =
false;
677 if ((sent_len + name_len > max_length) || (wp_count >= max_wp)) {
679 bnew_sentence =
true;
681 if (wp_count == max_wp)
682 sent_len += name_len;
684 sent_len += name_len + 1;
693 int final_total = n_total;
695 bnew_sentence =
true;
700 wxString name = prp->GetName().Truncate(g_maxWPNameLength);
701 if (g_GPS_Ident ==
"FurunoGP3X") {
702 name = prp->GetName();
704 name.Truncate(g_maxWPNameLength);
709 unsigned int name_len = name.Len();
712 sent_len = tare_length;
713 sent_len += name_len + 1;
714 bnew_sentence =
false;
716 oNMEA0183.Rte.Empty();
717 oNMEA0183.Rte.TypeOfRoute = CompleteRoute;
719 if (g_GPS_Ident !=
"FurunoGP3X") {
721 oNMEA0183.Rte.RouteName =
"1";
725 oNMEA0183.Rte.RouteName =
"01";
728 oNMEA0183.Rte.total_number_of_messages = final_total;
729 oNMEA0183.Rte.message_number = n_run;
730 snt.Sentence.Clear();
733 oNMEA0183.Rte.AddWaypoint(name);
736 if ((sent_len + name_len > max_length) || (wp_count >= max_wp)) {
738 bnew_sentence =
true;
740 oNMEA0183.Rte.Write(snt);
742 sentence_array.Add(snt.Sentence);
744 sent_len += name_len + 1;
745 oNMEA0183.Rte.AddWaypoint(name);
752 oNMEA0183.Rte.Write(snt);
753 if (snt.Sentence.Len() > tare_length) sentence_array.Add(snt.Sentence);
755 for (
unsigned int ii = 0; ii < sentence_array.GetCount(); ii++) {
756 wxString sentence = sentence_array[ii];
758 auto msg_out = std::make_shared<Nmea0183Msg>(
759 "ECRTE", sentence.ToStdString(), std::make_shared<NavAddr>());
760 drv_n0183->SendMessage(msg_out, address);
763 ns.direction = NavmsgStatus::Direction::kOutput;
764 multiplexer.LogOutputMessage(msg_out, ns);
769 wxString(
"-->GPS Port: ") + com_name +
" Sentence: " + sentence;
773 wxMilliSleep(progress_stall);
777 auto msg_out = std::make_shared<Nmea0183Msg>(
778 "ECRTE", snt.Sentence.ToStdString(), address);
779 drv_n0183->SendMessage(msg_out, address);
782 ns.direction = NavmsgStatus::Direction::kOutput;
783 multiplexer.LogOutputMessage(msg_out, ns);
787 wxString(
"-->GPS Port:") + com_name +
" Sentence: " + snt.Sentence;
792 if (g_GPS_Ident ==
"FurunoGP3X") {
793 wxString name = pr->GetName();
794 if (name.IsEmpty()) name =
"RTECOMMENT";
796 rte.Printf(
"$PFEC,GPrtc,01,");
797 rte += name.Left(16);
799 rtep.Printf(
",%c%c", 0x0d, 0x0a);
803 std::make_shared<Nmea0183Msg>(
"GPRTC", rte.ToStdString(), address);
804 drv_n0183->SendMessage(msg_out, address);
806 ns.direction = NavmsgStatus::Direction::kOutput;
807 multiplexer.LogOutputMessage(msg_out, ns);
809 auto msg = wxString(
"-->GPS Port:") + com_name +
" Sentence: " + rte;
814 term.Printf(
"$PFEC,GPxfr,CTL,E%c%c", 0x0d, 0x0a);
817 std::make_shared<Nmea0183Msg>(
"GPRTC", term.ToStdString(), address);
818 drv_n0183->SendMessage(msg_outf, address);
821 ns.direction = NavmsgStatus::Direction::kOutput;
822 multiplexer.LogOutputMessage(msg_outf, ns);
824 msg = wxString(
"-->GPS Port:") + com_name +
" Sentence: " + term;
828 dlg_ctx.set_value(100);
830 wxMilliSleep(progress_stall);
834 if (g_GPS_Ident ==
"FurunoGP3X") g_TalkerIdText = talker_save;
839 registry.Deactivate(target_driver);
842 if (b_restoreStream) {
850int SendWaypointToGPS_N0183(
RoutePoint* prp,
const wxString& com_name,
855 bool b_restoreStream =
false;
856 bool btempStream =
false;
858 auto& registry = CommDriverRegistry::GetInstance();
860 PrepareOutputChannel(com_name, dlg_ctx, params_save, b_restoreStream,
863 auto& target_driver =
864 FindDriver(registry.GetDrivers(), com_name.AfterFirst(
':').ToStdString(),
865 NavAddr::Bus::N0183);
869 if (com_name.Upper().Matches(
"*GARMIN*"))
871 auto drv_serial_n0183 =
873 if (drv_serial_n0183) {
874 drv_serial_n0183->Close();
875 auto& me =
FindDriver(CommDriverRegistry::GetInstance().GetDrivers(),
876 drv_serial_n0183->GetParams().GetStrippedDSPort(),
877 drv_serial_n0183->GetParams().GetCommProtocol());
879 registry.Deactivate(me);
883 int v_init = Garmin_GPS_Init(wxString(
"usb:"));
885 MESSAGE_LOG <<
"Garmin USB GPS could not be initialized, last error: "
886 << v_init <<
" LastGarminError: " << GetLastGarminError();
890 MESSAGE_LOG <<
"Garmin USB Initialized, unit identifies as: "
891 << Garmin_GPS_GetSaveString();
894 wxLogMessage(
"Sending Waypoint...");
897 RoutePointList rplist;
898 rplist.push_back(prp);
900 int ret1 = Garmin_GPS_SendWaypoints(wxString(
"usb:"), &rplist);
903 MESSAGE_LOG <<
"Error Sending Waypoint to Garmin USB, last error: "
904 << GetLastGarminError();
918 if (g_bGarminHostUpload) {
923 serial_n0183->Close();
924 auto& me =
FindDriver(CommDriverRegistry::GetInstance().GetDrivers(),
925 serial_n0183->GetParams().GetStrippedDSPort(),
926 serial_n0183->GetParams().GetCommProtocol());
927 registry.Deactivate(me);
929 RoutePointList rplist;
931 wxString short_com = com_name.Mid(7);
938 v_init = Garmin_GPS_Init(short_com);
939 if (v_init >= 0)
break;
944 MESSAGE_LOG <<
"Garmin GPS could not be initialized on port: " << com_name
945 <<
" Error Code: " << v_init
946 <<
"LastGarminError: " << GetLastGarminError();
951 MESSAGE_LOG <<
"Sending waypoint(s) to Garmin GPS on port: " << com_name;
952 MESSAGE_LOG <<
"Unit identifies as: " << Garmin_GPS_GetSaveString();
956 rplist.push_back(prp);
958 ret_val = Garmin_GPS_SendWaypoints(short_com, &rplist);
960 MESSAGE_LOG <<
"Error Sending Waypoint(s) to Garmin GPS on port, "
961 << com_name <<
" error code: " << ret_val
962 <<
", last garmin error: " << GetLastGarminError();
979 auto address = std::make_shared<NavAddr>();
981 NMEA0183 oNMEA0183(NmeaCtxFactory());
982 oNMEA0183.TalkerID =
"EC";
983 dlg_ctx.set_range(100);
985 if (g_GPS_Ident ==
"Generic") {
987 oNMEA0183.Wpl.Position.Latitude.Set(-prp->m_lat,
"S");
989 oNMEA0183.Wpl.Position.Latitude.Set(prp->m_lat,
"N");
992 oNMEA0183.Wpl.Position.Longitude.Set(-prp->m_lon,
"W");
994 oNMEA0183.Wpl.Position.Longitude.Set(prp->m_lon,
"E");
996 oNMEA0183.Wpl.To = prp->GetName().Truncate(g_maxWPNameLength);
998 oNMEA0183.Wpl.Write(snt);
999 }
else if (g_GPS_Ident ==
"FurunoGP3X") {
1000 oNMEA0183.TalkerID =
"PFEC,";
1002 if (prp->m_lat < 0.)
1003 oNMEA0183.GPwpl.Position.Latitude.Set(-prp->m_lat,
"S");
1005 oNMEA0183.GPwpl.Position.Latitude.Set(prp->m_lat,
"N");
1007 if (prp->m_lon < 0.)
1008 oNMEA0183.GPwpl.Position.Longitude.Set(-prp->m_lon,
"W");
1010 oNMEA0183.GPwpl.Position.Longitude.Set(prp->m_lon,
"E");
1012 wxString name = prp->GetName();
1014 name.Truncate(g_maxWPNameLength);
1015 oNMEA0183.GPwpl.To = name;
1017 oNMEA0183.GPwpl.Write(snt);
1020 auto msg_out = std::make_shared<Nmea0183Msg>(
1021 "ECWPL", snt.Sentence.ToStdString(), address);
1022 drv_n0183->SendMessage(msg_out, address);
1025 ns.direction = NavmsgStatus::Direction::kOutput;
1026 multiplexer.LogOutputMessage(msg_out, ns);
1027 auto msg = wxString(
"-->GPS Port:") + com_name +
" Sentence: ";
1031 if (g_GPS_Ident ==
"FurunoGP3X") {
1033 term.Printf(
"$PFEC,GPxfr,CTL,E%c%c", 0x0d, 0x0a);
1038 auto logmsg = wxString(
"-->GPS Port:") + com_name +
" Sentence: " + term;
1040 wxLogMessage(logmsg);
1042 dlg_ctx.set_value(100);
1051 if (btempStream) registry.Deactivate(target_driver);
1053 if (b_restoreStream) {
Common interface for all drivers.
NMEA0183 basic parsing common parts:
Generic event handling between MVC Model and Controller based on a shared EventVar variable.
void Notify() override
Notify all listeners, no data supplied.
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,...