summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelmut Schmidt <Helmut.3.Schmidt@continental-corporation.com>2017-01-09 17:24:22 +0100
committerHelmut Schmidt <Helmut.3.Schmidt@continental-corporation.com>2017-01-09 17:24:22 +0100
commit9b943df3bb4e1c74946bbaf93d38e59e50e0b9a0 (patch)
tree2fba0c5878b931519134cb3042661ba3e8f2d9d6
parentaa969b251e4c3f8e57cf8beb57a556640c622651 (diff)
downloadpositioning-9b943df3bb4e1c74946bbaf93d38e59e50e0b9a0.tar.gz
GT-3459: GNSS API: TGNSSPosition: add correctionAge field
-rw-r--r--gnss-service/api/gnss.h7
-rw-r--r--gnss-service/src/gnss-use-replayer.c45
-rw-r--r--gnss-service/test/gnss-service-client.c5
-rw-r--r--logger/test/gnsslog.cpp3
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",
&timestamp,
&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",
+ &timestamp,
+ &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