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->tmc_connect = config->facilities.cpm.tmc_connected;
|
||||||
facilities->dissemination->latitude = config->management.gps.latitude;
|
facilities->dissemination->latitude = config->management.gps.latitude;
|
||||||
facilities->dissemination->longitude = config->management.gps.longitude;
|
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){
|
if(facilities->dissemination->tmc_connect == false){
|
||||||
|
|
||||||
// 1 - Create socket
|
// Create socket
|
||||||
s_socket.i32_socket = socket(AF_INET, SOCK_STREAM, 0);
|
s_socket.i32_socket = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
|
||||||
if(s_socket.i32_socket < 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;
|
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));
|
bzero(&s_socket.s_server, sizeof(s_socket.s_server));
|
||||||
s_socket.s_server.sin_family = AF_INET;
|
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));
|
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){
|
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.sll, sizeof(raw_socket.sll));
|
||||||
bzero(&raw_socket.ifr, sizeof(raw_socket.ifr));
|
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){
|
if((ioctl(raw_socket.raw_fd, SIOCGIFINDEX, &raw_socket.ifr)) == -1){
|
||||||
syslog_err("Error getting interface index");
|
syslog_err("Error getting interface index");
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -539,20 +539,18 @@ void dissemination_reset_timer(dissemination_t* dissemination, it2s_tender_epv_t
|
||||||
void *cp_service(void *fc){
|
void *cp_service(void *fc){
|
||||||
|
|
||||||
/* Variables */
|
/* Variables */
|
||||||
|
|
||||||
int i32_recv_bytes;
|
int i32_recv_bytes;
|
||||||
u_int8_t au8_readBuffer[READ_BUFFER_SIZE];
|
u_int8_t au8_readBuffer[READ_BUFFER_SIZE];
|
||||||
bool is_radar_connected;
|
bool is_radar_connected;
|
||||||
u_int8_t au8_readTcp[READ_BUFFER_SIZE];
|
u_int8_t au8_readTcp[READ_BUFFER_SIZE];
|
||||||
facilities_t *facilities = (facilities_t *) fc;
|
facilities_t *facilities = (facilities_t *) fc;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t bdr_oer[2048];
|
uint8_t bdr_oer[2048];
|
||||||
uint8_t fdi_oer[2048];
|
uint8_t fdi_oer[2048];
|
||||||
bdr_oer[0] = 4; //Facilities
|
bdr_oer[0] = 4; //Facilities
|
||||||
fdi_oer[0] = 4;
|
fdi_oer[0] = 4;
|
||||||
|
|
||||||
|
|
||||||
BTPDataRequest_t *bdr = calloc(1, sizeof(BTPDataRequest_t));
|
BTPDataRequest_t *bdr = calloc(1, sizeof(BTPDataRequest_t));
|
||||||
FacilitiesDataIndication_t *fdi = calloc(1, sizeof(FacilitiesDataIndication_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
|
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
|
//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->destinationPort = Port_cpm; //CPM entity port for communication between Facilities and Transport
|
||||||
bdr->gnPacketTransportType = PacketTransportType_shb; //shb = Single Hop Broadcast packet
|
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->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->data.buf = malloc(1500); //CPM Data to be sent to the Transport layer
|
||||||
|
|
||||||
if(facilities->use_security) {
|
if(facilities->use_security) {
|
||||||
bdr->gnSecurityProfile = malloc(sizeof(long));
|
bdr->gnSecurityProfile = malloc(sizeof(long));
|
||||||
*bdr->gnSecurityProfile = 1;
|
*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 ---*/
|
/*--- Fill mandatory Facilities Data Indication parameters ---*/
|
||||||
|
|
||||||
fdi->itsMessageType = ItsMessageType_cpm;
|
fdi->itsMessageType = ItsMessageType_cpm;
|
||||||
fdi->data.buf = malloc(1500);
|
fdi->data.buf = malloc(1500);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct timespec* systemtime;
|
struct timespec* systemtime;
|
||||||
systemtime = (struct timespec*)malloc(sizeof(struct timespec));
|
systemtime = (struct timespec*)malloc(sizeof(struct timespec));
|
||||||
if (systemtime == NULL) {
|
if (systemtime == NULL) {
|
||||||
|
|
@ -614,12 +611,33 @@ void *cp_service(void *fc){
|
||||||
if (dissemination_check(facilities->dissemination, &facilities->epv) && facilities->dissemination->active){
|
if (dissemination_check(facilities->dissemination, &facilities->epv) && facilities->dissemination->active){
|
||||||
if(is_radar_connected){
|
if(is_radar_connected){
|
||||||
|
|
||||||
|
|
||||||
if(i32_recv_bytes <= 0){
|
if(i32_recv_bytes <= 0){
|
||||||
syslog_debug("No data received from radar ...");
|
syslog_debug("No data received from radar ...");
|
||||||
is_radar_connected = false;
|
is_radar_connected = false;
|
||||||
continue;
|
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 */
|
/* Information parsing */
|
||||||
parse_input(au8_readBuffer,i32_recv_bytes);
|
parse_input(au8_readBuffer,i32_recv_bytes);
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,6 @@
|
||||||
#define ROAD_ANGLE 120
|
#define ROAD_ANGLE 120
|
||||||
#define MESSAGE_ID 14
|
#define MESSAGE_ID 14
|
||||||
#define PROTOCOL_VERSION 1
|
#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
|
#define RADAR_PORT "55555" // Destination port from the radar
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -120,6 +117,8 @@ typedef struct
|
||||||
|
|
||||||
bool active;
|
bool active;
|
||||||
bool tmc_connect;
|
bool tmc_connect;
|
||||||
|
char* int_radar;
|
||||||
|
char* ip_radar;
|
||||||
|
|
||||||
pthread_mutex_t lock;
|
pthread_mutex_t lock;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue