--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgrtest/ObexClassController/test/src/simpleObexApp.cpp Tue Feb 02 02:02:59 2010 +0200
@@ -0,0 +1,509 @@
+/*
+* Copyright (c) 2005-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:
+*
+*/
+
+
+#include <e32base.h>
+#include <c32comm.h>
+
+#include <usbman.h>
+
+#include "simpleObexApp.h"
+#include "simpleObexClient.h"
+#include "simpleObexServer.h"
+
+
+// Define Physical Device Driver and Logical Device Driver
+// for device.
+
+
+
+/**
+ * Constructor.
+ */
+CActiveConsole::CActiveConsole(CConsoleBase* aConsole)
+ : CActive(CActive::EPriorityStandard),
+ iConsole(aConsole),
+ iMode(E_Inactive)
+
+ {
+ }
+
+/**
+ * NewLC function, calls 2nd phase constructor.
+ */
+CActiveConsole* CActiveConsole::NewLC(CConsoleBase* aConsole)
+ {
+ CActiveConsole* self = new (ELeave) CActiveConsole(aConsole);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+
+/**
+ * 2nd phase construction.
+ */
+void CActiveConsole::ConstructL ()
+ {
+
+ CActiveScheduler::Add(this);// Add to active scheduler
+
+ }
+
+
+
+/**
+ * Destructor.
+ */
+CActiveConsole::~CActiveConsole()
+ {
+ // Make sure we're cancelled
+ Cancel();
+
+ // safe to delete NULL
+
+ if(iObexClientHandler)
+ delete iObexClientHandler;
+ if(iObexServerHandler)
+ delete iObexServerHandler;
+
+ }
+
+/**
+ * RequestCharacter function, this is responsible for diplasying a menu to the user.
+ */
+void CActiveConsole::RequestCharacter()
+ {
+
+ if (iMode == E_Inactive)
+ {
+ // Initial menu
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("|~~~~~~~~~~~~~~~~~OBEX~~~~~~~~~~~~~~~~~|\n"));
+ iConsole->Printf(_L("---------------------------------------\n"));
+ iConsole->Printf(_L("|-----------Bluetooth options----------|\n"));
+ iConsole->Printf(_L("---------------------------------------\n"));
+ iConsole->Printf(_L("| 1 - Start Obex Server over Bluetooth |\n"));
+ iConsole->Printf(_L("| 2 - Start Obex Client over Bluetooth |\n"));
+ iConsole->Printf(_L("---------------------------------------\n"));
+ iConsole->Printf(_L("|-------------IrDA options-------------|\n"));
+ iConsole->Printf(_L("---------------------------------------\n"));
+ iConsole->Printf(_L("| 3 - Start Obex Server over IrDA |\n"));
+ iConsole->Printf(_L("| 4 - Start Obex Client over IrDA |\n"));
+ iConsole->Printf(_L("---------------------------------------\n"));
+ iConsole->Printf(_L("|--------------USB options-------------| \n"));
+ iConsole->Printf(_L("---------------------------------------\n"));
+ iConsole->Printf(_L("| 5 - Start Obex Server over USB |\n"));
+ iConsole->Printf(_L("| 6 - Start Obex Client over USB |\n"));
+ iConsole->Printf(_L("---------------------------------------\n"));
+
+ }
+
+ if (iMode == E_Server)
+ {
+ // Menu displayed when Start server is called
+ iConsole->Printf(_L("\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("|~~~~~~~~~OBEX_SERVER_OPTIONS~~~~~~~~~~|\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| S - Stop and kill the Obex Server |\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| 1 - Enable authentication |\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| 2 - Disable authentication |\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ }
+
+
+
+ if (iMode == E_Client)
+ {
+ // Menu displayed when start client is started
+ iConsole->Printf(_L("\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("|~~~~~~~~~OBEX_CONNECT_OPTIONS~~~~~~~~~|\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| 1 - OBEX connect menu |\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| 2 - Disconnect Obex |\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| 3 - Obex Put obj 1 : %S |\n"), &(iObexClientHandler->iFilename1));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| 4 - Obex Put obj 2 : %S |\n"), &(iObexClientHandler->iFilename2));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| 5 - Obex Put obj 3 : %S |\n"), &(iObexClientHandler->iFilename3));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| 6 - Obex Get by name |\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ }
+
+
+
+ if (iMode == E_Client_Connect_Menu )
+ {
+ // Obex connect menu
+ iConsole->Printf(_L("\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("|~~~~~~~~~~~OBEX_CONNECT_MENU~~~~~~~~~~|\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| 0 - IrObex Disconnect |\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| 1 - IrObex Connect |\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| 2 - Connect with Authentication |\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ iConsole->Printf(_L("| s - Back to Client Menu |\n"));
+ iConsole->Printf(_L("----------------------------------------\n"));
+ }
+
+
+ iConsole->Printf(_L("press Escape to quit\r\n\r\n"));
+ iConsole->Read(iStatus);
+ SetActive();
+
+ }
+
+
+/**
+ * The active object DoCancel function
+ */
+void CActiveConsole::DoCancel()
+ {
+ iConsole->ReadCancel();
+ }
+
+
+
+/**
+ * The active object RunL function. It is responsible for routing the users
+ * selection by calling the ProcessKeyPressL function.
+ */
+void CActiveConsole::RunL()
+ {
+ TUint oldMode = iMode;
+ TRAPD(err,ProcessKeyPressL(TChar(iConsole->KeyCode())));
+ if(err != KErrNone)
+ {
+ iConsole->Printf(_L("Failed. Error: %d\r\n"),err);
+ // Put the test mode back again
+ iMode = oldMode;
+ RequestCharacter();
+ }
+ }
+
+
+/**
+ * This function is called after the user has made a selection.
+ */
+void CActiveConsole::ProcessKeyPressL(TChar aChar)
+ {
+
+ if (aChar == EKeyEscape)
+ {
+ CActiveScheduler::Stop();
+ return;
+ }
+
+ else if (iMode == E_Inactive)
+ {
+ switch(aChar)
+ {
+ case '1':
+ //Obex Server over Bluetooth
+ iMode = E_Server;
+ iTransport = EBluetooth;
+ iObexServerHandler = CObexServerHandler::NewL(this, EBluetooth);
+ break;
+
+ case '2':
+ //Obex Client over Bluetooth
+ iMode = E_SdpQuery;
+ iTransport = EBluetooth;
+ iObexClientHandler = CObexClientHandler::NewL(this, EBluetooth);
+ break;
+
+ case '3':
+
+ //Obex server over IrDA
+ iMode = E_Server;
+ iTransport = EIrda;
+ iObexServerHandler = CObexServerHandler::NewL(this, EIrda);
+ break;
+
+ case '4':
+ //Obex client over IrDA
+ iMode = E_Client;
+ iTransport = EIrda;
+ iObexClientHandler = CObexClientHandler::NewL(this, EIrda);
+ break;
+
+ case '5':
+ {
+ // Obex server over USB.
+ iMode = E_Server;
+
+ #ifdef __WINS__
+ // If starting usb on PC emulator side
+ iTransport = EWin32Usb;
+ iObexServerHandler = CObexServerHandler::NewL(this, EWin32Usb);
+ #else
+ // This is where the Class controller code provided is implemented
+ RUsb usb;
+ TRequestStatus status;
+ TInt obexPersonality = 1;
+ User::LeaveIfError(usb.Connect());
+ // Start the OBEX personality that will
+ // start up an OBEX server.
+ usb.TryStop(status);
+ User::WaitForRequest(status);
+ usb.TryStart(obexPersonality, status);
+ User::WaitForRequest(status);
+
+ #endif
+ }
+ break;
+ case '6':
+ {
+ iMode = E_Client;
+
+ #ifdef __WINS__
+ // If starting client on PC emulator
+ iTransport = EWin32Usb;
+ iObexClientHandler = CObexClientHandler::NewL(this, EWin32Usb);
+ #else
+ iTransport = EUsb;
+ DoUsbInitialisationL();
+ iObexClientHandler = CObexClientHandler::NewL(this, EUsb);
+ User::LeaveIfError(iUsbDriver.DeviceConnectToHost());// Plugin driver
+ iUsbDriver.Close();
+ #endif
+ }
+ default:
+ break;
+
+ }
+
+ }
+
+ else if (iMode == E_Client_Connect_Menu )
+ {
+ switch (aChar)
+ {
+ case '0':
+ // Disconnect Obex connection
+ iObexClientHandler->Disconnect();
+ break;
+
+ case '1':
+ // Start Obex connection
+ iObexClientHandler->Connect();
+ break;
+
+ case '2':
+ // Start Obex connection with authentication
+ iObexClientHandler->ConnectWithAuthenticationL();
+
+ default:
+ iMode = E_Client;
+ break;
+ }
+ }
+
+ else if (iMode == E_Server)
+ {
+ switch(aChar)
+ {
+ case 's':
+ // Stop the Obex server
+ iObexServerHandler->Stop();
+ break;
+
+ case '1':
+ // Force authenication
+ iObexServerHandler->EnableAuthenticationL();
+ break;
+
+ case '2':
+ // Stop the need to authenicate
+ iObexServerHandler->DisableAuthentication();
+
+ default:
+ break;
+
+ }
+
+
+ }
+
+ else if (iMode == E_Client)
+ {
+ switch(aChar)
+ {
+
+ case '1':
+ iMode = E_Client_Connect_Menu;
+ break;
+
+ case '2':
+ // Disconnect client and server link
+ iObexClientHandler->Disconnect();
+ break;
+
+ case '3':
+ // Put iFilename1 object
+ iObexClientHandler->Put(iObexClientHandler->iFilename1);
+ break;
+
+ case '4':
+ // Put iFilename2 object
+ iObexClientHandler->Put(iObexClientHandler->iFilename2);
+ break;
+
+ case '5':
+ // Put iFilename3 object
+ iObexClientHandler->Put(iObexClientHandler->iFilename3);
+ break;
+
+ case '6':
+ // Call get by name on active object
+ iObexClientHandler->GetByNameL();
+ default:
+ break;
+
+ }
+ }
+
+ else
+ {
+ CActiveScheduler::Stop();
+ return;
+ }
+ // Dislpay next menu
+ RequestCharacter ();
+ return;
+
+ }
+
+
+/**
+ * Function used in creating a new active console.
+ */
+CConsoleBase* CActiveConsole::Console()
+ {
+ return iConsole;
+ }
+
+
+void CActiveConsole::DoUsbInitialisationL()
+ {
+ // Before creating an Obex client or server some initialisation
+ // is needed.
+
+ // Load the USB device driver
+ User::LeaveIfError(User::LoadLogicalDevice(KEusbc));
+
+ // Now connect to USBmanager
+ RUsb usb;
+ User::LeaveIfError(usb.Connect());
+ iConsole->Printf(_L("Connected to USB\n"));
+ // Before starting the WHCM USB personality foe OBEX
+ // we need to stop the current personality.
+ TRequestStatus status;
+ usb.TryStop(status);
+ User::WaitForRequest(status);
+ User::LeaveIfError(status.Int());
+ // Now we want to start the WHCM personality
+ const TUint KWhcmPersonality=2;
+ usb.TryStart(KWhcmPersonality, status);
+ User::WaitForRequest(status);
+
+ iConsole->Printf(_L("Starting USB returned %d\n"), status.Int());
+ User::LeaveIfError(status.Int());
+ // We are now finished with Usb manager so close.
+ usb.Close();
+
+ // We now need to open a channel to a client driver
+ User::LeaveIfError(iUsbDriver.Open(0));
+ // Unplug driver to allow for a new CObexClient to be created.
+ User::LeaveIfError(iUsbDriver.DeviceDisconnectFromHost());
+
+ }
+
+/**
+ * This is the function called by the entry point code.
+ * It exists to perform initialisation
+ *
+ */
+void RunAppL(void)
+ {
+
+ CActiveScheduler *myScheduler = new (ELeave) CActiveScheduler();
+ CleanupStack::PushL(myScheduler);
+ CActiveScheduler::Install(myScheduler);
+
+ CConsoleBase* aConsole =
+ Console::NewL(_L("Obex Program"),TSize(KConsFullScreen, KConsFullScreen));
+
+ // Load Device drivers
+
+ TInt err;
+ // Start C32 now
+ aConsole->Printf(_L("Loading C32...\n"));
+ err=StartC32();
+ if (err!=KErrNone && err!=KErrAlreadyExists)
+ aConsole->Printf(_L(" Failed %d\n"), err);
+ else
+ aConsole->Printf(_L(" Sucess\n"));
+ // If running on PC emulator
+
+ // Load drivers for using Serial communication
+ #ifdef __WINS__
+ TInt load = User::LoadLogicalDevice(KWinsLddName);
+ aConsole->Printf(_L("Load LDD : %d\n"), load);
+ load = User::LoadPhysicalDevice(KWinsPddName);
+ aConsole->Printf(_L("Load PDD : %d\n"), load);
+ #endif //__WINS__
+
+
+
+ CleanupStack::PushL(aConsole);
+ CActiveConsole* my_console = CActiveConsole::NewLC(aConsole);// New active console
+ my_console->RequestCharacter();
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(3);
+
+ }
+
+
+
+
+/**
+ * The E32main function is the main entry point for the
+ * code.
+ */
+
+TInt E32Main()
+ {
+ __UHEAP_MARK;
+ CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+ TRAPD(error,RunAppL()); // more initialization, then do example
+ __ASSERT_ALWAYS(!error,User::Panic(_L("Simple OBEX Application"),error));
+ delete cleanup; // destroy clean-up stack
+ __UHEAP_MARKEND;
+
+ return 0; // and return
+ }