--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/usbho/t_usbdi/inc/BaseBulkTestCase.h Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,203 @@
+#ifndef __BULK_BASE_TEST_CASE_H
+#define __BULK_BASE_TEST_CASE_H
+
+/*
+* Copyright (c) 2008-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 BaseBulkTestCase.h
+* @internalComponent
+*
+*
+*/
+
+
+
+
+#include "BaseTestCase.h"
+#include "hosttransfers.h"
+#include "modelleddevices.h"
+#include "controltransferrequests.h"
+#include "TestCaseFactory.h"
+#include "FDFActor.h"
+#include <d32usbc.h>
+#include <d32usbdi.h>
+#include <e32debug.h>
+
+
+namespace NUnitTesting_USBDI
+ {
+const TUint KPercent = 100;
+const TUint8 KMaxNumTimers = 4; //max number of timers used in any test
+const TUint8 KMaxNumOutTransfers = 4; //max number of queued OUT transfers used in any Bulk test
+const TUint8 KMaxNumInTransfers = 4; //max number of queued IN transfers used in any Bulk test
+
+class MBulkTestTimerObserver
+ {
+public:
+ virtual void HandleBulkTestTimerFired() = 0;
+ };
+
+class CBulkTestTimer : public CTimer
+ {
+public:
+
+ /**
+ 2 phase construction
+ @param aTestDevice the test device object that will perform the remote wakeup event
+ */
+ static CBulkTestTimer* NewL(MBulkTestTimerObserver& aParent);
+
+ /**
+ Destructor
+ */
+ ~CBulkTestTimer();
+
+
+private:
+ /**
+ */
+ CBulkTestTimer(MBulkTestTimerObserver& aParent);
+
+ /**
+ */
+ void ConstructL();
+
+private: // From CTimer
+ /**
+ */
+ void RunL();
+
+private:
+ /**
+ The test device object to instruct to connect of disonnect
+ */
+ MBulkTestTimerObserver& iParent;
+ };
+
+
+typedef TBuf<256> TMessageBuf;
+
+/**
+Base policy class for basic bulk test cases. Test cases are active objects that execute their respective test cases
+and asynchronously complete when test case has finished
+*/
+class CBaseBulkTestCase : public CBaseTestCase,
+ public MUsbBusObserver,
+ public MBulkTestTimerObserver
+ {
+public:
+ static CBaseBulkTestCase* NewL(TBool aHostRole);
+ ~CBaseBulkTestCase();
+
+public: // From MUsbBusObserver
+ virtual void DeviceInsertedL(TUint aDeviceHandle);
+ virtual void DeviceRemovedL(TUint aDeviceHandle);
+ void BusErrorL(TInt aError);
+ void DeviceStateChangeL(RUsbDevice::TDeviceState aPreviousState,RUsbDevice::TDeviceState aNewState,
+ TInt aCompletionCode);
+ void HandleBulkTestTimerFired();
+
+protected:
+
+ enum TDeviceInsertedError
+ {
+ ENone,
+ EDeviceConfigurationError
+ };
+
+protected:
+/**
+ Constructor
+ @param aTestCaseId the identity that this test case is to represent
+ @param aHostFlag the flag for host role
+ */
+ CBaseBulkTestCase(const TDesC& aTestCaseId,TBool aHostFlag, TBool aHostOnly = EFalse);
+
+ /**
+ Base class 2nd phase constructor
+ */
+ void CBaseBulkTestCase::BaseBulkConstructL();
+
+ /**
+ Common implentations for most bulk transfer tests
+ */
+ TInt BaseBulkDeviceInsertedL(TUint aDeviceHandle);
+ TInt BaseBulkDeviceInsertedL(TUint aDeviceHandle, TBool aUseTwoInterfaces);
+ TInt SetUpInterfaceAndPipesL(TUint aDeviceHandle, TUint8 aInterfaceNum);
+ void CloseInterfaceAndPipes();
+ void ExecuteHostTestCaseL();
+ void ExecuteDeviceTestCaseL();
+ void HostDoCancel();
+ void DeviceDoCancel();
+ void HostRunL();
+ void DeviceRunL();
+ TBool ValidateData (const TDesC8& aDataToValidate, const TDesC8& aDataPattern);
+ TBool ValidateData (const TDesC8& aDataToValidate, const TDesC8& aDataPattern, const TUint aNumBytes);
+ TBool ValidateData (const TDesC8& aDataToValidate, const TDesC8& aDataPattern, const TUint aStartPoint, const TUint aNumBytes);
+ void RecordTime(const TUint8 aTimerIndex);
+ TInt CheckTimes(const TUint8 aFirstTimerIndex, const TUint8 aSecondTimerIndex, const TUint aPercentage);
+ TInt CheckAndResetTimes(const TUint8 aFirstTimerIndex, const TUint8 aSecondTimerIndex, const TUint aPercentage);
+ void ResetTimes(const TUint8 aTimerIndex);
+
+protected:
+
+ CActorFDF* iActorFDF;
+ RUsbPipe iTestPipeInterface1BulkOut;
+ RUsbPipe iTestPipeInterface1BulkIn;
+ RUsbPipe iTestPipeInterface2BulkOut1;
+ RUsbPipe iTestPipeInterface2BulkOut2;
+ RUsbPipe iTestPipeInterface2BulkIn;
+
+ CEp0Transfer* iControlEp0;
+ RUsbInterface iUsbInterface0;
+ RUsbInterface iUsbInterface1;
+ RUsbInterface iUsbInterface2;
+
+ // Transfer objects
+ CBulkTransfer* iOutTransfer[KMaxNumOutTransfers];
+ CBulkTransfer* iInTransfer[KMaxNumInTransfers];
+
+ // Timer that may be used to fire mid bulk transfer EP0 requests at the client
+ CBulkTestTimer* iBulkTestTimer;
+
+ // The test device to be used for this test case
+ RUsbDeviceD* iTestDevice;
+ // Buffer for storing transfer IN data
+ HBufC8* iInBuffer;
+ // Ptr for 'iInBuffer'
+ TPtr8 iInBufferPtr;
+ // Buffer for storing transfer OUT data
+ HBufC8* iOutBuffer;
+ // Ptr for 'iOutBuffer'
+ TPtr8 iOutBufferPtr;
+ // Buffer for storing validation data
+ HBufC8* iValidateBuffer;
+ // Ptr for 'iValidateBuffer'
+ TPtr8 iValidateBufferPtr;
+
+ TInt iTransferResult;
+ TMessageBuf iMsg;
+
+ // TransferComplete Bit Mask
+ TUint iTransferComplete;
+
+ // Set of timing facilities
+ TTime iStartTime[KMaxNumTimers];
+ TTime iEndTime[KMaxNumTimers];
+ TTimeIntervalMicroSeconds iTimeElapsed[KMaxNumTimers];
+ TInt iTimingError;
+ };
+
+ } //end namespace
+#endif