50class TCAS :
public SGSubsystem
55 AdvisoryIntrusion = 1,
56 AdvisoryClimb = AdvisoryIntrusion|(1 << 1),
57 AdvisoryDescend = AdvisoryIntrusion|(1 << 2),
58 AdvisoryAdjustVSpeed = AdvisoryIntrusion|(1 << 3),
59 AdvisoryMaintVSpeed = AdvisoryIntrusion|(1 << 4),
60 AdvisoryMonitorVSpeed = AdvisoryIntrusion|(1 << 5),
61 AdvisoryLevelOff = AdvisoryIntrusion|(1 << 6)
67 OptionIncreaseClimb = (1 << 0),
68 OptionIncreaseDescend = (1 << 1),
69 OptionCrossingClimb = (1 << 2),
70 OptionCrossingDescent = (1 << 3)
115 std::string callsign;
123 float relativeAltitudeFt;
135 typedef std::map<std::string,TrackerTarget*> TrackerTargets;
155 PropertiesHandler (
TCAS *) :
169 VoicePlayer (
TCAS* tcas) :
172 ~VoicePlayer (
void) {}
178 Voice* pTrafficTraffic;
181 Voice* pClimbCrossing;
182 Voice* pClimbIncrease;
185 Voice* pDescendCrossing;
186 Voice* pDescendIncrease;
188 Voice* pAdjustVSpeed;
190 Voice* pMonitorVSpeed;
196 SGPropertyNode_ptr nodeSoundFilePrefix;
206 Annunciator (
TCAS* tcas);
207 ~Annunciator (
void) {}
208 void bind (SGPropertyNode* node);
212 void trigger (
const ResolutionAdvisory& newAdvisory,
bool revertedRA);
213 void test (
bool testOk);
215 bool isPlaying (
void) {
return voicePlayer.
is_playing();}
219 ResolutionAdvisory previous;
221 VoicePlayer voicePlayer;
222 SGPropertyNode_ptr nodeGpwsAlertOn;
229 class AdvisoryCoordinator
232 AdvisoryCoordinator (
TCAS* _tcas);
233 ~AdvisoryCoordinator (
void) {}
235 void bind (SGPropertyNode* node);
241 void add (
const ResolutionAdvisory& newAdvisory);
246 ResolutionAdvisory current;
247 ResolutionAdvisory previous;
248 SGPropertyNode_ptr nodeTAWarning;
258 Tracker (
TCAS* _tcas);
263 void add (
const std::string callsign,
int detectedLevel);
264 bool active (
void) {
return haveTargets;}
265 bool newTraffic (
void) {
return newTargets;}
266 bool isTracked (std::string callsign) {
if (!haveTargets)
return false;
else return _isTracked(callsign);}
267 bool _isTracked (std::string callsign);
268 int getThreatLevel (std::string callsign);
274 TrackerTargets targets;
281 class AdvisoryGenerator
284 AdvisoryGenerator (
TCAS* _tcas);
285 ~AdvisoryGenerator (
void) {}
287 void init (
const LocalInfo* _pSelf, ThreatInfo* _pCurrentThreat);
289 void setAlarmThresholds (
const SensitivityLevel* _pAlarmThresholds);
291 int resolution (
int mode,
int threatLevel,
float distanceNm,
292 float altFt,
float heading,
float velocityKt);
295 float verticalSeparation (
float newVerticalFps);
296 void determineRAsense (
int& RASense,
bool& isCrossing);
300 const LocalInfo* pSelf;
301 ThreatInfo* pCurrentThreat;
302 const SensitivityLevel* pAlarmThresholds;
312 ThreatDetector (
TCAS* _tcas);
313 ~ThreatDetector (
void) {}
318 bool checkTransponder (
const SGPropertyNode* pModel,
float velocityKt);
319 int checkThreat (
int mode,
const SGPropertyNode* pModel);
320 void checkVerticalThreat (
void);
321 void horizontalThreat (
float bearing,
float distanceNm,
float heading,
324 void setPressureAlt (
float altFt) { self.pressureAltFt = altFt;}
325 float getPressureAlt (
void) {
return self.pressureAltFt;}
327 void setRadarAlt (
float altFt) { self.radarAltFt = altFt;}
328 float getRadarAlt (
void) {
return self.radarAltFt;}
330 float getVelocityKt (
void) {
return self.velocityKt;}
331 int getRASense (
void) {
return currentThreat.RASense;}
334 void unitTest (
void);
337 static const SensitivityLevel sensitivityLevels[];
340#ifdef FEATURE_TCAS_DEBUG_THREAT_DETECTOR
344 SGPropertyNode_ptr nodeLat;
345 SGPropertyNode_ptr nodeLon;
346 SGPropertyNode_ptr nodePressureAlt;
347 SGPropertyNode_ptr nodeRadarAlt;
348 SGPropertyNode_ptr nodeHeading;
349 SGPropertyNode_ptr nodeVelocity;
350 SGPropertyNode_ptr nodeVerticalFps;
353 ThreatInfo currentThreat;
354 const SensitivityLevel* pAlarmThresholds;
360 double nextUpdateTime;
363 SGPropertyNode_ptr nodeModeSwitch;
364 SGPropertyNode_ptr nodeServiceable;
365 SGPropertyNode_ptr nodeSelfTest;
366 SGPropertyNode_ptr nodeDebugTrigger;
367 SGPropertyNode_ptr nodeDebugRA;
368 SGPropertyNode_ptr nodeDebugThreat;
370 PropertiesHandler properties_handler;
371 ThreatDetector threatDetector;
373 AdvisoryCoordinator advisoryCoordinator;
374 AdvisoryGenerator advisoryGenerator;
375 Annunciator annunciator;
378 void selfTest (
void);
381 TCAS (SGPropertyNode* node);
384 void bind()
override;
385 void init()
override;
388 void update(
double dt)
override;