⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 telemetry_stats_frm.c

📁 一个非常好的人工智能开发工具开源软件
💻 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 + -