diff -r a151135b0cf9 -r aa2539c91954 tracesrv/tracecore/btrace_handler/src/TraceCoreSubscriber.cpp --- /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