williamr@4: // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: // williamr@4: williamr@4: williamr@4: williamr@4: /** williamr@4: @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #ifndef REMCONABSOLUTEVOLUMEAPITARGET_H williamr@4: #define REMCONABSOLUTEVOLUMEAPITARGET_H williamr@4: williamr@4: #include williamr@4: #include williamr@4: williamr@4: _LIT(KAbsoluteVolumeTargetPanicName, "AbsoluteVolumeTarget"); williamr@4: enum TAbsoluteVolumeTargetPanics williamr@4: { williamr@4: ETargetInvalidMaxVolume = 0, williamr@4: ETargetVolumeBeyondMaxVolume = 1, williamr@4: }; williamr@4: williamr@4: class MRemConAbsoluteVolumeTargetObserver; williamr@4: williamr@4: /** williamr@4: Client-instantiable type supporting sending absolute volume API responses for williamr@4: Set Absolute Volume and Register Absolute Volume Change Notification. This API williamr@4: should be used in preference to the extapi. williamr@4: */ williamr@4: NONSHARABLE_CLASS(CRemConAbsoluteVolumeTarget) : public CRemConInterfaceBase, williamr@4: public MRemConInterfaceIf2 williamr@4: { williamr@4: public: williamr@4: IMPORT_C static CRemConAbsoluteVolumeTarget* NewL( williamr@4: CRemConInterfaceSelector& aInterfaceSelector, williamr@4: MRemConAbsoluteVolumeTargetObserver& aObserver, williamr@4: TUint32 aVolume, williamr@4: TUint32 aMaxVolume); williamr@4: williamr@4: IMPORT_C ~CRemConAbsoluteVolumeTarget(); williamr@4: williamr@4: public: williamr@4: IMPORT_C void SetAbsoluteVolumeResponse(TUint32 aVolume, williamr@4: TInt aErr); williamr@4: williamr@4: IMPORT_C void AbsoluteVolumeChanged(TUint32 aVolume); williamr@4: williamr@4: private: williamr@4: CRemConAbsoluteVolumeTarget(CRemConInterfaceSelector& aInterfaceSelector, williamr@4: MRemConAbsoluteVolumeTargetObserver& aObserver, williamr@4: TUint32 aVolume, williamr@4: TUint32 aMaxVolume); williamr@4: williamr@4: void ConstructL(); williamr@4: williamr@4: private: // From CRemConInterfaceBase williamr@4: TAny* GetInterfaceIf(TUid aUid); williamr@4: williamr@4: private: // From MRemConInterfaceIf2 williamr@4: void MrcibNewMessage(TUint aOperationId, williamr@4: const TDesC8& aData, williamr@4: TRemConMessageSubType aMsgSubType); williamr@4: williamr@4: private: // Utility Funtions williamr@4: void SendError(TInt aError, TUint aOperationId); williamr@4: void SendNotificationResponse(TRemConMessageSubType aMsgSubType); williamr@4: void ProcessGetStatus(); williamr@4: void ProcessGetStatusAndBeginObserving(); williamr@4: void ProcessSetAbsoluteVolume(const TDesC8& aData); williamr@4: williamr@4: private: // Unowned williamr@4: MRemConAbsoluteVolumeTargetObserver& iObserver; williamr@4: williamr@4: private: // Owned williamr@4: // ETrue indicates a request for absolute volume change notification has williamr@4: // been received. williamr@4: TBool iAbsoluteVolumeNotificationRequest; williamr@4: RBuf8 iOutBuf; williamr@4: TUint32 iClientVolume; williamr@4: TUint32 iClientMaxVolume; williamr@4: }; williamr@4: #endif // ABSOLUTEVOLUMEAPITARGET_H