var GenericController =
{

  new : func (isfd)
  {
    var obj = {
        parents : [GenericController],
        _isfd: isfd,
        _altimeterProp : "/instrumentation/altimeter/",
        _airspeedProp : "/instrumentation/airspeed-indicator/",
        _attitudeProp : "/instrumentation/attitude-indicator/",
        _navRadio: "/instrumentation/nav[0]/",
        _isSTDBaro : 0,
        _isHPa : 1,
        _approachMode : 0
    };

    return obj;
  },

  update : func
  {
  },

  getAltitudeFt : func
  {
    return getprop(me._altimeterProp ~ "indicated-altitude-ft");
  },

  getIndicatedAirspeedKnots : func
  {
    return getprop(me._airspeedProp ~ "indicated-speed-kt");
  },

  getHeadingDeg : func
  {
    # compass / gyro source for this?
    return getprop("/orientation/heading-deg");
  },

  getPitchDeg : func
  {
    return getprop(me._attitudeProp ~ "indicated-pitch-deg");
  },

  getBankAngleDeg : func
  {
    return getprop(me._attitudeProp ~ "indicated-roll-deg");
  },

  isSTDBarometricPressure : func
  {
    return me._isSTDBaro;
  },

  toggleSTDBarometricPressure : func 
  {
    me._isSTDBaro = (me._isSTDBaro == 0);
  },

  isHPaBarometer : func
  {
    return me._isHPa;
  },

  toggleHPaBarometer : func 
  {
    me._isHPa = (me._isHPa == 0);
  },
  
  getBarometricPressureSettingInHg : func
  {
    if (me._isSTDBaro) return 29.92;
    return getprop(me._altimeterProp ~ "setting-inhg");
  },

  getBarometricPressureSettingHPa : func
  {
    if (me._isSTDBaro) return 1013;
    return getprop(me._altimeterProp ~ "setting-hpa");
  },

  setBarometricPressureSettingInHg : func (inHg)
  {
    setprop(me._altimeterProp ~ "setting-inhg", inHg);
  },

  setBarometricPressureSettingHPa : func (hpa)
  {
    setprop(me._altimeterProp ~ "setting-hpa", hpa);
  },

  isApproachMode: func { return (me._approachMode != 0); },
  toggleApproachMode : func { me._approachMode = (me._approachMode == 0); },

  isLocalizerValid: func { return getprop(me._navRadio ~ "in-range"); },
  isGSValid: func { return getprop(me._navRadio ~ "gs-in-range");},

  getLocalizerDeviationNorm: func {
    return getprop(me._navRadio ~ "heading-needle-deflection-norm") or 0;
  },

  getGSDeviationNorm: func {
    return getprop(me._navRadio ~ "gs-needle-deflection-norm") or 0;
  },
}