Radar IP and Interface are now in the toml file
This commit is contained in:
parent
64f9b91035
commit
f08c25812f
|
|
@ -252,6 +252,8 @@ int facilities_config(void* facilities_s) {
|
|||
facilities->dissemination->tmc_connect = config->facilities.cpm.tmc_connected;
|
||||
facilities->dissemination->latitude = config->management.gps.latitude;
|
||||
facilities->dissemination->longitude = config->management.gps.longitude;
|
||||
facilities->dissemination->int_radar = config->facilities.cpm.radar_interface;
|
||||
facilities->dissemination->ip_radar = config->facilities.cpm.radar_ip;
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
54
src/cpm.c
54
src/cpm.c
|
|
@ -66,11 +66,11 @@ bool waitingIncomingConnection(void){
|
|||
|
||||
|
||||
|
||||
bool interface_connection(char* radar_ip,char* radar_port, facilities_t* facilities){
|
||||
bool interface_connection(char* radar_port, facilities_t* facilities){
|
||||
|
||||
if(facilities->dissemination->tmc_connect == false){
|
||||
|
||||
// 1 - Create socket
|
||||
// Create socket
|
||||
s_socket.i32_socket = socket(AF_INET, SOCK_STREAM, 0);
|
||||
|
||||
if(s_socket.i32_socket < 0){
|
||||
|
|
@ -78,10 +78,10 @@ bool interface_connection(char* radar_ip,char* radar_port, facilities_t* facilit
|
|||
return false;
|
||||
}
|
||||
|
||||
// 2 - Bind it to server address and port
|
||||
// Bind it to server address and port
|
||||
bzero(&s_socket.s_server, sizeof(s_socket.s_server));
|
||||
s_socket.s_server.sin_family = AF_INET;
|
||||
s_socket.s_server.sin_addr.s_addr = inet_addr(radar_ip);
|
||||
s_socket.s_server.sin_addr.s_addr = inet_addr(facilities->dissemination->ip_radar);
|
||||
s_socket.s_server.sin_port = htons(atoi(radar_port));
|
||||
|
||||
if(bind(s_socket.i32_socket, (struct sockaddr*)&s_socket.s_server,sizeof(s_socket.s_server)) < 0){
|
||||
|
|
@ -107,7 +107,7 @@ bool interface_connection(char* radar_ip,char* radar_port, facilities_t* facilit
|
|||
bzero(&raw_socket.sll, sizeof(raw_socket.sll));
|
||||
bzero(&raw_socket.ifr, sizeof(raw_socket.ifr));
|
||||
|
||||
strncpy((char *)raw_socket.ifr.ifr_name, INTERFACE_RADAR, IFNAMSIZ);
|
||||
strncpy((char *)raw_socket.ifr.ifr_name, facilities->dissemination->int_radar, IFNAMSIZ);
|
||||
if((ioctl(raw_socket.raw_fd, SIOCGIFINDEX, &raw_socket.ifr)) == -1){
|
||||
syslog_err("Error getting interface index");
|
||||
return false;
|
||||
|
|
@ -539,20 +539,18 @@ void dissemination_reset_timer(dissemination_t* dissemination, it2s_tender_epv_t
|
|||
void *cp_service(void *fc){
|
||||
|
||||
/* Variables */
|
||||
|
||||
int i32_recv_bytes;
|
||||
u_int8_t au8_readBuffer[READ_BUFFER_SIZE];
|
||||
bool is_radar_connected;
|
||||
u_int8_t au8_readTcp[READ_BUFFER_SIZE];
|
||||
facilities_t *facilities = (facilities_t *) fc;
|
||||
|
||||
|
||||
|
||||
uint8_t bdr_oer[2048];
|
||||
uint8_t fdi_oer[2048];
|
||||
bdr_oer[0] = 4; //Facilities
|
||||
bdr_oer[0] = 4; //Facilities
|
||||
fdi_oer[0] = 4;
|
||||
|
||||
|
||||
BTPDataRequest_t *bdr = calloc(1, sizeof(BTPDataRequest_t));
|
||||
FacilitiesDataIndication_t *fdi = calloc(1, sizeof(FacilitiesDataIndication_t));
|
||||
|
||||
|
|
@ -568,28 +566,27 @@ void *cp_service(void *fc){
|
|||
|
||||
|
||||
|
||||
bdr->btpType = BTPType_btpB; //BTP Type B is for non-interactive packet transport | BTP Type A is for interactive packet transport
|
||||
//The former doesn't have a source port and the latter have
|
||||
bdr->btpType = BTPType_btpB; //BTP Type B is for non-interactive packet transport | BTP Type A is for interactive packet transport
|
||||
//The former doesn't have a source port and the latter have
|
||||
|
||||
bdr->destinationPort = Port_cpm; //CPM entity port for communication between Facilities and Transport
|
||||
bdr->gnPacketTransportType = PacketTransportType_shb; //shb = Single Hop Broadcast packet
|
||||
bdr->gnTrafficClass = 2; //Identifier assigned to a GeoNetworking packet that expresses its requirements on data transport
|
||||
bdr->data.buf = malloc(1500); //CPM Data to be sent to the Transport layer
|
||||
bdr->destinationPort = Port_cpm; //CPM entity port for communication between Facilities and Transport
|
||||
bdr->gnPacketTransportType = PacketTransportType_shb; //shb = Single Hop Broadcast packet
|
||||
bdr->gnTrafficClass = 2; //Identifier assigned to a GeoNetworking packet that expresses its requirements on data transport
|
||||
bdr->data.buf = malloc(1500); //CPM Data to be sent to the Transport layer
|
||||
|
||||
if(facilities->use_security) {
|
||||
bdr->gnSecurityProfile = malloc(sizeof(long));
|
||||
*bdr->gnSecurityProfile = 1;
|
||||
}
|
||||
|
||||
is_radar_connected = interface_connection(RADAR_IP,RADAR_PORT,facilities); // Create Radar listening socket
|
||||
is_radar_connected = interface_connection(RADAR_PORT,facilities); // Create Radar listening socket
|
||||
|
||||
|
||||
/*--- Fill mandatory Facilities Data Indication parameters ---*/
|
||||
|
||||
fdi->itsMessageType = ItsMessageType_cpm;
|
||||
fdi->data.buf = malloc(1500);
|
||||
|
||||
|
||||
|
||||
struct timespec* systemtime;
|
||||
systemtime = (struct timespec*)malloc(sizeof(struct timespec));
|
||||
if (systemtime == NULL) {
|
||||
|
|
@ -614,12 +611,33 @@ void *cp_service(void *fc){
|
|||
if (dissemination_check(facilities->dissemination, &facilities->epv) && facilities->dissemination->active){
|
||||
if(is_radar_connected){
|
||||
|
||||
|
||||
if(i32_recv_bytes <= 0){
|
||||
syslog_debug("No data received from radar ...");
|
||||
is_radar_connected = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
int j = 0;
|
||||
int temp_data = ((int)(au8_readBuffer[12])) >> 4;
|
||||
|
||||
for(int i = temp_data;i < READ_BUFFER_SIZE; i++){
|
||||
au8_readBuffer[j] = au8_readBuffer[i];
|
||||
j++;
|
||||
}
|
||||
|
||||
temp_data = ((int)(au8_readBuffer[0])) & 0x0f;
|
||||
|
||||
j = 0;
|
||||
for(int i = temp_data;i < READ_BUFFER_SIZE; i++){
|
||||
au8_readBuffer[j] = au8_readBuffer[i];
|
||||
j++;
|
||||
}
|
||||
|
||||
if(i32_recv_bytes < 0){
|
||||
syslog_debug("No data received from radar ...");
|
||||
break;
|
||||
}
|
||||
|
||||
/* Information parsing */
|
||||
parse_input(au8_readBuffer,i32_recv_bytes);
|
||||
|
|
|
|||
|
|
@ -17,9 +17,6 @@
|
|||
#define ROAD_ANGLE 120
|
||||
#define MESSAGE_ID 14
|
||||
#define PROTOCOL_VERSION 1
|
||||
#define INTERFACE_RADAR "enp3s0"
|
||||
|
||||
#define RADAR_IP "192.168.11.1" // ITS-S interface connected to the radar
|
||||
#define RADAR_PORT "55555" // Destination port from the radar
|
||||
|
||||
|
||||
|
|
@ -120,6 +117,8 @@ typedef struct
|
|||
|
||||
bool active;
|
||||
bool tmc_connect;
|
||||
char* int_radar;
|
||||
char* ip_radar;
|
||||
|
||||
pthread_mutex_t lock;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue