daily pastebin goal
76%
SHARE
TWEET

Untitled

a guest May 16th, 2018 102 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "simgen_udp_cmd.h"
  5. #include <unistd.h>
  6. #include <math.h>
  7. #define LOG_PARSER_SIMGEN_LATENCY 1
  8. #define LOG_PARSER_GPS_RECEVIER 2
  9. #define LOG_PARSER_DM_NSPO_REFINE 3
  10. const char* getcolumn(char* line, int col) {
  11.     const char* tok;
  12.     for (tok = strtok(line, ",");
  13.             tok && *tok;
  14.             tok = strtok(NULL, ",\n"))
  15.     {
  16.         if (!--col)
  17.             return tok;
  18.     }
  19.     return NULL;
  20. }
  21.  
  22. int gps_recevier_log_parser(FILE *input_binary) {
  23.     FILE *output_text;
  24.     char *token;
  25.     char line[1024];
  26.     int iter = 0;
  27.     const char delimiter = ',';
  28.     if ((output_text = fopen("gps_recevier.csv", "w")) == NULL) {
  29.         fclose(input_binary);
  30.         return EXIT_FAILURE;
  31.     }
  32.     fprintf(output_text,"GPS_SOW_TIME (sec), SBEE_X, SBEE_Y, SBEE_Z, VBEE_X, VBEE_Y, VBEE_Z, filed_#8, filed_#9, filed_#10\n");
  33.     while(fgets(line, 1024, input_binary) != NULL) {
  34.         if(strstr(line,"$POS,") == NULL)
  35.             continue;
  36.         if (line[strlen(line) - 1] == '\n' ||  line[strlen(line) - 2] == '\r') {
  37.             line[strlen(line) - 2] = line[strlen(line) - 1] = '\0';
  38.         }
  39.         token = strchr(line, delimiter);
  40.         if (iter % 2 == 0)
  41.             fprintf(output_text,"%s", token + 1);
  42.         iter++;
  43.     }
  44.     fclose(output_text);
  45.     return EXIT_SUCCESS;
  46. }
  47.  
  48. int simgen_udp_latency_log_parser(FILE *input_binary) {
  49.     FILE *output_text;
  50.     int iter;
  51.     struct simgen_udp_command_t udp_cmd;
  52.     if ((output_text = fopen("UDP_mot.csv", "w")) == NULL) {
  53.         fclose(input_binary);
  54.         return EXIT_FAILURE;
  55.     }
  56.     for(iter = 0 ; ; iter++) {
  57.         if (sizeof(udp_cmd) != fread(&udp_cmd, 1, sizeof(udp_cmd), input_binary))
  58.             break ;
  59.  
  60.         if (iter == 0) {
  61.             fprintf(output_text,"Iteration, sim_time_ms, latency\n");
  62.             continue;
  63.         }
  64.  
  65.         fprintf(output_text,"%4d, %6d, %d\n", iter - 1, udp_cmd.time_of_validity_ms_,
  66.                 udp_cmd.latency_wrt_tov_and_current_tir_ms_);
  67.     }
  68.     fclose(output_text);
  69.     return EXIT_SUCCESS;
  70. }
  71.  
  72. int rocket_dynamic_nspo_log_parser(FILE *input_binary, double target_value) {
  73.     FILE *output_text;
  74.     char line[1024];
  75.     char field_content[64];
  76.     double start_gps_time;
  77.     int iter = 0;
  78.     if ((output_text = fopen("refine_nspo_log.csv", "w")) == NULL) {
  79.         fclose(input_binary);
  80.         return EXIT_FAILURE;
  81.     }
  82.     while(fgets(line, 1024, input_binary) != NULL) {
  83.         char* tmp = strdup(line);
  84.         strcpy(field_content, getcolumn(tmp, 2));
  85.         start_gps_time = atof(field_content);
  86.         if (fabs(start_gps_time - target_value) < 1e-4) {
  87.             printf("[dungru:%d:%s] %s\n", __LINE__, __FUNCTION__, line);
  88.             fprintf(output_text,"%s", line);
  89.             break;
  90.         }
  91.     }
  92.     iter = 1;
  93.     while(fgets(line, 1024, input_binary) != NULL) {
  94.         if (iter % 100 == 0) {
  95.             fprintf(output_text,"%s", line);
  96.         }
  97.         iter++;
  98.     }
  99.  
  100.     fclose(output_text);
  101.     return EXIT_SUCCESS;
  102. }
  103.  
  104. int main(int argc, char  * const argv[]) {
  105.     /* parse UDP binary log file */
  106.     FILE *input_binary;
  107.     char file_name[1024] = {};
  108.     char ch;
  109.     int parsing_mode = 0;
  110.     double target_value;
  111.     while ((ch = getopt(argc, argv, "f:lgn:")) != EOF) {
  112.         switch (ch) {
  113.             case 'f':
  114.                 if (optarg == NULL)
  115.                     goto EXIT;
  116.                 printf("-f %s\r\n", optarg);
  117.                 strcpy(file_name, optarg);
  118.                 break;
  119.             case 'l':
  120.                 printf("-l simgen latency parser\n");
  121.                 parsing_mode = LOG_PARSER_SIMGEN_LATENCY;
  122.                 break;
  123.             case 'g':
  124.                 printf("-g gps recevier parser\n");
  125.                 parsing_mode = LOG_PARSER_GPS_RECEVIER;
  126.                 break;
  127.             case 'n':
  128.                 printf("-n NSPO DM Log refine\n");
  129.                 if (optarg == NULL)
  130.                     goto EXIT;
  131.                 parsing_mode = LOG_PARSER_DM_NSPO_REFINE;
  132.                 target_value = atof(optarg);
  133.                 break;
  134.             default:
  135.                 fprintf(stderr, "Unknown option: '%s'\n", optarg);
  136.                 goto EXIT;
  137.         }
  138.  
  139.     }
  140.     if ((input_binary = fopen(file_name, "rb")) == NULL) {
  141.         fprintf(stderr, "[ERROR] The file name does not exist\n");
  142.         return EXIT_FAILURE;
  143.     }
  144.     switch (parsing_mode) {
  145.         case LOG_PARSER_SIMGEN_LATENCY:
  146.             simgen_udp_latency_log_parser(input_binary);
  147.             break;
  148.         case LOG_PARSER_GPS_RECEVIER:
  149.             gps_recevier_log_parser(input_binary);
  150.             break;
  151.         case LOG_PARSER_DM_NSPO_REFINE:
  152.             rocket_dynamic_nspo_log_parser(input_binary, target_value);
  153.             break;
  154.         default:
  155.             fprintf(stderr, "Unknown parsing_mode...EXIT\n");
  156.             goto EXIT;
  157.     }
  158. EXIT:
  159.     fclose(input_binary);
  160.     return 0;
  161. }
RAW Paste Data
Top