upnpavcontroller/upnprenderingstatemachine/inc/upnprenderingstatemachineconstants.h
author Sampo Huttunen <sampo.huttunen@nokia.com>
Wed, 24 Nov 2010 09:39:46 +0200
branchIOP_Improvements
changeset 45 a6c41ca11adf
parent 40 08b5eae9f9ff
permissions -rw-r--r--
Updated the SIS package, there was some BC issue with the earlier version. Also updated the platform UID to S^3 version.

/*
* 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:  Constants used in upnprenderingstatemachine
*
*/

#ifndef C_UPNPRENDERINGSTATEMACHINECONSTANTS_H
#define C_UPNPRENDERINGSTATEMACHINECONSTANTS_H

/**
 * Constants enumerations for the Upnp API
 * especially those needed in the rendering engine part.
 */
namespace Upnp
    {

    /**
     * Commands
     */
    enum TCommand
        {
        ENone     = 0x0000, // no command
        ESync     = 0x0001, // get in sync with the renderer
        EPlay     = 0x0002, // requests to start playing
           // (in RenderingStateMachine aMedia indicates the media to play)
        EStop     = 0x0004, // requests to stop playback (fast to play again)
        EClose    = 0x0008, // requests to close playback (a permanent stop)
        EPause    = 0x0010, // request to pause
        EResume   = 0x0020, // request to resume from pause
        ERestart  = 0x0040, // start track from beginning
        ECalibrate= 0x0080, // request to calibrate the position counter from
                            // renderer
        ESeek     = 0x0100, // seek (aParameter = position in ms)
        ENext     = 0x0200, // skip to next track
        EPrev     = 0x0400, // skip to previous track
        EBack     = 0x0800, // skip to previous track, or track start if
                            // current position is less than 3 seconds
        EJump     = 0x1000,  // Start playing given track 
                            // (aParameter = track index)
        ESetUri   = 0x2000  // set uri
        };

    /**
     * Properties
     */
    enum TProperty
        {
        EVolume   = 0x01,  // the volume property
        EMute     = 0x02,  // the mute property
        EMediaDuration = 0x04, // current track duration (ms) - read only
        EPosition = 0x08,  // current track position (ms) - see ESeek command
        EOptions  = 0x10,  // rendering options (see TRenderingOptions)
        ECurrentIndex = 0x20, // Index of item currently playing.
            // Note: can only be set when NOT playing.
            // Note2: changes in the value are reported via
            // CurrentIndexChanged()
        ECurrentState = 0x40 // the state of the engine (TState) - read only
        };

    /**
     * Generic rendering state
     */
    enum TState
        {
        EOffSync   = 0x0001, // not synchronised with renderer yet
        EBusy      = 0x0010, // renderer is busy doing something else
        EDead      = 0x0020, // unrecoverable error state
        EStopped   = 0x0100, // renderer is idle
        EBuffering = 0x1000, // media playback is being started in the 
                             // renderer
        EPlaying   = 0x2000, // renderer is playing media
        EPaused    = 0x4000, // renderer is in pause state
        // -------- masks ---------
        EStateMaskInSync    = 0xFFF0, // any state where synchronised to 
                                      // renderer
        EStateMaskActive    = 0xFF00, // any state where can be used
        EStateMaskRendering = 0XF000, // any state where some kind of output
                                      // is going on
        };
    
    /**
     * extra information in RenderingStateMachine provided with state indicates
     * reason for state transition
     */
    enum TStateInfo
        {
        ENoMedia = 0,
            // no media initialised (typically the initial state)
        EStopRequested = 1,
            // stop was requested (by this engine or by external party)
        ETrackCompleted = 2,
            // track was fully completed
        EPositionChanged = 3
        };
    
    /**
     * Mode in which the position is changing.
     * This includes information of trick modes.
     * this type is internal to rendering engine
     */
    enum TPositionMode
        {
        EPlayingNormally = 0,
            // playback is going on normally
        ESeekingForward = 1,
            // fast seeking forward. New position will be ackowledged soon.
        ESeekingBackward = 2,
            // fast seeking backward New position will be ackowledged soon.
        EBufferingData = 3,
            // renderer is buffering data. Will return to PlayingNormally
            // soon.
        };
    
    /**
     * Rendering options. Use this to optimise the engine to your
     * specific needs.
     * this type is internal to rendering engine.
     * 
     * NOTE: instructions for flag use on the rendering engine API:
     * to turn on a flag:
     *   engine->SetPropertyL( Upnp::EOptions,
     *     engine->Property( Upnp::EOptions ) | EFlag );
     * to turn off a flag:
     *   engine->SetPropertyL( Upnp::EOptions,
     *     engine->Property( Upnp::EOptions ) & ~EFlag );
     */
    enum TRenderingOptions
        {
        EPlaylistMode = 0x0001,
            // play content in playlist mode, progress automatically.
            // for images this means a timed slideshow.
            // if flag disabled, only manual skip is supported.
            // (this flag is on by default)
        EAutoCalibratePosition = 0x0002,
            // calibrate and update track position automatically.
            // If position changed, sends PropertyChanged callback.
            // (this flag is on by default)
        EVolumeSupport = 0x0004,
            // request support for volume in the renderer
            // Clear this flag to disable all volume usage and avoid one
            // unnecessary network operation. Clearing the flag would be
            // only useful if you only have pure image source.
            // (this flag is on by default)
        ESafetyTimer = 0x0008,
            // attaches a safety timer for all skip commands
            // (next,prev,back,jump) so that client can safely call them
            // directly from UI as often as required. Commands are only
            // executed after the safety period. having a burst of 10
            // "Next" commands will be converted internally to a
            // single "Jump(current+10)" operation.
        EConvertVolumeZeroToMute = 0x0100,
            // convert client VOLUME 0 request to MUTE and back
            // (this flag is on by default)
        };
    }

#endif // C_UPNPRENDERINGSTATEMACHINECONSTANTS_H