QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
qgsgpsconnection.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsgpsconnection.cpp - description
3  --------------------
4  begin : November 30th, 2009
5  copyright : (C) 2009 by Marco Hugentobler
6  email : marco at hugis dot net
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "qgsgpsconnection.h"
19 
20 #include <QCoreApplication>
21 #include <QTime>
22 #include <QIODevice>
23 #include <QStringList>
24 #include <QFileInfo>
25 
26 #include "qgsnmeaconnection.h"
27 #include "qgslogger.h"
28 #include "info.h"
29 
30 
32 {
33  bool valid = false;
34  if ( status == 'V' || fixType == NMEA_FIX_BAD || quality == 0 ) // some sources say that 'V' indicates position fix, but is below acceptable quality
35  {
36  valid = false;
37  }
38  else if ( fixType == NMEA_FIX_2D )
39  {
40  valid = true;
41  }
42  else if ( status == 'A' || fixType == NMEA_FIX_3D || quality > 0 ) // good
43  {
44  valid = true;
45  }
46 
47  return valid;
48 }
49 
51 {
53 
54  // no fix if any of the three report bad; default values are invalid values and won't be changed if the corresponding NMEA msg is not received
55  if ( status == 'V' || fixType == NMEA_FIX_BAD || quality == 0 ) // some sources say that 'V' indicates position fix, but is below acceptable quality
56  {
57  fixStatus = NoFix;
58  }
59  else if ( fixType == NMEA_FIX_2D ) // 2D indication (from GGA)
60  {
61  fixStatus = Fix2D;
62  }
63  else if ( status == 'A' || fixType == NMEA_FIX_3D || quality > 0 ) // good
64  {
65  fixStatus = Fix3D;
66  }
67  return fixStatus;
68 }
69 
70 
72  : QObject( nullptr )
73  , mSource( dev )
74 {
75  clearLastGPSInformation();
76  QObject::connect( dev, &QIODevice::readyRead, this, &QgsGpsConnection::parseData );
77 }
78 
80 {
81  cleanupSource();
82 }
83 
85 {
86  if ( !mSource )
87  {
88  return false;
89  }
90 
91  bool connected = mSource->open( QIODevice::ReadWrite | QIODevice::Unbuffered );
92  if ( connected )
93  {
95  }
96  return connected;
97 }
98 
100 {
101  if ( !mSource )
102  {
103  return false;
104  }
105 
106  mSource->close();
107  return true;
108 }
109 
110 void QgsGpsConnection::cleanupSource()
111 {
112  if ( mSource )
113  {
114  mSource->close();
115  }
116  mSource.reset();
117 }
118 
119 void QgsGpsConnection::setSource( QIODevice *source )
120 {
121  cleanupSource();
122  mSource.reset( source );
123  clearLastGPSInformation();
124 }
125 
126 void QgsGpsConnection::clearLastGPSInformation()
127 {
129 }
void setSource(QIODevice *source)
Sets the GPS source. The class takes ownership of the device class.
~QgsGpsConnection() override
QChar status
Status (A = active or V = void)
QgsGpsInformation mLastGPSInformation
Last state of the gps related variables (e.g. position, time, ...)
virtual void parseData()=0
Parse available data source content.
FixStatus fixStatus() const
Returns the fix status.
Encapsulates information relating to a GPS position fix.
FixStatus
GPS fix status.
int fixType
Contains the fix type, where 1 = no fix, 2 = 2d fix, 3 = 3d fix.
bool connect()
Opens connection to device.
int quality
GPS quality indicator (0 = Invalid; 1 = Fix; 2 = Differential, 3 = Sensitive)
QgsGpsConnection(QIODevice *dev)
Constructor.
Status mStatus
Connection status.
bool isValid() const
Returns whether the connection information is valid.
std::unique_ptr< QIODevice > mSource
Data source (e.g. serial device, socket, file,...)
bool close()
Closes connection to device.