Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h)
Have multiple extension sections in the bld.inf, one for each version
of the compiler. The RVCT version building the tools will build the
runtime libraries for its version, but make sure we extract all the other
versions from zip archives. Also add the archive for RVCT4.
/*
* Copyright (c) 2004-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:
* Class declaration for CBulkOnlyTransportUsbcLdd.
*
*/
/**
@file
@internalTechnology
*/
#ifndef __CBULKONLYTRANSPORTUSBCLDD_H__
#define __CBULKONLYTRANSPORTUSBCLDD_H__
#include "cbulkonlytransport.h"
#include "cactivedevicestatenotifierbase.h"
// Maximum size for SCSI Read10 Write10 and Verify10 commands
// Windows requests size of 64K whereas MAC requests size of 128K
static const TUint32 KMaxBufSize = 128 * 1024;
//Forward Declaration
class CBulkOnlyTransportUsbcLdd;
/**
Represent session with control endpoint (Ep0).
handles the control interface, and responds to the class specific commands (RESET and GET_MAX_LUN).
*/
class CControlInterfaceUsbcLdd : public CActive
{
public:
enum TControlState
{
ENone,
EReadEp0Data,
ESendMaxLun
};
public:
static CControlInterfaceUsbcLdd* NewL(CBulkOnlyTransportUsbcLdd& aParent);
~CControlInterfaceUsbcLdd();
TInt Start();
void Stop();
virtual void RunL();
virtual void DoCancel();
private:
CControlInterfaceUsbcLdd(CBulkOnlyTransportUsbcLdd& aParent);
void ConstructL();
TInt ReadEp0Data();
void DecodeEp0Data();
TInt ReadUsbEp0();
private:
/** Buffer for request data*/
TBuf8<KRequestHdrSize> iData;
TUsbRequestHdr iRequestHeader;
/** reference to the CBulkOnlyTransport*/
CBulkOnlyTransportUsbcLdd& iParent;
/** represent carrent state for state mashine */
TControlState iCurrentState;
};
/** Transport Class that accessess the Non-SC LDD */
class CBulkOnlyTransportUsbcLdd : public CBulkOnlyTransport, public MLddDeviceStateNotification
{
public:
CBulkOnlyTransportUsbcLdd(TInt aNumDrives,CUsbMassStorageController& aController);
~CBulkOnlyTransportUsbcLdd();
void ConstructL();
RDevUsbcClient& Ldd();
TInt BytesAvailable(); // from Mtransport base class
TInt SetupConfigurationDescriptor(TBool aUnset = EFalse);
TInt SetupInterfaceDescriptors();
void ReleaseInterface();
void CancelControlInterface();
TInt StartControlInterface();
void ActivateDeviceStateNotifier();
void CancelDeviceStateNotifier();
void CancelReadWriteRequests();
void AllocateEndpointResources();
TInt GetDeviceStatus(TUsbcDeviceState& deviceStatus);
void FlushData();
void ReadAndDiscardData(TInt aBytes);
void ReadCBW();
void ExpireData(TAny* aAddress = NULL);
void ProcessCbwEvent();
void StallEndpointAndWaitForClear();
void ReadData(TUint aLength = 0);
void WriteUsb(TRequestStatus& aStatus, TPtrC8& aDes, TUint aLength, TBool aZlpRequired = EFalse);
void SetCbwPtr();
TPtr8& SetCommandBufPtr(TUint aLength);
TPtr8& SetDataBufPtr();
void SetPaddingBufPtr(TUint aLength);
void SetCswBufPtr(TUint aLength);
void ProcessReadingDataEvent();
void DiscardData(TUint aLength);
void WriteToClient(TUint aLength);
void SetReadDataBufPtr(TUint aLength);
#ifdef MSDC_MULTITHREADED
virtual void GetBufferPointers(TPtr8& aDes1, TPtr8& aDes2);
#endif
void Activate(TRequestStatus& aStatus, TUint& aValue);
void Cancel();
private:
TInt ReadUsb(TUint aLength = 0);
private:
RDevUsbcClient iLdd;
CControlInterfaceUsbcLdd* iControlInterface;
CActiveDeviceStateNotifierBase* iDeviceStateNotifier;
/** buffer for Command Block Wrapper */
TBuf8 <KCbwLength> iCbwBuf;
TBuf8<KCommandBufferLength> iCommandBuf; // For Responses to commands
TBuf8<KMaxBufSize> iDataBuf1; // For data transfers (Reading and Writing)
TBuf8<KMaxBufSize> iDataBuf2;
TBool iSwap;
/** internal buffer for CSW */
TBuf8<KCswLength> iCswBuf;
/** internal buffer for padding */
TBuf8<KBOTMaxBufSize> iBuf;
/** internal buffer for garbage */
TBuf8<512> iDiscardBuf;
};
#endif