#include "frame_prt.h" int print_frame_sum(FILE *fp,struct frameinfo_def *frm); FILE *info_fp; FILE *hkp_sum_fp; int print_frameinfo_packet(packet *pk) { struct frameinfo_def temp; if(info_fp || hkp_sum_fp){ memcpy(&temp,pk->data,FRAME_INFO_SIZE); print_frame_struct(info_fp,&temp); print_frame_sum(hkp_sum_fp,&temp); return(1); } return(0); } int print_frame_struct(FILE *fp,struct frameinfo_def *frm) { static double last_spin0_time; static double last_frame_time; double dft; char *smode; static double frame_period[3] = { 100., 92.,46. }; if(fp==0) return(0); smode = spc_mode_str(frm->spc_mode); dft = frm->time - last_frame_time; last_frame_time = frm->time; if(( frm->errors & ERROR_FRAME_GAP) || last_spin0_time==0 ){ if(dft>999.) dft = 999.; fprintf(fp,"\n"); fprintf(fp,"` Time "); /* fprintf(fp,"` Time "); */ /* fprintf(fp," dft "); */ fprintf(fp," cntr "); fprintf(fp,"Seq spin dspin "); fprintf(fp," Per "); /* fprintf(fp," Good Bad Ugly "); */ fprintf(fp," Tot pks "); fprintf(fp,"Crp "); fprintf(fp," Num "); fprintf(fp," Errors "); fprintf(fp," Mode "); /* fprintf(fp,"%s",time_to_YMDHMS(frm->spin0_time)); */ fprintf(fp,"\n"); last_spin0_time = frm->spin0_time; } #if 1 fprintf(fp,"%s ",time_to_YMDHMS(frm->time)); #else fprintf(fp," %9.2f ",frm->time); fprintf(fp,"%5.2f ",dft); #endif fprintf(fp,"%5d ",frm->counter); fprintf(fp,"%3d %5d %6.4f ",frm->seq, frm->spin, frm->dspin); fprintf(fp,"%6.4f ",frm->spin_period); /* fprintf(fp,"%5d %5d %5d ",frm->good, frm->bad, frm->ugly); */ fprintf(fp,"%5d %3d ", frm->good+frm->ugly+frm->bad, frm->npkts); fprintf(fp,"%4.1lf ",frm->creep); fprintf(fp,"%4d ",frm->bad); fprintf(fp,"<%s> ",bit_pattern_o(frm->errors,ERROR_STRING)); fprintf(fp,"%s\n",smode); return(1); } /* print out frame information to summary file. Used for near realtime data as alternate to */ /* the GSE. Note that we share the housekeeping file streem. */ int print_frame_sum(FILE *fp,struct frameinfo_def *frm) { if(fp==0) return(0); /* 0 1 2 3 4 5 6 */ /* 01234567890123456789012345678901234567890123456789012345678901234567890*/ fprintf(fp, "------------------------- WIND 3DP frame summary ----------------------\n"); fprintf(fp, " FRAME INFORMATION\n"); fprintf(fp, " Time: %s Creep: %-8.2lf\n", time_to_YMDHMS(frm->time), frm->creep); fprintf(fp, " Spin Period: %-8.2lf FSpin: %-8.2lf DSpin: %-8.2lf\n", frm->spin_period, frm->fspin, frm->dspin); fprintf(fp, " Frame Cnt: %-8u Errors: %-8u Numer Pkts: %-5hu\n", frm->counter, frm->errors, frm->npkts); fprintf(fp, " Main PktTypes: %-5hx EESA PktTypes: %-5hx PESA PktTypes: %-5hx\n", frm->main_packet_types, frm->eesa_packet_types, frm->pesa_packet_types); fprintf(fp, " Fill Bytes: %-5hd Sync Errors: %-5hd\n", frm->num_fill_bytes, frm->num_sync_errors); fprintf(fp, " TELEMETRY PERCENTAGES\n"); #if 0 fprintf(fp, " Main: %-8.2f EESA: %-8.2f PESA: %-8.2f\n", frm->main_telem, frm->eesa_telem, frm->pesa_telem); fprintf(fp, " FPC: %-8.2f Used: %-8.2f Bad: %-8.2f\n", frm->fpc_telem, frm->used_telem, frm->bad_telem); #endif fprintf(fp, " Used: %-8.2f Unused: %-8.2f Lost: %-8.2f\n", frm->used_telem, frm->unused_telem, frm->lost_telem); fprintf(fp, " DATA STATISTICS\n"); fprintf(fp, " Good: %-5hd Bad: %-5hd Ugly: %-5hd\n" " Lost: %-5hd\n", frm->good, frm->bad, frm->ugly, frm->lost); fprintf(fp, " \n\n\n\n"); return (1); } /***************************************************************************** The following routines are used for printing frame information. This is very useful for debugging purposes. *****************************************************************************/ char *spc_mode_str(int spc_mode) { char *s; switch(spc_mode){ case SPC_MODE_SCI1x: s = "S1X"; break; case SPC_MODE_ENG1x: s = "E1X"; break; case SPC_MODE_MAN1x: s = "M1X"; break; case SPC_MODE_CON1x: s = "C1X"; break; case SPC_MODE_SCI2x: s = "S2X"; break; case SPC_MODE_ENG2x: s = "E2X"; break; case SPC_MODE_MAN2x: s = "M2X"; break; case SPC_MODE_CON2x: s = "C2X"; break; case SPC_MODE_UNKNOWN: s = "UNK"; break; case SPC_MODE_TRANS: s = "TRN"; break; default: s = "???"; break; } return(s); }