⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.cpp

📁 给予QT的qps开源最新源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   case Stopped:
      // not connected: just refresh every 500 ms
      if (gpsdCounter == 5) {
         emit updated(STA);
         gpsdCounter = -1;
      }
      break;
   }

   gpsdCounter = gpsdCounter + 1;
}

/*void Client::update()
{
   bool dataChanged = FALSE;
 	
	if (!gpsData->gpsdConnected)
		// not connected
		return;

	if(gpsData->set & ONLINE_SET) {
		//clear flags
      gpsData->set &= ~ONLINE_SET;
      gpsData->gpsOnline = (gpsData->online != 0);
      // dataChanged = TRUE; // emit newData
	}
	// test for fix changed
	if(gpsData->set & (STATUS_SET | MODE_SET)) {
		//clear flags
		gpsData->set &= ~(STATUS_SET | MODE_SET);
		// dataChanged = TRUE; // emit newData
	}
	if (gpsData->gpsOnline && gpsData->fix.mode >= MODE_2D) {
		if (gpsData->set & LATLON_SET) {
         gpsData->set &= ~LATLON_SET;
			gpsData->latitudeGps = gpsData->fix.latitude;
            gpsData->longitudeGps = gpsData->fix.longitude;
			if (application->ManualPosit==FALSE) {
                gpsData->currPos.lat = gpsData->fix.latitude;
                gpsData->currPos.lon = gpsData->fix.longitude;;
                dataChanged = TRUE;
			} 
		}
		if (gpsData->fix.mode >= MODE_3D && gpsData->set & ALTITUDE_SET) {
			gpsData->set &= ~ALTITUDE_SET;

			gpsData->altitude.val = gpsData->fix.altitude;
            // dataChanged = TRUE; never updated without long or lat
		}
		if (gpsData->set & SPEED_SET) {
			gpsData->set &= ~SPEED_SET;
			gpsData->speed.val = gpsData->fix.speed;
            if(gpsData->speed.val > 0.5) // average speed for travel time calc.
                gpsData->avspeed.val = gpsData->avspeed.val * 0.99 + gpsData->speed.val * 0.01;

			// dataChanged = TRUE; // emit newData
      } 
		if (gpsData->set & TRACK_SET) {
			gpsData->set &= ~TRACK_SET;

         gpsData->heading.val = gpsData->fix.track; 

			// dataChanged = TRUE; // emit newData
		}
	}
	// test for status changed
	if(gpsData->set & (TIME_SET | SATELLITE_SET | USED_SET| DEVICE_SET | DEVICEID_SET)) {
		if (gpsData->set & TIME_SET && isnan(gpsData->fix.time)==0) {
         QDateTime ctime;
         ctime.setTime_t((int)rint(gpsData->fix.time)); 

         gpsData->date = ctime.date();
         gpsData->time = ctime.time();

         gpsData->ts.time = gpsData->time.toString();
         gpsData->ts.date = gpsData->date.toString();
		}
		// status changed
//		if (!dataChanged)
//			//  only if no emit newData
//			emit newStatus();
		//clear flags
		gpsData->set &= ~(TIME_SET | SATELLITE_SET | USED_SET| DEVICE_SET | DEVICEID_SET);
	}
   if(dataChanged){
      gpsData->adjustDatum();   
//      emit newData();
   }
}
*/

void Client::qcopResume(const QCString& msg, const QByteArray& )
{
   if ( msg == "resumed()" ) {
      qDebug("qCop resumed() received: resuming...");
      if (resumeEvent == -1)
         resumeEvent = 2;
      if (resumeEvent == 2)
         resumeFlag = 2;
   }
}

void Client::signalResume(int signal)
{
   if ( signal ) {
      qDebug("SIGCONT received: resuming...");
      if (resumeEvent == -1)
         resumeEvent = 1;
      if (resumeEvent == 1)
         resumeFlag = 1;
   }
}

// local constants
static const char MagicWord[] = "GPSD"; // gpsd signature

void Client::parseGps( const QString &gpsStr )
{
   QString dataStr;
   if ( gpsStr.upper().startsWith(MagicWord) ) {
      for ( int pos = gpsStr.find('=') - 1;
            pos > 0;
            pos = gpsStr.find(pos+2, '=') - 1 ) {
         QChar type = gpsStr[pos];
         dataStr = gpsStr.mid(pos + 2);
         switch ( type.latin1() ) {
            case 'I':
               // GPS identifier
               {
                  if ( dataStr.startsWith("?") ) {
                     // empty statement
                     gpsData.gpsName = "---"; // unknown GPS
                  }
                  else {
                     // remove new line from end of data string (unit name)
                     gpsData.gpsName = dataStr;
                     gpsData.gpsName.truncate(dataStr.length() - 1);
                  }
                  emit updated(STA);
               }
               break;
            case 'O':
               // Position information
               {
                  // reset counter
                  gpsdCounter = 0;

                  if ( dataStr.startsWith("?") ) {
                     // GPS does not have fix
                     if ( gpsData.status != GpsData::NoFix ) {
                        gpsData.status = GpsData::NoFix;
                        emit updated(STA);
                     }
                     continue;
                  }
                  // GPS has fix
/*                  if ( !hasFix ) {
                     hasFix = true;
                     emit fixEstablished(true);
                  }*/
//                  if ( parseData == true ) {
//                     GpsDat gpsData;
                  bool posChanged = false;
                  bool update = false;
                  QStringList sl = QStringList::split(" ", dataStr, false);
                  if ( sl[1] != "?" ) {
                     // timestamp
                     gpsData.timestamp.setTime_t( (int) 
                        rint(sl[1].toDouble()));
                  }
                  if ( sl[3] != "?" ) {
                     // latitude
                     double d = sl[3].toDouble();
                     if ( d != gpsData.fix.position.lat ) {
                        gpsData.fix.position.lat = d;
                        posChanged = true;
                        update = true;
                     }
                  }
                  if ( sl[4] != "?" ) {
                     // longitude
                     double d = sl[4].toDouble();
                     if ( d != gpsData.fix.position.lon ) {
                        gpsData.fix.position.lon = d;
                        posChanged = true;
                        update = true;
                     }
                  }
                  if ( sl[5] != "?" ) {
                     // altitude
                     double d = sl[5].toDouble();
                     if ( d != gpsData.fix.altitude.val ) {
                        gpsData.fix.altitude.val = d;
                        // NOTE: a change in altitude alone will not
                        //       trigger a position change notice, as
                        //       the altitude value tends to fluctuate
                        //        with some (all?) GPS receivers
                        update = true;
                     }
                  }
                  if ( sl[8] != "?" ) {
                     // heading (track)
                     double d = sl[8].toDouble();
                     if ( d != gpsData.fix.heading.val ) {
                        gpsData.fix.heading.val = d;
                        update = true;
                     }
                  }
                  if ( sl[9] != "?" ) {
                     // speed
                     double d = sl[9].toDouble();
                     if ( d != gpsData.fix.speed.val ) {
                        gpsData.fix.speed.val = d;
                        // average speed for travel time calc.
                        if(gpsData.fix.speed.val > 0.5)
                            gpsData.avspeed.val = 
                              gpsData.avspeed.val * 0.99 + 
                              gpsData.fix.speed.val * 0.01;
                        update = true;
                     }
                  }
                 if ( sl[14] != "?" ) {
                     // mode
                    sl[14].truncate(1);
                    int m = sl[14].toInt() - 1;
                     if ( m != gpsData.status ) {
                        gpsData.status = m;
                        if (!update)
                           emit updated(STA);
                     }
                  }

                  if ( update ) {
                     if ( posChanged )
                        application->adjustDatum(gpsData.fix.position, 
                           gpsData.fix.altitude);
                     emit updated(POS);
                  }
               }
               break;
            case 'X':
               // GPS unit detection
               {
                  if ( dataStr.startsWith("?") ) {
                     // no GPS unit available
                     // NOTE: will only get this if directly requesting 'X';
                     //       currently not doing so
                     continue;
                  }
                  double val;
                  QTextIStream(&dataStr) >> val;
                  if ( val == 0 ) {
                     // qDebug("no GPS unit available");
                     gpsData.online = false;
                  } else {
                     // qDebug("GPS detected: " + QString::number(val));
                     gpsData.online = true;
                  }
                     emit updated(STA);
               }
               break;
            case 'Y':
               // Satellite information
               {
                  // reset counter
                  gpsdCounter = 0;

                  QStringList sl =
                     QStringList::split(":", dataStr, false);
                  QStringList::Iterator it = sl.begin();
                  // get sentence type, timestamp, number of satellites
                  QStringList sub = QStringList::split(" ", *it, false);
                  if ( sub.count() == 3 ) {
                     gpsData.timestamp.setTime_t( (int) 
                        rint(sub[1].toDouble()));
                  }
                  gpsData.satellites.clear();
                  gpsData.satellites.resize(sl.count());
                  // get individual satellite info
                  QStringList::Iterator end = sl.end();
                  int i = 0;
                  gpsData.satellites_used = 0;
                  for ( ++it; it != end; ++it, ++i ) {
                     sub = QStringList::split(" ", *it, false);
                     if ( sub.count() == 5 ) {
                        Satellite *s = new Satellite(sub[0].toInt(), 
                              sub[1].toInt(), sub[2].toInt(), 
                              sub[3].toInt(), (bool)sub[4].toInt());
                        gpsData.satellites.insert(i, s);
                        if (s->used)
                           ++gpsData.satellites_used;
                     }
                  }
                  emit updated(SAT);
               }
               break;
         }
      }
   }
}
// end of file

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -