diff -r 000000000000 -r 63b37f68c1ce connectivitylayer/isce/isirouter_dll/src/isiif.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/connectivitylayer/isce/isirouter_dll/src/isiif.cpp Fri Nov 06 17:28:23 2009 +0000 @@ -0,0 +1,181 @@ +/* +* Copyright (c) 2009 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 "isiif.h" // For DISIIf +#include "isiroutertrace.h" // For C_TRACE, ASSERT_RESET.. and fault codes +#include "isikernelchannel.h" // For DISIKernelChannel +#include // For TDfc +#include // For __ASSERT_CRITICAL + + +// Constants +const TInt KFirstParam( 0 ); +const TInt KSecondParam( 1 ); +const TInt KThirdParam( 2 ); +const TInt KOneParam( 2 ); +const TInt KTwoParams( 2 ); +const TInt KThreeParams( 3 ); + + +// Faults +enum TISIIfFaults + { + EISIIfMemAllocFailure = 0x01, + EISIIfMemAllocFailure2, + EISIIfNotThreadContext, + EISIIfNotThreadContext2, + EISIIfNotNullPtr, + EISIIfWrongResponseToRequest, + EISIIfWrongResponseToRequest2, + EISIIfWrongResponseToRequest3, + EISIIfWrongResponseToRequest4, + EISIIfWrongResponseToRequest5, + EISIIfWrongResponseToRequest6, + }; + + +EXPORT_C MISIIf* MISIIf::NewISIIf( const TInt32 aUID, TUint8& aObjId ) + { + return DISIIf::NewF( aUID, aObjId ); + } + +DISIIf* DISIIf::NewF( const TInt32 aUID, TUint8& aObjId ) + { + C_TRACE((_T("DISIIf::NewF>") )); + DISIIf* tmp = new DISIIf( aUID, aObjId ); + ASSERT_RESET_ALWAYS( tmp, ( EISIIfMemAllocFailure | EDISIIfTraceId << KClassIdentifierShift ) ); + C_TRACE((_T("DISIIf::NewF 0x%x<"), tmp )); + return tmp; + } + +DISIIf::DISIIf( const TInt32 aUID, TUint8& aObjId ) + { + C_TRACE( ( _T( "DISIIf::DISIIf 0x%x>" ), this ) ); + __ASSERT_CRITICAL;// From kern_priv.h published partner + ASSERT_THREAD_CONTEXT_ALWAYS( ( EISIIfNotThreadContext | EDISIIfTraceId << KClassIdentifierShift ) ); + iKernelChannel = new DISIKernelChannel( aObjId ); + ASSERT_RESET_ALWAYS( iKernelChannel, ( EISIIfMemAllocFailure2 | EDISIIfTraceId << KClassIdentifierShift ) ); + TAny* params[ KTwoParams ]; //TODO should probably take process identifier into this to identify binary + params[ KFirstParam ] = reinterpret_cast( aUID ); + params[ KSecondParam ] = reinterpret_cast( &aObjId ); + // Get's the current thread's thread message. + TThreadMessage& m = Kern::Message(); + m.iValue = EISIConnect; + m.iArg[ KFirstParam ] = params; + // Other asserts in kernel channel. + ASSERT_RESET_ALWAYS( ( KErrNone == iKernelChannel->HandleRequest( m ) ), ( EISIIfWrongResponseToRequest2 | EDISIIfTraceId << KClassIdentifierShift ) ); + C_TRACE( ( _T( "DISIIf::DISIIf 0x%x<" ), this ) ); + } + +DISIIf::~DISIIf() + { + C_TRACE( ( _T( "DISIIf::~DISIIf 0x%x>" ), this ) ); + // Get's the current thread's thread message. + TThreadMessage& m = Kern::Message(); + m.iValue = EISIDisconnect; + m.iArg[ KFirstParam ] = NULL; + // Other asserts in kernel channel. + ASSERT_RESET_ALWAYS( ( KErrNone == iKernelChannel->HandleRequest( m ) ), ( EISIIfWrongResponseToRequest | EDISIIfTraceId << KClassIdentifierShift ) ); + if( iKernelChannel ) + { + delete iKernelChannel; + iKernelChannel = NULL; + } + C_TRACE( ( _T( "DISIIf::~DISIIf 0x%x<" ), this ) ); + } + +TDes8& DISIIf::AllocateMsgBlock( const TUint16 aSize ) + { + C_TRACE( ( _T( "DISIIf::AllocateMsgBlock 0x%x %d>" ), this, aSize ) ); + TDes8* temp = NULL; + TInt size( aSize ); + TAny* params[ KTwoParams ]; + params[ KFirstParam ] = reinterpret_cast( &size ); + params[ KSecondParam ] = reinterpret_cast( &temp ); + // Get's the current thread's thread message. + TThreadMessage& m = Kern::Message(); + m.iValue = EISIAllocateBlock; + m.iArg[ KFirstParam ] = params; + // Other asserts in kernel channel. + ASSERT_RESET_ALWAYS( ( KErrNone == iKernelChannel->HandleRequest( m ) ), ( EISIIfWrongResponseToRequest3 | EDISIIfTraceId << KClassIdentifierShift ) ); + C_TRACE( ( _T( "DISIIf::AllocateMsgBlock 0x%x %d<" ), this, aSize ) ); + return *temp; + } + +void DISIIf::DeallocateMsgBlock( TDes8& aMsgBlock ) + { + C_TRACE( ( _T( "DISIIf::DeallocateMsgBlock 0x%x s %d>" ), this, &aMsgBlock ) ); + TAny* params[ KOneParam ]; + params[ KFirstParam ] = reinterpret_cast( &aMsgBlock ); + // Get's the current thread's thread message. + TThreadMessage& m = Kern::Message(); + m.iValue = EISIDeallocateBlock; + m.iArg[ KFirstParam ] = params; + ASSERT_RESET_ALWAYS( ( KErrNone == iKernelChannel->HandleRequest( m ) ), ( EISIIfWrongResponseToRequest4 | EDISIIfTraceId << KClassIdentifierShift ) ); + C_TRACE( ( _T( "DISIIf::DeallocateMsgBlock 0x%x s %d<" ), this, &aMsgBlock ) ); + } + +void DISIIf::Receive( TRequestStatus& aRxStatus, TDes8*& aRxMsg, const TDfc& aRxCompletedDfc ) + { + C_TRACE( ( _T( "DISIIf::Receive 0x%x s %d b 0x%x d 0x%x>" ), this, &aRxStatus, &aRxMsg, &aRxCompletedDfc ) ); + ASSERT_RESET_ALWAYS( !aRxMsg, ( EISIIfNotNullPtr | EDISIIfTraceId << KClassIdentifierShift ) ); + aRxStatus = KRequestPending; + TAny* params[ KThreeParams ]; + params[ KFirstParam ] = reinterpret_cast( &aRxStatus ); + params[ KSecondParam ] = reinterpret_cast( &aRxMsg ); + params[ KThirdParam ] = reinterpret_cast( &const_cast( aRxCompletedDfc ) ); + // Get's the current thread's thread message. + TThreadMessage& m = Kern::Message(); + m.iValue = EISIAsyncReceive; + m.iArg[ KFirstParam ] = params; + ASSERT_RESET_ALWAYS( ( KErrNone == iKernelChannel->HandleRequest( m ) ), ( EISIIfWrongResponseToRequest5 | EDISIIfTraceId << KClassIdentifierShift ) ); + C_TRACE( ( _T( "DISIIf::Receive 0x%x s %d b 0x%x d 0x%x<" ), this, &aRxStatus, &aRxMsg, &aRxCompletedDfc ) ); + } +void DISIIf::ReceiveCancel() + { + C_TRACE( ( _T( "DISIIf::ReceiveCancel 0x%x>" ), this ) ); + TThreadMessage& m = Kern::Message(); + m.iValue = KMaxTInt; + m.iArg[ KFirstParam ] = reinterpret_cast( EISIAsyncReceive ); + ASSERT_RESET_ALWAYS( ( KErrNone == iKernelChannel->HandleRequest( m ) ), ( EISIIfWrongResponseToRequest6 | EDISIIfTraceId << KClassIdentifierShift ) ); + C_TRACE( ( _T( "DISIIf::ReceiveCancel 0x%x<" ), this ) ); + } + +void DISIIf::Release() + { + C_TRACE( ( _T( "DISIIf::Release 0x%x>" ), this ) ); + __ASSERT_CRITICAL; + ASSERT_THREAD_CONTEXT_ALWAYS( ( EISIIfNotThreadContext2 | EDISIIfTraceId << KClassIdentifierShift ) ); + delete this; + C_TRACE( ( _T( "DISIIf::Release 0x%x<" ), this ) ); + } +TInt DISIIf::Send( const TDesC8& aTxMsg ) + { + C_TRACE( ( _T( "DISIIf::Send 0x%x m 0x%x>" ), this, &aTxMsg ) ); + TAny* params[ KOneParam ]; + params[ KFirstParam ] = reinterpret_cast( const_cast( &aTxMsg )); //TODO need const? + // Get's the current thread's thread message. + TThreadMessage& m = Kern::Message(); + m.iValue = EISISend; + m.iArg[ KFirstParam ] = params; + TInt retValue( iKernelChannel->HandleRequest( m ) ); + C_TRACE( ( _T( "DISIIf::Send 0x%x m 0x%x %d<" ), this, &aTxMsg, retValue ) ); + return retValue; + } + +// End of file