diff -r 2eacb6118286 -r ba76fc04e6c2 phoneapp/phoneuiutils/inc/cphonelogger.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiutils/inc/cphonelogger.h Fri Jun 04 10:19:18 2010 +0100 @@ -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 +#include +#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 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 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 + 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 \ + (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \ + LogIt(A, B, _L(C) ); + + #define __PHONELOG1(A, B, C, X) (static_cast \ + (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \ + LogIt(A, B, _L(C), X); + + #define __PHONELOG2(A, B, C, X, Y) (static_cast \ + (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \ + LogIt(A, B, _L(C), X, Y); + + #define __PHONELOG3(A, B, C, X, Y, Z) (static_cast \ + (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \ + LogIt(A, B, _L(C), X, Y, Z); + + #define __PHONELOGENGINEMSG( C, X ) (static_cast \ + (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \ + LogMsgFromPEToPhoneUI( (TInt)C, X); + + #define __PHONELOGENGINEMSGEND( C ) (static_cast \ + (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \ + LogMsgFromPEToPhoneUIEnd( (TInt)C ); + + #define __PHONELOGENGINECMD( C ) (static_cast \ + (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \ + LogMsgFromPhoneUIToPE( (TInt)C, 0 ); + + #define __PHONELOGVIEWMSG( C, X ) (static_cast \ + (CCoeEnv::Static(KUidPhoneUILoggerSingleton)))-> \ + LogMsgFromControlToView( (TInt)C, X); + + #define __PHONELOGSTATECHANGE( C, X ) (static_cast \ + (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__ +