--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/usbho/t_usbdi/inc/endpointwriter.h Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,181 @@
+#ifndef __ENDPOINT_WRITER_H
+#define __ENDPOINT_WRITER_H
+
+/*
+* Copyright (c) 2007-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 endpointwriter.h
+* @internalComponent
+*
+*
+*/
+
+
+
+#include <d32usbc.h>
+
+namespace NUnitTesting_USBDI
+ {
+
+/**
+This class describes a generic writer of data to host endpoints
+*/
+class CEndpointWriter : public CActive
+ {
+public:
+ /**
+ Constructor, build an endpoint writer
+ @param aClientDriver a referrence to a channel to the client USB driver
+ @param aEndpoint the endpoint number to write to
+ */
+ CEndpointWriter(RDevUsbcClient& aClientDriver,TEndpointNumber aEndpoint);
+
+ /**
+ Destructor
+ */
+ virtual ~CEndpointWriter();
+
+ /**
+ Get numebr of bytes writtenat an instant in time if doing a multiple asynchronous 'Write'
+ */
+ TUint NumBytesWrittenSoFar();
+
+ /**
+ Write the supplied data to through the endpoint to the host
+ @param aData the byte data to write to the host
+ @param aUseZLP send a zero length packet if appropriate
+ @param aCreateBuffer reallocate this object's 'iBuffer' and copy the data into it (required for aData is transient)
+ */
+ void Write(const TDesC8& aData, TBool aUseZLP, TBool aCreateBuffer = ETrue);
+
+ /**
+ Write the supplied data to through the endpoint to the host and wait for completion
+ @param aData the byte data to write to the host
+ @return error
+ */
+ TInt WriteSynchronous(const TDesC8& aData, TBool aUseZLP);
+
+ /**
+ Write 'aNumBytes' bytes of data using 'aDataPattern' through the endpoint to the host
+ @param aDataPattern the byte data pattern to use when writing to the host
+ @param aNumBytes the number of bytes to write to the host
+ @param aUseZLP use a zero lengt packet if last write packet conatins max packet's worth of data
+ */
+ void WriteSynchronousUsingPatternL(const TDesC8& aDataPattern, const TUint aNumBytesconst, TBool aUseZLP);
+
+ /**
+ Write 'aNumBytes' bytes of data using 'aDataPattern' through the endpoint to the host
+ and wait for completion.
+ @param aDataPattern the byte data pattern to use when writing to the host
+ @param aNumBytes the number of bytes to write to the host
+ */
+ void WriteSynchronousUsingPatternL(const TDesC8& aDataPattern, const TUint aNumBytes);
+
+ /**
+ Write 'aNumBytes' bytes of data using 'aDataPattern' through the endpoint to the host,
+ and then halt the endpoint.
+ @param aDataPattern the byte data pattern to use when writing to the host
+ @param aNumBytes the number of bytes to write to the host
+ */
+ void WriteSynchronousUsingPatternAndHaltL(const TDesC8& aDataPattern, const TUint aNumBytes);
+
+ /**
+ Kick off a 'Write' of 'aNumBytes' bytes of data using 'aDataPattern' through the endpoint to the host.
+ @param aData the byte data to write to the host
+ @param aNumRepeats the number of times to repeat in the buffer to be used when sending
+ */
+ void WriteUsingPatternL(const TDesC8& aData, const TUint aNumBytes, const TBool aUseZLP);
+
+ /**
+ Kick off a sequence of 'Writes' which in total will write 'aNumBytes' bytes of data using 'aDataPattern'
+ through the endpoint to the host.
+ @param aNumBytesPerWrite the number of bytes of data to write to the host per call to USB client 'Write'
+ @param aTotalNumBytes the total number of bytes of data to write to the host
+ @param aNumRepeats the number of times to repeat in the buffer to be used when sending
+ */
+ void WriteInPartsUsingPatternL(const TDesC8& aData, const TUint aNumBytesPerWrite, TUint aTotalNumBytes, const TBool aUseZLP);
+
+
+private: // From CActive
+ /**
+ */
+ void DoCancel();
+
+ /**
+ */
+ void RunL();
+
+ /**
+ */
+ TInt RunError(TInt aError);
+
+ /**
+ */
+ void CreateBigBuffer(const TDesC8& aData, const TUint aRepeats);
+
+private:
+ /**
+ The channel to the USB client driver
+ */
+ RDevUsbcClient& iClientDriver;
+
+ /**
+ The endpoint number that this writer will write to
+ */
+ TEndpointNumber iEndpoint;
+
+ /**
+ The total number of bytes in a repeated 'Write'
+ */
+ TUint iTotalNumBytes;
+
+ /**
+ The number of bytes currently writte in a repeated write
+ */
+ TUint iNumBytesWritten;
+
+ /**
+ The number of bytes to write at each successive a 'Write'
+ */
+ TUint iNumBytesOnCurrentWrite;
+
+ /**
+ The length of the data pattern in a repeated write
+ */
+ TUint iDataPatternLength;
+
+ /**
+ Is a ZLP required for the last 'Write' in a successive 'Write'
+ */
+ TUint iUseZLP;
+
+ /**
+ Buffer for WriteInOne
+ */
+ HBufC8* iBuffer;
+
+ /**
+ Ptr to buffer for WriteInOne
+ */
+ TPtr8 iBufPtr;
+
+ };
+
+
+ }
+
+
+
+
+#endif
\ No newline at end of file