usbuis/usbui/USBClassChangeUIPlugin/inc/USBClassChangeUIPluginModel.h
author Fionntina Carville <fionntinac@symbian.org>
Mon, 15 Nov 2010 13:37:26 +0000
branchRCL_3
changeset 95 55a3258355ea
parent 0 1e05558e2206
permissions -rw-r--r--
Bug 3539. Update localisation mappings for usbservices.

/*
* Copyright (c) 2005-2009 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:  Declares model class for application.
*
*/


#ifndef USBCLASSCHANGEUIPLUGINMODEL_H
#define USBCLASSCHANGEUIPLUGINMODEL_H


// INCLUDES
#include <badesca.h>
#include <usbman.h>
#include <usbwatcher.h>
#include <eikfrlb.h>
#include <eikclb.h>
#include <aknlists.h> 
#include "USBClassChangeUIPlugin.hrh"
#include "USBClassChangeUIPluginCRWatcher.h"
#include "USBDeviceStateWatcher.h"
#include "usbotghoststatewatcher.h"

// CONSTANTS
/** granularity for supported modes array */
const TInt KUSBClassChangeUISupportedModesGranularity = 3;

// FORWARD DECLARATIONS
class CUSBDeviceStateWatcher;

// CLASS DECLARATION

/**
 * A callback interface for informing change of settings and device state.
 */
class MUSBUIObserver : public MUSBDeviceStateObserver, 
    public MUSBOtgHostStateObserver
    {
    public: // New functions
        
        /**
        * Informs the observer that a setting has been changed. 
        * The list should be refreshed.
        */
        virtual void SettingChanged() = 0;
    };

/**
* This class has access to all data needed by this application.
* All manipulation of data is done through this class.
*/
class CUSBClassChangeUIPluginModel : public CActive, 
    public MUSBUICRSettingObserver, MUSBDeviceStateObserver, MUSBOtgHostStateObserver
    {
    public: // Constructors and destructor

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

    public: // New functions
        
        
        /**
        * Factory method NewL
        * @return a pointer to itself
        */
        static CUSBClassChangeUIPluginModel* NewL();
        
        
        /**
        * Sets the USB mode.
        * @param aMode the id of the selected personality 
        */
        void SetUSBModeL( TInt aMode );

        /**
        * Gets the USB mode.
        * @return the id of the personality
        */
        TInt USBMode();
        
        /**
         * Gets the number of usb personalities.
         * @return the number of existing personalities 
         */
        TInt PersonalityCount() ;
        /**
         * Gets the current device state.
         * @param   aState  receives the current state of the USB device
         * @return  KErrNone if successful, otherwise the error that occurred
         */
        TInt GetDeviceState(TUsbDeviceState& aState);

        /**
         * Gets description for the specified USB mode (personality ID)
         * @param   aMode a personality id
         * @param   aDescription a localized text string
         * @return  KErrNone if successful, otherwise the error that occurred.
         */
        TInt GetDescription(TInt aMode, HBufC*& aDescription);

        /**
        * Updates temporary member variable data.        
        * @param aObserver Reference to MUSBUIObserver instance.        
        */
        void SetSettingsObserver(MUSBUIObserver* aObserver);
        
        /*
        * Reads the supported USB modes from the resource file and CenRep.
        * Adds modes to the CDesCArrayFlat lists to be used either
        * for list box or for setting page
        * @param aListBox The list where the USB modes are appended for list box
        * @param aListBoxDefault The list where the USB modes are appended with their secondary line "default" 
        * @param aListBoxActive The list where the USB modes are appended with their secondary line "active" 
        * @param aPopUpItems The list where the descriptive strings will be stored 
        * @param aIconArray The list where icons for USB modes are stored
        */
        void SupportedUSBModeArraysL(  CDesCArrayFlat& aListBox, CDesCArrayFlat& aListBoxDefault,
                CDesCArrayFlat& aListBoxActive, CDesCArrayFlat& aPopUpItems, CArrayPtrFlat<CGulIcon>& aIconArray );       
        
        /**
        * From MUSBUICRSettingObserver.
        * Changes the USB mode in the USB application. 
        * Called by CUSBClassChangeUICenRepWatcher, when the key 
        * KUsbWatcherPersonality is changed by the USBWatcher.
        * @param aKey identifies the setting that has changed
        */
        void SettingChangedL( TUint32 aKey );

        /**
         * From MUSBOtgHostStateObserver
         * @see MUSBOtgHostStateObserver::OtgHostIdPinStateChanged
         */
        void OtgHostIdPinStateChanged(TBool aIsIdPinOn);
        
        /**
         * From MUSBOtgHostStateObserver
         * @see MUSBOtgHostStateObserver::OtgHostIdPinStateChanged
         */
        void HostEventNotify(TDeviceEventInformation aEventInfo);
        
        /**
         * From MUSBDeviceStateObserver.
         * Informs the observer that USB device state has changed.
         * @param aPreviousState previous device state.
         * @param aCurrentState current device state.
         */
        void DeviceStateChanged(TUsbDeviceState aPreviousState,
                                TUsbDeviceState aCurrentState);

        
        /**
        * Gets the IDs of supported USB personalities.
        * @return RArray of personality IDs
        */
        RArray<TInt>& GetUsbIds();
             
        /**
         * Returns if it acts as a host and the driver to the attached pheripheral 
         * is loaded successfully(or partially). 
         * NOTE: Only single perihperal supported now.
         * @param aHasPeripheralEnabled Is A-device is ready to be used or not
         * @return KErrNone if successful, otherwise the error that occurred
         */
        TInt HasPeripheralEnabled(TBool& aHasPeripheralEnabled);
        
  
    protected:
        /**
        * Default ConstructL can leave.
        */
        void ConstructL();

	    /**
        * C++ default constructor.
        */
        CUSBClassChangeUIPluginModel();        
        
        /**
        * Derived from CActive
        */
        void RunL();

        /**
        * Derived from CActive
        */
        void DoCancel();
        
    private:
        /**
         * selects the icon related to each mode to be added into the iconlist
         * @param aMode the mode id
         * @param aIconArray The list where icons for USB modes are stored
         */
        void AddIconL (TInt aMode, CArrayPtrFlat<CGulIcon>& aIconArray);
               
        /**
         * creats and append the icons to the list
         * @param aID Item ID of the masked bitmap to be created.
         * @param aFilename Filename to be used to construct the item.
         * @param aBitmapId The ID if bitmap 
         * @param aMaskId The ID of bitmap's mask
         * @param aIconArray The list where icons for USB modes are stored
         */
        void CreateAndAppendIconL( const TAknsItemID& aID,
                                   const TDesC& aFileName,
                                   const TInt aBitmapId,
                                   const TInt aMaskId,
                                   CArrayPtrFlat<CGulIcon>& aIconArray);
                 
    private: // Data
         // Reference to settings observer
         MUSBUIObserver* iObserver;

         // References to central repository watcher
         // owned by this class
         CUSBClassChangeUIPluginCRWatcher* iCRPersonalityWatcher;

         // Reference to device state watcher
         // owned by this class
         CUSBDeviceStateWatcher* iDeviceStateWatcher;
         
         // Contains USB mode indexes
         RArray<TInt> iUsbModeIndexes; 
         
         // Central repository handle 
         // owned by this class
         CRepository* iRepository; 
         
         /** Handle to usbman for retrieving the personalities */
         RUsb iUsbman;
         
         /** Handle to USBWatcher for setting the personality */
         RUsbWatcher iUsbWatcher;         
         
         /** Is connected to USB Watcher */
         TBool iUsbWatcherConnected;
         
         /** UsbOtg status watcher */
         CUSBOtgHostStateWatcher* iOtgHostStateWatcher;
         
         /**
          * Ids of the devices for which host drivers have been loaded.
          * When we start to support hubs, there may be more than one element
          * in this array.
          */
         RArray<TInt> iDeviceIDs;
		 
         //Number of personalities
         TInt iPersonalityCount;
         
    };

#endif // USBCLASSCHANGEUIPLUGINMODEL_H

// End of File