--- /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 <e32base.h>
+#include <f32file.h>
+#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<TIptvDriveInfo> iAvailableDrives;
+
+
+ private:
+
+ /**
+ * Used to detect if refresh had any effect.
+ */
+ RArray<TIptvDriveInfo> iPreviousAvailableDrives;
+
+ /**
+ * Array of observers. Pointers not owned.
+ */
+ RArray<MIptvDriveMonitorObserver*> 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