Add TPM position, station type

This commit is contained in:
emanuel 2022-05-30 15:58:15 +01:00
parent 7ad01312de
commit b777f21ab8
2 changed files with 51 additions and 1 deletions

View File

@ -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);

View File

@ -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;