tracesrv/tracecore/btrace_handler/inc/BTraceOstCategoryBitmap.h
author hgs
Fri, 08 Oct 2010 14:56:39 +0300
changeset 56 aa2539c91954
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
hgs
parents:
diff changeset
     1
// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     2
// All rights reserved.
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     7
//
hgs
parents:
diff changeset
     8
// Initial Contributors:
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    10
//
hgs
parents:
diff changeset
    11
// Contributors:
hgs
parents:
diff changeset
    12
//
hgs
parents:
diff changeset
    13
// Description:
hgs
parents:
diff changeset
    14
// Tracks the activation of BTrace OST categories  
hgs
parents:
diff changeset
    15
//
hgs
parents:
diff changeset
    16
hgs
parents:
diff changeset
    17
#ifndef __BTRACEOSTCATEGORYBITMAP_H__
hgs
parents:
diff changeset
    18
#define __BTRACEOSTCATEGORYBITMAP_H__
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
// Include files
hgs
parents:
diff changeset
    22
#include <opensystemtrace_types.h>
hgs
parents:
diff changeset
    23
#include "TraceCoreActivationBase.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
class DBTraceOstCategoryHandler;
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
/**
hgs
parents:
diff changeset
    28
 * OST trace component.
hgs
parents:
diff changeset
    29
 */
hgs
parents:
diff changeset
    30
class TOstComponent
hgs
parents:
diff changeset
    31
    {
hgs
parents:
diff changeset
    32
public:
hgs
parents:
diff changeset
    33
    TUint32 iComponentId;
hgs
parents:
diff changeset
    34
    RArray< TUint > iGroups; //TODO: implement this as a bitmap rather than RArray
hgs
parents:
diff changeset
    35
    };
hgs
parents:
diff changeset
    36
    
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
/**
hgs
parents:
diff changeset
    39
 * OST Trace bitmap (dynamic). This extends the subscriber base class to receive bitmap updates
hgs
parents:
diff changeset
    40
 */
hgs
parents:
diff changeset
    41
NONSHARABLE_CLASS( DBTraceOstCategoryBitmap ) : public DTraceCoreActivationBase
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
public:
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
    /**
hgs
parents:
diff changeset
    46
     * Constructor
hgs
parents:
diff changeset
    47
	 * @param aBTraceOstCategoryHandler Pointer to CBTraceOstCategoryHandler
hgs
parents:
diff changeset
    48
     */
hgs
parents:
diff changeset
    49
    DBTraceOstCategoryBitmap(DBTraceOstCategoryHandler* aBTraceOstCategoryHandler);
hgs
parents:
diff changeset
    50
    
hgs
parents:
diff changeset
    51
    /**
hgs
parents:
diff changeset
    52
     * Destructor
hgs
parents:
diff changeset
    53
     */
hgs
parents:
diff changeset
    54
    ~DBTraceOstCategoryBitmap();
hgs
parents:
diff changeset
    55
    
hgs
parents:
diff changeset
    56
    /**
hgs
parents:
diff changeset
    57
     * Initializes this bitmap. This subscribes to the bitmap update message
hgs
parents:
diff changeset
    58
     */
hgs
parents:
diff changeset
    59
    TInt Init();
hgs
parents:
diff changeset
    60
    
hgs
parents:
diff changeset
    61
    /**
hgs
parents:
diff changeset
    62
     * Checks if trace points with a specific component ID and group ID are
hgs
parents:
diff changeset
    63
     * currently active
hgs
parents:
diff changeset
    64
     *
hgs
parents:
diff changeset
    65
     * @param aComponentId The component ID
hgs
parents:
diff changeset
    66
     * @param aTraceWord The trace word containing the group ID to check
hgs
parents:
diff changeset
    67
     * @return ETrue if trace is active, EFalse if not
hgs
parents:
diff changeset
    68
     */
hgs
parents:
diff changeset
    69
    TBool IsTraceActivated( const TUint32 aComponentId, TUint32 aTraceWord );
hgs
parents:
diff changeset
    70
    
hgs
parents:
diff changeset
    71
    /**
hgs
parents:
diff changeset
    72
     * Activate trace group
hgs
parents:
diff changeset
    73
     *
hgs
parents:
diff changeset
    74
     * @param aComponentId The component ID
hgs
parents:
diff changeset
    75
     * @param aGroupId The group ID
hgs
parents:
diff changeset
    76
     */
hgs
parents:
diff changeset
    77
    void ActivateTrace( const TUint32 aComponentId, const TUint32 aGroupId );
hgs
parents:
diff changeset
    78
    
hgs
parents:
diff changeset
    79
    /**
hgs
parents:
diff changeset
    80
     * Deactivate trace group
hgs
parents:
diff changeset
    81
     *
hgs
parents:
diff changeset
    82
     * @param aComponentId The component ID
hgs
parents:
diff changeset
    83
     * @param aGroupId The group ID
hgs
parents:
diff changeset
    84
     */
hgs
parents:
diff changeset
    85
    void DeactivateTrace( const TUint32 aComponentId, const TUint32 aGroupId );
hgs
parents:
diff changeset
    86
 
hgs
parents:
diff changeset
    87
    /**
hgs
parents:
diff changeset
    88
     * Deactivates all groups from a component
hgs
parents:
diff changeset
    89
     * 
hgs
parents:
diff changeset
    90
     * @param aComponentId The component ID
hgs
parents:
diff changeset
    91
     */
hgs
parents:
diff changeset
    92
    void DeactivateAll( const TUint32 aComponentId );
hgs
parents:
diff changeset
    93
    
hgs
parents:
diff changeset
    94
    /**
hgs
parents:
diff changeset
    95
     * Updates this activation object from the given settings
hgs
parents:
diff changeset
    96
     * 
hgs
parents:
diff changeset
    97
     * @param aSettings the settings to be read
hgs
parents:
diff changeset
    98
     */
hgs
parents:
diff changeset
    99
    void ReadFromSettings( DTraceCoreSettings& aSettings );
hgs
parents:
diff changeset
   100
    
hgs
parents:
diff changeset
   101
    /**
hgs
parents:
diff changeset
   102
     * Updates the settings with the content of this activation object
hgs
parents:
diff changeset
   103
     * 
hgs
parents:
diff changeset
   104
     * @param aSettings the settings to be written
hgs
parents:
diff changeset
   105
     */
hgs
parents:
diff changeset
   106
    void WriteToSettings( DTraceCoreSettings& aSettings );
hgs
parents:
diff changeset
   107
    
hgs
parents:
diff changeset
   108
    /**
hgs
parents:
diff changeset
   109
     * Gets activated groups for this component ID
hgs
parents:
diff changeset
   110
     * @param aComponentId the component ID
hgs
parents:
diff changeset
   111
     */
hgs
parents:
diff changeset
   112
    RArray< TUint > GetActivatedGroups( const TUint32 aComponentId );
hgs
parents:
diff changeset
   113
    
hgs
parents:
diff changeset
   114
    /**
hgs
parents:
diff changeset
   115
     * Reactivate all currently activated traces
hgs
parents:
diff changeset
   116
     * 
hgs
parents:
diff changeset
   117
     * This function deactivates all groups currently active and re-activates them.
hgs
parents:
diff changeset
   118
     * This results in kernel priming data being generated for all active kernel groups.
hgs
parents:
diff changeset
   119
     * 
hgs
parents:
diff changeset
   120
     * @return KErrNone if refresh successful
hgs
parents:
diff changeset
   121
     */
hgs
parents:
diff changeset
   122
    TInt RefreshActivations();
hgs
parents:
diff changeset
   123
    
hgs
parents:
diff changeset
   124
private:
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
    TInt FindComponentId( TUint32 aComponentId, RArray<TOstComponent>& aOstComponents );
hgs
parents:
diff changeset
   127
    TInt AddComponentId( TUint32 aComponentId, RArray<TOstComponent>& aOstComponents );
hgs
parents:
diff changeset
   128
    TInt RemoveComponentId( TUint32 aComponentId, TBool aNotifyActivationListeners, 
hgs
parents:
diff changeset
   129
            RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray );
hgs
parents:
diff changeset
   130
    TInt AddGroupId( TUint32 aComponentId, TGroupId aGroupId, TInt aIndex, 
hgs
parents:
diff changeset
   131
            RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray );
hgs
parents:
diff changeset
   132
    TInt RemoveGroupId( TUint32 aComponentId, TGroupId aGroupId, TInt aIndex, 
hgs
parents:
diff changeset
   133
            RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray );
hgs
parents:
diff changeset
   134
    TInt OverwriteGroups (const TUint8* aFrameStart,
hgs
parents:
diff changeset
   135
                       TInt aComponentIndex, TUint32 aComponentId , TUint32 numberOfGroups, 
hgs
parents:
diff changeset
   136
                       RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray);
hgs
parents:
diff changeset
   137
    TInt ReadOstProtocolFrame(const TDesC8& aMessage, TUint32 aFrameStartIndex);
hgs
parents:
diff changeset
   138
    TInt ReadOstProtocolFrameGroups(const TDesC8& aMessage,
hgs
parents:
diff changeset
   139
            TInt aFrameStartIndex, TUint8 aActivationInfo, TInt aComponentIndex,
hgs
parents:
diff changeset
   140
            TUint32 aComponentId, RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray);
hgs
parents:
diff changeset
   141
    TInt ReadOstFrame( const TDesC8& aMessage, TUint32 aFrameStartIndex );
hgs
parents:
diff changeset
   142
    TInt ReadOstFrameGroups( const TDesC8& aMessage, TInt aFrameStartIndex, 
hgs
parents:
diff changeset
   143
            TUint8 aActivationInfo, TInt aComponentIndex, TUint32 aComponentId, 
hgs
parents:
diff changeset
   144
            RArray<TOstComponent>& aOstComponents, RArray< TOstComponent >& aChangedArray );
hgs
parents:
diff changeset
   145
    void MessageReceived( TTraceMessage &aMsg );
hgs
parents:
diff changeset
   146
    void OstProtocolMessage( TTraceMessage &aMsg );
hgs
parents:
diff changeset
   147
    TBool IsComponentSupported( TUint32 /*aComponentID*/ );
hgs
parents:
diff changeset
   148
 	TInt AllocateActivationBuffer();
hgs
parents:
diff changeset
   149
    TUint32 Read32FromBuffer(TUint8*& aPtr);
hgs
parents:
diff changeset
   150
    TUint16 Read16FromBuffer(TUint8*& aPtr);
hgs
parents:
diff changeset
   151
    void WriteToBuffer(TUint8*& aPtr, TUint32 aData32);
hgs
parents:
diff changeset
   152
    void WriteToBuffer(TUint8*& aPtr, TUint16 aData16);    
hgs
parents:
diff changeset
   153
    void HandleTraceActivationChanges(RArray< TOstComponent >& aChangedArray);
hgs
parents:
diff changeset
   154
    
hgs
parents:
diff changeset
   155
    //used by locking mechanism
hgs
parents:
diff changeset
   156
    template <class T> void CopyArray(RArray<T>* aSrc, RArray<T>* aDst);
hgs
parents:
diff changeset
   157
    void SetNewComponentsArrayPtr(RArray<TOstComponent>*& aNewPtr);
hgs
parents:
diff changeset
   158
    
hgs
parents:
diff changeset
   159
    //utility methods
hgs
parents:
diff changeset
   160
    void CleanupComponentsArray(RArray< TOstComponent >& aComponentArray);
hgs
parents:
diff changeset
   161
    void CleanupComponentsArrays();
hgs
parents:
diff changeset
   162
    void AddGroupToChangedArray(RArray< TOstComponent >& aChangedArray, TUint32 aComponentId, TGroupId aGroupId);
hgs
parents:
diff changeset
   163
    
hgs
parents:
diff changeset
   164
private:
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
    /**
hgs
parents:
diff changeset
   167
     * OST Components
hgs
parents:
diff changeset
   168
     */	
hgs
parents:
diff changeset
   169
	RArray< TOstComponent >* iOstComponents;
hgs
parents:
diff changeset
   170
	
hgs
parents:
diff changeset
   171
	//temporary array used in activation/deactivation methods
hgs
parents:
diff changeset
   172
	RArray< TOstComponent >* iTmpArray;
hgs
parents:
diff changeset
   173
	
hgs
parents:
diff changeset
   174
	//array used in to store changed components
hgs
parents:
diff changeset
   175
	RArray< TOstComponent >* iChangedArray;
hgs
parents:
diff changeset
   176
	
hgs
parents:
diff changeset
   177
	/**
hgs
parents:
diff changeset
   178
	 * Buffer for saving and loading activations
hgs
parents:
diff changeset
   179
	 */
hgs
parents:
diff changeset
   180
	TUint8* iActivationBuffer;
hgs
parents:
diff changeset
   181
    DBTraceOstCategoryHandler* iBTraceOstCategoryHandler;
hgs
parents:
diff changeset
   182
	
hgs
parents:
diff changeset
   183
    };
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
#endif // __BTRACEOSTCATEGORYBITMAP_H__
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
// End of File