#ifndef _FG_ATCMGR_HXX
#define _FG_ATCMGR_HXX
-#include <Main/fgfs.hxx>
+#include <simgear/structure/subsystem_mgr.hxx>
+
#include <Main/fg_props.hxx>
#include <GUI/gui.h>
//bool approach_active;
//float departure_freq;
//bool departure_active;
+
+ // NOTE - the *_active flags determine whether the service is active in atc_list,
+ // *NOT* whether the tower etc is closed or not!!!!
// Flags to ensure the stations don't get wrongly deactivated
bool set_by_AI; // true when the AI manager has activated this station
- // Do we need to ref-count the number of AI planes setting this?
- bool set_by_comm_search; // true when the comm_search has activated this station
- // Do we need to distingiush comm1 and comm2?
+ unsigned int numAI; // Ref count of the number of AI planes registered
+ bool set_by_comm[2][ATC_NUM_TYPES]; // true when the relevant comm_freq has activated this station and type
};
-class FGATCMgr : public FGSubsystem
+class FGATCMgr : public SGSubsystem
{
private:
+ bool initDone; // Hack - guard against update getting called before init
+
// A map of airport ID vs frequencies and ATC provision
typedef map < string, AirportATC* > airport_atc_map_type;
typedef airport_atc_map_type::iterator airport_atc_map_iterator;
bool GetAirportATCDetails(string icao, AirportATC* a);
// Return a pointer to a given sort of ATC at a given airport and activate if necessary
+ // Returns NULL if service doesn't exist - calling function should check for this.
FGATC* GetATCPointer(string icao, atc_type type);
- // Display a dialog box with options relevant to the currently tuned ATC service.
- void doPopupDialog();
-
// Return a pointer to an appropriate voice for a given type of ATC
// creating the voice if necessary - ie. make sure exactly one copy
// of every voice in use exists in memory.
atc_type GetComm2ATCType() { return(comm_type[1]); }
FGATC* GetComm2ATCPointer() { return(comm_atc_ptr[1]); }
+ // Get the frequency of a given service at a given airport
+ // Returns zero if not found
+ unsigned short int GetFrequency(string ident, atc_type tp);
+
+ // Register the fact that the AI system wants to activate an airport
+ bool AIRegisterAirport(string ident);
+
+ // Register the fact that the comm radio is tuned to an airport
+ bool CommRegisterAirport(string ident, int chan, atc_type tp);
+
private:
// Remove a class from the atc_list and delete it from memory