亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? client.cpp

?? 給予QT的qps開源最新源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
   qpegps is a program for displaying a map centered at the current longitude/
   latitude as read from a gps receiver.

   Copyright (C) 2002 Ralf Haselmeier <Ralf.Haselmeier@gmx.de>

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

 */

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include "client.h"
#include "qpegps.h"
#include "settings.h"
#include <qmessagebox.h>
#include <qapplication.h>
#include <qpe/qpedebug.h>

int Client::resumeEvent = -1;
int Client::resumeFlag = 0;
int Client::gpsdCounter = 1;

//Client::Client( GpsData *gData )
Client::Client(Qpegps * appl)
   : application(appl), status(Stopped)
{

	gpsData.connected = false;
	gpsData.online = false;
//	gpsData->gpsData.timestamp.setDate(QDate(0,0,0));
//	gpsData->gpsData.timestamp.setDate(QDate(0,0,0));
   gpsData.status = GpsData::NoFix;

//   startGpsd();

   // setup socket for communication with gpsd
   gpsSocket = new QSocket(this);
   connect(gpsSocket, SIGNAL(connected()), SLOT(socketConnected()));
   connect(gpsSocket, SIGNAL(connectionClosed()), SLOT(socketClosed()));
   connect(gpsSocket, SIGNAL(readyRead()), SLOT(socketReadyRead()));
   connect(gpsSocket, SIGNAL(error(int)), SLOT(socketError(int)));

   timer = new QTimer(this);
   connect( timer, SIGNAL(timeout()),
         SLOT(gpsTimeout()) ); // redraw map every 500 msec indep. of gpsData
   timer->start(100, false); // check for changes every 100 msec

   // activate resume events
   qcopChannel = new QCopChannel( "QPE/System", this );
   connect( qcopChannel, SIGNAL(received(const QCString&, const QByteArray&)),
         this, SLOT(qcopResume(const QCString&, const QByteArray&)) );

   signal(SIGCONT, &signalResume);

//   startConnection();
}

Client::~Client()
{
   closeConnection();
   system(gpsOptions.stopScript.join("\n"));
   qDebug("stop script called\n");
}

void Client::closeConnection()
{
   if (gpsData.connected) {
      gpsSocket->close();
      if ( gpsSocket->state() == QSocket::Closing ) {
         connect( gpsSocket, SIGNAL(delayedCloseFinished()),
               SLOT(socketClosed()) );
      } else {
         socketClosed();
      }
   }
}

void Client::restartGpsd()
{
	closeConnection();
    
   system(gpsOptions.stopScript.join("\n"));
   qDebug("stop script called\n");
   startGpsd();
   
	startConnection();
}

void Client::startConnection()
{
   if (status == Starting || status == StartingConnect 
         || status == WaitingConnection) {
      // we are waiting for gpsd to start, postpone the connection
      gpsData.statusStr = tr("Waiting the connection to gpsd...");
      status = StartingConnect;
      return;

   }
   if (gpsData.connected) {
      return;
   }

   gpsSocket->connectToHost(gpsOptions.host, gpsOptions.port);

   gpsData.statusStr = tr("Waiting the connection to gpsd...");
   status = StartingConnect;

   gpsdCounter = 1;
}

void Client::queryGpsd()
{
   // write to gpsd
   QString str("w+xi\n");
   gpsSocket->writeBlock(str, str.length());
}

void Client::socketConnected()
{
   // connection established
   gpsData.connected = true;

   gpsData.online = false;
   gpsData.statusStr = tr("Connecting to gpsd...");
   status = Connecting;

   emit updated(STA);

   // first query to get name and status and set watcher mode
   queryGpsd();
   
   gpsdCounter = 1;
}

void Client::socketClosed()
{
   gpsData.connected = false;
   gpsData.online = false;
   gpsData.statusStr = tr("gpsd connection closed");
   status = Stopped;

   emit updated(STA);
}

void Client::socketError(int e)
{
	QString strError;
   switch ( e ) {
      case QSocket::ErrConnectionRefused:
         strError = tr("Connection to gpsd refused");
         break;
      case QSocket::ErrHostNotFound:
         strError = tr("gpsd host address/port not found");
         break;
      case QSocket::ErrSocketRead:
         // NOTE: if gpsd is killed, this error is received
         strError = tr("could not read data from gpsd");
         break;
      default:
         strError = tr("Error number %1 occured").arg(e);
         break;
   }

	qDebug("No gpsd running or network error: %s", (const char *) strError);

   // no matter the error, disconnect from the server
   closeConnection();
}

void Client::socketReadyRead()
{
   // make sure an entire line is available
   if( !gpsSocket->canReadLine() ) {
      gpsSocket->waitForMore(25); // wait 25 msec
   }

   // read and process all available lines
   while ( gpsSocket->canReadLine() ) {
      QString dataStr(gpsSocket->readLine());
//      qDebug("Received data: %s", (const char *) dataStr);
      
      parseGps(dataStr);
   }
}
   
void Client::startGpsd()
{
   system(gpsOptions.startScript.join("\n"));
   qDebug("start script called\n");

   gpsdCounter = 1;
   gpsData.statusStr = tr("Starting gpsd...");
   status = Starting;
}

void Client::gpsTimeout()
{
	static bool dialogActive = false;

   if (resumeFlag == resumeEvent) {
      resumeFlag = 0;
      closeConnection();
      system(gpsOptions.resumeScript.join("\n"));
      startConnection();
   }

   switch( status) {
   case Starting:
      // gpsd starting: wait 3 seconds and go to stopped
      if (gpsdCounter == 30) {
	      gpsData.statusStr = ""; 
         status = Stopped;
      }
   case StartingConnect:
      // gpsd starting and waiting to connect: wait 3 seconds and connect
      if (gpsdCounter == 30) {
         gpsData.statusStr = ""; 
         status = Stopped;
         startConnection();
      }
      break;
   case WaitingConnection:
      // waiting the socket connection to gpsd: wait 1 seconds and retry
      if (gpsdCounter == 10) {
         closeConnection();
         startConnection();
      }
      break;
   case Connecting:
      // waiting for the first message from gpsd
      if (gpsdCounter == 0) {
	      gpsData.statusStr = ""; // hide label, if everything is OK
         status = Running;
      } else if (gpsdCounter == 50) { // 5 seconds without data
		   // switch to GPS setup page (makes sense right now)
		   application->showPage(reinterpret_cast<QWidget *>(application->viewGpsStatus));

		   if (!dialogActive) { // do not display dialog if there's already one
            dialogActive = true;

            QMessageBox mb( "QpeGps",
				            tr("Cannot connect to GPS!\n\n"
				            "Abort: Exit QpeGps now.\n"
				            "Retry: Start gpsd with default settings.\n"
				            "Ignore: Change setup on GPS page."),
				            QMessageBox::Critical,
				            QMessageBox::Abort,
				            QMessageBox::Retry | QMessageBox::Default,
				            QMessageBox::Ignore);

            // run modal
            mb.exec();
            mb.hide();

			   switch(mb.result()) {
			   case QMessageBox::Abort:
					closeConnection();
					QApplication::exit(1);
					break;
			   case QMessageBox::Retry:
					// OK, we never had a working gpsd connection, restart gpsd
					restartGpsd();
               break;
			   default:
				   // user asked to ignore this - alright, let him deal with this
	            gpsData.statusStr = ""; 
               status = Stopped;
               break;
			   }
			   dialogActive = false;
		   }
         return;
      }
   case Running:
      // waiting for gpsd data 
      if (gpsdCounter == 0/* || gpsdCounter % 10*/) {
//         update();
//         emit newData();
      } else if ( gpsdCounter == 50 ) { // 5 seconds without data
         if (gpsData.connected) {
            // try to manual request gpsd
            queryGpsd();
            gpsdCounter = -1; // next iteration will update
         }
      }
      break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
9191久久久久久久久久久| 亚洲一区二三区| 成人黄动漫网站免费app| 国产精品久久精品日日| 91一区二区在线| 亚洲欧洲制服丝袜| 欧美精品丝袜中出| 国产一区二区三区电影在线观看| 久久新电视剧免费观看| 在线观看日韩精品| 国产精品中文欧美| 亚洲国产精品天堂| 中文字幕精品一区二区精品绿巨人| 91在线免费看| 国产成人精品免费视频网站| 天堂成人国产精品一区| 欧美韩国日本不卡| 久久久午夜精品| 精品三级av在线| 欧美一区二区日韩| 欧美乱熟臀69xxxxxx| 色悠久久久久综合欧美99| va亚洲va日韩不卡在线观看| 国产一区高清在线| 国产伦精品一区二区三区免费迷| 日韩av一区二区在线影视| 亚洲一区二区视频| 亚洲欧美偷拍卡通变态| 国产精品美日韩| 亚洲欧洲精品天堂一级| 亚洲欧美自拍偷拍| 中文字幕视频一区| 综合精品久久久| 国产人成亚洲第一网站在线播放| 精品奇米国产一区二区三区| 日韩午夜中文字幕| 精品理论电影在线观看| 久久毛片高清国产| 一区二区三区影院| 久久草av在线| 色综合久久中文综合久久97| 欧美老人xxxx18| 日本一区二区三级电影在线观看| 国产亚洲精品福利| 亚洲韩国一区二区三区| 国产又粗又猛又爽又黄91精品| 欧美日韩激情一区二区| 欧美系列亚洲系列| 久久黄色级2电影| 99久久伊人精品| 中文字幕综合网| 欧美午夜在线观看| 开心九九激情九九欧美日韩精美视频电影| 91精品国产综合久久精品性色| 日韩成人免费电影| 久久无码av三级| 波多野结衣一区二区三区| 一区二区成人在线| 日韩视频中午一区| 成人av电影在线| 香蕉成人伊视频在线观看| 日韩欧美国产三级电影视频| 国产一区二区三区免费在线观看| 国产精品麻豆欧美日韩ww| 色悠久久久久综合欧美99| 石原莉奈在线亚洲二区| 久久精品人人做人人爽97| 欧洲精品在线观看| 国产伦精品一区二区三区视频青涩| 成人免费一区二区三区在线观看| 欧美亚洲国产一区二区三区 | 麻豆精品视频在线观看视频| 久久婷婷成人综合色| 色噜噜久久综合| 国产一区二区三区美女| 亚洲欧洲www| 精品日本一线二线三线不卡| 色成人在线视频| 高清在线观看日韩| 蜜桃av一区二区在线观看| 国产精品每日更新在线播放网址 | 欧美一区二区观看视频| 成a人片国产精品| 日韩不卡在线观看日韩不卡视频| 国产欧美日韩一区二区三区在线观看| 欧洲一区在线电影| 国产成人免费视频网站| 免费人成在线不卡| 亚洲自拍偷拍av| 国产精品毛片久久久久久| 日韩欧美国产精品一区| 在线一区二区三区做爰视频网站| 国产乱人伦精品一区二区在线观看 | 欧美日韩国产一二三| 国产不卡一区视频| 久草精品在线观看| 亚洲国产欧美另类丝袜| 亚洲人成人一区二区在线观看| 精品国产露脸精彩对白| 91精品国产欧美日韩| 欧美性大战久久久久久久蜜臀| 成人精品一区二区三区四区| 激情欧美日韩一区二区| 久久综合综合久久综合| 亚洲444eee在线观看| 亚洲蜜桃精久久久久久久| 国产精品青草久久| 欧美国产日韩精品免费观看| 久久一夜天堂av一区二区三区| 欧美一区二区人人喊爽| 91麻豆精品久久久久蜜臀| 欧美日韩在线播放一区| 欧美视频在线不卡| 欧美日韩在线观看一区二区 | 国产美女视频一区| 国产一区二区中文字幕| 国产一区激情在线| 国产福利一区二区三区视频| 国产露脸91国语对白| 国内欧美视频一区二区 | 欧美经典一区二区三区| 久久久久高清精品| 国产精品久久久久aaaa樱花 | 麻豆视频一区二区| 久久电影网站中文字幕| 国产一区二区三区最好精华液| 国产精品一二一区| 成人一道本在线| 在线国产电影不卡| 91麻豆精品国产91久久久久| 欧美一级片在线| 国产色91在线| 亚洲欧美色图小说| 亚洲一级不卡视频| 蜜桃一区二区三区四区| 精品一区二区免费在线观看| 国产成人精品免费看| 色综合久久久久网| 欧美放荡的少妇| 中文字幕精品在线不卡| 国产精品久久久久久久久搜平片| 亚洲人精品一区| 日本va欧美va欧美va精品| 国产成人精品三级| 91国偷自产一区二区三区观看| 在线播放欧美女士性生活| 精品国产123| 樱桃国产成人精品视频| 蜜桃av一区二区三区| 成人动漫视频在线| 欧美精品tushy高清| 国产欧美日本一区二区三区| 亚洲一区二区三区视频在线播放| 久久99精品久久久久| jlzzjlzz欧美大全| 日韩一区二区三区高清免费看看| 日本一区二区三区国色天香 | 精品sm捆绑视频| 亚洲另类一区二区| 狠狠色丁香久久婷婷综| 91日韩精品一区| 欧美成人伊人久久综合网| 国产精品国产三级国产aⅴ中文 | 国产综合色在线视频区| 在线免费av一区| 精品日韩av一区二区| 亚洲综合清纯丝袜自拍| 国产精品一区二区在线观看网站 | 亚洲成人一区二区在线观看| 国产最新精品免费| 91精品国产色综合久久ai换脸 | 日韩一区在线播放| 极品少妇xxxx精品少妇| 欧美丝袜丝nylons| 国产肉丝袜一区二区| 日韩av二区在线播放| 99v久久综合狠狠综合久久| 精品国产乱子伦一区| 日韩精品每日更新| 欧美视频一区二区三区在线观看| 亚洲国产精华液网站w| 精品一区二区免费看| 欧美一区二区在线视频| 午夜精品久久久久| 在线观看不卡一区| 日韩理论片网站| 成人黄色一级视频| 国产人伦精品一区二区| 国产精品一区专区| 久久亚洲春色中文字幕久久久| 免费高清在线一区| 91麻豆精品国产自产在线| 三级欧美在线一区| 欧美日本韩国一区二区三区视频| 亚洲综合免费观看高清完整版在线| 91在线视频免费91| 亚洲三级在线观看| 色婷婷国产精品| 亚洲一区国产视频| 在线成人av网站|