GPS fixed

This commit is contained in:
emanuel 2020-12-17 12:32:13 +00:00
parent ac8b0e24fb
commit e55a3782a5
3 changed files with 48 additions and 15 deletions

View File

@ -155,6 +155,7 @@ static int mk_cam(facilities_t* facilities, uint8_t *cam, uint32_t *cam_len) {
cam_tx->cam.camParameters.basicContainer.referencePosition.altitude.altitudeConfidence = AltitudeConfidence_unavailable; cam_tx->cam.camParameters.basicContainer.referencePosition.altitude.altitudeConfidence = AltitudeConfidence_unavailable;
} }
if (!facilities->gps_fixed) {
if (!isnan(gps_data.gps_latitude)) { if (!isnan(gps_data.gps_latitude)) {
cam_tx->cam.camParameters.basicContainer.referencePosition.latitude = (int32_t)((gps_data.gps_latitude) * 10000000); cam_tx->cam.camParameters.basicContainer.referencePosition.latitude = (int32_t)((gps_data.gps_latitude) * 10000000);
} else { } else {
@ -166,6 +167,11 @@ static int mk_cam(facilities_t* facilities, uint8_t *cam, uint32_t *cam_len) {
} else { } else {
cam_tx->cam.camParameters.basicContainer.referencePosition.longitude = Longitude_unavailable; cam_tx->cam.camParameters.basicContainer.referencePosition.longitude = Longitude_unavailable;
} }
} else {
cam_tx->cam.camParameters.basicContainer.referencePosition.latitude = (int32_t)((facilities->latitude) * 10000000);
cam_tx->cam.camParameters.basicContainer.referencePosition.longitude = (int32_t)((facilities->longitude) * 10000000);
}
cam_tx->cam.camParameters.basicContainer.referencePosition.positionConfidenceEllipse.semiMinorConfidence = SemiAxisLength_unavailable; cam_tx->cam.camParameters.basicContainer.referencePosition.positionConfidenceEllipse.semiMinorConfidence = SemiAxisLength_unavailable;
cam_tx->cam.camParameters.basicContainer.referencePosition.positionConfidenceEllipse.semiMajorConfidence = SemiAxisLength_unavailable; cam_tx->cam.camParameters.basicContainer.referencePosition.positionConfidenceEllipse.semiMajorConfidence = SemiAxisLength_unavailable;

View File

@ -63,6 +63,21 @@ static int extract_val_int(int64_t * output, toml_table_t *table, char* name) {
return 0; return 0;
} }
static int extract_val_double(double * output, toml_table_t *table, char* name) {
toml_raw_t raw;
if (0 == (raw = toml_raw_in(table, name))) {
syslog_err("[itss] [config] error extracting %s from file", name);
return 1;
}
if (toml_rtod(raw, output)) {
syslog_err("[itss] [config] error extracting %s to double", name);
return 1;
}
return 0;
}
int itss_config(void* facilities_s, char* config_file) { int itss_config(void* facilities_s, char* config_file) {
int rv = 0; int rv = 0;
@ -88,7 +103,7 @@ int itss_config(void* facilities_s, char* config_file) {
fclose(fp); fclose(fp);
// Tables // Tables
toml_table_t *general, *security, *denm, *cam, *beacon, *replay, *ivim, *protected_zones; toml_table_t *general, *security, *denm, *cam, *beacon, *replay, *ivim, *protected_zones, *gps;
if (0 == (general = toml_table_in(conf, "general"))) {syslog_err("[facilities] [config] failed locating [general] table"); return 1;} if (0 == (general = toml_table_in(conf, "general"))) {syslog_err("[facilities] [config] failed locating [general] table"); return 1;}
if (0 == (security = toml_table_in(conf, "security"))) {syslog_err("[facilities] [config] failed locating [security] table"); return 1;} if (0 == (security = toml_table_in(conf, "security"))) {syslog_err("[facilities] [config] failed locating [security] table"); return 1;}
@ -97,8 +112,7 @@ int itss_config(void* facilities_s, char* config_file) {
if (0 == (replay = toml_table_in(conf, "replay"))) {syslog_err("[facilities] [config] failed locating [replay] table"); return 1;} if (0 == (replay = toml_table_in(conf, "replay"))) {syslog_err("[facilities] [config] failed locating [replay] table"); return 1;}
if (0 == (ivim = toml_table_in(conf, "ivim"))) {syslog_err("[facilities] [config] failed locating [ivim] table"); return 1;} if (0 == (ivim = toml_table_in(conf, "ivim"))) {syslog_err("[facilities] [config] failed locating [ivim] table"); return 1;}
if (0 == (protected_zones = toml_table_in(conf, "protected-zones"))) {syslog_err("[facilities] [config] failed locating [protected-zones] table"); return 1;} if (0 == (protected_zones = toml_table_in(conf, "protected-zones"))) {syslog_err("[facilities] [config] failed locating [protected-zones] table"); return 1;}
if (0 == (gps = toml_table_in(conf, "gps"))) {syslog_err("[facilities] [config] failed locating [gps] table"); return 1;}
// Values // Values
// General // General
@ -222,9 +236,18 @@ int itss_config(void* facilities_s, char* config_file) {
free(pz_path); free(pz_path);
} }
int gps_fixed = 0;
rv += extract_val_bool(&gps_fixed, gps, "fixed");
facilities->gps_fixed = gps_fixed;
if (gps_fixed) {
double latitude;
rv += extract_val_double(&latitude, gps, "latitude");
facilities->latitude = latitude;
double longitude;
rv += extract_val_double(&longitude, gps, "longitude");
facilities->longitude = longitude;
}
toml_free(conf); toml_free(conf);

View File

@ -45,6 +45,10 @@ typedef struct facilities {
uint64_t station_id; uint64_t station_id;
bool id_random; bool id_random;
bool gps_fixed;
double latitude;
double longitude;
bool exit; bool exit;
} facilities_t; } facilities_t;