author | mikek |
Sun, 27 Jun 2010 21:43:55 +0100 | |
branch | GCC_SURGE |
changeset 181 | bd8f1e65581b |
parent 0 | a41df078684a |
permissions | -rw-r--r-- |
// Copyright (c) 2003-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: // /** @file Test code for example Device Driver @publishedPartner @released */ #include <e32test.h> #include <e32def.h> #include <e32def_private.h> #include "driver1.h" LOCAL_D RTest test(_L("DRIVER1_TEST")); _LIT(KDriver1LddFileName,"DRIVER1_LDD"); _LIT(KDriver1PddFileName,"DRIVER1_PDD"); _LIT8(KTestSendData,"abcdefghijklmnopqrstuvwxyz"); GLDEF_C TInt E32Main() { test.Title(); TInt r; test.Start(_L("Load Physical Device")); r=User::LoadPhysicalDevice(KDriver1PddFileName); test(r==KErrNone || r==KErrAlreadyExists); test.Next(_L("Load Logical Device")); r=User::LoadLogicalDevice(KDriver1LddFileName); test(r==KErrNone || r==KErrAlreadyExists); __KHEAP_MARK; test.Next(_L("Open Device")); RDevice device; r=device.Open(RDriver1::Name()); test(r==KErrNone); test.Next(_L("Get Device Capabilities")); RDriver1::TCaps caps; TPckg<RDriver1::TCaps>capsPckg(caps); capsPckg.FillZ(); // Zero 'caps' so we can tell if GetCaps has really filled it device.GetCaps(capsPckg); TVersion expectedVer(RDriver1::VersionRequired()); test(caps.iVersion.iMajor==expectedVer.iMajor); test(caps.iVersion.iMinor==expectedVer.iMinor); test(caps.iVersion.iBuild==expectedVer.iBuild); test.Next(_L("Close Device")); device.Close(); test.Next(_L("Open Logical Channel")); RDriver1 ldd; r=ldd.Open(); test(r==KErrNone); test.Next(_L("GetConfig")); RDriver1::TConfigBuf configBuf; configBuf.FillZ(); // Zero 'config' so we can tell if GetConfig has really filled it r=ldd.GetConfig(configBuf); test(r==KErrNone); RDriver1::TConfig& config=configBuf(); test(config.iPddBufferSize!=0); test(config.iMaxSendDataSize!=0); test(config.iMaxReceiveDataSize!=0); test.Next(_L("SetConfig")); TInt speed = configBuf().iSpeed+1; configBuf().iSpeed = speed; r=ldd.SetConfig(configBuf); // Use SetConfig to change speed test(r==KErrNone); configBuf.FillZ(); r=ldd.GetConfig(configBuf); test(r==KErrNone); test(configBuf().iSpeed==speed); test.Next(_L("Check access by wrong client")); RDriver1 ldd2=ldd; r=ldd2.Duplicate(RThread(),EOwnerProcess); test(r==KErrAccessDenied); test.Next(_L("Check handle duplication")); ldd2=ldd; r=ldd2.Duplicate(RThread(),EOwnerThread); test(r==KErrNone); ldd2.Close(); test.Next(_L("SendData")); TRequestStatus status; ldd.SendData(status,KTestSendData); test.Next(_L("SendDataCancel")); ldd.SendDataCancel(); User::WaitForRequest(status); r=status.Int(); test(r==KErrCancel); test.Next(_L("SendData")); ldd.SendData(status,KTestSendData); User::WaitForRequest(status); r=status.Int(); test(r==KErrNone); test.Next(_L("ReceiveData")); TBuf8<256> buffer; ldd.ReceiveData(status,buffer); test.Next(_L("ReceiveDataCancel")); ldd.ReceiveDataCancel(); User::WaitForRequest(status); r=status.Int(); test(r==KErrCancel); test.Next(_L("ReceiveData")); buffer.FillZ(buffer.MaxLength()); buffer.Zero(); ldd.ReceiveData(status,buffer); User::WaitForRequest(status); r=status.Int(); test(r==KErrNone); TInt expectedSize = config.iPddBufferSize; if(expectedSize>(&KTestSendData)->Size()) expectedSize = (&KTestSendData)->Size(); test(buffer.Size()==expectedSize); test(buffer==(&KTestSendData)->Right(expectedSize)); test.Next(_L("Close Logical Channel")); ldd.Close(); __KHEAP_MARKEND; test.Next(_L("Unload Logical Device")); r=User::FreeLogicalDevice(RDriver1::Name()); test(r==KErrNone); test.Next(_L("Unload Physical Device")); TName pddName(RDriver1::Name()); _LIT(KVariantExtension,".template"); pddName.Append(KVariantExtension); r=User::FreePhysicalDevice(pddName); test(r==KErrNone); test.End(); return(0); }