sl@0: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // Console redirection server sl@0: // sl@0: // sl@0: sl@0: #include "testconsole.h" sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: sl@0: NONSHARABLE_CLASS(CActiveConsole) : public CActive sl@0: { sl@0: public: sl@0: CActiveConsole(); sl@0: void ConsoleRead(); sl@0: static CActiveConsole* NewLC(CConsoleBase* aConsole, CTestConsole * aStream); sl@0: static CActiveConsole* NewL(CConsoleBase* aConsole, CTestConsole * aStream); sl@0: void ConstructL(CConsoleBase* aConsole, CTestConsole * aStream); sl@0: sl@0: private: sl@0: void DoCancel(); sl@0: void RunL(); sl@0: CTestConsole * iStream; sl@0: CConsoleBase * iConsole; sl@0: }; sl@0: sl@0: CActiveConsole::CActiveConsole() : CActive(CActive::EPriorityStandard) sl@0: { sl@0: } sl@0: sl@0: void CActiveConsole::DoCancel() sl@0: { sl@0: } sl@0: sl@0: sl@0: void CActiveConsole::ConsoleRead() sl@0: { sl@0: iConsole->Read(iStatus); sl@0: SetActive(); sl@0: } sl@0: sl@0: void CActiveConsole::RunL() sl@0: { sl@0: iStream->DoneReading(iConsole->KeyCode()); sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: CActiveConsole* CActiveConsole::NewLC(CConsoleBase* aConsole, CTestConsole * aStream) sl@0: { sl@0: CActiveConsole* self=new (ELeave) CActiveConsole; sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aConsole, aStream); sl@0: return self; sl@0: } sl@0: sl@0: CActiveConsole* CActiveConsole::NewL(CConsoleBase* aConsole, CTestConsole * aStream) sl@0: { sl@0: CActiveConsole* self = NewLC(aConsole, aStream); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: void CActiveConsole::ConstructL(CConsoleBase* aConsole, CTestConsole * aStream) sl@0: { sl@0: iConsole = aConsole; sl@0: iStream = aStream; sl@0: CActiveScheduler::Add(this); sl@0: } sl@0: sl@0: sl@0: CTestConsole::CTestConsole() sl@0: { sl@0: #ifdef __MARM sl@0: TRAPD(r,iConsole=Console::NewL(_L("Redirection Server"),TSize(KConsFullScreen, KConsFullScreen))) sl@0: #else sl@0: TRAPD(r,iConsole=Console::NewL(_L("Redirection Server"),TSize(KDefaultConsWidth,KDefaultConsHeight))) sl@0: #endif sl@0: __ASSERT_ALWAYS(r==KErrNone,User::Panic(_L("Redirection Server"),0)); sl@0: sl@0: //create and add the active object sl@0: TRAPD(x, iActiveChap=CActiveConsole::NewL(iConsole, this)); sl@0: __ASSERT_ALWAYS(x==KErrNone,User::Panic(_L("Redirection Server"),0)); sl@0: sl@0: } sl@0: sl@0: sl@0: CTestConsole::~CTestConsole() sl@0: { sl@0: if (iConsole) sl@0: { sl@0: iConsole->Write(_L("Console Closed")); sl@0: User::After(2*1000000); sl@0: delete iConsole; sl@0: } sl@0: } sl@0: sl@0: sl@0: void CTestConsole::Write(TDes8& aDes) sl@0: { sl@0: sl@0: TBuf<256> str; sl@0: CnvUtfConverter::ConvertToUnicodeFromUtf8(str, aDes); sl@0: sl@0: iConsole->Write(str); sl@0: sl@0: } sl@0: sl@0: void CTestConsole::Read(const RMessage2& aMessage) sl@0: { sl@0: iMessage = aMessage; sl@0: iActiveChap->ConsoleRead(); //read from the console sl@0: } sl@0: sl@0: sl@0: void CTestConsole::DoneReading(TKeyCode aKeyCode) sl@0: { sl@0: TText8 ch; sl@0: switch (aKeyCode) sl@0: { sl@0: case EKeyEnter: sl@0: ch = '\n'; sl@0: break; sl@0: case EKeyBackspace: sl@0: ch = 0x08; sl@0: break; sl@0: default: sl@0: ch = (TText8)(aKeyCode&0xFF); sl@0: break; sl@0: } sl@0: sl@0: //append it to the buffer sl@0: iBuf.Append(ch); sl@0: Write(iBuf); sl@0: sl@0: CompleteRead(iMessage); sl@0: } sl@0: sl@0: CStreamBase2* CTestConsoleFactory::GetStream() sl@0: { sl@0: return new CTestConsole(); sl@0: } sl@0: sl@0: void CTestConsoleFactory::Configure() sl@0: { sl@0: } sl@0: sl@0: sl@0: CTestConsoleFactory* CTestConsoleFactory::NewL() sl@0: { sl@0: CTestConsoleFactory* f=new(ELeave) CTestConsoleFactory(); sl@0: sl@0: return f; sl@0: } sl@0: sl@0: