kernel/eka/drivers/usbho/usbdi_utils/usbtransferstrategy.cpp
changeset 189 a5496987b1da
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/drivers/usbho/usbdi_utils/usbtransferstrategy.cpp	Thu Jul 01 17:57:33 2010 +0100
@@ -0,0 +1,114 @@
+// 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:
+//
+
+#include "usbtransferstrategy.h"
+
+#include <d32usbtransfers.h>
+#include <d32usbdi_errors.h>
+#include "usbdiutils.h"
+
+
+TPacketLengths::TPacketLengths(TUint16* aRecvPtr, TUint16* aReqPtr, TInt& aMaxNumPackets)
+	: iRecvPtr(aRecvPtr)
+	, iReqPtr(aReqPtr)
+	, iMaxNumPackets(aMaxNumPackets)
+	{}
+
+EXPORT_C TPacketLengths::TLength TPacketLengths::At(TInt aIndex)
+	{
+	__ASSERT_ALWAYS(aIndex >= 0 && aIndex < iMaxNumPackets, UsbdiUtils::Panic(UsbdiPanics::EOutOfBoundsOfLengthArray));
+	return TPacketLengths::TLength(*(iRecvPtr + aIndex), *(iReqPtr + aIndex));
+	}
+
+EXPORT_C const TPacketLengths::TLength TPacketLengths::At(TInt aIndex) const
+	{
+	__ASSERT_ALWAYS(aIndex >= 0 && aIndex < iMaxNumPackets, UsbdiUtils::Panic(UsbdiPanics::EOutOfBoundsOfLengthArray));
+	return TPacketLengths::TLength(*(iRecvPtr + aIndex), *(iReqPtr + aIndex));
+	}
+
+EXPORT_C TPacketLengths::TLength TPacketLengths::operator[](TInt aIndex)
+	{
+	return At(aIndex);
+	}
+
+EXPORT_C const TPacketLengths::TLength TPacketLengths::operator[](TInt aIndex) const
+	{
+	return At(aIndex);
+	}
+
+EXPORT_C TInt TPacketLengths::MaxNumPackets()
+	{
+	return iMaxNumPackets;
+	}
+	
+EXPORT_C TUint16 TPacketLengths::TLength::operator=(TUint16 aValue)
+	{
+	iRecv = aValue;
+	iReq = aValue;
+	return aValue;
+	}
+
+EXPORT_C TPacketLengths::TLength::operator TUint16() const
+	{
+	return iRecv;
+	}
+
+TPacketLengths::TLength::TLength(TUint16& aRecv, TUint16& aReq)
+	: iRecv(aRecv)
+	, iReq(aReq)
+	{
+	}
+	
+	
+TPacketResults::TPacketResults(TInt* aResPtr, TInt& aMaxNumPackets)
+	: iResPtr(aResPtr)
+	, iMaxNumPackets(aMaxNumPackets)
+	{
+    }
+
+EXPORT_C TInt TPacketResults::At(TInt aIndex) const
+	{
+	__ASSERT_ALWAYS(aIndex >= 0 && aIndex < iMaxNumPackets, UsbdiUtils::Panic(UsbdiPanics::EOutOfBoundsOfResultArray));
+	return *(iResPtr + aIndex);
+	}
+
+EXPORT_C TInt TPacketResults::operator[](TInt aIndex) const
+	{
+	return At(aIndex);
+	}
+
+EXPORT_C TInt TPacketResults::MaxNumPackets()
+	{
+	return iMaxNumPackets;
+	}
+
+
+
+void RUsbTransferStrategy::Close()
+	{
+	// Doesn't currently own any resources.
+	}
+	
+void RUsbTransferStrategy::SetTransferHandle(RUsbTransferDescriptor& aTransfer, TInt aHandle) const
+	{
+	aTransfer.iHandle = aHandle;
+	aTransfer.iTransferStrategy = const_cast<RUsbTransferStrategy*>(this);
+	if(aTransfer.iType == RUsbTransferDescriptor::EIsochronous)
+		{
+		static_cast<RUsbIsocTransferDescriptor&>(aTransfer).iWriteHandle = aHandle;
+		}
+	}
+
+