--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiutils/inc/cphonelogger.h Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,355 @@
+/*
+* Copyright (c) 2002 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:
+* Phone logger
+*
+*/
+
+
+#ifndef __CPHONELOGGER_H
+#define __CPHONELOGGER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <coemain.h>
+#include "phoneconstants.h"
+#include "stringpool.h"
+
+// FORWARD DECLARATIONS
+class RFileLogger;
+class MPEEngineInfo;
+class MPEPhoneModel;
+
+enum TPhoneUILoggingLevel
+ {
+ ENo, // No logging at all.
+ EOnlyFatal, // Only fatal errors etc. are logged
+ EBasic, // Normal logging (fatals + PE mesages etc),
+ EMethodStartEnd, // All above & function starts and ends are logged
+ // (where added)
+ EAll // All above & extra logging
+ };
+
+enum TPhoneUILoggingComponent
+ {
+ EPhoneAbstractFactoryClient,
+ EPhoneControl,
+ EPhonePhoneapp,
+ EPhoneUIView,
+ EPhoneUIStates,
+ EPhoneUIUtils,
+ PhoneUIVoIPExtension,
+ EPhoneMediatorCenter,
+ EPhoneAmountOfLoggingComponents
+ };
+
+// CLASS DECLARATION
+
+/**
+ @private
+ @class CPhone
+ @since 7.0
+ A utility used in phone application for logging in debug builds. Log
+ files are placed in the directory %EPOCROOT%/epoc32/wins/c/logs/phoneapp
+ */
+class CPhoneLogger : public TDesOverflow , public CCoeStatic
+ {
+ public: // New methods
+
+ /**
+ * C++ constructor
+ * @param aUid Uid for CCoeStatic uid.
+ */
+ IMPORT_C CPhoneLogger(TUid aUid);
+
+ /**
+ * C++ destructor. Closes the log file.
+ */
+ IMPORT_C virtual ~CPhoneLogger();
+
+ /**
+ * Formats a log message by given numerous parameters and writes it in
+ * the log file.
+ * @param aLevel is the logging level. log messages below chosen
+ * level are not printed out.
+ * @param aLoggingComponent identifies the component where the log
+ * message originates from.
+ * @param aFmt is the log message, it may include formatting
+ * @return None.
+ */
+ IMPORT_C void LogIt(
+ TPhoneUILoggingLevel aLevel,
+ TPhoneUILoggingComponent aLoggingComponent,
+ TRefByValue<const TDesC> aFmt, ...);
+
+ /**
+ * Checks if logging components level is enough to log.
+ * @aLevel is level of the log message whose printage needs to be judged
+ * @aLoggingComponent is the component where the log message
+ * originates from
+ * @return ETrue if logging is needed, based on aLevel,
+ * aLoggingComponent and current log level.
+ */
+ TBool CheckLogLevel(
+ TPhoneUILoggingLevel aLevel,
+ TPhoneUILoggingComponent aLoggingComponent );
+
+ /**
+ * Writes comment to log file.
+ *
+ * @param aComment - A comment descriptor to be logged.
+ * @return None.
+ */
+ void WriteComment( const TDesC& aComment );
+
+ /**
+ * Creates a specified log message by given parameters and writes it
+ * in the log file.
+ *
+ * @param aMessage - Ordinal of enumerated phone engine command.
+ * Converts it in to descriptor.
+ * @param aCallId - ID of current call.
+ * @return None.
+ */
+ IMPORT_C void LogMsgFromControlToView (
+ const TInt aMessage,
+ const TInt aCallId );
+
+ /**
+ * Creates a PE specified log message by given parameters and writes
+ * it in the log file.
+ *
+ * @param aMessage - Ordinal of enumerated phone engine command.
+ * Converts it in to descriptor.
+ * @param aCallId - ID of current call.
+ * @return None.
+ */
+ IMPORT_C void LogMsgFromPEToPhoneUI (
+ const TInt aMessage,
+ const TInt aCallId );
+
+ /**
+ * Creates a PE specified log message by given TPEMessage id and call
+ * id and writes it in the log file.
+ *
+ * @param aMessage - Ordinal of enumerated phone engine command.
+ * Converts it in to descriptor.
+ * @param aCallId - ID of current call.
+ * @return None.
+ */
+ IMPORT_C void LogMsgFromPhoneUIToPE(
+ const TInt aMessage,
+ const TInt aCallId );
+
+ /**
+ * Logs message from Phone Engine to Phoneapp execution ending.
+ * (When message is executed succesfully, this function is called).
+ *
+ * @param aMessage - Ordinal of enumerated phone engine command.
+ * Converts it in to descriptor.
+ * @return None.
+ */
+ IMPORT_C void LogMsgFromPEToPhoneUIEnd( const TInt aMessage );
+
+ /**
+ * Logs state change.
+ *
+ * @param aCurrentState Current state of phoneapp.
+ * @param aNewState Next state of phoneapp.
+ * @return None.
+ */
+ IMPORT_C void LogStateChange(
+ const TInt aCurrentState,
+ const TInt aNewState );
+
+ /**
+ * Sets pointer to Phone Engine
+ * @param aPhoneEngine pointer to Phone Engine instance
+ */
+ IMPORT_C void SetPhoneEngine( MPEPhoneModel* aPhoneEngine );
+
+ private: // Methods from TDesOverflow
+
+ /**
+ * Formats a log message by given numerous parameters and writes
+ * it in the log file.
+ *
+ * @param aFmt -
+ * @return None.
+ */
+ void LogIt( TRefByValue<const TDesC> aFmt, ...);
+
+ /**
+ * Handles the overflow. This function is called when the
+ * TDes16::AppendFormat() variant, which takes an overflow handler
+ * argument, fails. TDes16::AppendFormat() variant called by LogIt().
+ *
+ * @param aDes - The 16 bit modifiable descriptor whose overflow
+ * results in the call to this overflow handler.
+ * @return None.
+ */
+ IMPORT_C virtual void Overflow(TDes16& aDes);
+
+ private: // New methods
+
+ /**
+ * Provides string representation for TPEMessagesFromPhoneEngine.
+ *
+ * @param aDes - Descriptor for copying string representation.
+ * @return None.
+ */
+ void GetPEToPhoneUIStringById( TDes16& aDes, const TInt aID );
+
+ /**
+ * Provides string representation for TPACommandId.
+ *
+ * @param aDes - Descriptor for copying string representation.
+ * @param aID - Descriptor for copying string representation.
+ * @return None.
+ */
+ void GetPhoneUIToPEStringById( TDes16& aDes, const TInt aID );
+
+ /**
+ * Provides string representation for MPhoneViewCommandId.
+ *
+ * @param aDes - Descriptor for copying string representation.
+ * @param aID - Descriptor for copying string representation.
+ * @return None.
+ */
+ void GetPhoneUIToViewStringById( TDes16& aDes, const TInt aID );
+
+ /**
+ * Recounts TPhoneStateId enumeration values for logger.
+ *
+ * @param aID - TPhoneStateId enumeration value
+ * @return - Value of recounted enumeration id
+ */
+ TInt RecountStateId( TInt aId );
+
+ /**
+ * Recounts TPhoneStateId GSM-variant enumeration values for logger.
+ *
+ * @param aID - TPhoneStateId enumeration value
+ * @return - Value of recounted enumeration id
+ */
+ TInt RecountStateIdGSM( TInt aId );
+
+ /**
+ * Provides string representation for state
+ *
+ * @param aDes - Descriptor for copying string representation.
+ * @param aID - Id of the state.
+ * @return - None.
+ */
+ void GetStateName( TDes16& aDes, const TInt aID );
+
+ /** Array of logging levels for each component */
+ TFixedArray<TPhoneUILoggingLevel, EPhoneAmountOfLoggingComponents>
+ iLogLevelArray;
+
+ private: // attributes
+
+ // String pool handle
+ RStringPool iPool;
+
+ /**
+ * Pointer to Phone Engine - uses relation
+ */
+ MPEPhoneModel* iPhoneEngine;
+ };
+
+class CPhoneMethodLogger: public CBase
+ {
+ public:
+
+ /** Method logger constructor. constructor.
+ * Writes time lable and "Enter: " + the given string.
+ */
+ IMPORT_C CPhoneMethodLogger(
+ TPhoneUILoggingComponent aLoggingComponent,
+ TPtrC aString);
+
+ /** Destructor.
+ * Writes time lable and "Leave: " + the given string.
+ */
+ IMPORT_C ~CPhoneMethodLogger();
+
+ private:
+
+ TBuf<128> iString;
+ TPhoneUILoggingComponent iLoggingComponent;
+ };
+
+// These are empty logging macros when PHONEUI_LOGGING_OUTPUT==0
+
+#if (PHONEUI_LOGGING_OUTPUT==0)
+ #define __PHONELOG(A, B, C)
+ #define __PHONELOG1(A,B, C, X)
+ #define __PHONELOG2(A,B, C, X, Y)
+ #define __PHONELOG3(A,B, C, X, Y, Z)
+ #define __PHONELOGENGINEMSG( C, X )
+ #define __PHONELOGENGINEMSGEND( C)
+ #define __PHONELOGENGINECMD( C)
+ #define __PHONELOGSTATECHANGE( C, X)
+ #define __LOGMETHODSTARTEND(A,C)
+ #define __PHONELOGVIEWMSG( C, X )
+
+// These are the real logging macros that uses CPhoneLogger class.
+#else
+
+//If logging method == 2 define log file name.
+
+ #define __PHONELOG(A, B, C) (static_cast<CPhoneLogger*> \
+ (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \
+ LogIt(A, B, _L(C) );
+
+ #define __PHONELOG1(A, B, C, X) (static_cast<CPhoneLogger*> \
+ (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \
+ LogIt(A, B, _L(C), X);
+
+ #define __PHONELOG2(A, B, C, X, Y) (static_cast<CPhoneLogger*> \
+ (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \
+ LogIt(A, B, _L(C), X, Y);
+
+ #define __PHONELOG3(A, B, C, X, Y, Z) (static_cast<CPhoneLogger*> \
+ (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \
+ LogIt(A, B, _L(C), X, Y, Z);
+
+ #define __PHONELOGENGINEMSG( C, X ) (static_cast<CPhoneLogger*> \
+ (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \
+ LogMsgFromPEToPhoneUI( (TInt)C, X);
+
+ #define __PHONELOGENGINEMSGEND( C ) (static_cast<CPhoneLogger*> \
+ (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \
+ LogMsgFromPEToPhoneUIEnd( (TInt)C );
+
+ #define __PHONELOGENGINECMD( C ) (static_cast<CPhoneLogger*> \
+ (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \
+ LogMsgFromPhoneUIToPE( (TInt)C, 0 );
+
+ #define __PHONELOGVIEWMSG( C, X ) (static_cast<CPhoneLogger*> \
+ (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \
+ LogMsgFromControlToView( (TInt)C, X);
+
+ #define __PHONELOGSTATECHANGE( C, X ) (static_cast<CPhoneLogger*> \
+ (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \
+ LogStateChange( (TInt)C, TInt(X) );
+
+ #define __LOGMETHODSTARTEND( A, C ) CPhoneMethodLogger __log( A, ( _L(C) ) );
+
+
+#endif // else --> #if (PHONE_LOGGING_METHOD==0 )
+
+#endif // #ifndef __CPhoneLogger_H__
+