1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/ossrv/genericopenlibs/cstdlib/TSTLIB/testconsole.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,170 @@
1.4 +// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// Console redirection server
1.18 +//
1.19 +//
1.20 +
1.21 +#include "testconsole.h"
1.22 +#include <e32svr.h>
1.23 +#include <utf.h>
1.24 +#include <e32cons.h>
1.25 +
1.26 +
1.27 +NONSHARABLE_CLASS(CActiveConsole) : public CActive
1.28 + {
1.29 + public:
1.30 + CActiveConsole();
1.31 + void ConsoleRead();
1.32 + static CActiveConsole* NewLC(CConsoleBase* aConsole, CTestConsole * aStream);
1.33 + static CActiveConsole* NewL(CConsoleBase* aConsole, CTestConsole * aStream);
1.34 + void ConstructL(CConsoleBase* aConsole, CTestConsole * aStream);
1.35 +
1.36 + private:
1.37 + void DoCancel();
1.38 + void RunL();
1.39 + CTestConsole * iStream;
1.40 + CConsoleBase * iConsole;
1.41 + };
1.42 +
1.43 +CActiveConsole::CActiveConsole() : CActive(CActive::EPriorityStandard)
1.44 + {
1.45 + }
1.46 +
1.47 +void CActiveConsole::DoCancel()
1.48 + {
1.49 + }
1.50 +
1.51 +
1.52 +void CActiveConsole::ConsoleRead()
1.53 + {
1.54 + iConsole->Read(iStatus);
1.55 + SetActive();
1.56 + }
1.57 +
1.58 +void CActiveConsole::RunL()
1.59 + {
1.60 + iStream->DoneReading(iConsole->KeyCode());
1.61 + }
1.62 +
1.63 +
1.64 +
1.65 +
1.66 +CActiveConsole* CActiveConsole::NewLC(CConsoleBase* aConsole, CTestConsole * aStream)
1.67 + {
1.68 + CActiveConsole* self=new (ELeave) CActiveConsole;
1.69 + CleanupStack::PushL(self);
1.70 + self->ConstructL(aConsole, aStream);
1.71 + return self;
1.72 + }
1.73 +
1.74 +CActiveConsole* CActiveConsole::NewL(CConsoleBase* aConsole, CTestConsole * aStream)
1.75 + {
1.76 + CActiveConsole* self = NewLC(aConsole, aStream);
1.77 + CleanupStack::Pop();
1.78 + return self;
1.79 + }
1.80 +
1.81 +void CActiveConsole::ConstructL(CConsoleBase* aConsole, CTestConsole * aStream)
1.82 + {
1.83 + iConsole = aConsole;
1.84 + iStream = aStream;
1.85 + CActiveScheduler::Add(this);
1.86 + }
1.87 +
1.88 +
1.89 +CTestConsole::CTestConsole()
1.90 + {
1.91 +#ifdef __MARM
1.92 + TRAPD(r,iConsole=Console::NewL(_L("Redirection Server"),TSize(KConsFullScreen, KConsFullScreen)))
1.93 +#else
1.94 + TRAPD(r,iConsole=Console::NewL(_L("Redirection Server"),TSize(KDefaultConsWidth,KDefaultConsHeight)))
1.95 +#endif
1.96 + __ASSERT_ALWAYS(r==KErrNone,User::Panic(_L("Redirection Server"),0));
1.97 +
1.98 + //create and add the active object
1.99 + TRAPD(x, iActiveChap=CActiveConsole::NewL(iConsole, this));
1.100 + __ASSERT_ALWAYS(x==KErrNone,User::Panic(_L("Redirection Server"),0));
1.101 +
1.102 + }
1.103 +
1.104 +
1.105 +CTestConsole::~CTestConsole()
1.106 + {
1.107 + if (iConsole)
1.108 + {
1.109 + iConsole->Write(_L("Console Closed"));
1.110 + User::After(2*1000000);
1.111 + delete iConsole;
1.112 + }
1.113 + }
1.114 +
1.115 +
1.116 + void CTestConsole::Write(TDes8& aDes)
1.117 + {
1.118 +
1.119 + TBuf<256> str;
1.120 + CnvUtfConverter::ConvertToUnicodeFromUtf8(str, aDes);
1.121 +
1.122 + iConsole->Write(str);
1.123 +
1.124 + }
1.125 +
1.126 + void CTestConsole::Read(const RMessage2& aMessage)
1.127 + {
1.128 + iMessage = aMessage;
1.129 + iActiveChap->ConsoleRead(); //read from the console
1.130 + }
1.131 +
1.132 +
1.133 + void CTestConsole::DoneReading(TKeyCode aKeyCode)
1.134 + {
1.135 + TText8 ch;
1.136 + switch (aKeyCode)
1.137 + {
1.138 + case EKeyEnter:
1.139 + ch = '\n';
1.140 + break;
1.141 + case EKeyBackspace:
1.142 + ch = 0x08;
1.143 + break;
1.144 + default:
1.145 + ch = (TText8)(aKeyCode&0xFF);
1.146 + break;
1.147 + }
1.148 +
1.149 + //append it to the buffer
1.150 + iBuf.Append(ch);
1.151 + Write(iBuf);
1.152 +
1.153 + CompleteRead(iMessage);
1.154 + }
1.155 +
1.156 + CStreamBase2* CTestConsoleFactory::GetStream()
1.157 + {
1.158 + return new CTestConsole();
1.159 + }
1.160 +
1.161 + void CTestConsoleFactory::Configure()
1.162 + {
1.163 + }
1.164 +
1.165 +
1.166 +CTestConsoleFactory* CTestConsoleFactory::NewL()
1.167 + {
1.168 + CTestConsoleFactory* f=new(ELeave) CTestConsoleFactory();
1.169 +
1.170 + return f;
1.171 + }
1.172 +
1.173 +