--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgrtest/t_ncm/src/setncmiapcommand.cpp Tue Aug 31 17:01:47 2010 +0300
@@ -0,0 +1,308 @@
+/*
+* 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 "setncmiapcommand.h"
+#include "ncmtestconsole.h"
+
+_LIT(KSetNcmIapCommandDescription, "Set Ncm Iap ID");
+
+CSetNcmIapCommand* CSetNcmIapCommand::NewL(CUsbNcmConsole& aTestConsole, TUint aKey)
+ {
+ LOG_STATIC_FUNC_ENTRY
+
+ CSetNcmIapCommand* self = new(ELeave) CSetNcmIapCommand(aTestConsole, aKey);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+CSetNcmIapCommand::~CSetNcmIapCommand()
+ {
+ EndWork();
+ }
+
+CSetNcmIapCommand::CSetNcmIapCommand(CUsbNcmConsole& aTestConsole, TUint aKey)
+ : CNcmCommandBase(EPriorityStandard, aTestConsole, aKey)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+void CSetNcmIapCommand::ConstructL()
+ {
+ SetDescription(KSetNcmIapCommandDescription());
+ }
+
+void CSetNcmIapCommand::DoCommandL()
+/**
+Main function of set ncm iap.
+It will start a new console to display all Iaps in commsdb and current setting for ncm.
+Then prompt user to input ncm iap id and the index of this iap will be placed in central
+repository. Press 'ESC' for give up this function. After the setting is successful, the
+console will be destroyed and return to main console
+*/
+ {
+ LOG_FUNC
+
+ if(!IsActive())
+ {
+ //If the console has existed, close the old console. The work on old console will be
+ //gived up.
+ if(iConsole)
+ {
+ __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Close old console"));
+ EndWork();
+ }
+ InitWorkL();
+
+ iConsole->Printf(_L("Press \'ESC\' to exit without change\n"));
+
+ //Display all iaps in commsdb
+ ListAllNcmIapL();
+
+ //wait user input iap id
+ iConsole->Printf(KSetIapMemo());
+ iCommandState = EIapId;
+ iConsole->Read(iStatus);
+ SetActive();
+ }
+ }
+
+void CSetNcmIapCommand::ListAllNcmIapL()
+/**
+Display all iaps in commsdb on console and get current config in cental repoistory
+*/
+ {
+ LOG_FUNC
+
+ //Display commsdb's iaps
+ TInt iapcount = iTestConsole.DrawAvailableIapsL();
+
+ TInt iapId = 0;
+
+ //Get iap config from central repository
+ TInt err = iRepository->FindL(KPartialKey, KMask, iRows);
+ if(err == KErrNone)
+ {
+ TUint count = iRows.Count();
+ for (TInt row = 0; row < count; ++row)
+ {
+ // Read each IAP ID
+ User::LeaveIfError(iRepository->Get(iRows[row], iapId));
+ __FLOG_STATIC2(KSubSys, KLogComponent , _L8("index[%d]: iap = %d"), row, iapId);
+ iConsole->Printf(_L("index[%d]: iap = %d\n"), row, iapId);
+ }
+ }
+ else
+ {
+ __FLOG_STATIC1(KSubSys, KLogComponent , _L8("FindL() err[%d]"), err);
+ }
+ }
+
+void CSetNcmIapCommand::GetDefaultIapL(TInt& aDefaultIap)
+/**
+Get the default iap id (The first one) stored in central repository.
+@return the default iap id
+*/
+ {
+ LOG_FUNC
+ aDefaultIap = 13;
+ return ;
+ }
+
+void CSetNcmIapCommand::SetNcmIapL()
+/**
+Set iap id into central repository. The iap id is iIapId. The place of iap id in central
+repository is iIndex. iIndex is started from 0. If the iIndex is not exist in central
+repository, iIapId will be placed at last place.
+*/
+ {
+ LOG_FUNC
+
+ TUint count = iRows.Count();
+ __FLOG_STATIC1(KSubSys, KLogComponent , _L8("now iap count = %d"), count);
+
+ TInt idx;
+ if(iIndex >= count)
+ {
+ //iIndex is not exist in central repository, create a new entry in central repository
+ idx = iRows[count-1]+1;
+ User::LeaveIfError(iRepository->Create(idx, iIapId));
+ __FLOG_STATIC2(KSubSys, KLogComponent , _L8("add iap: idx = %d, iIapId"), idx, iIapId);
+ }
+ else
+ {
+ //iIndex exists, just set in the new value
+ idx = iRows[iIndex];
+ User::LeaveIfError(iRepository->Set(idx, iIapId));
+ __FLOG_STATIC2(KSubSys, KLogComponent , _L8("set iap: aIdx = %d, iIapId"), idx, iIapId);
+ }
+
+ }
+
+void CSetNcmIapCommand::RunL()
+ {
+ LOG_FUNC
+ __FLOG_STATIC1(KSubSys, KLogComponent , _L8("CSetNcmIapCommand::RunL - iStatus = %d"), iStatus.Int());
+
+ User::LeaveIfError(iStatus.Int());
+
+ TKeyCode code = iConsole->KeyCode();
+ switch(code)
+ {
+ case EKeyEnter:
+ {
+ iConsole->Printf(_L("\n"));
+
+ //get value
+ TInt val;
+ TBool typeErr = EFalse;
+ if(iChars.Length() != 0)
+ {
+ TLex lex(iChars);
+ lex.SkipSpaceAndMark();
+
+ if(KErrNone != lex.Val(val))
+ {
+ typeErr = ETrue;
+ }
+ }
+ else
+ {
+ typeErr = ETrue;
+ }
+
+ if(typeErr)
+ {
+ //Prompt user input again
+ iConsole->Printf(KErrInput());
+ iConsole->Printf(KSetIapMemo());
+ iChars.SetLength(0);
+ __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Input error"));
+ break;
+ }
+
+ //The input is correct
+ __FLOG_STATIC1(KSubSys, KLogComponent , _L8("Get val = %d"), val);
+
+ if(iCommandState == EIapId)
+ {
+ //if the command state is wait iap id, now get the iap id, wait for iap index
+ iIapId = val;
+ iChars.SetLength(0);
+ iConsole->Printf(KSetIapIndexMemo());
+ iCommandState = EIapPriority;
+ }
+ else //(iCommandState == EIapPriority)
+ {
+ //if the command state is wait iap index, now the index. set into central repoistory.
+ //Then destroy the current console and update the value displayed on main console if the
+ //setting value is ncm default value.
+ iIndex = val;
+ SetNcmIapL();
+ EndWork();
+ if(iIndex == 0)
+ {
+ iTestConsole.SetLocalIapId(iIapId);
+ }
+ __FLOG_STATIC2(KSubSys, KLogComponent , _L8("Set Ncm Iap, idx = %d, id = %d"),
+ iIndex, iIapId);
+
+ return;
+ }
+ }
+ break;
+ case EKeyEscape:
+ //delete this;
+ EndWork();
+ return;
+ case EKeyBackspace:
+ if(iChars.Length() > 0)
+ {
+ iConsole->SetCursorPosRel(TPoint(-1, 0));
+ iConsole->ClearToEndOfLine();
+ iChars.SetLength(iChars.Length()-1);
+ }
+ break;
+ default:
+ iChars.Append(code);
+ iConsole->Printf(_L("%c"), code);
+ break;
+ }
+ iConsole->Read(iStatus);
+ SetActive();
+
+ }
+
+void CSetNcmIapCommand::DoCancel()
+ {
+ iConsole->ReadCancel();
+ }
+
+TInt CSetNcmIapCommand::RunError(TInt aError)
+ {
+ User::Panic(_L("CSetNcmIapCommand"), aError);
+ return aError;
+ }
+
+void CSetNcmIapCommand::InitWorkL()
+/**
+Initialize work. Including start a new console, create buf for getting user input, get repoistory handle.
+*/
+ {
+ LOG_FUNC
+
+ if(!iConsole)
+ {
+ iConsole = Console::NewL(_L("Set Ncm IAP Console"), TSize(-1,-1));
+ __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Create Console ok!"));
+
+ User::LeaveIfError(iChars.Create(KMaxNumOfChars));
+ __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Create iChars ok!"));
+
+ iRepository = CRepository::NewL(KNcmIapIdRepositoryUID);
+ __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Get CRepository ok!"));
+
+ iIapId = 1;
+ iIndex = 0;
+ }
+ }
+
+void CSetNcmIapCommand::EndWork()
+/**
+Finalize work. Including delete console, delete the buf used for getting user input, close repoistory handle.
+*/
+ {
+ LOG_FUNC
+
+ if(iConsole)
+ {
+ __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Destroy console..."));
+ Cancel();
+ iChars.Close();
+ iRows.Close();
+ delete iRepository;
+ delete iConsole;
+ iConsole = NULL;
+ __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Destroy console ok!"));
+ }
+ }
+