00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <stdlib.h>
00024 #include <stdio.h>
00025 #include <time.h>
00026 #include <ctype.h>
00027 #include <math.h>
00028 #include <errno.h>
00029 #include <unistd.h>
00030 #include <string.h>
00031 #include <sys/types.h>
00032 #include <sys/stat.h>
00033 #include <fcntl.h>
00034 #include <dirent.h>
00035 #include <assert.h>
00036 #include <signal.h>
00037
00038 #include "common.h"
00039
00040 unsigned char synchro=0x50;
00041 int firstFrame=1;
00042
00043 FILE *titBinFile=NULL;
00044 char titBinFileName[255];
00045
00048 FILE* OpenTitBinFile(void)
00049 {
00050 int i;
00051 if (currentTime.usecond>0)
00052 {
00053
00054 for (i=0; i<MAX_CHANNEL; i++)
00055 {
00056
00057
00058 if (infoHeader[i].uncorrected.usecond==0LL)
00059 {
00060 InitInfoHeader(i);
00061 }
00062 }
00063 }
00064 if (titBinFile==NULL)
00065 {
00066 int fd;
00067 strcpy(titBinFileName,"titanfileXXXXXX");
00068 fd=OpenTempFile(titBinFileName);
00069 assert((titBinFile=fdopen(fd,"wb"))!=NULL);
00070 setvbuf(titBinFile,NULL,_IOFBF,FILE_BUFFER_SIZE);
00071 }
00072 return(titBinFile);
00073 }
00074
00076 void AbortTitBinFile(void)
00077 {
00078 if (titBinFile)
00079 {
00080 fclose(titBinFile);
00081 titBinFile=NULL;
00082 }
00083 unlink(titBinFileName);
00084 }
00085
00088 void AddTitFrame(const unsigned char *frame)
00089 {
00090 char f2[12];
00091
00092 #if 0
00093 if (firstFrame)
00094 {
00095 if (((frame[11]&0x7)==TIME_FRAME)||((frame[11]&0x7)==GPST_FRAME))
00096 {
00097 return;
00098 }
00099 }
00100 firstFrame=0;
00101 #endif
00102 if (OpenTitBinFile())
00103 {
00104 memcpy(f2,frame,12);
00105 f2[11]&=0x0f;
00106 f2[11]|=synchro;
00107 if (synchro==0x50)
00108 {
00109 synchro=0xa0;
00110 }
00111 else
00112 {
00113 synchro=0x50;
00114 }
00115 fwrite(f2,12,1,titBinFile);
00116 }
00117 }
00118
00120 void CloseTitFile(void)
00121 {
00122 char line[128];
00123 int i;
00124 firstFrame=1;
00125 if (titBinFile==NULL)
00126 {
00127 return;
00128 }
00129 fclose(titBinFile);
00130 titBinFile=NULL;
00131 for (i=0; i<MAX_CHANNEL; i++)
00132 {
00133 UpdateInfoHeader(i);
00134 }
00135 strcpy(line,FileName("", ".tit", 0, fileNameOptions&(~ADD_CHANNEL_CODE)));
00136 PrintLog("OUTPUT: %s\n",line);
00137 Rename(titBinFileName,line);
00138 unlink(titBinFileName);
00139 for (i=0; i<MAX_CHANNEL; i++)
00140 {
00141 infoHeader[i].uncorrected.usecond=0LL;
00142 }
00143 }