📄 telemetry_stats_frm.c
字号:
/*** *** See the file "L2_RTI_EO1/disclaimers-and-notices-L2.txt" for *** information on usage and redistribution of this file, *** and for a DISCLAIMER OF ALL WARRANTIES. ***//********************************************************************************//* *//* telemetry_stats_frm.c *//* *//* This program calculates the telemetry rate statistics on a per frame *//* basis. The total number of bytes transmitted within a frame is *//* calculated and the maximum value is tracked. The average is calculated *//* dividing the total number of bytes transmitted during the mission by *//* the number of frames. The per second values are approximations based */ /* on multiplying frame values by 12.5, which is the number of frames in *//* a second. To get more accurate per second measurements, please use *//* telemetry_stats.c *//* *//* *//********************************************************************************/#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAX_KEYWORD_LENGTH 128#define NUMBER_OF_STRING_TYPES 12#define BUFFER_SIZE 200typedef enum{ STRTYPE_FRAME_UPDATE = 0, STRTYPE_TIMESTEP = 1, STRTYPE_OBSERVATION = 2, STRTYPE_FINDCANDIDATES = 3, STRTYPE_ENDFINDCANDIDATES = 4, STRTYPE_CANDIDATE = 5, STRTYPE_ENDCANDIDATE = 6, STRTYPE_ASSIGNMENT = 7, STRTYPE_TRANSITION = 8, STRTYPE_COMMAND = 9, STRTYPE_ROS_OBSERVATION =10, STRTYPE_ROS_COMMAND =11,} strType;typedef struct{ strType type; char keyword[MAX_KEYWORD_LENGTH]; int int_length;} TelemetryString;FILE *in;TelemetryString String [NUMBER_OF_STRING_TYPES];int total_integers;int total_frames;int max_per_frame;void init () { total_integers = 0; total_frames = 0; max_per_frame = 0; strcpy (String[STRTYPE_FRAME_UPDATE].keyword, "ROS: Frame Update"); String[STRTYPE_FRAME_UPDATE].int_length = 4; String[STRTYPE_FRAME_UPDATE].type = STRTYPE_FRAME_UPDATE; strcpy (String[STRTYPE_TIMESTEP].keyword, "timestep"); String[STRTYPE_TIMESTEP].int_length = 4; String[STRTYPE_TIMESTEP].type = STRTYPE_TIMESTEP; strcpy (String[STRTYPE_OBSERVATION].keyword, "observation,"); String[STRTYPE_OBSERVATION].int_length = 6; String[STRTYPE_OBSERVATION].type = STRTYPE_OBSERVATION; strcpy (String[STRTYPE_FINDCANDIDATES].keyword, "findCandidates,"); String[STRTYPE_FINDCANDIDATES].int_length = 4; String[STRTYPE_FINDCANDIDATES].type = STRTYPE_FINDCANDIDATES; strcpy (String[STRTYPE_ENDFINDCANDIDATES].keyword, "endFindCandidates"); String[STRTYPE_ENDFINDCANDIDATES].int_length = 1; String[STRTYPE_ENDFINDCANDIDATES].type = STRTYPE_FINDCANDIDATES; strcpy (String[STRTYPE_CANDIDATE].keyword, "candidate"); String[STRTYPE_CANDIDATE].int_length = 2; String[STRTYPE_CANDIDATE].type = STRTYPE_CANDIDATE; strcpy (String[STRTYPE_ENDCANDIDATE].keyword, "endCandidate"); String[STRTYPE_ENDCANDIDATE].int_length = 1; String[STRTYPE_ENDCANDIDATE].type = STRTYPE_ENDCANDIDATE; strcpy (String[STRTYPE_ASSIGNMENT].keyword, "assignment"); String[STRTYPE_ASSIGNMENT].int_length = 5; String[STRTYPE_ASSIGNMENT].type = STRTYPE_ASSIGNMENT; strcpy (String[STRTYPE_TRANSITION].keyword, "transition"); String[STRTYPE_TRANSITION].int_length = 5; String[STRTYPE_TRANSITION].type = STRTYPE_TRANSITION; strcpy (String[STRTYPE_COMMAND].keyword, "command,"); String[STRTYPE_COMMAND].int_length = 5; String[STRTYPE_COMMAND].type = STRTYPE_COMMAND; strcpy (String[STRTYPE_ROS_OBSERVATION].keyword, "ROS: Observation"); String[STRTYPE_ROS_OBSERVATION].int_length = 8; String[STRTYPE_ROS_OBSERVATION].type = STRTYPE_ROS_OBSERVATION; strcpy (String[STRTYPE_ROS_COMMAND].keyword, "ROS: Cmd"); String[STRTYPE_ROS_COMMAND].int_length = 5; String[STRTYPE_ROS_COMMAND].type = STRTYPE_ROS_COMMAND;}strType get_string_type (char *buffer) { int i; for (i=0; i<NUMBER_OF_STRING_TYPES; i++) { if (strstr (buffer, String[i].keyword)) return String[i].type; } return -1;}int get_string_encoding (strType type) { return String[type].int_length;}void process_file () { int cur_integers = 0; strType cur_type; char line [BUFFER_SIZE]; char buffer [BUFFER_SIZE]; while (!feof(in)) { fgets (line, BUFFER_SIZE, in); strcpy (buffer, line); cur_type = get_string_type (buffer); if (cur_type == STRTYPE_FRAME_UPDATE) { /* reset the counters */ if (cur_integers > max_per_frame) max_per_frame = cur_integers; cur_integers = 0; total_frames++; } else { /* increment the counters */ if (cur_type > 0) { cur_integers = cur_integers + get_string_encoding (cur_type); total_integers = total_integers + get_string_encoding (cur_type); } } } fprintf (stderr, "\nTelemetry rate:\n average - %f Bpf (bytes per frame)\n", ((float)total_integers*4/(float)total_frames) ); fprintf (stderr, " maximum - %d Bpf (bytes per frame)\n", max_per_frame ); fprintf (stderr, " appr. average per second - %f Bps (bytes per second)\n", ((float)total_integers*50/(float)total_frames) ); fprintf (stderr, " appr. maximum per second - %f Bps (bytes per second)\n", max_per_frame*12.5 ); fprintf (stderr, " mission data rate - %d bytes\n", total_integers*4); fprintf (stderr, "total frames - %d\n", total_frames);}void close () { fclose (in);}void main (int argc, char **argv) { in = fopen (argv[1], "r"); if (in) { init(); process_file (); } else { printf ("Can't open the file\n"); exit(0); } fclose (in);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -