--- /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 <e32test.h>
+#include "ymodemu.h"
+#include <f32file.h>
+
+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;
+ }