/*************************************************************** * ti2utc.c: To convert TI into UTC * * int ti2utc(); * [IN] unsigned int ti: Time Indicator (hex) * [IN] char* estimated_utc: estimated UTC [YYYYMMDDhhmmss] * [OUT] char utc[21]: UTC [YYYYMMDDhhmmssffffff] * * To compile: * unix> setenv LD_LIBRARY_PATH /usr/local/lib * unix> gcc -o ti2utc ti2utc.c -lsctimecal * * example: * unix> setenv LD_LIBRARY_PATH /usr/local/lib * unix> ti2utc 0x23CA2F7E 20170410000000 * 20170407235952030317 * unix> * * Create by Y. Miyashita, 18 Feb 2017 ****************************************************************/ #include #include #include #include "TimeCal_type.h" #include //added by Kazuhiro Yamamoto on 2024Sep05 int main(int argc, char *argv[]) { int ret; int i; char estimated_utc[20]; char tti[30]; //char tcal_f[100]= "/nasA_erg1/sys/TIMCAL/time_cal_sa49"; //char leaps_f[100]="/nasA_erg1/sys/TIMCAL/leapsec.dat"; //char tcal_f[100]= "/home/ergsc-cdf/data_org/erg/sys/TIMECAL/time_cal_sa49"; //char leaps_f[100]="/home/ergsc-cdf/data_org/erg/sys/TIMECAL/leapsec.dat"; //char tcal_f[100]= "/home/ergsc/ergsc-cdf/work/data_org/erg/sys/TIMECAL/time_cal_sa49"; //char leaps_f[100]="/home/ergsc/ergsc-cdf/work/data_org/erg/sys/TIMECAL/leapsec.dat"; char tcal_f[100]= "/home/ergsc/ergsc-cdf/work_local/data_org/erg/sys/TIMECAL/time_cal_sa49"; //added by Kazuhiro Yamamoto on 2024Sep05 char leaps_f[100]="/home/ergsc/ergsc-cdf/work_local/data_org/erg/sys/TIMECAL/leapsec.dat"; //added by Kazuhiro Yamamoto on 2024Sep05 char *cdmy; uint64_t llint; uint32_t lint; uint32_t ti; uint32_t ext; double elapsed_seconds; double es_prev; char utc[21]; //Display the usage if ( argc != 3 ) { printf("Usage: ti2utc TI UTC_guess\n") ; printf(" TI: 4-byte TI as a hex number\n"); printf(" UTC_guess: UTC used as an initial guess (YYYYMMDDhhmmss)\n"); printf("Example:\n prompt> ti2utc 0x1fead086 20170327060000\n") ; return(0) ; } ; // ***** time calibration file ***** // ret = setTimeCalFile("/nasA_erg1/sys/TIMCAL/time_cal_sa49_TEST"); ret = setTimeCalFile(tcal_f); /* if( ret != 0 ){ printf("TimeCalFile path set error. %d\n", ret ); return(1); } */ // ***** leap second file ***** //ret = setLeapSecFile("/nasA_erg1/sys/TIMCAL/leapsec.dat"); ret = setLeapSecFile(leaps_f); /* if( ret != 0 ){ printf("LeapSecFile path set error. %d\n", ret ); return(1); } */ // ***** Convert TI into UTC ***** strcpy( estimated_utc, argv[2] ); strcpy( tti, argv[1] ); //llint = strtoll( tti, &cdmy, 0 ); llint = strtoll( tti, &cdmy, 0 ); ti = (uint32_t)llint; ret = ti2es( estimated_utc, ti, &elapsed_seconds, &ext ); //ret = ti2es( estimated_utc, ti, &elapsed_seconds, &ext, 30, 30 ); //printf( "ES: %f, ext: %x\n", elapsed_seconds, ext ); /* if( ret == RET_NORMAL ){ printf( "es: %f, ext: %x\n", elapsed_seconds, ext ); }else if( ret == RET_AFTER_LAST_RECORD ){ printf( "extrapolation from last record: es: %f, ext: %x\n", elapsed_seconds, ext ); }else{ printf( "ti2es error: %d\n", ret ); return(1); } */ // ***** es2utc (convert elapsed seconds into UTC) ***** ret = es2utc( 1, elapsed_seconds, utc ); //printf( "ES: %f UTC: %s\n", elapsed_seconds, utc ); printf( "%s\n", utc ); /* if( ret != RET_NORMAL ){ printf( "es2utc error\n" ); return(-1); } */ /* strcpy( utc, "20161231235959900000" ); ret = utc2es( 1, utc, &elapsed_seconds ) ; //printf( "ES: %f UTC: %s\n", elapsed_seconds, utc ); ret = es2eti( elapsed_seconds, &ti, &ext ) ; //printf( "TI: %ld %08lx\n", ti, ti ) ; strcpy( estimated_utc, "20161231235959500000" ); for (i=0;i<10;i++) { ret = ti2es( estimated_utc, ti, &elapsed_seconds, &ext, 30, 30 ); ret = es2utc( 1, elapsed_seconds, utc ) ; printf( "TI: %08lx %ld ES: %f UTC: %s\n", ti, ti, elapsed_seconds, utc ); ti += 10 ; }; printf("\n"); es_prev = 0. ; for (i=0;i<18;i++) { sprintf( utc, "%4d0101000000000000", 2000+i ) ; ret = utc2es( 1, utc, &elapsed_seconds ) ; printf( "UTC: %s ES: %16.6f delta-t from prev %f\n", utc, elapsed_seconds, elapsed_seconds-es_prev ); es_prev = elapsed_seconds ; }; */ return(0); }