CPM integration with initial dissemination control functions

This commit is contained in:
Marco 2021-04-20 11:35:36 +01:00
parent 03ffda2d92
commit 4d5d859453
5 changed files with 38 additions and 1 deletions

View File

@ -6,6 +6,7 @@ ADD_EXECUTABLE(it2s-itss-facilities
infrastructure.c
requests.c
facilities.c
cpm.c
)
TARGET_LINK_LIBRARIES(it2s-itss-facilities
@ -19,6 +20,7 @@ TARGET_LINK_LIBRARIES(it2s-itss-facilities
-lit2s-asn-camv2
-lit2s-asn-ivim
-lit2s-asn-denmv2
-lit2s-asn-cpm
-lm
)

View File

@ -200,6 +200,11 @@ int facilities_config(void* facilities_s) {
facilities->infrastructure->replay_interval = config->facilities.ivim.replay_interval;
facilities->infrastructure->default_service_duration = config->facilities.ivim.default_service_duration * 60000;
//CPM
facilities->dissemination->active = config->facilities.cpm.activate;
facilities->dissemination->T_GenCpmMin = config->facilities.cpm.rsu_obu_period_min;
facilities->dissemination->T_GenCpmMax = config->facilities.cpm.rsu_obu_period_max;
// Replay
facilities->replay = config->networking.replay.activate;

View File

@ -3,6 +3,7 @@
#include "config.h"
#include "denm.h"
#include "requests.h"
#include "cpm.h"
#include <itss-transport/BTPDataRequest.h>
#include <itss-transport/BTPDataIndication.h>
@ -16,6 +17,9 @@
#include <camv2/CAM.h>
#include <denmv2/DENM.h>
#include <ivim/IVIM.h>
#include <cpm/CPM.h>
#include <cpm/INTEGER.h>
#include <cpm/asn_application.h>
#include <it2s-btp.h>
@ -74,6 +78,12 @@ static int transport_indication(facilities_t *facilities, void* responder, uint8
its_msg = calloc(1, sizeof(IVIM_t));
handled_msg = true;
break;
case Port_cpm:
its_msg_descriptor = &asn_DEF_CPM;
its_msg = calloc(1, sizeof(CPM_t));
handled_msg = true;
break;
default:
syslog_debug("[facilities] messsage with unhandled BTP port received, ignoring");
goto cleanup;
@ -376,6 +386,7 @@ int main() {
facilities.zmq.ctx = zmq_ctx_new();
facilities.lightship = lightship_init();
facilities.dissemination = dissemination_init();
facilities.tx_queue = queue_init();
facilities.den = calloc(1, sizeof(den_t));
facilities.infrastructure = calloc(1, sizeof(infrastructure_t));
@ -402,6 +413,9 @@ int main() {
// Infrastructure
pthread_create(&facilities.infrastructure_service, NULL, infrastructure_service, (void*) &facilities);
// CPM
pthread_create(&facilities.cp_service, NULL, cp_service, (void*) &facilities);
uint8_t buffer[PACKET_MAX_LEN];
syslog_info("[facilities] listening");
uint8_t code;
@ -454,6 +468,7 @@ int main() {
pthread_join(facilities.ca_service, NULL);
pthread_join(facilities.den_service, NULL);
pthread_join(facilities.infrastructure_service, NULL);
pthread_join(facilities.cp_service, NULL);
return 0;
}

View File

@ -9,6 +9,7 @@
#include "denm.h"
#include "infrastructure.h"
#include "queue.h"
#include "cpm.h"
typedef struct epv {
pthread_mutex_t lock;
@ -28,7 +29,7 @@ typedef struct facilities {
pthread_t den_service;
pthread_t infrastructure_service;
pthread_t transmitting;
pthread_t cp_service;
// ZMQ
struct {
void* ctx;
@ -53,6 +54,9 @@ typedef struct facilities {
// Infrastructure
infrastructure_t* infrastructure;
//CPM
dissemination_t* dissemination;
int station_type;
bool use_security;
bool replay;

View File

@ -3,12 +3,14 @@
#include "denm.h"
#include "infrastructure.h"
#include "requests.h"
#include "cpm.h"
#include <itss-facilities/FacilitiesDataResult.h>
#include <itss-transport/BTPDataRequest.h>
#include <zmq.h>
#include <syslog.h>
#include <cpm/CPM.h>
#define syslog_info(msg, ...) syslog(LOG_INFO, msg, ##__VA_ARGS__)
#define syslog_emerg(msg, ...) syslog(LOG_EMERG, "%s:%d [" msg "]", __func__, __LINE__, ##__VA_ARGS__)
@ -84,6 +86,15 @@ int facilities_request_single_message(facilities_t* facilities, void* responder,
bdr->gnPacketTransportType = PacketTransportType_shb;
bdr->gnTrafficClass = 1;
break;
case ItsMessageType_cpm:
its_msg_def = &asn_DEF_CPM;
its_msg = calloc(1, sizeof(CPM_t));
bdr->destinationPort = Port_cpm;
bdr->gnPacketTransportType = PacketTransportType_shb;
bdr->gnTrafficClass = 2;
break;
default:
syslog_err("[facilities] unrecognized FDRequest message type (%ld)", fdreq->choice.singleMessage.itsMessageType);