--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/dataport/dataport_csy/src/dpbreak.cpp Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,219 @@
+/*
+* 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 "dpdef.h" // dataport definitions
+#include <pipeisi.h> // isi pipe
+#include "pep_comm_types.h" // structures for isi-message interface
+
+#include "dpdataport.h" // dataport main and c32 interface
+#include "dpbreak.h" // break handling
+#include "dpdataconfig.h" // configuration store
+#include "dpdatabuffer.h" // base class for rx and tx buffers
+#include "dpmif.h" // message interface
+#include "dppif.h" // pipe interface
+#include "dplog.h" // dataport logging
+
+#include <pipe_sharedisi.h>
+#include "osttracedefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "dpbreaktraces.h"
+#endif
+
+
+// LOCAL FUNCTION PROTOTYPES
+// none
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CDpBreak::CDpBreak
+// C++ default constructor.
+//
+// ---------------------------------------------------------
+CDpBreak::CDpBreak(
+ CDpDataPort& aDataPort ) :
+ iDataPort( aDataPort ),
+ iRx( iDataPort.Rx() ),
+ iBreakNotify( EFalse )
+ {
+ OstTrace0( TRACE_NORMAL, CDPBREAK_CDPBREAK, "CDpBreak::CDpBreak" );
+ LOGM(" CDpBreak::CDpBreak");
+
+ }
+
+// ---------------------------------------------------------
+// CDpBreak::~CDpBreak
+// Destructor
+// ---------------------------------------------------------
+CDpBreak::~CDpBreak()
+ {
+ OstTrace0( TRACE_NORMAL, DUP1_CDPBREAK_CDPBREAK, "CDpBreak::~CDpBreak" );
+ LOGM(" CDpBreak::~CDpBreak");
+
+ }
+
+// ---------------------------------------------------------
+// CDpBreak::InitL
+// This method initializes member variables
+// ---------------------------------------------------------
+//
+void CDpBreak::Init()
+ {
+ OstTrace0( TRACE_NORMAL, CDPBREAK_INIT, "CDpBreak::Init" );
+ LOGM(" CDpBreak::Init");
+
+ }
+
+// ---------------------------------------------------------
+// CDpBreak::CompleteBreakNotify
+// Break signal has been received from DCS and now we inform
+// the client about that by completing the nofify request.
+// ---------------------------------------------------------
+//
+TInt CDpBreak::CompleteBreakNotify()
+ {
+ OstTrace0( TRACE_NORMAL, CDPBREAK_COMPLETEBREAKNOTIFY, "CDpBreak::CompleteBreakNotify" );
+ LOGM(" CDpBreak::CompleteBreakNotify");
+
+ TUint8 signalType( iDataPort.DataConfig().DteTypeOfBreakSignal() );
+ TInt ret( KErrNone );
+
+ switch ( signalType )
+ {
+ case PEP_COMM_BREAK_DESTRUCT:
+ {
+ // Send break to client, clear DTE transmit buffers
+ iDataPort.BreakNotifyCompleted( KErrNone );
+ SetBreakNotify( EFalse );
+ iRx.Flush();
+ break;
+ }
+ case PEP_COMM_BREAK_EXPEDITED:
+ {
+ // Send break, then data
+ iDataPort.BreakNotifyCompleted( KErrNone );
+ SetBreakNotify( EFalse );
+ break;
+ }
+ case PEP_COMM_BREAK_NON_EXPEDITED:
+ {
+ // Send all RX data buffered before break, then break
+ iDataPort.SetRxBreakBytes( iRx.UsedBytes() );
+ break;
+ }
+ default:
+ {
+ LOG1(" ERROR - Unsupported break signal type: %d in Break::CompleteBreakNotify",
+ signalType );
+ OstTraceExt1( TRACE_NORMAL, DUP1_CDPBREAK_COMPLETEBREAKNOTIFY, "CDpBreak:: ERROR - Unsupported break signal type: %hhu in Break::CompleteBreakNotify", signalType );
+ ret = KErrGeneral;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// CDpBreak::GetBreakNotify
+// CDpCommPep::HandlePepStatusInd() method uses this to find
+// out, are we requested to notify the client about incoming
+// (DCS->Client) break signal.
+// ---------------------------------------------------------
+//
+void CDpBreak::GetBreakNotify(
+ TBool& aBreakNotify ) const
+ {
+ OstTrace0( TRACE_NORMAL, CDPBREAK_GETBREAKNOTIFY, "CDpBreak::GetBreakNotify" );
+ LOGM(" CDpBreak::GetBreakNotify");
+
+ aBreakNotify = iBreakNotify;
+ }
+
+// ---------------------------------------------------------
+// CDpBreak::SetBreakNotify
+// This method sets break notify status active or deactive.
+// Break notify status indicates, whether a received break
+// signal must be notified to the client.
+// ---------------------------------------------------------
+//
+void CDpBreak::SetBreakNotify(
+ const TBool aBreakNotify )
+ {
+ OstTrace0( TRACE_NORMAL, CDPBREAK_SETBREAKNOTIFY, "CDpBreak::SetBreakNotify" );
+ LOGM(" CDpBreak::SetBreakNotify");
+
+ iBreakNotify = aBreakNotify;
+ }
+
+// ---------------------------------------------------------
+// CDpDataPort::SendBreak
+// This method sends break to DCS. This method is called from
+// CDpDataPort::Break() and CDpTx2Pn::HandleReturnValueL().
+// NOTE: This method does not complete client's break request
+// ---------------------------------------------------------
+//
+TInt CDpBreak::SendBreak()
+ {
+ OstTrace0( TRACE_NORMAL, CDPBREAK_SENDBREAK, "CDpBreak::SendBreak" );
+ LOGM(" CDpBreak::SendBreak");
+
+ // Create PNS_PEP_STATUS_IND : PEP_COMM_IND_ID_BREAK message
+ TBuf8<SIZE_PNS_PEP_STATUS_IND> messageData;
+ // Pipe Handle
+ messageData.Append( iDataPort.Pif().PipeHandle() );
+ // PEP Type
+ messageData.Append( PN_PEP_TYPE_COMM );
+ // Indication ID
+ messageData.Append( PEP_COMM_IND_ID_BREAK );
+ // Filler bytes
+ messageData.Append( KDpPadding );
+ messageData.Append( KDpPadding );
+
+ // Send message
+#ifdef _DEBUG
+ TInt ret =
+#endif
+ iDataPort.Mif().SendMessage(
+ PN_PIPE,
+ iDataPort.CreateTransactionId(),
+ PNS_PEP_STATUS_IND,
+ messageData );
+
+ LOG(" <== PNS_PEP_STATUS_IND sent (PEP_COMM_IND_ID_BREAK)");
+ OstTrace0( TRACE_NORMAL, DUP1_CDPBREAK_SENDBREAK, "CDpBreak:: <== PNS_PEP_STATUS_IND sent (PEP_COMM_IND_ID_BREAK)" );
+
+
+#ifdef _DEBUG
+ if ( KErrNone != ret )
+ {
+ LOG1("Error isc api send %d", ret );
+ OstTrace1( TRACE_NORMAL, DUP2_CDPBREAK_SENDBREAK, "CDpBreak:: Error isc api send %d", ret );
+
+ }
+ // no else
+#endif
+
+ return KErrNone;
+}
+
+// ================= OTHER EXPORTED FUNCTIONS ==============
+// none
+
+// End of File