--- /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