need_update(true),
valid(false),
inrange(false),
+ dist(0.0),
+ heading(0.0),
goal_needle_deg(0.0),
et_flash_time(0.0),
ant_mode(0),
timer_mode(0),
count_mode(0),
rotation(0),
- on_off_vol_btn(0.5),
+ power_btn(true),
+ vol_btn(0.5),
adf_btn(true),
bfo_btn(false),
frq_btn(false),
last_flt_et_btn(false),
set_rst_btn(false),
last_set_rst_btn(false),
+ ident_btn(false),
freq(0.0),
stby_freq(0.0),
needle_deg(0.0),
// Destructor
-FGKR_87::~FGKR_87()
-{
+FGKR_87::~FGKR_87() {
delete term_tbl;
delete low_tbl;
delete high_tbl;
}
-void
-FGKR_87::init ()
-{
+void FGKR_87::init () {
morse.init();
update(0); // FIXME: use dt
}
-void
-FGKR_87::bind ()
-{
+
+void FGKR_87::bind () {
// internal values
- fgTie("/radios/kr-87/internal/ident", this,
- &FGKR_87::get_ident_btn,
- &FGKR_87::set_ident_btn);
- fgSetArchivable("/radios/kr-87/internal/ident");
+ fgTie("/radios/kr-87/internal/valid", this, &FGKR_87::get_valid);
fgTie("/radios/kr-87/internal/inrange", this, &FGKR_87::get_inrange);
+ fgTie("/radios/kr-87/internal/dist", this, &FGKR_87::get_dist);
fgTie("/radios/kr-87/internal/heading", this, &FGKR_87::get_heading);
// modes
fgTie("/radios/kr-87/inputs/rotation-deg", this,
&FGKR_87::get_rotation, &FGKR_87::set_rotation);
fgSetArchivable("/radios/kr-87/inputs/rotation-deg");
- fgTie("/radios/kr-87/inputs/on-off-volume", this,
- &FGKR_87::get_on_off_vol_btn,
- &FGKR_87::set_on_off_vol_btn);
- fgSetArchivable("/radios/kr-87/inputs/on-off-volume");
+ fgTie("/radios/kr-87/inputs/power-btn", this,
+ &FGKR_87::get_power_btn,
+ &FGKR_87::set_power_btn);
+ fgSetArchivable("/radios/kr-87/inputs/power-btn");
+ fgTie("/radios/kr-87/inputs/volume", this,
+ &FGKR_87::get_vol_btn,
+ &FGKR_87::set_vol_btn);
+ fgSetArchivable("/radios/kr-87/inputs/volume");
fgTie("/radios/kr-87/inputs/adf-btn", this,
&FGKR_87::get_adf_btn,
&FGKR_87::set_adf_btn);
fgTie("/radios/kr-87/inputs/set-rst-btn", this,
&FGKR_87::get_set_rst_btn,
&FGKR_87::set_set_rst_btn);
+ fgTie("/radios/kr-87/inputs/ident-btn", this,
+ &FGKR_87::get_ident_btn, &FGKR_87::set_ident_btn);
// outputs
fgTie("/radios/kr-87/outputs/selected-khz", this,
fgTie("/radios/kr-87/annunciators/et", this, &FGKR_87::get_et_ann );
}
-void
-FGKR_87::unbind ()
-{
+
+void FGKR_87::unbind () {
// internal values
- fgUntie("/radios/kr-87/internal/ident");
+ fgUntie("/radios/kr-87/internal/valid");
fgUntie("/radios/kr-87/internal/inrange");
+ fgUntie("/radios/kr-87/internal/dist");
fgUntie("/radios/kr-87/internal/heading");
// modes
// input and buttons
fgUntie("/radios/kr-87/inputs/rotation-deg");
- fgUntie("/radios/kr-87/inputs/on-off-volume");
+ fgUntie("/radios/kr-87/inputs/power-btn");
+ fgUntie("/radios/kr-87/inputs/volume");
fgUntie("/radios/kr-87/inputs/adf-btn");
fgUntie("/radios/kr-87/inputs/bfo-btn");
fgUntie("/radios/kr-87/inputs/frq-btn");
fgUntie("/radios/kr-87/inputs/flt-et-btn");
fgUntie("/radios/kr-87/inputs/set-rst-btn");
+ fgUntie("/radios/kr-87/inputs/ident-btn");
// outputs
fgUntie("/radios/kr-87/outputs/selected-khz");
// Update the various nav values based on position and valid tuned in navs
-void
-FGKR_87::update( double dt )
-{
+void FGKR_87::update( double dt ) {
double acft_lon = lon_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
double acft_lat = lat_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
double acft_elev = alt_node->getDoubleValue() * SG_FEET_TO_METER;
// Radio
////////////////////////////////////////////////////////////////////////
- if ( on_off_vol_btn >= 0.01 ) {
+ if ( power_btn ) {
// buttons
if ( adf_btn == 0 ) {
ant_mode = 1;
et_ann = false;
}
-
+ // formatted timer
+ double time;
+ int hours, min, sec;
+ if ( timer_mode == 0 ) {
+ time = flight_timer;
+ } else {
+ time = elapsed_timer;
+ }
+ // cout << time << endl;
+ hours = (int)(time / 3600.0);
+ time -= hours * 3600.00;
+ min = (int)(time / 60.0);
+ time -= min * 60.0;
+ sec = (int)time;
+ int big, little;
+ if ( hours > 0 ) {
+ big = hours;
+ if ( big > 99 ) {
+ big = 99;
+ }
+ little = min;
+ } else {
+ big = min;
+ little = sec;
+ }
+ if ( big > 99 ) {
+ big = 99;
+ }
+ char formatted_timer[128];
+ // cout << big << ":" << little << endl;
+ snprintf(formatted_timer, 6, "%02d:%02d", big, little);
+ fgSetString( "/radios/kr-87/outputs/timer-string", formatted_timer );
+
while ( goal_needle_deg < 0.0 ) { goal_needle_deg += 360.0; }
while ( goal_needle_deg >= 360.0 ) { goal_needle_deg -= 360.0; }
#ifdef ENABLE_AUDIO_SUPPORT
if ( valid && inrange ) {
- // play station ident via audio system if on + ident,
+ // play station ident via audio system if on + ident_btn,
// otherwise turn it off
- if ( on_off_vol_btn >= 0.01 && ident_btn ) {
+ if ( vol_btn >= 0.01 && ident_btn ) {
FGSimpleSound *sound;
sound = globals->get_soundmgr()->find( "adf-ident" );
if ( sound != NULL ) {
- sound->set_volume( on_off_vol_btn );
+ sound->set_volume( vol_btn );
} else {
SG_LOG( SG_COCKPIT, SG_ALERT, "Can't find adf-ident sound" );
}
// Update current nav/adf radio stations based on current postition
-void FGKR_87::search()
-{
+void FGKR_87::search() {
double acft_lon = lon_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
double acft_lat = lat_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
double acft_elev = alt_node->getDoubleValue() * SG_FEET_TO_METER;