diff -r 000000000000 -r 96612d01cf9f videofeeds/utils/inc/CIptvDriveMonitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videofeeds/utils/inc/CIptvDriveMonitor.h Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,338 @@ +/* +* Copyright (c) 2007 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: Helper class for Video Center for drive operations/monitoring.* +*/ + + + + + +#ifndef CIPTVDRIVEMONITOR_H +#define CIPTVDRIVEMONITOR_H + +// INCLUDES +#include +#include +#include "TIptvDriveInfo.h" +#include "TIptvDriveMonitorEvent.h" +#include "MIptvDriveMonitorObserver.h" +#include "IptvDebug.h" + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** + * Helper class for Video Center for drive operations/monitoring. + * User can get available drives (through iAvailableDrives public member) + * and be notified when drives change (through MIptvDriveMonitorObserver interface). + */ +class CIptvDriveMonitor : public CActive + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + IMPORT_C static CIptvDriveMonitor* NewL(); + + /** + * Two-phased constructor. Use this is owner object already has a file session open. + * + * @param aFileSession file session. + */ + IMPORT_C static CIptvDriveMonitor* NewL( const RFs& aFileSession ); + + /** + * Destructor. + */ + IMPORT_C virtual ~CIptvDriveMonitor(); + + public: + + /** + * Registers observer for drive events. + * iAvailableDrives is updated automatically if there are any + * observers registered, ie there is no need to call RefreshAvailableDrivesL + * when observing. + * Don't keep observers around if they do not need events. Observing should be used + * when user needs to know immedetially about memory card insertion/removed events, + * or drive locked/unlocked events. + * + * @param aObserver observer, ownership does not move. + */ + IMPORT_C void RegisterObserverL( MIptvDriveMonitorObserver* aObserver ); + + /** + * Removes observer, ownership does not move. + * @param aObserver observer to be removed from observers list. + */ + IMPORT_C void RemoveObserverL( MIptvDriveMonitorObserver* aObserver ); + + /** + * Updates iAvailableDrives member variable from File server. + * This is called in ConstructL() also. + */ + IMPORT_C void RefreshAvailableDrivesL(); + + /** + * Returns the position index of aDrive in iAvailableDrives. + * + * @param aDrive drive to search. + * @return Position index of aDrive in iAvailableDrives. If not found, + * KErrNotFound is returned. + */ + IMPORT_C TInt ArrayPos( TInt aDrive ); + + /** + * Returns the position index of aDrive in iAvailableDrives. If not + * found, leaves with KErrNotFound code. + * + * @param aDrive drive to search. + * @return Position index of aDrive in iAvailableDrives. + */ + IMPORT_C TInt ArrayPosL( TInt aDrive ); + + /** + * Returns the default removable drive (= memory card drive) from iAvailableDrives + * array. Leaves with KErrNotFound if not found. + */ + IMPORT_C TInt MemoryCardDriveL(); + + /** + * Returns the default removable drive (= memory card drive) from iAvailableDrives + * array. Returns KErrNotFound if not found. + * + * @return drive number, or KErrNotFound if not found. + */ + IMPORT_C TInt MemoryCardDrive(); + + /** + * Returns the default mass memory drive if found from iAvailableDrives. + * Mass storege drive means the drive which is preferred for storing large + * files in the device, the drive itself can be anything, usually not c though. + * Leaves with KErrNotFound if not found. + * + * @return Drive number. + */ + IMPORT_C TInt MassStorageDriveL(); + + /** + * Returns the default mass memory drive if found from iAvailableDrives. + * Mass storege drive means the drive which is preferred for storing large + * files in the device, the drive itself can be anything except c-drive. + * Returns KErrNotFound if not found. + * + * @return Drive number, or KErrNotFound if not found. + */ + IMPORT_C TInt MassStorageDrive(); + + /** + * Returns the phone memory drive from iAvailableDrives array. + * Leaves with KErrNotFound if not found. + * + * @return Drive number. + */ + IMPORT_C TInt PhoneMemoryDriveL(); + + /** + * Returns the PhoneMemory drive from iAvailableDrives array. + * Returns KErrNotFound if not found. + * + * @return Drive number, or KErrNotFound if not found. + */ + IMPORT_C TInt PhoneMemoryDrive(); + + /** + * Returns the first fixed (= non removable) drive from iAvailableDrives array. + * Leaves with KErrNotFound if not found. + * + * @param aExcludeCDrive If ETrue, then C-drive is excluded. + * @return Drive number. + */ + IMPORT_C TInt FixedDriveL( TBool aExcludeCDrive ); + + /** + * Returns the first fixed (= non removable) drive from iAvailableDrives array. + * Returns KErrNotFound if not found. + * + * @param aExcludeCDrive If ETrue, then C-drive is excluded. + * @return Drive number, or KErrNotFound if not found. + */ + IMPORT_C TInt FixedDrive( TBool aExcludeCDrive ); + + /** + * @return ETrue if aDrive is the preferred mass storage drive for the large files. + */ + IMPORT_C TBool IsMassStorageDriveL( TInt aDrive ); + + /** + * @return ETrue if aDrive is memory card type. + */ + IMPORT_C TBool IsMemoryCardDriveL( TInt aDrive ); + + /** + * @return ETrue media is present in the drive. (Memory card is inserted and drive is not locked). + */ + IMPORT_C TBool IsPresentL( TInt aDrive ); + + /** + * @return The system drive. Might not be in iAvailableDrives. + */ + IMPORT_C TInt SystemDrive(); + + /** + * Finds out if memory card is inserted and not locked. + * + * @return Returns ETrue is memory card is inserted and usable (not locked), EFalse otherwise. + */ + IMPORT_C TBool IsMmcInserted(); + + /** + * Gets the used memory from cenrep. If cenrep contains invalid drive or value is not found, + * chooses the preferred drive in the following order: 1. mass storage 2. memory card + * 3. EDriveC. If cenrep value was not usable, the chosen drive is written to cenrep. + * Leaves with system-wide error code if wasn't able to get the used memory. + * + * @param aUsedMemory The used memory drive is written here. + */ + IMPORT_C void GetUsedMemoryL( TInt& aUsedMemory ); + + + protected: // Functions from base classes + + /** + * From CActive, RunL. + * Called when operation completes. + */ + IMPORT_C void RunL(); + + /** + * From CActive, cancels request. + */ + void DoCancel(); + + /** + * From CActive, handles leaves from RunL. + */ + TInt RunError( TInt aError ); + + private: + + /** + * C++ default constructor. + */ + CIptvDriveMonitor(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /** + * By default Symbian 2nd phase constructor is private. + * + * @param aFileSession + */ + void ConstructL( const RFs& aFileSession ); + + /** + * Sends event to observers. + * + * @param aEvent event to send. + * @param aDrive drive which caused the event. + */ + void SendEvent( TIptvDriveMonitorEvent::TEvent aEvent, TInt aDrive ); + + /** + * Compares iPreviousAvailableDrives and iAvailableDrives arrays and + * sends appropriate events if they differ. + */ + void CompareOldAndNewAvailableDrives(); + + /** + * Returns drive type as a descriptor. For debugging only. + * @param aType Drive type, see valid values from e32const.h TMediaType enum. + */ + const TDesC& DriveTypeDes( TInt aType ); + + /** + * Prints available drives. For debugging only. + */ + void PrintAvailableDrives(); + + public: + + /** + * Array of currently available drives. These are updated + * with RefreshAvailableDrivesL -method or from file + * server event. RefreshAvailableDrivesL is also called upon creation + * of this object. + * iAvailableDrives array contains drives which are available for mass + * storaging videos. If there is hard disk and memory card + * available(both e and f-drives), then c-drive is excluded from the array. + */ + RArray iAvailableDrives; + + + private: + + /** + * Used to detect if refresh had any effect. + */ + RArray iPreviousAvailableDrives; + + /** + * Array of observers. Pointers not owned. + */ + RArray iObservers; + + /** + * Session to file server. + */ + RFs iFs; + + /** + * ETrue if iFs is provided by the user of this class. + */ + TBool iIfsIsProvidedByUser; + + /** + * Default memory for storing large files. + */ + TInt iDefaultMassStorageDrive; + + /** + * Default memory card. + */ + TInt iDefaultMemoryCardDrive; + + /** + * System drive. + */ + TInt iSystemDrive; + + }; + +#endif // CIPTVDRIVEMONITOR_H + +// End of File