--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/bteng/inc/debug.h Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,190 @@
+/*
+* Copyright (c) 2006 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: This file defines logging macros for bteng
+*
+*/
+
+
+
+#ifndef BTENG_DEBUG_H
+#define BTENG_DEBUG_H
+
+
+#include "prjconfig.h"
+#include <bttypes.h>
+#ifdef PRJ_ENABLE_TRACE
+
+#ifdef PRJ_FILE_TRACE
+#include <flogger.h>
+#else //PRJ_FILE_TRACE
+#include <e32debug.h>
+#endif PRJ_FILE_TRACE
+
+
+/**
+ * Tracing levels definitions.
+ * This enables tracing of different levels of information.
+ */
+_LIT( KBTEngLogFile, "btenglog.txt" ); // Log file
+_LIT( KBTEngLogDir, "bt" ); // Log file location
+
+
+// Print options:
+#define KPRINTERROR 0x00000001 // Print error
+#define KPRINTFTRACE 0x00000002 // Print function trace
+const TInt KBTEngDebugMask = 0x00000001 | 0x00000002;
+
+
+/**
+ * Handlers below are used for formatting debug prints,
+ * to trucate rather than panic the caller.
+ */
+NONSHARABLE_CLASS( TBTEngOverflowTruncate8 ) : public TDes8Overflow
+ {
+public:
+ void Overflow( TDes8& /*aDes*/ ) {}
+ };
+
+
+NONSHARABLE_CLASS( TBTEngOverflowTruncate16 ) : public TDes16Overflow
+ {
+public:
+ void Overflow( TDes16& /*aDes*/ ) {}
+ };
+
+
+inline void DebugPrint( TRefByValue<const TDesC8> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+#ifdef PRJ_FILE_TRACE
+ RFileLogger::WriteFormat( KBTEngLogDir, KBTEngLogFile, EFileLoggingModeAppend, aFmt, list);
+#ifdef MEMTRACE
+ TInt size;
+ User::Heap().AllocSize( size );
+ RFileLogger::WriteFormat( KLogDir, KLogFile, EFileLoggingModeAppend, _L( "[BTEng]\t Memory usage: %d; high: %d" ), size, User::Heap().Size() );
+#endif // MEMTRACE
+#else // PRJ_FILE_TRACE
+ TBuf8<0x100> logString;
+ TBTEngOverflowTruncate8 overflow;
+ logString.AppendFormatList( aFmt, list, &overflow );
+ TBuf16<0x100> buf16;
+ buf16.Copy( logString );
+ TRefByValue<const TDesC16> tmpFmt( _L( "%S" ) );
+ RDebug::Print( tmpFmt, &buf16 );
+#endif // PRJ_FILE_TRACE
+ }
+
+
+inline void DebugPrint( TRefByValue<const TDesC16> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+#ifdef PRJ_FILE_TRACE
+ RFileLogger::WriteFormat( KBTEngLogDir, KBTEngLogFile, EFileLoggingModeAppend, aFmt, list );
+#ifdef MEMTRACE
+ TInt size;
+ User::Heap().AllocSize( size );
+ RFileLogger::WriteFormat( KLogDir, KLogFile, EFileLoggingModeAppend, _L( "[BTEng]\t Memory usage: %d; high: %d" ), size, User::Heap().Size() );
+#endif // MEMTRACE
+#else // PRJ_FILE_TRACE
+ TBuf16<0x100> logString;
+ TBTEngOverflowTruncate16 overflow;
+ logString.AppendFormatList( aFmt, list, &overflow );
+ RDebug::Print( logString );
+#endif // PRJ_FILE_TRACE
+ }
+
+
+inline TBuf8<0x100> DebugFormat( TRefByValue<const TDesC16> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ TBuf<0x100> buf;
+ TBTEngOverflowTruncate16 overflow;
+ buf.AppendFormatList( aFmt, list, &overflow );
+ TBuf8<0x100> buf8;
+ buf8.Copy( buf );
+ return buf8;
+ }
+
+
+inline void DebugPrintToHex( const TDesC8& aDes )
+ {
+ for( TInt i = 0; i < aDes.Length(); ++i )
+ {
+ DebugPrint( _L( "[BTENG]\t %02x" ), aDes[i] );
+ }
+ }
+
+inline void DebugPrintBDAddr(const TBTDevAddr& aAddr)
+ {
+ TBuf<16> addrdes;
+ aAddr.GetReadable(addrdes);
+ DebugPrint(_L("[BTENG]\t BD addr %S") , &addrdes);
+ }
+
+_LIT( KTracePrefix, "[BTENG]\t " );
+_LIT8( KFuncEntryFormat8, "[BTENG]\t %S >>" );
+_LIT8( KFuncEntryArgFormat8, "[BTENG]\t %S >> %S" );
+_LIT8( KFuncExitFormat8, "[BTENG]\t %S <<" );
+_LIT8( KFuncExitResFormat8, "[BTENG]\t %S << %S" );
+
+
+#define TRACE_INFO( a ) { if( KBTEngDebugMask & KPRINTFTRACE ) DebugPrint a; }
+
+#define TRACE_ERROR( a ) { if( KBTEngDebugMask & KPRINTERROR ) DebugPrint a; }
+
+#define TRACE_FUNC_ENTRY { if( KBTEngDebugMask & KPRINTFTRACE ) { \
+ TPtrC8 ptr( (TUint8*) __PRETTY_FUNCTION__ ); \
+ DebugPrint( KFuncEntryFormat8, &ptr ); } }
+
+
+#define TRACE_FUNC_EXIT { if( KBTEngDebugMask & KPRINTFTRACE ) { \
+ TPtrC8 ptr( (TUint8*) __PRETTY_FUNCTION__ ); \
+ DebugPrint( KFuncExitFormat8, &ptr ); } }
+
+
+#define TRACE_FUNC_ARG( a ) { if( KBTEngDebugMask & KPRINTFTRACE ) { \
+ TPtrC8 func( (TUint8*) __PRETTY_FUNCTION__ ); \
+ TPtrC8 arg( DebugFormat a ); \
+ DebugPrint( KFuncEntryArgFormat8, &func, &arg ); } }
+
+
+#define TRACE_FUNC_RES( a ) { if( KBTEngDebugMask & KPRINTFTRACE ) { \
+ TPtrC8 func( (TUint8*) __PRETTY_FUNCTION__ ); \
+ TPtrC8 res( DebugFormat a ); \
+ DebugPrint( KFuncExitResFormat8, &func, &res ); } }
+
+#define TRACE_BDADDR( a ) { if( KBTEngDebugMask & KPRINTFTRACE ) DebugPrintBDAddr(a); }
+
+#else // PRJ_ENABLE_TRACE
+
+#define TRACE_INFO( a )
+
+#define TRACE_ERROR( a )
+
+#define TRACE_FUNC_ENTRY
+
+#define TRACE_FUNC_EXIT
+
+#define TRACE_FUNC_ARG( a )
+
+#define TRACE_FUNC_RES( a )
+
+#define TRACE_BDADDR( a )
+
+#endif // PRJ_ENABLE_TRACE
+
+#endif // BTENG_DEBUG_H