diff -r 000000000000 -r a2952bb97e68 mpx/playbackframework/playbackengine/src/mpxaccessoryobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/playbackframework/playbackengine/src/mpxaccessoryobserver.cpp Thu Dec 17 08:55:47 2009 +0200 @@ -0,0 +1,301 @@ +/* +* Copyright (c) 2006 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: Accessory observer +* +*/ + +#include +#include "mpxaccessoryobserver.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMPXAccessoryObserver::NewL +// Two phase constructor +// ----------------------------------------------------------------------------- +// +CMPXAccessoryObserver* CMPXAccessoryObserver::NewL( + MMPXAccessoryEventObserver& aObs) + { + CMPXAccessoryObserver* self = new ( ELeave ) CMPXAccessoryObserver(aObs); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CMPXAccessoryObserver::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CMPXAccessoryObserver::ConstructL() + { + MPX_DEBUG1("CMPXAccessoryObserver::ConstructL()" ); +#ifdef __ACCESSORY_FW + User::LeaveIfError(iServer.Connect()); + User::LeaveIfError(iMode.CreateSubSession(iServer)); +#endif // __ACCESSORY_FW + StartL(); + } + +// ----------------------------------------------------------------------------- +// CMPXAccessoryObserver::CMPXAccessoryObserver +// ----------------------------------------------------------------------------- +// +#ifdef __ACCESSORY_FW +CMPXAccessoryObserver::CMPXAccessoryObserver( + MMPXAccessoryEventObserver& aObs) +: CActive( CActive::EPriorityStandard ), + iObs(aObs) + { + CActiveScheduler::Add(this); + } + +#else +CMPXAccessoryObserver::CMPXAccessoryObserver( + MMPXAccessoryEventObserver& aObs) +: CDosEventListenerBase(), + iObs(aObs) + { + } +#endif // __ACCESSORY_FW + + +// ----------------------------------------------------------------------------- +// Destructor. +// ----------------------------------------------------------------------------- +// +CMPXAccessoryObserver::~CMPXAccessoryObserver() + { + MPX_DEBUG1("CMPXAccessoryObserver::~CMPXAccessoryObserver()"); +#ifdef __ACCESSORY_FW + Cancel(); + iMode.CloseSubSession(); + iServer.Disconnect(); +#endif // __ACCESSORY_FW + } + +#ifndef __ACCESSORY_FW +// ----------------------------------------------------------------------------- +// CMPXAccessoryObserver::AccessoryModeChangedL +// Receives event on accessory mode change. +// ----------------------------------------------------------------------------- +// +void CMPXAccessoryObserver::AccessoryModeChangedL( + TDosAccessoryMode aAccessoryState ) + { + MPX_FUNC("CMPXAccessoryObserver::AccessoryModeChangedL"); + + TMPXPlaybackAccessoryMode mode( ConvertToMpxMode( aAccessoryState )); + if ( EPbAccessoryModeUnknown != mode ) + { //inform parent + iObs.HandleAccesoryEventL(mode); + } + } +#endif // __ACCESSORY_FW + +// ----------------------------------------------------------------------------- +// CMPXAccessoryObserver::StartL +// ----------------------------------------------------------------------------- +// +void CMPXAccessoryObserver::StartL() + { + MPX_DEBUG1("CMPXAccessoryObserver::StartL()"); + +#ifdef __ACCESSORY_FW + if (!IsActive()) + { + iMode.NotifyAccessoryModeChanged(iStatus, iAccessory_mode); + SetActive(); + } +#else + StartListeningL(KAccessoryModeChanged, sizeof (TDosAccessoryMode), EQueue ); +#endif // __ACCESSORY_FW + + } +// ----------------------------------------------------------------------------- +// CMPXAccessoryObserver::AccessoryModeL +// Gets current accessory mode +// ----------------------------------------------------------------------------- +// +TMPXPlaybackAccessoryMode CMPXAccessoryObserver::AccessoryModeL() + { + MPX_DEBUG1("CMPXAccessoryObserver::AccessoryModeL() entering"); + +#ifdef __ACCESSORY_FW + RAccessoryServer accessoryServer; + User::LeaveIfError( accessoryServer.Connect () ); + CleanupClosePushL( accessoryServer ); + RAccessoryMode accessory; + accessory.CreateSubSession( accessoryServer ); + TAccPolAccessoryMode accMode; + TInt err = accessory.GetAccessoryMode( accMode ); + accessory.CloseSubSession(); + CleanupStack::PopAndDestroy( &accessoryServer ); +#else + RDosServer dosServer; + User::LeaveIfError( dosServer.Connect () ); + CleanupClosePushL( dosServer ); + RDosAccessory dosAccessory; + User::LeaveIfError( dosAccessory.Open( dosServer ) ); + CleanupClosePushL( dosAccessory ); + TDosAccessoryMode accMode( EDosAccNotConnected ); + TInt err = dosAccessory.GetAccessoryMode( accMode ); + CleanupStack::PopAndDestroy( 2, dosServer ); // close dosAccessory and dosServer +#endif // __ACCESSORY_FW + + MPX_DEBUG1("CMPXAccessoryObserver::AccessoryModeL() exiting"); + return ConvertToMpxMode( accMode ); + } + +// ----------------------------------------------------------------------------- +// CMPXAccessoryObserver::ConvertToMpxMode +// Converts from accessory mode to internal MPX mode enum +// ----------------------------------------------------------------------------- +// +TMPXPlaybackAccessoryMode CMPXAccessoryObserver::ConvertToMpxMode( +#ifdef __ACCESSORY_FW + TAccPolAccessoryMode& aMode ) +#else + TDosAccessoryMode& aMode ) +#endif // __ACCESORY_FW + { + MPX_DEBUG1("CMPXAccessoryObserver::ConvertToMpxMode() entering"); + + TMPXPlaybackAccessoryMode mode( EPbAccessoryModeUnknown ); + +#ifdef __ACCESSORY_FW + MPX_DEBUG2("CMPXAccessoryObserver::ConvertToMpxMode(): aMode.iAccessoryMode = %d", aMode.iAccessoryMode); + switch ( aMode.iAccessoryMode ) + { + case EAccModeHandPortable: + mode = EPbAccessoryHandPortable; + break; + case EAccModeWiredHeadset: + mode = EPbAccessoryWiredHeadset; + break; + case EAccModeWirelessHeadset: + mode = EPbAccessoryWirelessHeadset; + break; + case EAccModeWiredCarKit: + mode = EPbAccessoryWiredCarKit; + break; + case EAccModeWirelessCarKit: + mode = EPbAccessoryWirelessCarKit; + break; + case EAccModeTextDevice: + mode = EPbAccessoryTextDevice; + break; + case EAccModeLoopset: + mode = EPbAccessoryLoopset; + break; + case EAccModeMusicStand: + mode = EPbAccessoryMusicStand; + break; + case EAccModeTVOut: + mode = EPbAccessoryTVOut; + break; + case EAccModeHeadphones: + mode = EPbAccessoryHeadphones; + break; + default: + break; + } +#else + MPX_DEBUG2("CMPXAccessoryObserver::ConvertToMpxMode(): aMode = %d", aMode); + switch ( aMode ) + { + case EDosAccNotConnected: + mode = EPbAccessoryNone; + break; + case EDosAccUnsupportedConnected: + mode = EPbAccessoryUnsupported; + break; + case EDosAccModeHeadset: + mode = EPbAccessoryHeadset; + break; + case EDosAccModeLoopset: + mode = EPbAccessoryLoopset; + break; + case EDosAccModeTty: + mode = EPbAccessoryTty; + break; + case EDosAccModeCarKit: + mode = EPbAccessoryCarKit; + break; + case EDosAccModeBtHeadset: + mode = EPbAccessoryBtHeadset; + break; + case EDosAccModeBtCarKit: + mode = EPbAccessoryBtCarKit; + break; + default: + break; + } +#endif // __ACCESORY_FW + + MPX_DEBUG2("CMPXAccessoryObserver::ConvertToMpxMode() exiting: %d", mode); + return mode; + } + +#ifdef __ACCESSORY_FW +// ----------------------------------------------------------------------------- +// CMPXAccessoryObserver::RunL +// ----------------------------------------------------------------------------- +// +void CMPXAccessoryObserver::RunL() + { + MPX_DEBUG2("CMPXAccessoryObserver::RunL() status %d ",iStatus.Int() ); + + switch ( iStatus.Int() ) + { + case KErrCancel: + return; + case KErrNone: + { + TMPXPlaybackAccessoryMode mode = ConvertToMpxMode( iAccessory_mode ); + MPX_DEBUG2("CMPXAccessoryObserver::AccessoryModeChangedL() mode %d",mode ); + + //inform parent + if ( EPbAccessoryModeUnknown != mode ) + { + iObs.HandleAccesoryEventL(mode); + } + // Issue request again + StartL(); + } + break; + case KErrNotSupported: + break; + default: + StartL(); + break; + } + + } + +// ----------------------------------------------------------------------------- +// CMPXAccessoryObserver::DoCancel +// ----------------------------------------------------------------------------- +// +void CMPXAccessoryObserver::DoCancel() + { + MPX_FUNC("CMPXAccessoryObserver::DoCancel()"); + iMode.CancelNotifyAccessoryModeChanged(); + } +#endif // __ACCESSORY_FW + +// End of file