bluetoothappprofiles/avrcp/playerinformation/src/playerinformation.cpp
changeset 70 f5508c13dfe0
parent 67 16e4b9007960
child 71 083fd884d7dd
--- a/bluetoothappprofiles/avrcp/playerinformation/src/playerinformation.cpp	Wed Oct 13 13:15:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,293 +0,0 @@
-// Copyright (c) 2008-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
-*/
-
-#include <bluetooth/logger.h>
-#include <playerinformationtarget.h>
-#include <e32property.h> 
-#include <hwrmpowerstatesdkpskeys.h>
-
-#include "playerapplicationsetting.h"
-#include "eventsmask.h"
-#include "playerinformation.h"
-
-#ifdef __FLOG_ACTIVE
-_LIT8(KLogComponent, LOG_COMPONENT_AVRCP_PLAYER_INFO);
-#endif
-
-EXPORT_C CPlayerInfoTarget* CPlayerInfoTarget::NewL(CRemConInterfaceSelector& aInterfaceSelector,
-										MPlayerCapabilitiesObserver*& aPlayerCapabilitiesObserver,
-										MPlayerApplicationSettingsObserver*& aPlayerApplicationSettingsObserver,
-										MPlayerEventsObserver*& aPlayerEventsObserver,
-										MPlayerApplicationSettingsNotify& aApplicationSettingNotifier )
-	{
-	LOG_STATIC_FUNC
-
-	CPlayerInfoTarget* self = new(ELeave) CPlayerInfoTarget(aInterfaceSelector, aApplicationSettingNotifier);
-	CleanupStack::PushL(self);
-	self->ConstructL( aPlayerCapabilitiesObserver, aPlayerApplicationSettingsObserver, aPlayerEventsObserver );
-	CleanupStack::Pop(self);
-	return self;
-	}
-	
-/** 
-Constructs this interface.
-@param aInterfaceSelector An interface selector for use with this interface.
-@internalComponent
-@released
-*/
-CPlayerInfoTarget::CPlayerInfoTarget(CRemConInterfaceSelector& aInterfaceSelector, MPlayerApplicationSettingsNotify& aApplicationSettingNotifier)
-:	CRemConInterfaceBase(TUid::Uid(KRemConPlayerInformationUid), 
-						 KMaxLengthPlayerInformationMsg,
-						 aInterfaceSelector,
-						 ERemConClientTypeTarget),
-	iApplicationSettingNotifier(aApplicationSettingNotifier),
-	iPlaybackStatusUpdatePending(EFalse)
-	{
-	}
-	
-		
-void CPlayerInfoTarget::ConstructL(MPlayerCapabilitiesObserver*& aPlayerCapabilitiesObserver,
-										MPlayerApplicationSettingsObserver*& aPlayerApplicationSettingsObserver,
-										MPlayerEventsObserver*& aPlayerEventsObserver )
-	{
-	// reserve two AV/C frames, for this reasoning:
-	// GetCapabilities (PDU 0x10) can generate a response
-	// which is (255 * 3 bytes) + 2 bytes = 767 total and
-	// will fit into two AVC frames. Other PDUs generate
-	// less than this, except for PDUs 0x15 and 0x16 which
-	// use their own buffer pre-allocated by calling Size()
-	iOutBuf.CreateL(KAVCFrameMaxLength * 2);
-	
-	BaseConstructL();
-	
-	aPlayerCapabilitiesObserver = this;
-	aPlayerApplicationSettingsObserver = this;
-	aPlayerEventsObserver = this;
-	
-	// default values for event notifiers
-	iPlayBackStatus = EStopped;
-	
-	// If no track currently selected
-	iTrackId = KNoTrackSelected;
-	
-	iLengthInMilliseconds = 0;
-	iTrackPosition = EStart;
-	
-	// If no track currently selected, then return KPlaybackPositionUnknown
-	iPlaybackPositionInMilliseconds = KPlaybackPositionUnknown;
-	iLastNotifiedPlaybackPositionInMilliseconds	= KPlaybackPositionUnknown;
-
-	// The time interval used for playback position notification
-	iPlayBackIntervalInMilliseconds = 0;
-
-	// Try to detect battery status from hardware P&S properties	
-	iBatteryStatus = DetectBatteryStatus();
-
-	// The Bluetooth SIG vendor id must always be present
-	// See AVRCP 1.3 Specification, section 5.5.1, table 5.4
-	iCompanyIdList.AppendL(KBluetoothSIGVendorId);
- 
-	// AVRCP 1.3 specification, Appendix H says that PlaybackStatusChanged
-	// and TrackChanged event notification support is mandatory, so add these
-	iSupportedNotificationEventList = new (ELeave) TEventsMask();
-	iSupportedNotificationEventList->Append(ERegisterNotificationPlaybackStatusChanged);
-	iSupportedNotificationEventList->Append(ERegisterNotificationTrackChanged);
-	}
-
-EXPORT_C CPlayerInfoTarget::~CPlayerInfoTarget()
-	{
-	iPendingNotificationEventList.Close();
-	iCompanyIdList.Close();
-	iOutBuf.Close();
-
-	// Free up all the settings memory
-	THashMapIter<TInt, CPlayerApplicationSettings*> iter(iPlayerApplicationSettings);
-	CPlayerApplicationSettings* const* setting = iter.NextValue();
-	while ( setting != NULL )
-		{
-		delete *setting;
-		setting = iter.NextValue();
-		}
-
-	// Now close the hash table itself
-	iPlayerApplicationSettings.Close();
-	delete iSupportedNotificationEventList;
-	}
-	
-		
-TAny* CPlayerInfoTarget::GetInterfaceIf(TUid aUid)
-	{
-	TAny* ret = NULL;
-	if ( aUid == TUid::Uid(KRemConInterfaceIf2) )
-		{
-		ret = reinterpret_cast<TAny*>(
-			static_cast<MRemConInterfaceIf2*>(this)
-			);
-		}
-
-	return ret;	
-	}
-
-// from MRemConInterfaceIf
-void CPlayerInfoTarget::MrcibNewMessage(TUint aOperationId, const TDesC8& aData, TRemConMessageSubType aMsgSubType)
-	{
-	LOG(_L("CPlayerInfoTarget::MrcibNewMessage"));
-	LOG1(_L("\taOperationId = 0x%02x"), aOperationId);
-	LOG1(_L("\taData.Length = %d"), aData.Length());
-	LOG1(_L("\taMsgSubType = 0x%02x"), aMsgSubType);
-
-	TMetadataTransferPDU currentOp = RAvrcpIPC::GetPDUIdFromIPCOperationId(aOperationId);
-	
-	switch (currentOp)
-		{
-		case EGetCapabilities:
-			{
-			/* process this in playercapabilities */
-			ProcessGetCapabilities( aData );
-			break;
-			}
-		case EListPlayerApplicationSettingAttributes:	
-			{
-			/* respond with Player Application Attributes*/
-			ProcessListPlayerApplicationAttributes( aOperationId );
-			break;
-			}
-		case EGetPlayerApplicationSettingAttributeText:	
-			{
-			/* respond with Player Application Attribute Text*/
-			ProcessGetPlayerApplicationAttributeText( aData, aOperationId );
-			break;
-			}
-		case EListPlayerApplicationSettingValues:
-			{
-			/* respond with Player Application Values*/
-			ProcessListPlayerApplicationValues( aData, aOperationId );
-			break;
-			}
-		case EGetPlayerApplicationSettingValueText:
-			{
-			/* respond with Application Value Text*/
-			ProcessGetPlayerApplicationValueText( aData, aOperationId );
-			break;
-			}
-		case EGetCurrentPlayerApplicationSettingValue:
-			{
-			/* respond with Current Player Application Value*/
-			ProcessGetCurrentPlayerApplicationValue( aData, aOperationId );
-			break;
-			}
-		case ESetPlayerApplicationSettingValue:
-			{
-			/* Set Player Application Value*/
-			ProcessSetPlayerApplicationValue( aData, aOperationId );
-			break;
-			}
-		case EGetPlayStatus:
-			{
-			// process in playerevents
-			ProcessGetPlayStatus();
-			break;
-			}
-		case ERegisterNotification:
-			{
-			// obtain eventId from aOperationId
-			TRegisterNotificationEvent eventId = RAvrcpIPC::GetEventIdFromIPCOperationId(aOperationId);
-			
-			// register for Notifications
-			if (aMsgSubType == ERemConNotifyCommandAwaitingInterim)
-				{
-				ProcessGetStatusAndBeginObserving(aOperationId, eventId, aData);
-				}
-			else if (aMsgSubType == ERemConNotifyCommandAwaitingChanged)
-				{
-				ProcessGetStatus(aOperationId, eventId);
-				}
-		 	break;
-		 	}
-		case EGetPlayStatusUpdate:
-			{
-			// process in playerevents
-			ProcessGetPlayStatusUpdate(aData);
-			break;
-			}
-		default:
-			break;
-		}
-		
-	}
-
-MPlayerEventsObserver::TTargetBatteryStatus CPlayerInfoTarget::DetectBatteryStatus()
-	{
-	MPlayerEventsObserver::TTargetBatteryStatus status = ECritical;
-	TInt err = KErrNone;
-	TInt batteryStatus = EBatteryStatusUnknown;
-	TInt chargingStatus = EChargingStatusNotConnected;
-	err = RProperty::Get(KPSUidHWRMPowerState,KHWRMBatteryStatus,batteryStatus);
-	if (!err)
-		{
-		err = RProperty::Get(KPSUidHWRMPowerState,KHWRMChargingStatus,chargingStatus);
-		}
-
-	switch (batteryStatus)
-		{
-		// Normal or Charging
-		case EBatteryStatusOk:
-			{
-			if (chargingStatus == EChargingStatusCharging ||
-				chargingStatus == EChargingStatusAlmostComplete ||
-				chargingStatus == EChargingStatusChargingContinued)
-				{
-				iBatteryStatus = EExternal;
-				}
-			else
-				{
-				if (chargingStatus == EChargingStatusChargingComplete)
-					{
-					iBatteryStatus = EFullCharge;
-					}
-				else
-					{
-					iBatteryStatus = ENormal;
-					}
-				}
-			}
-			break;
-		// Warning
-		case EBatteryStatusLow:
-			{
-			iBatteryStatus = EWarning;
-			}
-			break;
-		// Critical
-		case EBatteryStatusEmpty:
-			{
-			iBatteryStatus = ECritical;
-			}
-			break;
-		// Unknown state, set as ECritical
-		case EBatteryStatusUnknown:
-			{
-			iBatteryStatus = ECritical;
-			}
-			break;
-		}
-	return status;
-	}