From 5f6c758733ec3efadee494c986c9551a7868f47e Mon Sep 17 00:00:00 2001 From: emanuel Date: Sat, 24 Apr 2021 20:25:55 +0100 Subject: [PATCH] Time manipulation first efforts --- src/cam.c | 10 ++-------- src/config.c | 2 ++ src/facilities.c | 3 +++ src/facilities.h | 1 + 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/cam.c b/src/cam.c index 10165e9..07f68d7 100644 --- a/src/cam.c +++ b/src/cam.c @@ -89,20 +89,14 @@ static int mk_cam(facilities_t* facilities, uint8_t *cam_oer, uint32_t *cam_len) pthread_mutex_unlock(&facilities->id.lock); cam->cam.camParameters.basicContainer.stationType = facilities->station_type; - - long generationdeltatime = (long)((systemtime.tv_sec + LEAP_SECONDS) * 1000 + systemtime.tv_nsec / 1E6); - generationdeltatime = generationdeltatime - 1072915200000; // EPOCH -> 2004/01/01 00:00:000 - generationdeltatime = generationdeltatime % 64536; - cam->cam.generationDeltaTime = generationdeltatime; - BasicContainer_t* bc = &cam->cam.camParameters.basicContainer; - lightship_t* lightship = facilities->lightship; pthread_mutex_lock(&lightship->lock); if (facilities->station_type != StationType_roadSideUnit) { pthread_mutex_lock(&facilities->epv.lock); + cam->cam.generationDeltaTime = facilities->epv.timestamp % 64536; bc->referencePosition.altitude.altitudeValue = facilities->epv.altitude; bc->referencePosition.altitude.altitudeConfidence = facilities->epv.altitude_conf; @@ -113,7 +107,6 @@ static int mk_cam(facilities_t* facilities, uint8_t *cam_oer, uint32_t *cam_len) bc->referencePosition.positionConfidenceEllipse.semiMajorConfidence = SemiAxisLength_unavailable; bc->referencePosition.positionConfidenceEllipse.semiMajorOrientation = HeadingValue_unavailable; - cam->cam.camParameters.highFrequencyContainer.present = HighFrequencyContainer_PR_basicVehicleContainerHighFrequency; BasicVehicleContainerHighFrequency_t* bvc_hf = &cam->cam.camParameters.highFrequencyContainer.choice.basicVehicleContainerHighFrequency; @@ -223,6 +216,7 @@ static int mk_cam(facilities_t* facilities, uint8_t *cam_oer, uint32_t *cam_len) } else { pthread_mutex_lock(&facilities->epv.lock); + cam->cam.generationDeltaTime = facilities->epv.timestamp % 64536; bc->referencePosition.altitude.altitudeValue = facilities->epv.altitude; bc->referencePosition.altitude.altitudeConfidence = facilities->epv.altitude_conf; diff --git a/src/config.c b/src/config.c index 9e4e3ab..7ddac9a 100644 --- a/src/config.c +++ b/src/config.c @@ -286,6 +286,8 @@ int facilities_config(void* facilities_s) { facilities->epv.heading_conf = mrep->attributes->heading->headingConfidence; facilities->epv.speed = mrep->attributes->speed->speedValue; facilities->epv.speed_conf = mrep->attributes->speed->speedConfidence; + + asn_INTEGER2ulong(&mrep->attributes->timestamp, &facilities->epv.timestamp); } else { syslog_err("[applications] rejected MR attribute request"); rv = 1; diff --git a/src/facilities.c b/src/facilities.c index 8697a0d..32d347a 100644 --- a/src/facilities.c +++ b/src/facilities.c @@ -373,6 +373,9 @@ static int management_indication(facilities_t* facilities, void* responder, uint facilities->epv.altitude = mi->choice.attributes.altitude->altitudeValue; facilities->epv.altitude_conf = mi->choice.attributes.altitude->altitudeConfidence; } + + asn_INTEGER2ulong(&mi->choice.attributes.timestamp, &facilities->epv.timestamp); + pthread_mutex_unlock(&facilities->epv.lock); } diff --git a/src/facilities.h b/src/facilities.h index 6d99122..cc6fdd3 100644 --- a/src/facilities.h +++ b/src/facilities.h @@ -20,6 +20,7 @@ enum ID_CHANGE_STAGE { typedef struct epv { pthread_mutex_t lock; + uint64_t timestamp; long latitude; long longitude;