diff -r 000000000000 -r 4e1aa6a622a0 sensorservices/orientationssy/inc/SsyChannel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sensorservices/orientationssy/inc/SsyChannel.h Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,294 @@ +/* +* Copyright (c) 2007,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: Channel class of Orientation SSY +* +*/ + + +#ifndef __SSYCHANNEL_H__ +#define __SSYCHANNEL_H__ + +// INCLUDES +#include // ssy plugin API data provider +#include // ssy plugin API property provider +#include // sensor server channelinfo +#include // sensor server datatypes +#include // sensor server datatypes + +// CONSTANTS +enum TChannelState + { + EChannelIdle = 0x0001, + EChannelOpening = 0x0002, + EChannelOpen = 0x0004, + EChannelClosing = 0x0008, + EChannelListening = 0x0010, + EChannelDataReceived = 0x0020, + EChannelStopListening = 0x0040, + EChannelForceBufferFilled = 0x0080, + EChannelBufferFilled = 0x0100 + }; + +const TInt KChannelCanBeOpened = EChannelIdle; + +const TInt KChannelCanBeListened = EChannelOpen; + +const TInt KChannelCanBeFilled = EChannelListening | + EChannelDataReceived; + +const TInt KChannelCanBeStopped = EChannelListening | + EChannelDataReceived | + EChannelForceBufferFilled | + EChannelBufferFilled; + +const TInt KChannelCanBeClosed = EChannelOpening | + EChannelOpen | + EChannelListening | + EChannelDataReceived | + EChannelStopListening | + EChannelForceBufferFilled | + EChannelBufferFilled; + +// FORWARD DECLARATIONS +class CSSYProperty; +class MSsyCallback; +class CSSYOrientation; + + +// CLASS DECLARATION + +/** + * CSSYChannel channel class + * + * Channel class for orientation ssy. + * + * @lib orientationssy.lib + * @since S60 5.0 + */ +NONSHARABLE_CLASS( CSSYChannel ) : public CActive, + public MSsyChannelDataProvider, + public MSsyPropertyProvider + { + public: + + /** + * Two phase constructor. + * + * @param aProperty Properties of this channel + * @param aCallBack Callback class from sensor server + * @param aChannelInfo Informnation os this channel + */ + static CSSYChannel* NewL( CSSYProperty* aProperty, + MSsyCallback* const aCallBack, + const TSensrvChannelInfo& aChannelInfo ); + + /** + * Destructor. + */ + virtual ~CSSYChannel(); + + /** + * Issue a request into the active scheduler. + */ + void IssueRequest( TInt aError = KErrNone ); + + /** + * Append data into the client buffer. + * + * @param aOrientationData Orientation channel data + * @param aRotationData Rotation channel data + * @return TBool True if appending data is successfull + */ + TBool AppendData( const TSensrvOrientationData& aOrientationData, + const TSensrvRotationData& aRotationData ); + + /** + * Open the channel. Called by the controller. + * + * @return KErrNone if channel is opened successfully + */ + TInt OpenChannel(); + + /** + * Close the channel. Called by the controller. + * + * @return KErrNone if channel is closed successfully + */ + TInt CloseChannel(); + + /** + * Return the channelId of the channel. + * + * @return Channel identifier of this channel + */ + TSensrvChannelId ChannelId(); + + /** + * Set the channel id for the channel after getting it from the client. + * Called by the controller. + * + * @param aChannelId New channel identifier of this channel + */ + void SetChannelId( const TSensrvChannelId aChannelId ); + + private: + + /** + * From CActive. Cancels any pending request + */ + void DoCancel(); + + /** + * From CActive. Handles completed request + */ + void RunL(); + + /** + * From CActive. Handles errors + */ + TInt RunError( TInt aError ); + + /** + * From MSsyChannelDataProvider. Starts asynchronous data listening. + */ + void StartChannelDataL( const TSensrvChannelId aChannelId, + TUint8* aBuffer, TInt aCount ); + /** + * From MSsyChannelDataProvider. Stops asynchronous data listening. + */ + void StopChannelDataL( const TSensrvChannelId aChannelId ); + + /** + * From MSsyChannelDataProvider. Forces SSY to call BufferFilled() + * regardless of how many data items have been written to buffer. + */ + void ForceBufferFilledL( const TSensrvChannelId aChannelId ); + + + /** + * From MSsyChannelDataProvider. + */ + void GetChannelDataProviderInterfaceL( TUid aInterfaceUid, + TAny*& aInterface ); + /** + * From MSsyPropertyProvider. Check if property value affects other sensor + * channels already open. + */ + void CheckPropertyDependenciesL( const TSensrvChannelId aChannelId, + const TSensrvProperty& aProperty, + RSensrvChannelList& aAffectedChannels ); + + /** + * From MSsyPropertyProvider. Set property for the channel. + */ + void SetPropertyL( const TSensrvChannelId aChannelId, + const TSensrvProperty& aProperty ); + + /** + * From MSsyPropertyProvider. Get property for the channel. + */ + void GetPropertyL( const TSensrvChannelId aChannelId, + TSensrvProperty& aProperty ); + + /** + * From MSsyPropertyProvider. Get all properties for the channel. + */ + void GetAllPropertiesL( const TSensrvChannelId aChannelId, + RSensrvPropertyList& aChannelPropertyList ); + + /** + * From MSsyPropertyProvider. Get all properties for the channel. + */ + void GetPropertyProviderInterfaceL( TUid aInterfaceUid, + TAny*& aInterface ); + + /** + * C++ constructor. + */ + CSSYChannel( CSSYProperty* aProperty, + MSsyCallback* const aCallBack, + const TSensrvChannelInfo& aChannelInfo ); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + /** + * Return the channelinfo of the channel. + */ + TSensrvChannelInfo& ChannelInfo(); + + /** + * Set the state of the channel. + */ + void SetChannelState( const TChannelState aChannelState ); + + private: // data + + /** + * Orientation handler. + */ + CSSYOrientation* iOrientationHandler; + + /** + * Channel specific properties. + */ + CSSYProperty* iChannelProperties; + + /** + * Sensor specific properties common for all the channels. + */ + CSSYProperty* iSensorProperties; + + /** + * Ssy callback class. + */ + MSsyCallback* iCallback; + + /** + * Channel state. + */ + TChannelState iChannelState; + + /** + * Channelinfo. + */ + TSensrvChannelInfo iChannelInfo; + + /** + * Receive buffer for data. + */ + TUint8* iBuffer; + + /** + * Amount of data to be received. + */ + TInt iCount; + + /** + * Amount of data that is currently received. + */ + TInt iCountReceived; + + /** + * Pointer into the buffer where we are writing currently. + */ + TUint8* iWritePointer; + +}; + +#endif // __SSYCHANNEL_H__ + +// End of File