diff -r 000000000000 -r 4e1aa6a622a0 sensorservices/tiltcompensationssy/src/tcssycontrol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sensorservices/tiltcompensationssy/src/tcssycontrol.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,162 @@ +/* +* 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: CTCSsyControl class implementation. +* +*/ + + +#include + +#include "tcssycontrol.h" +#include "tcchanneltilt.h" +#include "trace.h" + +CTCSsyControl* CTCSsyControl::NewL( MSsyCallback* aSsyCallback ) + { + FUNC_LOG; + + CTCSsyControl* self = new( ELeave ) CTCSsyControl; + + CleanupStack::PushL( self ); + self->ConstructL( aSsyCallback ); + CleanupStack::Pop( self ); + + return self; + } + +CTCSsyControl::~CTCSsyControl() + { + FUNC_LOG; + + iChannels.ResetAndDestroy(); + } + +CTCSsyControl::CTCSsyControl() + { + FUNC_LOG; + } + +void CTCSsyControl::ConstructL( MSsyCallback* aSsyCallback ) + { + FUNC_LOG; + + // Create tilt channel. Tilt channel provides compensated tilt data + // from magnetometer and accelerometer vectors + CTCChannel* channel = CTCChannelTilt::NewL( *aSsyCallback ); + CleanupStack::PushL( channel ); + iChannels.AppendL( channel ); + CleanupStack::Pop( channel ); + + // Register channels + RSensrvChannelInfoList channelList; + CleanupClosePushL( channelList ); + TInt channelCount = iChannels.Count(); + for( TInt i = 0; i < channelCount; i++ ) + { + iChannels[ i ]->RegisterChannelL( channelList ); + } + aSsyCallback->RegisterChannelsL( channelList ); + + _LIT( KThreadName, "TiltThread" ); + RThread thread; + thread.RenameMe( KThreadName ); + + // Update channel IDs + TInt channelInfoCount = channelList.Count(); + channelCount = iChannels.Count(); + for( TInt i = 0; i < channelInfoCount; i++ ) + { + channel = NULL; + for( TInt j = 0; j < channelCount; j++ ) + { + channel = iChannels[ j ]; + const TSensrvChannelInfo& info = channelList[ i ]; + if( channel->ChannelSupported( info ) ) + { + channel->SetChannelId( info.iChannelId ); + } + } + } + CleanupStack::PopAndDestroy( &channelList ); + } + +// ---------------------------------------------------------------------------------- +// CTCSsyControl::OpenChannelL +// ---------------------------------------------------------------------------------- +// +void CTCSsyControl::OpenChannelL( TSensrvChannelId aChannelId ) + { + FUNC_LOG; + + CTCChannel* channel = ChannelSupported( aChannelId ); + if( channel ) + { + INFO_1( "Found channel [%d]. Opening channel", aChannelId ); + channel->OpenChannelL(); + INFO_1( "Channel [%d] opened", aChannelId ); + } + else + { + ERROR_GEN_1( "Channel [%d] not supported", aChannelId ); + User::Leave( KErrNotSupported ); + } + } + +// ---------------------------------------------------------------------------------- +// CTCSsyControl::CloseChannelL +// ---------------------------------------------------------------------------------- +// +void CTCSsyControl::CloseChannelL( TSensrvChannelId aChannelId ) + { + FUNC_LOG; + + CTCChannel* channel = ChannelSupported( aChannelId ); + if( channel ) + { + INFO_1( "Found channel [%d]. Opening channel", aChannelId ); + channel->CloseChannelL(); + INFO_1( "Channel [%d] opened", aChannelId ); + } + else + { + ERROR_GEN_1( "Channel [%d] not supported", aChannelId ); + User::Leave( KErrNotSupported ); + } + } + +// ---------------------------------------------------------------------------------- +// CTCSsyControl::ChannelSupported +// ---------------------------------------------------------------------------------- +// +CTCChannel* CTCSsyControl::ChannelSupported( TSensrvChannelId aChannelId ) const + { + FUNC_LOG; + + CTCChannel* channel = NULL; + TInt count( iChannels.Count() ); + for( TInt i = 0; i < count; i++ ) + { + channel = iChannels[ i ]; + TSensrvChannelId id = channel->ChannelId(); + if( id == aChannelId ) + { + // Channel found, break + break; + } + } + + return channel; + } + +// End of File