phoneapp/phoneuiutils/inc/cphonelogger.h
changeset 37 ba76fc04e6c2
child 51 f39ed5e045e0
--- /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 <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__
+