diff --git a/src/config.c b/src/config.c index c9f5169..7e2bf38 100644 --- a/src/config.c +++ b/src/config.c @@ -359,7 +359,7 @@ int facilities_config(void* facilities_s) { facilities->lightship->protected_zones.pz[i] = zone; ++facilities->lightship->protected_zones.pz_len; ++i; - syslog_debug("[facilities] [config] loaded protection zone @ (%ld, %ld)", zone->protectedZoneLatitude, zone->protectedZoneLongitude); + syslog_debug("[facilities] [config] loaded protection zone @ (%lld, %lld)", zone->protectedZoneLatitude, zone->protectedZoneLongitude); } else { syslog_err("[facilities] [config] failure to decode protection zone '%s'", dir->d_name); ASN_STRUCT_FREE(asn_DEF_ProtectedCommunicationZone, zone); diff --git a/src/tpm.c b/src/tpm.c index 23cd962..2890113 100644 --- a/src/tpm.c +++ b/src/tpm.c @@ -70,8 +70,33 @@ int tpm_pay(void* fc, tolling_info_s* info, void* security_socket, uint8_t* neig tpm->header.stationID = facilities->id.station_id; pthread_mutex_unlock(&facilities->id.lock); + // timestamp asn_ulong2INTEGER(&tpm->tpm.timestamp, it2s_tender_get_clock(&facilities->epv)); + // stationType + tpm->tpm.stationType = facilities->station_type; + + // referencePosition + it2s_tender_lock_space(&facilities->epv); + it2s_tender_get_space(&facilities->epv); + tpm->tpm.referencePosition.altitude.altitudeValue = facilities->epv.space.altitude; + tpm->tpm.referencePosition.altitude.altitudeConfidence = facilities->epv.space.altitude_conf; + tpm->tpm.referencePosition.latitude = facilities->epv.space.latitude; + tpm->tpm.referencePosition.longitude = facilities->epv.space.longitude; + uint16_t lat_conf = facilities->epv.space.latitude_conf; + uint16_t lon_conf = facilities->epv.space.longitude_conf; + it2s_tender_unlock_space(&facilities->epv); + if (lat_conf > lon_conf) { + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMinorConfidence = lon_conf; + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMajorConfidence = lat_conf; + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMajorOrientation = 0; + } else { + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMinorConfidence = lon_conf; + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMajorConfidence = lat_conf; + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMajorOrientation = 900; + } + + // tollingFlow tpm->tpm.tollingFlow.present = TollingFlow_PR_request; tpm->tpm.tollingFlow.choice.request.clientId = tolling->client_id; tpm->tpm.tollingFlow.choice.request.infoId = info->asn->id; @@ -406,8 +431,33 @@ static void rsu_handle_recv(facilities_t* facilities, TPM_t* tpm_rx, void* secur tpm->header.stationID = facilities->id.station_id; pthread_mutex_unlock(&facilities->id.lock); + // timestamp asn_ulong2INTEGER(&tpm->tpm.timestamp, it2s_tender_get_clock(&facilities->epv)); + // stationType + tpm->tpm.stationType = facilities->station_type; + + // referencePosition + it2s_tender_lock_space(&facilities->epv); + it2s_tender_get_space(&facilities->epv); + tpm->tpm.referencePosition.altitude.altitudeValue = facilities->epv.space.altitude; + tpm->tpm.referencePosition.altitude.altitudeConfidence = facilities->epv.space.altitude_conf; + tpm->tpm.referencePosition.latitude = facilities->epv.space.latitude; + tpm->tpm.referencePosition.longitude = facilities->epv.space.longitude; + uint16_t lat_conf = facilities->epv.space.latitude_conf; + uint16_t lon_conf = facilities->epv.space.longitude_conf; + it2s_tender_unlock_space(&facilities->epv); + if (lat_conf > lon_conf) { + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMinorConfidence = lon_conf; + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMajorConfidence = lat_conf; + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMajorOrientation = 0; + } else { + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMinorConfidence = lon_conf; + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMajorConfidence = lat_conf; + tpm->tpm.referencePosition.positionConfidenceEllipse.semiMajorOrientation = 900; + } + + // tollingFlow tpm->tpm.tollingFlow.present = TollingFlow_PR_reply; tpm->tpm.tollingFlow.choice.reply.clientId = req->clientId; tpm->tpm.tollingFlow.choice.reply.infoId = req->infoId;