FlightGear next
fgcom.hxx
Go to the documentation of this file.
1#ifndef FG_FGCOM_HXX
2#define FG_FGCOM_HXX
3
4// fgcom.hxx -- FGCom: Voice communication
5//
6// Written by Clement de l'Hamaide, started May 2013.
7//
8// This program is free software; you can redistribute it and/or
9// modify it under the terms of the GNU General Public License as
10// published by the Free Software Foundation; either version 2 of the
11// License, or (at your option) any later version.
12//
13// This program is distributed in the hope that it will be useful, but
14// WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16// General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21
22#include <simgear/structure/subsystem_mgr.hxx>
23#include <simgear/props/props.hxx>
24#include <simgear/math/sg_geodesy.hxx>
25
26class FGCom : public SGSubsystem,
27 public SGPropertyChangeListener
28{
29public:
30 FGCom();
31 virtual ~FGCom();
32
33 // Subsystem API.
34 void bind() override;
35 void init() override;
36 void postinit() override;
37 void shutdown() override;
38 void unbind() override;
39 void update(double dt) override;
40
41 // Subsystem identification.
42 static const char* staticSubsystemClassId() { return "fgcom"; }
43
44 virtual void valueChanged(SGPropertyNode *prop);
45 void iaxTextEvent(struct iaxc_ev_text text);
46
47private:
48 SGPropertyNode_ptr _ptt_node; // PTT; nonzero int indicating channel number (instrumentation/comm/[channel-1])
49 SGPropertyNode_ptr _selected_comm_node; // selected channel (fgcom); nonzero channel int indicating channel number (instrumentation/comm/[channel-1])
50 SGPropertyNode_ptr _commFrequencyNode; // current comm node in use; e.g. /instrumentation/comm[0]
51 SGPropertyNode_ptr _commVolumeNode; // current volume node in use; e.g. /instrumentation/comm[0]/volume
52 SGPropertyNode_ptr _test_node; // sim/fgcom/test
53 SGPropertyNode_ptr _text_node; // sim/fgcom/text
54 SGPropertyNode_ptr _server_node; // sim/fgcom/server
55 SGPropertyNode_ptr _enabled_node; // sim/fgcom/enabled
56 SGPropertyNode_ptr _version_node; // sim/version/flightgear
57 SGPropertyNode_ptr _micBoost_node; // sim/fgcom/mic-boost
58 SGPropertyNode_ptr _callsign_node; // sim/multiplay/callsign
59 SGPropertyNode_ptr _register_node; // sim/fgcom/register/enabled
60 SGPropertyNode_ptr _username_node; // sim/fgcom/register/username
61 SGPropertyNode_ptr _password_node; // sim/fgcom/register/password
62 SGPropertyNode_ptr _micLevel_node; // sim/fgcom/mic-level
63 SGPropertyNode_ptr _silenceThd_node; // sim/fgcom/silence-threshold
64 SGPropertyNode_ptr _speakerLevel_node; // sim/fgcom/speaker-level
65 SGPropertyNode_ptr _deviceID_node[4]; // sim/fgcom/device[n]/id
66 SGPropertyNode_ptr _deviceName_node[4]; // sim/fgcom/device[n]/name
67 SGPropertyNode_ptr _deviceInput_node[4]; // sim/fgcom/device[n]/available-input
68 SGPropertyNode_ptr _deviceOutput_node[4]; // sim/fgcom/device[n]/available-output
69 SGPropertyNode_ptr _selectedInput_node; // sim/fgcom/device-input
70 SGPropertyNode_ptr _selectedOutput_node; // sim/fgcom/device-output
71 SGPropertyNode_ptr _showMessages_node; // sim/fgcom/show-messages
72 SGPropertyNode_ptr _mpTransmitFrequencyNode; // sim/multiplay/comm-transmit-frequency-mhz
73 SGPropertyNode_ptr _mpTransmitPowerNode; // sim/multiplay/comm-transmit-power-norm
74
75 double _maxRange = 0.0;
76 double _minRange = 0.0;
77 double _currentCommFrequency = 0.0;
78 double _currentCallFrequency = 0.0;
79 bool _register = true;
80 bool _enabled = false;
81 bool _initialized = false;
82 int _regId = 0;
83 int _currentCallIdent = -1;
84 //int _callComm1;
85 int _listener_active = 0;
86 std::string _server;
87 std::string _callsign;
88 std::string _username;
89 std::string _password;
90 SGTimeStamp _processingTimer;
91 SGGeod _aptPos;
92
93 std::string computePhoneNumber(const double& freq, const std::string& icao) const;
94 std::string getAirportCode(const double& freq);
95// SGGeod getAirportPos(const double& freq) const;
96 void setupCommFrequency(int channel = -1);
97 double getCurrentFrequencyKhz() const;
98 double getCurrentCommVolume() const;
99 bool isInRange(const double& freq) const;
100
101 void updateCall();
102 void connectToCommFrequency();
103 void testMode(bool testMode);
104};
105
106#endif // of FG_FGCOM_HXX
107
108
FGCom()
Definition fgcom.cxx:102
void unbind() override
Definition fgcom.cxx:194
void postinit() override
Definition fgcom.cxx:226
virtual ~FGCom()
Definition fgcom.cxx:110
void update(double dt) override
Definition fgcom.cxx:465
void iaxTextEvent(struct iaxc_ev_text text)
Definition fgcom.cxx:83
void bind() override
Definition fgcom.cxx:116
static const char * staticSubsystemClassId()
Definition fgcom.hxx:42
void shutdown() override
Definition fgcom.cxx:476
virtual void valueChanged(SGPropertyNode *prop)
Definition fgcom.cxx:497
void init() override
Definition fgcom.cxx:210