it2s-itss-facilities/src/infrastructure.h

94 lines
2.1 KiB
C

#ifndef FACILITIES_INFRASTRUCTURE_H
#define FACILITIES_INFRASTRUCTURE_H
#include <stdint.h>
#include <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;
uint64_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(infrastructure_t* infrastructure, enum SERVICE_TYPE type, void* its_msg, it2s_tender_epv_t* epv, int64_t* id, uint8_t* ssp, uint16_t ssp_len);
void* infrastructure_service(void* fc);
#endif