tracesrv/tracecore/btrace_handler/inc/TraceCore.h
changeset 56 aa2539c91954
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracesrv/tracecore/btrace_handler/inc/TraceCore.h	Fri Oct 08 14:56:39 2010 +0300
@@ -0,0 +1,346 @@
+// Copyright (c) 2007-2010 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:
+// Trace Core
+//
+
+#ifndef __TRACECORE_H__
+#define __TRACECORE_H__
+
+
+// Include files
+#include <kernel/kernel.h>
+#include "TraceCoreWriter.h"
+
+
+// Forward declarations
+class DTraceCoreSendReceive;
+class DTraceCoreNotifier;
+class DTraceCoreConfiguration;
+class DTraceCoreInternalMessageHandler;
+class DTraceCoreRouter;
+class DTraceCoreHandler;
+class DTraceCoreBTraceHandler;
+class DTraceCorePrintfTraceHandler;
+class DTraceCoreSettings;
+class MTraceCoreActivation;
+
+
+/**
+ * TraceCore main class
+ */
+NONSHARABLE_CLASS( DTraceCore ) : public DBase
+    {
+public:
+
+    /**
+     * Gets the TraceCore instance.
+     * NULL is returned when no instance is created.
+     */
+    IMPORT_C static DTraceCore* GetInstance();
+    
+    /**
+     * Returns ETrue if tracecore is loaded already EFalse otherwies
+     */
+    IMPORT_C static TBool IsLoaded();
+
+    /*
+     * Destroy the static instance of tracecore and sets the instance to null
+     */
+    IMPORT_C static void DestroyTraceCore();
+    /**
+     * Gets the BTrace handler
+     */
+    static DTraceCoreBTraceHandler* GetBTraceHandler();
+    
+    /**
+     * Gets the router
+     */
+    inline DTraceCoreRouter& GetRouter();
+    
+    /**
+     * Gets the send-receive interface
+     */
+    inline DTraceCoreSendReceive& GetSendReceive();
+    
+    /**
+     * Gets the trace core notifier
+     */
+    inline DTraceCoreNotifier& GetNotifier();
+    
+    /**
+     * Registers a handler to TraceCore.
+     *
+     * @param aHandler The handler to be registered
+     */
+    TInt RegisterHandler( DTraceCoreHandler& aHandler );
+
+    /**
+     * Unregisters a handler from TraceCore.
+     *
+     * @param aHandler The handler to be unregistered
+     */
+    void UnregisterHandler( DTraceCoreHandler& aHandler );
+
+    /**
+     * Registers a writer to TraceCore.
+     *
+     * @param aWriter The writer to be registered
+     */
+    TInt RegisterWriter( DTraceCoreWriter& aWriter );
+
+    /**
+     * Unregisters a writer from TraceCore.
+     *
+     * @param aWriter The writer to be unregistered
+     */
+    void UnregisterWriter( DTraceCoreWriter& aWriter );
+
+    /**
+     * Registers a settings saver to TraceCore.
+     *
+     * @param aSettings The settings (saver) to be registered
+     */
+    TInt RegisterSettings( DTraceCoreSettings& aSettings );
+
+    /**
+     * Unregisters a settings saver from TraceCore.
+     *
+     * @param aSettings The Settings to be unregistered
+     */
+    void UnregisterSettings( DTraceCoreSettings& aSettings );
+    
+    /**
+     * Registers an activation interface
+     * 
+     * @param aActivation The activation interface
+     */
+    TInt RegisterActivation( MTraceCoreActivation& aActivation );
+
+    /**
+     * Gets an activation interface for a specific component ID
+     * 
+     * @param aComponentID The component ID
+     * @return The activation interface or NULL if none exist
+     */
+    MTraceCoreActivation* GetActivation( TUint32 aComponentID );
+     
+    /**
+     * Starts to use the specific writer
+     * 
+     * @return KErrNone if successful, KErrNotSupported if type is not valid
+     */
+    IMPORT_C TInt SwitchToWriter( TWriterType aWriterType );     
+    
+    /**
+     * Get current writer type
+     * 
+     * @return Current writer type
+     */
+    IMPORT_C TInt GetCurrentWriterType();
+    
+    
+    /**
+     * Returns pointer to TraceCore owned activation / deactivation TDfcQue object.
+     */
+    inline TDynamicDfcQue* ActivationQ() {
+        return iActivationQ;
+        }
+    
+    /**
+     * Static method that returns pointer to TraceCore activation / deactivation dfc queue.
+     */
+    static TDynamicDfcQue* GetActivationQ() {
+        DTraceCore* tCore = DTraceCore::GetInstance();
+        if(tCore)
+            return tCore->ActivationQ();
+        else
+            return NULL;
+        }
+    
+   
+    
+    /**
+     * @internalTechnology 
+     * Sets the "Trace Dropped" flag
+     * @param aTraceDropped ETrue if Trace Dropped, EFalse Otherwise
+     */
+    IMPORT_C void SetPreviousTraceDropped(TBool aTraceDropped);
+    
+    /**
+     * @internalTechnology 
+     * returns the state of the  "Trace Dropped" flag
+     * @param none
+     */
+    IMPORT_C TBool PreviousTraceDropped() const; 
+    
+    /**
+     * @internalTechnology
+     * @return DTraceCore instance or NULL if creation failed.
+     */
+    IMPORT_C static DTraceCore* CreateInstance();
+    
+    /**
+     * Reactivate all currently activated traces
+     * @param none
+     * @return KErrNone if refresh successful
+     */
+    TInt RefreshActivations();
+    
+    /**
+     * Returns whether or not tracing is certified.
+     * The certification status is checked when TraceCore is initialised and then stored for later use.
+     * This stored value is used throughout the session, even if the status of the certificate changes.
+     * This is done to avoid performance issues when performing the check with every trace outputted. 
+     * @param none
+     * @return ETrue if tracing is certified, EFalse otherwise
+     */
+    inline TBool IsTraceCertified() { return iTraceCertified; };
+
+    /**
+     * Get the active writer
+     * @param none
+     * @return a pointer to the current
+     */
+    IMPORT_C DTraceCoreWriter* GetActiveWriter(); 
+
+private:
+
+    /**
+     * Constructor
+     */
+	DTraceCore();
+	
+	/**
+	 * Destructor
+	 */
+	~DTraceCore();
+	
+    /**
+     * Initializes trace core
+     */
+    TInt Init();
+    
+    /**
+     * Starts the BTrace handler
+     */
+    TInt StartBTrace();
+    
+    /**
+     * Starts the Printf trace handler
+     */
+    TInt StartPrintfTraceHandler();
+
+    /**
+     * Starts to use the first writer from the writers list
+     */
+    void SwitchToFirstWriter();
+
+    /**
+     * Forwards the active writer to handlers
+     */
+    void SetWriterToHandlers();
+    
+private:
+
+    /**
+     * TraceCore instance
+     */
+    static DTraceCore* iInstance;
+    
+    /**
+     * List of writers
+     */
+    RPointerArray< DTraceCoreWriter > iWriters;
+    
+    /**
+     * List of handlers
+     */
+    RPointerArray< DTraceCoreHandler > iHandlers;
+
+    /**
+     * List of activation interfaces
+     */
+    RPointerArray< MTraceCoreActivation > iActivations;
+    
+    /**
+     * Message router
+     */
+    DTraceCoreRouter* iRouter;
+    
+    /**
+     * Message sender / receiver
+     */
+    DTraceCoreSendReceive* iSendReceive;
+    
+    /**
+     * Activation notifier
+     */
+    DTraceCoreNotifier* iNotifier;    
+    
+    /**
+     * Configuration
+     */
+    DTraceCoreConfiguration* iConfiguration;    
+    
+    /**
+     * Internal message handler
+     */
+    DTraceCoreInternalMessageHandler* iInternalMessageHandler;    
+    
+    
+    /**
+     * BTrace handler
+     */
+    DTraceCoreBTraceHandler* iBTrace;
+    
+    /**
+     * Printf trace handler
+     */
+    DTraceCorePrintfTraceHandler* iPrintf;
+    
+    /**
+     * TraceCore settings
+     */
+    DTraceCoreSettings* iTraceCoreSettings;
+     
+    /**
+     * Writer that is currently active
+     */
+    DTraceCoreWriter* iActiveWriter;
+    
+    /**
+     * Activation / Deactivation DFC queue.
+     */
+    TDynamicDfcQue* iActivationQ;
+
+    /**
+     * Previous missing trace flag
+     */
+    TBool iPreviousTraceDropped;
+
+    /**
+     * Trace certified flag.
+     * The certification status is checked when TraceCore is initialised and then stored in this variable.
+     * This stored value is used throughout the session, even if the status of the certificate changes.
+     * This is done to avoid performance issues when performing the check with every trace outputted. 
+     */
+    TBool iTraceCertified;
+
+    };
+
+#endif
+
+#include "TraceCore.inl"
+
+// End of File