return 0;
}
+void FGATCDialogNew::addEntry(int nr, string txt) {
+ commands.clear();
+ commands.push_back(txt);
+}
+
void FGATCDialogNew::PopupDialog() {
double onBoardRadioFreq0 =
const int bufsize = 32;
char buf[bufsize];
+ int commandNr = 0;
// loop over all entries that should fill up the dialog; use 10 items for now...
- for (int i = 0; i < 10; i++) {
- snprintf(buf, bufsize, "/sim/atc/opt[%d]", i);
+ for (StringVecIterator i = commands.begin(); i != commands.end(); i++) {
+ snprintf(buf, bufsize, "/sim/atc/opt[%d]", commandNr);
fgSetBool(buf, false);
- SGPropertyNode *entry = button_group->getNode("button", i, true);
+ SGPropertyNode *entry = button_group->getNode("button", commandNr, true);
copyProperties(button_group->getNode("button-template", true), entry);
entry->removeChildren("enabled", true);
entry->setStringValue("property", buf);
- entry->setIntValue("keynum", '1' + i);
- if (i == 0)
+ entry->setIntValue("keynum", '1' + commandNr);
+ if (commandNr == 0)
entry->setBoolValue("default", true);
- snprintf(buf, bufsize, "%d", i + 1);
- string legend = string(buf) + ". test"; // + current->menuentry;
+ snprintf(buf, bufsize, "%d", 1 + commandNr);
+ string legend = string(buf) + (*i); //"; // + current->menuentry;
entry->setStringValue("legend", legend.c_str());
- entry->setIntValue("binding/value", i);
+ entry->setIntValue("binding/value", commandNr);
+ commandNr++;
//current++;
}
#include <AIModel/AIFlightPlan.hxx>
#include <AIModel/performancedata.hxx>
#include <AIModel/performancedb.hxx>
+#include <ATC/atc_mgr.hxx>
#include <Traffic/TrafficMgr.hxx>
#include <Airports/groundnetwork.hxx>
#include <Airports/dynamics.hxx>
};
void FGATCController::transmit(FGTrafficRecord * rec, AtcMsgId msgId,
- AtcMsgDir msgDir)
+ AtcMsgDir msgDir, bool audible)
{
string sender, receiver;
int stationFreq = 0;
text = text + sender + ". Transmitting unknown Message";
break;
}
- double onBoardRadioFreq0 =
- fgGetDouble("/instrumentation/comm[0]/frequencies/selected-mhz");
- double onBoardRadioFreq1 =
- fgGetDouble("/instrumentation/comm[1]/frequencies/selected-mhz");
- int onBoardRadioFreqI0 = (int) floor(onBoardRadioFreq0 * 100 + 0.5);
- int onBoardRadioFreqI1 = (int) floor(onBoardRadioFreq1 * 100 + 0.5);
- //cerr << "Using " << onBoardRadioFreq0 << ", " << onBoardRadioFreq1 << " and " << stationFreq << " for " << text << endl;
-
- // Display ATC message only when one of the radios is tuned
- // the relevant frequency.
- // Note that distance attenuation is currently not yet implemented
- if ((onBoardRadioFreqI0 == stationFreq)
- || (onBoardRadioFreqI1 == stationFreq)) {
- if (rec->allowTransmissions()) {
- fgSetString("/sim/messages/atc", text.c_str());
+ if (audible) {
+ double onBoardRadioFreq0 =
+ fgGetDouble("/instrumentation/comm[0]/frequencies/selected-mhz");
+ double onBoardRadioFreq1 =
+ fgGetDouble("/instrumentation/comm[1]/frequencies/selected-mhz");
+ int onBoardRadioFreqI0 = (int) floor(onBoardRadioFreq0 * 100 + 0.5);
+ int onBoardRadioFreqI1 = (int) floor(onBoardRadioFreq1 * 100 + 0.5);
+ //cerr << "Using " << onBoardRadioFreq0 << ", " << onBoardRadioFreq1 << " and " << stationFreq << " for " << text << endl;
+
+ // Display ATC message only when one of the radios is tuned
+ // the relevant frequency.
+ // Note that distance attenuation is currently not yet implemented
+ if ((onBoardRadioFreqI0 == stationFreq)
+ || (onBoardRadioFreqI1 == stationFreq)) {
+ if (rec->allowTransmissions()) {
+ fgSetString("/sim/messages/atc", text.c_str());
+ }
}
+ } else {
+ FGATCManager *atc = (FGATCManager*) globals->get_subsystem("atc");
+ atc->getATCDialog()->addEntry(1, text);
+
}
}
int state = i->getState();
if ((state == st) && available) {
if ((msgDir == ATC_AIR_TO_GROUND) && isUserAircraft(i->getAircraft())) {
+
cerr << "Checking state " << st << " for " << i->getAircraft()->getCallSign() << endl;
static SGPropertyNode_ptr trans_num = globals->get_props()->getNode("/sim/atc/transmission-num", true);
int n = trans_num->getIntValue();
// PopupCallback(n);
cerr << "Selected transmission message" << n << endl;
} else {
+ cerr << "creading message for " << i->getAircraft()->getCallSign() << endl;
+ transmit(&(*i), msgId, msgDir, false);
return false;
}
}
if (now > startTime) {
//cerr << "Transmitting startup msg" << endl;
- transmit(&(*i), msgId, msgDir);
+ transmit(&(*i), msgId, msgDir, true);
i->updateState();
lastTransmission = now;
available = false;
checkTransmissionState(6, now, (startTime + 150), i, MSG_ACKNOWLEDGE_INITIATE_CONTACT, ATC_GROUND_TO_AIR);
- /*
- if ((state == 0) && available) {
- if (now > startTime) {
- //cerr << "Transmitting startup msg" << endl;
- transmit(&(*i), MSG_ANNOUNCE_ENGINE_START, ATC_AIR_TO_GROUND);
- i->updateState();
- lastTransmission = now;
- available = false;
- }
- }
- if ((state == 1) && available) {
- if (now > startTime + 60) {
- transmit(&(*i), MSG_REQUEST_ENGINE_START, ATC_AIR_TO_GROUND);
- i->updateState();
- lastTransmission = now;
- available = false;
- }
- }
- if ((state == 2) && available) {
- if (now > startTime + 80) {
- transmit(&(*i), MSG_PERMIT_ENGINE_START, ATC_GROUND_TO_AIR);
- i->updateState();
- lastTransmission = now;
- available = false;
- }
- }
- if ((state == 3) && available) {
- if (now > startTime + 100) {
- transmit(&(*i), MSG_ACKNOWLEDGE_ENGINE_START,
- ATC_AIR_TO_GROUND);
- i->updateState();
- lastTransmission = now;
- available = false;
- }
- }
- // Note: The next four stages are only necessesary when Startup control is
- // on a different frequency, compared to ground control
- if ((state == 4) && available) {
- if (now > startTime + 130) {
- transmit(&(*i), MSG_ACKNOWLEDGE_SWITCH_GROUND_FREQUENCY,
- ATC_AIR_TO_GROUND);
- i->updateState();
- i->nextFrequency();
- lastTransmission = now;
- available = false;
- }
- }
- if ((state == 5) && available) {
- if (now > startTime + 140) {
- transmit(&(*i), MSG_INITIATE_CONTACT, ATC_AIR_TO_GROUND);
- i->updateState();
- lastTransmission = now;
- available = false;
- }
- }
- if ((state == 6) && available) {
- if (now > startTime + 150) {
- transmit(&(*i), MSG_ACKNOWLEDGE_INITIATE_CONTACT,
- ATC_GROUND_TO_AIR);
- i->updateState();
- lastTransmission = now;
- available = false;
- }
- }
-
- // TODO: Switch to APRON control and request pushback Clearance.
- // Get Push back clearance
- if ((state == 7) && available) {
- if (now > startTime + 180) {
- transmit(&(*i), MSG_REQUEST_PUSHBACK_CLEARANCE,
- ATC_AIR_TO_GROUND);
- i->updateState();
- lastTransmission = now;
- available = false;
- }
- } */
+
if ((state == 8) && available) {
if (now > startTime + 200) {
if (i->pushBackAllowed()) {
i->allowRepeatedTransmissions();
transmit(&(*i), MSG_PERMIT_PUSHBACK_CLEARANCE,
- ATC_GROUND_TO_AIR);
+ ATC_GROUND_TO_AIR, true);
i->updateState();
} else {
transmit(&(*i), MSG_HOLD_PUSHBACK_CLEARANCE,
- ATC_GROUND_TO_AIR);
+ ATC_GROUND_TO_AIR, true);
i->suppressRepeatedTransmissions();
}
lastTransmission = now;
available = true;
}
if ((state < 3) && available) {
- transmit(&(*current), MSG_REQUEST_TAXI_CLEARANCE, ATC_AIR_TO_GROUND);
+ transmit(&(*current), MSG_REQUEST_TAXI_CLEARANCE, ATC_AIR_TO_GROUND, true);
current->setState(3);
lastTransmission = now;
available = false;
}
if ((state == 3) && available) {
- transmit(&(*current), MSG_ISSUE_TAXI_CLEARANCE, ATC_GROUND_TO_AIR);
+ transmit(&(*current), MSG_ISSUE_TAXI_CLEARANCE, ATC_GROUND_TO_AIR, true);
current->setState(4);
lastTransmission = now;
available = false;
}
if ((state == 4) && available) {
- transmit(&(*current), MSG_ACKNOWLEDGE_TAXI_CLEARANCE, ATC_AIR_TO_GROUND);
+ transmit(&(*current), MSG_ACKNOWLEDGE_TAXI_CLEARANCE, ATC_AIR_TO_GROUND, true);
current->setState(5);
lastTransmission = now;
available = false;
if ((origStatus != currStatus) && available) {
//cerr << "Issueing hold short instrudtion " << currStatus << " " << available << endl;
if (currStatus == true) { // No has a hold short instruction
- transmit(&(*current), MSG_HOLD_POSITION, ATC_GROUND_TO_AIR);
+ transmit(&(*current), MSG_HOLD_POSITION, ATC_GROUND_TO_AIR, true);
//cerr << "Transmittin hold short instrudtion " << currStatus << " " << available << endl;
current->setState(1);
} else {
- transmit(&(*current), MSG_RESUME_TAXI, ATC_GROUND_TO_AIR);
+ transmit(&(*current), MSG_RESUME_TAXI, ATC_GROUND_TO_AIR, true);
//cerr << "Transmittig resume instrudtion " << currStatus << " " << available << endl;
current->setState(2);
}
int state = current->getState();
if ((state == 1) && (available)) {
//cerr << "ACKNOWLEDGE HOLD" << endl;
- transmit(&(*current), MSG_ACKNOWLEDGE_HOLD_POSITION, ATC_AIR_TO_GROUND);
+ transmit(&(*current), MSG_ACKNOWLEDGE_HOLD_POSITION, ATC_AIR_TO_GROUND, true);
current->setState(0);
current->setHoldPosition(true);
lastTransmission = now;
}
if ((state == 2) && (available)) {
//cerr << "ACKNOWLEDGE RESUME" << endl;
- transmit(&(*current), MSG_ACKNOWLEDGE_RESUME_TAXI, ATC_AIR_TO_GROUND);
+ transmit(&(*current), MSG_ACKNOWLEDGE_RESUME_TAXI, ATC_AIR_TO_GROUND, true);
current->setState(0);
current->setHoldPosition(false);
lastTransmission = now;