RAK-815 GPS now kinda works (must update associated libs). comms to it

still a bit yucky
1.2-legacy
geeksville 2020-07-10 20:17:20 -07:00
rodzic 9d3ca0d0f9
commit ed6b89b3b1
3 zmienionych plików z 8271 dodań i 10 usunięć

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -17,8 +17,7 @@ HardwareSerial *GPS::_serial_gps = NULL;
#endif #endif
#ifdef GPS_I2C_ADDRESS #ifdef GPS_I2C_ADDRESS
uint8_t GPS::i2cAddress = 0; uint8_t GPS::i2cAddress = GPS_I2C_ADDRESS;
// FIXME - no good - GPS_I2C_ADDRESS;
#else #else
uint8_t GPS::i2cAddress = 0; uint8_t GPS::i2cAddress = 0;
#endif #endif
@ -73,7 +72,7 @@ void perhapsSetRTC(struct tm &t)
// DEBUG_MSG("Got time from GPS month=%d, year=%d, unixtime=%ld\n", t.tm_mon, t.tm_year, tv.tv_sec); // DEBUG_MSG("Got time from GPS month=%d, year=%d, unixtime=%ld\n", t.tm_mon, t.tm_year, tv.tv_sec);
if (t.tm_year < 0 || t.tm_year >= 300) if (t.tm_year < 0 || t.tm_year >= 300)
DEBUG_MSG("Ignoring invalid GPS time\n"); DEBUG_MSG("Ignoring invalid GPS month=%d, year=%d, unixtime=%ld\n", t.tm_mon, t.tm_year, tv.tv_sec);
else else
perhapsSetRTC(&tv); perhapsSetRTC(&tv);
} }

Wyświetl plik

@ -14,8 +14,13 @@ bool UBloxGPS::tryConnect()
if (_serial_gps) if (_serial_gps)
isConnected = ublox.begin(*_serial_gps); isConnected = ublox.begin(*_serial_gps);
if (!isConnected && i2cAddress) if (!isConnected && i2cAddress) {
extern bool neo6M; // Super skanky - if we are talking to the device i2c we assume it is a neo7 on a RAK815, which
// supports the newer API
neo6M = true;
isConnected = ublox.begin(Wire, i2cAddress); isConnected = ublox.begin(Wire, i2cAddress);
}
return isConnected; return isConnected;
} }
@ -31,7 +36,13 @@ bool UBloxGPS::setup()
// _serial_gps.setRxBufferSize(1024); // the default is 256 // _serial_gps.setRxBufferSize(1024); // the default is 256
} }
// ublox.enableDebugging(Serial); #ifdef GPS_POWER_EN
pinMode(GPS_POWER_EN, OUTPUT);
digitalWrite(GPS_POWER_EN, 1);
delay(200); // Give time for the GPS to startup after we gave power
#endif
ublox.enableDebugging(Serial);
// try a second time, the ublox lib serial parsing is buggy? // try a second time, the ublox lib serial parsing is buggy?
if (!tryConnect()) if (!tryConnect())
@ -58,7 +69,7 @@ bool UBloxGPS::setup()
assert(ok); assert(ok);
} }
if (i2cAddress) { if (i2cAddress) {
ublox.setI2COutput(COM_TYPE_UBX, 500); ok = ublox.setI2COutput(COM_TYPE_UBX, 500);
assert(ok); assert(ok);
} }
@ -99,20 +110,22 @@ void UBloxGPS::doTask()
// Consume all characters that have arrived // Consume all characters that have arrived
// getPVT automatically calls checkUblox // if using i2c or serial look too see if any chars are ready
ublox.checkUblox(); // See if new data is available. Process bytes as they come in. ublox.checkUblox(); // See if new data is available. Process bytes as they come in.
// If we don't have a fix (a quick check), don't try waiting for a solution) // If we don't have a fix (a quick check), don't try waiting for a solution)
// Hmmm my fix type reading returns zeros for fix, which doesn't seem correct, because it is still sptting out positions // Hmmm my fix type reading returns zeros for fix, which doesn't seem correct, because it is still sptting out positions
// turn off for now // turn off for now
fixtype = ublox.getFixType(0); uint16_t maxWait = i2cAddress ? 300 : 0; // If using i2c we must poll with wait
fixtype = ublox.getFixType(maxWait);
DEBUG_MSG("GPS fix type %d\n", fixtype); DEBUG_MSG("GPS fix type %d\n", fixtype);
// DEBUG_MSG("sec %d\n", ublox.getSecond()); // DEBUG_MSG("sec %d\n", ublox.getSecond());
// DEBUG_MSG("lat %d\n", ublox.getLatitude()); // DEBUG_MSG("lat %d\n", ublox.getLatitude());
// any fix that has time // any fix that has time
if (ublox.getT(0)) {
if (ublox.getT(maxWait)) {
/* Convert to unix time /* Convert to unix time
The Unix epoch (or Unix time or POSIX time or Unix timestamp) is the number of seconds that have elapsed since January 1, 1970 The Unix epoch (or Unix time or POSIX time or Unix timestamp) is the number of seconds that have elapsed since January 1, 1970
(midnight UTC/GMT), not counting leap seconds (in ISO 8601: 1970-01-01T00:00:00Z). (midnight UTC/GMT), not counting leap seconds (in ISO 8601: 1970-01-01T00:00:00Z).
@ -128,7 +141,7 @@ The Unix epoch (or Unix time or POSIX time or Unix timestamp) is the number of s
perhapsSetRTC(t); perhapsSetRTC(t);
} }
if ((fixtype >= 3 && fixtype <= 4) && ublox.getP(0)) // rd fixes only if ((fixtype >= 3 && fixtype <= 4) && ublox.getP(maxWait)) // rd fixes only
{ {
// we only notify if position has changed // we only notify if position has changed
latitude = ublox.getLatitude(0); latitude = ublox.getLatitude(0);