usbengines/usbwatcher/inc/debug.h
changeset 35 9d8b04ca6939
child 42 3f0f275e5729
child 63 ef2686f7597e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbwatcher/inc/debug.h	Fri Jun 04 10:27:39 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2007-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:  Debug macros
+*
+*/
+
+
+#ifndef DEBUG_H
+#define DEBUG_H
+
+//////////////////////////////////////////////////////////////////////////////
+// Here are parameters need to be modified. 
+// Component name 
+#define MODULE_NAME "USBWATCHER"
+//////////////////////////////////////////////////////////////////////////////
+
+
+// For handling unicode strings as L##MACRO is interpreted as LMACRO
+#define WIDEN2( x ) L##x
+#define WIDEN( x ) WIDEN2( x )
+
+_LIT( KUsbPanicModule, ""WIDEN( MODULE_NAME ) );
+
+#ifdef _DEBUG
+
+// Comment this line out if using real-time debugging
+//#define LOG_TO_FILE 
+// ===========================================================================
+#if defined ( LOG_TO_FILE )
+// ===========================================================================
+// Add corresponding libabry in mmp file
+// LIBRARY    flogger.lib    
+// The log file is located at  
+// c:\logs\usb\MODULE_NAME.txt
+
+#include <flogger.h>
+
+#define DESC( x ) TPtrC( ( const TText* ) ( x ) )
+#define DESC8( x ) TPtrC8( ( const TUint8* ) ( x ) )
+_LIT( KUsbLogDir, "USB" );
+_LIT( KUsbLogFile, ""WIDEN(MODULE_NAME)L".txt" );
+
+// s: c string. 
+#define LOG(s) RFileLogger::WriteFormat( KUsbLogDir, \
+                KUsbLogFile, EFileLoggingModeAppend, \
+                DESC8( "[%08x] ["MODULE_NAME"] "##s ), TUint(RThread().Id()) )
+
+// s: c string contains "%x"
+// v: varaible corresponding to %x
+#define LOG1(s, v) RFileLogger::WriteFormat( KUsbLogDir, \
+                KUsbLogFile, EFileLoggingModeAppend, \
+                DESC8( "[%08x] ["MODULE_NAME"] "##s ), v, \
+                TUint(RThread().Id()) )
+// s: c string contains "%x%y"
+// v1: varaible corresponding to %x
+// v2: varaible corresponding to %y
+#define LOG2(s, v1, v2) RFileLogger::WriteFormat( KUsbLogDir, \
+                KUsbLogFile, EFileLoggingModeAppend, \
+                DESC8( "[%08x] ["MODULE_NAME"] "##s ), TUint(RThread().Id()), \
+                v1, v2 )
+
+// s: c string contains "%x%y%z"
+// v1: varaible corresponding to %x
+// v2: varaible corresponding to %y
+// v3: varaible corresponding to %z
+#define LOG3(s, v1, v2, v3) RFileLogger::WriteFormat( KUsbLogDir, \
+            KUsbLogFile, EFileLoggingModeAppend, \
+            DESC8( "[%08x] ["MODULE_NAME"] "##s ), \
+            TUint(RThread().Id()), v1, v2, v3 )
+
+class TFuncLogger
+    {
+public:
+    TFuncLogger(const TDesC8& aFuncName)
+        {
+        iFuncName.Set( aFuncName );
+        RFileLogger::WriteFormat( KUsbLogDir, KUsbLogFile, 
+            EFileLoggingModeAppend, 
+            DESC8( "[%08x] ["MODULE_NAME"] >>%s" ), TUint(RThread().Id()),
+            iFuncName.Ptr() );
+        }
+    ~TFuncLogger()
+        {
+        RFileLogger::WriteFormat( KUsbLogDir, KUsbLogFile,
+             EFileLoggingModeAppend, 
+             DESC8( "[%08x] ["MODULE_NAME"] <<%s" ), TUint(RThread().Id()),
+             iFuncName.Ptr() );
+        }
+private:
+    TPtrC8 iFuncName;
+    };
+// ===========================================================================
+#else //Real-time logging
+// ===========================================================================
+#include <e32debug.h>
+
+// Paramters same as above.
+#define LOG( str ) { RDebug::Printf( "[%08x] ["MODULE_NAME"] %s",\
+        TUint(RThread().Id()), str  ); }
+
+#define LOG1( s, v ) { RDebug::Printf( "[%08x] ["MODULE_NAME"] "##s ,\
+        TUint(RThread().Id()), v ); }
+
+#define LOG2( s, v1,v2 ) { RDebug::Printf( "[%08x] ["MODULE_NAME"] "##s , \
+        TUint(RThread().Id()), v1, v2 ); }
+
+#define LOG3( s, v1, v2, v3 ) { RDebug::Printf( "[%08x] ["MODULE_NAME"] "##s, \
+        TUint(RThread().Id()), v1, v2, v3); }
+
+class TFuncLogger
+    {
+public:
+    TFuncLogger(const TDesC8& aFuncName)
+        {
+        iFuncName.Set( aFuncName );
+        RDebug::Printf( "[%08x] ["MODULE_NAME"] >>%s", TUint(RThread().Id()), 
+             iFuncName.Ptr());
+        }
+    ~TFuncLogger()
+        {
+        RDebug::Printf( "[%08x] ["MODULE_NAME"] <<%s", TUint(RThread().Id()), 
+             iFuncName.Ptr());
+        }
+private:
+    TPtrC8 iFuncName;
+    };
+#endif // LOG_TO_FILE
+
+#define LEAVE( exp )  {volatile TInt err_ = exp; \
+        LOG3( "LEAVE(%d) @file: %s, line: %d", err_, __FILE__, __LINE__ );\
+        User::Leave( err_ );}
+
+#define LEAVEIFERROR( exp ) {volatile TInt err__ = exp; \
+		if(err__ < 0) LEAVE(err__);}
+
+#define PANIC( exp ) {volatile TInt err_ = exp; \
+        LOG3( "PANIC(%d) @file: %s, line: %d", err_, __FILE__, __LINE__ );\
+        User::Panic( KUsbPanicModule, err_ );}
+
+
+#define LOG_FUNC TFuncLogger __instrument(TPtrC8((TUint8*)__PRETTY_FUNCTION__));
+
+#else // _DEBUG   
+// ===========================================================================
+
+#define LOG( s )
+#define LOG1( s, v ) 
+#define LOG2( s, v1, v2 )
+#define LOG3( s, v1, v2, v3 )
+#define LOG_FUNC_ENTRY 
+#define LOG_FUNC_EXIT 
+#define LEAVE( exp ) User::Leave( exp );
+#define LEAVEIFERROR( exp ) User::LeaveIfError( exp );
+#define PANIC( err ) User::Panic( KUsbPanicModule, err );
+#define LOG_FUNC
+// ===========================================================================
+#endif // _DEBUG
+// ===========================================================================
+#endif // DEBUG_H
+
+// End of File