1
0
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:
cranphin 2010-09-06 21:02:35 +00:00 committed by cranphin
parent c87ff38039
commit e8b0169b34
3 changed files with 33 additions and 16 deletions

View File

@ -29,7 +29,7 @@
GPSParser::GPSParser(QObject *parent) : QObject(parent)
{
qRegisterMetaType<QList<int> >("QList<int>");
}
GPSParser::~GPSParser()

View File

@ -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

View File

@ -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();