diff -r f92a4f87e424 -r 012cc2ee6408 usbmgmt/usbmgrtest/t_ncm/src/simpancommand.cpp --- a/usbmgmt/usbmgrtest/t_ncm/src/simpancommand.cpp Tue Aug 31 17:01:47 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,269 +0,0 @@ -/* -* Copyright (c) 2002-2009 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: -* -*/ - -/** @file - @internalComponent - @test - */ - -#include - -#include "simpancommand.h" -#include "ncmtestconsole.h" - -static _LIT_SECURITY_POLICY_PASS(KAllowAllPolicy); -static _LIT_SECURITY_POLICY_C1(KNetworkControlPolicy, ECapabilityNetworkControl); - -_LIT(KSimPANCommandActive, "Simulate PAN connection is active"); -_LIT(KSimPANCommandNone, "Simulate PAN connection is not active"); - -CSimPANCommand* CSimPANCommand::NewL(CUsbNcmConsole& aTestConsole, TUint aKey) - { - LOG_STATIC_FUNC_ENTRY - - CSimPANCommand* self = new(ELeave) CSimPANCommand(aTestConsole, aKey); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } -CSimPANCommand::~CSimPANCommand() - { - Cancel(); - iNcmExclusiveProp.Close(); - } - -CSimPANCommand::CSimPANCommand(CUsbNcmConsole& aTestConsole, TUint aKey) - : CNcmCommandBase(EPriorityStandard, aTestConsole, aKey) - { - } - -void CSimPANCommand::ConstructL() - { - //Attach the property of Exclusive state - User::LeaveIfError(iNcmExclusiveProp.Attach(KC32ExeSid, KIPBearerCoexistenceProperty)); - CActiveScheduler::Add(this); - iNcmExclusiveProp.Subscribe(iStatus); - SetActive(); - - //Get the current value of exclusive state - TInt state; - TInt err = iNcmExclusiveProp.Get(state); - switch(err) - { - case KErrNotFound: - //The property is not defined. means BtPAN and Ncm didn't start. - DisplayExclusive(ENoneIsActive); - break; - case KErrNone: - //Display the exclusive state on main console - DisplayExclusive(state); - break; - default: - User::LeaveIfError(err); - break; - } - - } - -void CSimPANCommand::RunL() -/** -Get the current exclusive state and update on main console when the state changed -*/ - { - LOG_FUNC - __FLOG_STATIC1(KSubSys, KLogComponent , _L8("CNcmExclusiveStateAO::RunL - iStatus = %d"), iStatus.Int()); - - User::LeaveIfError(iStatus.Int()); - - iNcmExclusiveProp.Subscribe(iStatus); - SetActive(); - - TInt exclusiveState; - TInt err = iNcmExclusiveProp.Get(exclusiveState); - - __FLOG_STATIC2(KSubSys, KLogComponent , _L8("Get[IPBearerCoexistence]=%d, err=%d"), exclusiveState, err); - - if(err == KErrNone) - { - //Display the exclusive state on main console - DisplayExclusive(exclusiveState); - } - } - -void CSimPANCommand::DoCancel() - { - iNcmExclusiveProp.Cancel(); - } - -TInt CSimPANCommand::RunError(TInt aError) - { - User::Panic(_L("CSimPANCommand"), aError); - return aError; - } - -void CSimPANCommand::DoCommandL() -/** -Main function of simualate Pan active/inactive. -It will try to get the exclusive state from P&S key. And set the value based on the iSetPAN. -There's three value for this P&S key: EExclusiveNone,ENcmOwned,EBtPanOwned - -If now the command is 'active PAN'(iSetPAN=ETrue), then set the value of property to Pan active. -If now the command is 'inactive PAN'(iSetPAN=EFalse), then set the value of property to Pan inactive. -*/ - { - LOG_FUNC - - //Get the mutex which used to protect the P&S key. - RMutex mtx; - TInt ret; - ret = mtx.CreateGlobal(KIPBearerCoexistenceMutex); - if (ret == KErrAlreadyExists) - { - ret = mtx.OpenGlobal(KIPBearerCoexistenceMutex); - } - User::LeaveIfError(ret); - __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Get Mutex, wait()")); - CleanupClosePushL(mtx); - mtx.Wait(); - - RProperty prop; - TInt state; - TBool bSet = ETrue; - - //Get the exclusive state. - ret = prop.Get(KC32ExeSid, KIPBearerCoexistenceProperty, state); - CleanupClosePushL(prop); - __FLOG_STATIC2(KSubSys, KLogComponent , _L8("Get Property[IPBearerCoexistence]: ret=%d, val=%d"), ret, state); - - switch(ret) - { - case KErrNotFound: - { - //The property not exists. (NCM not start.) - - __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Not define property yet. define it")); - CUsbNcmConsoleEvent* event = CUsbNcmConsoleEvent::NewL(); - event->iEvent.AppendFormat(_L("Not define property yet. define it.")); - iTestConsole.NotifyEvent(event); - - //Define the property - User::LeaveIfError(RProperty::Define(KC32ExeSid, KIPBearerCoexistenceProperty, RProperty::EInt, KAllowAllPolicy, KNetworkControlPolicy)); - __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Define Property[IPBearerCoexistence] ok")); - break; - } - case KErrNone: - { - //property exists. - if(state == ENcmIsActive) - { - //Ncm hold the key. PAN can't active. Do nothing in this command. - CUsbNcmConsoleEvent* event = CUsbNcmConsoleEvent::NewL(); - event->iEvent.AppendFormat(_L("NCM hold the P&S key!")); - iTestConsole.NotifyEvent(event); - bSet = EFalse; - } - break; - } - default: - { - //error when get P&S key. - CUsbNcmConsoleEvent* event = CUsbNcmConsoleEvent::NewL(); - event->iEvent.AppendFormat(_L("Get P&S key error! err = %d"), ret); - iTestConsole.NotifyEvent(event); - bSet = EFalse; - break; - } - } - - if(bSet) - { - //Set the property value - CUsbNcmConsoleEvent* event = CUsbNcmConsoleEvent::NewL(); - CleanupStack::PushL(event); - if(this->iSetPAN) - { - User::LeaveIfError(prop.Set(KC32ExeSid, KIPBearerCoexistenceProperty, EBTPanIsActive)); - __FLOG_STATIC1(KSubSys, KLogComponent , _L8("Set Property[IPBearerCoexistence]: val = %d"), EBTPanIsActive); - event->iEvent.AppendFormat(_L("Set PAN active! prop=%d"), EBTPanIsActive); - } - else - { - User::LeaveIfError(prop.Set(KC32ExeSid, KIPBearerCoexistenceProperty, ENoneIsActive)); - __FLOG_STATIC1(KSubSys, KLogComponent , _L8("Set Property[IPBearerCoexistence]: val = %d"), ENoneIsActive); - event->iEvent.AppendFormat(_L("Set PAN disactive! prop=%d"), ENoneIsActive); - } - CleanupStack::Pop(event); - iTestConsole.NotifyEvent(event); - - } - - CleanupStack::Pop(2, &mtx); //prop, mtx - mtx.Signal(); - prop.Close(); - mtx.Close(); - - } - -void CSimPANCommand::ChangeDescription() - { - if(iSetPAN) - { - SetDescription(KSimPANCommandActive()); - } - else - { - SetDescription(KSimPANCommandNone()); - } - } - -void CSimPANCommand::DisplayExclusive(TInt aState) -/** -Display the exclusive state on main console and change the description of command by the -value of aState - @param aState Exclusive state -*/ - { - TBuf exclusive; - iSetPAN = ETrue; - switch(aState) - { - case ENoneIsActive: - { - exclusive = _L("None "); - } - break; - case ENcmIsActive: - { - exclusive = _L("NCM "); - } - break; - case EBTPanIsActive: - { - exclusive = _L("BT PAN "); - //If Bt Pan is active, the command description should be 'disactive BT PAN' - iSetPAN = EFalse; - } - break; - default: - exclusive = _L(" "); - break; - } - - ChangeDescription(); - iTestConsole.SetDisplayItem(ENcmBtPanItem, exclusive); - }