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#include "model/nmea_log.h"
38
39class Multiplexer; // forward
40
41extern Multiplexer* g_pMUX;
42
44 std::function<bool()> log_is_active;
45 std::function<void(Logline)> log_message;
47 : log_is_active([]() { return false; }), log_message([](Logline) {}) {}
48};
49
50class Multiplexer : public wxEvtHandler {
51public:
52 Multiplexer(MuxLogCallbacks log_callbacks,
53 bool& legacy_input_filter_behaviour);
55
56 void LogOutputMessage(const std::shared_ptr<const NavMsg>& msg,
57 NavmsgStatus status);
58
59 // void LogOutputMessageColor(const std::shared_ptr<const NavMsg>& msg,
60 // NavmsgStatus status);
71 void LogInputMessage(const std::shared_ptr<const NavMsg>& msg,
72 bool is_filtered, bool is_error,
73 const wxString error_msg = "");
74
75 bool IsLogActive() { return m_log_callbacks.log_is_active(); }
76
77private:
78 // comm event listeners
79 ObservableListener listener_N2K_All;
80 ObservableListener m_listener_N0183_all;
81
82 void InitN2KCommListeners();
83
84 void HandleN0183(std::shared_ptr<const Nmea0183Msg> n0183_msg);
85 bool HandleN2K_Log(std::shared_ptr<const Nmea2000Msg> n2k_msg);
86 std::string N2K_LogMessage_Detail(unsigned int pgn);
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 std::shared_ptr< const NavMsg > &msg, bool is_filtered, bool is_error, const wxString error_msg="")
Logs an input message with context information.
Representation of message status as determined by the multiplexer.
Keeps listening over it's lifespan, removes itself on destruction.
Definition observable.h:131
Raw, undecoded messages definitions.
Item in the log window.
Definition nmea_log.h:10