accessoryservices/accessoryserver/inc/Server/AccSrvConnectionHandler.h
changeset 0 4e1aa6a622a0
child 52 d6b9e89d80a3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/accessoryservices/accessoryserver/inc/Server/AccSrvConnectionHandler.h	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,389 @@
+/*
+* Copyright (c) 2002-2006 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:  Accessory connection handler
+*
+*/
+
+
+
+#ifndef CACCSRVCONNECTIONHANDLER_H
+#define CACCSRVCONNECTIONHANDLER_H
+
+// INCLUDE FILES
+#include "AccClientServerMessages.h"
+#include "AccSrvHandlerBase.h"
+#include "AccSrvQueueObserver.h" // MQueueObserver
+#include <AccPolGenericID.h>
+#include <AccPolValueRecord.h> //TAccPolValueType
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+struct TAccSrvRequestData
+    {
+    TAccPolNameRecord iName; //GetValue operation is made for this name
+    TInt iTrId; //Corresponding transaction id
+    TBool iUpdateNotification; //response for accessory update notification
+    };
+
+enum TConnectionHandlerStates
+{
+	EGetSelectionFromUser = 0,
+	EInitializeConnection,
+	EWaitForUINotifier
+};
+
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class MAccSrvConnectionControllerObserver;
+class CAccPolAccessoryPolicy;
+class CAccSrvASYProxyHandler;
+class CAccPolicyDB;
+class CAccSrvServerModel;
+
+// CLASS DECLARATION
+
+/**
+ * Accessory connection and disconnection related tasks are handled here.
+ *
+ * @lib AccServer.lib
+ * @since S60 3.1
+ */
+NONSHARABLE_CLASS( CAccSrvConnectionHandler ) : public CAccSrvHandlerBase,
+                                                public MQueueObserver
+    {
+    public:  // Constructors and destructor
+
+        /**
+         * Two-phased constructor.
+         */
+        static CAccSrvConnectionHandler* NewL( MAccSrvConnectionControllerObserver* aCallback,
+        									   CAccSrvServerModel * aModel,	
+                                               CAccPolAccessoryPolicy* aPolicy );
+
+        /**
+         * Destructor.
+         */
+        virtual ~CAccSrvConnectionHandler();
+
+    public: // New functions
+
+        /**
+         * Starts Accessory connection handling asynchronously.
+         * @since S60 3.1
+         * @param aGenericID Generic ID in question.
+         * @param aEvaluateConnectionRules If true evaluate connection rules
+         * @param aUpdateConnection Indicates new connection or update for existing connection
+         * @return void
+         */
+        void StartConnectionHandlingL( TAccPolGenericID& aGenericID, 
+                                       TBool aEvaluateConnectionRules, 
+                                       TBool aUpdatedConnection );
+        
+        /**
+         * Get connection handling generic id unique id
+         * @since S60 3.1
+         * @return Unique id for connection handler
+         */
+        TInt UniqueIDForConnectionHandler();
+        
+        /**
+         * Cancel connection handling
+         * @since S60 3.1
+         * @return void
+         */
+        void CancelConnectionHandling();
+
+        /**
+         * Resets all values. After completion this handler is 
+         * available for handing next connection
+         * @since S60 3.1
+         * @return void 
+         */
+        void ResetHandler();
+
+        /**
+         * Indicates is this handler available for connection handling
+         * @since S60 3.1
+         * @return EFalse if currently handling a connection, otherwise ETrue
+         */
+        TBool IsFree();
+
+    public: // Functions from base classes
+
+    protected:  // New functions
+
+    protected:  // Functions from base classes
+
+        /**
+        * From CActive
+        * Handles an active object's request completion event.
+        * Asynchronous connection handling is processed.
+        *
+        * @since S60 3.1
+        * @return void
+        */
+        void RunL();
+
+        /**
+        * From CActive
+        * The active scheduler calls this function if this active object's
+        * RunL() function leaves.
+        *
+        * @since S60 3.1
+        * @param aError The leave code
+        * @return KErrNone, when error has been handled
+        */
+        TInt RunError(TInt aError);
+
+        /**
+        * From MQueueObserver
+        * Provides empty definition for base class pure virtual declaration.
+        */
+        TBool CompleteMessageL( TMsgID aMsgID,
+                                TInt aErrorCode,
+                                TInt aUniqueID );
+
+        /**
+        * From MQueueObserver
+        * Provides empty definition for base class pure virtual declaration.
+        */
+        TBool CompleteProcessCommandL( TProcessCmdId aCmdn,
+                                       TInt aTrId,
+                                       TASYCommandParamRecord& aASYCommandParamRecord,
+                                       TPtr8* aPtrBuf=NULL );
+
+        /**
+        * From MQueueObserver
+        * Called when Queue passes message completion handling to registered observers.
+        * This is meant for GetValue() and SetValue() type of operations.
+        * Critical capabilities are queried from ASY during accessory connection.
+        * response from ASY for these queries are handled here.
+        *
+        * @since S60 3.1
+        * @param aMsgID       Message in question.
+        * @param aCmdResponse Value of the operation, used in GetValue()
+        *                     type of operations.
+        * @param aErrorCode   Error Code of the operation.
+        * @param aTrId        Transaction Id of the operation.
+        * @return void
+        */
+        void HandleValueMessageL( TMsgID aMsgID,
+                                  TAccValueTypeTBool aValue,
+                                  TInt aErrorCode,
+                                  TInt aTrId );
+
+        /**
+        * From MQueueObserver
+        * Called when Queue passes message completion handling to registered observers.
+        * This is meant for GetValue() and SetValue() type of operations.
+        * Critical capabilities are queried from ASY during accessory connection.
+        * response from ASY for these queries are handled here.
+        *
+        * @since S60 3.1
+        * @param aMsgID       Message in question.
+        * @param aCmdResponse Value of the operation, used in GetValue()
+        *                     type of operations.
+        * @param aErrorCode   Error Code of the operation.
+        * @param aTrId        Transaction Id of the operation.
+        * @return void
+        */
+         void HandleValueMessageL( TMsgID aMsgID,
+                                   TAccValueTypeTInt aValue,
+                                   TInt aErrorCode,
+                                   TInt aTrId );
+
+        /**
+        * From MQueueObserver
+        * Called when Queue passes message completion handling to registered observers.
+        * This is meant for GetValue() and SetValue() type of operations.
+        * Critical capabilities are queried from ASY during accessory connection.
+        * response from ASY for these queries are handled here.
+        *
+        * @since S60 3.1
+        * @param aMsgID       Message in question.
+        * @param aCmdResponse Value of the operation, used in GetValue()
+        *                     type of operations.
+        * @param aErrorCode   Error Code of the operation.
+        * @param aTrId        Transaction Id of the operation.
+        * @return void
+        */
+         void HandleValueMessageL( TMsgID aMsgID,
+                                   TDesC8& aValue,
+                                   TInt aErrorCode,
+                                   TInt aTrId );                                          
+        /**
+        * From MQueueObserver
+        * Called when Queue passes message completion handling to registered observers.
+        * This is meant for GetValue() and SetValue() type of operations.
+        * Critical capabilities are queried from ASY during accessory connection.
+        * response from ASY for these queries are handled here.
+        *
+        * @param aMsgID       Message in question.
+        * @param aPtrBuf      Value of the operation, used in GetValue()
+        *                     type of operations.
+        * @param aErrorCode   Error Code of the operation.
+        * @param aTrId        Transaction Id of the operation.
+        * @return void
+        */
+         void HandleValueMessageL( TMsgID aMsgID,
+                                   TInt aTrId,
+                                   TPtr8* aPtrBuf,
+                                   TInt aErrorCode );                                          
+    private:
+
+        /**
+        * Constructor with notify handling.
+        */
+        CAccSrvConnectionHandler( MAccSrvConnectionControllerObserver* aCallback,
+        						  CAccSrvServerModel * aModel,
+                                  CAccPolAccessoryPolicy* aPolicy );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Initializes critical capabilities and supported BT-profilies.
+        */
+        TBool InitializeCriticalCapsL();
+
+        /**
+        * Sends GetValue-command towards ASY.
+        */
+        void StartASYCommandHandlingL( TAccPolValueType aValueType,
+                                       TASYCommandParamRecord& aASYCommandParam );
+
+        /**
+        * Stores name and transaction ID while ASY query is ongoing.
+        * During response handling name in question can be retrieved from here
+        * according to the transaction Id with FindRequestData() method.
+        */
+        void StoreRequestData( TAccPolNameRecord aName, 
+                               TInt aTrId, 
+                               TBool aUpdateConnectionNotification );
+
+        /**
+        * Find stored request data. See StoreRequestData()
+        */
+        TInt FindRequestData( TInt aTrId );
+
+        /**
+        * Common HandleValueMessageL() implementation for TAccValueTypeTInt and
+        * TAccValueTypeTBool types.
+        */
+        void HandleValueMessagesL( TMsgID aMsgID,
+                                   TInt aValue,
+                                   TInt aErrorCode,
+                                   TInt aTrId );
+
+        /**
+        * Generic ID is updated according supported profiles received from BT-ASY.
+        */
+        void ResolveGenericIDL( TDesC8& aValue );
+
+        /**
+        * Common capabilities for all profiles are updated here.
+        */
+        void ResolveGidL();
+
+        /**
+        * Headset Profile (HSP) specific parts of Generic ID are updated.
+        */
+        void ResolveHSPSpecificGidL( TUint16 aSupportedFeatures );
+
+        /**
+        * Handsfree Profile (HFP) specific parts of Generic ID are updated.
+        */
+        void ResolveHFPSpecificGidL( TUint16 aSupportedFeatures );
+
+        /**
+        * Audio Video Remote Control Profile (AVRCP) specific parts of Generic ID are updated.
+        */
+        void ResolveAVRCPSpecificGidL( TUint16 aSupportedFeatures );
+
+        /**
+        * Advanced Audio Distribution Profile (A2DP) specific parts of Generic ID are updated.
+        */
+        void ResolveA2DPSpecificGidL( TUint16 aSupportedFeatures );
+                
+        /**
+        * Update KAccSetVolumeLevel capability value.
+        */
+        void UpdateSetVolumeLevelCapabilityL( TInt32 aCapability );
+           
+        /**
+        * Setup selection dialog with selection list
+        */
+        void SetupSelectionDialogL( TUint32 aSelectionListBitmask);
+
+        /**
+        * Open selection dialog with selection list
+        */
+        void OpenSelectionDialogL();
+		
+		
+
+    public:     // Data
+
+    protected:  // Data
+
+    private:    // Data
+
+        //Generic ID is stored here during connection handling asynchronous operatrion(s)
+        TAccPolGenericID                iGenericID;
+
+        //Handle to the Accessory Policy
+        CAccPolAccessoryPolicy*         iPolicy;//Not owned
+
+        //Name and corresponding Transaction ID for each ASY request is stored here.
+        RArray<TAccSrvRequestData>      iRequestDataArray;
+        
+        //pointer to server model
+        CAccSrvServerModel * iModel;
+        
+        //connection handler state...
+        TConnectionHandlerStates iState;
+        
+		//user selection reply     
+	  	TInt iReplyValue;
+		
+		//user selection reply package    	
+		TPckg<TInt> iReplyPck;
+	
+		//ui notifier
+		RNotifier iNotifier;
+		
+		//is connection handling update for old connection
+		TBool iConnectionUpdate;
+        
+		//selection bitmask
+        TInt iSelectionListBitmask;
+
+    public:     // Friend classes
+
+    protected:  // Friend classes
+
+    private:    // Friend classes
+
+};
+
+#endif      // CACCSRVCONNECTIONHANDLER_H
+
+// End of File