]> git.mxchange.org Git - flightgear.git/blob - src/Cockpit/radiostack.cxx
Don't scale elevator by 0.5.
[flightgear.git] / src / Cockpit / radiostack.cxx
1 // radiostack.cxx -- class to manage an instance of the radio stack
2 //
3 // Written by Curtis Olson, started April 2000.
4 //
5 // Copyright (C) 2000  Curtis L. Olson - curt@flightgear.org
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 // General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 //
21 // $Id$
22
23
24 #ifdef HAVE_CONFIG_H
25 #  include <config.h>
26 #endif
27
28 #include <stdio.h>      // snprintf
29
30 #include <simgear/compiler.h>
31 #include <simgear/math/sg_random.h>
32
33 #include <Aircraft/aircraft.hxx>
34 #include <Navaids/ilslist.hxx>
35 #include <Navaids/mkrbeacons.hxx>
36 #include <Navaids/navlist.hxx>
37
38 #include "radiostack.hxx"
39
40 #include <string>
41 SG_USING_STD(string);
42
43
44 FGRadioStack *current_radiostack;
45
46
47 // Constructor
48 FGRadioStack::FGRadioStack() {
49 }
50
51
52 // Destructor
53 FGRadioStack::~FGRadioStack() 
54 {
55     adf.unbind();
56     beacon.unbind();
57     navcom1.unbind();
58     navcom2.unbind();
59     xponder.unbind();
60 }
61
62
63 void
64 FGRadioStack::init ()
65 {
66     navcom1.set_bind_index( 0 );
67     navcom1.init();
68
69     navcom2.set_bind_index( 1 );
70     navcom2.init();
71
72     adf.init();
73     beacon.init();
74     xponder.init();
75
76     search();
77     update(0);                  // FIXME: use dt
78
79     // Search radio database once per second
80     globals->get_event_mgr()->add( "fgRadioSearch()", current_radiostack,
81                                    &FGRadioStack::search, 1000 );
82 }
83
84
85 void
86 FGRadioStack::bind ()
87 {
88     adf.bind();
89     beacon.bind();
90     dme.bind();
91     navcom1.set_bind_index( 0 );
92     navcom1.bind();
93     navcom2.set_bind_index( 1 );
94     navcom2.bind();
95     xponder.bind();
96 }
97
98
99 void
100 FGRadioStack::unbind ()
101 {
102     adf.unbind();
103     beacon.unbind();
104     dme.unbind();
105     navcom1.unbind();
106     navcom2.unbind();
107     xponder.unbind();
108 }
109
110
111 // Update the various nav values based on position and valid tuned in navs
112 void 
113 FGRadioStack::update(double dt) 
114 {
115     adf.update( dt );
116     beacon.update( dt );
117     navcom1.update( dt );
118     navcom2.update( dt );
119     dme.update( dt );           // dme is updated after the navcom's
120     xponder.update( dt );
121 }
122
123
124 // Update current nav/adf radio stations based on current postition
125 void FGRadioStack::search() 
126 {
127     adf.search();
128     beacon.search();
129     navcom1.search();
130     navcom2.search();
131     dme.search();
132     xponder.search();
133 }