Migrate transponder to AbstractInstrument
This commit is contained in:
parent
ff009bc58f
commit
a26c671200
4 changed files with 51 additions and 44 deletions
|
@ -70,7 +70,7 @@ void AbstractInstrument::unbind()
|
|||
|
||||
bool AbstractInstrument::isServiceableAndPowered() const
|
||||
{
|
||||
if (!_serviceableNode->getBoolValue() || !_powerButtonNode->getBoolValue())
|
||||
if (!_serviceableNode->getBoolValue() || !isPowerSwitchOn())
|
||||
return false;
|
||||
|
||||
if (_powerSupplyNode->getDoubleValue() < _minimumSupplyVolts)
|
||||
|
@ -78,3 +78,13 @@ bool AbstractInstrument::isServiceableAndPowered() const
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
void AbstractInstrument::setMinimumSupplyVolts(double v)
|
||||
{
|
||||
_minimumSupplyVolts = v;
|
||||
}
|
||||
|
||||
bool AbstractInstrument::isPowerSwitchOn() const
|
||||
{
|
||||
return _powerButtonNode->getBoolValue();
|
||||
}
|
||||
|
|
|
@ -39,6 +39,10 @@ protected:
|
|||
int number() const { return _index; }
|
||||
|
||||
void unbind() override;
|
||||
|
||||
void setMinimumSupplyVolts(double v);
|
||||
|
||||
virtual bool isPowerSwitchOn() const;
|
||||
private:
|
||||
std::string _name;
|
||||
int _index = 0;
|
||||
|
|
|
@ -45,9 +45,7 @@
|
|||
// this is /instrumentation/airspeed-indicator/indicated-speed-kt but this can be
|
||||
// changed by setting the airspeed-path property as shown above.
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
#include <config.h>
|
||||
|
||||
#include "transponder.hxx"
|
||||
|
||||
|
@ -66,15 +64,17 @@ const int INVALID_ALTITUDE = -9999;
|
|||
const int INVALID_AIRSPEED = -9999;
|
||||
const int INVALID_ID = -9999;
|
||||
|
||||
Transponder::Transponder(SGPropertyNode *node)
|
||||
:
|
||||
_identMode(false),
|
||||
_name(node->getStringValue("name", "transponder")),
|
||||
_num(node->getIntValue("number", 0)),
|
||||
_mode((Mode) node->getIntValue("mode", 1)),
|
||||
_listener_active(0)
|
||||
Transponder::Transponder(SGPropertyNode *node) :
|
||||
_mode((Mode) node->getIntValue("mode", 1))
|
||||
{
|
||||
_requiredBusVolts = node->getDoubleValue("bus-volts", 8.0);
|
||||
readConfig(node, "transponder");
|
||||
|
||||
// ensure older power-supply name works
|
||||
if (node->hasChild("bus-volts")) {
|
||||
SG_LOG(SG_INSTR, SG_DEV_WARN, "Transponder: use new supply-volatge prop: 'minimum-supply-volts' instead of 'bus-volts'");
|
||||
setMinimumSupplyVolts(node->getDoubleValue("bus-volts", 8.0));
|
||||
}
|
||||
|
||||
_altitudeSourcePath = node->getStringValue("encoder-path", "/instrumentation/altimeter");
|
||||
_autoGroundPath = node->getStringValue("auto-ground");
|
||||
_airspeedSourcePath = node->getStringValue("airspeed-path", "/instrumentation/airspeed-indicator/indicated-speed-kt");
|
||||
|
@ -89,10 +89,10 @@ Transponder::~Transponder()
|
|||
|
||||
void Transponder::init()
|
||||
{
|
||||
SGPropertyNode *node = fgGetNode("/instrumentation/" + _name, _num, true );
|
||||
SGPropertyNode *node = fgGetNode(nodePath(), true);
|
||||
initServicePowerProperties(node);
|
||||
|
||||
// Inputs
|
||||
_busPower_node = fgGetNode("/systems/electrical/outputs/transponder", true);
|
||||
_pressureAltitude_node = fgGetNode(_altitudeSourcePath, true);
|
||||
_autoGround_node = fgGetNode(_autoGroundPath, true);
|
||||
_airspeedIndicator_node = fgGetNode(_airspeedSourcePath, true);
|
||||
|
@ -123,9 +123,6 @@ void Transponder::init()
|
|||
_identBtn_node->setBoolValue(false);
|
||||
_identBtn_node->addChangeListener(this);
|
||||
|
||||
_serviceable_node = node->getChild("serviceable", 0, true);
|
||||
_serviceable_node->setBoolValue(true);
|
||||
|
||||
_idCode_node = node->getChild("id-code", 0, true);
|
||||
_idCode_node->addChangeListener(this);
|
||||
// set default, but don't overwrite value from defaults.xml or -set.xml
|
||||
|
@ -153,7 +150,7 @@ void Transponder::init()
|
|||
void Transponder::bind()
|
||||
{
|
||||
if (_kt70Compat) {
|
||||
SGPropertyNode *node = fgGetNode("/instrumentation/" + _name, _num, true );
|
||||
SGPropertyNode *node = fgGetNode(nodePath(), true );
|
||||
_tiedProperties.setRoot(node);
|
||||
|
||||
_tiedProperties.Tie("annunciators/fl", this,
|
||||
|
@ -174,12 +171,12 @@ void Transponder::bind()
|
|||
void Transponder::unbind()
|
||||
{
|
||||
_tiedProperties.Untie();
|
||||
AbstractInstrument::unbind();
|
||||
}
|
||||
|
||||
|
||||
void Transponder::update(double dt)
|
||||
{
|
||||
if (has_power() && _serviceable_node->getBoolValue())
|
||||
if (isServiceableAndPowered())
|
||||
{
|
||||
// Mode C & S send also altitude
|
||||
Mode effectiveMode = (_knob == KNOB_ALT || _knob == KNOB_GROUND) ? _mode : MODE_A;
|
||||
|
@ -243,7 +240,7 @@ void Transponder::update(double dt)
|
|||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
{ // un-powered or u/s
|
||||
_altitude_node->setIntValue(INVALID_ALTITUDE);
|
||||
_altitudeValid_node->setBoolValue(false);
|
||||
_ident_node->setBoolValue(false);
|
||||
|
@ -314,11 +311,6 @@ void Transponder::valueChanged(SGPropertyNode *prop)
|
|||
_listener_active--;
|
||||
}
|
||||
|
||||
bool Transponder::has_power() const
|
||||
{
|
||||
return (_knob_node->getIntValue() > KNOB_STANDBY) && (_busPower_node->getDoubleValue() > _requiredBusVolts);
|
||||
}
|
||||
|
||||
bool Transponder::getFLAnnunciator() const
|
||||
{
|
||||
return (_knob == KNOB_ALT) || (_knob == KNOB_GROUND) || (_knob == KNOB_TEST);
|
||||
|
@ -349,3 +341,9 @@ bool Transponder::getReplyAnnunciator() const
|
|||
return _identMode || (_knob == KNOB_TEST);
|
||||
}
|
||||
|
||||
bool Transponder::isPowerSwitchOn() const
|
||||
{
|
||||
return (_knob_node->getIntValue() > KNOB_STANDBY);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -22,25 +22,24 @@
|
|||
#ifndef TRANSPONDER_HXX
|
||||
#define TRANSPONDER_HXX 1
|
||||
|
||||
#ifndef __cplusplus
|
||||
# error This library requires C++
|
||||
#endif
|
||||
|
||||
#include <Main/fg_props.hxx>
|
||||
#include <Instrumentation/AbstractInstrument.hxx>
|
||||
|
||||
#include <simgear/structure/subsystem_mgr.hxx>
|
||||
#include <simgear/props/tiedpropertylist.hxx>
|
||||
|
||||
class Transponder : public SGSubsystem, public SGPropertyChangeListener
|
||||
class Transponder : public AbstractInstrument, public SGPropertyChangeListener
|
||||
{
|
||||
public:
|
||||
Transponder(SGPropertyNode *node);
|
||||
virtual ~Transponder();
|
||||
|
||||
virtual void init ();
|
||||
virtual void update (double dt);
|
||||
virtual void bind();
|
||||
virtual void unbind();
|
||||
void init () override;
|
||||
void update (double dt) override;
|
||||
void bind() override;
|
||||
void unbind() override;
|
||||
|
||||
protected:
|
||||
bool isPowerSwitchOn() const override;
|
||||
|
||||
private:
|
||||
enum Mode
|
||||
|
@ -73,8 +72,6 @@ private:
|
|||
SGPropertyNode_ptr _pressureAltitude_node;
|
||||
SGPropertyNode_ptr _autoGround_node;
|
||||
SGPropertyNode_ptr _airspeedIndicator_node;
|
||||
SGPropertyNode_ptr _busPower_node;
|
||||
SGPropertyNode_ptr _serviceable_node;
|
||||
|
||||
SGPropertyNode_ptr _mode_node;
|
||||
SGPropertyNode_ptr _knob_node;
|
||||
|
@ -84,7 +81,7 @@ private:
|
|||
simgear::TiedPropertyList _tiedProperties;
|
||||
|
||||
SGPropertyNode_ptr _identBtn_node;
|
||||
bool _identMode;
|
||||
bool _identMode = false;
|
||||
bool _kt70Compat;
|
||||
|
||||
// Outputs
|
||||
|
@ -96,20 +93,18 @@ private:
|
|||
SGPropertyNode_ptr _airspeed_node;
|
||||
|
||||
// Internal
|
||||
std::string _name;
|
||||
int _num;
|
||||
Mode _mode;
|
||||
KnobPosition _knob;
|
||||
double _identTime;
|
||||
int _listener_active;
|
||||
int _listener_active = 0;
|
||||
double _requiredBusVolts;
|
||||
std::string _altitudeSourcePath;
|
||||
std::string _autoGroundPath;
|
||||
std::string _airspeedSourcePath;
|
||||
|
||||
void valueChanged (SGPropertyNode *);
|
||||
void valueChanged (SGPropertyNode *) override;
|
||||
|
||||
int setMinMax(int val);
|
||||
bool has_power() const;
|
||||
};
|
||||
|
||||
#endif // TRANSPONDER_HXX
|
||||
|
|
Loading…
Add table
Reference in a new issue