GSDI::GSDI(SGPropertyNode *node) :
- _name("gsdi"),
- _num(0)
-{
- for (int i = 0; i < node->nChildren(); ++i) {
- SGPropertyNode *child = node->getChild(i);
- string name = child->getName();
-
- if (name == "name") {
- _name = child->getStringValue();
- } else if (name == "number") {
- _num = child->getIntValue();
- } else {
- SG_LOG(SG_INSTR, SG_WARN, "Error in gsdi config logic");
- if (_name.length())
- SG_LOG(SG_INSTR, SG_WARN, "Section = " << _name);
- }
- }
-}
-
-
-GSDI::GSDI()
+ _name(node->getStringValue("name", "gsdi")),
+ _num(node->getIntValue("number", 0))
{
}
void GSDI::init()
{
- string branch;
+ std::string branch;
branch = "/instrumentation/" + _name;
SGPropertyNode *n = fgGetNode(branch.c_str(), _num, true);
_serviceableN = n->getNode("serviceable", true);
// input
- _headingN = fgGetNode("/orientation/heading-deg", true);
_ubodyN = fgGetNode("/velocities/uBody-fps", true);
_vbodyN = fgGetNode("/velocities/vBody-fps", true);
- _wind_dirN = fgGetNode("/environment/wind-from-heading-deg", true);
- _wind_speedN = fgGetNode("/environment/wind-speed-kt", true);
-
+
// output
_drift_uN = n->getNode("drift-u-kt", true);
_drift_vN = n->getNode("drift-v-kt", true);
if (!_serviceableN->getBoolValue())
return;
- double wind_speed = _wind_speedN->getDoubleValue();
- double rel_wind_dir = (_headingN->getDoubleValue() - _wind_dirN->getDoubleValue())
- * SGD_DEGREES_TO_RADIANS;
- double wind_u = wind_speed * cos(rel_wind_dir);
- double wind_v = wind_speed * sin(rel_wind_dir);
-
- double u = _ubodyN->getDoubleValue() * SG_FPS_TO_KT - wind_u;
- double v = _vbodyN->getDoubleValue() * SG_FPS_TO_KT + wind_v;
+ double u = _ubodyN->getDoubleValue() * SG_FPS_TO_KT;
+ double v = _vbodyN->getDoubleValue() * SG_FPS_TO_KT;
double speed = sqrt(u * u + v * v);
double angle = atan2(v, u) * SGD_RADIANS_TO_DEGREES;