
 
 //====================================================
 // Button States
 //====================================================
 typedef enum HSIButtonStates
 {
  HSI_STA_CRS_STATE,
  HSI_STA_HDG_STATE,
  HSI_STA_TOTAL_STATES
 };
 //====================================================
 // Horizontal Situaton Geometry
 //====================================================
 typedef enum HSIValues
 {
  HSI_VAL_CRS_DEVIATION,
  HSI_VAL_DESIRED_CRS,
  HSI_VAL_DISTANCE_TO_BEACON,
  HSI_VAL_BEARING_TO_BEACON,
  HSI_VAL_CURRENT_HEADING,
  HSI_VAL_DESIRED_HEADING,
  HSI_VAL_DEV_LIMIT,
  HSI_VAL_HALF_DEV_LIMIT,
  HSI_VAL_LOCALIZER_CRS,
  HSI_VAL_AIRBASE_X,
  HSI_VAL_AIRBASE_Y,
  HSI_VAL_TOTAL_VALUES
 };
 //====================================================
 // Control Flags
 //====================================================
 typedef enum HSIFlags
 {
  HSI_FLAG_TO_TRUE,
  HSI_FLAG_ILS_WARN,
  HSI_FLAG_CRS_WARN,
  HSI_FLAG_INIT,
  HSI_FLAG_TOTAL_FLAGS
 };
 //====================================================
 // Constructors and Destructors
 //====================================================
CPHsi();
 //====================================================
 // Runtime Public Member Functions
 //====================================================
void Exec(void);
 //====================================================
 // Access Functions
 //====================================================
 void IncState(HSIButtonStates);
 void DecState(HSIButtonStates);
 int GetState(HSIButtonStates);
 float GetValue(HSIValues);
 BOOL GetFlag(HSIFlags);
long mColor[2][8];
private:
 //====================================================
 // Internal Data
 //====================================================
 CockpitManager *mpCPManager;
 
 int mpHsiStates[HSI_STA_TOTAL_STATES];
 float mpHsiValues[HSI_VAL_TOTAL_VALUES];
 BOOL mpHsiFlags[HSI_FLAG_TOTAL_FLAGS];
 NavigationSystem::Instrument_Mode
mLastMode;
 WayPointClass*
mLastWaypoint;
 //====================================================
 // Calculation Routines
 //====================================================
 void ExecNav(void);
 void ExecTacan(void);
 void ExecILSNav(void);
 void ExecILSTacan(void);
 void ExecBeaconProximity(float, float, float, float);
 void CalcTCNCrsDev(float);
 void CalcILSCrsDev(float);
};
 
 
 
};