installationservices/swi/source/daemon/drivewatcher.h
branchRCL_3
changeset 26 8b7f4e561641
parent 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/source/daemon/drivewatcher.h	Wed Sep 01 12:22:02 2010 +0100
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2004-2009 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: 
+*
+*/
+
+
+/**
+ @file 
+ @internalComponent
+ @released
+*/
+
+#ifndef __DRIVEWATCHER_H__
+#define __DRIVEWATCHER_H__
+
+#include <e32base.h>
+#include <f32file.h>
+
+namespace Swi
+{
+
+/**
+ * Observer interface called whenever a media change is detected.
+ */
+class MDriveObserver
+	{
+public:
+	/// Enumeration indicating whether a card was inserted or removed
+	enum TChangeType { EMediaInserted, EMediaRemoved };
+	
+	/**
+	 * This function is called to indicate a media change has occurred.
+	 *
+	 * @param aChangeType	EInserted to indicate media has been inserted,
+	 *						or ERemoved to indicate media has been removed.
+	 */
+	virtual void MediaChangeL(TInt aDrive, TChangeType aChangeType)=0;
+	};
+
+/**
+ * This active object waits for an indication that the media has changed,
+ * and then notifies its observer.
+ */
+class CDriveWatcher : public CActive
+	{
+public:
+	static CDriveWatcher* NewL(RFs& aFs, TInt aDrive, MDriveObserver& aObserver,TInt aPriority = EPriorityStandard);
+	static CDriveWatcher* NewLC(RFs& aFs, TInt aDrive, MDriveObserver& aObserver,TInt aPriority = EPriorityStandard);
+	
+	~CDriveWatcher();
+
+	TInt Drive() const;
+private:
+	CDriveWatcher(RFs& aFs, TInt aDrive, MDriveObserver& aObserver, TInt aPriority);
+
+	void ConstructL();
+
+// from CActive
+	void DoCancel();
+	void RunL();
+
+	/// Set up change notification.
+	void WaitForChangeL();
+
+	/**
+	 * Notifies the observer of the appropriate media change depending on whether
+	 * media is now present on the drive we're currently watching.
+	 */
+	void NotifyMediaChange();
+	
+	/** 
+	 * Determines if the media is present in the drive we are currently watching.
+	 *
+	 * @return ETrue if the media is present, EFalse otherwise.
+	 */
+	TBool IsMediaPresentL();
+
+private:
+	/// Not owned by this class
+	RFs& iFs;
+	
+	/// Drive number we are watching
+	TInt iDrive;
+
+	/// Observer to notify of changes
+	MDriveObserver& iObserver;
+	};
+
+// inline functions from CDriveWatcher
+
+inline TInt CDriveWatcher::Drive() const
+	{
+	return iDrive;
+	}
+	
+} //namespace Swi
+
+#endif // #ifndef __DRIVEWATCHER_H__
+