OpenCPN Partial API docs
Loading...
Searching...
No Matches
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
38class Multiplexer; // forward
39
40extern Multiplexer *g_pMUX;
41
43 std::function<bool()> log_is_active;
44 std::function<void(const wxString &)> log_message;
46 : log_is_active([]() { return false; }),
47 log_message([](const wxString &s) {}) {}
48};
49
50class Multiplexer : public wxEvtHandler {
51public:
52 Multiplexer(MuxLogCallbacks log_callbacks,
53 bool &legacy_input_filter_behaviour);
55
56 void LogOutputMessage(const wxString &msg, wxString stream_name,
57 bool b_filter);
58 void LogOutputMessageColor(const wxString &msg, const wxString &stream_name,
59 const wxString &color);
70 void LogInputMessage(const wxString &msg, const wxString &stream_name,
71 bool b_filter, bool b_error = false,
72 const wxString error_msg = wxEmptyString);
73
74 bool IsLogActive() { return m_log_callbacks.log_is_active(); }
75
76private:
77 // comm event listeners
78 ObservableListener listener_N2K_All;
79 ObservableListener m_listener_N0183_all;
80
81 void InitN2KCommListeners();
82
83 void HandleN0183(std::shared_ptr<const Nmea0183Msg> n0183_msg);
84 bool HandleN2K_Log(std::shared_ptr<const Nmea2000Msg> n2k_msg);
85 std::string N2K_LogMessage_Detail(unsigned int pgn,
86 std::shared_ptr<const Nmea2000Msg> n2k_msg);
87
88 MuxLogCallbacks m_log_callbacks;
89 unsigned int last_pgn_logged;
90 int n_N2K_repeat;
91 bool &m_legacy_input_filter_behaviour;
92};
93#endif // _MULTIPLEXER_H__
void LogInputMessage(const wxString &msg, const wxString &stream_name, bool b_filter, bool b_error=false, const wxString error_msg=wxEmptyString)
Logs an input message with context information.
Keeps listening over it's lifespan, removes itself on destruction.
Definition observable.h:131
Raw, undecoded messages definitions.