亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美日韩在线免费视频| 欧美日韩国产在线播放网站| 日韩欧美的一区二区| 天天综合天天综合色| 欧美日韩黄色影视| 成人在线视频一区二区| 日韩精品一级二级 | 亚洲激情自拍偷拍| 精品国产一区二区亚洲人成毛片| 国产v综合v亚洲欧| 舔着乳尖日韩一区| 亚洲图片你懂的| 国产欧美精品日韩区二区麻豆天美| 欧美猛男男办公室激情| 色激情天天射综合网| 91色乱码一区二区三区| 国产视频一区二区在线观看| 欧美日韩激情在线| 色婷婷亚洲精品| 欧美亚洲动漫另类| 欧美色精品天天在线观看视频| 色一情一乱一乱一91av| 91福利国产成人精品照片| 91蜜桃婷婷狠狠久久综合9色| 国内成人精品2018免费看| 久久草av在线| 国产美女精品人人做人人爽 | 伊人婷婷欧美激情| 亚洲日本欧美天堂| 三级在线观看一区二区| 美女脱光内衣内裤视频久久网站| 午夜欧美一区二区三区在线播放| 偷偷要91色婷婷| 精品一区二区三区免费观看 | 国产乱码一区二区三区| 波多野结衣亚洲| 欧美疯狂性受xxxxx喷水图片| 欧美一级久久久| 日韩av二区在线播放| 日本人妖一区二区| 国产乱对白刺激视频不卡 | 欧美国产欧美亚州国产日韩mv天天看完整| 婷婷亚洲久悠悠色悠在线播放| 久久精品欧美一区二区三区不卡 | 高清不卡一二三区| 日韩精品视频网站| 亚洲视频免费观看| 日韩欧美的一区| 欧美在线观看视频一区二区| 热久久一区二区| 一区二区三区精品在线| 色94色欧美sute亚洲线路二| 亚洲另类在线制服丝袜| 精品视频资源站| 亚洲女与黑人做爰| 国产成人免费视频一区| 亚洲国产精品二十页| av在线这里只有精品| 成人午夜私人影院| 琪琪久久久久日韩精品| 一区二区三区视频在线看| 亚洲国产精品v| 国产三级精品三级| 久久久久88色偷偷免费| 精品国产网站在线观看| 欧美高清dvd| 3751色影院一区二区三区| 欧美三级一区二区| 欧美日韩在线亚洲一区蜜芽| 欧美日韩一区二区三区免费看| 在线观看免费视频综合| 色婷婷av一区二区三区软件| 色呦呦一区二区三区| 色综合久久88色综合天天6| 一本一道波多野结衣一区二区| av在线一区二区| 91麻豆国产福利在线观看| 95精品视频在线| 欧美在线免费观看视频| 欧美日韩久久久久久| 欧美一区二区三区在线电影| 欧美一区二区福利在线| 精品少妇一区二区三区在线视频 | 伊人婷婷欧美激情| 亚洲一二三专区| 日韩国产欧美在线视频| 久久激情五月激情| 国产九色精品成人porny| 成人精品小蝌蚪| 欧美性猛交xxxx黑人交| 欧美日韩成人一区二区| 精品免费国产一区二区三区四区| 久久中文字幕电影| 国产精品久久久久天堂| 一区二区三区在线免费播放| 肉色丝袜一区二区| 久久99这里只有精品| 成人夜色视频网站在线观看| 日本精品一区二区三区四区的功能| 欧美另类变人与禽xxxxx| 日韩久久精品一区| 中文字幕一区在线观看视频| 一区二区成人在线| 蜜桃在线一区二区三区| 国产成人av电影在线| 91麻豆视频网站| 欧美精品九九99久久| 久久久精品日韩欧美| 一区二区三区在线视频免费观看| 免费观看一级欧美片| 亚洲狠狠爱一区二区三区| 亚洲一区二区视频在线| 欧美在线观看一区| 欧美国产日韩一二三区| 亚洲精品日日夜夜| 国产精品456露脸| 26uuu久久综合| 久久久亚洲国产美女国产盗摄 | 色999日韩国产欧美一区二区| 91精品国产综合久久精品app| 成人小视频在线| 福利一区福利二区| 91精品国模一区二区三区| 亚洲欧洲日韩女同| 日韩和的一区二区| 色综合天天在线| 久久久久97国产精华液好用吗| 亚洲一级不卡视频| av一区二区三区四区| 精品国产乱码久久久久久老虎 | 狠狠色2019综合网| 欧美在线观看18| 中文字幕一区二| 韩国成人精品a∨在线观看| 欧美唯美清纯偷拍| 中文字幕av一区二区三区| 日韩成人一区二区| 色天使色偷偷av一区二区| 国产欧美视频在线观看| 男女男精品视频| 在线亚洲人成电影网站色www| 欧美国产精品中文字幕| 精品综合久久久久久8888| 欧美日韩国产影片| 亚洲一区在线观看免费观看电影高清| 国产乱码精品一区二区三区忘忧草 | 中文字幕一区二区三区蜜月| 九色porny丨国产精品| 欧美精品久久99久久在免费线 | 国产成人高清在线| 精品国产1区二区| 免费xxxx性欧美18vr| 欧美日韩一区不卡| 亚洲国产精品久久不卡毛片| 色悠久久久久综合欧美99| 亚洲啪啪综合av一区二区三区| 99久久精品国产一区二区三区| 国产日产欧美一区| 国产成人在线影院 | 亚洲免费毛片网站| 91亚洲精品一区二区乱码| 亚洲欧洲国产日韩| av爱爱亚洲一区| 综合激情网...| av电影在线观看一区| 成人免费在线播放视频| 99视频一区二区| 一区二区三区**美女毛片| 欧美影片第一页| 亚洲aⅴ怡春院| 日韩一二三四区| 麻豆精品在线播放| 国产色产综合色产在线视频| 国产成人激情av| 亚洲人被黑人高潮完整版| 在线一区二区三区四区五区| 亚洲图片有声小说| 日韩一二三区视频| 国产精品123区| 亚洲美女屁股眼交3| 欧美亚洲综合在线| 久久精品国产精品亚洲精品| 久久精品视频一区二区| 99久久er热在这里只有精品66| 亚洲麻豆国产自偷在线| 欧美日韩国产小视频| 麻豆精品精品国产自在97香蕉| www久久久久| 一本大道久久精品懂色aⅴ| 午夜精品国产更新| 久久亚洲二区三区| 99久久99久久免费精品蜜臀| 亚洲18色成人| 国产视频一区不卡| 在线精品视频免费观看| 久久激情五月激情| 亚洲欧美日韩国产手机在线 | 日韩精品一区二区三区视频| 国产激情精品久久久第一区二区| 亚洲人精品一区|