os/mm/devsound/sounddevbt/src/A2dpBlueTooth/headsetaudioif/A2dpBTheadsetAudioIf.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 //
    15 
    16 #ifndef __A2DPBTHEADSETAUDIOIF_H__
    17 #define __A2DPBTHEADSETAUDIOIF_H__
    18 
    19 #include <e32base.h>
    20 #include <bttypes.h> //TBTDevAddr
    21 #include <es_sock.h> //RSocketServer, RSocket
    22 #include <bt_sock.h> //RBTPhysicalLinkAdaptor
    23 #include "GavdpStateMachine.h"
    24 #include "RTPStreamer.h"
    25 
    26 class CA2dpCodecUtilities; //fwd ref
    27 class CMMFCodec; //fwd ref
    28 class TRange;	// fwd ref
    29 
    30 
    31 /**
    32 API to access and send audio to an A2DP compliant audio headset
    33 This API is used internally within the Symbian reference 
    34 CMMFDevSound/CMMFHwDevices/CRoutingSoundPlayDevice.
    35 
    36 @internalTechnology
    37 */
    38 class CA2dpBTHeadsetAudioInterface : public CBase, public MGAVDPStateChangeObserver, public MRTPStreamerObserver
    39 	{
    40 public:
    41 	IMPORT_C static CA2dpBTHeadsetAudioInterface* NewL();
    42 	IMPORT_C ~CA2dpBTHeadsetAudioInterface();	
    43 	IMPORT_C void Initialize(const TBTDevAddr& aRemoteAddress, TRequestStatus& aStatus);
    44 	IMPORT_C void CancelInitialize();
    45 	IMPORT_C TInt GetSupportedDataTypes(RArray<TFourCC>& aSupportedDataTypes) const;
    46 	IMPORT_C TInt GetSupportedSampleRates(RArray<TUint>& aSupportedDiscreteRates, RArray<TRange>& aSupportedRateRanges) const;
    47 	IMPORT_C TInt GetSupportedChannels(RArray<TUint>& aSupportedChannels, TMMFStereoSupport& aStereoSupport) const;
    48 	IMPORT_C TInt SetDataType(const TFourCC& aDataType);
    49 	IMPORT_C TInt SetSampleRate(TUint aSampleRate);
    50 	IMPORT_C TInt SetChannels(TUint aChannels, TMMFStereoSupport aStereoSupport);
    51 	IMPORT_C void OpenDevice(TRequestStatus& aStatus);
    52 	IMPORT_C void CancelOpenDevice();
    53 	IMPORT_C void CloseDevice(TRequestStatus& aStatus);
    54 	IMPORT_C TUint Volume() const;
    55 	IMPORT_C TInt SetVolume(TUint aVolume);
    56 	IMPORT_C void PlayData(const TDesC8& aData, TRequestStatus& aStatus);
    57 	IMPORT_C void CancelPlayData();
    58 	IMPORT_C void FlushBuffer();
    59 	IMPORT_C TUint BytesPlayed() const;
    60 	IMPORT_C void ResetBytesPlayed();
    61 	IMPORT_C void PauseBuffer();
    62 	IMPORT_C void ResumePlaying();
    63 	IMPORT_C void NotifyError(TRequestStatus& aStatus);
    64 	IMPORT_C void CancelNotifyError();
    65 	
    66 	//APIs only used for unit testing purposes - not needed for BT server or routing sound device
    67 	IMPORT_C MGavdpUser* TEST_MGavdpUser();
    68 	IMPORT_C void TEST_ForceRemoteSBCCodecConfiguration(const TSBCCodecCapabilities& aRemoteCodecConfiguration);
    69 private:
    70 	CA2dpBTHeadsetAudioInterface();
    71 	void ConstructL();
    72 	
    73 	void ProcessGAVDPStateChangeIdleToOpen(TInt aError);
    74 	void ProcessGAVDPStateChangeOpenToStreaming(TInt aError);
    75 	void ProcessGAVDPStateChangeStreamingToOpen(TInt aError);
    76 
    77 	//MGAVDPStateChangeObserver
    78 	void GAVDPStateChangeComplete(const TGAVDPState& aInitialState, TInt aError);
    79 	void GAVDPStateMachineEvent(TInt aError);
    80 	void GAVDPStateMachineStreamSuspendedByRemoteHeadset();
    81 	TInt GAVDPStateMachineReconfigureByRemoteHeadset();
    82 	void GAVDPStateMachineStreamResumedByRemoteHeadset();
    83 	
    84 	//MRTPStreamerObserver
    85 	void RTPStreamerEvent(TInt aError);
    86 
    87 	TInt SetSniffMode(TBool aSniffMode);
    88 private:
    89 	//owned classes
    90 	CGAVDPStateMachine* iGAVDPStateMachine;
    91 	CActiveRTPStreamer* iRTPStreamer;
    92 	CMMFCodec* iCodec;
    93 	CA2dpAudioCodecConfiguration* iA2dpCodecConfiguration;
    94 	
    95 	RSocketServ iSocketServer;
    96 	RBTPhysicalLinkAdapter iBTPhysicalLinkAdapter;
    97 	TRequestStatus* iInitializeRequestStatus;
    98 	TRequestStatus* iOpenDeviceRequestStatus;
    99 	TRequestStatus* iCloseDeviceRequestStatus;
   100 	TRequestStatus* iNotifyRequestStatus;
   101 	TFourCC	iDataType;
   102 	TBool	iAudioSettingsHaveChanged;
   103 	TBool	iReconfiguring;
   104 	TBool	iPaused;
   105 	TInt iOpenDeviceError;
   106 	};
   107 
   108 #endif
   109