diff --git a/src/config.c b/src/config.c index 3525216..d957a11 100644 --- a/src/config.c +++ b/src/config.c @@ -430,6 +430,7 @@ int facilities_config(void* facilities_s) { mreq->choice.attributes.choice.get.clockType = 1; mreq->choice.attributes.choice.get.clock = 1; mreq->choice.attributes.choice.get.clockOffset = 1; + mreq->choice.attributes.choice.get.trajectory = 1; void* management_socket = zmq_socket(facilities->zmq.ctx, ZMQ_REQ); zmq_connect(management_socket, facilities->zmq.management_address); uint8_t buffer[256]; @@ -449,7 +450,8 @@ int facilities_config(void* facilities_s) { mrep->attributes->clockType && mrep->attributes->clock && mrep->attributes->clockOffset && - mrep->attributes->gpsType) { + mrep->attributes->gpsType && + mrep->attributes->trajectory) { facilities->epv.space.latitude = mrep->attributes->coordinates->latitude; facilities->epv.space.latitude_conf = mrep->attributes->coordinates->latitudeConfidence; facilities->epv.space.longitude = mrep->attributes->coordinates->longitude; @@ -466,6 +468,13 @@ int facilities_config(void* facilities_s) { asn_INTEGER2ulong(mrep->attributes->clock, &facilities->epv.time.clock); asn_INTEGER2ulong(mrep->attributes->clockOffset, &facilities->epv.time.offset); + + facilities->epv.trajectory.len = mrep->attributes->trajectory->list.count; + for (int i = 0; i < mrep->attributes->trajectory->list.count; ++i) { + facilities->epv.trajectory.path[i].latitude = mrep->attributes->trajectory->list.array[i]->latitude; + facilities->epv.trajectory.path[i].longitude = mrep->attributes->trajectory->list.array[i]->longitude; + asn_INTEGER2ulong(&mrep->attributes->trajectory->list.array[i]->timestamp, &facilities->epv.trajectory.path[i].timestamp); + } } else { syslog_err("[applications] rejected MR attribute request"); rv = 1; diff --git a/src/dcm.c b/src/dcm.c index 59fe5de..ab347e0 100644 --- a/src/dcm.c +++ b/src/dcm.c @@ -1,7 +1,9 @@ #include "dcm.h" #include "facilities.h" +#include #include +#include #include #include @@ -15,7 +17,7 @@ int dcm_check() { int mk_dcm(facilities_t* facilities, uint8_t* dcm_uper, uint16_t* dcm_uper_len) { int rv = 0; - it2s_tender_st_s* trajectory = NULL; + it2s_tender_st_s trajectory[TRAJECTORY_MAX_LEN]; DCM_t* dcm = calloc(1, sizeof(DCM_t)); @@ -32,11 +34,13 @@ int mk_dcm(facilities_t* facilities, uint8_t* dcm_uper, uint16_t* dcm_uper_len) it2s_tender_get_space(&facilities->epv); lat = facilities->epv.space.latitude; lon = facilities->epv.space.longitude; - trajectory_len = facilities->epv.trajectory.len; - trajectory = malloc(trajectory_len * sizeof(it2s_tender_st_s)); - memcpy(trajectory, facilities->epv.trajectory.path, trajectory_len * sizeof(it2s_tender_st_s)); it2s_tender_unlock_space(&facilities->epv); + it2s_tender_lock_trajectory(&facilities->epv); + trajectory_len = facilities->epv.trajectory.len; + memcpy(trajectory, facilities->epv.trajectory.path, trajectory_len * sizeof(it2s_tender_st_s)); + it2s_tender_unlock_trajectory(&facilities->epv); + dcm->dcm.currentPosition.latitude = lat; dcm->dcm.currentPosition.longitude = lon; asn_ulong2INTEGER(&dcm->dcm.currentPosition.timestamp, now); @@ -61,7 +65,6 @@ int mk_dcm(facilities_t* facilities, uint8_t* dcm_uper, uint16_t* dcm_uper_len) cleanup: ASN_STRUCT_FREE(asn_DEF_DCM, dcm); - free(trajectory); return rv; } diff --git a/src/facilities.c b/src/facilities.c index cc0802c..c6842b0 100644 --- a/src/facilities.c +++ b/src/facilities.c @@ -36,6 +36,7 @@ #include #include +#include #define syslog_info(msg, ...) syslog(LOG_INFO, msg, ##__VA_ARGS__) #define syslog_emerg(msg, ...) syslog(LOG_EMERG, "%s:%d [" msg "]", __func__, __LINE__, ##__VA_ARGS__) @@ -573,6 +574,17 @@ static int management_indication(facilities_t* facilities, void* responder, uint facilities->epv.space.altitude_conf = mi->choice.attributes.altitude.altitudeConfidence; it2s_tender_unlock_space(&facilities->epv); + it2s_tender_lock_trajectory(&facilities->epv); + if (mi->choice.attributes.trajectory) { + facilities->epv.trajectory.len = mi->choice.attributes.trajectory->list.count; + for (int i = 0; i < mi->choice.attributes.trajectory->list.count; ++i) { + facilities->epv.trajectory.path[i].latitude = mi->choice.attributes.trajectory->list.array[i]->latitude; + facilities->epv.trajectory.path[i].longitude = mi->choice.attributes.trajectory->list.array[i]->longitude; + asn_INTEGER2ulong(&mi->choice.attributes.trajectory->list.array[i]->timestamp, &facilities->epv.trajectory.path[i].timestamp); + } + } + it2s_tender_unlock_trajectory(&facilities->epv); + it2s_tender_lock_time(&facilities->epv); asn_INTEGER2ulong(&mi->choice.attributes.clock, &facilities->epv.time.clock); it2s_tender_unlock_time(&facilities->epv); diff --git a/src/mcm.c b/src/mcm.c deleted file mode 100644 index bc2f685..0000000 --- a/src/mcm.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "mcm.h" -#include "facilities.h" - - -void* mc_service(void* fc) { - - facilities_t* facilities = (facilities_t*) fc; - - while (!facilities->exit) { - - usleep(50*1000); - } - - return NULL; -} diff --git a/src/mcm.h b/src/mcm.h deleted file mode 100644 index 7208d8d..0000000 --- a/src/mcm.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once - - -void* mc_service(void* fc);