AI aircraft will need to switch frequencies before being able to request
push-back clearance.
This commit is contained in:
parent
cb2c800434
commit
0c522bee02
2 changed files with 52 additions and 43 deletions
|
@ -45,6 +45,7 @@ FGTrafficRecord::FGTrafficRecord() :
|
||||||
speed(0),
|
speed(0),
|
||||||
altitude(0),
|
altitude(0),
|
||||||
radius(0),
|
radius(0),
|
||||||
|
frequencyId(0),
|
||||||
allowTransmission(true) {
|
allowTransmission(true) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -354,45 +355,8 @@ void FGATCController::transmit(FGTrafficRecord *rec, AtcMsgId msgId, AtcMsgDir m
|
||||||
string sender, receiver;
|
string sender, receiver;
|
||||||
int stationFreq = 0;
|
int stationFreq = 0;
|
||||||
int taxiFreq = 0;
|
int taxiFreq = 0;
|
||||||
|
int freqId = 0;
|
||||||
string atisInformation;
|
string atisInformation;
|
||||||
//double commFreqD;
|
|
||||||
switch (msgDir) {
|
|
||||||
case ATC_AIR_TO_GROUND:
|
|
||||||
sender = rec->getAircraft()->getTrafficRef()->getCallSign();
|
|
||||||
switch (rec->getLeg()) {
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
stationFreq =
|
|
||||||
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getDynamics()->getGroundFrequency(rec->getLeg());
|
|
||||||
taxiFreq =
|
|
||||||
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getDynamics()->getGroundFrequency(3);
|
|
||||||
receiver = rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getName() + "-Ground";
|
|
||||||
atisInformation = rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getDynamics()->getAtisInformation();
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
receiver = rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getName() + "-Tower";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ATC_GROUND_TO_AIR:
|
|
||||||
receiver = rec->getAircraft()->getTrafficRef()->getCallSign();
|
|
||||||
switch (rec->getLeg()) {
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
stationFreq =
|
|
||||||
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getDynamics()->getGroundFrequency(rec->getLeg());
|
|
||||||
taxiFreq =
|
|
||||||
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getDynamics()->getGroundFrequency(3);
|
|
||||||
sender = rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getName() + "-Ground";
|
|
||||||
atisInformation = rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getDynamics()->getAtisInformation();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
sender = rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getName() + "-Tower";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
string text;
|
string text;
|
||||||
string taxiFreqStr;
|
string taxiFreqStr;
|
||||||
double heading = 0;
|
double heading = 0;
|
||||||
|
@ -403,6 +367,30 @@ void FGATCController::transmit(FGTrafficRecord *rec, AtcMsgId msgId, AtcMsgDir m
|
||||||
string transponderCode;
|
string transponderCode;
|
||||||
FGAIFlightPlan *fp;
|
FGAIFlightPlan *fp;
|
||||||
string fltRules;
|
string fltRules;
|
||||||
|
|
||||||
|
//double commFreqD;
|
||||||
|
sender = rec->getAircraft()->getTrafficRef()->getCallSign();
|
||||||
|
switch (rec->getLeg()) {
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
freqId = rec->getNextFrequency();
|
||||||
|
stationFreq =
|
||||||
|
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getDynamics()->getGroundFrequency(rec->getLeg()+freqId);
|
||||||
|
taxiFreq =
|
||||||
|
rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getDynamics()->getGroundFrequency(3);
|
||||||
|
receiver = rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getName() + "-Ground";
|
||||||
|
atisInformation = rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getDynamics()->getAtisInformation();
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
receiver = rec->getAircraft()->getTrafficRef()->getDepartureAirport()->getName() + "-Tower";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Swap sender and receiver value in case of a ground to air transmission
|
||||||
|
if (msgDir == ATC_GROUND_TO_AIR) {
|
||||||
|
string tmp = sender;
|
||||||
|
sender = receiver;
|
||||||
|
receiver = tmp;
|
||||||
|
}
|
||||||
switch (msgId) {
|
switch (msgId) {
|
||||||
case MSG_ANNOUNCE_ENGINE_START:
|
case MSG_ANNOUNCE_ENGINE_START:
|
||||||
text = sender + ". Ready to Start up";
|
text = sender + ". Ready to Start up";
|
||||||
|
@ -457,6 +445,10 @@ void FGATCController::transmit(FGTrafficRecord *rec, AtcMsgId msgId, AtcMsgDir m
|
||||||
activeRunway + ", " + SID + ", squawk " + transponderCode + ". " +
|
activeRunway + ", " + SID + ", squawk " + transponderCode + ". " +
|
||||||
"For push-back and taxi clearance call " + taxiFreqStr + ". " + sender;
|
"For push-back and taxi clearance call " + taxiFreqStr + ". " + sender;
|
||||||
break;
|
break;
|
||||||
|
case MSG_ACKNOWLEDGE_SWITCH_GROUND_FREQUENCY:
|
||||||
|
taxiFreqStr = formatATCFrequency3_2(taxiFreq);
|
||||||
|
text = receiver + ". Switching to " + taxiFreqStr + ". " + sender;
|
||||||
|
break;
|
||||||
case MSG_REQUEST_PUSHBACK_CLEARANCE:
|
case MSG_REQUEST_PUSHBACK_CLEARANCE:
|
||||||
text = receiver + ". Request push-back. " + sender;
|
text = receiver + ". Request push-back. " + sender;
|
||||||
break;
|
break;
|
||||||
|
@ -881,18 +873,31 @@ void FGStartupController::update(int id, double lat, double lon, double heading,
|
||||||
available = false;
|
available = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO: Switch to APRON control and request pushback Clearance.
|
// Note: The next two stages are only necessesary when Startup control is
|
||||||
// Get Push back clearance
|
// on a different frequency, compared to ground control
|
||||||
if ((state == 4) && available){
|
if ((state == 4) && available){
|
||||||
if (now > startTime+130) {
|
if (now > startTime+130) {
|
||||||
|
transmit(&(*i), MSG_ACKNOWLEDGE_SWITCH_GROUND_FREQUENCY, ATC_AIR_TO_GROUND);
|
||||||
|
i->updateState();
|
||||||
|
i->nextFrequency();
|
||||||
|
lastTransmission = now;
|
||||||
|
available = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: Switch to APRON control and request pushback Clearance.
|
||||||
|
// Get Push back clearance
|
||||||
|
if ((state == 5) && available){
|
||||||
|
if (now > startTime+160) {
|
||||||
transmit(&(*i), MSG_REQUEST_PUSHBACK_CLEARANCE, ATC_AIR_TO_GROUND);
|
transmit(&(*i), MSG_REQUEST_PUSHBACK_CLEARANCE, ATC_AIR_TO_GROUND);
|
||||||
i->updateState();
|
i->updateState();
|
||||||
lastTransmission = now;
|
lastTransmission = now;
|
||||||
available = false;
|
available = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((state == 5) && available){
|
if ((state == 6) && available){
|
||||||
if (now > startTime+130) {
|
if (now > startTime+180) {
|
||||||
if (i->pushBackAllowed()) {
|
if (i->pushBackAllowed()) {
|
||||||
i->allowRepeatedTransmissions();
|
i->allowRepeatedTransmissions();
|
||||||
transmit(&(*i), MSG_PERMIT_PUSHBACK_CLEARANCE, ATC_GROUND_TO_AIR);
|
transmit(&(*i), MSG_PERMIT_PUSHBACK_CLEARANCE, ATC_GROUND_TO_AIR);
|
||||||
|
|
|
@ -108,6 +108,7 @@ private:
|
||||||
int id, waitsForId;
|
int id, waitsForId;
|
||||||
int currentPos;
|
int currentPos;
|
||||||
int leg;
|
int leg;
|
||||||
|
int frequencyId;
|
||||||
int state;
|
int state;
|
||||||
bool allowTransmission;
|
bool allowTransmission;
|
||||||
time_t timer;
|
time_t timer;
|
||||||
|
@ -177,6 +178,8 @@ public:
|
||||||
bool allowTransmissions() { return allowTransmission; };
|
bool allowTransmissions() { return allowTransmission; };
|
||||||
void suppressRepeatedTransmissions () { allowTransmission=false; };
|
void suppressRepeatedTransmissions () { allowTransmission=false; };
|
||||||
void allowRepeatedTransmissions () { allowTransmission=true; };
|
void allowRepeatedTransmissions () { allowTransmission=true; };
|
||||||
|
void nextFrequency() { frequencyId++; };
|
||||||
|
int getNextFrequency() { return frequencyId; };
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef vector<FGTrafficRecord> TrafficVector;
|
typedef vector<FGTrafficRecord> TrafficVector;
|
||||||
|
@ -224,7 +227,8 @@ public:
|
||||||
MSG_ACKNOWLEDGE_ENGINE_START,
|
MSG_ACKNOWLEDGE_ENGINE_START,
|
||||||
MSG_REQUEST_PUSHBACK_CLEARANCE,
|
MSG_REQUEST_PUSHBACK_CLEARANCE,
|
||||||
MSG_PERMIT_PUSHBACK_CLEARANCE,
|
MSG_PERMIT_PUSHBACK_CLEARANCE,
|
||||||
MSG_HOLD_PUSHBACK_CLEARANCE } AtcMsgId;
|
MSG_HOLD_PUSHBACK_CLEARANCE,
|
||||||
|
MSG_ACKNOWLEDGE_SWITCH_GROUND_FREQUENCY } AtcMsgId;
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ATC_AIR_TO_GROUND,
|
ATC_AIR_TO_GROUND,
|
||||||
ATC_GROUND_TO_AIR } AtcMsgDir;
|
ATC_GROUND_TO_AIR } AtcMsgDir;
|
||||||
|
|
Loading…
Add table
Reference in a new issue