Guest User

Untitled

a guest
May 16th, 2018
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.81 KB | None | 0 0
  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. }
Add Comment
Please, Sign In to add comment