/*
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "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
@internalComponent
*/


#ifndef NCMCLIENTMANAGER_H
#define NCMCLIENTMANAGER_H

#include <e32std.h>
#include <e32base.h>

#ifdef OVERDUMMY_NCMCC
#include <dummyusbsclddapi.h>
#else
#include <d32usbcsc.h>
#endif // OVERDUMMY_NCMCC

#include "ncmcommon.h"

class RNcmInternalSrv;

/**
 * A class which encapsulates the operations related to USB shared chunk LDD
 */
class CNcmClientManager : public CBase
    {
public:
    /**
     * Constructor
     * @param[in]  aHostMacAddress, the NCM interface MAC address 
     *             which will be used to config.
     */
    CNcmClientManager(const TNcmMacAddress& aHostMacAddress);
    
    ~CNcmClientManager();

    /**
     * Setup NCM interfaces
     * @param[out]   aDataEpBufferSize, NCM data interface EP buffer size
     */
    void SetNcmInterfacesL(TUint& aDataEpBufferSize);
    /**
     * Transfer ownership of NCM interface handles to NCM internal 
     * server which is located in C32 process space
     * @param[in]   aServer, NCM internal server. 
     */
    void TransferInterfacesL(RNcmInternalSrv& aServer);
        
private:
    /**
     * Setup NCM communication interface
     */
    void SetCommunicationInterfaceL();
    /**
     * Setup NCM data interface
     * @param   aDataEpBufferSize, NCM data interface EP buffer size
     */
    void SetDataInterfaceL(TUint& aDataEpBufferSize);
    /**
     * Setup NCM class specific descriptors
     * @param   aDataInterfaceNumber, NCM data interface number
     */
    TInt SetupClassSpecificDescriptor(TUint8 aDataInterfaceNumber);
    /**
     * Set NCM interface MAC address into NCM class specific descriptor
     * @param[out]   aStrIndex, the index of string which contains NCM 
     *               interface MAC address 
     */
    TInt SetMacAddressString(TUint8& aStrIndex);
    /**
     * Get NCM data interface number
     * @param[out]  aInterfaceNumber, NCM data interface number
     */
    TInt DataInterfaceNumber(TUint8& aInterfaceNumber);
    
private:
    const TNcmMacAddress&   iHostMacAddress;
    
    TBool                   iCommLddInitiated;
    RDevUsbcScClient        iCommLdd;
    TBool                   iDataLddInitiated;
    RDevUsbcScClient        iDataLdd;
    };

#endif // NCMCLIENTMANAGER_H
