diff options
author | Helmut Schmidt <Helmut.3.Schmidt@continental-corporation.com> | 2017-01-09 17:24:22 +0100 |
---|---|---|
committer | Helmut Schmidt <Helmut.3.Schmidt@continental-corporation.com> | 2017-01-09 17:24:22 +0100 |
commit | 9b943df3bb4e1c74946bbaf93d38e59e50e0b9a0 (patch) | |
tree | 2fba0c5878b931519134cb3042661ba3e8f2d9d6 | |
parent | aa969b251e4c3f8e57cf8beb57a556640c622651 (diff) | |
download | positioning-9b943df3bb4e1c74946bbaf93d38e59e50e0b9a0.tar.gz |
GT-3459: GNSS API: TGNSSPosition: add correctionAge field
-rw-r--r-- | gnss-service/api/gnss.h | 7 | ||||
-rw-r--r-- | gnss-service/src/gnss-use-replayer.c | 45 | ||||
-rw-r--r-- | gnss-service/test/gnss-service-client.c | 5 | ||||
-rw-r--r-- | logger/test/gnsslog.cpp | 3 |
4 files changed, 51 insertions, 9 deletions
diff --git a/gnss-service/api/gnss.h b/gnss-service/api/gnss.h index 4c8b146..dcaadca 100644 --- a/gnss-service/api/gnss.h +++ b/gnss-service/api/gnss.h @@ -269,10 +269,12 @@ typedef enum { GNSS_POSITION_SHEADING_VALID = 0x00020000, /**< Validity bit for field TGNSSPosition::sigmaHeading. */ //quality parameters: overall GNSS fix status GNSS_POSITION_STAT_VALID = 0x00040000, /**< Validity bit for field TGNSSPosition::fixStatus. */ - GNSS_POSITION_TYPE_VALID = 0x00080000, /**< Validity bit for field TGNSSPosition::fixTypeBits. */ + GNSS_POSITION_TYPE_VALID = 0x00080000, /**< Validity bit for field TGNSSPosition::fixTypeBits. */ //gnss system information GNSS_POSITION_ASYS_VALID = 0x00100000, /**< Validity bit for field TGNSSPosition::activatedSystems. */ GNSS_POSITION_USYS_VALID = 0x00200000, /**< Validity bit for field TGNSSPosition::usedSystems. */ + //correction data information + GNSS_POSITION_CORRAGE_VALID = 0x00400000, /**< Validity bit for field TGNSSPosition::correctionAge. */ } EGNSSPositionValidityBits; /** @@ -314,6 +316,9 @@ typedef struct { [bitwise or'ed @ref EGNSSSystem values].*/ uint32_t usedSystems; /**< Bit mask indicating the satellite systems that are actually used for the position fix [bitwise or'ed @ref EGNSSSystem values].*/ + //correction data information + uint16_t correctionAge; /**< Age of used correction data in [s]. + Note: The kind of used correction data is identified by the corresponding bit in @ref fixTypeBits. */ //validity bits uint32_t validityBits; /**< Bit mask indicating the validity of each corresponding value. [bitwise or'ed @ref EGNSSPositionValidityBits values]. diff --git a/gnss-service/src/gnss-use-replayer.c b/gnss-service/src/gnss-use-replayer.c index ae284ec..ffcf8fc 100644 --- a/gnss-service/src/gnss-use-replayer.c +++ b/gnss-service/src/gnss-use-replayer.c @@ -141,7 +141,7 @@ static bool processGVGNSPOS(const char* data) } n = sscanf(data, - "%"SCNu64",%"SCNu16",$GVGNSPOS,%"SCNu64",%lf,%lf,%f,%f,%f,%f,%f,%f,%f,%f,%"SCNu16",%"SCNu16",%"SCNu16",%f,%f,%f,%f,%f,%u,%x,%x,%x,%x", + "%"SCNu64",%"SCNu16",$GVGNSPOS,%"SCNu64",%lf,%lf,%f,%f,%f,%f,%f,%f,%f,%f,%"SCNu16",%"SCNu16",%"SCNu16",%f,%f,%f,%f,%f,%u,%x,%x,%x,%"SCNu16",%x", ×tamp, &countdown, &pos.timestamp, @@ -167,13 +167,48 @@ static bool processGVGNSPOS(const char* data) &pos.fixTypeBits, &pos.activatedSystems, &pos.usedSystems, + &pos.correctionAge, &pos.validityBits ); - if (n != 26) //26 fields to parse - { - LOG_ERROR_MSG(gContext,"replayer: processGVGNSPOS failed!"); - return false; + if (n != 27) //27 fields to parse + { + //try old version without correctionAge + n = sscanf(data, + "%"SCNu64",%"SCNu16",$GVGNSPOS,%"SCNu64",%lf,%lf,%f,%f,%f,%f,%f,%f,%f,%f,%"SCNu16",%"SCNu16",%"SCNu16",%f,%f,%f,%f,%f,%u,%x,%x,%x,%x", + ×tamp, + &countdown, + &pos.timestamp, + &pos.latitude, + &pos.longitude, + &pos.altitudeMSL, + &pos.altitudeEll, + &pos.hSpeed, + &pos.vSpeed, + &pos.heading, + &pos.pdop, + &pos.hdop, + &pos.vdop, + &pos.usedSatellites, + &pos.trackedSatellites, + &pos.visibleSatellites, + &pos.sigmaHPosition, + &pos.sigmaAltitude, + &pos.sigmaHSpeed, + &pos.sigmaVSpeed, + &pos.sigmaHeading, + &pos.fixStatus, + &pos.fixTypeBits, + &pos.activatedSystems, + &pos.usedSystems, + &pos.validityBits + ); + pos.validityBits &= ~GNSS_POSITION_CORRAGE_VALID; //just to be safe + if (n != 26) //26 fields to parse + { + LOG_ERROR_MSG(gContext,"replayer: processGVGNSPOS failed!"); + return false; + } } //buffered data handling diff --git a/gnss-service/test/gnss-service-client.c b/gnss-service/test/gnss-service-client.c index a900f7c..3f9f2bf 100644 --- a/gnss-service/test/gnss-service-client.c +++ b/gnss-service/test/gnss-service-client.c @@ -74,7 +74,7 @@ static void cbPosition(const TGNSSPosition position[], uint16_t numElements) for (i = 0; i<numElements; i++) { - LOG_INFO(gCtx,"Position Update[%d/%d]: timestamp=%llu latitude=%.5f longitude=%.5f altitudeMSL=%.1f hSpeed=%.1f heading=%.1f\n hdop=%.1f usedSatellites=%d sigmaHPosition=%.1f sigmaHSpeed=%.1f sigmaHeading=%.1f\n fixStatus=%d fixTypeBits=0x%08X activatedSystems=0x%08X usedSystems=0x%08X", + LOG_INFO(gCtx,"Position Update[%d/%d]: timestamp=%llu latitude=%.5f longitude=%.5f altitudeMSL=%.1f hSpeed=%.1f heading=%.1f\n hdop=%.1f usedSatellites=%d sigmaHPosition=%.1f sigmaHSpeed=%.1f sigmaHeading=%.1f\n fixStatus=%d fixTypeBits=0x%08X activatedSystems=0x%08X usedSystems=0x%08X correctionAge=%d", i+1, numElements, position[i].timestamp, @@ -91,7 +91,8 @@ static void cbPosition(const TGNSSPosition position[], uint16_t numElements) position[i].fixStatus, position[i].fixTypeBits, position[i].activatedSystems, - position[i].usedSystems); + position[i].usedSystems, + position[i].correctionAge); } } diff --git a/logger/test/gnsslog.cpp b/logger/test/gnsslog.cpp index d736196..c46a33e 100644 --- a/logger/test/gnsslog.cpp +++ b/logger/test/gnsslog.cpp @@ -55,7 +55,7 @@ void gnssPositionToString(uint64_t timestamp, uint16_t countdown, const TGNSSPos snprintf( str, size-1, //ensure that there is space for null-terminator - "%"PRIu64",%"PRIu16",$GVGNSPOS,%"PRIu64",%10.7f,%10.7f,%6.1f,%6.1f,%4.1f,%4.1f,%6.2f,%3.1f,%3.1f,%3.1f,%02"PRIu16",%02"PRIu16",%02"PRIu16",%4.1f,%4.1f,%4.1f,%4.1f,%4.1f,%u,0X%08X,0X%08X,0X%08X,0X%08X", + "%"PRIu64",%"PRIu16",$GVGNSPOS,%"PRIu64",%10.7f,%10.7f,%6.1f,%6.1f,%4.1f,%4.1f,%6.2f,%3.1f,%3.1f,%3.1f,%02"PRIu16",%02"PRIu16",%02"PRIu16",%4.1f,%4.1f,%4.1f,%4.1f,%4.1f,%u,0X%08X,0X%08X,0X%08X,%02"PRIu16",0X%08X", timestamp, countdown, position->timestamp, @@ -81,6 +81,7 @@ void gnssPositionToString(uint64_t timestamp, uint16_t countdown, const TGNSSPos position->fixTypeBits, position->activatedSystems, position->usedSystems, + position->correctionAge, position->validityBits ); str[size-1] = 0; //ensure that string is null-terminated |