localconnectivityservice/dun/plugins/inc/usb/DunUsbConfig.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 16:03:15 +0300
branchRCL_3
changeset 19 0aa8cc770c8a
permissions -rw-r--r--
Revision: 201032 Kit: 201035

/*
* Copyright (c) 2006-2007 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:  DUN USB configuration accessor and listener
*
*/


#ifndef C_CDUNUSBCONFIG_H
#define C_CDUNUSBCONFIG_H

#include <e32property.h>
#include <usb/acmconfig.h>
#include "DunPlugin.h"

enum TUsbConfigState
    {
    EUsbConfigStateIdle,
    EUsbConfigStateWaiting
    };

/**
 *  Notification interface class to report USB ACM configuration change
 *
 *  @lib dunusb.lib
 *  @since S60 v3.2
 */
NONSHARABLE_CLASS( MDunUsbConfig )
	{

public:

    /**
     * Gets called when one or more ACM configurations are added
     *
     * @since S60 3.2
     * @param aIndex Index (also port number) of added ACM configuration
     * @return Symbian error code on error, KErrNone otherwise
     */
    virtual TInt NotifyConfigAddition( TInt aIndex ) = 0;

    /**
     * Gets called when one or more ACM configurations are removed
     *
     * @since S60 3.2
     * @param aIndex Index (also port number) of removed ACM configuration
     * @return Symbian error code on error, KErrNone otherwise
     */
    virtual TInt NotifyConfigRemoval( TInt aIndex ) = 0;

	};

/**
 *  Class for detecting USB ACM configuration change
 *
 *  @lib dunutils.lib
 *  @since S60 v3.2
 */
NONSHARABLE_CLASS( CDunUsbConfig ) : public CActive
    {

public:

    /**
     * Two-phased constructor.
     * @param aServer Server
     * @param aCallback Pointer to listener callback
     * @param aProtocol Protocol number to listen
     * @return Instance of self
     */
	static CDunUsbConfig* NewL( MDunServerCallback* aServer,
                                MDunUsbConfig* aCallback,
                                TUint8 aProtocol );

    /**
    * Destructor.
    */
    virtual ~CDunUsbConfig();

    /**
     * Resets data to initial values
     *
     * @since S60 3.2
     * @return None
     */
    void ResetData();

    /**
     * Compares initialized protocol number to configuration by index
     *
     * @since S60 3.2
     * @param aIndex Index for which to compare protocol number
     * @param aValidity If initialized protocol matched at aIndex then ETrue
     * @return Symbian error code on error, KErrNone otherwise
     */
    TInt GetConfigValidityByIndex( TInt aIndex, TBool& aValidity );

    /**
     * Starts listening for ACM configuration changes
     *
     * @since S60 3.2
     * @return Symbian error code on error, KErrNone otherwise
     */
    TInt IssueRequest();

    /**
     * Stops listening for ACM configuration changes
     *
     * @since S60 3.2
     * @return Symbian error code on error, KErrNone otherwise
     */
    TInt Stop();

private:

    CDunUsbConfig( MDunServerCallback* aServer,
                   MDunUsbConfig* aCallback,
                   TUint8 aProtocol );

    void ConstructL();

    /**
     * Initializes this class
     *
     * @since S60 3.2
     * @return None
     */
    void Initialize();

    /*
     * Gets current ACM configuration
     */
    TInt GetConfiguration( TPublishedAcmConfigs& aConfig );

// from base class CActive

    /**
     * From CActive.
     * Gets called when ACM configuration changes
     *
     * @since S60 3.2
     * @return None
     */
    void RunL();

    /**
     * From CActive.
     * Gets called on cancel
     *
     * @since S60 3.2
     * @return None
     */
    void DoCancel();

private:  // data

    /**
     * Callback to call when notification via MDunServerCallback to be made
     * Not own.
     */
    MDunServerCallback* iServer;

    /**
     * Callback to call when notification(s) via MDunUsbConfig to be made
     */
    MDunUsbConfig* iCallback;

    /**
     * Current state of configuration waiting: active or inactive
     */
    TUsbConfigState iConfigState;

    /*
     * Protocol number of USB ACM to which listening is done
     */
    TUint8 iProtocol;

    /**
     * ACM config from the previous Get()
     * Used to check whether configs are added or removed and also array data
     * needed for check in the removal case
     */
    TPublishedAcmConfigs iConfig;

    /*
     * ACM configuration property
     */
    RProperty iAcmProperty;

    /*
     * Flag to indicate if configuration already received
     */
    TBool iConfigExist;

    };

#endif  // C_CDUNUSBCONFIG_H