diff -r a151135b0cf9 -r aa2539c91954 tracesrv/tracecore/btrace_handler/inc/TraceCoreWriter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tracesrv/tracecore/btrace_handler/inc/TraceCoreWriter.h Fri Oct 08 14:56:39 2010 +0300 @@ -0,0 +1,281 @@ +// 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: +// Trace Core +// + +#ifndef __TRACECOREWRITER_H__ +#define __TRACECOREWRITER_H__ + + +// Include files +#include + + +/** + * Types for WriteStart + */ +enum TWriterEntryType + { + + /** + * Ascii printf trace + */ + EWriterEntryAscii = 1, + + /** + * Binary trace + */ + EWriterEntryTrace = 2 + }; + +/** + * Writer types for constructor + */ +enum TWriterType + { + /** + * No writer, can be used to remove writer + */ + EWriterTypeNone = 0, + + /** + * XTI writer + */ + EWriterTypeXTI = 1, + + /** + * USB phonet writer + */ + EWriterTypeUSBPhonet = 2, + + /** + * Wins writer + */ + EWriterTypeWins = 3, + + /** + * Custom writer 1 + */ + EWriterTypeCustom1 = 4, + + /** + * Custom writer 2 + */ + EWriterTypeCustom2 = 5, + + /** + * test writer + */ + EWriterTypeTest = 6, + + /** + * Ost Buffer writer + */ + EWriterTypeOstBuffer = 7 + + + }; + +/** + * Write parameters for WriteEnd functions. + * This structure can contain some output channel specific information. + */ +class TWriteEndParams +{ + public: + TWriteEndParams(TUint32 aEntryId, TBool aWriteZero){ iEntryId = aEntryId; iWriteZero = aWriteZero; }; + TUint32 iEntryId; + TBool iWriteZero; +}; + + + +/** + * Base class for trace core writers + */ +class DTraceCoreWriter : public DBase + { +public: + + /** + * Constructor + * + * @param aWriterType Type of writer + */ + IMPORT_C DTraceCoreWriter( TWriterType aWriterType ); + + /** + * Destructor + */ + IMPORT_C virtual ~DTraceCoreWriter(); + + /** + * Registers this writer to TraceCore. The first writer to register becomes the active writer. + */ + IMPORT_C virtual TInt Register(); + + /** + * Outputs a TraceCore frame. This calls WriteStart, writes the component and trace ID's, + * calls WriteBTraceFrame and calls WriteEnd + * + * @param aComponentId the component ID + * @param aTraceWord The trace word containing the group ID and the Trace ID for the frame + * @param aHeader BTrace header + * @param aHeader2 Extra header data + * @param aContext The thread context in which this function was called + * @param a1 The first trace parameter + * @param a2 The second trace parameter + * @param a3 The third trace parameter + * @param aExtra Extra trace data + * @param aPc The program counter value + * @param aRecordSize The record size + */ + IMPORT_C virtual void WriteTraceCoreFrame( const TUint32 aComponentId, const TUint32 aTraceId, + TUint32 aHeader, TUint32 aHeader2, const TUint32 aContext, const TUint32 a1, + const TUint32 a2, const TUint32 a3, const TUint32 aExtra, const TUint32 aPc, TUint32 aRecordSize ); + + /** + * Ends an entry. + * This function should be overwritten in writers that derive from DTraceCoreWriter + * and require non standard implementation. + * + * @param aWriteEndParams structure containing 'end of message' information. @see TWriteEndParams + */ + IMPORT_C virtual void WriteEnd( const TWriteEndParams& aWriteEndParams ); + + + //TODO: assert that BtraceLock is held in Write Start!!!! + //TODO: Write WritePreStart() or something + + /** + * Starts an entry + * + * @return the entry ID that is passed to other Write-functions + */ + virtual TUint32 WriteStart( TWriterEntryType aType ) = 0; + + /** + * Ends an entry + * + * @param aEntryId the entry ID returned by WriteStart + */ + virtual void WriteEnd( TUint32 aEntryId ) = 0; + + + + /** + * Writes 8-bit data to given entry + * + * @param aEntryId the entry ID returned by WriteStart + * @param aData the trace data + */ + virtual void WriteData( TUint32 aEntryId, TUint8 aData ) = 0; + + /** + * Writes 16-bit data to given entry + * + * @param aEntryId the entry ID returned by WriteStart + * @param aData the trace data + */ + virtual void WriteData( TUint32 aEntryId, TUint16 aData ) = 0; + + /** + * Writes 32-bit data to given entry + * + * @param aEntryId the entry ID returned by WriteStart + * @param aData the trace data + */ + virtual void WriteData( TUint32 aEntryId, TUint32 aData ) = 0; + + /** + * Gets the type of this writer + */ + TWriterType GetWriterType(); + + + /** + * Signal to TraceCore if there has been a dropped trace + * + * @param aDropped ETrue if the writer dropped the trace - otherwise EFalse + * + */ + IMPORT_C void TraceDropped(TBool aDropped); + + + + + /** + * Interrogates tracecore if the last trace was dropped + * + * @return returns ETrue if the trace was dropped otherwise EFalse + * + */ + + IMPORT_C TBool WasLastTraceDropped() const ; + + + /** + * Checks whether writer can handle incoming trace data with specific size. + * This method is useful in case where Trace Core must report dropped traces. + * Currently it is used only in printf-handler and only in case where + * the "dropped trace" flag is set. + * Typical implementation of this method should check writer internal state and answer + * whether trace with specific size and type can be sent. + * Default implementation of this method assumes writer is able to handle incoming + * trace (ETrue is returned). + * + * @param aTraceSize Size of incomming trace. + * @return ETrue if writer state is correct and it is able to send incomming data; EFalse otherwise. + */ + IMPORT_C virtual TBool AbleToWrite(TUint aTraceSize); + +private: + + /** + * Outputs a BTrace frame + * + * @param aEntryId the entry ID returned by WriteStart + * @param aHeader BTrace header + * @param aHeader2 Extra header data + * @param aContext The thread context in which this function was called + * @param a1 The first trace parameter + * @param a2 The second trace parameter + * @param a3 The third trace parameter + * @param aExtra Extra trace data + * @param aPc The program counter value + * @param aRecordSize The record size + */ + void WriteBTraceFrame( const TUint32 aEntryId, TUint32 aHeader, TUint32 aHeader2, + const TUint32 aContext, const TUint32 a1, const TUint32 a2, const TUint32 a3, + const TUint32 aExtra, const TUint32 aPc, TUint32 aRecordSize ); + + /** + * Unregisters this writer from TraceCore. Called from destructor + */ + void Unregister(); + + /** + * Writes the remaining bytes if data is not 32-bit aligned + */ + void WriteRemainingBytes( TUint32 aEntryId, TUint32 aSize, TUint32 a3 ); + + /** + * Writer type + */ + TWriterType iWriterType; + }; + +#endif + +// End of File