diff -r 6369bfd1b60d -r 08b5eae9f9ff upnpmpxplugins/upnpplaybackplugins/inc/upnpplaybackstatemachine.h --- a/upnpmpxplugins/upnpplaybackplugins/inc/upnpplaybackstatemachine.h Mon Nov 01 13:44:24 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,317 +0,0 @@ -/* -* Copyright (c) 2008 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: Class for retrieving and selecting media renderers -* -*/ - - - - - - -#ifndef C_UPNPPLAYBACKSTATEMACHINE_H -#define C_UPNPPLAYBACKSTATEMACHINE_H - -// INCLUDES -#include -#include "upnpmusicperiodizer.h" - -// FORWARD DECLARATIONS -class CUPnPMusicPlayer; -class MUPnPPlayBackObserver; -class MUPnPAVRenderingSession; - -/** - * Class for handling playback state machine functionality - * - * @lib upnpmusicplugins.lib - * @since S60 v3.1 - */ -class CUPnPPlaybackStateMachine : public CBase, - public MUPnPMusicPeriodizerObserver - { - -public: - - /** - * Static 1st phase constructor - * - * @since Series 60 3.1 - * @param aParent the parent plugin instance - * @param aRenderingSession for playback commands - */ - static CUPnPPlaybackStateMachine* NewL( - CUPnPMusicPlayer& aParent, - MUPnPAVRenderingSession& aRenderingSession ); - - - /** - * 2nd phase constructor - * - * @since Series 60 3.1 - */ - void ConstructL(); - - /** - * Destructor - * - * @since Series 60 3.1 - */ - virtual ~CUPnPPlaybackStateMachine(); - - /** - * Executes a command on the selected song - * - * @param aCmd a command - * @since Series 60 3.1 - */ - void CommandL( TMPXPlaybackCommand aCmd ); - - /** - * Sets the playback position within the current track - * @param aPosition position in milliseconds - */ - void PositionL( TInt aPosition ); - - /** - * Stops playback, does not provide any ACK event - */ - void SilentStopL(); - - /** - * Cancels any ongoing operation - * (actually it just resets the state so the result will be ignored - * and not reported) - */ - void Cancel(); - - /** - * Indicates that the requested interaction operation (play, stop, etc.) - * is complete. - * - * @since Series 60 3.1 - * @param aErrorCode TInt error code - * @param aOperation TInt operation (TAVInteractOperation) - * @return None - */ - void InteractOperationComplete( TInt aErrorCode, - TUPnPAVInteractOperation aOperation ); - - /** - * End any ongoing operation - * (actually it just resets the state so the result will play next song - */ - void PlayOvertimeEnd(); - -private: - - /** - * Private default constructor - * - * @since Series 60 3.1 - * @param aParent the parent plugin instance - * @param aRenderingSession for playback commands - */ - CUPnPPlaybackStateMachine( - CUPnPMusicPlayer& aParent, - MUPnPAVRenderingSession& aRenderingSession ); - -public: // datatypes used in this class - - /** - * Defines internal state - * - * @since Series 60 3.1 - */ - enum TState - { - EStateStopped, - EStatePlaying, - EStatePaused, - EStateUnknown, // this state entered if a command fails. - // every state transition is accepted. - }; - - /** - * current type of operation - */ - enum TOperationType - { - EOperationNone, // no pending operations - EOperationCommand, // executing a command - EOperationPositionToZero, // adjusting position to zero - EOperationPositionToZeroDuringPause, // ...during pause state - EOperationSilentStop // stop without ack - }; - - /** - * An internal operation class - */ - class TOperation - { - public: - /** construction */ - TOperation( TOperationType aType ) - : iType( aType ) {} - TOperation( TMPXPlaybackCommand aCmd ) - : iType( EOperationCommand ), iCmd( aCmd ) {} - /** setters */ - void operator=( TOperationType aType ) - { - iType = aType; - } - void operator=( TMPXPlaybackCommand aCmd ) - { - iType = EOperationCommand; iCmd = aCmd; - } - void Reset() - { - iType = EOperationNone; - } - /** comparision */ - TBool operator==( TOperationType aType ) - { - return ( iType == aType ); - } - TBool operator==( TMPXPlaybackCommand aCmd ) - { - return ( iType == EOperationCommand && iCmd == aCmd ); - } - TBool None() - { - return ( iType == EOperationNone ); - } - /** identifies the operation type */ - TOperationType iType; - /** in case the operation is a command, the command */ - TMPXPlaybackCommand iCmd; - }; - -protected: // internal methods - - /** - * Handles the close command internally - */ - void HandleCloseL(); - - /** - * Checks if operations are in the queue, and executes - */ - void CheckOperationInQueueL(); - - /** - * Handle timers when playback start - */ - void TimePlay(); - - /** - * Handle timers when pause - */ - void TimePause(); - - /** - * Handle timers when continuing from pause - */ - void TimeContinue(); - - /** - * Handle timers when stopped - * Guesses if playback was completed or stopped by user. - * This is estimated by comparing track play time and track duration. - * @return ETrue if we guess the track playback was completed - */ - TBool TimeStop(); - - /** - * Changes the internal state - * @param aNewState the state to enter - */ - void ChangeState( TState aNewState ); - - /** - * textual representation of a state - */ - const TDesC* State( TState aState ); - -protected: // From MUPnPPeriodizerObserver - - /** - * See MUPnPMusicPeriodizerObserver - */ - void HandlePeriod(); - - /** - * See MUPnPMusicPeriodizerObserver - */ - void HandlePeriodForEnd(); - -private: // data - - /** - * Parent plugin instance - */ - CUPnPMusicPlayer& iParent; - - /** - * Rendering session - */ - MUPnPAVRenderingSession& iRendererSession; - - /** - * Playback state - */ - TState iState; - - /** - * currently ongoing operation - */ - TOperation iCurrentOperation; - - /** - * queue of operations pending - */ - RArray iOperationQueue; - - /** - * time when playback started - */ - TTime iPlayMark; - - /** - * time when pause started - */ - TTime iPauseMark; - - /** - * total time spent in pause (in milliseconds) - */ - TInt iPausetime; - - /** - * Timer support - * Own. - */ - CUPnPMusicPeriodizer* iPeriodizer; - - /** - * Timer support - * Own. - */ - CUPnPMusicPeriodizer* iPeriodizerEnd; - - }; - - -#endif // C_UPNPPLAYBACKSTATEMACHINE_H -