kernel/eka/include/e32utf.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/include/e32utf.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,180 @@
+// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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 API
+//
+
+#ifndef E32UTRACE_H
+#define E32UTRACE_H
+
+#include <e32utrace_basic_types.h>
+
+
+/**
+Methods for tracing from user and kernel side.
+
+These methods are used to output trace packets.
+Each trace packet consist of attributes and the user defined payload.
+The attributes in @see TTraceContext is used to identify and filter the trace packet.
+
+In order to output trace packets tracing needs to be
+included and enabled at compile time in the executable,
+as well as be filtered at run-time.
+@see e32utrace.mmh
+@see RUlogger for information on how to filter at run-time
+
+Trace example:
+
+To include tracing you need to include the e32utrace.mmh
+in your executables mmp file. You also need to enable tracing at
+build time, which you do by defining the
+SYMBIAN_INCLUDE_EXECUTABLE_TRACE before the mmh is included.
+
+@code
+#define SYMBIAN_INCLUDE_EXECUTABLE_TRACE
+#include <e32utrace.mmh>
+@endcode
+
+Example usage of UTrace:
+
+@code
+#include <e32utf.h>
+using namespace UTF;
+
+TInt E32Main()
+	{
+	TFormatId formatId = TMyAppFormatExample::KFilePrintfStringLookupId;
+	TUint32 myData = SomeData();
+
+	//One line trace examples
+	Printf(TTraceContext(EError), "My data %d.", myData);
+	Printf(TTraceContext(KMyModuleUid, EError), "My data %d.", myData);
+	Printf(TTraceContext(EError, ENoThreadIdentification, ENoProgramCounter), "My data %d.", myData);
+	
+	//In case Printf is overloaded
+	UTF::Printf(TTraceContext(EError), "My data %d.", myData);
+	
+	//Using default ModuleUid, i.e. UID3
+	TTraceContext context(EError);
+	if(WouldBeTracedNow(context))
+		{
+		Printf(context, "My data %d.", myData);
+		Trace(context, formatId, myData);	
+		}
+		
+	//Setting the default ModuleUid to something other than UID3
+	#define EXECUTABLE_DEFAULT_MODULEUID 0x00210D3B
+	TTraceContext otherDefault(EError);
+	if(WouldBeTracedNow(otherDefault))
+		{
+		Printf(otherDefault, "My data %i.", myData);
+		Trace(otherDefault, formatId, myData);	
+		}
+	
+	//Setting different ModuleUid for each trace point
+	static const TModuleUid KTelephony = 0x00210D3B;
+	static const TModuleUid KConnectivity = 0x0039399A;
+	TTraceContext telephony(KTelephony, ECallControl);
+	TTraceContext connectivity(KConnectivity, EBluetooth);
+	if(WouldBeTracedNow(telephony))
+		{
+		Printf(telephony, "My data %i.", myData);
+		}
+	if(WouldBeTracedNow(connectivity))
+		{
+		Printf(connectivity, "My data %i.", myData);
+		}
+		
+	//Don't add the thread identification into the trace packet
+	TTraceContext noThreadIdentifier(EError, ENoThreadIdentification, ENoProgramCounter);
+	if(WouldBeTracedNow(noThreadIdentifier))
+		{
+		Printf(noThreadIdentifier, "My data %i.", myData);
+		Trace(noThreadIdentifier, formatId, myData);	
+		}
+	
+	return KErrNone;
+	}
+	
+@endcode
+
+
+Note:
+UTrace does not enforce any security. It is the developer's responsibility
+to ensure that trace packets do not contain any sensitive information that
+may undermine platform security.
+
+@file
+@publishedPartner
+@prototype
+*/
+namespace UTF
+{
+/**
+Class used to encapsulate the context of a trace point.
+For more information about the attributes please @see e32utrace_basic_types.h.
+*/
+NONSHARABLE_CLASS(TTraceContext)
+	{
+public:
+	inline TTraceContext(const TClassification aClassification);	
+	inline TTraceContext(const TClassification aClassification, const THasThreadIdentification aHasThreadIdentification, const THasProgramCounter aHasProgramCounter);
+	
+	inline TTraceContext(const TModuleUid aModuleUid, const TClassification aClassification);
+	inline TTraceContext(const TModuleUid aModuleUid, const TClassification aClassification, const THasThreadIdentification aHasThreadIdentification, const THasProgramCounter aHasProgramCounter);
+
+	IMPORT_C TModuleUid					ModuleUid() const;
+	IMPORT_C TClassification 			Classification() const;
+	IMPORT_C THasThreadIdentification	HasThreadIdentification()  const;
+	IMPORT_C THasProgramCounter 		HasProgramCounter()  const;
+	IMPORT_C static TModuleUid			DefaultModuleUid();
+private:
+	inline TTraceContext(){};
+private:
+	TModuleUid					iModuleUid;			//@see TModuleUid
+	TClassification 			iClassification;	//@see TClassification
+	THasThreadIdentification	iHasThreadIdentification;	//@see THasThreadIdentification
+	THasProgramCounter			iHasProgramCounter;			//@see THasProgramCounter
+	TUint32			 			iReserved1;			//Reserved for future use
+	TUint32			 			iReserved2;			//Reserved for future use
+	};
+
+	IMPORT_C TBool Printf(const TTraceContext& aContext, const char* aFmt, ...);
+	IMPORT_C TBool Print(const TTraceContext& aContext, const TDesC8& aDes);
+	IMPORT_C TBool Printf(const TTraceContext& aContext, TRefByValue<const TDesC8> aFmt,...);
+	#ifndef  __KERNEL_MODE__
+	IMPORT_C TBool Print(const TTraceContext& aContext, const TDesC16& aDes);
+	IMPORT_C TBool Printf(const TTraceContext& aContext, TRefByValue<const TDesC16> aFmt,...);
+	#endif //__KERNEL_MODE__
+	
+	IMPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId);
+	IMPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const TUint8 aData);
+	IMPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const TUint16 aData);
+	IMPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const TUint32 aData);
+	IMPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const TUint32 aData1, const TUint32 aData2);
+	IMPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const TDesC8& aData);
+	#ifndef __KERNEL_MODE__
+	IMPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const TDesC16& aData);
+	#endif
+	template<typename T>
+	static inline TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const T& aData);
+	IMPORT_C TBool Trace(const TTraceContext& aContext, const TFormatId aFormatId, const TAny* aData, const TInt aDataSize);
+	
+	IMPORT_C TBool WouldBeTracedNow(const TTraceContext& aContext);
+
+	
+#include <e32utrace.inl>
+}//end of UTF namespace
+
+
+#endif //E32UTRACE_H