--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmphonetsender.cpp Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,372 @@
+/*
+* Copyright (c) 2007-2008 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:
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <tisi.h>
+#include "cmmphonetsender.h"
+#include "cmmphonetreceiver.h"
+#include <ctsy/serviceapi/mmtsy_defaults.h>
+#include "tsylogger.h" // for logging purposes
+#include "osttracedefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cmmphonetsendertraces.h"
+#endif
+
+// EXTERNAL DATA STRUCTURES
+ // None
+
+// EXTERNAL FUNCTION PROTOTYPES
+ // None
+
+// CONSTANTS
+#ifdef OST_TRACE_COMPILER_IN_USE
+const TUint8 KBufferForOSTTracing = 100;
+#endif
+#ifdef TF_LOGGING_ENABLED
+const TUint8 KBufferForTFLogging = 130;
+#endif
+
+// MACROS
+ // None
+
+// LOCAL CONSTANTS AND MACROS
+ // None
+
+// MODULE DATA STRUCTURES
+ // None
+
+// LOCAL FUNCTION PROTOTYPES
+ // None
+
+// FORWARD DECLARATIONS
+ // None
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// TFLOG_PRINT_ISIMESSAGE
+// local function for priting ISI message contents
+// -----------------------------------------------------------------------------
+//
+#if defined (TF_LOGGING_ENABLED) || defined (OST_TRACE_COMPILER_IN_USE)
+static void TFLOG_PRINT_ISIMESSAGE( const TDesC8& aBuf )
+ {
+ _LIT( KTraceSpace, " " );
+
+ // Get the length of the ISI message
+ TInt length = aBuf.Length();
+
+#ifdef TF_LOGGING_ENABLED
+ TBuf<KBufferForTFLogging> msg;
+ _LIT( KTracePhonetSender, "TSY:Phonet Sender: [ " );
+ _LIT( KTraceBracketClose, "]" );
+
+ msg.Append( KTracePhonetSender );
+
+ if ( 250 < length )
+ {
+ // Print only 250 first bytes
+ length = 250;
+ }
+
+ for ( TInt i = 0; i < length; i++ )
+ {
+ msg.AppendNumFixedWidthUC( aBuf[i], EHex, 2 );
+ msg.Append( KTraceSpace );
+ if ( KLogSizeOfBuffer-10 < msg.Length() )
+ {
+ if ( i == ( length - 1 ) )
+ {
+ // Last number, append "]" character
+ msg.Append( KTraceBracketClose );
+ }
+
+ TFLOGTEXT( msg );
+ msg.SetLength( 0 );
+ }
+ }
+
+ if ( 0 < msg.Length() )
+ {
+ // Buffer contains data. Print also last line
+ msg.Append( KTraceBracketClose );
+ TFLOGTEXT( msg );
+ }
+#endif // TF_LOGGING_ENABLED
+
+ // Ost tracing
+#ifdef OST_TRACE_COMPILER_IN_USE
+ TBuf8<KBufferForOSTTracing> trace_msg;
+ TUint8 counter = 1;
+ TBool firstTime = ETrue;
+ for ( TInt i = 0; i < length; i++ )
+ {
+ trace_msg.AppendNumFixedWidthUC( aBuf[i], EHex, 2 );
+ trace_msg.Append( KTraceSpace );
+
+ if ( ( counter > 24 ) || // 25 bytes / line
+ ( ( i + 1 ) == length ) ) // All bytes collected
+ {
+ if ( ( firstTime ) &&
+ ( ( i + 1 ) == length ) ) // All bytes collected and traced
+ {
+ firstTime = EFalse;
+OstTraceExt1( TRACE_NORMAL, _TFLOG_PRINT_ISIMESSAGE, "Phonet Sender: [ %s]", trace_msg );
+ trace_msg.SetLength( 0 );
+ }
+ else if ( firstTime ) // 1st line of the trace
+ {
+ firstTime = EFalse;
+OstTraceExt1( TRACE_NORMAL, DUP1__TFLOG_PRINT_ISIMESSAGE, "Phonet Sender: [ %s", trace_msg );
+ trace_msg.SetLength( 0 );
+ }
+ else if ( ( i + 1 ) == length ) // The last line
+ {
+OstTraceExt1( TRACE_NORMAL, DUP4__TFLOG_PRINT_ISIMESSAGE, "Phonet Sender: %s]", trace_msg );
+ trace_msg.SetLength( 0 );
+ }
+ else // just print bytes
+ {
+OstTraceExt1( TRACE_NORMAL, DUP5__TFLOG_PRINT_ISIMESSAGE, "Phonet Sender: %s", trace_msg );
+ trace_msg.SetLength( 0 );
+ }
+ counter = 0;
+ }
+ counter++;
+ }
+#endif // OST_TRACE_COMPILER_IN_USE
+ }
+
+#else // TF_LOGGING_ENABLED || OST_TRACE_COMPILER_IN_USE
+
+#define TFLOG_PRINT_ISIMESSAGE(x)
+
+#endif // TF_LOGGING_ENABLED || OST_TRACE_COMPILER_IN_USE
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMmPhoNetSender::CMmPhoNetSender
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CMmPhoNetSender::CMmPhoNetSender()
+ :iSendBuffer( NULL ),
+ iSendBufferPtr( 0,0 )
+ {
+ TFLOGSTRING("TSY: CMmPhoNetSender::CMmPhoNetSender");
+OstTrace0( TRACE_NORMAL, CMMPHONETSENDER_CMMPHONETSENDER, "CMmPhoNetSender::CMmPhoNetSender" );
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPhoNetSender::~CMmPhoNetSender
+// Destructor, deletes all allocated resources.
+// -----------------------------------------------------------------------------
+//
+CMmPhoNetSender::~CMmPhoNetSender()
+ {
+ TFLOGSTRING("TSY: CMmPhoNetSender::~CMmPhoNetSender");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPHONETSENDER_CMMPHONETSENDER, "CMmPhoNetSender::~CMmPhoNetSender" );
+ delete iSendBuffer;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPhoNetSender::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CMmPhoNetSender* CMmPhoNetSender::NewL
+ (
+ RIscApi* aPn // Pointer to the IscApi
+ )
+ {
+ TFLOGSTRING("TSY: CMmPhoNetSender::NewL");
+OstTrace0( TRACE_NORMAL, CMMPHONETSENDER_NEWL, "CMmPhoNetSender::NewL" );
+
+ CMmPhoNetSender* phoNetSender = NULL;
+
+ if ( NULL != aPn )
+ {
+ phoNetSender = new( ELeave ) CMmPhoNetSender();
+ CleanupStack::PushL( phoNetSender );
+ phoNetSender->iPhoNet = aPn;
+ phoNetSender->ConstructL();
+ CleanupStack::Pop( phoNetSender );
+ }
+
+ return phoNetSender;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPhoNetSender::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CMmPhoNetSender::ConstructL()
+ {
+ TFLOGSTRING("TSY: CMmPhoNetSender::ConstructL");
+OstTrace0( TRACE_NORMAL, CMMPHONETSENDER_CONSTRUCTL, "CMmPhoNetSender::ConstructL" );
+ iSendBuffer = HBufC8::NewL( KMaxSendBufferSize );
+ iSendBufferPtr.Set( iSendBuffer->Des() );
+
+ TFLOGSTRING2("TSY: iSendBuffer len=%d", iSendBuffer->Length());
+OstTrace1( TRACE_NORMAL, DUP1_CMMPHONETSENDER_CONSTRUCTL, "CMmPhoNetSender::ConstructL;iSendBuffer->Length=%d", iSendBuffer->Length() );
+ TFLOGSTRING3("TSY: iSendBufferPtr len=%d maxlen=%d",
+ iSendBufferPtr.Length(),
+ iSendBufferPtr.MaxLength());
+OstTrace1( TRACE_NORMAL, DUP2_CMMPHONETSENDER_CONSTRUCTL, "CMmPhoNetSender::ConstructL;iSendBufferPtr.MaxLength=%d", iSendBufferPtr.MaxLength() );
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPhoNetSender::SendBufferDes
+// Description: Returns pointer to buffer for ISI message construction
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TDes8& CMmPhoNetSender::SendBufferDes()
+ {
+OstTrace0( TRACE_NORMAL, CMMPHONETSENDER_SENDBUFFERDES, "CMmPhoNetSender::SendBufferDes" );
+ return iSendBufferPtr;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPhoNetSender::Send
+// Sends a message to the PhoNet if PhonetSender is not blocked
+// for example by the object of type CMmPhoneTsy (out of memory situation).
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoNetSender::Send
+ (
+ const TDesC8& aMsg // ISI message to be sent to Phonet
+ )
+ {
+ TFLOGSTRING("TSY: CMmPhoNetSender::Send");
+OstTrace0( TRACE_NORMAL, CMMPHONETSENDER_SEND, "CMmPhoNetSender::Send" );
+
+ TInt ret( KErrServerBusy );
+
+ ret = iPhoNet->Send( aMsg );
+
+ // If sending failed
+ if ( KErrNone != ret )
+ {
+ // Return general error value to client hiding the real Phonet
+ // problem. There is no need to identify the problem more clearly
+ // above MM API.
+ ret = KErrGeneral;
+ }
+
+ TFLOG_PRINT_ISIMESSAGE( aMsg );
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPhoNetSender::Send
+// Send ISI message, given resource, transaction message id and contents
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoNetSender::Send
+ (
+ TInt aResource, // ISI resource (server)
+ TInt aTransactionId, // ISI transaction ID
+ TInt aMessageId, // ISI message ID
+ const TDesC8& aData // Data part of ISI message
+ )
+ {
+ TFLOGSTRING("TSY: CMmPhoNetSender::Send (resource+transaction+data)");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPHONETSENDER_SEND, "CMmPhoNetSender::Send (resource+transaction+data)" );
+
+ // We shall use send buffer
+ TDes8& buffer( SendBufferDes() );
+ buffer.Zero();
+ const TInt header_size( 10 ); // Header + transaction id + message id
+ TIsiSend msg( buffer, header_size + aData.Length() );
+ msg.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, aResource );
+ msg.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, aMessageId );
+ msg.Set8bit( ISI_HEADER_OFFSET_TRANSID, aTransactionId );
+ msg.CopyData( header_size, aData );
+
+ // Add padding
+ while ( buffer.Length() % 4 )
+ {
+ buffer.Append( 0x00 );
+ }
+
+ return Send( msg.Complete() );
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPhoNetSender::EventSend
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoNetSender::EventSend
+ (
+ const TDesC8& aEvent
+ )
+ {
+ TFLOGSTRING("TSY: CMmPhoNetSender::EventSend");
+OstTrace0( TRACE_NORMAL, CMMPHONETSENDER_EVENTSEND, "CMmPhoNetSender::EventSend" );
+
+ return iPhoNet->CustomFunction( EIscNokiaEventSend, (TDes8*)&aEvent );
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPhoNetSender::SubscribeEvents
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoNetSender::SubscribeEvents
+ (
+ const TDesC8& aEvents // Events to be subscribed
+ )
+ {
+ TFLOGSTRING("TSY: CMmPhoNetSender::SubscribeEvents");
+OstTrace0( TRACE_NORMAL, CMMPHONETSENDER_SUBSCRIBEEVENTS, "CMmPhoNetSender::SubscribeEvents" );
+
+ return iPhoNet->CustomFunction( EIscNokiaEventSubscribe, (TDes8*)&aEvents );
+ }
+
+// -----------------------------------------------------------------------------
+// CMmPhoNetSender::GetChannelInfo
+//
+// -----------------------------------------------------------------------------
+//
+TInt CMmPhoNetSender::GetChannelInfo
+ (
+ const TUint16 aChannel,
+ TDes8& aInfo
+ )
+ {
+ TFLOGSTRING("TSY: CMmPhoNetSender::GetChannelInfo");
+OstTrace0( TRACE_NORMAL, CMMPHONETSENDER_GETCHANNELINFO, "CMmPhoNetSender::GetChannelInfo" );
+
+ return iPhoNet->GetChannelInfo( aChannel, aInfo );
+ }
+
+// ==================== OTHER EXPORTED FUNCTIONS ===============================
+ // None
+
+// End of File
+
+
+