tracesrv/tracecore/btrace_handler/inc/BTraceOstCategoryBitmap.h
changeset 56 aa2539c91954
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracesrv/tracecore/btrace_handler/inc/BTraceOstCategoryBitmap.h	Fri Oct 08 14:56:39 2010 +0300
@@ -0,0 +1,187 @@
+// 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:
+// Tracks the activation of BTrace OST categories  
+//
+
+#ifndef __BTRACEOSTCATEGORYBITMAP_H__
+#define __BTRACEOSTCATEGORYBITMAP_H__
+
+
+// Include files
+#include <opensystemtrace_types.h>
+#include "TraceCoreActivationBase.h"
+
+class DBTraceOstCategoryHandler;
+
+/**
+ * OST trace component.
+ */
+class TOstComponent
+    {
+public:
+    TUint32 iComponentId;
+    RArray< TUint > iGroups; //TODO: implement this as a bitmap rather than RArray
+    };
+    
+
+/**
+ * OST Trace bitmap (dynamic). This extends the subscriber base class to receive bitmap updates
+ */
+NONSHARABLE_CLASS( DBTraceOstCategoryBitmap ) : public DTraceCoreActivationBase
+    {
+public:
+
+    /**
+     * Constructor
+	 * @param aBTraceOstCategoryHandler Pointer to CBTraceOstCategoryHandler
+     */
+    DBTraceOstCategoryBitmap(DBTraceOstCategoryHandler* aBTraceOstCategoryHandler);
+    
+    /**
+     * Destructor
+     */
+    ~DBTraceOstCategoryBitmap();
+    
+    /**
+     * Initializes this bitmap. This subscribes to the bitmap update message
+     */
+    TInt Init();
+    
+    /**
+     * Checks if trace points with a specific component ID and group ID are
+     * currently active
+     *
+     * @param aComponentId The component ID
+     * @param aTraceWord The trace word containing the group ID to check
+     * @return ETrue if trace is active, EFalse if not
+     */
+    TBool IsTraceActivated( const TUint32 aComponentId, TUint32 aTraceWord );
+    
+    /**
+     * Activate trace group
+     *
+     * @param aComponentId The component ID
+     * @param aGroupId The group ID
+     */
+    void ActivateTrace( const TUint32 aComponentId, const TUint32 aGroupId );
+    
+    /**
+     * Deactivate trace group
+     *
+     * @param aComponentId The component ID
+     * @param aGroupId The group ID
+     */
+    void DeactivateTrace( const TUint32 aComponentId, const TUint32 aGroupId );
+ 
+    /**
+     * Deactivates all groups from a component
+     * 
+     * @param aComponentId The component ID
+     */
+    void DeactivateAll( const TUint32 aComponentId );
+    
+    /**
+     * Updates this activation object from the given settings
+     * 
+     * @param aSettings the settings to be read
+     */
+    void ReadFromSettings( DTraceCoreSettings& aSettings );
+    
+    /**
+     * Updates the settings with the content of this activation object
+     * 
+     * @param aSettings the settings to be written
+     */
+    void WriteToSettings( DTraceCoreSettings& aSettings );
+    
+    /**
+     * Gets activated groups for this component ID
+     * @param aComponentId the component ID
+     */
+    RArray< TUint > GetActivatedGroups( const TUint32 aComponentId );
+    
+    /**
+     * Reactivate all currently activated traces
+     * 
+     * This function deactivates all groups currently active and re-activates them.
+     * This results in kernel priming data being generated for all active kernel groups.
+     * 
+     * @return KErrNone if refresh successful
+     */
+    TInt RefreshActivations();
+    
+private:
+
+    TInt FindComponentId( TUint32 aComponentId, RArray<TOstComponent>& aOstComponents );
+    TInt AddComponentId( TUint32 aComponentId, RArray<TOstComponent>& aOstComponents );
+    TInt RemoveComponentId( TUint32 aComponentId, TBool aNotifyActivationListeners, 
+            RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray );
+    TInt AddGroupId( TUint32 aComponentId, TGroupId aGroupId, TInt aIndex, 
+            RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray );
+    TInt RemoveGroupId( TUint32 aComponentId, TGroupId aGroupId, TInt aIndex, 
+            RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray );
+    TInt OverwriteGroups (const TUint8* aFrameStart,
+                       TInt aComponentIndex, TUint32 aComponentId , TUint32 numberOfGroups, 
+                       RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray);
+    TInt ReadOstProtocolFrame(const TDesC8& aMessage, TUint32 aFrameStartIndex);
+    TInt ReadOstProtocolFrameGroups(const TDesC8& aMessage,
+            TInt aFrameStartIndex, TUint8 aActivationInfo, TInt aComponentIndex,
+            TUint32 aComponentId, RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray);
+    TInt ReadOstFrame( const TDesC8& aMessage, TUint32 aFrameStartIndex );
+    TInt ReadOstFrameGroups( const TDesC8& aMessage, TInt aFrameStartIndex, 
+            TUint8 aActivationInfo, TInt aComponentIndex, TUint32 aComponentId, 
+            RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray );
+    void MessageReceived( TTraceMessage &aMsg );
+    void OstProtocolMessage( TTraceMessage &aMsg );
+    TBool IsComponentSupported( TUint32 /*aComponentID*/ );
+ 	TInt AllocateActivationBuffer();
+    TUint32 Read32FromBuffer(TUint8*& aPtr);
+    TUint16 Read16FromBuffer(TUint8*& aPtr);
+    void WriteToBuffer(TUint8*& aPtr, TUint32 aData32);
+    void WriteToBuffer(TUint8*& aPtr, TUint16 aData16);    
+    void HandleTraceActivationChanges(RArray< TOstComponent >& aChangedArray);
+    
+    //used by locking mechanism
+    template <class T> void CopyArray(RArray<T>* aSrc, RArray<T>* aDst);
+    void SetNewComponentsArrayPtr(RArray<TOstComponent>*& aNewPtr);
+    
+    //utility methods
+    void CleanupComponentsArray(RArray< TOstComponent >& aComponentArray);
+    void CleanupComponentsArrays();
+    void AddGroupToChangedArray(RArray< TOstComponent >& aChangedArray, TUint32 aComponentId, TGroupId aGroupId);
+    
+private:
+
+    /**
+     * OST Components
+     */	
+	RArray< TOstComponent >* iOstComponents;
+	
+	//temporary array used in activation/deactivation methods
+	RArray< TOstComponent >* iTmpArray;
+	
+	//array used in to store changed components
+	RArray< TOstComponent >* iChangedArray;
+	
+	/**
+	 * Buffer for saving and loading activations
+	 */
+	TUint8* iActivationBuffer;
+    DBTraceOstCategoryHandler* iBTraceOstCategoryHandler;
+	
+    };
+
+#endif // __BTRACEOSTCATEGORYBITMAP_H__
+
+// End of File