OpenCPN Partial API docs
multiplexer.h
1 /***************************************************************************
2  *
3  * Project: OpenCPN
4  * Purpose: NMEA Data Multiplexer Object
5  * Author: David Register
6  *
7  ***************************************************************************
8  * Copyright (C) 2010 by David S. Register *
9  * *
10  * This program is free software; you can redistribute it and/or modify *
11  * it under the terms of the GNU General Public License as published by *
12  * the Free Software Foundation; either version 2 of the License, or *
13  * (at your option) any later version. *
14  * *
15  * This program is distributed in the hope that it will be useful, *
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18  * GNU General Public License for more details. *
19  * *
20  * You should have received a copy of the GNU General Public License *
21  * along with this program; if not, write to the *
22  * Free Software Foundation, Inc., *
23  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
24  **************************************************************************/
25 #ifndef _MULTIPLEXER_H__
26 #define _MULTIPLEXER_H__
27 
28 #include <functional>
29 
30 #include <wx/wxprec.h>
31 
32 #ifndef WX_PRECOMP
33 #include <wx/wx.h>
34 #endif // precompiled headers
35 
36 #include "model/comm_navmsg.h"
37 
38 class Multiplexer; // forward
39 
40 extern Multiplexer* g_pMUX;
41 
43  std::function<bool()> log_is_active;
44  std::function<void(const std::string&)> log_message;
46  : log_is_active([]() { return false; }),
47  log_message([](const std::string& s) { }) { }
48 
49 };
50 
51 
52 class Multiplexer : public wxEvtHandler {
53 public:
54  Multiplexer(MuxLogCallbacks log_callbacks,
55  bool& legacy_input_filter_behaviour );
56  ~Multiplexer();
57 
58  void LogOutputMessage(const wxString &msg, wxString stream_name,
59  bool b_filter);
60  void LogOutputMessageColor(const wxString &msg, const wxString &stream_name,
61  const wxString &color);
62  void LogInputMessage(const wxString &msg, const wxString &stream_name,
63  bool b_filter, bool b_error = false);
64 
65  bool IsLogActive() { return m_log_callbacks.log_is_active();}
66 private:
67  // comm event listeners
68  ObservableListener listener_N2K_All;
69  ObservableListener m_listener_N0183_all;
70 
71  void InitN2KCommListeners();
72 
73  void HandleN0183(std::shared_ptr<const Nmea0183Msg> n0183_msg);
74  bool HandleN2K_Log(std::shared_ptr<const Nmea2000Msg> n2k_msg);
75  std::string N2K_LogMessage_Detail(unsigned int pgn,
76  std::shared_ptr<const Nmea2000Msg> n2k_msg);
77 
78  MuxLogCallbacks m_log_callbacks;
79  unsigned int last_pgn_logged;
80  int n_N2K_repeat;
81  bool& m_legacy_input_filter_behaviour;
82 };
83 #endif // _MULTIPLEXER_H__
Keeps listening over it's lifespan, removes itself on destruction.
Definition: observable.h:133