usbdrv/peripheral/public/usbcontrolxferif.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 17:01:47 +0300
branchRCL_3
changeset 15 f92a4f87e424
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
  Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
  All rights reserved.

  This program and the accompanying materials are made available 
  under the terms of the Eclipse Public License v1.0 which accompanies 
  this distribution, and is available at 
  http://www.eclipse.org/legal/epl-v10.html

  Initial Contributors:
  Nokia Corporation - initial contribution.

  Contributors:
*/

#ifndef USBCONTROLXFERIF_H
#define USBCONTROLXFERIF_H

#include <e32def.h>                 // General types definition

/** 
 * Callback interfaces that used to process packet received from Host
 * and interfaces through which that PIL or app can send request to PSL
 */
NONSHARABLE_CLASS(MControlTransferIf)
    {
    public:
        // Interface for RX
        // Transfer direction from Device to Host
        // This two interface is saying PSL had finished
        // sending those data to host.
        virtual void ProcessDataInPacket(TInt aCount,TInt aErrCode) = 0;
        virtual void ProcessStatusInPacket(TInt aErrCode) = 0;
        
        // Transfer direction from Host to Device
        // they are saying that some data had been recieved from host
        virtual void ProcessDataOutPacket(TInt aCount,TInt aErrCode) = 0;
        virtual void ProcessStatusOutPacket(TInt aErrCode) = 0;
        virtual void ProcessSetupPacket(TInt aCount,TInt aErrCode) = 0;
        
        // Interface for TX and Control
        // Data/Status transfer function
        virtual TInt ProcessSetupEndpointZeroRead() = 0;
        virtual TInt ProcessSetupEndpointZeroWrite(const TUint8* aBuffer, TInt aLength, TBool aZlpReqd=EFalse) = 0;
        virtual TInt ProcessSendEp0ZeroByteStatusPacket() = 0;
        virtual TInt ProcessStallEndpoint(TInt aRealEndpoint) = 0;
        
        // Flow control interface
        // In case of we can not deliver received packet(setup or data) to a registered client
        // (because the request callback is not ready), we need PSL stop reporting more packet
        // to PIL until the pending packet had been process.
        // this 2 functions is used to notify PSL: you can continue, the pending packet is proceed.
        virtual void ProcessEp0SetupPacketProceed() = 0;
        virtual void ProcessEp0DataPacketProceed() = 0;
    };

#endif //USBCONTROLXFERIF_H

// End of file