1
0
Fork 0
fgdata/Aircraft/c172p/Nasal/kr87.nas
torsten 8f29103bbe - use named arg instead of arg[n]
- save state to aircraft.data
2009-03-06 12:42:34 +00:00

184 lines
4.7 KiB
Text

#
# This Timer is for stop-watches
#
# ./time (double) elapsed time since last start or reset
#
# ./running (bool) true if timer is running, false if stopped
# ./start-time (double) timestamp when the timer was last started or reset
var elapsedTimeSecN = props.globals.getNode( "/sim/time/elapsed-sec" );
var timer = {
new : func(base) {
var m = { parents: [timer] };
m.base = base;
m.baseN = props.globals.getNode( m.base, 1 );
m.timeN = m.baseN.initNode( "time", 0.0 );
m.runningN = m.baseN.initNode( "running", 0, "BOOL" );
m.startTimeN = m.baseN.initNode( "start-time", -1.0 );
return m;
},
getTime : func {
return me.timeN.getDoubleValue();
},
start : func {
me.runningN.setBoolValue( 1 );
},
stop : func {
me.runningN.setBoolValue( 0 );
},
reset : func {
me.startTimeN.setDoubleValue( elapsedTimeSecN.getValue() );
me.timeN.setDoubleValue( 0 );
},
restart : func {
me.reset();
me.start();
},
# return integer coded time as hmmss
computeBCDTime : func {
var t = me.timeN.getValue();
var h = int(t / 3600);
var t = t - (h*3600);
var m = int(t / 60 );
var t = t - (m*60);
var s = int(t);
return h * 10000 + m * 100 + s;
},
update : func {
if( me.runningN.getValue() ) {
me.timeN.setDoubleValue( elapsedTimeSecN.getValue() - me.startTimeN.getValue() );
}
}
};
####################################################################
# KR87
var kr87 = {
new : func(base) {
var m = { parents: [kr87] };
m.base = base;
m.baseN = props.globals.getNode( m.base, 1 );
m.flt = timer.new( m.base ~ "/flight-timer" );
m.flt.restart();
m.et = timer.new( m.base ~ "/enroute-timer" );
m.et.restart();
m.displayModeN = m.baseN.initNode( "display-mode", 0, "INT" );
m.rightDisplayN = m.baseN.getNode( "right-display", 1 );
m.standbyFrequencyN = m.baseN.getNode( "frequencies/standby-khz", 1 );
# will be set from audiopanel
# m.baseN.getNode( "ident-audible" ).setBoolValue( 1 );
m.volumeNormN = m.baseN.initNode( "volume-norm", 0.0 );
m.power = 0;
m.powerButtonN = m.baseN.initNode( "power-btn", 0, "BOOL" );
m.powerButtonN.setBoolValue( m.volumeNormN.getValue() != 0 );
m.setButtonN = m.baseN.initNode( "set-btn", 0, "BOOL" );
m.powerButtonN.setBoolValue( m.powerButtonN.getValue() );
m.adfButtonN = m.baseN.initNode( "adf-btn", 0, "BOOL" );
m.bfoButtonN = m.baseN.initNode( "bfo-btn", 0, "BOOL" );
m.modeN = m.baseN.getNode( "mode" );
aircraft.data.add(
m.adfButtonN,
m.bfoButtonN,
m.volumeNormN,
m.powerButtonN,
m.standbyFrequencyN,
m.baseN.getNode( "frequencies/selected-khz", 1 )
);
setlistener( m.base ~ "/adf-btn", func { m.modeButtonListener() } );
setlistener( m.base ~ "/bfo-btn", func { m.modeButtonListener() } );
m.modeButtonListener();
return m;
},
modeButtonListener : func {
if( me.adfButtonN.getBoolValue() ) {
if( me.bfoButtonN.getBoolValue() ) {
me.modeN.setValue( "bfo" );
} else {
me.modeN.setValue( "adf" );
}
} else {
me.modeN.setValue( "ant" );
}
},
powerButtonListener : func(n) {
if( n.getBoolValue() and !me.power ) {
# power on, restart timer and start with FRQ display
me.et.restart();
me.flt.restart();
me.displayModeN.setIntValue( 0 );
}
me.power = me.powerButtonN.getValue();
},
update : func {
me.flt.update();
me.et.update();
var m = me.displayModeN.getValue();
if( m == 0 ) {
# FRQ
me.rightDisplayN.setIntValue( me.standbyFrequencyN.getValue() );
}
# the display works up to 99h, 59m, 59s and then
# displays 00:00 again. Don't know if this is the like the true kr87
# handles this - never flewn that long...
if( m == 1 ) {
# FLT, show mm:ss up to 59:59, then hh:mm
var t = me.flt.computeBCDTime();
if( t >= 10000 ) {
t = t / 100;
}
me.rightDisplayN.setIntValue( t );
}
if( m == 2 ) {
# ET, show mm:ss up to 59:59, then hh:mm
t = me.et.computeBCDTime();
if( t >= 10000 ) {
t = t / 100;
}
me.rightDisplayN.setIntValue( t );
}
if( me.setButtonN.getValue() ) {
me.et.restart();
}
if( me.powerButtonN.getBoolValue() and !me.power ) {
# power on, restart timer and start with FRQ display
me.et.restart();
me.flt.restart();
me.displayModeN.setIntValue( 0 );
}
me.power = me.powerButtonN.getValue();
settimer( func { me.update() }, 0.1 );
}
};
var kr87_0 = kr87.new( "/instrumentation/adf[0]" ).update();
#setlistener("/sim/signals/fdm-initialized", func { timer_update() } );