connectionmonitoring/connmon/connectionmonitor/inc/log.h
changeset 0 5a93021fdf25
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectionmonitoring/connmon/connectionmonitor/inc/log.h	Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Writes log entries for Connection Monitor Server.
+*
+* To take ConnMon logs, include the debug version of connmon.dll to rom image.
+* On the phone, create folder C:\logs\connmon.
+*
+*/
+
+#ifndef CONNECTIONMONITORLOG_H
+#define CONNECTIONMONITORLOG_H
+
+// Log output
+// 1 = RDebug
+// 2 = File
+#define _CONNMON_LOG_OUTPUT 2
+
+#define _CONNMON_ENTEREXIT_LOGGING
+#define _CONNMON_FUNCTIONAL_LOGGING
+//#define _CONNMON_TIMING_LOGGING
+//#define _CONNMON_HEXDUMP_LOGGING // Only for file logging
+
+#include <e32std.h>
+#include <e32base.h>
+
+#if ( _CONNMON_LOG_OUTPUT == 1 )
+#include <e32debug.h>
+#endif
+
+#ifdef _DEBUG
+
+    #define LOG(a) a
+
+    #ifdef _CONNMON_FUNCTIONAL_LOGGING
+      #if ( _CONNMON_LOG_OUTPUT == 2 )
+        #define LOGIT(a)                    {_LIT(temp, a); Log::Printf(temp);}
+        #define LOGIT1(a,a1)                {_LIT(temp, a); Log::Printf(temp,a1);}
+        #define LOGIT2(a,a1,a2)             {_LIT(temp, a); Log::Printf(temp,a1,a2);}
+        #define LOGIT3(a,a1,a2,a3)          {_LIT(temp, a); Log::Printf(temp,a1,a2,a3);}
+        #define LOGIT4(a,a1,a2,a3,a4)       {_LIT(temp, a); Log::Printf(temp,a1,a2,a3,a4);}
+        #define LOGIT5(a,a1,a2,a3,a4,a5)    {_LIT(temp, a); Log::Printf(temp,a1,a2,a3,a4,a5);}
+        #define LOGIT6(a,a1,a2,a3,a4,a5,a6) {_LIT(temp, a); Log::Printf(temp,a1,a2,a3,a4,a5,a6);}
+        #define LOGIT11(a,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) {_LIT(temp, a); Log::Printf(temp,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);}
+      #else
+        #define LOGIT(a)                    {_LIT(temp, a); RDebug::Print(temp);}
+        #define LOGIT1(a,a1)                {_LIT(temp, a); RDebug::Print(temp,a1);}
+        #define LOGIT2(a,a1,a2)             {_LIT(temp, a); RDebug::Print(temp,a1,a2);}
+        #define LOGIT3(a,a1,a2,a3)          {_LIT(temp, a); RDebug::Print(temp,a1,a2,a3);}
+        #define LOGIT4(a,a1,a2,a3,a4)       {_LIT(temp, a); RDebug::Print(temp,a1,a2,a3,a4);}
+        #define LOGIT5(a,a1,a2,a3,a4,a5)    {_LIT(temp, a); RDebug::Print(temp,a1,a2,a3,a4,a5);}
+        #define LOGIT6(a,a1,a2,a3,a4,a5,a6) {_LIT(temp, a); RDebug::Print(temp,a1,a2,a3,a4,a5,a6);}
+        #define LOGIT11(a,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) {_LIT(temp, a); RDebug::Print(temp,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);}
+      #endif
+    #else
+      #define LOGIT(a)
+      #define LOGIT1(a,a1)
+      #define LOGIT2(a,a1,a2)
+      #define LOGIT3(a,a1,a2,a3)
+      #define LOGIT4(a,a1,a2,a3,a4)
+      #define LOGIT5(a,a1,a2,a3,a4,a5)
+      #define LOGIT6(a,a1,a2,a3,a4,a5,a6)
+      #define LOGIT11(a,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)
+    #endif
+
+    #ifdef _CONNMON_ENTEREXIT_LOGGING
+      #if ( _CONNMON_LOG_OUTPUT == 2 )
+        _LIT(KConnMonLogEnterFn, "-> %S entered");
+        _LIT(KConnMonLogExitFn,  "<- %S returned");
+        _LIT(KConnMonLogExitFn1, "<- %S returned <%d>");
+        #define LOGENTRFN(a)     {_LIT(temp, a); Log::Printf(KConnMonLogEnterFn, &temp);}
+        #define LOGEXITFN(a)     {_LIT(temp, a); Log::Printf(KConnMonLogExitFn, &temp);}
+        #define LOGEXITFN1(a,a1) {_LIT(temp, a); Log::Printf(KConnMonLogExitFn1, &temp, a1);}
+      #else
+        _LIT(KConnMonLogEnterFn, "ConnMon: -> %S entered");
+        _LIT(KConnMonLogExitFn,  "ConnMon: <- %S returned");
+        _LIT(KConnMonLogExitFn1, "ConnMon: <- %S returned <%d>");
+        #define LOGENTRFN(a)     {_LIT(temp, a); RDebug::Print(KConnMonLogEnterFn, &temp);}
+        #define LOGEXITFN(a)     {_LIT(temp, a); RDebug::Print(KConnMonLogExitFn, &temp);}
+        #define LOGEXITFN1(a,a1) {_LIT(temp, a); RDebug::Print(KConnMonLogExitFn1, &temp, a1);}
+      #endif
+    #else
+      #define LOGENTRFN(a)
+      #define LOGEXITFN(a)
+      #define LOGEXITFN1(a,a1)
+    #endif
+
+    #ifdef _CONNMON_TIMING_LOGGING
+      #if ( _CONNMON_LOG_OUTPUT == 2 )
+        _LIT(KCMLogTimeStart, "TIMING: %S start");
+        _LIT(KCMLogTimeEnd, "TIMING: %S took %d ms");
+        #define LOGTIMINGSTART(a) \
+            {/*_LIT(s, a); Log::Printf(KCMLogTimeStart, &s);*/} \
+            TTime _connmon_start; \
+            TTime _connmon_end; \
+            TTimeIntervalMicroSeconds _connmon_dur; \
+            _connmon_start.UniversalTime();
+
+        #define LOGTIMINGEND(a) \
+            _connmon_end.UniversalTime(); \
+            _connmon_dur = _connmon_end.MicroSecondsFrom( _connmon_start ); \
+            {_LIT(s,a); Log::Printf(KCMLogTimeEnd, &s, (TInt)((_connmon_dur.Int64()+500)/1000));}
+      #else
+        _LIT(KCMLogTimeStart, "ConnMon: TIMING: %S start");
+        _LIT(KCMLogTimeEnd, "ConnMon: TIMING: %S took %d ms");
+        #define LOGTIMINGSTART(a) \
+            {/*_LIT(s, a); RDebug::Print(KCMLogTimeStart, &s);*/} \
+            TTime _connmon_start; \
+            TTime _connmon_end; \
+            TTimeIntervalMicroSeconds _connmon_dur; \
+            _connmon_start.UniversalTime();
+
+        #define LOGTIMINGEND(a) \
+            _connmon_end.UniversalTime(); \
+            _connmon_dur = _connmon_end.MicroSecondsFrom( _connmon_start ); \
+            {_LIT(s,a); RDebug::Print(KCMLogTimeEnd, &s, (TInt)((_connmon_dur.Int64()+500)/1000));}
+      #endif
+    #else
+      #define LOGTIMINGSTART(a)
+      #define LOGTIMINGEND(a)
+    #endif
+
+#else
+
+    #define LOG(a)
+
+    #define LOGIT(a)
+    #define LOGIT1(a,a1)
+    #define LOGIT2(a,a1,a2)
+    #define LOGIT3(a,a1,a2,a3)
+    #define LOGIT4(a,a1,a2,a3,a4)
+    #define LOGIT5(a,a1,a2,a3,a4,a5)
+    #define LOGIT6(a,a1,a2,a3,a4,a5,a6)
+    #define LOGIT11(a,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11)
+
+    #define LOGENTRFN(a)
+    #define LOGEXITFN(a)
+    #define LOGEXITFN1(a,a1)
+
+    #define LOGTIMINGSTART(a)
+    #define LOGTIMINGEND(a)
+
+#endif
+
+#ifdef _DEBUG
+#if ( _CONNMON_LOG_OUTPUT == 2 )
+
+#include <flogger.h>
+
+_LIT( KLogFolder,"connmon" );
+_LIT( KLogFile,"connmon.txt" );
+
+class Log
+    {
+public:
+    static inline void Write( const TDesC& aDes);
+    static inline void Printf( TRefByValue<const TDesC> aFmt, ...);
+    static inline void HexDump(
+            const TText* aHeader,
+            const TText* aMargin,
+            const TUint8* aPtr,
+            TInt aLen );
+    };
+
+inline void Log::Write( const TDesC& aDes )
+    {
+    RFileLogger::Write( KLogFolder(), KLogFile(), EFileLoggingModeAppend, aDes );
+    }
+
+inline void Log::Printf( TRefByValue<const TDesC> aFmt, ... )
+    {
+    VA_LIST list;
+    VA_START(list,aFmt);
+    RFileLogger::WriteFormat( KLogFolder(), KLogFile(), EFileLoggingModeAppend, aFmt, list );
+    }
+
+inline void Log::HexDump(
+        const TText* aHeader,
+        const TText* aMargin,
+        const TUint8* aPtr,
+        TInt aLen )
+    {
+    RFileLogger::HexDump(
+            KLogFolder(),
+            KLogFile(),
+            EFileLoggingModeAppend,
+            aHeader,
+            aMargin,
+            aPtr,
+            aLen );
+    }
+
+#endif // _CONNMON_LOG_OUTPUT
+#endif // _DEBUG
+#endif // CONNECTIONMONITORLOG_H
+
+// End of file