adaptationlayer/tsy/nokiatsy_dll/src/cmmphonetsender.cpp
changeset 0 63b37f68c1ce
child 5 8ccc39f9d787
--- /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
+
+
+