mirror of
https://github.com/meshtastic/firmware.git
synced 2025-04-26 18:09:04 +00:00
RAK-815 GPS now kinda works (must update associated libs). comms to it
still a bit yucky
This commit is contained in:
parent
9d3ca0d0f9
commit
ed6b89b3b1
8249
docs/hardware/rak815/ublox max7 datasheet.pdf
Normal file
8249
docs/hardware/rak815/ublox max7 datasheet.pdf
Normal file
File diff suppressed because one or more lines are too long
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user