systemswstubs/ssyreference/src/ssyreferencechannel.cpp
changeset 43 e71858845f73
parent 40 b7e5ed8c1342
child 46 e1758cbb96ac
--- a/systemswstubs/ssyreference/src/ssyreferencechannel.cpp	Tue Sep 07 08:19:48 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,443 +0,0 @@
-/*
-* Copyright (c) 2006 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:  Reference implementation of SSY Channel
-*
-*/
-
-
-#include <ssycallback.h>                     // MSsyCallback
-#include "ssyreferencechannel.h"
-#include "ssyreferencecontrol.h"             // SSY Control
-#include "ssyreferencepropertyprovider.h"    // iChannelPropertyProvider
-#include "ssyreferencechanneldataprovider.h" // iChannelDataProvider
-#include "ssyreferencetrace.h"
-#include "ssyreferencecmdhandler.h"
-
-
-// ======== MEMBER FUNCTIONS ========
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel C++ constructor
-// ---------------------------------------------------------------------------
-//
-CSsyReferenceChannel::CSsyReferenceChannel( CSsyReferenceControl& aSsyControl, TSensrvChannelInfo aChannelInfo ) :
-    iSsyControl( aSsyControl ),
-    iChannelInfo( aChannelInfo ),
-    iState( ESsyReferenceChannelIdle )
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::CSsyReferenceChannel()" ) ) );
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::CSsyReferenceChannel() - return" ) ) );
-    }
-
-
-// ---------------------------------------------------------------------------
-// Symbian 2nd phase constructor
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceChannel::ConstructL()
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::ConstructL()" ) ) );
-
-    // Create command handler
-    iCmdHandler = CSsyReferenceCmdHandler::NewL( *this );
-    
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::ConstructL() - return" ) ) );
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::NewL
-// ---------------------------------------------------------------------------
-//
-CSsyReferenceChannel* CSsyReferenceChannel::NewL( CSsyReferenceControl& aSsyControl, TSensrvChannelInfo aChannelInfo )
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::NewL()" ) ) );
-    CSsyReferenceChannel* self = new ( ELeave ) CSsyReferenceChannel( aSsyControl, aChannelInfo );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::NewL() - return" ) ) );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CSsyReferenceChannel::~CSsyReferenceChannel()
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::~CSsyReferenceChannel()" ) ) );
-
-    // In case channel is not closed before destruction, providers are not deleted
-    if ( iChannelDataProvider )
-        {
-        delete iChannelDataProvider;
-        iChannelDataProvider = NULL;
-        }
-    
-    if ( iChannelPropertyProvider )
-        {
-        delete iChannelPropertyProvider;
-        iChannelPropertyProvider = NULL;
-        }
-
-    if ( iCmdHandler )
-        {
-        delete iCmdHandler;
-        iCmdHandler = NULL;
-        }
-
-    iProperties.Reset();
-    
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::~CSsyReferenceChannel() - return" ) ) );
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::ChannelId
-// ---------------------------------------------------------------------------
-//
-TInt CSsyReferenceChannel::ChannelId()
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::ChannelId() - %i" ), iChannelInfo.iChannelId ) );
-    return iChannelInfo.iChannelId;
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::SsyControl
-// ---------------------------------------------------------------------------
-//
-CSsyReferenceControl& CSsyReferenceChannel::SsyControl() const
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::SsyControl()" ) ) );
-    return iSsyControl;
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceControl::SsyCmdHandler
-// ---------------------------------------------------------------------------
-//
-CSsyReferenceCmdHandler& CSsyReferenceChannel::CommandHandler() const
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::SsyCmdHandler()" ) ) );
-    return *iCmdHandler;
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::FindPropertyL
-// ---------------------------------------------------------------------------
-//
-TSensrvProperty& CSsyReferenceChannel::FindPropertyL( 
-    const TSensrvPropertyId aPropertyId, 
-    TInt aItemIndex,
-    TInt aArrayIndex )
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::FindPropertyL()" ) ) );
-    TSensrvProperty* property = NULL;
-    TBool propertyFound( EFalse );
-
-    // Search property
-    for ( TInt i = 0; i < iProperties.Count() && !propertyFound; i++ )
-        {
-        property = static_cast<TSensrvProperty*>( &iProperties[i] );
-
-        // Compare property IDs and array index
-        if ( property->GetPropertyId() == aPropertyId )
-            {
-            // Compare item index if it is given
-            if ( ( KErrNotFound == aItemIndex ) || ( property->PropertyItemIndex() == aItemIndex ) )
-                {
-                // Correct property ID is found, now check is it array type of property.
-                // Either array indexes must match or propertys array index has to be array info
-                if ( ( property->GetArrayIndex() == aArrayIndex ) || 
-                     ( ( property->GetArrayIndex() == ESensrvArrayPropertyInfo ) && 
-                       ( ESensrvSingleProperty == aArrayIndex ) ) )
-                    {
-                    // Correct array index found
-                    propertyFound = ETrue;    
-                    }
-                }
-            }
-        }
-
-    // Leave if not found
-    if ( !propertyFound )
-        {
-        iSsyControl.FindPropertyL( aPropertyId, aArrayIndex, *property );
-        }
-
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::FindPropertyL() - return" ) ) );
-    return *property;
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::FindAndUpdatePropertyL
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceChannel::FindAndUpdatePropertyL( const TSensrvProperty& aProperty )
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::FindAndUpdatePropertyL()" ) ) );
-    TBool propertyFound( EFalse );
-
-    // Search property
-    for ( TInt i = 0; i < iProperties.Count() && !propertyFound; i++ )
-        {
-        // Compare property IDs
-        if ( iProperties[i].GetPropertyId() == aProperty.GetPropertyId() )
-            {
-            // Compare item index if it is given
-            if ( ( KErrNotFound != aProperty.PropertyItemIndex() ) && 
-                 ( iProperties[i].PropertyItemIndex() == aProperty.PropertyItemIndex() ) )
-                {
-                // Property found -> update if possible
-                if ( iProperties[i].ReadOnly() )
-                    {
-                    User::Leave( KErrAccessDenied );
-                    }
-                // If modifiable, get type and update value
-                switch ( iProperties[i].PropertyType() )
-                    {
-                    case ESensrvIntProperty:
-                        {
-                        TInt value( 0 );
-                        aProperty.GetValue( value );
-                        iProperties[i].SetValue( value );
-                        break;
-                        }
-                    case ESensrvRealProperty:
-                        {
-                        TReal value( 0 );
-                        aProperty.GetValue( value );
-                        iProperties[i].SetValue( (TReal) value );
-                        break;
-                        }
-                    case ESensrvBufferProperty:
-                        {
-                        TBuf8<20> propValue;
-                        aProperty.GetValue( propValue );
-                        iProperties[i].SetValue( propValue );
-                        break;
-                        }
-                    default:
-                        {
-                        break;
-                        }
-                    }
-                propertyFound = ETrue;
-                }
-            }
-        }
-
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::FindPropertyL() - return" ) ) );
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::GetProperties
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceChannel::GetProperties( RSensrvPropertyList& aPropertyList )
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::GetProperties()" ) ) );
-    // Copy properties one by one to param aPropertyList
-    TInt propCount( iProperties.Count() );
-    RSensrvPropertyList propList( propCount );
-
-    for ( TInt i = 0; i < propCount; i++ )
-        {
-        propList.Append( iProperties[i] );
-        }
-
-    aPropertyList = propList;
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::GetProperties() - return" ) ) );
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::UpdateState
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceChannel::UpdateState( const TSsyReferenceChannelState aNewState )
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::UpdateState() - %i" ), aNewState ) );
-    iState = aNewState;
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::ProcessResponse
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceChannel::ProcessResponse( TSsyReferenceMsg* aMessage )
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::ProcessResponse()" ) ) );
-    
-    if ( aMessage ) 
-        {
-        switch ( aMessage->Function() )
-            {
-            case ESsyReferenceOpenChannelResp:
-                {
-                // Open channel specific handling here
-                TRAPD( err, HandleOpenChannelRespL( aMessage->Error() ) );
-                if ( KErrNone != err )
-                    {
-                    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::ProcessResponse() - Error opening channel: %i" ), err ) );
-                    }
-                break;
-                }
-            case ESsyReferenceDataItemReceived:
-                {
-                // Send data item to data provider
-                TRAPD( err, iChannelDataProvider->ChannelDataReceivedL( aMessage ) );
-                if ( KErrNone != err )
-                    {
-                    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::ProcessResponse() - Error receiving data: %i" ), err ) );
-                    }
-                break;  
-                }
-            case ESsyReferenceCloseChannelResp:
-                {
-                // Close channel specific handling here
-                HandleCloseChannelResp();
-                break;  
-                }
-            default:
-                {
-                // This command was not intended to process here, try Control class
-                iSsyControl.ProcessResponse( aMessage );    
-                COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::ProcessResponse() - Unknown function" ) ) );
-                }
-            }
-        }
-
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::ProcessResponse() - return" ) ) );
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::OpenChannel
-// ---------------------------------------------------------------------------
-//
-TInt CSsyReferenceChannel::OpenChannel()
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::OpenChannel()" ) ) );
-
-    TInt err( KErrAlreadyExists );
-
-    // Check that this channel is not already open
-    if ( ESsyReferenceChannelIdle == iState )
-        {
-        // Update state and issue request. Will continue in HandleOpenChannelResp
-        UpdateState( ESsyReferenceChannelOpening );
-
-        // Create message with function spesific information
-        // and pass it to command handler
-        err = iCmdHandler->ProcessCommand( TSsyReferenceMsg( ChannelId(), ESsyReferenceOpenChannel ) );
-        }
-
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::OpenChannel() - return" ) ) );
-    return err;
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::HandleOpenChannelResp
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceChannel::HandleOpenChannelRespL( const TInt aError )
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::HandleOpenChannelResp()" ) ) );
-
-    // Open channel asynhronously and complete request with MSsyCallback::ChannelOpened() when
-    // channel is opened.
-
-    // Create instance of the data provider of this channel
-    iChannelDataProvider = CSsyReferenceChannelDataProvider::NewL( *this );
-    // Create instance of the property provider of this channel
-    iChannelPropertyProvider = CSsyReferencePropertyProvider::NewL( *this );
-
-    TInt error( aError );
-
-    // If channel opening succeeds, update state to Open
-    if ( KErrNone == aError )
-        {
-        // Update state to Open
-        UpdateState( ESsyReferenceChannelOpen );
-        // Get channel properties
-        TRAP( error, iSsyControl.SsyConfig().GetChannelPropertiesL( ChannelId(), iProperties ) );
-        }
-    else
-        {
-        // Channel opening failed, back to idle
-        UpdateState( ESsyReferenceChannelIdle ); 
-        }
-
-    // Complete transaction
-    iSsyControl.SsyCallback().ChannelOpened( ChannelId(),
-                                error,
-                                iChannelDataProvider,
-                                iChannelPropertyProvider );
-
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::HandleOpenChannelResp() - return" ) ) );
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::CloseChannel
-// ---------------------------------------------------------------------------
-//
-TInt CSsyReferenceChannel::CloseChannel()
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::CloseChannel()" ) ) );
-
-    TInt err( KErrNotFound );
-
-    // Check that this channel is open
-    if ( ESsyReferenceChannelOpen == iState )
-        {
-        // Update state and issue request. Will continue in HandleCloseChannelResp
-        UpdateState( ESsyReferenceChannelClosing );
-        // Create message with function spesific information
-        // and pass it to command handler
-        err = iCmdHandler->ProcessCommand( TSsyReferenceMsg( ChannelId(), ESsyReferenceCloseChannel ) );
-        }
-
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::CloseChannel() - return" ) ) );
-    return err;
-    }
-
-// ---------------------------------------------------------------------------
-// CSsyReferenceChannel::HandleCloseChannelResp
-// ---------------------------------------------------------------------------
-//
-void CSsyReferenceChannel::HandleCloseChannelResp()
-    {
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::HandleCloseChannelResp()" ) ) );
-
-    // Close channel and complete request with MSsyCallback::ChannelClosed() when
-    // channel is closed.
-
-    // Delete providers
-    delete iChannelDataProvider;
-    iChannelDataProvider = NULL;
-
-    delete iChannelPropertyProvider;
-    iChannelPropertyProvider = NULL;
-
-    // Update state to idle
-    UpdateState( ESsyReferenceChannelIdle );
-
-    // Reset properties
-    iProperties.Reset();
-
-    // Complete transaction
-    iSsyControl.SsyCallback().ChannelClosed( ChannelId() );
-
-    COMPONENT_TRACE( ( _L( "SSY Reference Plugin - CSsyReferenceChannel::HandleCloseChannelResp() - return" ) ) );
-    }
-
-// End of file