bluetoothengine/btsac/inc/btsaController.h
changeset 0 f63038272f30
child 21 0ba996a9b75d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btsac/inc/btsaController.h	Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,254 @@
+/*
+* Copyright (c) 2005 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:  Declaration for CBTSAController class. This class is advertised
+*				 to E-com framework (@see proxy.cpp) so that it loads this class when 
+*				 this plugin gets loaded. That is why this class implements the interface
+*				 of the module (currently BT Accessory Server) which loads this plugin. Being
+*				 main class, this class constructs other classes and also recieves callbacks,
+*				 hence implementing their interfaces. 
+*
+*/
+
+
+#ifndef BTSACONTROLLER_H
+#define BTSACONTROLLER_H
+
+
+
+//  INCLUDES
+
+// Implement Interface provided by 'BT Accessory Server' component. E-com framework
+// uses this interface to load this plugin
+#include <es_sock.h>
+#include <btaccPlugin.h>    
+#include "btsacdefs.h"
+#include "btsacStreamerController.h" 	//MBTAudioAdaptationObserver
+#include "btsacActiveObserver.h" 		//MBtsacActiveObserver
+
+
+// CONSTANTS
+
+// DATA TYPES
+
+// FORWARD DECLARATIONS
+class CBtsacState;
+class CBTSACGavdp;
+class CBTSACSEPManager;
+class CBTSACStreamerController; 
+
+// CLASS DECLARATION
+
+/**
+*  
+*  
+*  
+*/
+NONSHARABLE_CLASS(CBTSAController) : public CBTAccPlugin, public MBTAudioAdaptationObserver, public MBtsacActiveObserver
+     {
+public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * After construction the instance is ready to serve requests.
+        * Also starts listening to incoming connections from BT Stereo 
+        * audio accessories.
+        */
+        static CBTSAController* NewL(TPluginParams& aParams);
+        
+        /**
+        * Destructor.
+        * Removes service and security registrations and stops listening to
+        * incoming connections.
+        */
+        virtual ~CBTSAController();
+
+	    /** 
+	     * State transition
+	     * 
+	     * @since S60 v3.1
+	     * @param aState the next state to be entered.
+	     */
+	    void ChangeStateL(CBtsacState* aState);
+
+public:
+		void ResetRemoteCache();
+		void InitializeSEPManager();
+		void CleanSockets();
+		void StoreAccInfo();
+		void DeleteAccInfo();
+		TBool IsAccInfoAvailable();
+		TInt AbortStream();
+		
+		void NewAccessory(const TBTDevAddr& aBDAddr);
+        void DisconnectedFromRemote(const TBTDevAddr& aAddr, TInt aError );      
+        void AccessoryOpenedAudio(const TBTDevAddr& aBDAddr);
+		void AccessoryClosedAudio(const TBTDevAddr& aBDAddr);
+    	void AccessorySuspendedAudio(const TBTDevAddr& aBDAddr);
+		void CompletePendingRequests(TUint aCompleteReq, TInt aError);
+		
+		void SetRemoteAddr(const TBTDevAddr& aRemoteAddr);
+		TBTDevAddr GetRemoteAddr() const;
+		TBool IsOpenAudioReqFromAccFWPending() const;
+		void SetSEPIndex(TInt aIndex);
+		TInt GetSEPIndex() const;
+		void SetResetAudioInput(TBool aReset);
+		TBool GetResetAudioInput() const;
+		CBtsacActive* GetGavdpErrorActive() const;
+		void GAVDP_Error(TInt aError) ;
+      
+private:
+
+        /**
+        * C++ default constructor.
+        */        
+        CBTSAController(TPluginParams& aParams);
+
+        /**
+        * Symbian 2nd phase constructor.
+        * Starts listening to incoming connections from BT Stereo 
+        * audio accessories.
+        * Gets ready to accept requests from clients.
+        */
+        void ConstructL(/*TPluginParams& aParams*/);
+	
+public: // From MBTAudioAdaptationObserver
+	
+		virtual void NotifyError(TInt aError); 
+        
+private: // Functions from CBTAccPlugin
+
+   		 /** 
+		* BT Acc Server learns if plugin supports mono audio or not 
+		* while loading the plugin
+		@param 	None.
+		@return ETrue if plugin supports mono audio, TFalse otherwise.
+		*/
+    	virtual TProfiles PluginType();
+    
+    	/** 
+		* Called by BT Acc Sever to connect to mono or stereo accessory
+		* @param aAddr Bluetooth Device address of the remote device
+		* @return result of operation
+		*/
+		virtual void ConnectToAccessory(const TBTDevAddr& aAddr, TRequestStatus& aStatus);
+
+		/** 
+		* Called by BT Acc Sever to connect to mono or stereo accessory
+		* @param aAddr Bluetooth Device address of the remote device
+		* @return result of operation
+		*/
+		virtual void CancelConnectToAccessory(const TBTDevAddr& aAddr);
+		
+		/** 
+		* Called by BT Acc Sever to connect to mono or stereo accessory
+		* @param aAddr Bluetooth Device address of the remote device
+		* @return result of operation
+		*/
+		virtual void DisconnectAccessory(const TBTDevAddr& aAddr, TRequestStatus& aStatus);
+
+		/** 
+		* Called by BT Acc Sever to open audio link 
+		* @param aAddr Bluetooth Device address of the remote device
+		* @return result of operation
+		*/
+		virtual void OpenAudioLink(const TBTDevAddr& aAddr, TRequestStatus& aStatus);
+
+    	/** 
+    	* Called by BT Acc Sever to cancel opening of audio link
+    	@param aAddr Bluetooth Device address of the remote device
+    	@return result of operation
+    	*/
+    	void CancelOpenAudioLink(const TBTDevAddr& aAddr );
+
+    	/** 
+    	* Called by BT Acc Sever to connect to mono or stereo accessory
+    	@param aAddr Bluetooth Device address of the remote device
+    	@return result of operation
+    	*/
+    	void CloseAudioLink(const TBTDevAddr& aAddr, TRequestStatus& aStatus);
+    	
+        /** 
+    	* Called by BT Acc Sever to cancel closing of audio link
+    	@param aAddr Bluetooth Device address of the remote device
+    	@return 
+    	*/
+    	void CancelCloseAudioLink(const TBTDevAddr& aAddr );
+
+        /**
+        * BTAccServer informs BTSAC to start streaming after getting permission
+        * from Acc Fw
+        */
+        virtual void StartRecording();   
+        
+	   	/*
+	   	 * Defaults from MBtsacActiveObserver
+		 */	
+		/**
+	     * Handles the request completion event.
+	     *
+	     * @since S60 v3.1
+	     * @param aActive the Active Object to which the request is assigned to.
+	     */
+		virtual void RequestCompletedL(CBtsacActive& aActive);
+
+	    /**
+	     * Handles the cancellation of an outstanding request.
+	     *
+	     * @since S60 v3.1
+	     * @param aActive the Active Object to which the request is assigned to.
+	     */
+		virtual void CancelRequest(CBtsacActive& aActive);
+
+		
+private:
+		
+		/** 
+		* Called by BT Acc Sever to inform plugin that accessory is in use. 
+		@param  None.
+		@return None.
+		*/
+		virtual void AccInUse();
+
+public: // Data
+        CBTSACGavdp* iGavdp;
+		CBTSACStreamerController* iStreamer;
+		CBTSACSEPManager* iLocalSEPs;
+		CBTSACSEPManager* iRemoteSEPs;
+		RArray<RSocket> iStreamingSockets;
+		
+private: // Data
+	   /**
+     	* the current state.
+     	*/
+    	CBtsacState* iState;
+    	
+    	/**
+     	* AO for handling gavdp errors.
+     	*/
+    	CBtsacActive* iGavdpErrorActive;
+    	
+    	TBTDevAddr iRemoteAddr;
+    	TInt  iSBCSEPIndex;   // SBC SEP Index in iRemoteSEPs array
+    	TBool iResetAudioInput;
+    	TRequestStatus* iConnectStatus;
+        TRequestStatus* iDisconnectStatus;
+        TRequestStatus* iOpenAudioStatus;
+        TRequestStatus* iCloseAudioStatus;
+        RPointerArray<CBTSACSEPManager> iAccDb;    // one SEP manager for each accessory
+    };
+
+
+#endif      // BTSAC_CONTROLLER_H
+            
+// End of File
\ No newline at end of file