williamr@2: // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: /** williamr@2: @file williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: williamr@2: #ifndef REMCONPLAYERINFORMATIONTARGET_H williamr@2: #define REMCONPLAYERINFORMATIONTARGET_H williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: class CRemConInterfaceSelector; williamr@2: class CPlayerApplicationSettings; williamr@4: class TEventsMask; williamr@2: williamr@2: // This is the maximum length of the player application setting attribute and value strings williamr@2: const TInt KMaxPlayerApplicationSettingsValue = 255 ; williamr@2: // This is the minimum length of the player application setting attribute and value strings williamr@2: const TInt KMinPlayerApplicationSettingsValue = 1 ; williamr@2: williamr@2: /** williamr@2: Client-instantiable class supporting player information responses. williamr@2: This is the container class for the three interface parts williamr@2: */ williamr@2: NONSHARABLE_CLASS(CPlayerInfoTarget) : public CRemConInterfaceBase, williamr@2: public MRemConInterfaceIf2, williamr@2: private MPlayerCapabilitiesObserver, williamr@2: private MPlayerApplicationSettingsObserver, williamr@2: private MPlayerEventsObserver williamr@2: williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Factory function. williamr@2: @param aInterfaceSelector The interface selector. The client must have williamr@2: created one of these first. williamr@2: @param aPlayerCapabilitiesObserver Returns a pointer to a MPlayerCapabilitiesObserver for this interface, owned by the CPlayerInfoTarget. williamr@2: @param aPlayerApplicationSettingsObserver Returns a pointer to a MPlayerApplicationSettingsObserver for this interface, owned by the CPlayerInfoTarget williamr@2: @param aPlayerEventsObserver Returns a pointer to a MPlayerEventsObserver for this interface, owned by the CPlayerInfoTarget williamr@2: @return A new CPlayerInfoTarget, owned by the interface selector. williamr@2: */ williamr@2: IMPORT_C static CPlayerInfoTarget* NewL(CRemConInterfaceSelector& aInterfaceSelector, williamr@2: MPlayerCapabilitiesObserver*& aPlayerCapabilitiesObserver, williamr@2: MPlayerApplicationSettingsObserver*& aPlayerApplicationSettingsObserver, williamr@2: MPlayerEventsObserver*& aPlayerEventsObserver, williamr@2: MPlayerApplicationSettingsNotify& aApplicationSettingNotifier ); williamr@2: williamr@2: /** Destructor */ williamr@2: IMPORT_C ~CPlayerInfoTarget(); williamr@2: williamr@2: williamr@2: williamr@2: private: williamr@2: /** williamr@2: Constructor. williamr@2: @param aInterfaceSelector The interface selector. williamr@2: */ williamr@2: CPlayerInfoTarget(CRemConInterfaceSelector& aInterfaceSelector, MPlayerApplicationSettingsNotify& aApplicationSettingNotifier ); williamr@2: williamr@2: void ConstructL(MPlayerCapabilitiesObserver*& aPlayerCapabilitiesObserver, williamr@2: MPlayerApplicationSettingsObserver*& aPlayerApplicationSettingsObserver, williamr@2: MPlayerEventsObserver*& aPlayerEventsObserver ); williamr@2: williamr@2: private: // from CRemConInterfaceBase williamr@2: TAny* GetInterfaceIf(TUid aUid); williamr@2: williamr@2: private: // from MRemConInterfaceIf williamr@2: void MrcibNewMessage(TUint aOperationId, const TDesC8& aData, TRemConMessageSubType aMsgSubType); williamr@2: williamr@2: private: williamr@2: // Bearer attributes (settings) processing williamr@2: void ProcessListPlayerApplicationAttributes( TInt aOperationId ); williamr@2: void ProcessGetPlayerApplicationAttributeText( const TDesC8& aData, TInt aOperationId ); williamr@2: void ProcessListPlayerApplicationValues( const TDesC8& aData, TInt aOperationId ); williamr@2: void ProcessGetPlayerApplicationValueText( const TDesC8& aData, TInt aOperationId ); williamr@2: void ProcessGetCurrentPlayerApplicationValue( const TDesC8& aData, TInt aOperationId ); williamr@2: void ProcessSetPlayerApplicationValue( const TDesC8& aData, TInt aOperationId ); williamr@2: williamr@2: // Bearer attributes (settings) API implementation from MPlayerApplicationSettingsObserver williamr@2: void DoDefineAttributeL(TUint aAttributeID, TDesC8& aAttributeText, RArray &aValues, RArray &aValueTexts, TUint aInitialValue); williamr@2: void DoSetAttributeL(TUint aAttributeID, TUint aValue); williamr@2: williamr@2: // Notifier Events API implementation from MPlayerEventsObserver williamr@2: void DoPlaybackStatusChanged(TPlaybackStatus aStatus); williamr@2: void DoTrackChanged(TUint64 aTrackId, TUint32 aLengthInMilliseconds); williamr@2: void DoTrackReachedEnd(); williamr@2: void DoTrackReachedStart(); williamr@2: void DoSetPlaybackPosition(TUint32 aMilliseconds); williamr@2: void DoSetBatteryStatus(TTargetBatteryStatus aBatteryStatus); williamr@2: williamr@2: // Notifier Events bearer processing williamr@2: void ProcessGetPlayStatus(); williamr@2: void ProcessGetStatusAndBeginObserving(TUint aOperationId, TRegisterNotificationEvent aEventId, const TDesC8& aData); williamr@2: void ProcessGetStatus(TUint aOperationId, TRegisterNotificationEvent aEventId); williamr@2: void SendNotificationResponse(TRegisterNotificationEvent aEventId, TRemConMessageSubType aMsgSubType); williamr@4: void ProcessGetPlayStatusUpdate(const TDesC8& aData); williamr@2: williamr@2: // Capabilities API implementation from MPlayerCapabilitiesObserver williamr@2: void DoClearEvents(); williamr@2: TInt DoAddEvent(TRegisterNotificationEvent aEvent); williamr@2: TInt DoRemoveEvent(TRegisterNotificationEvent aEvent); williamr@2: void DoClearCompanyIds(); williamr@2: TInt DoAddCompanyId(TInt aID); williamr@2: TInt DoRemoveCompanyID(TInt aID); williamr@2: williamr@2: // Capabilities bearer processing williamr@2: void ProcessGetCapabilities( const TDesC8& aData ); williamr@2: williamr@2: // Miscellaneous williamr@2: TBool AttributeSettingExists(TUint anAttribute); williamr@2: TBool IsValidAttributeValue(TUint anAttributeId, TUint aAttributeValue); williamr@2: TBool AttributeValueCanBeSet(TUint anAttributeId, TUint aAttributeValue); williamr@2: void SendError(TInt, TInt); williamr@2: void SendError(TInt, TInt, TRemConMessageSubType aSubType); williamr@2: CPlayerApplicationSettings* GetSetting(TUint anAttribute); williamr@4: MPlayerEventsObserver::TTargetBatteryStatus DetectBatteryStatus(); williamr@4: williamr@2: private: // owned williamr@2: RBuf8 iOutBuf; williamr@2: williamr@2: MPlayerApplicationSettingsNotify& iApplicationSettingNotifier; williamr@2: williamr@2: // data for MPlayerEventsObserver williamr@2: TPlaybackStatus iPlayBackStatus; williamr@2: TUint64 iTrackId; williamr@2: TUint32 iLengthInMilliseconds; williamr@2: TPlayPosition iTrackPosition; williamr@2: williamr@2: // The time interval (received as part if the RegisterNotification) williamr@2: // in which the change in playback position will be notified williamr@4: TUint32 iPlayBackIntervalInMilliseconds; williamr@2: williamr@2: TTargetBatteryStatus iBatteryStatus; williamr@2: TUint32 iPlaybackPositionInMilliseconds; williamr@2: TUint32 iLastNotifiedPlaybackPositionInMilliseconds; williamr@2: williamr@2: // data for MPlayerCapabilitiesObserver williamr@4: TEventsMask* iSupportedNotificationEventList; williamr@2: RArray iCompanyIdList; williamr@2: williamr@2: // list of events for which notifications have been request williamr@2: RArray iPendingNotificationEventList; williamr@4: williamr@4: // Whether we've been asked for an update when the play status changes williamr@4: TBool iPlaybackStatusUpdatePending; williamr@2: williamr@2: // Attribute (settings) data MPlayerApplicationSettingsObserver williamr@2: RHashMap iPlayerApplicationSettings; williamr@2: williamr@2: }; williamr@2: williamr@2: williamr@2: #endif // REMCONPLAYERINFORMATIONTARGET_H