Files
hisi_SS524V100_SDK/mpp/sample/uart_fanet/parase.c
T

219 lines
7.3 KiB
C

#include <stdio.h>
#include "cJSON.h"
#include <stdlib.h>
#include <string.h>
char *buffer_json;
int read_file(const char *name)
{
FILE *fp;
fp = fopen(name, "r");
fseek(fp, 0, SEEK_END);
long size = ftell(fp);
fseek(fp, 0, SEEK_SET);
buffer_json = malloc(size);
fread(buffer_json, size, 1, fp);
fclose(fp);
}
int parse_json_file(const char *name , int index, char *vsrcip1 , char *vsrcip2, char *vsrcip3, char *vsrcip4, int index_sink, char *vsinkip1, char *vsinkip2, int * can_port ,int * uart_port ,int *mesh_5g){
read_file(name);
cJSON *json =cJSON_Parse(buffer_json);
char VSRC[20];
char UART[20];
if(json){
cJSON *json_mesh = cJSON_GetObjectItem(json, "mesh");
cJSON *json_5g = cJSON_GetObjectItem(json, "5G");
*mesh_5g = json_mesh->valueint;
if(json_mesh || json_5g ){
if(json_mesh->valueint){
cJSON *json_mesh_ip = cJSON_GetObjectItem(json, "mesh_IP");
if(json_mesh_ip){
cJSON *count = cJSON_GetObjectItem(json_mesh_ip, "vsrc_count");
if( index > count->valueint){
printf("error index > ip_count \n");
return 0;
}else{
int n = sprintf(VSRC,"VSRC%d",index);
printf("mesh IP%d, %s\n",n,cJSON_GetArrayItem(cJSON_GetObjectItem(json_mesh_ip, VSRC),0)->valuestring);
strcpy(vsrcip1, cJSON_GetArrayItem(cJSON_GetObjectItem(json_mesh_ip, VSRC),0)->valuestring);
strcpy(vsrcip2, cJSON_GetArrayItem(cJSON_GetObjectItem(json_mesh_ip, VSRC),1)->valuestring);
strcpy(vsrcip3, cJSON_GetArrayItem(cJSON_GetObjectItem(json_mesh_ip, VSRC),2)->valuestring);
strcpy(vsrcip4, cJSON_GetArrayItem(cJSON_GetObjectItem(json_mesh_ip, VSRC),3)->valuestring);
}
count = cJSON_GetObjectItem(json_mesh_ip, "vsink_count");
if( index_sink > count->valueint){
printf("error vsink index > ip_count \n");
return 0;
}else{
int n = sprintf(VSRC,"VSINK%d",index_sink);
//printf("vsink mesh IP%d, %s\n",n,cJSON_GetObjectItem(json_mesh_ip, VSRC)->valuestring);
//strcpy(vsink_ip , cJSON_GetObjectItem(json_mesh_ip, VSRC)->valuestring);
strcpy(vsinkip1, cJSON_GetArrayItem(cJSON_GetObjectItem(json_mesh_ip, VSRC),0)->valuestring);
strcpy(vsinkip2, cJSON_GetArrayItem(cJSON_GetObjectItem(json_mesh_ip, VSRC),1)->valuestring);
}
}
}else if(json_5g->valueint){
cJSON *json_5g_ip = cJSON_GetObjectItem(json, "5G_IP");
if(json_5g_ip){
cJSON *count = cJSON_GetObjectItem(json_5g_ip, "vsrc_count");
if( index > count->valueint){
printf("error index > ip_count \n");
return -1;
}else{
int n = sprintf(VSRC,"VSRC%d",index);
printf("5G IP%d, %s\n",n,cJSON_GetObjectItem(json_5g_ip, VSRC)->valuestring);
strcpy(vsrcip1, cJSON_GetArrayItem(cJSON_GetObjectItem(json_5g_ip, VSRC),0)->valuestring);
strcpy(vsrcip2, cJSON_GetArrayItem(cJSON_GetObjectItem(json_5g_ip, VSRC),1)->valuestring);
//strcpy(vsrcip1 , cJSON_GetObjectItem(json_5g_ip, VSRC)->valuestring);
}
count = cJSON_GetObjectItem(json_5g_ip, "vsink_count");
if( index_sink > count->valueint){
printf("error vsink index > ip_count \n");
return 0;
}else{
int n = sprintf(VSRC,"VSINK%d",index_sink);
//printf("vsink mesh IP%d, %s\n",n,cJSON_GetObjectItem(json_5g_ip, VSRC)->valuestring);
strcpy(vsinkip1, cJSON_GetArrayItem(cJSON_GetObjectItem(json_5g_ip, VSRC),0)->valuestring);
strcpy(vsinkip2, cJSON_GetArrayItem(cJSON_GetObjectItem(json_5g_ip, VSRC),1)->valuestring);
//strcpy(vsink_ip , cJSON_GetObjectItem(json_5g_ip, VSRC)->valuestring);
}
}
}
}
cJSON *json_can_port = cJSON_GetObjectItem(json, "CANPORT");
if(json_can_port){
cJSON *count = cJSON_GetObjectItem(json_can_port, "count");
#if 1
if( index > count->valueint){
printf("error index > uart_port_count \n");
return -1;
}else{
int n = sprintf(UART,"CAN_PORT%d",index);
printf("can port %d, %d\n",n,cJSON_GetArrayItem(cJSON_GetObjectItem(json_can_port, UART),0)->valueint);
printf("can port %d, %d\n",n,cJSON_GetArrayItem(cJSON_GetObjectItem(json_can_port, UART),1)->valueint);
*can_port++ = cJSON_GetArrayItem(cJSON_GetObjectItem(json_can_port, UART),0)->valueint;
*can_port++ = cJSON_GetArrayItem(cJSON_GetObjectItem(json_can_port, UART),1)->valueint;
}
#endif
}
cJSON *json_uart_port = cJSON_GetObjectItem(json, "UARTPORT");
if(json_uart_port){
printf("uart port %d\n",json_uart_port->valueint);
*uart_port = json_uart_port->valueint;
#if 0
cJSON *count = cJSON_GetObjectItem(json_uart_port, "count");
if( index > count->valueint){
printf("error index > uart_port_count \n");
return -1;
}else{
int n = sprintf(UART,"UART_PORT%d",index);
printf("uart port %d, %d\n",n,cJSON_GetArrayItem(cJSON_GetObjectItem(json_uart_port, UART),0)->valueint);
printf("uart port %d, %d\n",n,cJSON_GetArrayItem(cJSON_GetObjectItem(json_uart_port, UART),1)->valueint);
*port++ = cJSON_GetArrayItem(cJSON_GetObjectItem(json_uart_port, UART),0)->valueint;
*port++ = cJSON_GetArrayItem(cJSON_GetObjectItem(json_uart_port, UART),1)->valueint;
}
#endif
}
}
free(buffer_json);
}
#if 0
int main(int argc ,char **argv){
char vsrcip1[100];
char vsrcip2[100];
char vsink_ip[100];
int can_port[2];
int uart_port;
parse_json_file(argv[1],atoi(argv[2]),vsrcip1,vsrcip2,atoi(argv[3]),vsink_ip, can_port,&uart_port);
printf("mesh ip %s %s \n",vsrcip1,vsrcip2);
printf("vsinkip %s\n",vsink_ip);
printf("can_port %d %d \n",can_port[0],can_port[1]);
printf("uart port %d\n",uart_port);
}
#endif