Exemplo n.º 1
0
void GPSManager::init() {
    gps_rec = new gpsmm("localhost", DEFAULT_GPSD_PORT);
    lastStatus = STATUS_NO_FIX;
    lastLatitude = lastLongitude = lastAltitude = 0;

    emit statusChanged(lastStatus);
    emit gpsFix(NAN, NAN, NAN);

    if (!gps_rec->stream(WATCH_ENABLE|WATCH_JSON)) {
        qDebug() << Q_FUNC_INFO << "Warning: no GPSD running";
        emit ready(false);
        return;
    } else {
        pollTimer.start();
    }
}
Exemplo n.º 2
0
void GPSManager::processData(gps_data_t *data) {
    if(lastStatus != data->status) {
        lastStatus = data->status;
        emit statusChanged(lastStatus);
    }
    if(lastStatus != STATUS_NO_FIX) {
        if(lastLatitude != data->fix.latitude || lastLongitude != data->fix.longitude || lastAltitude != data->fix.altitude) {
            lastLatitude = data->fix.latitude;
            lastLongitude = data->fix.longitude;
            lastAltitude = data->fix.altitude;
            emit gpsFix(lastLatitude, lastLongitude, lastAltitude);
            if(!gotInitialFix) {
                gotInitialFix = true;
                emit ready(true);
            }
        }
    }
}
Exemplo n.º 3
0
inline int parseGpsCmd(int type) {
	
	switch(cmdRead()) {
	case 'F':
		switch(cmdRead()) {
		case 'V':
			switch(cmdLook()) {
			case LINE_TERMINATOR:
				cmdRead();
			case '+':
				// READ  "Fix value"
				ShowValueU(gpsFix());
				goto pgc_ok;
			}
			goto pgc_error;
		}
		goto pgc_error;
	case 'G':
		switch(cmdRead()) {
		case 'S':
			switch(cmdLook()) {
			case LINE_TERMINATOR:
				cmdRead();
			case '+':
				// READ  "Ground speed"
				ShowValueD(gpsSpeed());
				goto pgc_ok;
			}
			goto pgc_error;
		}
		goto pgc_error;
	case 'H':
		switch(cmdRead()) {
		case 'P':
			switch(cmdLook()) {
			case LINE_TERMINATOR:
				cmdRead();
			case '+':
				// READ  "HDOP"
				ShowValueD(gpsHdop());
				goto pgc_ok;
			}
			goto pgc_error;
		}
		goto pgc_error;
	case 'L':
		switch(cmdRead()) {
		case 'A':
			switch(cmdLook()) {
			case LINE_TERMINATOR:
				cmdRead();
			case '+':
				// READ  "Lat"
				if (gpsIsPosValid()) {
					ShowValueD(gpsLat());
				} else
					Serial_printStr("NA ");
				goto pgc_ok;
			}
			goto pgc_error;
		case 'O':
			switch(cmdLook()) {
			case LINE_TERMINATOR:
				cmdRead();
			case '+':
				// READ  "Lon"
				if (gpsIsPosValid()) {
					ShowValueD(gpsLon());
				} else
					Serial_printStr("NA ");
				goto pgc_ok;
			}
			goto pgc_error;
		}
		goto pgc_error;
	case 'P':
		switch(cmdRead()) {
		case 'S':
			switch(cmdLook()) {
			case LINE_TERMINATOR:
				cmdRead();
			case '+':
				// READ  "Power State"
				ShowValueU(d_gpsPowerState);
				goto pgc_ok;
			case '=':
				// WRITE "Power State"
				cmdRead();
				ReadValueU(d_gpsPowerState);
				goto pgc_ok;
			}
			goto pgc_error;
		}
		goto pgc_error;
	case 'S':
		switch(cmdRead()) {
		case 'C':
			switch(cmdLook()) {
			case LINE_TERMINATOR:
				cmdRead();
			case '=': // WRITE "GPS Command"
				cmdRead();
				ReadValueUL(d_gpsNextCmd);
				goto pgc_ok;
			}
			goto pgc_error;
		}
		goto pgc_error;

	case 'T':
		switch(cmdRead()) {
		case 'D':
			switch(cmdLook()) {
			case LINE_TERMINATOR:
				cmdRead();
			case '+':
				// READ  "Track Degree"
				ShowValueD(gpsDegree());
				goto pgc_ok;
			}
			goto pgc_error;
		}
		goto pgc_error;
	}

pgc_error:
	return ERROR;
pgc_ok:
	return OK;

}