diff -r 0aa8cc770c8a -r 4a793f564d72 localconnectivityservice/dun/plugins/src/ir/DunIrPlugin.cpp --- a/localconnectivityservice/dun/plugins/src/ir/DunIrPlugin.cpp Tue Aug 31 16:03:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,340 +0,0 @@ -/* -* Copyright (c) 2006-2008 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: DUN Infrared plugin -* -*/ - - -#include "DunIrPlugin.h" -#include "DunUtils.h" -#include "DunDebug.h" - -_LIT( KIrdaCsy, "IRCOMM" ); -_LIT( KIrdaCsy0, "IRCOMM::0" ); -_LIT( KIrChannelName, "DUNIR::0" ); - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CDunIrPlugin::CDunIrPlugin -// --------------------------------------------------------------------------- -// -CDunIrPlugin::CDunIrPlugin() : - iServer( NULL ), - iTransporter( NULL ) - { - } - -// --------------------------------------------------------------------------- -// Destructor. -// --------------------------------------------------------------------------- -// -CDunIrPlugin::~CDunIrPlugin() - { - FTRACE(FPrint( _L( "CDunIrPlugin::~CDunIrPlugin()" ) )); - Uninitialize(); - FTRACE(FPrint( _L( "CDunIrPlugin::~CDunIrPlugin() complete" ) )); - } - -// --------------------------------------------------------------------------- -// Gets state of this plugin -// --------------------------------------------------------------------------- -// -TDunPluginState CDunIrPlugin::PluginState() - { - return iServer->GetPluginStateByUid( KDunIrPluginUid ); - } - -// --------------------------------------------------------------------------- -// Constructs a listener object for this plugin -// --------------------------------------------------------------------------- -// -TInt CDunIrPlugin::ConstructListener() - { - FTRACE(FPrint(_L("CDunIrPlugin::ConstructListenerL()"))); - if ( PluginState() != EDunStateLoaded ) - { - FTRACE(FPrint(_L("CDunIrPlugin::ConstructListenerL() (not ready) complete"))); - return KErrNotReady; - } - ReportStateChangeUp( EDunStateTryListen ); - TInt retTemp = InitPort(); - if ( retTemp != KErrNone ) - { - FTRACE(FPrint(_L("CDunIrPlugin::ConstructListenerL() (ERROR) complete"))); - return retTemp; - } - ReportStateChangeUp( EDunStateListening ); - ReportStateChangeUp( EDunStateTryChannel ); - TRAPD( retTrap, AllocateChannelL() ); - if ( retTrap != KErrNone ) - { - iTransporter->FreeChannel( &iIrPort ); - FTRACE(FPrint(_L("CDunIrPlugin::ConstructListenerL() (trapped!) complete"))); - return retTrap; - } - ReportStateChangeUp( EDunStateChanneled ); - FTRACE(FPrint(_L("CDunIrPlugin::ConstructListenerL() complete"))); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// Sets new state -// New state must be one more than the old state -// --------------------------------------------------------------------------- -// -TInt CDunIrPlugin::ReportStateChangeUp( TDunPluginState aPluginState ) - { - FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeUp()"))); - TInt retTemp = iServer->NotifyPluginStateChangeUp( aPluginState, - KDunIrPluginUid ); - if ( retTemp != KErrNone ) - { - FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeUp() (ERROR) complete"))); - return retTemp; - } - FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeUp() complete"))); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// Sets new state -// New state must be one less than the old state -// --------------------------------------------------------------------------- -// -TInt CDunIrPlugin::ReportStateChangeDown( TDunPluginState aPluginState ) - { - FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeDown()"))); - TInt retTemp = iServer->NotifyPluginStateChangeDown( aPluginState, - KDunIrPluginUid ); - if ( retTemp != KErrNone ) - { - FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeDown() (ERROR) complete"))); - return retTemp; - } - FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeDown() complete"))); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// Initializes one infrared port with role DCE -// --------------------------------------------------------------------------- -// -TInt CDunIrPlugin::InitPort() - { - FTRACE(FPrint( _L( "CDunIrPlugin::InitPort()" ) )); - TInt retTemp; - retTemp = CDunUtils::ConnectCommsServer( iCommServer ); - if ( retTemp != KErrNone ) - { - FTRACE(FPrint( _L( "CDunIrPlugin::InitPort() (ERROR) complete" ) )); - return retTemp; - } - retTemp = iCommServer.LoadCommModule( KIrdaCsy ); - if ( retTemp != KErrNone ) - { - FTRACE(FPrint(_L("CDunIrPlugin::InitPort() (load module) failed!") )); - return retTemp; - } - if ( iIrPort.SubSessionHandle() ) - { - FTRACE(FPrint(_L("CDunIrPlugin::InitPort (already exists!) complete") )); - return KErrAlreadyExists; - } - retTemp = iIrPort.Open( iCommServer, - KIrdaCsy0, - ECommExclusive, - ECommRoleDCE ); - if ( retTemp != KErrNone ) - { - FTRACE(FPrint(_L("CDunIrPlugin::InitPort() (open) failed!") )); - return retTemp; - } - return KErrNone; - } - -// --------------------------------------------------------------------------- -// Allocates a channel -// --------------------------------------------------------------------------- -// -void CDunIrPlugin::AllocateChannelL() - { - FTRACE(FPrint(_L("CDunIrPlugin::AllocateChannelL()"))); - HBufC8* channelName = HBufC8::NewMaxLC( KIrChannelName().Length() ); - TPtr8 channelNamePtr = channelName->Des(); - channelNamePtr.Copy( KIrChannelName ); - iTransporter->AllocateChannelL( &iIrPort, - KDunIrPluginUid, - channelNamePtr, - ETrue ); - iTransporter->AddConnMonCallbackL( &iIrPort, - this, - EDunReaderUpstream, - EFalse ); - iTransporter->AddConnMonCallbackL( &iIrPort, - this, - EDunWriterUpstream, - EFalse ); - iTransporter->AddConnMonCallbackL( &iIrPort, - this, - EDunReaderDownstream, - EFalse ); - iTransporter->AddConnMonCallbackL( &iIrPort, - this, - EDunWriterDownstream, - EFalse ); - iTransporter->IssueTransferRequestsL( &iIrPort ); - CleanupStack::PopAndDestroy( channelName ); - FTRACE(FPrint(_L("CDunIrPlugin::AllocateChannelL() complete"))); - } - -// --------------------------------------------------------------------------- -// Uninitializes this plugin -// --------------------------------------------------------------------------- -// -TInt CDunIrPlugin::Uninitialize() - { - FTRACE(FPrint(_L("CDunIrPlugin::Uninitialize()" ))); - ReportStateChangeDown( EDunStateTryUninitialize ); - if ( iIrPort.SubSessionHandle() ) - { - iTransporter->FreeChannel( &iIrPort ); - iIrPort.SetSignals( 0, KSignalDCEOutputs ); - iIrPort.Close(); - } - if ( iCommServer.Handle() ) - { - iCommServer.UnloadCommModule( KIrdaCsy ); - iCommServer.Close(); - } - ReportStateChangeUp( EDunStateUninitialized ); - ReportStateChangeUp( EDunStateTryLoad ); - ReportStateChangeUp( EDunStateLoaded ); - FTRACE(FPrint(_L("CDunIrPlugin::Uninitialize() complete" ))); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// From class MDunLocalMediaPlugin. -// CDunIrPlugin::ConstructL -// --------------------------------------------------------------------------- -// -void CDunIrPlugin::ConstructL( MDunServerCallback* aServer, - CDunTransporter* aTransporter ) - { - FTRACE(FPrint(_L("CDunIrPlugin::ConstructL()"))); - if ( !aServer || !aTransporter ) - { - FTRACE(FPrint(_L("CDunIrPlugin::ConstructL() not initialized!"))); - User::Leave( KErrGeneral ); - } - iServer = aServer; - iTransporter = aTransporter; - FTRACE(FPrint(_L("CDunIrPlugin::ConstructL() complete"))); - } - -// --------------------------------------------------------------------------- -// From class MDunLocalMediaPlugin. -// Gets called when server changes a plugin's state -// --------------------------------------------------------------------------- -// -TInt CDunIrPlugin::NotifyServerStateChange( TDunPluginState aPluginState ) - { - FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange()"))); - TInt retTemp; - switch ( aPluginState ) - { - case EDunStateTryListen: - if ( PluginState() != EDunStateLoaded ) - { - FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() (not ready) complete"))); - return KErrNotReady; - } - // Change to listening mode - retTemp = ConstructListener(); - if ( retTemp != KErrNone ) - { - FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() (ERROR) complete (%d)"), retTemp)); - return retTemp; - } - break; - case EDunStateTryUninitialize: - if ( PluginState() == EDunStateUninitialized ) - { - FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() (not ready) complete"))); - return KErrNotReady; - } - // Uninitialize - retTemp = Uninitialize(); - if ( retTemp != KErrNone ) - { - FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() (ERROR) complete (%d)"), retTemp)); - return retTemp; - } - break; - default: - FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() (unknown state) complete"))); - return KErrNotSupported; - } - FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() complete"))); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// From class MDunLocalMediaPlugin. -// Gets called when server needs to know the active connection -// --------------------------------------------------------------------------- -// -TConnId CDunIrPlugin::ActiveConnection() - { - FTRACE(FPrint(_L("CDunIrPlugin::ActiveConnection()"))); - FTRACE(FPrint(_L("CDunIrPlugin::ActiveConnection() (not found) complete"))); - return NULL; - } - -// --------------------------------------------------------------------------- -// From class MDunConnMon. -// Gets called when line status changes or when any type of error is detected -// --------------------------------------------------------------------------- -// -void CDunIrPlugin::NotifyProgressChangeL( - TConnId aConnId, - TDunConnectionReason /*aConnReason*/ ) - { - FTRACE(FPrint( _L( "CDunIrPlugin::NotifyProgressChangeL()" ) )); - RComm* irConn = static_cast( aConnId ); - if ( &iIrPort != irConn ) - { - FTRACE(FPrint( _L( "CDunIrPlugin::NotifyProgressChangeL() (not found) complete")) ); - User::Leave( KErrNotFound ); - } - // Now indications are down indications from local media side - FTRACE(FPrint( _L( "CDunIrPlugin::NotifyProgressChangeL() restart plugin" ) )); - iServer->NotifyPluginRestart( KDunIrPluginUid ); - FTRACE(FPrint( _L( "CDunIrPlugin::NotifyProgressChangeL() complete")) ); - } - -// ======== GLOBAL FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// NewLocalPluginL implements factory construction for -// the class CDunIrPlugin. -// The function is exported at ordinal 1. -// Returns: Pointer: The new instance of CDunIrPlugin -// --------------------------------------------------------------------------- -// -EXPORT_C MDunLocalMediaPlugin* NewLocalPluginL() - { - return new (ELeave) CDunIrPlugin; - }