IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 18, 2005, 4:13:53 PM (21 years ago)
Author:
evanalst
Message:

Modify the psTime data structure. (SDR-13)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/astro/psTime.c

    r3708 r3712  
    1010 *  @author Ross Harman, MHPCC
    1111 *
    12  *  @version $Revision: 1.58 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2005-04-19 00:17:05 $
     12 *  @version $Revision: 1.59 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2005-04-19 02:13:53 $
    1414 *
    1515 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    6464
    6565                /** Microseconds per day */
    66                 #define USEC_PER_DAY 86400000000.0
     66                #define NSEC_PER_DAY 86400000000000.0
    6767
    6868                /** Time metadata read from config file */
     
    363363
    364364    outTime->sec = 0;
    365     outTime->usec = 0;
     365    outTime->nsec = 0;
    366366    outTime->type = type;
     367    outTime->leapsecond = false;
    367368
    368369    return outTime;
     
    386387    // Convert timeval time to psTime
    387388    time->sec = now.tv_sec;
    388     time->usec = now.tv_usec;
     389    time->nsec = now.tv_usec*1000;
    389390
    390391    // Add most leapseconds to UTC time to get TAI time if necessary
     
    403404    // Error checks
    404405    PS_PTR_CHECK_NULL(time,NULL);
    405     PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NULL);
     406    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL);
    406407
    407408    if (time->type == type) { // time already right type.  That was easy!
     
    448449    // Error checks
    449450    PS_PTR_CHECK_NULL(time,NAN);
    450     PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NAN);
     451    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN);
    451452
    452453    // Calculate TAI or UTC time based on type of time user passes
     
    455456        utcTime = psTimeAlloc(PS_TIME_UTC);
    456457        utcTime->sec = taiTime->sec - psTimeGetTAIDelta(time);
    457         utcTime->usec = taiTime->usec;
     458        utcTime->nsec = taiTime->nsec;
    458459    } else if(time->type == PS_TIME_UTC) {
    459460        utcTime = psMemIncrRefCounter(time);
    460461        taiTime = psTimeAlloc(PS_TIME_TAI);
    461462        taiTime->sec = utcTime->sec + psTimeGetTAIDelta(time);
    462         taiTime->usec = utcTime->usec;
     463        taiTime->nsec = utcTime->nsec;
    463464    }
    464465
     
    519520    // Error checks
    520521    PS_PTR_CHECK_NULL(time,NAN);
    521     PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NAN);
     522    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN);
    522523
    523524    if(time->type != PS_TIME_TAI) {
     
    592593    // Error checks
    593594    PS_PTR_CHECK_NULL(time,NULL);
    594     PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NULL);
     595    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL);
    595596
    596597    if(time->type != PS_TIME_TAI)
     
    715716    // Error checks
    716717    PS_PTR_CHECK_NULL(time,NAN);
    717     PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NAN);
     718    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN);
    718719
    719720    // Check time metadata
     
    768769    PS_PTR_CHECK_NULL(time1,0);
    769770    PS_PTR_CHECK_NULL(time2,0);
    770     PS_INT_CHECK_RANGE(time1->usec,0,1e6-1,0);
    771     PS_INT_CHECK_RANGE(time2->usec,0,1e6-1,0);
     771    PS_INT_CHECK_RANGE(time1->nsec,0,1e9-1,0);
     772    PS_INT_CHECK_RANGE(time2->nsec,0,1e9-1,0);
    772773    diff = abs((psS64)psTimeGetTAIDelta((psTime*)time1)-(psS64)psTimeGetTAIDelta((psTime*)time2));
    773774
     
    781782    // Error checks
    782783    PS_PTR_CHECK_NULL(time,NAN);
    783     PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NAN);
     784    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN);
    784785
    785786    // Julian date conversion
    786787    if(time->sec < 0) {
    787         jd = time->sec / SEC_PER_DAY - time->usec / USEC_PER_DAY + 2440587.5; // psTime earlier than epoch
     788        jd = time->sec / SEC_PER_DAY - time->nsec / NSEC_PER_DAY + 2440587.5; // psTime earlier than epoch
    788789    } else {
    789         jd = time->sec / SEC_PER_DAY + time->usec / USEC_PER_DAY + 2440587.5; // psTime greater than epoch
     790        jd = time->sec / SEC_PER_DAY + time->nsec / NSEC_PER_DAY + 2440587.5; // psTime greater than epoch
    790791    }
    791792
     
    800801    // Error checks
    801802    PS_PTR_CHECK_NULL(time,NAN);
    802     PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NAN);
     803    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NAN);
    803804
    804805    // Modified Julian date conversion
    805806    if(time->sec < 0) {
    806         mjd = time->sec / SEC_PER_DAY - time->usec / USEC_PER_DAY + 40587.0; // psTime earlier than epoch
     807        mjd = time->sec / SEC_PER_DAY - time->nsec / NSEC_PER_DAY + 40587.0; // psTime earlier than epoch
    807808    } else {
    808         mjd = time->sec / SEC_PER_DAY + time->usec / USEC_PER_DAY + 40587.0; // psTime greater than epoch
     809        mjd = time->sec / SEC_PER_DAY + time->nsec / NSEC_PER_DAY + 40587.0; // psTime greater than epoch
    809810    }
    810811
     
    823824    // Error checks
    824825    PS_PTR_CHECK_NULL(time,NULL);
    825     PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NULL);
     826    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL);
    826827
    827828    tempString = psAlloc(MAX_TIME_STRING_LENGTH);
    828829    timeString = psAlloc(MAX_TIME_STRING_LENGTH);
    829830
    830     ms = time->usec / 1000;
     831    ms = time->nsec / 1000000;
    831832    sec = time->sec;
    832833
     
    856857    // Error checks
    857858    PS_PTR_CHECK_NULL(time,timevalTime);
    858     PS_INT_CHECK_RANGE(time->usec,0,1e6-1,timevalTime);
     859    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,timevalTime);
    859860
    860861    timevalTime.tv_sec = time->sec;
    861     timevalTime.tv_usec = time->usec;
     862    timevalTime.tv_usec = time->nsec / 1000;
    862863
    863864    return timevalTime;
     
    879880    // Error checks
    880881    PS_PTR_CHECK_NULL(time,NULL);
    881     PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NULL);
     882    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL);
    882883
    883884    seconds = time->sec%60;
     
    941942    seconds = days * SEC_PER_DAY;
    942943    if(seconds < 0.0) {
    943         outTime->usec = (seconds - (psS64)seconds) * -1000000.0;  // psTime earlier than epoch
     944        outTime->nsec = (seconds - (psS64)seconds) * -1000000000.0;  // psTime earlier than epoch
    944945    } else {
    945         outTime->usec = (seconds - (psS64)seconds) * 1000000.0;   // psTime greater than epoch
     946        outTime->nsec = (seconds - (psS64)seconds) * 1000000000.0;   // psTime greater than epoch
    946947    }
    947948    outTime->sec = seconds;
    948949
    949950    // Error check
    950     PS_INT_CHECK_RANGE(outTime->usec,0,1e6-1,outTime);
     951    PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime);
    951952
    952953    return outTime;
     
    967968    seconds = days * SEC_PER_DAY;
    968969    if(seconds < 0.0) {
    969         outTime->usec = (seconds - (psS64)seconds) * -1000000.0;  // psTime earlier than epoch
     970        outTime->nsec = (seconds - (psS64)seconds) * -1000000000.0;  // psTime earlier than epoch
    970971    } else {
    971         outTime->usec = (seconds - (psS64)seconds) * 1000000.0;   // psTime greater than epoch
     972        outTime->nsec = (seconds - (psS64)seconds) * 1000000000.0;   // psTime greater than epoch
    972973    }
    973974    outTime->sec = seconds;
    974975
    975976    // Error check
    976     PS_INT_CHECK_RANGE(outTime->usec,0,1e6-1,outTime);
     977    PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime);
    977978
    978979    return outTime;
     
    10061007    // Convert tm time to psTime
    10071008    outTime = psTimeFromTM(&tmTime);
    1008     outTime->usec = millisecond * 1000;
     1009    outTime->nsec = millisecond * 1000000;
    10091010
    10101011    return outTime;
     
    10241025    // Convert to psTime
    10251026    outTime->sec = time->tv_sec;
    1026     outTime->usec = time->tv_usec;
     1027    outTime->nsec = time->tv_usec * 1000;
    10271028
    10281029    // Error check
    1029     PS_INT_CHECK_RANGE(outTime->usec,0,1e6-1,outTime);
     1030    PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime);
    10301031
    10311032    return outTime;
     
    10831084
    10841085    // C's TM does not define a microsecond field. Microseconds must be manipulated by calling function.
    1085     outTime->usec = 0;
     1086    outTime->nsec = 0;
    10861087
    10871088    // Error check
    1088     PS_INT_CHECK_RANGE(outTime->usec,0,1e6-1,outTime);
     1089    PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime);
    10891090
    10901091    return outTime;
     
    11001101    // Error checks
    11011102    PS_PTR_CHECK_NULL(time,NULL);
    1102     PS_INT_CHECK_RANGE(time->usec,0,1e6-1,NULL);
     1103    PS_INT_CHECK_RANGE(time->nsec,0,1e9-1,NULL);
    11031104
    11041105    // Convert time to TAI if necessary, but without changing input arguments
     
    11061107        tempTime = psTimeAlloc(PS_TIME_UTC);
    11071108        tempTime->sec = time->sec;
    1108         tempTime->usec = time->usec;
     1109        tempTime->nsec = time->nsec;
    11091110        tempTime = psTimeConvert(tempTime, PS_TIME_TAI);
    11101111    } else {
     
    11141115    // Create output time
    11151116    outTime = psTimeAlloc(PS_TIME_TAI);
    1116     sec = delta + (psF64)tempTime->sec + (psF64)tempTime->usec/1e6;
     1117    sec = delta + (psF64)tempTime->sec + (psF64)tempTime->nsec/1e9;
    11171118    outTime->sec = sec;
    1118     outTime->usec = (sec - outTime->sec)*1e6;
     1119    outTime->nsec = (sec - outTime->sec)*1e9;
    11191120
    11201121    // Error check
    1121     PS_INT_CHECK_RANGE(outTime->usec,0,1e6-1,outTime);
     1122    PS_INT_CHECK_RANGE(outTime->nsec,0,1e9-1,outTime);
    11221123
    11231124    // Convert result to same time type as input
     
    11421143    // Error checks
    11431144    PS_PTR_CHECK_NULL(time1,0.0);
    1144     PS_INT_CHECK_RANGE(time1->usec,0,1e6-1,0.0);
     1145    PS_INT_CHECK_RANGE(time1->nsec,0,1e9-1,0.0);
    11451146    PS_PTR_CHECK_NULL(time2,0.0);
    1146     PS_INT_CHECK_RANGE(time2->usec,0,1e6-1,0.0);
     1147    PS_INT_CHECK_RANGE(time2->nsec,0,1e9-1,0.0);
    11471148
    11481149    // Convert time to TAI if necessary, but without changing input arguments
     
    11501151        tempTime1 = psTimeAlloc(PS_TIME_UTC);
    11511152        tempTime1->sec = time1->sec;
    1152         tempTime1->usec = time1->usec;
     1153        tempTime1->nsec = time1->nsec;
    11531154        tempTime1 = psTimeConvert(tempTime1, PS_TIME_TAI);
    11541155    } else {
     
    11581159        tempTime2 = psTimeAlloc(PS_TIME_UTC);
    11591160        tempTime2->sec = time2->sec;
    1160         tempTime2->usec = time2->usec;
     1161        tempTime2->nsec = time2->nsec;
    11611162        tempTime2 = psTimeConvert(tempTime2, PS_TIME_TAI);
    11621163    } else {
     
    11651166
    11661167    uSec1 = tempTime1->sec >= 0 ? 1.0 : -1.0;
    1167     uSec1 = uSec1*tempTime1->usec/1e6;
     1168    uSec1 = uSec1*tempTime1->nsec/1e9;
    11681169    uSec2 = tempTime2->sec >= 0 ? 1.0 : -1.0;
    1169     uSec2 = uSec2*tempTime2->usec/1e6;
     1170    uSec2 = uSec2*tempTime2->nsec/1e9;
    11701171    out = (tempTime1->sec-tempTime2->sec) + (uSec1-uSec2);
    11711172
Note: See TracChangeset for help on using the changeset viewer.