tracesrv/tracecore/btrace_handler/test/d_traceonactivation/src/TraceOnActivation.cpp
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
//
hgs
parents:
diff changeset
    15
hgs
parents:
diff changeset
    16
#include <kernel/arm/assp.h>
hgs
parents:
diff changeset
    17
#include <kernel/kernel.h>
hgs
parents:
diff changeset
    18
#include <TraceCoreCommon.h>
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include "TraceCore.h"
hgs
parents:
diff changeset
    21
#include "TraceCoreConstants.h"
hgs
parents:
diff changeset
    22
#include "TraceOnActivation.h"
hgs
parents:
diff changeset
    23
#include "TraceOnActivationIf.h"
hgs
parents:
diff changeset
    24
#include "TraceConnection.h"
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
//===========================================================================
hgs
parents:
diff changeset
    28
// DTcFactory Class
hgs
parents:
diff changeset
    29
//===========================================================================
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
    32
/**
hgs
parents:
diff changeset
    33
    DTcFactory Constructor
hgs
parents:
diff changeset
    34
*/
hgs
parents:
diff changeset
    35
DTcFactory::DTcFactory()
hgs
parents:
diff changeset
    36
: DLogicalDevice()
hgs
parents:
diff changeset
    37
    {
hgs
parents:
diff changeset
    38
    // The version of this logical device
hgs
parents:
diff changeset
    39
    iVersion = TVersion( RTraceOnActivation::EMajorVersionNumber,
hgs
parents:
diff changeset
    40
                         RTraceOnActivation::EMinorVersionNumber,
hgs
parents:
diff changeset
    41
                         RTraceOnActivation::EBuildVersionNumber );
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
    // A bitmasks that indicates device properties
hgs
parents:
diff changeset
    44
    iParseMask = 0;
hgs
parents:
diff changeset
    45
    iUnitsMask = 0;
hgs
parents:
diff changeset
    46
    }
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
/**
hgs
parents:
diff changeset
    51
    DTcFactory Destructor
hgs
parents:
diff changeset
    52
*/
hgs
parents:
diff changeset
    53
DTcFactory::~DTcFactory()
hgs
parents:
diff changeset
    54
    {
hgs
parents:
diff changeset
    55
    }
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
/**
hgs
parents:
diff changeset
    60
    Completes the installation of this logical device i.e. to do secondary
hgs
parents:
diff changeset
    61
    initialization
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    @return KErrNone, if successful
hgs
parents:
diff changeset
    64
*/
hgs
parents:
diff changeset
    65
TInt DTcFactory::Install()
hgs
parents:
diff changeset
    66
    {
hgs
parents:
diff changeset
    67
    return SetName( &KTraceOnActivationDriverName );
hgs
parents:
diff changeset
    68
    }
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
    72
/**
hgs
parents:
diff changeset
    73
    Gets the capabilities of this logical device. Current implementation does
hgs
parents:
diff changeset
    74
    nothing.
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
    @param  aDes  On return, contains information describing
hgs
parents:
diff changeset
    77
                  the capabilities of the device
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
*/
hgs
parents:
diff changeset
    80
void DTcFactory::GetCaps(TDes8& /*aDes*/) const
hgs
parents:
diff changeset
    81
    {
hgs
parents:
diff changeset
    82
    }
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
    86
/**
hgs
parents:
diff changeset
    87
    Creates a logical channel
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
    @param  aChannel Set to point to the created Logical Channel
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
    @return KErrNone, if successfull
hgs
parents:
diff changeset
    92
*/
hgs
parents:
diff changeset
    93
TInt DTcFactory::Create(DLogicalChannelBase*& aChannel)
hgs
parents:
diff changeset
    94
    {
hgs
parents:
diff changeset
    95
	TInt r(KErrNone);
hgs
parents:
diff changeset
    96
    aChannel = new DTcChannel( this );
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
    if ( aChannel == NULL )
hgs
parents:
diff changeset
    99
        {
hgs
parents:
diff changeset
   100
        r = KErrNoMemory;
hgs
parents:
diff changeset
   101
        }
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
    return r;
hgs
parents:
diff changeset
   104
    }
hgs
parents:
diff changeset
   105
 
hgs
parents:
diff changeset
   106
//===========================================================================
hgs
parents:
diff changeset
   107
// DTcChannel Class
hgs
parents:
diff changeset
   108
//===========================================================================
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
   111
/**
hgs
parents:
diff changeset
   112
    Constructor
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
    @param  aDevice  A pointer to the LDD factory object that
hgs
parents:
diff changeset
   115
                    is constructing this logical channel
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
*/
hgs
parents:
diff changeset
   118
DTcChannel::DTcChannel(DLogicalDevice* /*aDevice*/)
hgs
parents:
diff changeset
   119
        : DLogicalChannel()
hgs
parents:
diff changeset
   120
        , iClientThread( NULL )
hgs
parents:
diff changeset
   121
        , iActivationQue(NULL)
hgs
parents:
diff changeset
   122
    {   
hgs
parents:
diff changeset
   123
    }
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
/**
hgs
parents:
diff changeset
   129
    Destructor
hgs
parents:
diff changeset
   130
*/
hgs
parents:
diff changeset
   131
DTcChannel::~DTcChannel()
hgs
parents:
diff changeset
   132
    {
hgs
parents:
diff changeset
   133
    delete iTraceConnection;
hgs
parents:
diff changeset
   134
    iTraceConnection = NULL;
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
    // Close our reference on the client thread
hgs
parents:
diff changeset
   137
    Kern::SafeClose( reinterpret_cast<DObject*&>( iClientThread ), NULL );
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
#ifdef __SMP_
hgs
parents:
diff changeset
   140
    __e32_memory_barrier();
hgs
parents:
diff changeset
   141
#endif
hgs
parents:
diff changeset
   142
    }
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
   146
/**
hgs
parents:
diff changeset
   147
    Completes the outstanding request identified by the specified request
hgs
parents:
diff changeset
   148
    number.
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
    @param  aMsg  System message from user side
hgs
parents:
diff changeset
   151
*/
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
void DTcChannel::HandleMsg(TMessageBase* aMsg)
hgs
parents:
diff changeset
   154
    {
hgs
parents:
diff changeset
   155
    // Synchronous kernel-side message. There is one per thread, and the
hgs
parents:
diff changeset
   156
    // thread always blocks while the message is outstanding.
hgs
parents:
diff changeset
   157
    TThreadMessage& msg = *( 
hgs
parents:
diff changeset
   158
    				static_cast<TThreadMessage*>( aMsg ) ); 
hgs
parents:
diff changeset
   159
    
hgs
parents:
diff changeset
   160
    TInt id = msg.iValue;
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    if ( id == static_cast<TInt>( ECloseMsg ) )
hgs
parents:
diff changeset
   163
        {
hgs
parents:
diff changeset
   164
        // Don't receive any more messages
hgs
parents:
diff changeset
   165
        msg.Complete( KErrNone, EFalse );
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
        // Complete all outstanding messages on this queue
hgs
parents:
diff changeset
   168
        iMsgQ.CompleteAll( KErrServerTerminated );
hgs
parents:
diff changeset
   169
        }
hgs
parents:
diff changeset
   170
    else
hgs
parents:
diff changeset
   171
        {
hgs
parents:
diff changeset
   172
        // DoControl
hgs
parents:
diff changeset
   173
        TInt ret = DoControl( id, msg.Ptr0() );
hgs
parents:
diff changeset
   174
        msg.Complete( ret, ETrue );
hgs
parents:
diff changeset
   175
        }
hgs
parents:
diff changeset
   176
    }
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
   179
/**
hgs
parents:
diff changeset
   180
    Performs secondary initialisation of the logical channel
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
    @param  aUnit  parameter to the user side handle
hgs
parents:
diff changeset
   183
    @param  anInfo  extra information for the device
hgs
parents:
diff changeset
   184
    @param  aVer  version requested by the thread
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
    @return KErrNone, if succesfull
hgs
parents:
diff changeset
   187
*/
hgs
parents:
diff changeset
   188
TInt DTcChannel::DoCreate(TInt aUnit, const  TDesC8* /*anInfo*/,
hgs
parents:
diff changeset
   189
                                             const  TVersion& aVer)
hgs
parents:
diff changeset
   190
    {
hgs
parents:
diff changeset
   191
    // Get pointer to client threads DThread object
hgs
parents:
diff changeset
   192
    iClientThread = &Kern::CurrentThread();
hgs
parents:
diff changeset
   193
        
hgs
parents:
diff changeset
   194
    TInt ret = iClientThread->Open();
hgs
parents:
diff changeset
   195
    if(ret != KErrNone)
hgs
parents:
diff changeset
   196
        return ret;
hgs
parents:
diff changeset
   197
       
hgs
parents:
diff changeset
   198
    DTraceCore* tCore = DTraceCore::GetInstance();
hgs
parents:
diff changeset
   199
    if(!tCore)
hgs
parents:
diff changeset
   200
        return KErrNotReady;
hgs
parents:
diff changeset
   201
    iActivationQue = tCore->ActivationQ();
hgs
parents:
diff changeset
   202
      
hgs
parents:
diff changeset
   203
    // This device driver framework does not apply meaning to the idea of a unit.
hgs
parents:
diff changeset
   204
    if ( aUnit != KNullUnit || !iDevice->QueryVersionSupported( aVer ) )
hgs
parents:
diff changeset
   205
        {
hgs
parents:
diff changeset
   206
        ret = KErrNotSupported;
hgs
parents:
diff changeset
   207
        }
hgs
parents:
diff changeset
   208
    else
hgs
parents:
diff changeset
   209
        {
hgs
parents:
diff changeset
   210
        // security check
hgs
parents:
diff changeset
   211
        if ( !Kern::CurrentThreadHasCapability( ECapabilityCommDD, 
hgs
parents:
diff changeset
   212
                        __PLATSEC_DIAGNOSTIC_STRING("Checked by Tc driver") ) )
hgs
parents:
diff changeset
   213
            {
hgs
parents:
diff changeset
   214
            ret = KErrPermissionDenied;
hgs
parents:
diff changeset
   215
            }
hgs
parents:
diff changeset
   216
        if(ret==KErrNone)
hgs
parents:
diff changeset
   217
            {
hgs
parents:
diff changeset
   218
            iTraceConnection = new DTraceConnection(this);
hgs
parents:
diff changeset
   219
            if(!iTraceConnection)
hgs
parents:
diff changeset
   220
                {
hgs
parents:
diff changeset
   221
                ret=KErrNoMemory;
hgs
parents:
diff changeset
   222
                }
hgs
parents:
diff changeset
   223
            }
hgs
parents:
diff changeset
   224
        if(ret==KErrNone)
hgs
parents:
diff changeset
   225
            {
hgs
parents:
diff changeset
   226
            // Set the DFC queue to be used by this logical channel to
hgs
parents:
diff changeset
   227
            // low priority DFC queue (owned by the TraceCore)
hgs
parents:
diff changeset
   228
            SetDfcQ( iActivationQue  );
hgs
parents:
diff changeset
   229
            // Mark queue ready to accept messages
hgs
parents:
diff changeset
   230
            iMsgQ.Receive();
hgs
parents:
diff changeset
   231
            }
hgs
parents:
diff changeset
   232
        }
hgs
parents:
diff changeset
   233
    
hgs
parents:
diff changeset
   234
    return ret;
hgs
parents:
diff changeset
   235
    }
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
   239
/**
hgs
parents:
diff changeset
   240
    Handles a synchronous request
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
    @param  aFunction  A number identifying specific functionality
hgs
parents:
diff changeset
   243
    @param  a1  If specified, a parameter from the user side
hgs
parents:
diff changeset
   244
    @param  a2  If specified, a parameter from the user side
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
    @return KErrNone, if successful
hgs
parents:
diff changeset
   247
*/
hgs
parents:
diff changeset
   248
TInt DTcChannel::DoControl(TInt aFunction, TAny* a1 = NULL)
hgs
parents:
diff changeset
   249
    {
hgs
parents:
diff changeset
   250
    TInt ret( KErrNotSupported );
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
    switch ( aFunction )
hgs
parents:
diff changeset
   253
        {
hgs
parents:
diff changeset
   254
        case RTraceOnActivation::ERegisterNotificationReceiver:
hgs
parents:
diff changeset
   255
            {
hgs
parents:
diff changeset
   256
            ret = RegisterNotificationReceiver( static_cast<TTraceOnActivationParams*>(a1) );
hgs
parents:
diff changeset
   257
            break;
hgs
parents:
diff changeset
   258
            }
hgs
parents:
diff changeset
   259
        case RTraceOnActivation::EUnregisterNotificationReceiver:
hgs
parents:
diff changeset
   260
            {
hgs
parents:
diff changeset
   261
            ret = UnregisterNotificationReceiver( static_cast<TTraceOnActivationParams*>(a1) );
hgs
parents:
diff changeset
   262
            break;
hgs
parents:
diff changeset
   263
            }
hgs
parents:
diff changeset
   264
        default:
hgs
parents:
diff changeset
   265
            break;
hgs
parents:
diff changeset
   266
        }
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
    return ret;
hgs
parents:
diff changeset
   269
    }
hgs
parents:
diff changeset
   270
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
   273
/**
hgs
parents:
diff changeset
   274
    Read parameters from user-side thread and call TraceConnection::RegisterNotificationReceiver
hgs
parents:
diff changeset
   275
    
hgs
parents:
diff changeset
   276
    @param  aParameters Parameters from user-side
hgs
parents:
diff changeset
   277
*/
hgs
parents:
diff changeset
   278
TInt DTcChannel::RegisterNotificationReceiver( TTraceOnActivationParams* aParameters )
hgs
parents:
diff changeset
   279
    {
hgs
parents:
diff changeset
   280
    TTraceOnActivationParams params;
hgs
parents:
diff changeset
   281
    TInt ret(KErrNone);
hgs
parents:
diff changeset
   282
     //get userside information
hgs
parents:
diff changeset
   283
	ret = Kern::ThreadRawRead(iClientThread, (const TAny *)aParameters,
hgs
parents:
diff changeset
   284
			(TAny*)&params, sizeof(TTraceOnActivationParams) );
hgs
parents:
diff changeset
   285
			
hgs
parents:
diff changeset
   286
	if(ret != KErrNone)
hgs
parents:
diff changeset
   287
	    {
hgs
parents:
diff changeset
   288
	    return ret;
hgs
parents:
diff changeset
   289
	    }
hgs
parents:
diff changeset
   290
			
hgs
parents:
diff changeset
   291
    if(iTraceConnection)
hgs
parents:
diff changeset
   292
        {
hgs
parents:
diff changeset
   293
        // Use correct part of iGroupId
hgs
parents:
diff changeset
   294
        params.iGroupId = FixGroupId( params.iGroupId );
hgs
parents:
diff changeset
   295
        // Check if iGroupId is valid
hgs
parents:
diff changeset
   296
        if (!GroupIdIsValid(params.iGroupId))
hgs
parents:
diff changeset
   297
            {
hgs
parents:
diff changeset
   298
            ret = KErrArgument;
hgs
parents:
diff changeset
   299
            }
hgs
parents:
diff changeset
   300
        else
hgs
parents:
diff changeset
   301
            {
hgs
parents:
diff changeset
   302
            iTraceConnection->RegisterNotificationReceiver( params.iComponentId, params.iGroupId );
hgs
parents:
diff changeset
   303
            }
hgs
parents:
diff changeset
   304
        }
hgs
parents:
diff changeset
   305
    else
hgs
parents:
diff changeset
   306
        {
hgs
parents:
diff changeset
   307
        ret = KErrGeneral;
hgs
parents:
diff changeset
   308
        }
hgs
parents:
diff changeset
   309
    
hgs
parents:
diff changeset
   310
    return ret;
hgs
parents:
diff changeset
   311
    }
hgs
parents:
diff changeset
   312
    
hgs
parents:
diff changeset
   313
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
   314
/**
hgs
parents:
diff changeset
   315
    Read parameters from user-side thread and call TraceConnection::UnregisterNotificationReceiver
hgs
parents:
diff changeset
   316
    
hgs
parents:
diff changeset
   317
    @param  aParameters Parameters from user-side
hgs
parents:
diff changeset
   318
*/
hgs
parents:
diff changeset
   319
TInt DTcChannel::UnregisterNotificationReceiver( TTraceOnActivationParams* aParameters )
hgs
parents:
diff changeset
   320
    {
hgs
parents:
diff changeset
   321
    TTraceOnActivationParams params;
hgs
parents:
diff changeset
   322
    TInt ret(KErrNone);
hgs
parents:
diff changeset
   323
     //get userside information
hgs
parents:
diff changeset
   324
	ret = Kern::ThreadRawRead(iClientThread, (const TAny *)aParameters,
hgs
parents:
diff changeset
   325
			(TAny*)&params, sizeof(TTraceOnActivationParams) );
hgs
parents:
diff changeset
   326
			
hgs
parents:
diff changeset
   327
	if(ret != KErrNone)
hgs
parents:
diff changeset
   328
	    return ret;
hgs
parents:
diff changeset
   329
hgs
parents:
diff changeset
   330
    if(iTraceConnection)
hgs
parents:
diff changeset
   331
        {
hgs
parents:
diff changeset
   332
        // Use correct part of iGroupId
hgs
parents:
diff changeset
   333
        params.iGroupId = FixGroupId( params.iGroupId );
hgs
parents:
diff changeset
   334
        // Check if iGroupId is valid
hgs
parents:
diff changeset
   335
        if (!GroupIdIsValid(params.iGroupId))
hgs
parents:
diff changeset
   336
            {
hgs
parents:
diff changeset
   337
            ret = KErrArgument;
hgs
parents:
diff changeset
   338
            }
hgs
parents:
diff changeset
   339
        else
hgs
parents:
diff changeset
   340
            {
hgs
parents:
diff changeset
   341
            iTraceConnection->UnregisterNotificationReceiver( params.iComponentId, params.iGroupId );
hgs
parents:
diff changeset
   342
            }
hgs
parents:
diff changeset
   343
        }
hgs
parents:
diff changeset
   344
    else
hgs
parents:
diff changeset
   345
        {
hgs
parents:
diff changeset
   346
        ret = KErrGeneral;
hgs
parents:
diff changeset
   347
        }
hgs
parents:
diff changeset
   348
    
hgs
parents:
diff changeset
   349
    return ret;
hgs
parents:
diff changeset
   350
    }
hgs
parents:
diff changeset
   351
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
/**
hgs
parents:
diff changeset
   354
    TraceActivated Notification
hgs
parents:
diff changeset
   355
    
hgs
parents:
diff changeset
   356
    Called from TraceConnection-TraceCore
hgs
parents:
diff changeset
   357
    
hgs
parents:
diff changeset
   358
    @param  aComponentId ComponentId of activated trace
hgs
parents:
diff changeset
   359
    @param  aGroupId GroupId of activated trace
hgs
parents:
diff changeset
   360
*/
hgs
parents:
diff changeset
   361
TInt DTcChannel::TraceActivated( TUint32 aComponentId, TUint16 aGroupId )
hgs
parents:
diff changeset
   362
    {    
hgs
parents:
diff changeset
   363
    // Set component ID used in trace point
hgs
parents:
diff changeset
   364
    TComponentId KOstTraceComponentID = aComponentId;
hgs
parents:
diff changeset
   365
hgs
parents:
diff changeset
   366
    // Calculate trace word from Group ID
hgs
parents:
diff changeset
   367
    TUint32 traceWord = (aGroupId << GROUPIDSHIFT) | 1;
hgs
parents:
diff changeset
   368
hgs
parents:
diff changeset
   369
    // Instrument a trace point, as a simulated priming trace
hgs
parents:
diff changeset
   370
    OstTrace0(aGroupId, traceWord, "Priming trace");
hgs
parents:
diff changeset
   371
hgs
parents:
diff changeset
   372
    return KErrNone;
hgs
parents:
diff changeset
   373
    }
hgs
parents:
diff changeset
   374
hgs
parents:
diff changeset
   375
hgs
parents:
diff changeset
   376
/**
hgs
parents:
diff changeset
   377
    TraceDeactivated Notification
hgs
parents:
diff changeset
   378
    
hgs
parents:
diff changeset
   379
    Called from TraceConnection-TraceCore
hgs
parents:
diff changeset
   380
    
hgs
parents:
diff changeset
   381
    @param  aComponentId ComponentId of activated trace
hgs
parents:
diff changeset
   382
    @param  aGroupId GroupId of activated trace
hgs
parents:
diff changeset
   383
    @return 
hgs
parents:
diff changeset
   384
*/
hgs
parents:
diff changeset
   385
TInt DTcChannel::TraceDeactivated( TUint32 /*aComponentId*/, TUint16 /*aGroupId*/ )
hgs
parents:
diff changeset
   386
    {
hgs
parents:
diff changeset
   387
    return KErrNone;
hgs
parents:
diff changeset
   388
    }
hgs
parents:
diff changeset
   389
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
//---------------------------------------------------------------------------
hgs
parents:
diff changeset
   392
/**
hgs
parents:
diff changeset
   393
    DECLARE_STANDARD_LDD
hgs
parents:
diff changeset
   394
hgs
parents:
diff changeset
   395
    @return DTcFactory object
hgs
parents:
diff changeset
   396
*/
hgs
parents:
diff changeset
   397
DECLARE_STANDARD_LDD()
hgs
parents:
diff changeset
   398
    {
hgs
parents:
diff changeset
   399
    return new DTcFactory;
hgs
parents:
diff changeset
   400
    }
hgs
parents:
diff changeset
   401