void CFormatMsgJ1939::vFormatTime(BYTE bExprnFlag, PSTJ1939_MSG psJ1939BData, PSFORMATTEDATA_J1939 psJ1939FData) { BYTE bTmpExprnFlag = bExprnFlag; if (IS_TM_ABS_RES(bExprnFlag))//for Absolute reset timestamp { CLEAR_EXPR_TM_BITS(bTmpExprnFlag); SET_TM_ABS_RES(bTmpExprnFlag); vCalculateAndFormatTM(bTmpExprnFlag, psJ1939BData->m_sMsgProperties.m_un64TimeStamp, psJ1939FData->m_acTimeAbsReset); } if (IS_TM_ABS_SET(bExprnFlag)) { CLEAR_EXPR_TM_BITS(bTmpExprnFlag); SET_TM_ABS(bTmpExprnFlag); vCalculateAndFormatTM(bTmpExprnFlag, psJ1939BData->m_sMsgProperties.m_un64TimeStamp, psJ1939FData->m_acTimeAbs); } if (IS_TM_REL_SET(bExprnFlag)) { CLEAR_EXPR_TM_BITS(bTmpExprnFlag); SET_TM_REL(bTmpExprnFlag); vCalculateAndFormatTM(bTmpExprnFlag, psJ1939BData->m_sMsgProperties.m_un64TimeStamp, psJ1939FData->m_acTimeRel); } if (IS_TM_SYS_SET(bExprnFlag)) { CLEAR_EXPR_TM_BITS(bTmpExprnFlag); SET_TM_SYS(bTmpExprnFlag); vCalculateAndFormatTM(bTmpExprnFlag, psJ1939BData->m_sMsgProperties.m_un64TimeStamp, psJ1939FData->m_acTimeSys); } }
void CFormatMsgCommon::vCalculateAndFormatTM(BYTE bExprnFlag, UINT64 TimeStamp, char acTime[]) { /* In order to make this function work properly ENSURE bExprnFlag has ONLY ONE time mode bit up */ DWORD dwTSTmp = 0; // temporary time stamp UINT64 qwRefSysTime, qwAbsBaseTime; m_ouRefTimeKeeper.vGetTimeParams(qwRefSysTime, qwAbsBaseTime); if (IS_TM_SYS_SET(bExprnFlag)) { dwTSTmp = (DWORD) ((TimeStamp - qwAbsBaseTime) + qwRefSysTime); } else if (IS_TM_REL_SET(bExprnFlag)) { if (m_qwRelBaseTime == 0) { m_qwRelBaseTime = TimeStamp; } //Time difference should be +ve value if(TimeStamp >= m_qwRelBaseTime) { dwTSTmp = (DWORD) (TimeStamp - m_qwRelBaseTime); } else { dwTSTmp = (DWORD) (m_qwRelBaseTime - TimeStamp); } m_qwRelBaseTime = TimeStamp; } else if (IS_TM_ABS_SET(bExprnFlag)) { //Time difference should be +ve value if(TimeStamp >= qwAbsBaseTime) { dwTSTmp = (DWORD) (TimeStamp - qwAbsBaseTime); } else { dwTSTmp = (DWORD) (qwAbsBaseTime - TimeStamp); } } else if (IS_TM_ABS_RES(bExprnFlag)) { if(m_bResetMsgAbsTime == TRUE) { //reset the time for new logging session SYSTEMTIME LocalCurrTime; GetLocalTime(&LocalCurrTime); UINT64 RefCurrTime = (LocalCurrTime.wHour * 3600 + LocalCurrTime.wMinute * 60 + + LocalCurrTime.wSecond) * 10000 + (LocalCurrTime.wMilliseconds * 10); UINT64 RefLogTime = (m_LogSysTime.wHour * 3600 + m_LogSysTime.wMinute * 60 + + m_LogSysTime.wSecond) * 10000 + (m_LogSysTime.wMilliseconds * 10); m_qwLogDelayTime = (DWORD)(RefCurrTime - RefLogTime);//for log & msg delay time if(TimeStamp >= qwAbsBaseTime)//Time difference should be +ve value { m_qwResTime = TimeStamp - qwAbsBaseTime; } else { m_qwResTime = qwAbsBaseTime - TimeStamp; } m_bResetMsgAbsTime = FALSE; } //Time difference should be +ve value if(TimeStamp >= (qwAbsBaseTime + m_qwResTime)) { dwTSTmp = (DWORD) (TimeStamp - qwAbsBaseTime - m_qwResTime ); } else { dwTSTmp = (DWORD) (m_qwResTime + qwAbsBaseTime - TimeStamp ); } dwTSTmp = dwTSTmp + m_qwLogDelayTime; //add msg delay time } else { ASSERT(FALSE); } vFormatTimeStamp(dwTSTmp, acTime); }
void CFormatMsgCommon::vCalculateAndFormatTM(BYTE bExprnFlag, UINT64 TimeStamp, char acTime[], int bufferSize) { UINT64 qwRefSysTime, qwAbsBaseTime; m_ouRefTimeKeeper.vGetTimeParams(qwRefSysTime, qwAbsBaseTime); /* temporary time stamp */ DWORD dwTSTmp = 0; if (IS_TM_SYS_SET(bExprnFlag)) { dwTSTmp = (DWORD) ((TimeStamp - qwAbsBaseTime) + qwRefSysTime); } else if (IS_TM_REL_SET(bExprnFlag)) { if (m_qwRelBaseTime == 0) { m_qwRelBaseTime = TimeStamp; } /* Time difference should be +ve value */ if(TimeStamp >= m_qwRelBaseTime) { dwTSTmp = (DWORD) (TimeStamp - m_qwRelBaseTime); } else { dwTSTmp = (DWORD) (m_qwRelBaseTime - TimeStamp); } m_qwRelBaseTime = TimeStamp; } else if (IS_TM_ABS_SET(bExprnFlag)) { /* Time difference should be +ve value */ if(TimeStamp >= qwAbsBaseTime) { dwTSTmp = (DWORD) (TimeStamp - qwAbsBaseTime); } else { dwTSTmp = (DWORD) (qwAbsBaseTime - TimeStamp); } } else if (IS_TM_ABS_RES(bExprnFlag)) { if(m_bResetMsgAbsTime == TRUE) { /* reset the time for new logging session */ SYSTEMTIME LocalCurrTime; GetLocalTime(&LocalCurrTime); UINT64 RefCurrTime = LocalCurrTime.wHour * 36000000 + LocalCurrTime.wMinute * 600000 + LocalCurrTime.wSecond * 10000 + LocalCurrTime.wMilliseconds * 10; UINT64 RefLogTime = m_LogSysTime.wHour * 36000000 + m_LogSysTime.wMinute * 600000 + m_LogSysTime.wSecond * 10000 + m_LogSysTime.wMilliseconds * 10; /* for log & msg delay time */ m_qwLogDelayTime = (DWORD)(RefCurrTime - RefLogTime); /* Time difference should be +ve value */ if(TimeStamp >= qwAbsBaseTime) { m_qwResTime = TimeStamp - qwAbsBaseTime; } else { m_qwResTime = qwAbsBaseTime - TimeStamp; } m_bResetMsgAbsTime = FALSE; } /* Time difference should be +ve value */ if(TimeStamp >= (qwAbsBaseTime + m_qwResTime)) { dwTSTmp = (DWORD) (TimeStamp - qwAbsBaseTime - m_qwResTime ); } else { dwTSTmp = (DWORD) (m_qwResTime + qwAbsBaseTime - TimeStamp ); } /* add msg delay time */ dwTSTmp = dwTSTmp + m_qwLogDelayTime; } else { ASSERT(false); } vFormatTimeStamp(dwTSTmp, acTime, bufferSize); }