mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-03-01 18:29:16 +01:00
Add fix type (auto/manual), and fix sv's to nmea parser (not connected
to anything atm.) git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1551 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
c87ff38039
commit
e8b0169b34
@ -29,7 +29,7 @@
|
||||
|
||||
GPSParser::GPSParser(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
qRegisterMetaType<QList<int> >("QList<int>");
|
||||
}
|
||||
|
||||
GPSParser::~GPSParser()
|
||||
|
@ -49,9 +49,10 @@ signals:
|
||||
void speedheading(double,double);
|
||||
void packet(QString); // Raw NMEA Packet (or just info)
|
||||
void satellite(int,int,int,int,int); // Index, PRN, Elevation, Azimuth, SNR
|
||||
void fixmode(QString); // Mode of fix: "Auto", "Manual".
|
||||
void fixtype(QString); // Type of fix: "NoGPS", "NoFix", "Fix2D", "Fix3D".
|
||||
void dop(double, double, double); // HDOP, VDOP, PDOP
|
||||
|
||||
void fixSVs(QList<int>); // SV's used for fix.
|
||||
};
|
||||
|
||||
#endif // GPSPARSER_H
|
||||
|
@ -425,31 +425,47 @@ void NMEAParser::nmeaProcessGPGSA(char* packet)
|
||||
if(packet[6]==',' && packet[7]==',')
|
||||
return;
|
||||
|
||||
if(!nmeaChecksum(packet))
|
||||
{
|
||||
// checksum not valid
|
||||
return;
|
||||
if(!nmeaChecksum(packet)) {
|
||||
// checksum not valid
|
||||
return;
|
||||
}
|
||||
nmeaTerminateAtChecksum(packet);
|
||||
|
||||
QString nmeaString( packet );
|
||||
QStringList tokenslist = nmeaString.split(",");
|
||||
// next field: Mode
|
||||
|
||||
// M=Manual, forced to operate in 2D or 3D
|
||||
// A=Automatic, 3D/2D
|
||||
QString fixmodeValue = tokenslist.at(1);
|
||||
if (fixmodeValue == "A") {
|
||||
emit fixmode(QString("Auto"));
|
||||
} else if (fixmodeValue == "B") {
|
||||
emit fixmode(QString("Manual"));
|
||||
}
|
||||
|
||||
// Mode: 1=Fix not available, 2=2D, 3=3D
|
||||
int mode = tokenslist.at(2).toInt();
|
||||
if (mode == 1)
|
||||
{
|
||||
int fixtypeValue = tokenslist.at(2).toInt();
|
||||
if (fixtypeValue == 1) {
|
||||
emit fixtype(QString("NoFix"));
|
||||
}
|
||||
else if (mode == 2)
|
||||
{
|
||||
} else if (fixtypeValue == 2) {
|
||||
emit fixtype(QString("Fix2D"));
|
||||
}
|
||||
else if (mode == 3)
|
||||
{
|
||||
} else if (fixtypeValue == 3) {
|
||||
emit fixtype(QString("Fix3D"));
|
||||
}
|
||||
|
||||
// 3-14 = IDs of SVs used in position fix (null for unused fields)
|
||||
QList<int> svList;
|
||||
for(int pos = 0; pos < 12;pos ++) {
|
||||
QString sv = tokenslist.at(3+pos);
|
||||
if(!sv.isEmpty()) {
|
||||
svList.append(sv.toInt());
|
||||
}
|
||||
}
|
||||
emit fixSVs(svList);
|
||||
|
||||
// 15 = PDOP
|
||||
// 16 = HDOP
|
||||
// 17 = VDOP
|
||||
GpsData.PDOP = tokenslist.at(15).toDouble();
|
||||
GpsData.HDOP = tokenslist.at(16).toDouble();
|
||||
GpsData.VDOP = tokenslist.at(17).toDouble();
|
||||
|
Loading…
x
Reference in New Issue
Block a user