ATIS upgrade
Add missing ATIS elements (transition level, expected approach, precipitation, runway surface warnings). Minor phraseology fixes for US/Europe. Adds "/sim/atis/concise-report" option to use abbreviations (CAVOK etc), and omit "obvious" units (depends on airport). Trigger ATIS updates for significant pressure changes.
This commit is contained in:
parent
3bf09215b0
commit
32b9c61528
4 changed files with 651 additions and 275 deletions
File diff suppressed because it is too large
Load diff
|
@ -19,7 +19,6 @@
|
||||||
// along with this program; if not, write to the Free Software
|
// along with this program; if not, write to the Free Software
|
||||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
|
||||||
#ifndef _FG_ATIS_HXX
|
#ifndef _FG_ATIS_HXX
|
||||||
#define _FG_ATIS_HXX
|
#define _FG_ATIS_HXX
|
||||||
|
|
||||||
|
@ -32,6 +31,8 @@
|
||||||
|
|
||||||
#include "ATC.hxx"
|
#include "ATC.hxx"
|
||||||
|
|
||||||
|
class FGAirport;
|
||||||
|
|
||||||
typedef std::map<std::string,std::string> MSS;
|
typedef std::map<std::string,std::string> MSS;
|
||||||
|
|
||||||
class FGATIS : public FGATC {
|
class FGATIS : public FGATC {
|
||||||
|
@ -70,6 +71,7 @@ class FGATIS : public FGATC {
|
||||||
time_t cur_time;
|
time_t cur_time;
|
||||||
int msg_OK;
|
int msg_OK;
|
||||||
bool _attention;
|
bool _attention;
|
||||||
|
bool _check_transmission;
|
||||||
|
|
||||||
bool _prev_display; // Previous value of _display flag
|
bool _prev_display; // Previous value of _display flag
|
||||||
MSS _remap; // abbreviations to be expanded
|
MSS _remap; // abbreviations to be expanded
|
||||||
|
@ -78,11 +80,33 @@ class FGATIS : public FGATC {
|
||||||
double _time_before_search_sec;
|
double _time_before_search_sec;
|
||||||
int _last_frequency;
|
int _last_frequency;
|
||||||
|
|
||||||
|
// temporary buffer for string conversions
|
||||||
|
char buf[100];
|
||||||
|
|
||||||
|
// data for the current ATIS report
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
std::string phonetic_seq_string;
|
||||||
|
bool US_CA;
|
||||||
|
bool cavok;
|
||||||
|
bool concise;
|
||||||
|
bool ils;
|
||||||
|
int temp;
|
||||||
|
int dewpoint;
|
||||||
|
double psl;
|
||||||
|
double qnh;
|
||||||
|
double rain_norm, snow_norm;
|
||||||
|
int notam;
|
||||||
|
std::string hours,mins;
|
||||||
|
} _report;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
FGATIS(const std::string& name, int num);
|
FGATIS(const std::string& name, int num);
|
||||||
|
|
||||||
virtual void init();
|
void init();
|
||||||
|
void reinit();
|
||||||
|
|
||||||
void attend(SGPropertyNode* node);
|
void attend(SGPropertyNode* node);
|
||||||
|
|
||||||
//run the ATIS instance
|
//run the ATIS instance
|
||||||
|
@ -96,27 +120,32 @@ protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/** generate the ATIS transmission text */
|
void createReport (const FGAirport* apt);
|
||||||
int genTransmission (const int regen, const bool special);
|
|
||||||
|
|
||||||
|
/** generate the ATIS transmission text */
|
||||||
|
bool genTransmission (const int regen, bool forceUpdate);
|
||||||
void genTimeInfo (void);
|
void genTimeInfo (void);
|
||||||
void genFacilityInfo (void);
|
void genFacilityInfo (void);
|
||||||
void genVisibilityInfo (void);
|
void genPrecipitationInfo(void);
|
||||||
void genCloudInfo (void);
|
bool genVisibilityInfo (std::string& vis_info);
|
||||||
|
bool genCloudInfo (std::string& cloud_info);
|
||||||
void genWindInfo (void);
|
void genWindInfo (void);
|
||||||
void genTemperatureInfo (double& Tsl, bool US_CA);
|
void genTemperatureInfo (void);
|
||||||
void genPressureInfo (bool US_CA, double Tsl);
|
void genTransitionLevel (const FGAirport* apt);
|
||||||
void genRunwayInfo (const std::string& phonetic_seq_string);
|
void genPressureInfo (void);
|
||||||
|
void genRunwayInfo (const FGAirport* apt);
|
||||||
|
void genWarnings (int position);
|
||||||
|
|
||||||
|
void addTemperature (int Temp);
|
||||||
|
|
||||||
// Put the text into the property tree
|
// Put the text into the property tree
|
||||||
// (and in debug mode, print it on the console):
|
// (and in debug mode, print it on the console):
|
||||||
void TreeOut(int msgOK);
|
void treeOut(int msgOK);
|
||||||
|
|
||||||
// Search the specified radio for stations on the same frequency and in range.
|
// Search the specified radio for stations on the same frequency and in range.
|
||||||
void search(void);
|
bool search(double dt);
|
||||||
|
|
||||||
friend std::istream& operator>> ( std::istream&, FGATIS& );
|
friend std::istream& operator>> ( std::istream&, FGATIS& );
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef int (FGATIS::*int_getter)() const;
|
typedef int (FGATIS::*int_getter)() const;
|
||||||
|
|
|
@ -15,11 +15,11 @@ Q(Airfield)
|
||||||
Q(Airbase)
|
Q(Airbase)
|
||||||
Q(Junior)
|
Q(Junior)
|
||||||
Q(Celsius)
|
Q(Celsius)
|
||||||
Q(wind)
|
Q(Wind)
|
||||||
Q(zulu)
|
Q(zulu)
|
||||||
Q(zulu_weather)
|
Q(zulu_weather)
|
||||||
Q(Automated_weather_observation)
|
Q(Automated_weather_observation)
|
||||||
Q(weather)
|
Q(Weather)
|
||||||
Q(airport_information)
|
Q(airport_information)
|
||||||
Q(International)
|
Q(International)
|
||||||
Q(Regional)
|
Q(Regional)
|
||||||
|
@ -45,9 +45,10 @@ Q(overcast)
|
||||||
Q(thin)
|
Q(thin)
|
||||||
Q(Sky_condition)
|
Q(Sky_condition)
|
||||||
Q(Sky)
|
Q(Sky)
|
||||||
|
Q(Clouds)
|
||||||
Q(Ceiling)
|
Q(Ceiling)
|
||||||
Q(minus)
|
Q(minus)
|
||||||
Q(dewpoint)
|
Q(Dewpoint)
|
||||||
Q(Visibility)
|
Q(Visibility)
|
||||||
Q(less_than_one_quarter)
|
Q(less_than_one_quarter)
|
||||||
Q(one_quarter)
|
Q(one_quarter)
|
||||||
|
@ -56,13 +57,66 @@ Q(three_quarters)
|
||||||
Q(one_and_one_half)
|
Q(one_and_one_half)
|
||||||
Q(Altimeter)
|
Q(Altimeter)
|
||||||
Q(QNH)
|
Q(QNH)
|
||||||
Q(millibars)
|
|
||||||
Q(Landing_and_departing_runway)
|
Q(Landing_and_departing_runway)
|
||||||
Q(On_initial_contact_advise_you_have_information)
|
Q(Advise_on_initial_contact_you_have_information)
|
||||||
Q(This_is)
|
Q(This_is)
|
||||||
|
Q(information)
|
||||||
|
Q(millibars)
|
||||||
|
Q(hectopascal)
|
||||||
|
Q(inches)
|
||||||
|
Q(I_L_S)
|
||||||
|
Q(visual)
|
||||||
|
Q(cav_ok)
|
||||||
|
Q(clouds_and_visibility_OK)
|
||||||
|
Q(out)
|
||||||
|
Q(equals)
|
||||||
|
Q(Expect_I_L_S_approach)
|
||||||
|
Q(Expect_visual_approach)
|
||||||
|
Q(Transition_level)
|
||||||
|
Q(No_sig)
|
||||||
|
Q(Time)
|
||||||
|
Q(kelometers)
|
||||||
|
Q(Attention)
|
||||||
|
Q(flock_of_birds)
|
||||||
|
Q(bird_activity)
|
||||||
|
Q(in_the_vicinity_of_the_airport)
|
||||||
|
Q(short_time__I_LS_interference_possible_by_taxiing_aircraft)
|
||||||
|
Q(reed_back_all_runway_hold_instructions)
|
||||||
|
Q(glider_operation_in_sector)
|
||||||
|
Q(airport)
|
||||||
|
Q(runway_wet)
|
||||||
|
Q(runway_in_use)
|
||||||
|
Q(arrivals)
|
||||||
|
Q(runway)
|
||||||
|
Q(runways)
|
||||||
|
Q(expect)
|
||||||
|
Q(approach)
|
||||||
|
Q(departures)
|
||||||
|
Q(wet)
|
||||||
|
Q(ice)
|
||||||
|
Q(closed)
|
||||||
|
Q(light)
|
||||||
|
Q(moderate)
|
||||||
|
Q(heavy)
|
||||||
|
Q(rain)
|
||||||
|
Q(drizzle)
|
||||||
|
Q(snow)
|
||||||
|
Q(fog)
|
||||||
|
Q(plus)
|
||||||
|
Q(hours)
|
||||||
|
Q(variable)
|
||||||
|
Q(from)
|
||||||
|
Q(Or)
|
||||||
|
Q(And)
|
||||||
|
Q(to)
|
||||||
|
Q(maximum)
|
||||||
|
Q(between)
|
||||||
|
Q(degrees)
|
||||||
|
Q(or_more)
|
||||||
Q(left)
|
Q(left)
|
||||||
Q(right)
|
Q(right)
|
||||||
Q(center)
|
Q(center)
|
||||||
|
Q(knots)
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef Q
|
#undef Q
|
||||||
|
|
|
@ -841,6 +841,8 @@ void fgReInitSubsystems()
|
||||||
globals->get_subsystem("systems")->reinit();
|
globals->get_subsystem("systems")->reinit();
|
||||||
globals->get_subsystem("instrumentation")->reinit();
|
globals->get_subsystem("instrumentation")->reinit();
|
||||||
|
|
||||||
|
globals->get_subsystem("ATIS")->reinit();
|
||||||
|
|
||||||
// setup state to end re-init
|
// setup state to end re-init
|
||||||
fgSetBool("/sim/signals/reinit", false);
|
fgSetBool("/sim/signals/reinit", false);
|
||||||
if ( !freeze ) {
|
if ( !freeze ) {
|
||||||
|
|
Loading…
Reference in a new issue