tracesrv/tracecore/btrace_handler/src/TraceCoreSubscriber.cpp
changeset 56 aa2539c91954
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracesrv/tracecore/btrace_handler/src/TraceCoreSubscriber.cpp	Fri Oct 08 14:56:39 2010 +0300
@@ -0,0 +1,145 @@
+// 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
+
+
+#include "TraceCore.h"
+#include "TraceCoreSubscriber.h"
+#include "TraceCoreRouter.h"
+#include "TraceCoreDebug.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "TraceCoreSubscriberTraces.h"
+#endif
+
+
+
+/**
+ * Constructor
+ */
+EXPORT_C DTraceCoreSubscriber::DTraceCoreSubscriber()
+: iMessageSender( NULL )
+    {
+    }
+
+
+/**
+ * Destructor
+ */
+EXPORT_C DTraceCoreSubscriber::~DTraceCoreSubscriber()
+    {
+    iMessageSender = NULL;
+    Unsubscribe();
+    }
+
+/**
+ * Subscribes to a message by message ID / protocol ID
+ * depending of the header format. First byte of aMessageID is always used
+ * for header format.
+ * 
+ * @param aMessageId The message ID to be subscribed
+ * @param aMsgFormat Message format e.g. EMessageHeaderFormatOst
+ * 
+ */
+EXPORT_C TInt DTraceCoreSubscriber::Subscribe( TUint32 aMessageID, TMessageHeaderFormat aHeaderFormat )
+    {
+    TInt ret(KErrNone);
+    // Use MSByte only for header format
+    TUint32 combined = aHeaderFormat << 24 | (aMessageID & 0x00FFFFFF); // CodForChk_Dis_Magic
+    DTraceCoreSubscriber::Subscribe( combined );
+    return ret;
+    }
+
+/**
+ * Subscribes to a message by message ID
+ * 
+ * @param aMessageId The message ID to be subscribed
+ */
+EXPORT_C TInt DTraceCoreSubscriber::Subscribe( TUint32 aMessageID )
+    {
+    OstTrace1( TRACE_BORDER, DTRACECORESUBSCRIBER_SUBSCRIBE_ENTRY, "> DTraceCoreSubscriber::Subscribe 0x%x", aMessageID );
+    TInt ret = KErrGeneral;
+    DTraceCore* traceCore = DTraceCore::GetInstance();
+    if ( traceCore != NULL )
+        {
+        TRoutingItem routingItem;
+        
+        // If MSByte is empty it is Proprietary message -> Add Proprietary header format id
+        // Otherwise take it from aMessageId (MSByte)
+        if( !(aMessageID & 0xFF000000) ) // CodForChk_Dis_Magic explained in comment
+            {
+            routingItem.iMsgFormat = EMessageHeaderFormatProprietary;
+            }
+        else
+            {
+            // Extract Header Format from aMessageID
+            routingItem.iMsgFormat = (aMessageID >> 24) & 0x000000FF; // CodForChk_Dis_Magic
+            }
+        
+        // Remove Header format
+        aMessageID = (aMessageID & 0x00FFFFFF); // CodForChk_Dis_Magic
+        
+        routingItem.iMessageID = aMessageID;
+        routingItem.iSubscriber = this;
+           
+        ret = traceCore->GetRouter().Subscribe( routingItem );
+        }
+    OstTrace1( TRACE_API, DTRACECORESUBSCRIBER_SUBSCRIBE_EXIT, "DTraceCoreSubscriber::Subscribe. Return code:%d", ret );
+    return ret;
+    }
+    
+
+/**
+ * Unsubscribes a message ID
+ * 
+ * @param aMessageId The message ID to be unsubscribed
+ */
+EXPORT_C void DTraceCoreSubscriber::Unsubscribe( TUint32 aMessageID )
+    {
+    OstTrace1( TRACE_BORDER, DTRACECORESUBSCRIBER_UNSUBSCRIBE_ENTRY, "> DTraceCoreSubscriber::Unsubscribe. MsgId:%d", aMessageID );
+    DTraceCore* traceCore = DTraceCore::GetInstance();
+    if ( traceCore != NULL )
+        {
+        TRoutingItem routingItem;
+        routingItem.iMessageID = aMessageID;
+        routingItem.iSubscriber = this;
+        traceCore->GetRouter().Unsubscribe( routingItem );
+        }
+    }
+
+
+/**
+ * Called by router to set the message sender interface
+ */
+void DTraceCoreSubscriber::SetMessageSender( MTraceCoreMessageSender& aMessageSender )
+    {
+    iMessageSender = &aMessageSender;
+    }
+
+
+/**
+ * Unsubscribes all message ID's of this subscriber
+ */
+void DTraceCoreSubscriber::Unsubscribe()
+    {
+    DTraceCore* traceCore = DTraceCore::GetInstance();
+    
+    // Unsubsribe if TraceCore exists
+    if ( traceCore != NULL )
+        {
+        traceCore->GetRouter().Unsubscribe( *this );
+        }
+    }
+
+// End of File