diff -r 63be7eb3fc78 -r f28ada11abbf wlanutilities/wlansniffer/aiplugin/src/wsflaunchaihelperactivewrapper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlanutilities/wlansniffer/aiplugin/src/wsflaunchaihelperactivewrapper.cpp Wed Sep 01 12:20:32 2010 +0100 @@ -0,0 +1,230 @@ +/* + * 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 "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: Implementation of CWsfLaunchAiHelperActiveWrapper. + * + */ + + +// INCLUDE FILES +#include "wsflogger.h" +#include "wsfmodel.h" +#include "wsfaicontroller.h" +#include "wsflaunchaihelperactivewrapper.h" + +// Category UID of AiHelper property +static const TUid KWsfAiHelperCategoryUid = { 0x10281CEB }; + +// key numbers within the property +static const TUint KWsfAiHelperExitCodeKey = 0; +static const TUint KWsfAiHelperIapIdKey = 1; + +/** +* Delay that we wait for the aihelper to terminate +*/ +static const TInt KTimerTickInterval = 1 * 1000 * 1000; + + +// ---------------------------------------------------------------------------- +// CWsfLaunchAiHelperActiveWrapper::CWsfLaunchAiHelperActiveWrapper +// ---------------------------------------------------------------------------- +// +CWsfLaunchAiHelperActiveWrapper::CWsfLaunchAiHelperActiveWrapper() : + CActive( EPriorityStandard ) // Standard priority + { + } + + +// ---------------------------------------------------------------------------- +// CWsfLaunchAiHelperActiveWrapper::NewLC +// ---------------------------------------------------------------------------- +// +CWsfLaunchAiHelperActiveWrapper* CWsfLaunchAiHelperActiveWrapper::NewLC( + CWsfModel* aModel, TWsfAiController &aController ) + { + LOG_ENTERFN( "CWsfLaunchAiHelperActiveWrapper::NewLC" ); + CWsfLaunchAiHelperActiveWrapper* self = + new (ELeave) CWsfLaunchAiHelperActiveWrapper(); + CleanupStack::PushL( self ); + self->ConstructL( aModel, aController ); + return self; + } + + +// ---------------------------------------------------------------------------- +// CWsfLaunchAiHelperActiveWrapper::NewL +// ---------------------------------------------------------------------------- +// +CWsfLaunchAiHelperActiveWrapper* CWsfLaunchAiHelperActiveWrapper::NewL( + CWsfModel* aModel, TWsfAiController &aController ) + { + LOG_ENTERFN( "CWsfLaunchAiHelperActiveWrapper::NewL" ); + CWsfLaunchAiHelperActiveWrapper* self = + CWsfLaunchAiHelperActiveWrapper::NewLC( aModel, aController ); + CleanupStack::Pop(); // self; + return self; + } + + +// ---------------------------------------------------------------------------- +// CWsfLaunchAiHelperActiveWrapper::ConstructL +// ---------------------------------------------------------------------------- +// +void CWsfLaunchAiHelperActiveWrapper::ConstructL( CWsfModel* aModel, + TWsfAiController &aController ) + { + LOG_ENTERFN( "CWsfLaunchAiHelperActiveWrapper::ConstructL" ); + CActiveScheduler::Add( this ); // Add to scheduler + iModel = aModel; + iController = &aController; + User::LeaveIfError( iTimer.CreateLocal() ); + User::LeaveIfError( iAiHelperAppExitCode.Attach( KWsfAiHelperCategoryUid, + KWsfAiHelperExitCodeKey ) ); + + User::LeaveIfError( iAiHelperAppIapId.Attach( KWsfAiHelperCategoryUid, + KWsfAiHelperIapIdKey ) ); + } + +// ---------------------------------------------------------------------------- +// CWsfLaunchAiHelperActiveWrapper::~CWsfLaunchAiHelperActiveWrapper +// ---------------------------------------------------------------------------- +// +CWsfLaunchAiHelperActiveWrapper::~CWsfLaunchAiHelperActiveWrapper() + { + LOG_ENTERFN( + "CWsfLaunchAiHelperActiveWrapper::~CWsfWLANListActiveWrapper" ); + Cancel(); // Cancel any request, if outstanding + // Delete instance variables if any + iAiHelperAppExitCode.Close(); + iAiHelperAppIapId.Close(); + iTimer.Close(); + } + +// ---------------------------------------------------------------------------- +// CWsfLaunchAiHelperActiveWrapper::DoCancel +// ---------------------------------------------------------------------------- +// +void CWsfLaunchAiHelperActiveWrapper::DoCancel() + { + iAiHelperAppExitCode.Cancel(); + iAiHelperAppIapId.Cancel(); + iTimer.Cancel(); + iStoppingHelper = iModel->CloseHelperApplication(); + } + +// ---------------------------------------------------------------------------- +// CWsfLaunchAiHelperActiveWrapper::Start +// ---------------------------------------------------------------------------- +// +void CWsfLaunchAiHelperActiveWrapper::Start( TWsfWlanInfo& aInfo, + TBool aConnectOnly, + TBool aTestAccessPoint ) + { + LOG_ENTERFN( "CWsfLaunchAiHelperActiveWrapper::Start" ); + iStoppingHelper = EFalse; + Cancel(); // Cancel any request, just to be sure + iState = EUninitialized; + iUsedInfo = aInfo; + iConnectOnly = aConnectOnly; + iTestAccessPoint = aTestAccessPoint; + + if ( iStoppingHelper ) + { + LOG_WRITE( "Helper was stopped - wait for a while" ); + iTimer.Cancel(); + iTimer.After( iStatus, KTimerTickInterval ); + } + else + { + LOG_WRITE( "Helper was not alive" ); + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrNone); + } + SetActive(); + } + +// ---------------------------------------------------------------------------- +// CWsfLaunchAiHelperActiveWrapper::RunL +// ---------------------------------------------------------------------------- +// +void CWsfLaunchAiHelperActiveWrapper::RunL() + { + LOG_ENTERFN( "CWsfLaunchAiHelperActiveWrapper::RunL" ); + if ( iStatus == KErrNone ) + { + if ( iState == EUninitialized ) + { + LOG_WRITE( "Start launching ai helper" ); + // register for notification + iAiHelperAppExitCode.Subscribe( iStatus ); + iModel->LaunchHelperApplicationL( iUsedInfo ); + iState = EInitialized; + SetActive(); // Tell scheduler a request is active + } + else if (iState == EInitialized) + { + TInt exitCode( KErrNone ); + iAiHelperAppExitCode.Get( exitCode ); + + LOG_WRITEF( "AiHelper returned %d", exitCode ); + + if ( exitCode == KErrNone ) + { + TInt iapId(0); + iAiHelperAppIapId.Get( iapId ); + iUsedInfo.iIapId = TUint32( iapId ); + LOG_WRITEF( "AiHelper iap id = %d", iapId ); + if ( iUsedInfo.iIapId ) + { + LOG_WRITE( "Iap id exist - connect" ); + iController->ConnectL( iUsedInfo, iConnectOnly, + iTestAccessPoint ); + } + else + { + LOG_WRITE( "No iap id from ai helper" ); + } + } + else + { + User::Leave(exitCode); + } + } + else + { + LOG_WRITEF( "iState = %d", iState ); + } + } + else + { + LOG_WRITEF( "CWsfLaunchAiHelperActiveWrapper iStatus = %d", + iStatus.Int() ); + } + } + +// ---------------------------------------------------------------------------- +// CWsfLaunchAiHelperActiveWrapper::RunError +// ---------------------------------------------------------------------------- +// +#ifdef _DEBUG +TInt CWsfLaunchAiHelperActiveWrapper::RunError( TInt aError ) + { + LOG_ENTERFN( "CWsfLaunchAiHelperActiveWrapper::RunError" ); + LOG_WRITEF( "aError = %d", aError ); +#else +TInt CWsfLaunchAiHelperActiveWrapper::RunError( TInt /*aError*/ ) + { +#endif + return KErrNone; + } +