tactilefeedback/tactilefeedbackresolver/src/tactilefeedbacksession.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 11 Jun 2010 13:57:13 +0300
changeset 22 4838b44af342
parent 0 d54f32e146dd
permissions -rw-r--r--
Revision: 201021 Kit: 2010123

/*
* 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:  Session class of Tactile Feedback server.
* Part of:      Tactile Feedback.
*
*/

#include <s32mem.h>

// #include "tactilefeedbacktrace.h"
#include "tactilefeedbacksrv.h"
#include "tactilefeedbacksession.h"

// --------------------------------------------------------------------------
// CTactileFeedbackSession::CTactileFeedbackSession
// C++ constructor.
// --------------------------------------------------------------------------
//
CTactileFeedbackSession::CTactileFeedbackSession() 
    {
    
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::~CTactileFeedbackSession
// C++ destructor.
// --------------------------------------------------------------------------
//
CTactileFeedbackSession::~CTactileFeedbackSession()
    {
    // Stop continuous feedback, if it is started in this session. 
    if ( iFeedbackStarted )
        {
        Server().StopFeedback();
        }
    Server().RemoveSession();
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::CreateL
// From CSession2, used to increase server's session count.
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::CreateL()
    {
    // TRACE("CTactileFeedbackSession::CreateL - Begin");
    Server().AddSession();
    // TRACE("CTactileFeedbackSession::CreateL - End");    
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::Server
// Reference to server.
// --------------------------------------------------------------------------
//
CTactileFeedbackSrv& CTactileFeedbackSession::Server()
    {   
    return *static_cast<CTactileFeedbackSrv*>
           ( const_cast<CServer2*>( CSession2::Server() ) );
    }
    
// --------------------------------------------------------------------------
// CTactileFeedbackSession::ServiceL
// From CSession2, passes the request forward to DispatchMessageL.
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::ServiceL( const RMessage2& aMessage )
    {
    TRAPD(err,DispatchMessageL(aMessage));
    if ( err != KErrNone )
        {
        aMessage.Complete( err );
        }    
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::DispatchMessageL
// Handles the request from client.
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::DispatchMessageL( const RMessage2& aMessage )
    {
    switch( aMessage.Function() )
        {
        case EPlayFeedback:
            PlayFeedback( aMessage );
            break;
        case EStartFeedback:
            StartFeedback( aMessage );
            break;
        case EModifyFeedback:
            ModifyFeedback( aMessage );
            break;
        case EStopFeedback:            
            StopFeedback( aMessage );
            break;            
        case ESetFBEnabledDevice:            
            SetFBEnabledForDeviceL( aMessage );
            break;
        case EFBEnabledForDevice:
            FeedbackEnabledForDeviceL( aMessage );
            break;
        case  EPlayPreviewFeedback:
            PlayPreviewFeedback( aMessage );
            break;
        case  EStartPreviewFeedback:
            StartPreviewFeedback( aMessage );
            break;
        case  EModifyPreviewFeedback:
            ModifyPreviewFeedback( aMessage );
            break;
        case  EStopPreviewFeedback:
            StopPreviewFeedback( aMessage );
            break;            
        default:
            aMessage.Complete( KErrArgument );
            break;
        }
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::PlayFeedbackL
//
// --------------------------------------------------------------------------
//     
void CTactileFeedbackSession::PlayFeedback( const RMessage2& aMessage )
    {
    Server().PlayFeedback( static_cast<TTouchLogicalFeedback>(aMessage.Int0()),
                           aMessage.Int1(),
                           aMessage.Int2() );

    aMessage.Complete( KErrNone );
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::StartFeedbackL
//
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::StartFeedback( const RMessage2& aMessage )
    {
    // TRACE("CTactileFeedbackSession::StartFeedbackL - Begin");
    Server().StartFeedback( 
                     static_cast<TTouchContinuousFeedback>( aMessage.Int0() ),
                     aMessage.Int1() );
    iFeedbackStarted = ETrue;
    aMessage.Complete( KErrNone );
    // TRACE("CTactileFeedbackSession::StartFeedbackL - End");
    }
    
// --------------------------------------------------------------------------
// CTactileFeedbackSession::ModifyFeedbackL
//
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::ModifyFeedback( const RMessage2& aMessage )
    {
    // TRACE("CTactileFeedbackSession::ModifyFeedbackL - Begin");
    Server().ModifyFeedback( aMessage.Int0() );
    aMessage.Complete( KErrNone );
    // TRACE("CTactileFeedbackSession::ModifyFeedbackL - End");
    }
    
// --------------------------------------------------------------------------
// CTactileFeedbackSession::StopFeedbackL
//
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::StopFeedback( const RMessage2& aMessage )
    {
    // TRACE("CTactileFeedbackSession::StopFeedbackL - Begin");
    Server().StopFeedback();
    iFeedbackStarted = EFalse;
    aMessage.Complete( KErrNone );
    // TRACE("CTactileFeedbackSession::StopFeedbackL - End");
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::SetFBEnabledForDeviceL
//
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::SetFBEnabledForDeviceL( const RMessage2& aMessage )
    {
    if ( aMessage.HasCapability( ECapabilityWriteDeviceData ) )
        {
        Server().EnableFeedbackForDevice( 
                        static_cast<TTouchFeedbackType>( aMessage.Int0() )  );
        aMessage.Complete( KErrNone );
        }
    else
        {
        User::Leave( KErrPermissionDenied );
        }
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::FeedbackEnabledForDeviceL
//
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::FeedbackEnabledForDeviceL( const RMessage2& aMessage )
    {
    TTouchFeedbackType feedbackEnabled = Server().FeedbackEnabledForDevice();
    
    TPckg<TTouchFeedbackType> enabled(feedbackEnabled);
    
    aMessage.WriteL( 0, enabled );
    aMessage.Complete( KErrNone );
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::PlayPreviewFeedbackL
//
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::PlayPreviewFeedback( const RMessage2& aMessage )
    {
    Server().PlayPreviewFeedback( aMessage.Int0(),
                         static_cast<TTouchLogicalFeedback>(aMessage.Int1() ),
                         static_cast<TTouchFeedbackType>(aMessage.Int2() ) );
    aMessage.Complete( KErrNone );    
    
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::StartPreviewFeedbackL
//
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::StartPreviewFeedback( const RMessage2& aMessage )
    {
    Server().StartPreviewFeedback( 
                     aMessage.Int0(),
                     static_cast<TTouchContinuousFeedback>( aMessage.Int1() ),
                     aMessage.Int2(),
                     static_cast<TTouchFeedbackType>( aMessage.Int3() ) );
    iFeedbackStarted = ETrue;                                   
    aMessage.Complete( KErrNone );    
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::ModifyPreviewFeedbackL
//
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::ModifyPreviewFeedback( const RMessage2& aMessage )
    {
    // Normal ModifyFeedback function is used also for preview.
    Server().ModifyFeedback( aMessage.Int0() );
    aMessage.Complete( KErrNone );    
    }

// --------------------------------------------------------------------------
// CTactileFeedbackSession::StopPreviewFeedbackL
//
// --------------------------------------------------------------------------
//
void CTactileFeedbackSession::StopPreviewFeedback( const RMessage2& aMessage )
    {
    Server().StopPreviewFeedback();
    iFeedbackStarted = EFalse;
    aMessage.Complete( KErrNone );    
    }
    
// End of file