]> git.mxchange.org Git - flightgear.git/blobdiff - src/Instrumentation/mk_viii.cxx
Autopilot: clean up the helpers code (which drives the various /internal/) properties...
[flightgear.git] / src / Instrumentation / mk_viii.cxx
index a310297d63febeea6b0812bec4c10e7905a53c3d..64e187f6fb01db14c14341ed2e9278e20f6d57cb 100755 (executable)
 
 using std::string;
 
-#include "Airports/runways.hxx"
-#include "Airports/simple.hxx"
+#include <Airports/runways.hxx>
+#include <Airports/simple.hxx>
 #ifndef _MSC_VER
-#  include "Include/version.h"
+#  include <Include/version.h>
 #endif
-#include "Main/fg_props.hxx"
-#include "Main/globals.hxx"
+#include <Main/fg_props.hxx>
+#include <Main/globals.hxx>
 #include "instrument_mgr.hxx"
 #include "mk_viii.hxx"
 
@@ -549,7 +549,7 @@ MK_VIII::ConfigurationModule::read_aircraft_mode_type_select (int value)
     { 255,     &m1_t1, &m2_t1, &m3_t1, &m4_t1, m6_t2, &f_fast, 2000 }
   };
 
-  for (int i = 0; i < n_elements(aircraft_types); i++)
+  for (size_t i = 0; i < n_elements(aircraft_types); i++)
     if (aircraft_types[i].type == value)
       {
        mk->mode1_handler.conf.envelopes = aircraft_types[i].m1;
@@ -625,7 +625,7 @@ MK_VIII::ConfigurationModule::read_altitude_callouts (int value)
     { 101, { FIELD_500_ABOVE, 0 } }
   };
 
-  int i;
+  unsigned i;
 
   mk->mode6_handler.conf.minimums_enabled = false;
   mk->mode6_handler.conf.smart_500_enabled = false;
@@ -656,7 +656,7 @@ MK_VIII::ConfigurationModule::read_altitude_callouts (int value)
              break;
 
            default:
-             for (int k = 0; k < n_altitude_callouts; k++)
+             for (unsigned k = 0; k < n_altitude_callouts; k++)
                if (mk->mode6_handler.altitude_callout_definitions[k] == values[i].callouts[j])
                  mk->mode6_handler.conf.altitude_callouts_enabled[k] = true;
              break;
@@ -773,7 +773,7 @@ MK_VIII::ConfigurationModule::read_input_output_discrete_type_select (int value)
     { 255,     { false, false }, true, false, true }
   };
 
-  for (int i = 0; i < n_elements(io_types); i++)
+  for (size_t i = 0; i < n_elements(io_types); i++)
     if (io_types[i].type == value)
       {
        mk->io_handler.conf.lamp = &io_types[i].lamp_conf;
@@ -801,7 +801,7 @@ MK_VIII::ConfigurationModule::read_audio_output_level (int value)
     { 4, -24 }
   };
 
-  for (int i = 0; i < n_elements(values); i++)
+  for (size_t i = 0; i < n_elements(values); i++)
     if (values[i].id == value)
       {
        mk->voice_player.set_volume(mk->voice_player.conf.volume = modify_amplitude(1.0, values[i].relative_dB));
@@ -1550,7 +1550,7 @@ MK_VIII::IOHandler::update_egpws_alert_discrete_1 ()
        { 19, mk_voice(minimums_minimums) }
       };
 
-      for (int i = 0; i < n_elements(voices); i++)
+      for (size_t i = 0; i < n_elements(voices); i++)
        if (voices[i].voice == mk->voice_player.voice)
          {
            mk_aoutput(egpws_alert_discrete_1) = 1 << voices[i].bit;
@@ -1584,7 +1584,7 @@ MK_VIII::IOHandler::update_egpwc_logic_discretes ()
     { 25, mk_alert(MODE5_SOFT) | mk_alert(MODE5_HARD) }
   };
 
-  for (int i = 0; i < n_elements(logic); i++)
+  for (size_t i = 0; i < n_elements(logic); i++)
     if (mk_test_alerts(logic[i].alerts))
       mk_aoutput(egpwc_logic_discretes) |= 1 << logic[i].bit;
 }
@@ -1610,7 +1610,7 @@ MK_VIII::IOHandler::update_mode6_callouts_discrete_1 ()
        { 25, mk_altitude_voice(Mode6Handler::ALTITUDE_CALLOUT_300) }
       };
 
-      for (int i = 0; i < n_elements(voices); i++)
+      for (size_t i = 0; i < n_elements(voices); i++)
        if (voices[i].voice == mk->voice_player.voice)
          {
            mk_aoutput(mode6_callouts_discrete_1) = 1 << voices[i].bit;
@@ -1639,7 +1639,7 @@ MK_VIII::IOHandler::update_mode6_callouts_discrete_2 ()
        { 23, mk_voice(five_hundred_above) }
       };
 
-      for (int i = 0; i < n_elements(voices); i++)
+      for (size_t i = 0; i < n_elements(voices); i++)
        if (voices[i].voice == mk->voice_player.voice)
          {
            mk_aoutput(mode6_callouts_discrete_2) = 1 << voices[i].bit;
@@ -2049,7 +2049,7 @@ MK_VIII::IOHandler::present_status ()
            "TCF INPUTS INVALID"
          };
 
-         for (int i = 0; i < n_elements(fault_names); i++)
+         for (size_t i = 0; i < n_elements(fault_names); i++)
            if (mk->fault_handler.faults[i])
              present_status_subitem(fault_names[i]);
        }
@@ -2075,7 +2075,7 @@ MK_VIII::IOHandler::present_status ()
     "VOLUME SELECT"
   };
 
-  for (int i = 0; i < n_elements(category_names); i++)
+  for (size_t i = 0; i < n_elements(category_names); i++)
     {
       std::ostringstream value;
       value << "= " << mk->configuration_module.effective_categories[i];
@@ -2254,7 +2254,7 @@ MK_VIII::VoicePlayer::init ()
   make_voice(&voices.too_low_gear, "too-low-gear");
   make_voice(&voices.too_low_terrain, "too-low-terrain");
 
-  for (int i = 0; i < n_altitude_callouts; i++)
+  for (unsigned i = 0; i < n_altitude_callouts; i++)
     {
       std::ostringstream name;
       name << "altitude-" << mk->mode6_handler.altitude_callout_definitions[i];
@@ -2587,7 +2587,7 @@ MK_VIII::SelfTestHandler::run ()
       if (mk->mode6_handler.conf.above_field_voice)
        return play(mk->mode6_handler.conf.above_field_voice);
     }
-  for (int i = 0; i < n_altitude_callouts; i++)
+  for (unsigned i = 0; i < n_altitude_callouts; i++)
     if (! was_here_offset(i))
       {
        if (mk->mode6_handler.conf.altitude_callouts_enabled[i])
@@ -4011,14 +4011,14 @@ MK_VIII::Mode6Handler::reset_minimums ()
 void
 MK_VIII::Mode6Handler::reset_altitude_callouts ()
 {
-  for (int i = 0; i < n_altitude_callouts; i++)
+  for (unsigned i = 0; i < n_altitude_callouts; i++)
     altitude_callouts_issued[i] = false;
 }
 
 bool
 MK_VIII::Mode6Handler::is_playing_altitude_callout ()
 {
-  for (int i = 0; i < n_altitude_callouts; i++)
+  for (unsigned i = 0; i < n_altitude_callouts; i++)
     if (mk->voice_player.voice == mk_altitude_voice(i)
        || mk->voice_player.next_voice == mk_altitude_voice(i))
       return true;
@@ -4092,7 +4092,7 @@ MK_VIII::Mode6Handler::boot ()
   last_radio_altitude.set(&mk_data(radio_altitude));
 
   // [SPEC] 6.4.2
-  for (int i = 0; i < n_altitude_callouts; i++)
+  for (unsigned i = 0; i < n_altitude_callouts; i++)
     altitude_callouts_issued[i] = ! mk_data(radio_altitude).ncd
       && mk_data(radio_altitude).get() <= altitude_callout_definitions[i];
 
@@ -4134,7 +4134,7 @@ MK_VIII::Mode6Handler::set_volume (double volume)
 {
   mk_voice(minimums_minimums)->set_volume(volume);
   mk_voice(five_hundred_above)->set_volume(volume);
-  for (int i = 0; i < n_altitude_callouts; i++)
+  for (unsigned i = 0; i < n_altitude_callouts; i++)
     mk_altitude_voice(i)->set_volume(volume);
 }
 
@@ -4144,7 +4144,7 @@ MK_VIII::Mode6Handler::altitude_callouts_enabled ()
   if (conf.minimums_enabled || conf.smart_500_enabled || conf.above_field_voice)
     return true;
 
-  for (int i = 0; i < n_altitude_callouts; i++)
+  for (unsigned i = 0; i < n_altitude_callouts; i++)
     if (conf.altitude_callouts_enabled[i])
       return true;
 
@@ -4197,7 +4197,7 @@ MK_VIII::Mode6Handler::update_altitude_callouts ()
   if (! mk->io_handler.gpws_inhibit()
       && ! mk->state_handler.ground // [1]
       && ! mk_data(radio_altitude).ncd)
-    for (int i = 0; i < n_altitude_callouts && mk_data(radio_altitude).get() <= altitude_callout_definitions[i]; i++)
+    for (unsigned i = 0; i < n_altitude_callouts && mk_data(radio_altitude).get() <= altitude_callout_definitions[i]; i++)
       if ((conf.altitude_callouts_enabled[i]
           || (altitude_callout_definitions[i] == 500
               && conf.smart_500_enabled))
@@ -4206,7 +4206,7 @@ MK_VIII::Mode6Handler::update_altitude_callouts ()
              || last_radio_altitude.get() > altitude_callout_definitions[i]))
        {
          // lock out all callouts superior or equal to this one
-         for (int j = 0; j <= i; j++)
+         for (unsigned j = 0; j <= i; j++)
            altitude_callouts_issued[j] = true;
 
          altitude_callouts_issued[i] = true;
@@ -4254,9 +4254,10 @@ MK_VIII::Mode6Handler::test_airport (const FGAirport *airport)
   return false;
 }
 
-bool MK_VIII::Mode6Handler::AirportFilter::pass(FGAirport* a)
+bool MK_VIII::Mode6Handler::AirportFilter::passAirport(FGAirport* a) const
 {
-  return self->test_airport(a);
+  bool ok = self->test_airport(a);
+  return ok;
 }
 
 void
@@ -4269,20 +4270,19 @@ MK_VIII::Mode6Handler::update_runway ()
   }
 
   // Search for the closest runway threshold in range 5
-  // nm. Passing 0.5 degrees (approximatively 30 nm) to
+  // nm. Passing 30nm to
   // get_closest_airport() provides enough margin for large
   // airports, which may have a runway located far away from the
   // airport's reference point.
   AirportFilter filter(this);
-  const FGAirport *airport = globals->get_airports()->search(
-    mk_data(gps_latitude).get(), mk_data(gps_longitude).get(),
-                       0.5, filter);
-
-  if (airport) {
-    runway.elevation = airport->getElevation();
+  FGPositionedRef apt = FGPositioned::findClosest(
+    SGGeod::fromDeg(mk_data(gps_longitude).get(), mk_data(gps_latitude).get()),
+    30.0, &filter);
+  if (apt) {
+    runway.elevation = apt->elevation();
   }
   
-  has_runway.set(airport != NULL);
+  has_runway.set(apt != NULL);
 }
 
 void
@@ -4493,17 +4493,11 @@ MK_VIII::TCFHandler::select_runway (const FGAirport *airport)
   return _runway;
 }
 
-bool MK_VIII::TCFHandler::AirportFilter::pass(FGAirport *a)
+bool MK_VIII::TCFHandler::AirportFilter::passAirport(FGAirport* aApt) const
 {
-  for (unsigned int r=0; r<a->numRunways(); ++r) {
-    if (a->getRunwayByIndex(r)->lengthFt() >= mk->conf.runway_database) {
-      return true;
-    }
-  }
-    
-  return false;
+  return aApt->hasHardRunwayOfLengthFt(mk->conf.runway_database);
 }
-
+   
 void
 MK_VIII::TCFHandler::update_runway ()
 {
@@ -4513,25 +4507,25 @@ MK_VIII::TCFHandler::update_runway ()
   }
 
   // Search for the intended destination runway of the closest
-  // airport in range 15 nm. Passing 0.5 degrees (approximatively
-  // 30 nm) to get_closest_airport() provides enough margin for
+  // airport in range 15 nm. Passing 30nm to get_closest_airport() 
+  // provides enough margin for
   // large airports, which may have a runway located far away from
   // the airport's reference point.
   AirportFilter filter(mk);
-  const FGAirport *airport = globals->get_airports()->search(
-      mk_data(gps_longitude).get(), mk_data(gps_latitude).get(),
-                       0.5, filter);
-
-  if (!airport) return;
+  FGAirport* apt = FGAirport::findClosest(
+    SGGeod::fromDeg(mk_data(gps_longitude).get(), mk_data(gps_latitude).get()),
+    30.0, &filter);
+      
+  if (!apt) return;
   
          has_runway = true;
 
-         FGRunway* _runway = select_runway(airport);
-
+         FGRunway* _runway = select_runway(apt);
+    
          runway.center.latitude = _runway->latitude();
          runway.center.longitude = _runway->longitude();
 
-         runway.elevation = airport->getElevation();
+         runway.elevation = apt->elevation();
 
          double half_length_m = _runway->lengthM() * 0.5;
          runway.half_length = half_length_m * SG_METER_TO_NM;
@@ -4593,7 +4587,7 @@ MK_VIII::TCFHandler::get_bias_area_edges (Position *edge,
                                          Position *bias_edge2)
 {
   double half_bias_width_m = k * SG_NM_TO_METER + half_width_m;
-  double tmp_latitude, tmp_longitude, az;
+  double tmp_latitude = 0.0, tmp_longitude = 0.0, az = 0.0;
 
   geo_direct_wgs_84(0,
                    edge->latitude,
@@ -4846,10 +4840,9 @@ MK_VIII::TCFHandler::update ()
 ///////////////////////////////////////////////////////////////////////////////
 
 MK_VIII::MK_VIII (SGPropertyNode *node)
-  : name("mk-viii"),
+  : properties_handler(this),
+    name("mk-viii"),
     num(0),
-
-    properties_handler(this),
     power_handler(this),
     system_handler(this),
     configuration_module(this),