sl@0: /* sl@0: * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: Implementation of the active event observer. sl@0: * sl@0: */ sl@0: sl@0: sl@0: sl@0: sl@0: // INCLUDE FILES sl@0: #ifdef _DEBUG sl@0: #include sl@0: #endif sl@0: sl@0: #include "BassBoostEventObserver.h" sl@0: sl@0: sl@0: // ============================ MEMBER FUNCTIONS =============================== sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CBassBoostEventObserver::CBassBoostEventObserver sl@0: // C++ default constructor can NOT contain any code, that sl@0: // might leave. sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: CBassBoostEventObserver::CBassBoostEventObserver() sl@0: : CActive(CActive::EPriorityStandard), sl@0: iStopped(EFalse) sl@0: { sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CBassBoostEventObserver::ConstructL sl@0: // Symbian 2nd phase constructor can leave. sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: void CBassBoostEventObserver::ConstructL( sl@0: TMMFMessageDestinationPckg aMessageHandler, sl@0: MCustomCommand& aCustomCommand, sl@0: MBassBoostCallback& aCallback ) sl@0: { sl@0: CActiveScheduler::Add(this); sl@0: iMessageHandler = aMessageHandler; sl@0: iCustomCommand = &aCustomCommand; sl@0: iCallback = &aCallback; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CBassBoostEventObserver::NewL sl@0: // Two-phased constructor. sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: CBassBoostEventObserver* CBassBoostEventObserver::NewL( sl@0: TMMFMessageDestinationPckg aMessageHandler, sl@0: MCustomCommand& aCustomCommand, sl@0: MBassBoostCallback& aCallback ) sl@0: { sl@0: CBassBoostEventObserver* self = new(ELeave) CBassBoostEventObserver(); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aMessageHandler, aCustomCommand, aCallback); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CBassBoostEventObserver::~CBassBoostEventObserver sl@0: // Destructor sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: CBassBoostEventObserver::~CBassBoostEventObserver() sl@0: { sl@0: // We should not have to cancel the outstanding request because the message sl@0: // handler will complete our request with KErrCancel in its destructor. sl@0: Cancel(); sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CBassBoostEventObserver::Start sl@0: // Kickoff the event observer by issuing the first observation message. sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: void CBassBoostEventObserver::Start() sl@0: { sl@0: if( !iStopped && !IsActive() ) sl@0: { sl@0: iCustomCommand->CustomCommandAsync(iMessageHandler, (TInt)EBfObserve, KNullDesC8, KNullDesC8, iDataPckgFrom, iStatus); sl@0: iStopped = EFalse; sl@0: SetActive(); sl@0: } sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CBassBoostEventObserver::Stop sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: void CBassBoostEventObserver::Stop() sl@0: { sl@0: iStopped = ETrue; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CBassBoostEventObserver::RunL sl@0: // Invoke by the active scheduler when a request completes, In this case, our sl@0: // observation message has completed. sl@0: // The proxy is notified. Afterwards, reissue the request to continue observation. sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: void CBassBoostEventObserver::RunL() sl@0: { sl@0: #ifdef _DEBUG sl@0: RDebug::Print(_L("CBassBoostEventObserver::RunL()\n")); sl@0: #endif sl@0: sl@0: if( iStatus == KErrNone ) sl@0: { sl@0: iCallback->BassBoostEvent(iDataPckgFrom); sl@0: Start(); sl@0: } sl@0: else sl@0: { sl@0: iStopped = ETrue; sl@0: } sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CBassBoostEventObserver::DoCancel sl@0: // Cancels the current and any on going requests/tasks. sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: void CBassBoostEventObserver::DoCancel() sl@0: { sl@0: #ifdef _DEBUG sl@0: RDebug::Print(_L("CBassBoostEventObserver::DoCancel()\n")); sl@0: #endif sl@0: iStopped = ETrue; sl@0: } sl@0: sl@0: // End of file sl@0: