commsfwsupport/commselements/nodemessages/inc/nm_log.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwsupport/commselements/nodemessages/inc/nm_log.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,233 @@
+// 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 "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:
+// node message logging
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+
+#ifndef SYMBIAN_NM_LOG_H
+#define SYMBIAN_NM_LOG_H
+
+// Enable logging for debug builds or builds with the comms flogger enabled - must be defined before including e32utrace.h
+#if (defined(_DEBUG) || defined(__FLOG_ACTIVE)) && !defined(SYMBIAN_TRACE_ENABLE)
+#define SYMBIAN_TRACE_ENABLE
+#endif
+
+#include <e32utrace.h>
+#include <e32des8.h>
+
+namespace Messages
+{
+
+class TSignalBase;
+class TRuntimeCtxId;
+class ANode;
+
+const TInt KMaxLogTextLength = 250;
+
+class TLogTextBuf : public TBuf8<KMaxLogTextLength>
+    {
+public:
+    class TLogIgnoreOverflow8 : public TDes8Overflow
+        {
+        public:
+            void Overflow(TDes8& /*aDes*/) { }
+        };
+
+    void AppendFormatIgnoreOverflow(TRefByValue<const TDesC8> aFmt, ...)
+        {
+    	TLogIgnoreOverflow8 overflowHandler;
+    	VA_LIST list;
+    	VA_START(list, aFmt);
+    	AppendFormatList(aFmt, list, &overflowHandler);
+    	VA_END(list);
+        }
+
+    void AppendFormatIgnoreOverflow(TRefByValue<const TDesC8> aFmt, VA_LIST& aList)
+        {
+    	TLogIgnoreOverflow8 overflowHandler;
+    	AppendFormatList(aFmt, aList, &overflowHandler);
+        }
+    };
+
+class Logging
+    {
+public:
+    // These are used in the btrace/utrace log output as the SubCategory/Schema
+    enum TLogEntryType
+        {
+        ELogBinary = KBinary,   // Binary dump = 0
+        ELogInfo = KText,       // Text output = 1
+        
+        ELogBlockStart,         // = 2
+        ELogBlockEnd,           // = 3
+        ELogNodeCreate,         // = 4 
+        ELogNodeDestroy,        // = 5
+        ELogAddress,            // = 6
+        ELogMessage,            // = 7
+        ELogNode,               // = 8
+        };
+
+private:
+    enum
+        {
+        KPrimaryFilter = 194
+        };
+
+public:
+    // General logging statememts
+	IMPORT_C static void Printf(const TDesC8& aSubTag, TRefByValue<const TDesC8> aFmt, ...);
+	IMPORT_C static void Printf(const TDesC8& aSubTag, TRefByValue<const TDesC8> aFmt, VA_LIST& aList);
+	IMPORT_C static void Printf(const TDesC8& aSubTag, TLogEntryType aType, TRefByValue<const TDesC8> aFmt, ...);
+	IMPORT_C static void Printf(const TDesC8& aSubTag, TLogEntryType aType, TRefByValue<const TDesC8> aFmt, VA_LIST& aList);
+
+	IMPORT_C static void LogAddress(const TDesC8& aSubTag, const TRuntimeCtxId& aAddress, const TDesC8& aText);
+	IMPORT_C static void LogAddress(const TDesC8& aSubTag, const TRuntimeCtxId& aAddress);
+	IMPORT_C static void LogMessage(const TDesC8& aSubTag, const TDesC8& aMessage, const TDesC8& aText);
+	IMPORT_C static void LogMessage(const TDesC8& aSubTag, const TDesC8& aMessage);
+	IMPORT_C static void LogMessage(const TDesC8& aSubTag, const TSignalBase& aMessage, const TDesC8& aText);
+    IMPORT_C static void LogMessage(const TDesC8& aSubTag, const TSignalBase& aMessage);
+	IMPORT_C static void LogNode(const TDesC8& aSubTag, const ANode& aNode, const TDesC8& aText);
+	IMPORT_C static void LogNode(const TDesC8& aSubTag, const ANode& aNode);
+	};
+
+} // namespace Messages
+
+
+#ifdef SYMBIAN_TRACE_ENABLE
+
+_LIT8(KNodeMessagesSubTag, "nodemsg");
+
+// Local helper macros - don't use these directly
+#define NM_LOG_NODE_CREATE_ARG0(typeName)                               _L8(#typeName " %08x:\tcreated [ANode=0x%08x] [%d]" ), this, static_cast<Messages::ANodeId*>(this)->Id().Ptr(), sizeof(typeName)
+#define NM_LOG_NODE_CREATE_ARG1(typeName, formatText, a1)               _L8(#typeName " %08x:\tcreated [ANode=0x%08x] [%d] " formatText), this, static_cast<Messages::ANodeId*>(this)->Id().Ptr(), sizeof(typeName), a1
+#define NM_LOG_NODE_CREATE_ARG2(typeName, formatText, a1, a2)           _L8(#typeName " %08x:\tcreated [ANode=0x%08x] [%d] " formatText), this, static_cast<Messages::ANodeId*>(this)->Id().Ptr(), sizeof(typeName), a1, a2
+#define NM_LOG_NODE_CREATE_ARG3(typeName, formatText, a1, a2, a3)       _L8(#typeName " %08x:\tcreated [ANode=0x%08x] [%d] " formatText), this, static_cast<Messages::ANodeId*>(this)->Id().Ptr(), sizeof(typeName), a1, a2, a3
+
+#define NM_LOG_NODE_DESTROY_ARG0(typeName)                              _L8(#typeName " %08x:\t~" #typeName " [ANode=0x%08x]" ), this, static_cast<Messages::ANodeId*>(this)->Id().Ptr()
+#define NM_LOG_NODE_DESTROY_ARG1(typeName, formatText, a1)              _L8(#typeName " %08x:\t~" #typeName " [ANode=0x%08x]" formatText), this, static_cast<Messages::ANodeId*>(this)->Id().Ptr(), a1
+#define NM_LOG_NODE_DESTROY_ARG2(typeName, formatText, a1, a2)          _L8(#typeName " %08x:\t~" #typeName " [ANode=0x%08x]" formatText), this, static_cast<Messages::ANodeId*>(this)->Id().Ptr(), a1, a2
+#define NM_LOG_NODE_DESTROY_ARG3(typeName, formatText, a1, a2, a3)      _L8(#typeName " %08x:\t~" #typeName " [ANode=0x%08x]" formatText), this, static_cast<Messages::ANodeId*>(this)->Id().Ptr(), a1, a2, a3
+
+
+// Node Messages general logging
+#define NM_LOG(logArgs) Messages::Logging::Printf logArgs ;
+#define NM_LOG_STMT(statement) statement ;
+
+
+// Node creation logging macros
+#define NM_LOG_NODE_CREATE(subTag, typeName) \
+    NM_LOG((subTag, Messages::Logging::ELogNodeCreate, NM_LOG_NODE_CREATE_ARG0(typeName)))
+
+#define NM_LOG_NODE_CREATE1(subTag, typeName, formatText, arg1) \
+    NM_LOG((subTag, Messages::Logging::ELogNodeCreate, NM_LOG_NODE_CREATE_ARG1(typeName, formatText, arg1)))
+
+#define NM_LOG_NODE_CREATE2(subTag, typeName, formatText, arg1, arg2) \
+    NM_LOG((subTag, Messages::Logging::ELogNodeCreate, NM_LOG_NODE_CREATE_ARG2(typeName, formatText, arg1, arg2)))
+
+#define NM_LOG_NODE_CREATE3(subTag, typeName, formatText, arg1, arg2, arg3) \
+    NM_LOG((subTag, Messages::Logging::ELogNodeCreate, NM_LOG_NODE_CREATE_ARG3(typeName, formatText, arg1, arg2, arg3)))
+
+
+// Node destruction logging macros
+#define NM_LOG_NODE_DESTROY(subTag, typeName) \
+    NM_LOG((subTag, Messages::Logging::ELogNodeDestroy, NM_LOG_NODE_DESTROY_ARG0(typeName)))
+
+#define NM_LOG_NODE_DESTROY1(subTag, typeName, formatText, arg1) \
+    NM_LOG((subTag, Messages::Logging::ELogNodeDestroy, NM_LOG_NODE_DESTROY_ARG1(typeName, formatText, arg1)))
+
+#define NM_LOG_NODE_DESTROY2(subTag, typeName, formatText, arg1, arg2) \
+    NM_LOG((subTag, Messages::Logging::ELogNodeDestroy, NM_LOG_NODE_DESTROY_ARG2(typeName, formatText, arg1, arg2)))
+
+#define NM_LOG_NODE_DESTROY3(subTag, typeName, formatText, arg1, arg2, arg3) \
+    NM_LOG((subTag, Messages::Logging::ELogNodeDestroy, NM_LOG_NODE_DESTROY_ARG3(typeName, formatText, arg1, arg2, arg3)))
+
+
+#define NM_LOG_START_BLOCK(subTag, blockTag)  { Messages::Logging::Printf(subTag, Messages::Logging::ELogBlockStart, blockTag);
+#define NM_LOG_END_BLOCK(subTag, blockTag) Messages::Logging::Printf(subTag, Messages::Logging::ELogBlockEnd, blockTag); }
+
+
+
+#define NM_LOG_ADDRESS(subTag, address) \
+    Messages::Logging::LogAddress(subTag, address, _L8(#address ": "))
+
+#define NM_LOG_ADDRESS_EXT(subTag, address, logTxt) \
+    Messages::Logging::LogAddress(subTag, address, logTxt)
+
+
+
+#define NM_LOG_MESSAGE(subTag, message) \
+    Messages::Logging::LogMessage(subTag, message, _L8(#message ": "))
+
+#define NM_LOG_MESSAGE_EXT(subTag, message, logTxt) \
+    Messages::Logging::LogMessage(subTag, message, logTxt)
+
+
+
+#define NM_LOG_NODE(subTag, node) \
+    Messages::Logging::LogNode(subTag, node, _L8(#node ": "))
+
+#define NM_LOG_NODE_EXT(subTag, node, logTxt) \
+    Messages::Logging::LogNode(subTag, node, logTxt)
+
+    
+#else
+//! SYMBIAN_TRACE_ENABLE
+
+
+#define NM_LOG_NODE_CREATE_ARG0(typeName)
+#define NM_LOG_NODE_CREATE_ARG1(typeName, formatText, a1)
+#define NM_LOG_NODE_CREATE_ARG2(typeName, formatText, a1, a2)
+#define NM_LOG_NODE_CREATE_ARG3(typeName, formatText, a1, a2, a3)
+
+#define NM_LOG_NODE_DESTROY_ARG0(typeName)
+#define NM_LOG_NODE_DESTROY_ARG1(typeName, formatText, a1)
+#define NM_LOG_NODE_DESTROY_ARG2(typeName, formatText, a1, a2)
+#define NM_LOG_NODE_DESTROY_ARG3(typeName, formatText, a1, a2, a3)
+
+#define NM_LOG(logArgs)
+#define NM_LOG_STMT(statement)
+
+#define NM_LOG_NODE_CREATE(subTag, typeName)
+#define NM_LOG_NODE_CREATE1(subTag, typeName, formatText, arg1)
+#define NM_LOG_NODE_CREATE2(subTag, typeName, formatText, arg1, arg2)
+#define NM_LOG_NODE_CREATE3(subTag, typeName, formatText, arg1, arg2, arg3)
+
+#define NM_LOG_NODE_DESTROY(subTag, typeName)
+#define NM_LOG_NODE_DESTROY1(subTag, typeName, formatText, arg1)
+#define NM_LOG_NODE_DESTROY2(subTag, typeName, formatText, arg1, arg2)
+#define NM_LOG_NODE_DESTROY3(subTag, typeName, formatText, arg1, arg2, arg3)
+
+#define NM_LOG_START_BLOCK(subTag, blockTag)
+#define NM_LOG_END_BLOCK(subTag, blockTag)
+
+#define NM_LOG_ADDRESS(subTag, address)
+#define NM_LOG_ADDRESS_EXT(subTag, address, logTxt)
+#define NM_LOG_MESSAGE(subTag, message)
+#define NM_LOG_MESSAGE_EXT(subTag, message, logTxt)
+#define NM_LOG_NODE(subTag, node)
+#define NM_LOG_NODE_EXT(subTag, node, logTxt)
+
+#endif
+// SYMBIAN_TRACE_ENABLE
+
+
+#endif
+// SYMBIAN_NM_LOG_H
+