--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothappprofiles/avrcp/playerinformation/public/playerinformationtargetobserver.h Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,298 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#ifndef REMCONPLAYERINFORMATIONTARGETOBSERVER_H
+#define REMCONPLAYERINFORMATIONTARGETOBSERVER_H
+
+#include <e32base.h>
+#include <remcon/avrcpspec.h>
+#include <barsc2.h>
+
+
+/**
+This class is used to define the capabilities of the current application,
+and the implementation will generate AVRCP responses to the controller.
+For the event part of the API, it is recommended to add all events which make
+sense for the media player. In general, this will be everything except
+ESystemStatusChanged. The company ID part of the API is only needed if
+the media player needs to support vendor extensions other than bluetooth SIG.
+The bluetooth SIG company ID is always included in responses to a COMPANY_ID request.
+*/
+class MPlayerCapabilitiesObserver
+ {
+ public:
+ /**
+ Remove all notification events from the supported list
+ */
+ IMPORT_C void ClearEvents();
+ /**
+ Add a notification event to the supported list of events
+ The AVRCP 1.3 specification mandates that PlaybackStatusChanged
+ and TrackChanged events must be supported; KErrAlreadyExists will
+ be returned if AddEvent() is called with either of these events.
+ @param aEvent the event to add
+ @return KErrAlreadyExists if the event is already present.
+ KErrNotSupported if the event isn't supported by the implementation, e.g.. ESystemStatusChanged
+ */
+ IMPORT_C TInt AddEvent(TRegisterNotificationEvent aEvent);
+ /**
+ Remove a notification event from the supported list of events
+ The AVRCP 1.3 specification mandates that PlaybackStatusChanged
+ and TrackChanged events must be supported; KErrNotSupported will
+ be returned if RemoveEvent() is called with either of these events.
+ @param aEvent the event to remove
+ @return KErrNone if this completes successfully, KErrNotFound if aID
+ was not in the list, or any other system wide error code.
+ */
+ IMPORT_C TInt RemoveEvent(TRegisterNotificationEvent aEvent);
+
+ const static TInt KMaxCompanyID = 0xFFFFFF;
+ const static TInt KMaxNrOfCompanyIDs = 255;
+
+ /**
+ Remove all additional company IDs from the supported list
+ */
+ IMPORT_C void ClearCompanyIds();
+ /**
+ Add a company id to the supported list of company ids.
+ The AVRCP 1.3 specification mandates that the Bluetooth SIG vendor id
+ must be supported; KErrAlreadyExists will be returned if AddCompanyId()
+ is called with this company id.
+ @param aID the id to add
+ @return KErrNone if this completes successfully,
+ KErrAlreadyExists if aID is already present,
+ KErrOverflow if the maximum number of company ids are already listed,
+ or any other system wide error code.
+ */
+ IMPORT_C TInt AddCompanyId(TInt aID);
+ /**
+ Remove a company id from the list of supported vendor extensions.
+ The Bluetooth SIG id can't be removed, as this must always be supported
+ @param aID the id to remove
+ @return KErrNone if this completes successfully, KErrNotFound if aID
+ was not in the list, or any other system wide error code.
+ */
+ IMPORT_C TInt RemoveCompanyID(TInt aID);
+
+ private:
+ virtual void DoClearEvents() = 0;
+ virtual TInt DoAddEvent(TRegisterNotificationEvent aEvent) = 0;
+ virtual TInt DoRemoveEvent(TRegisterNotificationEvent aEvent) = 0;
+ virtual void DoClearCompanyIds() = 0;
+ virtual TInt DoAddCompanyId(TInt aID) = 0;
+ virtual TInt DoRemoveCompanyID(TInt aID) = 0;
+ };
+
+/**
+This class is for supporting the player application settings PDUs in AVRCP1.3
+specification section 5.2. The RegisterNotification PDU for
+EVENT_PLAYER_APPLICATION_SETTING_CHANGED is also supported through this API.
+
+The media player should first define all the attributes it supports, using
+DefineAttributeL. When an attribute's value is changed by the media player,
+it should call SetAttributeL to inform the controller. When the controller
+changes a setting, the media player application receives a callback via the
+MPlayerApplicationSettingsNotify interface
+*/
+class MPlayerApplicationSettingsObserver
+ {
+ public:
+ /**
+ Define an attribute supported by this player.
+ It will be included in future responses to the following PDUs:
+ ListPlayerApplicationSettingAttributes,
+ ListPlayerApplicationSettingValues,
+ GetCurrentPlayerApplicationSettingValue,
+ GetPlayerApplicationSettingAttributeText,
+ GetPlayerApplicationSettingValueText,
+ @param aAttributeID The specification or player defined attribute
+ @param aAttributeText The UTF8 text name of the attribute(allowed text length is 1-255) - the API will take a copy
+ @param aValues The list of defined values
+ @param aValueTexts The UTF8 text for each defined value(allowed text length is 1-255) - The API will make copies.
+ @param aInitialValue The initial value for this attribute
+ @leave KErrNoMemory if memory could not be allocated to store the copies of aAttributeID and relative settings
+ @leave KErrNotSupported if attribute or value is out of specification defined range,
+ or aValueTexts is not equal length to aValues
+ */
+ IMPORT_C void DefineAttributeL(TUint aAttributeID,
+ TDesC8& aAttributeText,
+ RArray<TUint> &aValues,
+ RArray<TPtrC8> &aValueTexts,
+ TUint aInitialValue);
+
+ /**
+ Set the current value of a previously defined attribute
+ This updates the cache and will cause completion of a
+ pending EVENT_PLAYER_APPLICATION_SETTING_CHANGED notification PDU
+ @param aAttributeID The specification or player defined attribute
+ @param aValue The current value
+ @leave KErrNotFound if the attribute is not defined,
+ KErrArgument if the value is not valid according to the definition
+ */
+ IMPORT_C void SetAttributeL(TUint aAttributeID, TUint aValue);
+
+ private:
+ virtual void DoDefineAttributeL(TUint aAttributeID,
+ TDesC8& aAttributeText,
+ RArray<TUint> &aValues,
+ RArray<TPtrC8> &aValueTexts,
+ TUint aInitialValue) = 0;
+ virtual void DoSetAttributeL(TUint aAttributeID, TUint aValue) = 0;
+
+ };
+
+/**
+This is a helper API allowing CPlayerApplicationSettings to be initialised
+via a resource file. Using a resource file may help to provide localised text
+for the attributes and values, according to current language setting of the phone.
+*/
+class PlayerApplicationSettingsResourceInit
+ {
+ public:
+ /**
+ Defines multiple attributes supported by this player, which are listed in a resource file.
+ @param aSettings The CPlayerApplicationSettings object on which the attributes should be defined
+ @param aResource A fully constructed CResourceFile
+ @leave KErrNoMemory, or leave from CResourceFile functions
+ */
+ IMPORT_C static void DefineAttributesL(MPlayerApplicationSettingsObserver& aSettings, CResourceFile &aResource);
+ };
+
+/**
+This class supports the notification PDUs in AVRCP1.3 specification section 5.4,
+with the following exceptions:
+ EVENT_SYSTEM_STATUS_CHANGED is not supported, it is only for adaptors that plug into a media player
+ EVENT_PLAYER_APPLICATION_SETTING_CHANGED is supported through the CPlayerApplicationSettings API
+
+Events are pushed by the media player calling functions in this API, where they are
+cached until the controller pulls them via a GetPlayStatus or RegisterNotification PDU
+@see CPlayerApplicationSettings
+*/
+class MPlayerEventsObserver
+ {
+ public:
+ enum TTargetBatteryStatus
+ {
+ ENormal = 0,
+ EWarning = 1,
+ ECritical = 2,
+ EExternal = 3,
+ EFullCharge = 4,
+ EUnknown = 5
+ };
+
+ enum TPlaybackStatus
+ {
+ EStopped = 0,
+ EPlaying = 1,
+ EPaused = 2,
+ EFwdSeek = 3,
+ ERevSeek = 4,
+ EError = 0xFF
+ };
+
+ enum TPlayPosition
+ {
+ EStart = 0,
+ EMiddle = 1,
+ EEnd= 2,
+ };
+
+ static const TUint64 KNoTrackSelected = KMaxTUint64;
+
+ static const TUint32 KPlaybackPositionUnknown = 0xFFFFFFFF;
+
+ /**
+ Call this function whenever the playback status changes.
+ It will be used to complete pending EVENT_PLAYBACK_STATUS_CHANGED
+ and EVENT_PLAYBACK_POS_CHANGED notifications.
+ The value is used to generate the response to a GetPlayStatus PDU.
+ @param aStatus The specification defined playback status
+ */
+ IMPORT_C void PlaybackStatusChanged(TPlaybackStatus aStatus);
+ /**
+ Call this function whenever the current media track is changed.
+ use KNoTrackSelected to indicate that there is no media selected.
+ This is the default value on construction. It will be used to
+ complete pending EVENT_TRACK_CHANGED and EVENT_PLAYBACK_POS_CHANGED notifications.
+ The values are used to generate the response to a GetPlayStatus PDU.
+ @param aTrackId A handle to the current track.
+ @param aLengthInMilliseconds The length of the current track.
+ */
+ IMPORT_C void TrackChanged(TUint64 aTrackId, TUint32 aLengthInMilliseconds);
+ /**
+ Call this function whenever the current track reaches the end position,
+ e.g. due to playback or forward seek. It will be used to complete
+ pending EVENT_TRACK_REACHED_END and EVENT_PLAYBACK_POS_CHANGED notifications.
+ */
+ IMPORT_C void TrackReachedEnd();
+ /**
+ Call this function whenever the current track reaches the start position,
+ e.g. due to reverse seek (rewind). It will be used to complete pending
+ EVENT_TRACK_REACHED_START and EVENT_PLAYBACK_POS_CHANGED notifications.
+ */
+ IMPORT_C void TrackReachedStart();
+ /**
+ Call this function during playback or seek operations, to indicate the
+ current position within the track. It will be used to complete a pending
+ EVENT_PLAYBACK_POS_CHANGED notification. The value is used to generate the
+ response to a GetPlayStatus PDU.
+ @param aMilliseconds The current playback position. It is recommended to call
+ with a resolution <=1000ms to satisfy the 1s resolution of the notification
+ playback interval.
+ */
+ IMPORT_C void SetPlaybackPosition(TUint32 aMilliseconds);
+
+ /**
+ Call this function to report the current battery status
+ @param aBatteryStatus The current battery status.
+ */
+ IMPORT_C void SetBatteryStatus(TTargetBatteryStatus aBatteryStatus);
+
+ private:
+ virtual void DoPlaybackStatusChanged(TPlaybackStatus aStatus) = 0;
+ virtual void DoTrackChanged(TUint64 aTrackId, TUint32 aLengthInMilliseconds) = 0;
+ virtual void DoTrackReachedEnd() = 0;
+ virtual void DoTrackReachedStart() = 0;
+ virtual void DoSetPlaybackPosition(TUint32 aMilliseconds) = 0;
+ virtual void DoSetBatteryStatus(TTargetBatteryStatus aBatteryStatus) = 0;
+
+
+ };
+
+/**
+Clients must implement this interface if they require callbacks
+when the controller has changed the settings via a SetPASValue message
+*/
+class MPlayerApplicationSettingsNotify
+ {
+ public:
+ /**
+ This is called when the controller has changed a setting
+ @param aAttributeID A list of attribute IDs whose value has changed.
+ @param aAttributeValue A list of new values for the attributes listed in aAttributeID.
+ */
+ virtual void MpasnSetPlayerApplicationValueL(const RArray<TInt>& aAttributeID,
+ const RArray<TInt>& aAttributeValue)=0;
+ };
+
+
+#endif // REMCONPLAYERINFORMATIONTARGETOBSERVER_H