 
 void ppsSvc() {
   if ( DEBUG ) {
-    Serial.print( "." );
-  }
-  rotorUpdateFlg = true;
-
+    //Serial.print( "." );
+  }
+  
   // Set clock(s) to UTC time if a valid fix came in since the last PPS
-  if ( DEBUG ) digitalClockDisplay();
+  //if ( DEBUG ) digitalClockDisplay();
   if ( gpsTimeValid && gpsTimeFlg ) {
     time_t oldTime = getTeensy3Time();
     setTime( gpsHr,gpsMin,gpsSec,gpsDay,gpsMon,gpsYr ); // "Library" time    

      aprsIndex = 0;
      aprsRdy = true;
      aprsBufCurrent = false;
      if ( DEBUG ) Serial.println( "APRS msg ended." );
      if ( DEBUG ) Serial.println( aprs );
    }
  } else {
    if ( aprsRdy ) {
      if ( DEBUG ) Serial.println( "APRS msg started..." );
      aprsRdy = false;
    }
  }

  gpsTimeFlg = false;
  gpsZDAFlg = false;
  gpsTFFlg = false;

  updateTarget();

}

void procAprs() {
  /* Check msg is proper APRS msg from a monitored call sign,
     not some other output from TNC */
  aprsObj.putAprsString( aprsBuf );
  String callSgn = aprsObj.getCallsign();
  boolean callSgnFilt = false;
  for ( int i = 0 ; i < numCallSgns ; i++ ) {
    callSgnFilt |= ( (String)callSgns[i] == callSgn );
  }
  if ( DEBUG ) Serial.print( "\n" + callSgn + ' ');
  if ( DEBUG ) if ( callSgnFilt ) {
    Serial.println( "valid" );
  } else {
    Serial.println( "invalid" );
  }
  if ( callSgnFilt ) {
    aprsTime = now();
    aprsLat = aprsObj.getLatitude();
    aprsLon = aprsObj.getLongitude();
    aprsAlt = (float)aprsObj.getAltitude();
    aprsVg = (float)aprsObj.getGroundspeed();
    aprsHdg = (float)aprsObj.getCourse();
    aprsNewFlg = true;
  }
  
}

void updateTarget() {
    // Time must be a long int, can't be float, so can't be part of target state
    // array. Change this so that target state is just separate variables instead
    // of an array.
  if ( aprsNewFlg ) {
    if ( DEBUG ) Serial.println( "APRS target update" );
    // Set prior target state to new APRS data
    target[0] = aprsTime;
    // Initialization for computed derivatives on first valid APRS fix
    if ( targetValid ) {
      target[6] = ( aprsAlt - lastAprsAlt ) / ( aprsTime - lastAprsTime );
    } else {
      target[6] = 0.0;
      targetValid = true;
    }
    target[1] = aprsLon;
    target[2] = aprsLat;
    target[3] = aprsAlt;
    target[4] = aprsVg * cos( aprsHdg * deg2rad ) * cos( aprsLat * deg2rad );
    target[5] = aprsVg * sin( aprsHdg * deg2rad );
    lastAprsTime = aprsTime;
    lastAprsAlt = aprsAlt;
    aprsNewFlg = false;
  }

  // Update target state 
  if ( targetValid ) {
    float temp = target[0]; // old time  
    target[0] = float(now()); 
    temp = target[0] - temp; // delta t
    target[1] += ( target[4] * temp );
    target[2] += ( target[5] * temp );
    target[3] += ( target[6] * temp );
  }
//  for ( int i = 0 ; i < 6 ; i++ ) {
//    Serial.print( target[i] );
//    Serial.print( ":" );
//  }
//  Serial.println( "" );
}


