kerneltest/f32test/shostmassstorage/msman/app/husbconsapp.cpp
changeset 43 96e5fb8b040d
child 87 2f92ad2dc5db
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/shostmassstorage/msman/app/husbconsapp.cpp	Thu Dec 17 09:24:54 2009 +0200
@@ -0,0 +1,161 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// USB Mass Storage Application - also used as an improvised boot loader mechanism
+//
+//
+
+
+
+/**
+ @file
+*/
+
+#include <e32cons.h>
+#include <hal.h>
+#include <f32file.h>
+
+#include "rusbhostmsdevice.h"
+#include "rusbhostmslogicalunit.h"
+
+#include <d32usbdi_hubdriver.h>
+#include "usbtypes.h"
+#include "rextfilesystem.h"
+#include "cusbmsmountmanager.h"
+
+#include "mdrivedisplay.h"
+#include "cusbhostao.h"
+#include "cusbhost.h"
+
+#include "rusbotgsession.h"
+
+#include "cdisplay.h"
+#include "husbconsapp.h"
+#include "tmslog.h"
+
+
+_LIT(KTxtApp,"HOST USB CONSOLE APP");
+
+
+
+CHeartBeat* CHeartBeat::NewLC(CDisplay& aDisplay)
+	{
+	CHeartBeat* me = new(ELeave) CHeartBeat(aDisplay);
+	CleanupStack::PushL(me);
+	me->ConstructL();
+	return me;
+	}
+
+
+CHeartBeat::CHeartBeat(CDisplay& aDisplay)
+:   CActive(0),
+    iDisplay(aDisplay)
+	{}
+
+
+void CHeartBeat::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	iTimer.CreateLocal();
+	RunL();
+	}
+
+
+CHeartBeat::~CHeartBeat()
+	{
+	Cancel();
+	}
+
+
+void CHeartBeat::DoCancel()
+	{
+    iTimer.Cancel();
+	}
+
+
+void CHeartBeat::RunL()
+	{
+	SetActive();
+	// Print RAM usage & up time
+	iUpTime++;
+    iDisplay.UpTime(iUpTime);
+
+	TInt mem=0;
+	if (HAL::Get(HALData::EMemoryRAMFree, mem)==KErrNone)
+		{
+        iDisplay.MemoryFree(mem);
+		}
+	iTimer.After(iStatus, 1000000);
+	}
+
+
+GLDEF_C void RunAppL()
+    {
+    __MSFNSLOG
+    CActiveScheduler* sched = new(ELeave) CActiveScheduler;
+    CleanupStack::PushL(sched);
+    CActiveScheduler::Install(sched);
+
+    RFs fs;
+    User::LeaveIfError(fs.Connect());
+    CleanupClosePushL(fs);
+
+    RUsbOtgSession usbOtgSession;
+    TInt err = usbOtgSession.Connect();
+    User::LeaveIfError(err);
+
+    CConsoleBase* console;
+	console = Console::NewL(KTxtApp, TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+
+    CDisplay* display = CDisplay::NewLC(fs, *console);
+	CMessageKeyProcessor::NewLC(*display, usbOtgSession);
+    CHeartBeat::NewLC(*display);
+
+    display->Menu();
+    display->DriveListL();
+
+
+    CUsbHostDisp* usbHost = CUsbHostDisp::NewL(*display);
+    CleanupStack::PushL(usbHost);
+
+    usbHost->Start();
+
+    // *************************************************************************
+    // Start Active Scheduler
+    // *************************************************************************
+    CActiveScheduler::Start();
+
+	// 1 sec delay for sessions to stop
+	User::After(1000000);
+    CleanupStack::PopAndDestroy(usbHost);
+    CleanupStack::PopAndDestroy();  // CPeriodUpdate
+    CleanupStack::PopAndDestroy();  // CMessageKeyProcessor
+    CleanupStack::PopAndDestroy();  // CDisplay
+    CleanupStack::PopAndDestroy(console);
+    CleanupStack::PopAndDestroy();  // fs
+    CleanupStack::PopAndDestroy(sched);
+    }
+
+
+
+GLDEF_C TInt E32Main()
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	TRAPD(error, RunAppL());
+	__ASSERT_ALWAYS(!error, User::Panic(KTxtApp, error));
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return 0;
+	}