serviceproviders/sapi_sysinfo/sysinfoservice/inc/activerequests.h
changeset 19 989d2f495d90
child 53 29eae4b7c31b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_sysinfo/sysinfoservice/inc/activerequests.h	Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,457 @@
+/*
+* Copyright (c) 2005-2006 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:  describes system information notifiers.
+*
+*/
+
+
+#ifndef __ACTIVEREQUESTS_H__
+#define __ACTIVEREQUESTS_H__
+
+//INCLUDES
+#include <e32property.h>
+#include "sysinfo.h"
+#include "sysrequest.h"
+
+// CONSTANT DECLARATIONS
+
+// FORWARD DECLARATIONS
+class   CRepository;
+
+/**
+*  @ref CActiveRequest base class to be extended for implementing asynchronous requests.
+*	static member function CreateActiveRequestL() is a factory method to create CActiveRequest
+*	object to handle specified asynchronous operation.
+*
+*  @lib sysinfoservice.lib
+*  @since S60 3.2
+*/
+NONSHARABLE_CLASS(CActiveRequest) : public CActive
+    {
+    public:
+    /**
+    * Issues asynchronous request. funtionality need to provided by implementing class.
+    */
+    virtual TInt Request() = 0;
+    /**
+    * @return Transaction ID associated with the asynchronous request.
+    */
+    inline TInt32  TransactionID() const;
+    /**
+    * @return type of request this object handling.
+    */
+    inline TSysRequest::TRequestType  RequestType() const;
+    /**
+    * Destructor.
+    */
+    ~CActiveRequest();
+
+    public:	
+    /**
+    * This is an factory method to create asynchronous request based on request 
+    * specified in aSysRequest.
+    *
+    * @param aSysRequest Input request consists of SA, Type of request, TID 
+    *	and SystemData if any.
+    *
+    * @param aActiveObj On return aActiveObj consists of active object that will 
+    *	handle requested asynchronus operation.
+    *
+    * @error	@p KErrNotFound	If requested SA not found.
+    *			@p KErrNotSupported	If specified requeust type doesn't qualify with  
+    *				requested SA specification.
+    *			@p KErrArgument	if specified input SystemData doesn't comply 
+    *				system attribute specification. 
+    */
+    static void CreateActiveRequestL( const TSysRequest& aSysRequest,
+                                        CActiveRequest*& aActiveObj );
+
+    protected:
+    /**
+    * C++ default constructor.
+    */
+    CActiveRequest(TSysRequest::TRequestType aReqType,TInt32 aTransID,
+                                            ISystemObserver* aObsrvr);
+    /**
+    * returns observer.
+    */
+    inline ISystemObserver* SystemObserver();
+
+    /**
+    * This function creates active objects that handles network related
+    * system attributes.
+    *
+    * @param aSysRequest Input request consists of SA, Type of request, TID 
+    *                   and SystemData if any.
+    *
+    * @param aActiveObj On return aActiveObj consists of active object that will 
+    *                   handle requested asynchronus operation.
+    *
+    * @error    @p KErrNotSupported	If specified requeust type doesn't qualify with  
+    *               requested SA specification.
+    *           @p KErrArgument	if specified input SystemData doesn't comply 
+    *               system attribute specification. 
+    */
+    static void CreateNetworkRequestL(const TSysRequest& aSysRequest,
+                                        CActiveRequest*& aActiveObj);
+
+    /**
+    * This function creates active objects that handles General Entity related
+    * system attributes.
+    *
+    * @param aSysRequest Input request consists of SA, Type of request, TID 
+    *	and SystemData if any.
+    *
+    * @param aActiveObj On return aActiveObj consists of active object that will 
+    *	handle requested asynchronus operation.
+    *
+    * @error    @p KErrNotSupported	If specified requeust type doesn't qualify with  
+    *               requested SA specification.
+    *           @p KErrArgument	if specified input SystemData doesn't comply 
+    *               system attribute specification. 
+    */
+    static void CreateGeneralRequestL(const TSysRequest& aSysRequest,
+    CActiveRequest*& aActiveObj);
+
+    /**
+    * This function creates active objects that handles Display Entity related
+    * system attributes.
+    *
+    * @param aSysRequest Input request consists of SA, Type of request, TID 
+    *	and SystemData if any.
+    *
+    * @param aActiveObj On return aActiveObj consists of active object that will 
+    *	handle requested asynchronus operation.
+    *
+    * @error    @p KErrNotSupported	If specified requeust type doesn't qualify with  
+    *               requested SA specification.
+    *           @p KErrArgument	if specified input SystemData doesn't comply 
+    *               system attribute specification. 
+    */
+    static void CreateDisplayRequestL(const TSysRequest& aSysRequest,
+                                        CActiveRequest*& aActiveObj);
+
+    private:
+    //	Transaction ID
+    TInt32                      iTransactionID;
+
+    //	Request Type.
+    TSysRequest::TRequestType   iRequestType;
+    //
+    ISystemObserver*            iObserver;
+    };
+
+#include "activerequest.inl"
+
+/**
+*  @ref ActiveStore This class maintains pointer reference of all ongoing 
+*	active requests. Offers funtionality to add or remove an active 
+*	request to/from the list. An active object request is identified by this 
+*	unique Transaction ID.
+*
+*  @lib sysinfoservice.lib
+*  @since S60 3.2
+*/
+class ActiveStore
+    {
+    public:
+    /**
+    * This function appends a new active request to the active store.
+    *
+    * @param aActiveReq Input active request to be appended.
+    *
+    * @error @p KErrAlreadyExists  
+    *               if Transaction ID specified already exists.
+    */
+    static void AddRequestL(const CActiveRequest* aActiveReq);
+    /**
+    * This function removes an active request in active store.
+    *
+    * @param aActiveReq Input active request to be appended.
+    *
+    * @return   @p KErrNone on success.
+    *           @p KErrNotFound if specified transaction id doesn't exists.
+    *				
+    */		
+    static TInt RemoveRequest(TInt32 aTransID);
+    
+    private:
+    /**
+    * This function releases or removes all requests stored.
+    */		
+    static void ReleaseResources();
+    
+    private:
+    //pointer array of active requests.
+    static RPointerArray<CActiveRequest>  iHandlers;
+
+    friend class CSysInfoService;
+    };
+
+/**
+*  @ref CCenrepNotifier active object class to handle asynchronous notifications
+*       of central repository key value changes.
+*
+*  @lib sysinfoservice.lib
+*  @since 3.2
+*/
+NONSHARABLE_CLASS(CCenrepNotifier): public CActiveRequest
+    {
+    public:	// Constructors and destructor
+
+    // Enumeration of supported commands by CCenrepNotifier.
+    enum TCommand  {
+        EPridictiveText,
+        EInputLanguage,
+        EBlueTooth,
+        EVibra,
+        EKeyLock,
+        };
+
+    public:
+    /**
+    * Two-phased constructor.
+    *
+    * @return A new instance of this class.
+    */    
+    static CCenrepNotifier* NewL( const TSysRequest& aRequest, 
+                                            TCommand aCommand);
+    /**
+    * Destructor.
+    */
+    ~CCenrepNotifier();
+
+    private:
+    /**
+    * C++ default constructor.
+    */
+    CCenrepNotifier(TSysRequest::TRequestType aReqType, TInt32 aTransID, 
+                            TCommand aCommand, ISystemObserver* aObsrver);
+
+    /**
+    * By default Symbian 2nd phase constructor is private.
+    */
+    void ConstructL(const TSysRequest& aRequest);
+
+    public:	
+    /**
+    * Issues notification request.
+    */
+    TInt Request();
+
+    protected: // from CActive
+    
+    void RunL();
+
+    void DoCancel();
+
+    private:	// DATA
+    /**
+    *	Local copy of Entity.
+    */
+    HBufC*          iEntity;
+
+    /**
+    *	Local copy of Key.
+    */
+    HBufC*          iKey;
+
+    /**
+    *	Handle to repository.
+    */
+    CRepository* 	iCenrep;
+
+    /**
+    *	Repository UID
+    */
+    TUid            iRepositoryUid;
+
+    /**
+    *	Repository KEY
+    */
+    TUint 			iRepositoryKey;
+
+    /**
+    *	Repository KEY
+    */
+    TInt			iValue;
+
+    /**
+    *	Supported command
+    */
+    TCommand		iCommand;
+    };
+
+/**
+*  @ref CPubSubNotifier active object class to handle publish & subscribe key value 
+*   changes.
+*  @lib   sysinfoservice.lib
+*  @since 3.2
+*/
+NONSHARABLE_CLASS(CPubSubNotifier): public CActiveRequest
+    {
+    public:	// Constructors and destructor
+
+    // Enumeration of supported commands by CPubSubNotifier.
+    enum TCommand
+        {
+        ERegistrationStatus,
+        ENetworkMode,
+        EChargingStatus,
+        EFlipStatus,
+        EGripStatus,
+        EInfraRed,
+        EMemoryCard
+        };
+
+    public:
+    /**
+    * Two-phased constructor.
+    *
+    * @return A new instance of this class.
+    */    
+    static CPubSubNotifier* NewL(const TSysRequest& aRequest, TCommand aCommand);
+    /**
+    * Destructor.
+    */
+    ~CPubSubNotifier();
+
+    private:
+
+    /**
+    * C++ default constructor.
+    */
+    CPubSubNotifier( TSysRequest::TRequestType aReqType, TInt32 aTransID, 
+                            TCommand aCommand, ISystemObserver* aObsrver);
+
+    /**
+    * By default Symbian 2nd phase constructor is private.
+    */
+    void ConstructL( const TSysRequest& aRequest);
+
+    public:	
+    /**
+    * Issues notification request.
+    */
+    TInt Request();
+
+    protected: // from CActive
+
+    void RunL();
+
+    void DoCancel();
+
+    private:	// DATA
+    /**
+    *	Local copy of Entity.
+    */
+    HBufC*      iEntity;
+
+    /**
+    *	Local copy of Key.
+    */
+    HBufC*      iKey;
+
+    /**
+    *	RProperty handle.
+    */
+    RProperty   iProperty;
+
+    /**
+    *	RProperty category UID.
+    */
+    TUid        iPropertyUid;
+
+    /**
+    *	RProperty KEY of any category.
+    */
+    TUint       iPropertyKey;
+
+    /**
+    *	RProperty category,KEY value.
+    */
+    TInt        iValue;
+
+    /**
+    *	CPubSubNotifier supported input command.
+    */
+    TCommand    iCommand;
+    };
+
+/**
+*  @ref CCriticalMemNotifier active object class to handle critical memory 
+*   notifications of drive.
+*  @lib   sysinfoservice.lib 
+*  @since 3.2
+*/
+
+NONSHARABLE_CLASS(CCriticalMemNotifier): public CActiveRequest
+    {
+    public:	// Constructors and destructor
+
+    /**
+    * Two-phased constructor.
+    *
+    * @return A new instance of this class.
+    */    
+    static CCriticalMemNotifier* NewL(const TSysRequest& aRequest);
+
+    /**
+    * Destructor.
+    */
+    ~CCriticalMemNotifier();
+
+    private:
+
+    /**
+    * C++ default constructor.
+    */
+    CCriticalMemNotifier(TSysRequest::TRequestType aReqType, TInt32 aTransID,
+                                                    ISystemObserver* aObsrver);
+
+    /**
+    * By default Symbian 2nd phase constructor is private.
+    */
+    void ConstructL(const TSysRequest& aRequest);
+
+    public:	
+
+    TInt Request();
+
+    protected: // from CActive
+
+    void RunL();
+
+    void DoCancel();
+
+    private:	// DATA
+
+    /**
+    *	Session handle to file server.
+    */
+    RFs         iFs;
+
+    /**
+    *	Drive number
+    */
+    TInt        iDrvNumber;
+
+    /**
+    *	Critical memory associcated with the drive.
+    */
+    TInt        iCriticalFreeMemory;
+    };
+
+
+#endif __ACTIVE_REQUESTS_H__
\ No newline at end of file