Garmin Fleet Management Controller  2.19.0
Logger.cpp
Go to the documentation of this file.
1 /*********************************************************************
2 *
3 * MODULE NAME:
4 * Logger.cpp
5 *
6 * Copyright 2008-2009 by Garmin Ltd. or its subsidiaries.
7 *---------------------------------------------------------------------
8 * $NoKeywords$
9 *********************************************************************/
10 
11 #include "stdafx.h"
12 #include <iomanip>
13 
14 #include "Logger.h"
15 #include "Event.h"
16 #include "util.h"
17 
18 SYSTEMTIME Logger::mLogStartTime;
19 std::wofstream Logger::mLogFile;
20 
22 const char * Logger::LOG_FILE = "fmi_pc_app.log";
23 
24 //----------------------------------------------------------------------
29 //----------------------------------------------------------------------
31  (
32  Packet * aPacket,
33  bool aIsTx
34  )
35 {
36  ASSERT( mLogFile.is_open() );
37  ASSERT( aPacket != NULL );
38  ASSERT( aPacket->getRawSize() > 0 );
39 
40  const uint8 * frame = aPacket->getRawBytes();
41  uint32 frameSize = aPacket->getRawSize();
42 
43  SYSTEMTIME currentSystemTime;
44  FILETIME currentFileTime, startFileTime;
45  ULARGE_INTEGER currentTimeUlarge, startTimeUlarge;
46  GetLocalTime( &currentSystemTime );
47  SystemTimeToFileTime( &currentSystemTime, &currentFileTime );
48  SystemTimeToFileTime( &Logger::mLogStartTime, &startFileTime );
49 
50  currentTimeUlarge.HighPart = currentFileTime.dwHighDateTime;
51  currentTimeUlarge.LowPart = currentFileTime.dwLowDateTime;
52  startTimeUlarge.HighPart = startFileTime.dwHighDateTime;
53  startTimeUlarge.LowPart = startFileTime.dwLowDateTime;
54 
55  ULONGLONG elapsedMs;
56  // currentTimeUlarge and startTimeUlarge are in 100 nanosecond intervals
57  // there are 10 000 of these intervals in 1 ms.
58  elapsedMs = ( currentTimeUlarge.QuadPart - startTimeUlarge.QuadPart ) / 10000;
59 
60  // Log viewer makes the following assumption
61  ASSERT( elapsedMs < max_uint_val( uint32 ) );
62 
63  if( aIsTx )
64  mLogFile << 'T';
65  else
66  mLogFile << 'R';
67  mLogFile << elapsedMs << '-' << std::hex;
68  for( uint32 i = 0; i < frameSize; i++ )
69  {
70  mLogFile << std::setw( 2 ) << frame[i];
71  }
72  mLogFile << std::endl << std::dec;
73  mLogFile.flush();
75 }
76 
77 //----------------------------------------------------------------------
82 //----------------------------------------------------------------------
84 {
85  if( mLogFile.is_open() )
86  mLogFile.close();
87 
88  mLogFile.open( LOG_FILE, std::ios_base::out );
89  mLogFile.fill('0');
90  GetLocalTime( &mLogStartTime );
91  mLogFile << mLogStartTime.wHour << ','
92  << mLogStartTime.wMinute << ','
93  << mLogStartTime.wSecond << ','
94  << mLogStartTime.wMilliseconds
95  << std::endl;
97 }
98 
99 //----------------------------------------------------------------------
101 //----------------------------------------------------------------------
103 {
104  if( mLogFile.is_open() )
105  mLogFile.close();
106 }
107 
108 //----------------------------------------------------------------------
110 //----------------------------------------------------------------------
112 {
113  return mLogFile.is_open();
114 }
static void clearLog()
Empties the packet log.
Definition: Logger.cpp:83
static const char * LOG_FILE
The log file that this Logger writes to.
Definition: Logger.h:37
static SYSTEMTIME mLogStartTime
Time when the packet log was started/cleared; used to compute offsets.
Definition: Logger.h:49
virtual const uint8 * getRawBytes()=0
Get pointer to the raw frame.
Abstract base class for a packet of data.
Definition: Packet.h:18
static std::wofstream mLogFile
File stream that the packet log is written to.
Definition: Logger.h:52
virtual uint32 getRawSize()=0
Get the size of the raw frame.
unsigned char uint8
8-bit unsigned integer
Definition: garmin_types.h:62
static void logRawData(Packet *aPacket, bool aIsTx=true)
Logs the raw data of the packet passed in to a file.
Definition: Logger.cpp:31
static void closeLog()
Close the log file.
Definition: Logger.cpp:102
static bool isLogOpen()
Returns true if the log file is open.
Definition: Logger.cpp:111
unsigned long int uint32
32-bit unsigned integer
Definition: garmin_types.h:66
#define max_uint_val(_t)
The maximum unsigned integer that can be stored in a type.
Definition: util_macros.h:77
static void post(EventId aEventId, uint32 aEventData=0, void *aEventDataPtr=NULL, BOOL handleNow=FALSE)
Posts a message to all windows that have registered to get events.
Definition: Event.cpp:67