]> git.mxchange.org Git - flightgear.git/commitdiff
Merge branch 'durk/traffic'
authorTim Moore <timoore33@gmail.com>
Sun, 25 Apr 2010 21:07:16 +0000 (23:07 +0200)
committerTim Moore <timoore33@gmail.com>
Sun, 25 Apr 2010 21:07:16 +0000 (23:07 +0200)
1  2 
src/ATC/trafficcontrol.cxx
src/ATC/trafficcontrol.hxx

index ef5a0a01f8dac2c2d767c1c1b040164a3d4dc093,c4499f2baa5167047f891e32d40c23db94f4aac9..f9c2fee4e5fc6ef900774085e07a755e1f5fe533
@@@ -45,6 -45,7 +45,7 @@@ FGTrafficRecord::FGTrafficRecord() 
     speed(0), 
     altitude(0), 
     radius(0),
+    frequencyId(0),
     allowTransmission(true) {
  }
  
@@@ -265,7 -266,7 +266,7 @@@ bool FGTrafficRecord::isOpposing (FGGro
          if (other.intentions.size())
            {
              for (intVecIterator j = other.intentions.begin(); j != other.intentions.end(); j++)
 -              {  
 +              {
                  // cerr << "Current segment 1 " << (*i) << endl;
                  if ((*i) > 0) {
                    if ((opp = net->findSegment(*i)->opposite()))
@@@ -354,45 -355,8 +355,8 @@@ void FGATCController::transmit(FGTraffi
      string sender, receiver;
      int stationFreq = 0;
      int taxiFreq    = 0;
+     int freqId      = 0;
      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 taxiFreqStr;
      double heading = 0;
      string transponderCode;
      FGAIFlightPlan *fp;
      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) {
            case MSG_ANNOUNCE_ENGINE_START:
                 text = sender + ". Ready to Start up";
            // Assign SID, if necessery (TODO)
            case MSG_PERMIT_ENGINE_START:
                 taxiFreqStr = formatATCFrequency3_2(taxiFreq);
 -               
 +
                 heading = rec->getAircraft()->getTrafficRef()->getCourse();
                 fltType = rec->getAircraft()->getTrafficRef()->getFlightType();
                 rwyClass= rec->getAircraft()->GetFlightPlan()->getRunwayClassFromTrafficType(fltType);
                        activeRunway + ", " + SID + ", squawk " + transponderCode + ". " +
                        "For push-back and taxi clearance call " + taxiFreqStr + ". " + sender;
                 break;
+            case MSG_ACKNOWLEDGE_SWITCH_GROUND_FREQUENCY:
+                taxiFreqStr = formatATCFrequency3_2(taxiFreq);
+                text = receiver + ". Switching to " + taxiFreqStr + ". " + sender;
+                break;
             case MSG_REQUEST_PUSHBACK_CLEARANCE:
                 text = receiver + ". Request push-back. " + sender;
                 break;
      // Display ATC message only when one of the radios is tuned
      // the relevant frequency.
      // Note that distance attenuation is currently not yet implemented
 -    //cerr << "Transmitting " << text << " at " << stationFreq;
      if ((onBoardRadioFreqI0 == stationFreq) || (onBoardRadioFreqI1 == stationFreq)) {
          if (rec->allowTransmissions()) {
              fgSetString("/sim/messages/atc", text.c_str());
@@@ -492,8 -485,6 +484,8 @@@ string FGATCController::formatATCFreque
      return string(buffer);
  }
  
 +// TODO: Set transponder codes according to real-world routes.
 +// The current version just returns a random string of four octal numbers. 
  string FGATCController::genTransponderCode(string fltRules) {
      if (fltRules == "VFR") {
          return string("1200");
@@@ -882,18 -873,31 +874,31 @@@ void FGStartupController::update(int id
               available = false;
          }
       }
-      // TODO: Switch to APRON control and request pushback Clearance.
-      // Get Push back clearance
+      // Note: The next two 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_REQUEST_PUSHBACK_CLEARANCE, ATC_AIR_TO_GROUND);
+             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+130) {
+         if (now > startTime+160) {
+             transmit(&(*i), MSG_REQUEST_PUSHBACK_CLEARANCE, ATC_AIR_TO_GROUND);
+             i->updateState();
+             lastTransmission = now;
+              available = false;
+         }
+      }
+      if ((state == 6) && available){
+         if (now > startTime+180) {
              if (i->pushBackAllowed()) {
                   i->allowRepeatedTransmissions();
                   transmit(&(*i), MSG_PERMIT_PUSHBACK_CLEARANCE, ATC_GROUND_TO_AIR);
index 027f63d7ff6be2db374f29e4f50d1a5de1b85691,6633fec7038e4e29d091e78a4762fbb9fdec92b4..f97e7cf22928549228599d065cade4fd519c0aaa
@@@ -45,6 -45,7 +45,6 @@@ typedef vector<int>::iterator intVecIte
  
  class FGAIFlightPlan;  // forward reference
  class FGGroundNetwork; // forward reference
 -//class FGAISchedule;    // forward reference
  class FGAIAircraft;    // forward reference
  
  /**************************************************************************************
@@@ -107,6 -108,7 +107,7 @@@ private
    int id, waitsForId;
    int currentPos;
    int leg;
+   int frequencyId;
    int state;
    bool allowTransmission;
    time_t timer;
@@@ -176,6 -178,8 +177,8 @@@ public
    bool allowTransmissions() { return allowTransmission; };
    void suppressRepeatedTransmissions () { allowTransmission=false; };
    void allowRepeatedTransmissions () { allowTransmission=true; };
+   void nextFrequency() { frequencyId++; };
+   int  getNextFrequency() { return frequencyId; };
  };
  
  typedef vector<FGTrafficRecord> TrafficVector;
@@@ -223,7 -227,8 +226,8 @@@ public
        MSG_ACKNOWLEDGE_ENGINE_START,
        MSG_REQUEST_PUSHBACK_CLEARANCE,
        MSG_PERMIT_PUSHBACK_CLEARANCE, 
-       MSG_HOLD_PUSHBACK_CLEARANCE } AtcMsgId;
+       MSG_HOLD_PUSHBACK_CLEARANCE,
+       MSG_ACKNOWLEDGE_SWITCH_GROUND_FREQUENCY } AtcMsgId;
    typedef enum {
        ATC_AIR_TO_GROUND,
        ATC_GROUND_TO_AIR } AtcMsgDir;