--- 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 <commdb.h>
-#include <commdbconnpref.h>
-#include <nifman.h>
-#include <es_enum.h>
-
-//#include <ncm/ncmuiinterfaces.h>
-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<CUsbNcmConsoleEvent> 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; i<ELastItem; i++)
- {
- iDisplayArray[i].Close();
- }
- iDisplayArray.Close();
-
- Cancel();
-
- }
-
-CUsbNcmConsole::CUsbNcmConsole(TBool aDemo)
- : CActive(EPriorityLow) // Low so all notifications that want to be serviced will be done first
- , iHelp(EFalse)
- , iDemo(aDemo)
- , iEventList(_FOFF(CUsbNcmConsoleEvent, iLink))
- {
- CActiveScheduler::Add(this);
- }
-
-void CUsbNcmConsole::ConstructL()
- {
- LOG_FUNC
-
- //Init Display Item
- iDisplayArray.ReserveL(ELastItem);
- CreateDisplayItemL();
-
- iConsole = Console::NewL(KUsbNcmConsoleTitle, TSize(-1,-1));
- User::LeaveIfError(iUsb.Connect());
- __FLOG_STATIC0(KSubSys, KLogComponent , _L8("iUsb.Connect() successful"));
-
- //Init event list
- for(TInt i=0; i< NUM_EVENT_ON_SCREEN; ++i)
- {
- CUsbNcmConsoleEvent* nullEvent = CUsbNcmConsoleEvent::NewL();
- iEventList.AddFirst(*nullEvent);
- }
- __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Create event list successful"));
-
-
- //Start watcher
- //iDeviceWatcher = CDeviceWatcher::NewL(*this);
- //iServiceWatcher = CServiceWatcher::NewL(*this);
- // iUplinkConnectionWatcher = CUplinkWatcher::NewL(*this);
-
- __FLOG_STATIC0(KSubSys, KLogComponent , _L8("Create watchers successful"));
-
- //create command engine
- iKeys = CNcmCommandEngine::NewL(*this);
-
- //add commands
- CNcmCommandBase* command = NULL;
-
- //the command to set ncm iap
- command = CSetNcmIapCommand::NewL(*this, 'n');
- iKeys->RegisterCommand(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<CUsbNcmConsoleEvent> 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<CNcmCommandBase*>(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<TConnectionInfo> 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;
-
- }