feat: Add timeuncNs in PQWM1 message
Add timeuncNs field in PQWM1 of debug NMEA message generated by modem. SystemStaus to parse it. GnssDebug adds this value in timeunc when it generates GNSS debug report. Change-Id: I649915f95730dc8db22e8b4cb88008edc6d8b9d0 CRs-Fixed: 2236950
This commit is contained in:
parent
e7c30fa882
commit
2c71ec9e02
5 changed files with 46 additions and 20 deletions
|
@ -36,7 +36,8 @@ using ::android::hardware::hidl_vec;
|
||||||
#define GNSS_DEBUG_UNKNOWN_BEARING_ACCURACY_DEG (180)
|
#define GNSS_DEBUG_UNKNOWN_BEARING_ACCURACY_DEG (180)
|
||||||
|
|
||||||
#define GNSS_DEBUG_UNKNOWN_UTC_TIME (1483228800000LL) // 1/1/2017 00:00 GMT
|
#define GNSS_DEBUG_UNKNOWN_UTC_TIME (1483228800000LL) // 1/1/2017 00:00 GMT
|
||||||
#define GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC (1.57783680E17) // 5 years in ns
|
#define GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MIN (999) // 999 ns
|
||||||
|
#define GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MAX (1.57783680E17) // 5 years in ns
|
||||||
#define GNSS_DEBUG_UNKNOWN_FREQ_UNC_NS_PER_SEC (2.0e5) // ppm
|
#define GNSS_DEBUG_UNKNOWN_FREQ_UNC_NS_PER_SEC (2.0e5) // ppm
|
||||||
|
|
||||||
GnssDebug::GnssDebug(Gnss* gnss) : mGnss(gnss)
|
GnssDebug::GnssDebug(Gnss* gnss) : mGnss(gnss)
|
||||||
|
@ -125,9 +126,10 @@ Return<void> GnssDebug::getDebugData(getDebugData_cb _hidl_cb)
|
||||||
if (data.time.timeEstimate < GNSS_DEBUG_UNKNOWN_UTC_TIME) {
|
if (data.time.timeEstimate < GNSS_DEBUG_UNKNOWN_UTC_TIME) {
|
||||||
data.time.timeEstimate = GNSS_DEBUG_UNKNOWN_UTC_TIME;
|
data.time.timeEstimate = GNSS_DEBUG_UNKNOWN_UTC_TIME;
|
||||||
}
|
}
|
||||||
if (data.time.timeUncertaintyNs <= 0 ||
|
if (data.time.timeUncertaintyNs <= 0) {
|
||||||
data.time.timeUncertaintyNs > (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC) {
|
data.time.timeUncertaintyNs = (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MIN;
|
||||||
data.time.timeUncertaintyNs = (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC;
|
} else if (data.time.timeUncertaintyNs > GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MAX) {
|
||||||
|
data.time.timeUncertaintyNs = (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MAX;
|
||||||
}
|
}
|
||||||
if (data.time.frequencyUncertaintyNsPerSec <= 0 ||
|
if (data.time.frequencyUncertaintyNsPerSec <= 0 ||
|
||||||
data.time.frequencyUncertaintyNsPerSec > (float)GNSS_DEBUG_UNKNOWN_FREQ_UNC_NS_PER_SEC) {
|
data.time.frequencyUncertaintyNsPerSec > (float)GNSS_DEBUG_UNKNOWN_FREQ_UNC_NS_PER_SEC) {
|
||||||
|
|
|
@ -41,7 +41,8 @@ using ::android::hardware::gnss::V2_0::IGnssDebug;
|
||||||
#define GNSS_DEBUG_UNKNOWN_BEARING_ACCURACY_DEG (180)
|
#define GNSS_DEBUG_UNKNOWN_BEARING_ACCURACY_DEG (180)
|
||||||
|
|
||||||
#define GNSS_DEBUG_UNKNOWN_UTC_TIME (1483228800000LL) // 1/1/2017 00:00 GMT
|
#define GNSS_DEBUG_UNKNOWN_UTC_TIME (1483228800000LL) // 1/1/2017 00:00 GMT
|
||||||
#define GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC (1.57783680E17) // 5 years in ns
|
#define GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MIN (999) // 999 ns
|
||||||
|
#define GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MAX (1.57783680E17) // 5 years in ns
|
||||||
#define GNSS_DEBUG_UNKNOWN_FREQ_UNC_NS_PER_SEC (2.0e5) // ppm
|
#define GNSS_DEBUG_UNKNOWN_FREQ_UNC_NS_PER_SEC (2.0e5) // ppm
|
||||||
|
|
||||||
GnssDebug::GnssDebug(Gnss* gnss) : mGnss(gnss)
|
GnssDebug::GnssDebug(Gnss* gnss) : mGnss(gnss)
|
||||||
|
@ -130,9 +131,10 @@ Return<void> GnssDebug::getDebugData(getDebugData_cb _hidl_cb)
|
||||||
if (data.time.timeEstimate < GNSS_DEBUG_UNKNOWN_UTC_TIME) {
|
if (data.time.timeEstimate < GNSS_DEBUG_UNKNOWN_UTC_TIME) {
|
||||||
data.time.timeEstimate = GNSS_DEBUG_UNKNOWN_UTC_TIME;
|
data.time.timeEstimate = GNSS_DEBUG_UNKNOWN_UTC_TIME;
|
||||||
}
|
}
|
||||||
if (data.time.timeUncertaintyNs <= 0 ||
|
if (data.time.timeUncertaintyNs <= 0) {
|
||||||
data.time.timeUncertaintyNs > (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC) {
|
data.time.timeUncertaintyNs = (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MIN;
|
||||||
data.time.timeUncertaintyNs = (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC;
|
} else if (data.time.timeUncertaintyNs > GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MAX) {
|
||||||
|
data.time.timeUncertaintyNs = (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MAX;
|
||||||
}
|
}
|
||||||
if (data.time.frequencyUncertaintyNsPerSec <= 0 ||
|
if (data.time.frequencyUncertaintyNsPerSec <= 0 ||
|
||||||
data.time.frequencyUncertaintyNsPerSec > (float)GNSS_DEBUG_UNKNOWN_FREQ_UNC_NS_PER_SEC) {
|
data.time.frequencyUncertaintyNsPerSec > (float)GNSS_DEBUG_UNKNOWN_FREQ_UNC_NS_PER_SEC) {
|
||||||
|
@ -247,9 +249,11 @@ Return<void> GnssDebug::getDebugData_2_0(getDebugData_2_0_cb _hidl_cb)
|
||||||
if (data.time.timeEstimate < GNSS_DEBUG_UNKNOWN_UTC_TIME) {
|
if (data.time.timeEstimate < GNSS_DEBUG_UNKNOWN_UTC_TIME) {
|
||||||
data.time.timeEstimate = GNSS_DEBUG_UNKNOWN_UTC_TIME;
|
data.time.timeEstimate = GNSS_DEBUG_UNKNOWN_UTC_TIME;
|
||||||
}
|
}
|
||||||
if (data.time.timeUncertaintyNs <= 0 ||
|
if (data.time.timeUncertaintyNs <= 0) {
|
||||||
data.time.timeUncertaintyNs > (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC) {
|
data.time.timeUncertaintyNs = (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MIN;
|
||||||
data.time.timeUncertaintyNs = (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC;
|
}
|
||||||
|
else if (data.time.timeUncertaintyNs > GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MAX) {
|
||||||
|
data.time.timeUncertaintyNs = (float)GNSS_DEBUG_UNKNOWN_UTC_TIME_UNC_MAX;
|
||||||
}
|
}
|
||||||
if (data.time.frequencyUncertaintyNsPerSec <= 0 ||
|
if (data.time.frequencyUncertaintyNsPerSec <= 0 ||
|
||||||
data.time.frequencyUncertaintyNsPerSec > (float)GNSS_DEBUG_UNKNOWN_FREQ_UNC_NS_PER_SEC) {
|
data.time.frequencyUncertaintyNsPerSec > (float)GNSS_DEBUG_UNKNOWN_FREQ_UNC_NS_PER_SEC) {
|
||||||
|
|
|
@ -126,6 +126,7 @@ public:
|
||||||
uint32_t mBdsBpAmpQ; // x1C
|
uint32_t mBdsBpAmpQ; // x1C
|
||||||
uint32_t mGalBpAmpI; // x1D
|
uint32_t mGalBpAmpI; // x1D
|
||||||
uint32_t mGalBpAmpQ; // x1E
|
uint32_t mGalBpAmpQ; // x1E
|
||||||
|
uint64_t mTimeUncNs; // x1F
|
||||||
};
|
};
|
||||||
|
|
||||||
// parser
|
// parser
|
||||||
|
@ -157,7 +158,6 @@ private:
|
||||||
eAgcGlo = 20,
|
eAgcGlo = 20,
|
||||||
eAgcBds = 21,
|
eAgcBds = 21,
|
||||||
eAgcGal = 22,
|
eAgcGal = 22,
|
||||||
eMax0 = eAgcGal,
|
|
||||||
eLeapSeconds = 23,
|
eLeapSeconds = 23,
|
||||||
eLeapSecUnc = 24,
|
eLeapSecUnc = 24,
|
||||||
eGloBpAmpI = 25,
|
eGloBpAmpI = 25,
|
||||||
|
@ -166,6 +166,8 @@ private:
|
||||||
eBdsBpAmpQ = 28,
|
eBdsBpAmpQ = 28,
|
||||||
eGalBpAmpI = 29,
|
eGalBpAmpI = 29,
|
||||||
eGalBpAmpQ = 30,
|
eGalBpAmpQ = 30,
|
||||||
|
eMax0 = eGalBpAmpQ,
|
||||||
|
eTimeUncNs = 31,
|
||||||
eMax
|
eMax
|
||||||
};
|
};
|
||||||
SystemStatusPQWM1 mM1;
|
SystemStatusPQWM1 mM1;
|
||||||
|
@ -201,6 +203,7 @@ public:
|
||||||
inline uint32_t getBdsBpAmpQ() { return mM1.mBdsBpAmpQ; }
|
inline uint32_t getBdsBpAmpQ() { return mM1.mBdsBpAmpQ; }
|
||||||
inline uint32_t getGalBpAmpI() { return mM1.mGalBpAmpI; }
|
inline uint32_t getGalBpAmpI() { return mM1.mGalBpAmpI; }
|
||||||
inline uint32_t getGalBpAmpQ() { return mM1.mGalBpAmpQ; }
|
inline uint32_t getGalBpAmpQ() { return mM1.mGalBpAmpQ; }
|
||||||
|
inline uint64_t getTimeUncNs() { return mM1.mTimeUncNs; }
|
||||||
|
|
||||||
SystemStatusPQWM1parser(const char *str_in, uint32_t len_in)
|
SystemStatusPQWM1parser(const char *str_in, uint32_t len_in)
|
||||||
: SystemStatusNmeaBase(str_in, len_in)
|
: SystemStatusNmeaBase(str_in, len_in)
|
||||||
|
@ -245,6 +248,9 @@ public:
|
||||||
mM1.mGalBpAmpI = atoi(mField[eGalBpAmpI].c_str());
|
mM1.mGalBpAmpI = atoi(mField[eGalBpAmpI].c_str());
|
||||||
mM1.mGalBpAmpQ = atoi(mField[eGalBpAmpQ].c_str());
|
mM1.mGalBpAmpQ = atoi(mField[eGalBpAmpQ].c_str());
|
||||||
}
|
}
|
||||||
|
if (mField.size() > eTimeUncNs) {
|
||||||
|
mM1.mTimeUncNs = strtoull(mField[eTimeUncNs].c_str(), nullptr, 10);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline SystemStatusPQWM1& get() { return mM1;} //getparser
|
inline SystemStatusPQWM1& get() { return mM1;} //getparser
|
||||||
|
@ -715,7 +721,8 @@ SystemStatusTimeAndClock::SystemStatusTimeAndClock(const SystemStatusPQWM1& nmea
|
||||||
mClockFreqBias(nmea.mClockFreqBias),
|
mClockFreqBias(nmea.mClockFreqBias),
|
||||||
mClockFreqBiasUnc(nmea.mClockFreqBiasUnc),
|
mClockFreqBiasUnc(nmea.mClockFreqBiasUnc),
|
||||||
mLeapSeconds(nmea.mLeapSeconds),
|
mLeapSeconds(nmea.mLeapSeconds),
|
||||||
mLeapSecUnc(nmea.mLeapSecUnc)
|
mLeapSecUnc(nmea.mLeapSecUnc),
|
||||||
|
mTimeUncNs(nmea.mTimeUncNs)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -729,7 +736,8 @@ bool SystemStatusTimeAndClock::equals(const SystemStatusTimeAndClock& peer)
|
||||||
(mClockFreqBias != peer.mClockFreqBias) ||
|
(mClockFreqBias != peer.mClockFreqBias) ||
|
||||||
(mClockFreqBiasUnc != peer.mClockFreqBiasUnc) ||
|
(mClockFreqBiasUnc != peer.mClockFreqBiasUnc) ||
|
||||||
(mLeapSeconds != peer.mLeapSeconds) ||
|
(mLeapSeconds != peer.mLeapSeconds) ||
|
||||||
(mLeapSecUnc != peer.mLeapSecUnc)) {
|
(mLeapSecUnc != peer.mLeapSecUnc) ||
|
||||||
|
(mTimeUncNs != peer.mTimeUncNs)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -737,7 +745,7 @@ bool SystemStatusTimeAndClock::equals(const SystemStatusTimeAndClock& peer)
|
||||||
|
|
||||||
void SystemStatusTimeAndClock::dump()
|
void SystemStatusTimeAndClock::dump()
|
||||||
{
|
{
|
||||||
LOC_LOGV("TimeAndClock: u=%ld:%ld g=%d:%d v=%d ts=%d tu=%d b=%d bu=%d ls=%d lu=%d",
|
LOC_LOGV("TimeAndClock: u=%ld:%ld g=%d:%d v=%d ts=%d tu=%d b=%d bu=%d ls=%d lu=%d un=%" PRIu64,
|
||||||
mUtcTime.tv_sec, mUtcTime.tv_nsec,
|
mUtcTime.tv_sec, mUtcTime.tv_nsec,
|
||||||
mGpsWeek,
|
mGpsWeek,
|
||||||
mGpsTowMs,
|
mGpsTowMs,
|
||||||
|
@ -747,7 +755,8 @@ void SystemStatusTimeAndClock::dump()
|
||||||
mClockFreqBias,
|
mClockFreqBias,
|
||||||
mClockFreqBiasUnc,
|
mClockFreqBiasUnc,
|
||||||
mLeapSeconds,
|
mLeapSeconds,
|
||||||
mLeapSecUnc);
|
mLeapSecUnc,
|
||||||
|
mTimeUncNs);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,6 +116,7 @@ public:
|
||||||
int32_t mClockFreqBiasUnc;
|
int32_t mClockFreqBiasUnc;
|
||||||
int32_t mLeapSeconds;
|
int32_t mLeapSeconds;
|
||||||
int32_t mLeapSecUnc;
|
int32_t mLeapSecUnc;
|
||||||
|
uint64_t mTimeUncNs;
|
||||||
inline SystemStatusTimeAndClock() :
|
inline SystemStatusTimeAndClock() :
|
||||||
mGpsWeek(0),
|
mGpsWeek(0),
|
||||||
mGpsTowMs(0),
|
mGpsTowMs(0),
|
||||||
|
@ -125,7 +126,8 @@ public:
|
||||||
mClockFreqBias(0),
|
mClockFreqBias(0),
|
||||||
mClockFreqBiasUnc(0),
|
mClockFreqBiasUnc(0),
|
||||||
mLeapSeconds(0),
|
mLeapSeconds(0),
|
||||||
mLeapSecUnc(0) {}
|
mLeapSecUnc(0),
|
||||||
|
mTimeUncNs(0ULL) {}
|
||||||
inline SystemStatusTimeAndClock(const SystemStatusPQWM1& nmea);
|
inline SystemStatusTimeAndClock(const SystemStatusPQWM1& nmea);
|
||||||
bool equals(const SystemStatusTimeAndClock& peer);
|
bool equals(const SystemStatusTimeAndClock& peer);
|
||||||
void dump(void);
|
void dump(void);
|
||||||
|
|
|
@ -4340,9 +4340,18 @@ bool GnssAdapter::getDebugReport(GnssDebugReport& r)
|
||||||
(int64_t)(reports.mTimeAndClock.back().mLeapSeconds))*1000ULL +
|
(int64_t)(reports.mTimeAndClock.back().mLeapSeconds))*1000ULL +
|
||||||
(int64_t)(reports.mTimeAndClock.back().mGpsTowMs);
|
(int64_t)(reports.mTimeAndClock.back().mGpsTowMs);
|
||||||
|
|
||||||
r.mTime.timeUncertaintyNs =
|
if (reports.mTimeAndClock.back().mTimeUncNs > 0) {
|
||||||
((float)(reports.mTimeAndClock.back().mTimeUnc) +
|
// TimeUncNs value is available
|
||||||
(float)(reports.mTimeAndClock.back().mLeapSecUnc))*1000.0f;
|
r.mTime.timeUncertaintyNs =
|
||||||
|
(float)(reports.mTimeAndClock.back().mLeapSecUnc)*1000.0f +
|
||||||
|
(float)(reports.mTimeAndClock.back().mTimeUncNs);
|
||||||
|
} else {
|
||||||
|
// fall back to legacy TimeUnc
|
||||||
|
r.mTime.timeUncertaintyNs =
|
||||||
|
((float)(reports.mTimeAndClock.back().mTimeUnc) +
|
||||||
|
(float)(reports.mTimeAndClock.back().mLeapSecUnc))*1000.0f;
|
||||||
|
}
|
||||||
|
|
||||||
r.mTime.frequencyUncertaintyNsPerSec =
|
r.mTime.frequencyUncertaintyNsPerSec =
|
||||||
(float)(reports.mTimeAndClock.back().mClockFreqBiasUnc);
|
(float)(reports.mTimeAndClock.back().mClockFreqBiasUnc);
|
||||||
LOC_LOGV("getDebugReport - timeestimate=%" PRIu64 " unc=%f frequnc=%f",
|
LOC_LOGV("getDebugReport - timeestimate=%" PRIu64 " unc=%f frequnc=%f",
|
||||||
|
|
Loading…
Reference in a new issue