/** Copyright (c) 2007 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: This API is used for creating mappings between remote* control clients.**/#ifndef TSPCLIENTMAPPER_H#define TSPCLIENTMAPPER_H// INCLUDES#include <e32base.h>#include <e32std.h>// CLASS DECLARATION/*** The tsp client mapper component is used to create mappings between remote* control clients. The tsp client mapper is used in such cases where a client* could not be correctly mapped by it's default information. For example if a* remote control event is listened by the active audio client but the actual* remote control client is in a different process than the one that is* listening the remote control events. In this case a mapping has to be created* between the active audio process and the remote control client. This mapping* is created simply by setting the process identifier of the remote control* client of the active audio to this api.* Mapping types define the different states for the tsp clients. The states are* defined in TTspClientMappingType. After one state is completed the mapping* should be removed or set to another state. In the following an example* where a value is set when a player is registered.* @code* CTspClientMapper* mapper = CTspClientMapper::NewLC();* RThread client;* RMessage2& message = aMessage;* // Message from the client* RProcess process;* client.Process( process );* TProcessId processId = proceess.Id();* mapper->SetTspTargetClient( processId,* CTspClientMapper::ERegisteredClients );* CleanupStack::PopAndDestroy( mapper );* @endcode* * An example of changing the state of the remote control client:** @code* CTspClientMapper* mapper = CTspClientMapper::NewLC();* RThread client;* RMessage2& message = aMessage;* // Message from the client* RProcess process;* client.Process( process );* TProcessId processId = proceess.Id();* mapper->SetTspTargetClientToOtherType( processId,* CTspClientMapper::EPlayingClients );* CleanupStack::PopAndDestroy( mapper );* @endcode** An example of removing a tsp mapping client:** @code* CTspClientMapper* mapper = CTspClientMapper::NewLC();* RThread client;* RMessage2& message = aMessage;* // Message from the client* RProcess process;* client.Process( process );* TProcessId processId = proceess.Id();* mapper->RemoveTspTargetClient( processId,* CTspClientMapper::EPlayingClients );* CleanupStack::PopAndDestroy( mapper );* @endcode* * @since S60 5.0*/class CTspClientMapper : public CBase {public: friend class CRemConTspController; /** * Enumerations for tsp mapping types. * * EPlayingClients is used when the client is in playing state. * ERegisteredClients is used when the client is in registered state. * EStoppedClients is used when the client is in stopped state. */ enum TTspClientMappingType { EPlayingClients = 0, ERegisteredClients, EStoppedClients }; /** * Symbian two phased constructor. */ IMPORT_C static CTspClientMapper* NewL(); /** * Symbian two phased constructor. Puts the instance to cleanup stack. */ IMPORT_C static CTspClientMapper* NewLC();public: /** * This function is used to set a target client for TSP. This way Target * Selector Plugin creates a mapping to the correct client. * * @param aMappingType @see TspClientMappingType * @param aProcessId is the process identifier of the client. If the * process id is already in the array the process id that needs * to be set is moved to the first place in the array. */ virtual void SetTspTargetClient( TTspClientMappingType aMappingType, TProcessId aProcessId ) = 0; /** * This function is used to set a TSP target client for another type then it * was originally set for. This way targets don't have to be removed from * one type and then added to another. * * @param aMappingType is the type this client has to be set for * @param aProcessId is the process identifier of the client * @return KErrNotSupported if invalid mapping type. KErrNotFound if this * ProcessId is not found from any of the arrays. */ virtual TInt SetTspTargetClientToOtherType( TTspClientMappingType aMappingType, TProcessId aProcessId ) = 0; /** * This function is used to remove a target client from TSP. This way Target * Selector Plugin creates a mapping to the correct client. The process id's * that are set to the tsp client mapper must be removed from the array * after the state is finished with this function. The mappings aren't * destroyed automatically in the destructor. * * @param aMappingType @see TspClientMappingType * @param aProcessId is the process identifier of the client * @return KErrNotSupported if invalid mapping type, KErrNotFound if * process id is not found in the array. */ virtual TInt RemoveTspTargetClient( TTspClientMappingType aMappingType, TProcessId aProcessId ) = 0;private: /** * This function is used to get the audio clients that are currently * playing audio. The function is used by TSP. * * @param aMappingType @see TspClientMappingType * @param aPidArray is given as a reference. The playing audio clients * are added to this array. * @return aPidArray is returned with the asked process identifiers. * KErrNotSupported if invalid mapping type. */ virtual TInt GetTspTargetClients( TTspClientMappingType aMappingType, RArray<TProcessId>& aPidArray ) = 0;protected: /** * Default Constructor */ CTspClientMapper(); };#endif // TSPCLIENTMAPPER_H// End of File