diff -r f92a4f87e424 -r 012cc2ee6408 usbmgmt/usbmgrtest/t_ncm/src/ncmtestconsole.cpp --- a/usbmgmt/usbmgrtest/t_ncm/src/ncmtestconsole.cpp Tue Aug 31 17:01:47 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,565 +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 "ncmtestconsole.h" -#include "ncmtestdefines.hrh" -#include "commandengine.h" -#include "devicewatcher.h" -#include "servicewatcher.h" -#include "ncmwatcher.h" -#include "exitcommand.h" -#include "setncmiapcommand.h" -#include "simpancommand.h" -#include "tcpcommand.h" - -#include -#include -#include -#include - -//#include -using namespace UsbNcm; - -//The app parameter -_LIT(KArgDemo, "DEMO"); - -//Set the display item length -//every display item has fixed length. It will be displayed screen permanently. -//The details about how to use display item is in CUsbNcmConsole::DrawL() -TInt gDisplayItemLength[] = { - DISPLAY_USB_SERVICE_STATE_LEN, //EUsbServiceStateItem - DISPLAY_USB_DEVICE_STATE_LEN, //EUsbDeviceStateItem - DISPLAY_NCM_CONN_STATE_LEN, //ENcmConnStatusItem - DISPLAY_NCM_CONN_IP_LEN, //ENcmConnIpItem - DISPLAY_UPLINK_CONN_STATE_LEN, //EUplinkConnStatusItem - DISPLAY_UPLINK_CONN_IP_LEN, //EUplinkConnIpItem - DISPLAY_NCM_BTPAN_LEN, //ENcmBtPanItem - DISPLAY_AGENT_STATE_LEN, //ENcmAgentStateItem - DISPLAY_AUTH_SETTING_LEN, //EAuthorisationSettingItem - DISPLAY_NCM_CONNECTION_STATE - }; - -void Panic(TInt aPanic) - { - User::Panic(_L("NcmTestConsole"), aPanic); - } - - -void RunConsoleL() - { - TInt cmdLineLength(User::CommandLineLength()); - HBufC* cmdLine = HBufC::NewMaxLC(cmdLineLength); - TPtr cmdLinePtr = cmdLine->Des(); - User::CommandLine(cmdLinePtr); - - TLex args(*cmdLine); - // args are separated by spaces - args.SkipSpace(); - - TPtrC cmdToken = args.NextToken(); - HBufC* tc = HBufC::NewLC(80); - *tc = cmdToken; - - TBool isDemo = EFalse; - - //Find if there is 'DEMO' or not. - while (tc->Length()) - { - TInt pos = tc->FindF(KArgDemo); - if ( pos != KErrNotFound ) - { - isDemo = ETrue; - break; - } - - // next parameter - *tc = args.NextToken(); - } - CleanupStack::PopAndDestroy(tc); - CleanupStack::PopAndDestroy(cmdLine); - - CUsbNcmConsole* console = CUsbNcmConsole::NewLC(isDemo); - console->StartL(); - CleanupStack::PopAndDestroy(console); - } - -TInt E32Main() - { - __UHEAP_MARK; - CTrapCleanup* cleanup = CTrapCleanup::New(); - CActiveScheduler* activeScheduler = new CActiveScheduler; - TInt err = KErrNoMemory; - if(cleanup && activeScheduler) - { - CActiveScheduler::Install(activeScheduler); - TRAP(err,RunConsoleL()); - } - delete activeScheduler; - delete cleanup; - __UHEAP_MARKEND; - return err; - } - -CUsbNcmConsoleEvent* CUsbNcmConsoleEvent::NewL() - { - CUsbNcmConsoleEvent* self = new(ELeave) CUsbNcmConsoleEvent(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - } - -CUsbNcmConsoleEvent::CUsbNcmConsoleEvent() - { - } - -CUsbNcmConsoleEvent::~CUsbNcmConsoleEvent() - { - iLink.Deque(); - iEvent.Close(); - } - -void CUsbNcmConsoleEvent::ConstructL() - { - User::LeaveIfError(iEvent.Create(NUM_CHARACTERS_ON_LINE-1)); - } - - -CUsbNcmConsole* CUsbNcmConsole::NewLC(TBool aDemo) -/** -Constructs a CUsbNcmConsole object. - @param aDemo Indicate start NCM control app and NCM automaticly or manually - -When iDemo is ETrue, means ncmtestconsole starts as a demo. It will ask user to set ncm iap and -uplink iap.Then user can experience the NCM function by plug/unplug usb cable. -*/ - { - LOG_STATIC_FUNC_ENTRY - - CUsbNcmConsole* self = new(ELeave) CUsbNcmConsole(aDemo); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -CUsbNcmConsole::~CUsbNcmConsole() - { - LOG_FUNC - - //If Ncm control app is not stopped, stop it. - //destroy all commands - delete iKeys; - - //destroy event list - TDblQueIter iter(iEventList); - CUsbNcmConsoleEvent* event = NULL; - while((event = iter++) != NULL) - { - delete event; - } - - //delete iStartWatcherCallback; - - //destroy all watches - delete iSharedStateWatcher; - delete iDeviceWatcher; - delete iServiceWatcher; - - iUsb.Close(); - - delete iConsole; - - //Destroy all display items - for(TInt i=0; iRegisterCommand(command); - //Get the default iap used by ncm - TInt defaultIap = 0; - ((CSetNcmIapCommand*)command)->GetDefaultIapL(defaultIap); - SetLocalIapId(defaultIap); - - //the command to simulate PAN actvie/inactive - command = CSimPANCommand::NewL(*this, 'p'); - iKeys->RegisterCommand(command); - - //the command to create a connection from PC to H4 and make data transfer - command = CTcpCommand::NewL(*this, 'v', ETrue, ETrue); - iKeys->RegisterCommand(command); - //the command to create a connection from H4 to PC and make data transfer - command = CTcpCommand::NewL(*this, 'i', ETrue, EFalse); - iKeys->RegisterCommand(command); - - command = CTcpCommand::NewL(*this , 'r', EFalse, ETrue); - iKeys->RegisterCommand(command); - command = CTcpCommand::NewL(*this , 's', EFalse, EFalse); - iKeys->RegisterCommand(command); - - //here to add new command - - //the command to quit - command = CExitCommand::NewL(*this, 'q'); - iKeys->RegisterCommand(command); - - //Monitor the status published by NCM agent - iSharedStateWatcher = CSharedStateWatcher::NewL(*this); - } - -void CUsbNcmConsole::StartL() - { - //Output the init state to screen - DrawL(); - //Do StartWatcherCommand if 'demo' is the command parameter - if(iDemo) - { -// iStartWatcherCallback->CallBack(); - } - CActiveScheduler::Start(); - } - -void CUsbNcmConsole::Stop() const - { - CActiveScheduler::Stop(); - } - -void CUsbNcmConsole::DoCancel() - { - } - -void CUsbNcmConsole::RunL() - { - DrawL(); - } - -TInt CUsbNcmConsole::RunError(TInt aError) - { - User::Panic(_L("CUsbNcmConsole"), aError); - return aError; - } - -void CUsbNcmConsole::ScheduleDraw(TUint aKey) -/** -Called by commands and monitors.To notify main console there's new infomation to show. - @param aKey Display type. '1'-'9' - display the command help - 'E' - display the events. - '0' - back from command help -*/ - { - iHelp = aKey; - if(!IsActive()) - { - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - } - } - -RUsb& CUsbNcmConsole::Usb() - { - return iUsb; - } - -void CUsbNcmConsole::SetLocalIapId(TInt aId) -/** -Set the Ncm Iap which will be monitored and displayed on screen - @param aId The Ncm Iap Id -*/ - { - iLocalIapId = aId; - ScheduleDraw('E'); - } - -void CUsbNcmConsole::NotifyEvent(CUsbNcmConsoleEvent* aEvent) -/** -Called by commands and monitors. To tell main console to display the new event. - @param aEvent Event reported by commands and monitors -*/ - { - //Console can't display a NULL event - __ASSERT_ALWAYS(aEvent, Panic(ENcmEventIsNull)); - //Console can't display a string more than one line - __ASSERT_ALWAYS(aEvent->iEvent.Length() <= NUM_CHARACTERS_ON_LINE, Panic(ENcmEventLengthValid)); - - iEventList.AddFirst(*aEvent); - CUsbNcmConsoleEvent* theLastEvent = iEventList.Last(); - delete theLastEvent; - - ScheduleDraw('E'); - } - -void CUsbNcmConsole::DrawL() -/** -Display all infomation on screen. -There are two parts on the screen. One is permanent info. It will display all kinds of states such as USB device state, -USB service state, NCM state, and so on. The other is event info show. It will display the events reported by monitors -and commands. It also used to show command help when user need command help. -*/ - { - iConsole->ClearScreen(); - // First line is the server version number - TVersionName versionName = iVersion.Name(); - iConsole->Printf(_L( - // 1 2 3 4 5 - // 12345678901234567890123456789012345678901234567890123 - "Server Version: %S %S\n" - ), - &versionName, &iDisplayArray[EAuthorisationSettingItem] - ); - - - iConsole->Printf(_L("Service: %S Device: %S\n"), - &iDisplayArray[EUsbServiceStateItem], &iDisplayArray[EUsbDeviceStateItem]); - iConsole->Printf(_L("NCM Iap:%2d state:%S IP:%S\n"), - iLocalIapId, &iDisplayArray[ENcmConnStatusItem], &iDisplayArray[ENcmConnIpItem]); - iConsole->Printf(_L("Active:%S NcmConnection:%S\n"), - &iDisplayArray[ENcmBtPanItem], &iDisplayArray[ENcmAgentStateItem]); - iConsole->Printf(_L("Ncm connection:%S\n"), &iDisplayArray[ENcmConnectionStateItem]); - - if ((iHelp > 0) && (iHelp <=9)) - { - iConsole->Printf(_L("Press 0 to quit help\n\n")); - //Display the command help - iKeys->PrintHelp(iHelp); - } - else - { - iConsole->Printf(_L("Press 1 to 9 to get menu help\n\n")); - //Display the event list - TDblQueIter iter(iEventList); - CUsbNcmConsoleEvent* event = NULL; - while((event = iter++) != NULL) - { - iConsole->Printf(event->iEvent.Left(NUM_CHARACTERS_ON_LINE-1)); - iConsole->Printf(_L("\n")); - } - } - } - - -void CUsbNcmConsole::CreateDisplayItemL() -/** -Init the display item. -*/ - { - for(TInt i = 0; i < ELastItem; i++) - { - RBuf buf; - iDisplayArray.AppendL(buf); - iDisplayArray[i].CreateL(gDisplayItemLength[i]); - } - } - -void CUsbNcmConsole::SetDisplayItem(TInt aIndex, TDes& aInfo) -/** -Called by commands and monitors to show the changed info in screen -*/ - { - //Prevent array is out of bound - __ASSERT_ALWAYS(((aIndex < ELastItem) && (aIndex >= 0)), Panic(ENcmDisplayItemVaild)); - - iDisplayArray[aIndex].SetLength(0); - iDisplayArray[aIndex].Copy(aInfo); - - ScheduleDraw('E'); - } - -TInt CUsbNcmConsole::LocalIapId() const - { - return iLocalIapId; - } - -const TDes& CUsbNcmConsole::GetDisplayItem(TInt aIndex) - { - //Prevent array is out of bound - __ASSERT_ALWAYS(((aIndex < ELastItem) && (aIndex >= 0)), Panic(ENcmDisplayItemVaild)); - - return iDisplayArray[aIndex]; - } - - -TInt CUsbNcmConsole::DoCommandCallback(TAny *aThisPtr) - { - CNcmCommandBase* command = static_cast(aThisPtr); - TRAPD(err,command->DoCommandL()); - if(err != KErrNone) - { - User::Panic(_L("DoCommandCallback"), err); - } - return err; - } - - -TInt CUsbNcmConsole::DrawAvailableIapsL() -/** -Display commsdb's iaps on console -@return the count of iaps -*/ - { - LOG_FUNC - __FLOG_STATIC0(KSubSys, KLogComponent , _L8("CNcmTestUtil::DrawAvailableIapsL")); - - iConsole->Printf(_L("CommDB IAPs:\n")); - iConsole->Printf(_L("ID: Name\n")); - - //Get commsdb handle - CCommsDatabase* db = CCommsDatabase::NewL(); - __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Get CommsDatabase ok")); - CleanupStack::PushL(db); - - //Get Iap table infomation - CCommsDbTableView* iapTableView = db->OpenTableLC(TPtrC(IAP)); - __FLOG_STATIC0(KSubSys, KLogComponent , _L8("OpenTableLC ok")); - - - TUint32 iapId; - TBuf<128> iapName; - TInt iapCount = 0; - - for (TInt iapTableErr = iapTableView->GotoFirstRecord(); iapTableErr == KErrNone; iapTableErr = iapTableView->GotoNextRecord()) - { - //Get every IAP - iapTableView->ReadTextL(TPtrC(COMMDB_NAME), iapName); - iapTableView->ReadUintL(TPtrC(COMMDB_ID), iapId); - - __FLOG_STATIC2(KSubSys, KLogComponent , _L8("Read: %d: %S"), iapId, &iapName); - - iConsole->Printf(_L("%d: %S\n"), iapId, &iapName); - iapCount++; - } - - if (0 == iapCount) - { - iConsole->Printf(_L("No available IAP!\n")); - } - - CleanupStack::PopAndDestroy(2); // iapTableView, db - return iapCount; - - } - -TBool CUsbNcmConsole::AttachConnectionL(TInt aIap, RConnection& aConnection) -/** -Try to attach the connection specified by iIapId. If attach failed or no specified connection,return false -*/ - { - LOG_FUNC - __FLOG_STATIC1(KSubSys, KLogComponent , _L8("AttachConnectionL aIap=%d"), aIap); - - TBool result = ETrue; - TUint count = 0; - //Get active connections - User::LeaveIfError(aConnection.EnumerateConnections(count)); - __FLOG_STATIC2(KSubSys, KLogComponent , _L8("active connection count = %d, watch iap = %d"), count, aIap); - - TBool hasConnection = EFalse; - for(TInt i = 1; i <= count; i++) - { - TPckgBuf info; - User::LeaveIfError(aConnection.GetConnectionInfo(i,info)); - TUint32 id = info().iIapId; - __FLOG_STATIC2(KSubSys, KLogComponent , _L8("aIap=%d, id=%d"), aIap, id); - - if(id == aIap) - { - hasConnection = ETrue; - //The connection is the connection specified by aIap - __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Got it!")); - - //Attach the connection - TInt err = aConnection.Attach(info, RConnection::EAttachTypeMonitor); - if(err != KErrNone) - { - result = EFalse; - __FLOG_STATIC1(KSubSys, KLogComponent , _L8("Attach error[%d]"), err); - } - else - { - __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Attach it!")); - } - break; - } - } - - if(!hasConnection) - { - //connection not found; - __FLOG_STATIC0(KSubSys, KLogComponent , _L8("No connection found!")); - result = EFalse; - } - - return result; - - }