--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hti/HtiCommPlugins/HtiBtCommPlugin/HtiBtCommServer/src/Logger.cpp Tue Feb 02 01:57:15 2010 +0200
@@ -0,0 +1,201 @@
+/*
+* Copyright (c) 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: Logger implementation.
+*
+*/
+
+
+// INCLUDE FILES
+#include "Logger.h"
+#include <f32file.h>
+
+#ifdef __ENABLE_LOGGING__
+
+// CONSTANTS
+_LIT(KDebugStr, "DEBUG: ");
+_LIT(KInfoStr, "INFO: ");
+_LIT(KWarnStr, "WARN: ");
+_LIT(KErrStr, "ERROR: ");
+
+
+/*---------------------------------------------------------------------------*/
+void LogBytes( const TDesC8& aData, TInt aMaxBytesToLog )
+ {
+ TInt i = 0;
+ while ( i < aData.Length() && i < aMaxBytesToLog )
+ {
+ TBuf<64> hexbuf;
+ TBuf<32> stringbuf;
+ TInt k=0;
+ while ( i < aMaxBytesToLog && i < aData.Length() && k < 16 )
+ {
+ const TUint8 uint8 = aData[i];
+ hexbuf.AppendFormat( _L( "%02X "), uint8 );
+
+ if ( uint8 == '%' )
+ {
+ stringbuf.Append( _L( "%%" ) ); // escape character in format string
+ }
+ else if ( uint8 < 32 || uint8 > 126 )
+ {
+ stringbuf.Append( _L(".") );
+ }
+ else
+ {
+ stringbuf.Append( ( TChar ) uint8 );
+ }
+ i++;
+ k++;
+ }
+ TBuf<128> finalbuf;
+ finalbuf.Copy( hexbuf );
+ finalbuf.Append( _L(" | " ) );
+ finalbuf.Append( stringbuf );
+ DebugLog( finalbuf );
+ }
+ }
+
+/*---------------------------------------------------------------------------*/
+class TOverflowHandler : public TDes16Overflow
+ {
+ void Overflow( TDes16& aDes )
+ {
+ TBuf<KLogEntryMaxLength> logString( _L("LOG ERROR: overflow: ") );
+ logString.Append( aDes.Left(
+ KLogEntryMaxLength - logString.Length() ) );
+ aDes.Copy( logString );
+ }
+ };
+
+/*---------------------------------------------------------------------------*/
+// Usage example: DOLOG(_L("Logstring"));
+void DebugLog( TRefByValue<const TDesC> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ Log( KLogLevelDebug, aFmt, list );
+ }
+
+/*---------------------------------------------------------------------------*/
+void InfoLog( TRefByValue<const TDesC> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ Log( KLogLevelInfo, aFmt, list );
+ }
+
+/*---------------------------------------------------------------------------*/
+void WarnLog( TRefByValue<const TDesC> aFmt, ... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ Log( KLogLevelWarning, aFmt, list );
+ }
+
+/*---------------------------------------------------------------------------*/
+void ErrLog( TRefByValue<const TDesC> aFmt, ...)
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ Log( KLogLevelError, aFmt, list );
+ }
+
+/*---------------------------------------------------------------------------*/
+void Log( TInt aLevel, TRefByValue<const TDesC> aText, VA_LIST list )
+ {
+
+ if ( aLevel < KMinimumLogLevel )
+ return;
+
+ _LIT( KLineFeed, "\n" );
+
+ /**
+ * Log time format (see TTime) is
+ * Day-Month-Year Hours:Minutes:Seconds:Milliseconds
+ *
+ * Example: 30-12-2004 23:00:55:990
+ */
+ _LIT( KLogTimeFormat, "%F%D-%M-%Y %H:%T:%S:%*C3" );
+
+ TBuf8<KLogEntryMaxLength> writeBuffer;
+ TBuf16<KLogEntryMaxLength> logEntry;
+ RFs FileServer;
+ RFile File;
+
+ if ( FileServer.Connect() != KErrNone )
+ {
+ FileServer.Close(); // just in case
+ User::Panic( KLogPanicCategory(), KPanicFsConnectFailed );
+ return;
+ }
+
+ // Open file for writing, if exists. Othervise create new file.
+ if ( File.Open( FileServer, KLogFileName(), EFileWrite ) != KErrNone )
+ {
+ if ( File.Create( FileServer, KLogFileName(), EFileWrite )
+ != KErrNone )
+ {
+ FileServer.Close();
+ User::Panic( KLogPanicCategory(), KPanicFileCreateFailed );
+ }
+ }
+
+ TTime currentTime;
+ currentTime.UniversalTime();
+ TBuf<32> timeString;
+
+ // currentTime is now in universal time. Convert it to home time.
+ TLocale locale;
+ TTimeIntervalSeconds universalTimeOffset( locale.UniversalTimeOffset() );
+ TTimeIntervalHours daylightSaving( 0 );
+ if ( locale.QueryHomeHasDaylightSavingOn() )
+ {
+ daylightSaving = 1;
+ }
+ currentTime = currentTime + universalTimeOffset + daylightSaving;
+ currentTime.FormatL( timeString, KLogTimeFormat );
+
+ // Add LogString to the end of file and close the file
+ TInt currentSize = 0, returnCode;
+ writeBuffer.Append( timeString );
+ writeBuffer.Append( _L(": ") );
+
+ if ( aLevel < KLogLevelInfo )
+ writeBuffer.Append(KDebugStr);
+ else if ( aLevel < KLogLevelWarning )
+ writeBuffer.Append(KInfoStr);
+ else if ( aLevel < KLogLevelError )
+ writeBuffer.Append(KWarnStr);
+ else
+ writeBuffer.Append(KErrStr);
+
+ logEntry.AppendFormatList( aText, list ); //, &overFlowHandler );
+ writeBuffer.Append( logEntry.Left(
+ KLogEntryMaxLength - writeBuffer.Length() ) );
+ writeBuffer.Append( KLineFeed );
+ File.Size( currentSize );
+ returnCode = File.Write( currentSize,
+ writeBuffer,
+ writeBuffer.Length() );
+ File.Close();
+ // Close file server session
+ FileServer.Close();
+
+ if ( returnCode != KErrNone )
+ {
+ User::Panic( KLogPanicCategory(), KPanicFileWriteFailed );
+ }
+ }
+
+#endif // __ENABLE_LOGGING__