usbclasses/usbobexclasscontroller/inc/debug.h
author hgs
Tue, 13 Jul 2010 00:13:42 +0300
changeset 61 acbdfeb56752
child 70 8ba4a4a03bae
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
61
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Debug macros and declarations. 
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef DEBUG_H
hgs
parents:
diff changeset
    20
#define DEBUG_H
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
//////////////////////////////////////////////////////////////////////////////
hgs
parents:
diff changeset
    23
// Here are parameters need to be modified. 
hgs
parents:
diff changeset
    24
// Component name 
hgs
parents:
diff changeset
    25
#define MODULE_NAME "UsbObexCc"
hgs
parents:
diff changeset
    26
//////////////////////////////////////////////////////////////////////////////
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
// For handling unicode strings as L##MACRO is interpreted as LMACRO
hgs
parents:
diff changeset
    30
#define WIDEN2( x ) L##x
hgs
parents:
diff changeset
    31
#define WIDEN( x ) WIDEN2( x )
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
_LIT( KUsbPanicModule, ""WIDEN( MODULE_NAME ) );
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
#ifdef _DEBUG
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
// Comment this line out if using real-time debugging
hgs
parents:
diff changeset
    38
//#define LOG_TO_FILE 
hgs
parents:
diff changeset
    39
// ===========================================================================
hgs
parents:
diff changeset
    40
#if defined ( LOG_TO_FILE )
hgs
parents:
diff changeset
    41
// ===========================================================================
hgs
parents:
diff changeset
    42
// Add corresponding libabry in mmp file
hgs
parents:
diff changeset
    43
// LIBRARY    flogger.lib    
hgs
parents:
diff changeset
    44
// The log file is located at  
hgs
parents:
diff changeset
    45
// c:\logs\usb\MODULE_NAME.txt
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
#include <flogger.h>
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
#define DESC( x ) TPtrC( ( const TText* ) ( x ) )
hgs
parents:
diff changeset
    50
#define DESC8( x ) TPtrC8( ( const TUint8* ) ( x ) )
hgs
parents:
diff changeset
    51
_LIT( KUsbLogDir, "USB" );
hgs
parents:
diff changeset
    52
_LIT( KUsbLogFile, ""WIDEN(MODULE_NAME)L".txt" );
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
// s: c string. 
hgs
parents:
diff changeset
    55
#define LOG(s) RFileLogger::WriteFormat( KUsbLogDir, \
hgs
parents:
diff changeset
    56
                KUsbLogFile, EFileLoggingModeAppend, \
hgs
parents:
diff changeset
    57
                DESC8( "["MODULE_NAME"] "##s ) )
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
// s: c string contains "%x"
hgs
parents:
diff changeset
    60
// v: varaible corresponding to %x
hgs
parents:
diff changeset
    61
#define LOG1(s, v) RFileLogger::WriteFormat( KUsbLogDir, \
hgs
parents:
diff changeset
    62
                KUsbLogFile, EFileLoggingModeAppend, \
hgs
parents:
diff changeset
    63
                DESC8( "["MODULE_NAME"] "##s ), v)
hgs
parents:
diff changeset
    64
// s: c string contains "%x%y"
hgs
parents:
diff changeset
    65
// v1: varaible corresponding to %x
hgs
parents:
diff changeset
    66
// v2: varaible corresponding to %y
hgs
parents:
diff changeset
    67
#define LOG2(s, v1, v2) RFileLogger::WriteFormat( KUsbLogDir, \
hgs
parents:
diff changeset
    68
                KUsbLogFile, EFileLoggingModeAppend, \
hgs
parents:
diff changeset
    69
                DESC8( "["MODULE_NAME"] "##s ), v1, v2)
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
// s: c string contains "%x%y%z"
hgs
parents:
diff changeset
    72
// v1: varaible corresponding to %x
hgs
parents:
diff changeset
    73
// v2: varaible corresponding to %y
hgs
parents:
diff changeset
    74
// v3: varaible corresponding to %z
hgs
parents:
diff changeset
    75
#define LOG3(s, v1, v2, v3) RFileLogger::WriteFormat( KUsbLogDir, \
hgs
parents:
diff changeset
    76
            KUsbLogFile, EFileLoggingModeAppend, \
hgs
parents:
diff changeset
    77
            DESC8( "["MODULE_NAME"] "##s ), v1, v2, v3 )
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
class TFuncLogger
hgs
parents:
diff changeset
    80
    {
hgs
parents:
diff changeset
    81
public:
hgs
parents:
diff changeset
    82
    TFuncLogger(const TDesC8& aFuncName)
hgs
parents:
diff changeset
    83
        {
hgs
parents:
diff changeset
    84
        iFuncName.Set( aFuncName );
hgs
parents:
diff changeset
    85
        RFileLogger::WriteFormat( KUsbLogDir, KUsbLogFile, EFileLoggingModeAppend, 
hgs
parents:
diff changeset
    86
                DESC8( "["MODULE_NAME"] >>%s" ), iFuncName.Ptr() );
hgs
parents:
diff changeset
    87
        }
hgs
parents:
diff changeset
    88
    ~TFuncLogger()
hgs
parents:
diff changeset
    89
        {
hgs
parents:
diff changeset
    90
        RFileLogger::WriteFormat( KUsbLogDir, KUsbLogFile, 
hgs
parents:
diff changeset
    91
                EFileLoggingModeAppend, 
hgs
parents:
diff changeset
    92
                DESC8( "["MODULE_NAME"] <<%s" ), iFuncName.Ptr() );
hgs
parents:
diff changeset
    93
        }
hgs
parents:
diff changeset
    94
private:
hgs
parents:
diff changeset
    95
    TPtrC8 iFuncName;
hgs
parents:
diff changeset
    96
    };
hgs
parents:
diff changeset
    97
// ===========================================================================
hgs
parents:
diff changeset
    98
#else //LOG_TO_FILE not defined
hgs
parents:
diff changeset
    99
// ===========================================================================
hgs
parents:
diff changeset
   100
#include <e32debug.h>
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
// Paramters same as above.
hgs
parents:
diff changeset
   103
#define LOG( str ) { RDebug::Printf( "["MODULE_NAME"] %s", str  ); }
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
#define LOG1( s, v ) { RDebug::Printf( "["MODULE_NAME"] "##s , v ); }
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
#define LOG2( s, v1,v2 ) { RDebug::Printf( "["MODULE_NAME"] "##s , v1, v2 ); }
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
#define LOG3( s, v1, v2, v3 ) { RDebug::Printf( "["MODULE_NAME"] "##s , \
hgs
parents:
diff changeset
   110
        v1, v2, v3); }
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
inline void LogBuf(const TDesC8& aBuf8)
hgs
parents:
diff changeset
   113
    {
hgs
parents:
diff changeset
   114
    LOG1("Buffer length = %d Buffer content:", aBuf8.Length());
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
    TInt len(aBuf8.Length());
hgs
parents:
diff changeset
   117
    for (TInt i(0); i < len; ++i)
hgs
parents:
diff changeset
   118
        RDebug::Print(_L("Buffer[%d] = 0x%x"), i, aBuf8[i]);
hgs
parents:
diff changeset
   119
    }
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
class TFuncLogger
hgs
parents:
diff changeset
   122
    {
hgs
parents:
diff changeset
   123
public:
hgs
parents:
diff changeset
   124
    TFuncLogger(const TPtrC8& aFuncName) : iFuncName( aFuncName )
hgs
parents:
diff changeset
   125
        {
hgs
parents:
diff changeset
   126
        RDebug::Printf( "["MODULE_NAME"] >>%s", iFuncName.Ptr());
hgs
parents:
diff changeset
   127
        }
hgs
parents:
diff changeset
   128
    ~TFuncLogger()
hgs
parents:
diff changeset
   129
        {
hgs
parents:
diff changeset
   130
        RDebug::Printf( "["MODULE_NAME"] <<%s", iFuncName.Ptr());
hgs
parents:
diff changeset
   131
        }
hgs
parents:
diff changeset
   132
private:
hgs
parents:
diff changeset
   133
    TPtrC8 iFuncName;
hgs
parents:
diff changeset
   134
    };
hgs
parents:
diff changeset
   135
#endif // LOG_TO_FILE
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
#define LEAVE( exp )  {volatile TInt err_ = exp; \
hgs
parents:
diff changeset
   138
        LOG3( "LEAVE(%d) @file: %s, line: %d", err_, __FILE__, __LINE__ );\
hgs
parents:
diff changeset
   139
        User::Leave( err_ );}
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
#define LEAVEIFERROR( exp ) {volatile TInt err__ = exp; \
hgs
parents:
diff changeset
   142
        if(err__ < 0) LEAVE(err__);}
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
#define PANIC( exp ) {volatile TInt err_ = exp; \
hgs
parents:
diff changeset
   145
        LOG3( "PANIC(%d) @file: %s, line: %d", err_, __FILE__, __LINE__ );\
hgs
parents:
diff changeset
   146
        User::Panic( KUsbPanicModule, err_ );} 
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
#define LOG_FUNC TFuncLogger __instrument(TPtrC8((TUint8*)__PRETTY_FUNCTION__));
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
#define ASSERT_DEBUG( exp, code ) {if(!(exp)) PANIC(code)}
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
#else // _DEBUG not defined 
hgs
parents:
diff changeset
   153
// ===========================================================================
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
#define LOG( s )
hgs
parents:
diff changeset
   156
#define LOG1( s, v ) 
hgs
parents:
diff changeset
   157
#define LOG2( s, v1, v2 )
hgs
parents:
diff changeset
   158
#define LOG3( s, v1, v2, v3 )
hgs
parents:
diff changeset
   159
#define LOG_FUNC_ENTRY 
hgs
parents:
diff changeset
   160
#define LOG_FUNC_EXIT 
hgs
parents:
diff changeset
   161
#define LEAVE( exp ) User::Leave( exp );
hgs
parents:
diff changeset
   162
#define LEAVEIFERROR( exp ) User::LeaveIfError( exp );
hgs
parents:
diff changeset
   163
#define PANIC( err ) // in non-debug builds PANICs are silent
hgs
parents:
diff changeset
   164
#define LOG_FUNC
hgs
parents:
diff changeset
   165
#define ASSERT_DEBUG( exp, code )
hgs
parents:
diff changeset
   166
inline void LogBuf(const TDesC8& /*aBuf8*/)
hgs
parents:
diff changeset
   167
    {}
hgs
parents:
diff changeset
   168
// ===========================================================================
hgs
parents:
diff changeset
   169
#endif // _DEBUG
hgs
parents:
diff changeset
   170
// ===========================================================================
hgs
parents:
diff changeset
   171
#endif // DEBUG_H
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
// End of File