195 lines
6.4 KiB
C
195 lines
6.4 KiB
C
|
|
/*****************************************************************************/
|
||
|
|
/* SISCO SOFTWARE MODULE HEADER **********************************************/
|
||
|
|
/*****************************************************************************/
|
||
|
|
/* (c) Copyright Systems Integration Specialists Company, Inc., */
|
||
|
|
/* 2006 All Rights Reserved */
|
||
|
|
/* */
|
||
|
|
/* MODULE NAME : stdtime_mms_btime.c */
|
||
|
|
/* PRODUCT(S) : Standard Time Management Library */
|
||
|
|
/* */
|
||
|
|
/* MODULE DESCRIPTION: */
|
||
|
|
/* Support for MMS Btime4, BTime6 and BTOD conversions to/from STDTIME */
|
||
|
|
/* */
|
||
|
|
/* MODIFICATION LOG: */
|
||
|
|
/* Date Who Rev Comments */
|
||
|
|
/* -------- --- --- ----------------------------------------------------- */
|
||
|
|
/* 02/20/08 JRB 02 Make STDTIME same as FILETIME (simplifies a lot). */
|
||
|
|
/* Move T84_* defines to header file. */
|
||
|
|
/* Del TimeOfDay4, Btod, and StdTimeFields functions. */
|
||
|
|
/* 10/05/06 RLH 01 Created */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
|
||
|
|
#include "stdtime.h"
|
||
|
|
#include "stdtime_mms_btime.h"
|
||
|
|
|
||
|
|
/*** MmsTimeOfDay6 initialization functions ***************************/
|
||
|
|
|
||
|
|
|
||
|
|
STDTIME_MMS_TIMEOFDAY6 StdTimeApiZeroMmsTimeOfDay6 ()
|
||
|
|
{
|
||
|
|
STDTIME_MMS_TIMEOFDAY6 zero = {0};
|
||
|
|
|
||
|
|
return zero;
|
||
|
|
|
||
|
|
} /* StdTimeApiZeroMmsTimeOfDay6 */
|
||
|
|
|
||
|
|
|
||
|
|
/*** MmsTimeOfDay6Ex functions ***********************************************/
|
||
|
|
|
||
|
|
|
||
|
|
/*-***************************************************************************/
|
||
|
|
/* StdTimeToMmsTimeOfDay6Ex */
|
||
|
|
/* convert: StdTime struct to MMS_TIMEOFDAY6 and extra fields */
|
||
|
|
/* method: subtract 1984-01-01 from stdTime to form delta */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
STDTIME_RC StdTimeToMmsTimeOfDay6Ex (
|
||
|
|
const STDTIME * /*I*/ pStdTime,
|
||
|
|
STDTIME_MMS_TIMEOFDAY6 * /*O*/ pMmsTimeOfDay6,
|
||
|
|
int32_t * /*O*/ pUsec,
|
||
|
|
int32_t * /*O*/ pNsec)
|
||
|
|
{
|
||
|
|
/* pre-calculated STDTIME value of 1984-01-01 00:00:00.0000000 */
|
||
|
|
STDTIME t84; /* initialized below */
|
||
|
|
|
||
|
|
STDTIME_DELTA mms;
|
||
|
|
|
||
|
|
STDTIME_ENUM_FUNC (StdTimeToMmsTimeOfDay6Ex)
|
||
|
|
|
||
|
|
if (pStdTime->dwHighDateTime < T84_HIGHDATETIME ||
|
||
|
|
(pStdTime->dwHighDateTime == T84_HIGHDATETIME &&
|
||
|
|
pStdTime->dwLowDateTime < T84_LOWDATETIME))
|
||
|
|
{
|
||
|
|
STDTIME_RET_EC (MMS_year_LT_1984);
|
||
|
|
}
|
||
|
|
|
||
|
|
t84.dwHighDateTime = T84_HIGHDATETIME; /* initialize */
|
||
|
|
t84.dwLowDateTime = T84_LOWDATETIME;
|
||
|
|
|
||
|
|
if (pMmsTimeOfDay6 == NULL)
|
||
|
|
{
|
||
|
|
STDTIME_RET_EC (null_argument);
|
||
|
|
}
|
||
|
|
|
||
|
|
*pMmsTimeOfDay6 = StdTimeApiZeroMmsTimeOfDay6();
|
||
|
|
|
||
|
|
/* form difference between supplied date and 1984 */
|
||
|
|
|
||
|
|
if STDTIME_IFNOT (StdTime_GetDelta (pStdTime, &t84, &mms))
|
||
|
|
{
|
||
|
|
STDTIME_RET_RC;
|
||
|
|
}
|
||
|
|
|
||
|
|
pMmsTimeOfDay6->day = mms.day;
|
||
|
|
|
||
|
|
pMmsTimeOfDay6->ms =
|
||
|
|
(mms.hour * 60 * 60 * 1000) +
|
||
|
|
(mms.min * 60 * 1000) +
|
||
|
|
(mms.sec * 1000) + mms.msec;
|
||
|
|
|
||
|
|
if (pUsec != NULL)
|
||
|
|
{
|
||
|
|
*pUsec = mms.usec;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (pNsec != NULL)
|
||
|
|
{
|
||
|
|
*pNsec = mms.nsec;
|
||
|
|
}
|
||
|
|
|
||
|
|
STDTIME_RET_OK;
|
||
|
|
|
||
|
|
} /* StdTimeToMmsTimeOfDay6Ex */
|
||
|
|
|
||
|
|
|
||
|
|
/*-***************************************************************************/
|
||
|
|
/* MmsTimeOfDay6ExToStdTime */
|
||
|
|
/* convert: MMS_TIMEOFDAY6 and extra fields to StdTime struct */
|
||
|
|
/* method: add MMS days and msec to base value of 1984-01-01 */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
STDTIME_RC MmsTimeOfDay6ExToStdTime (
|
||
|
|
const STDTIME_MMS_TIMEOFDAY6 * /*I*/ pMmsTimeOfDay6,
|
||
|
|
int32_t /*I*/ nUsec,
|
||
|
|
int32_t /*I*/ nNsec,
|
||
|
|
STDTIME * /*O*/ pStdTime)
|
||
|
|
{
|
||
|
|
/* pre-calculated STDTIME value of 1984-01-01 00:00:00.0000000 */
|
||
|
|
STDTIME t84; /* initialized below */
|
||
|
|
STDTIME_DELTA mms = {0};
|
||
|
|
|
||
|
|
STDTIME_ENUM_FUNC (MmsTimeOfDay6ExToStdTime)
|
||
|
|
|
||
|
|
t84.dwHighDateTime = T84_HIGHDATETIME; /* initialize */
|
||
|
|
t84.dwLowDateTime = T84_LOWDATETIME;
|
||
|
|
|
||
|
|
if (pStdTime == NULL)
|
||
|
|
{
|
||
|
|
STDTIME_RET_EC (null_argument);
|
||
|
|
}
|
||
|
|
|
||
|
|
*pStdTime = ZeroStdTime ();
|
||
|
|
|
||
|
|
if (pMmsTimeOfDay6 == NULL)
|
||
|
|
{
|
||
|
|
STDTIME_RET_EC (null_argument);
|
||
|
|
}
|
||
|
|
|
||
|
|
*pStdTime = ZeroStdTime();
|
||
|
|
|
||
|
|
/* create delta from 1984-01-01 */
|
||
|
|
|
||
|
|
mms.day = pMmsTimeOfDay6->day;
|
||
|
|
mms.msec = pMmsTimeOfDay6->ms;
|
||
|
|
mms.usec = nUsec;
|
||
|
|
mms.nsec = nNsec;
|
||
|
|
|
||
|
|
/* add mms displacement to mms epoch date of Jan 1 1984 */
|
||
|
|
|
||
|
|
if STDTIME_IFNOT (StdTime_AddDelta (&t84, &mms))
|
||
|
|
{
|
||
|
|
STDTIME_RET_RC;
|
||
|
|
}
|
||
|
|
|
||
|
|
*pStdTime = t84;
|
||
|
|
|
||
|
|
STDTIME_RET_OK;
|
||
|
|
|
||
|
|
} /* MmsTimeOfDay6ExToStdTime */
|
||
|
|
|
||
|
|
|
||
|
|
/*** MmsTimeOfDay6 functions *************************************************/
|
||
|
|
|
||
|
|
|
||
|
|
/*-***************************************************************************/
|
||
|
|
/* StdTimeToMmsTimeOfDay6 */
|
||
|
|
/* convert: StdTime struct to MMS_TIMEOFDAY6 (without extra fields) */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
STDTIME_RC StdTimeToMmsTimeOfDay6 (
|
||
|
|
const STDTIME * /*I*/ pStdTime,
|
||
|
|
STDTIME_MMS_TIMEOFDAY6 * /*O*/ pMmsTimeOfDay6)
|
||
|
|
{
|
||
|
|
STDTIME_ENUM_FUNC (StdTimeToMmsTimeOfDay6)
|
||
|
|
|
||
|
|
STDTIME_RET (StdTimeToMmsTimeOfDay6Ex (pStdTime, pMmsTimeOfDay6, NULL, NULL));
|
||
|
|
|
||
|
|
} /* StdTimeToMmsTimeOfDay6 */
|
||
|
|
|
||
|
|
|
||
|
|
/*-***************************************************************************/
|
||
|
|
/* MmsTimeOfDay6ToStdTime */
|
||
|
|
/* convert: MMS_TIMEOFDAY6 (without extra fields) to StdTime struct */
|
||
|
|
/*****************************************************************************/
|
||
|
|
|
||
|
|
STDTIME_RC MmsTimeOfDay6ToStdTime (
|
||
|
|
const STDTIME_MMS_TIMEOFDAY6 * /*I*/ pMmsTimeOfDay6,
|
||
|
|
STDTIME * /*O*/ pStdTime)
|
||
|
|
{
|
||
|
|
STDTIME_ENUM_FUNC (MmsTimeOfDay6ToStdTime)
|
||
|
|
|
||
|
|
STDTIME_RET (MmsTimeOfDay6ExToStdTime (pMmsTimeOfDay6, 0, 0, pStdTime));
|
||
|
|
|
||
|
|
} /* MmsTimeOfDay6ToStdTime */
|