92 lines
2.0 KiB
C
92 lines
2.0 KiB
C
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include <it2s-asn/ivim/IVIM.h>
|
|
#include <pthread.h>
|
|
#include <stdbool.h>
|
|
#include <it2s-tender/epv.h>
|
|
|
|
enum IVI_DIID_TYPE {
|
|
IVI_DIID_ViennaCodeConvention,
|
|
IVI_DIID_TrafficSignPictogramDangerWarning,
|
|
IVI_DIID_TrafficSignPictogramRegulatory,
|
|
IVI_DIID_TrafficSignPictogramInformative,
|
|
IVI_DIID_ServiceCategoryCodePublicFacilitiesPictogram,
|
|
IVI_DIID_ServiceCategoryCodeAmbientOrRoadConditionPictogramAmbientCondition,
|
|
IVI_DIID_ServiceCategoryCodeAmbientOrRoadConditionPictogramRoadCondition,
|
|
IVI_DIID_itisCodes,
|
|
IVI_DIID_laneStatus,
|
|
IVI_DIID_rcc,
|
|
IVI_DIID_tc,
|
|
IVI_DIID_lac,
|
|
IVI_DIID_StatusNegation
|
|
};
|
|
|
|
typedef struct ivi_diid_ssp_bm {
|
|
const char* data_item;
|
|
const int diid;
|
|
const uint32_t bitmap_val;
|
|
} ivi_diid_ssp_bm_t;
|
|
|
|
|
|
enum SERVICE_STATE {
|
|
SERVICE_ACTIVE,
|
|
SERVICE_CANCELLED,
|
|
SERVICE_NEGATED
|
|
};
|
|
|
|
enum SERVICE_TYPE {
|
|
SERVICE_TLM,
|
|
SERVICE_RLT,
|
|
SERVICE_IVI,
|
|
SERVICE_TLC
|
|
};
|
|
|
|
typedef struct service {
|
|
uint64_t id;
|
|
bool enabled;
|
|
enum SERVICE_TYPE type;
|
|
uint32_t station_id;
|
|
enum SERVICE_STATE state;
|
|
|
|
IVIM_t *ivim;
|
|
uint64_t ivi_id_number;
|
|
uint64_t timestamp;
|
|
uint64_t valid_from;
|
|
uint64_t valid_to;
|
|
} service_t;
|
|
|
|
typedef struct infrastructure {
|
|
service_t ** services;
|
|
uint16_t n_services;
|
|
|
|
uint16_t n_active_services;
|
|
uint16_t n_awaiting_services;
|
|
uint16_t n_cancelled_services;
|
|
uint16_t n_negated_services;
|
|
|
|
uint16_t n_max_services;
|
|
|
|
uint32_t replay_interval;
|
|
uint64_t default_service_duration;
|
|
|
|
pthread_mutex_t lock;
|
|
} infrastructure_t;
|
|
|
|
enum SERVICE_EVAL_R {
|
|
SERVICE_NEW,
|
|
SERVICE_CANCELLATION,
|
|
SERVICE_NEGATION,
|
|
SERVICE_UPDATE,
|
|
SERVICE_INVALID,
|
|
SERVICE_REPEATED,
|
|
SERVICE_PASSED,
|
|
SERVICE_NUMBER_EXCEEDED,
|
|
SERVICE_BAD_PERMISSIONS
|
|
};
|
|
|
|
enum SERVICE_EVAL_R service_eval(enum SERVICE_TYPE type, void* its_msg, uint64_t* id, uint8_t* ssp, uint16_t ssp_len);
|
|
|
|
int infrastructure_init();
|
|
void* infrastructure_service();
|