diff -r 000000000000 -r a41df078684a kerneltest/e32test/misc/t_ymodem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/misc/t_ymodem.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,146 @@ +// Copyright (c) 1998-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: +// e32test\misc\t_ymodem.cpp +// +// + +#include +#include "ymodemu.h" +#include + +RTest test(_L("YModem")); + +#define TEST(c) ((void)((c)||(test.Printf(_L("Failed at line %d\n"),__LINE__),test.Getch(),test(0),0))) + +const TInt KBufferSize=4096; + +_LIT(KLddName,"ECOMM"); +_LIT(KPddName,"EUART"); + +void LoadCommDrivers() + { + test.Printf(_L("Load LDD\n")); + TInt r=User::LoadLogicalDevice(KLddName); + TEST(r==KErrNone || r==KErrAlreadyExists); + + TInt i; + TInt n=0; + for (i=-1; i<10; ++i) + { + TBuf<16> pddName=KPddName(); + if (i>=0) + pddName.Append('0'+i); + TInt r=User::LoadPhysicalDevice(pddName); + if (r==KErrNone || r==KErrAlreadyExists) + { + ++n; + test.Printf(_L("%S found\n"),&pddName); + } + } + TEST(n!=0); + } + +GLDEF_C TInt E32Main() + { + RThread().SetPriority(EPriorityAbsoluteForeground); + test.SetLogged(EFalse); + test.Title(); + + TBuf<256> cmd; + User::CommandLine(cmd); + TInt port=0; + if (cmd.Length()!=0) + { + TUint8 c=(TUint8)cmd[0]; + if (c>='0' && c<='9') + { + port=c-'0'; + } + } + + TInt r=KErrNone; + LoadCommDrivers(); + + test.Next(_L("Connect to file server")); + RFs fs; + r=fs.Connect(); + test(r==KErrNone); + + test.Next(_L("Create YModem object")); + YModemU* pY=NULL; + TRAP(r,pY=YModemU::NewL(port,ETrue)); + test(r==KErrNone && pY!=NULL); + + test.Next(_L("Create buffer")); + TUint8* buffer=(TUint8*)User::Alloc(KBufferSize); + test(buffer!=NULL); + + test.Start(_L("Receive...")); + + TBool mode=1; + FOREVER + { + TInt total_size=0; + TInt size=-1; + TBuf<256> name; + r=pY->StartDownload(mode, size, name); + if (r!=KErrNone) + break; + test.Printf(_L("r=%d, size=%d, name %S\n"),r,size,&name); + if (r==KErrNone) + { + test.Printf(_L("Opening file for write\n")); + RFile file; + r=file.Replace(fs,name,EFileWrite); + if (r!=KErrNone) + { + test.Printf(_L("RFile::Replace returns %d\n"),r); + test.Getch(); + test(0); + } + while (r==KErrNone) + { + TUint8* pD=buffer; + r=pY->ReadPackets(pD,KBufferSize); + if (r==KErrNone || r==KErrEof) + { + TInt blen=pD-buffer; + if (size>0) // size was transmitted + { + if (blen>size-total_size) + blen=size-total_size; + } + total_size+=blen; + TPtrC8 fptr(buffer,blen); + TInt s=file.Write(fptr); + if (s!=KErrNone) + { + test.Printf(_L("RFile::Write returns %d\n"),s); + test.Getch(); + test(0); + } + } + } + file.Close(); + test.Printf(_L("rx size=%d\n"),total_size); + } + } + delete buffer; + delete pY; + fs.Close(); + test.Printf(_L("r=%d\n"),r); + test.Getch(); + + return KErrNone; + }