mulwidgets/mullogging/inc/mullogchunk.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:56:02 +0200
changeset 0 e83bab7cf002
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2006-2007 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:  Logging to chunk wrapper for MC Photos
*
*/


#ifndef T_MULLOGCHUNK_H
#define T_MULLOGCHUNK_H

// EXTERNAL INCLUDES
#include <e32std.h>
#include <f32file.h>

/**
 * RMulLogUtility.
 * Encapsulates the use of RChunk for log writing
 */
NONSHARABLE_CLASS( RMulLogUtility )
    {
    public:
        /**
         * Opens the log chunk with given name
         * @param aName, the full name of the chunk
         * @param aReadOnly, whether to open in readonly or read-write
         */
        TInt Open( const TDesC& aName, TBool aReadOnly );

        /**
         * Creates the log chunk with given name
         * @param aName, the full name of the chunk
         */
        void CreateL( const TDesC& aName );

        /**
         * Closes the opened chunk. This needs to be called
         * before an object of this class goes out of scope
         */
        void Close();
        
        /**
         * @return the size of the log chunk
         */
        TInt ChunkSize();
        
        /**
         * @return the chunk unique Id (set by client)
         */
        TObjectId Id();

        /**
         * Sets the unique id for the log chunk
         * @param aId the id to set for the chunk
         */
        void SetId( TObjectId aId );
        
        /**
         * @return Current chunk write address
         */
        TUint8* CurrentAddress();

        /**
         * Sets the current write address
         * @param New write address
         */
        void SetCurrentAddress( TUint8* aValue );

        /**
         * @return Last address written to file
         */
        TUint8* LastLoggedAddress();

        /**
         * Sets the last logged address
         * @param New last logged address
         */
        void SetLastLoggedAddress( TUint8* aValue );

        /**
         * @return The topmost writable address of the chunk
         */
        TUint8* BaseAddress();

        /**
         * @return The bottom most writable address of the chunk
         */
        TUint8* LastAddress();

    private:

        /// Own: chunk to write to
        RChunk iChunk;
    };

/**
 * RMulLogClient.
 * Client API for log writing to chunk
 */
NONSHARABLE_CLASS( RMulLogClient )
    {
    public:

		/**
		 * Opens the log chunk with the given unique id
		 * @param aId unique id for the log writing thread
		 */
        IMPORT_C TInt Open( TObjectId aId );
        
        /**
         * Closes the log handle, needs to be called before an
         * object of this class goes out of scope
         */
        IMPORT_C void Close();

        /**
         * Writes a descriptor to the log
         * @param aLogEntry the log entry to write
         */
        IMPORT_C void Write( const TDesC8& aLogEntry );

    private:

    	/// Own: log utility
        RMulLogUtility iLogUtility;

    };
    
/**
 * RMulLogManager.
 * Management API for log creation and committing to file
 */
NONSHARABLE_CLASS( RMulLogManager )
    {
    public:

        /**
         * Creates the log chunks
         */
        IMPORT_C void CreateL();
        
        /**
         * Releases the log chunks
         */
		IMPORT_C void Release();
 
        /**
         * Writes the log to a file
         * One file is created per chunk.
         * @param aFolder the directory where to store the logs
         */
        IMPORT_C void CommitToFileL( const TDesC& aFolder );
        
    private:

		// helper method to write all descriptors of a chunk to a 
		// file
        void CommitToFileL( RMulLogUtility& aUtility, RFile& aFile );
        
    private:
 
    	/// Own: log utility
        RMulLogUtility iLogUtility1;
    	/// Own: log utility
        RMulLogUtility iLogUtility2;    
        /// Own: file server handle
        RFs iFs;

    };

#endif // T_MULLOGCHUNK_H