tracesrv/tracecore/btrace_handler/inc/TraceCoreWriter.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
// Trace Core
hgs
parents:
diff changeset
    15
//
hgs
parents:
diff changeset
    16
hgs
parents:
diff changeset
    17
#ifndef __TRACECOREWRITER_H__
hgs
parents:
diff changeset
    18
#define __TRACECOREWRITER_H__
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
// Include files
hgs
parents:
diff changeset
    22
#include <kernel/kernel.h>
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
/**
hgs
parents:
diff changeset
    26
 * Types for WriteStart
hgs
parents:
diff changeset
    27
 */
hgs
parents:
diff changeset
    28
enum TWriterEntryType
hgs
parents:
diff changeset
    29
    {
hgs
parents:
diff changeset
    30
	
hgs
parents:
diff changeset
    31
	/**
hgs
parents:
diff changeset
    32
	 * Ascii printf trace
hgs
parents:
diff changeset
    33
	 */
hgs
parents:
diff changeset
    34
    EWriterEntryAscii       = 1,
hgs
parents:
diff changeset
    35
    
hgs
parents:
diff changeset
    36
    /**
hgs
parents:
diff changeset
    37
     * Binary trace
hgs
parents:
diff changeset
    38
     */
hgs
parents:
diff changeset
    39
    EWriterEntryTrace       = 2
hgs
parents:
diff changeset
    40
    };
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
/**
hgs
parents:
diff changeset
    43
 * Writer types for constructor
hgs
parents:
diff changeset
    44
 */
hgs
parents:
diff changeset
    45
enum TWriterType
hgs
parents:
diff changeset
    46
    {
hgs
parents:
diff changeset
    47
	/**
hgs
parents:
diff changeset
    48
	 * No writer, can be used to remove writer
hgs
parents:
diff changeset
    49
	 */
hgs
parents:
diff changeset
    50
    EWriterTypeNone    		= 0,
hgs
parents:
diff changeset
    51
    
hgs
parents:
diff changeset
    52
	/**
hgs
parents:
diff changeset
    53
	 * XTI writer
hgs
parents:
diff changeset
    54
	 */
hgs
parents:
diff changeset
    55
    EWriterTypeXTI          = 1,
hgs
parents:
diff changeset
    56
    
hgs
parents:
diff changeset
    57
    /**
hgs
parents:
diff changeset
    58
     * USB phonet writer
hgs
parents:
diff changeset
    59
     */
hgs
parents:
diff changeset
    60
    EWriterTypeUSBPhonet    = 2,
hgs
parents:
diff changeset
    61
  
hgs
parents:
diff changeset
    62
    /**
hgs
parents:
diff changeset
    63
     * Wins writer
hgs
parents:
diff changeset
    64
     */
hgs
parents:
diff changeset
    65
    EWriterTypeWins    = 3,
hgs
parents:
diff changeset
    66
    
hgs
parents:
diff changeset
    67
    /**
hgs
parents:
diff changeset
    68
     * Custom writer 1
hgs
parents:
diff changeset
    69
     */
hgs
parents:
diff changeset
    70
    EWriterTypeCustom1 = 4,
hgs
parents:
diff changeset
    71
    
hgs
parents:
diff changeset
    72
    /**
hgs
parents:
diff changeset
    73
     * Custom writer 2
hgs
parents:
diff changeset
    74
     */
hgs
parents:
diff changeset
    75
    EWriterTypeCustom2 = 5,
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
	/**
hgs
parents:
diff changeset
    78
     * test writer
hgs
parents:
diff changeset
    79
     */
hgs
parents:
diff changeset
    80
    EWriterTypeTest    = 6,
hgs
parents:
diff changeset
    81
    
hgs
parents:
diff changeset
    82
    /**
hgs
parents:
diff changeset
    83
     * Ost Buffer writer
hgs
parents:
diff changeset
    84
     */
hgs
parents:
diff changeset
    85
    EWriterTypeOstBuffer = 7
hgs
parents:
diff changeset
    86
    
hgs
parents:
diff changeset
    87
    
hgs
parents:
diff changeset
    88
    };
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
/**
hgs
parents:
diff changeset
    91
 * Write parameters for WriteEnd functions.
hgs
parents:
diff changeset
    92
 * This structure can contain some output channel specific information.
hgs
parents:
diff changeset
    93
 */
hgs
parents:
diff changeset
    94
class TWriteEndParams
hgs
parents:
diff changeset
    95
{
hgs
parents:
diff changeset
    96
    public:
hgs
parents:
diff changeset
    97
    TWriteEndParams(TUint32  aEntryId, TBool aWriteZero){ iEntryId = aEntryId; iWriteZero = aWriteZero; };
hgs
parents:
diff changeset
    98
	TUint32 iEntryId;
hgs
parents:
diff changeset
    99
	TBool iWriteZero;    
hgs
parents:
diff changeset
   100
};
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
/**
hgs
parents:
diff changeset
   105
 * Base class for trace core writers
hgs
parents:
diff changeset
   106
 */
hgs
parents:
diff changeset
   107
class DTraceCoreWriter : public DBase
hgs
parents:
diff changeset
   108
    {
hgs
parents:
diff changeset
   109
public:
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 aWriterType Type of writer 
hgs
parents:
diff changeset
   115
     */
hgs
parents:
diff changeset
   116
    IMPORT_C DTraceCoreWriter( TWriterType aWriterType );
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
    /**
hgs
parents:
diff changeset
   119
     * Destructor
hgs
parents:
diff changeset
   120
     */    
hgs
parents:
diff changeset
   121
    IMPORT_C virtual ~DTraceCoreWriter();
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    /**
hgs
parents:
diff changeset
   124
     * Registers this writer to TraceCore. The first writer to register becomes the active writer.
hgs
parents:
diff changeset
   125
     */
hgs
parents:
diff changeset
   126
    IMPORT_C virtual TInt Register();
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
    /**
hgs
parents:
diff changeset
   129
     * Outputs a TraceCore frame. This calls WriteStart, writes the component and trace ID's,
hgs
parents:
diff changeset
   130
     * calls WriteBTraceFrame and calls WriteEnd
hgs
parents:
diff changeset
   131
     *
hgs
parents:
diff changeset
   132
     * @param aComponentId the component ID
hgs
parents:
diff changeset
   133
     * @param aTraceWord The trace word containing the group ID and the Trace ID for the frame
hgs
parents:
diff changeset
   134
     * @param aHeader BTrace header
hgs
parents:
diff changeset
   135
     * @param aHeader2 Extra header data
hgs
parents:
diff changeset
   136
     * @param aContext The thread context in which this function was called
hgs
parents:
diff changeset
   137
     * @param a1 The first trace parameter
hgs
parents:
diff changeset
   138
     * @param a2 The second trace parameter
hgs
parents:
diff changeset
   139
     * @param a3 The third trace parameter
hgs
parents:
diff changeset
   140
     * @param aExtra Extra trace data
hgs
parents:
diff changeset
   141
     * @param aPc The program counter value
hgs
parents:
diff changeset
   142
     * @param aRecordSize The record size
hgs
parents:
diff changeset
   143
     */
hgs
parents:
diff changeset
   144
    IMPORT_C virtual void WriteTraceCoreFrame( const TUint32 aComponentId, const TUint32 aTraceId, 
hgs
parents:
diff changeset
   145
    		TUint32 aHeader, TUint32 aHeader2, const TUint32 aContext, const TUint32 a1, 
hgs
parents:
diff changeset
   146
    		const TUint32 a2, const TUint32 a3, const TUint32 aExtra, const TUint32 aPc, TUint32 aRecordSize );
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
    /**
hgs
parents:
diff changeset
   149
     * Ends an entry. 
hgs
parents:
diff changeset
   150
	 * This function should be overwritten in writers that derive from DTraceCoreWriter 
hgs
parents:
diff changeset
   151
	 * and require non standard implementation.
hgs
parents:
diff changeset
   152
     *
hgs
parents:
diff changeset
   153
     * @param aWriteEndParams structure containing 'end of message' information. @see TWriteEndParams
hgs
parents:
diff changeset
   154
     */
hgs
parents:
diff changeset
   155
    IMPORT_C virtual void WriteEnd( const TWriteEndParams& aWriteEndParams );
hgs
parents:
diff changeset
   156
    
hgs
parents:
diff changeset
   157
    
hgs
parents:
diff changeset
   158
    //TODO: assert that BtraceLock is held in Write Start!!!!
hgs
parents:
diff changeset
   159
    //TODO: Write WritePreStart() or something
hgs
parents:
diff changeset
   160
    
hgs
parents:
diff changeset
   161
    /**
hgs
parents:
diff changeset
   162
     * Starts an entry
hgs
parents:
diff changeset
   163
     *
hgs
parents:
diff changeset
   164
     * @return the entry ID that is passed to other Write-functions
hgs
parents:
diff changeset
   165
     */
hgs
parents:
diff changeset
   166
    virtual TUint32 WriteStart( TWriterEntryType aType ) = 0;
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
    /**
hgs
parents:
diff changeset
   169
     * Ends an entry
hgs
parents:
diff changeset
   170
     *
hgs
parents:
diff changeset
   171
     * @param aEntryId the entry ID returned by WriteStart
hgs
parents:
diff changeset
   172
     */
hgs
parents:
diff changeset
   173
    virtual void WriteEnd( TUint32 aEntryId ) = 0;
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    /**
hgs
parents:
diff changeset
   178
     * Writes 8-bit data to given entry
hgs
parents:
diff changeset
   179
     * 
hgs
parents:
diff changeset
   180
     * @param aEntryId the entry ID returned by WriteStart
hgs
parents:
diff changeset
   181
     * @param aData the trace data
hgs
parents:
diff changeset
   182
     */
hgs
parents:
diff changeset
   183
	virtual void WriteData( TUint32 aEntryId, TUint8 aData ) = 0;
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
    /**
hgs
parents:
diff changeset
   186
     * Writes 16-bit data to given entry
hgs
parents:
diff changeset
   187
     * 
hgs
parents:
diff changeset
   188
     * @param aEntryId the entry ID returned by WriteStart
hgs
parents:
diff changeset
   189
     * @param aData the trace data
hgs
parents:
diff changeset
   190
     */
hgs
parents:
diff changeset
   191
    virtual void WriteData( TUint32 aEntryId, TUint16 aData ) = 0;
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
    /**
hgs
parents:
diff changeset
   194
     * Writes 32-bit data to given entry
hgs
parents:
diff changeset
   195
     * 
hgs
parents:
diff changeset
   196
     * @param aEntryId the entry ID returned by WriteStart
hgs
parents:
diff changeset
   197
     * @param aData the trace data
hgs
parents:
diff changeset
   198
     */
hgs
parents:
diff changeset
   199
	virtual void WriteData( TUint32 aEntryId, TUint32 aData ) = 0;
hgs
parents:
diff changeset
   200
	
hgs
parents:
diff changeset
   201
	/**
hgs
parents:
diff changeset
   202
	 * Gets the type of this writer
hgs
parents:
diff changeset
   203
	 */
hgs
parents:
diff changeset
   204
	TWriterType GetWriterType();
hgs
parents:
diff changeset
   205
	
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
	/**
hgs
parents:
diff changeset
   208
	 * Signal to TraceCore if there has been a dropped trace
hgs
parents:
diff changeset
   209
	 * 
hgs
parents:
diff changeset
   210
     * @param aDropped ETrue if the writer dropped the trace - otherwise EFalse
hgs
parents:
diff changeset
   211
     * 
hgs
parents:
diff changeset
   212
	 */
hgs
parents:
diff changeset
   213
    IMPORT_C void TraceDropped(TBool aDropped);
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
    /**
hgs
parents:
diff changeset
   219
      * Interrogates tracecore if the last trace was dropped
hgs
parents:
diff changeset
   220
      * 
hgs
parents:
diff changeset
   221
      * @return  returns ETrue if the trace was dropped otherwise EFalse
hgs
parents:
diff changeset
   222
      * 
hgs
parents:
diff changeset
   223
    */
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
    IMPORT_C TBool WasLastTraceDropped() const ;
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
    
hgs
parents:
diff changeset
   228
    /**
hgs
parents:
diff changeset
   229
     * Checks whether writer can handle incoming trace data with specific size.
hgs
parents:
diff changeset
   230
     * This method is useful in case where Trace Core must report dropped traces.
hgs
parents:
diff changeset
   231
     * Currently it is used only in printf-handler and only in case where 
hgs
parents:
diff changeset
   232
     * the "dropped trace" flag is set.
hgs
parents:
diff changeset
   233
     * Typical implementation of this method should check writer internal state and answer
hgs
parents:
diff changeset
   234
     * whether trace with specific size and type can be sent.
hgs
parents:
diff changeset
   235
     * Default implementation of this method assumes writer is able to handle incoming 
hgs
parents:
diff changeset
   236
     * trace (ETrue is returned).
hgs
parents:
diff changeset
   237
     * 
hgs
parents:
diff changeset
   238
     * @param aTraceSize Size of incomming trace.
hgs
parents:
diff changeset
   239
     * @return ETrue if writer state is correct and it is able to send incomming data; EFalse otherwise.
hgs
parents:
diff changeset
   240
     */
hgs
parents:
diff changeset
   241
    IMPORT_C virtual TBool AbleToWrite(TUint aTraceSize); 
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
private:
hgs
parents:
diff changeset
   244
    
hgs
parents:
diff changeset
   245
    /**
hgs
parents:
diff changeset
   246
     * Outputs a BTrace frame
hgs
parents:
diff changeset
   247
     *
hgs
parents:
diff changeset
   248
     * @param aEntryId the entry ID returned by WriteStart
hgs
parents:
diff changeset
   249
     * @param aHeader BTrace header
hgs
parents:
diff changeset
   250
     * @param aHeader2 Extra header data
hgs
parents:
diff changeset
   251
     * @param aContext The thread context in which this function was called
hgs
parents:
diff changeset
   252
     * @param a1 The first trace parameter
hgs
parents:
diff changeset
   253
     * @param a2 The second trace parameter
hgs
parents:
diff changeset
   254
     * @param a3 The third trace parameter
hgs
parents:
diff changeset
   255
     * @param aExtra Extra trace data
hgs
parents:
diff changeset
   256
     * @param aPc The program counter value
hgs
parents:
diff changeset
   257
     * @param aRecordSize The record size
hgs
parents:
diff changeset
   258
     */
hgs
parents:
diff changeset
   259
    void WriteBTraceFrame( const TUint32 aEntryId, TUint32 aHeader, TUint32 aHeader2, 
hgs
parents:
diff changeset
   260
    		const TUint32 aContext, const TUint32 a1, const TUint32 a2, const TUint32 a3, 
hgs
parents:
diff changeset
   261
    		const TUint32 aExtra, const TUint32 aPc, TUint32 aRecordSize );
hgs
parents:
diff changeset
   262
hgs
parents:
diff changeset
   263
    /**
hgs
parents:
diff changeset
   264
     * Unregisters this writer from TraceCore. Called from destructor
hgs
parents:
diff changeset
   265
     */
hgs
parents:
diff changeset
   266
    void Unregister();
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
    /**
hgs
parents:
diff changeset
   269
     * Writes the remaining bytes if data is not 32-bit aligned
hgs
parents:
diff changeset
   270
     */
hgs
parents:
diff changeset
   271
    void WriteRemainingBytes( TUint32 aEntryId, TUint32 aSize, TUint32 a3 );
hgs
parents:
diff changeset
   272
hgs
parents:
diff changeset
   273
    /**
hgs
parents:
diff changeset
   274
     * Writer type
hgs
parents:
diff changeset
   275
     */
hgs
parents:
diff changeset
   276
    TWriterType iWriterType;
hgs
parents:
diff changeset
   277
    };
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
#endif
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
// End of File