#ifndef FACILITIES_INFRASTRUCTURE_H #define FACILITIES_INFRASTRUCTURE_H #include #include #include #include #include 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, uint64_t* id, uint8_t* ssp, uint16_t ssp_len); void* infrastructure_service(void* fc); #endif