sensorservices/tiltcompensationssy/inc/tcchannel.h
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sensorservices/tiltcompensationssy/inc/tcchannel.h	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,221 @@
+/*
+* 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:  CTCChannel class declaration.
+*
+*/
+
+
+
+#ifndef TCCHANNEL_H
+#define TCCHANNEL_H
+
+// INCLUDES
+#include <e32base.h>
+#include <sensrvchannelinfo.h>
+#include <sensrvdatalistener.h>
+#include <ssypropertyprovider.h>
+#include <ssychanneldataprovider.h>
+#include <sensrvtypes.h>
+
+#include "tcstatepool.h"
+#include "tctransactionhandler.h"
+#include "tcstate.h"
+
+// FORWARD DECLARATIONS
+class MSsyCallback;
+
+// CLASS DECLARATION
+
+/**
+*  Base class for a channel handler. Base class has the basic
+*  implementation support for the state machine.
+*
+*  Channel supports following states:
+*  - Idle
+*  - Open
+*  - Listen data
+*  - Buffer full
+*  - Closing
+*
+*  @lib None.
+*  @since S60 5.0
+*/
+NONSHARABLE_CLASS( CTCChannel ): public CActive,
+    public MSsyPropertyProvider,
+    public MSsyChannelDataProvider,
+    public MTCStatePool,
+    public MTCTransactionHandler
+    {
+    public:
+    
+        // Default C++ destructor
+        ~CTCChannel();
+    
+    public: // New methods
+    
+        /**
+        * Updates correct channel ID received from sensor server.
+        * 
+        * @param aId Channel ID.
+        * @return None.
+        */
+        virtual void SetChannelId( TSensrvChannelId aId );
+        
+        /**
+        * Returns channel ID.
+        * 
+        * @return TSensrvChannelId.
+        */
+        virtual TSensrvChannelId ChannelId() const;
+        
+        /**
+        * Checks if the channel is supported.
+        * 
+        * @param aInfo Sensor channel info.
+        * @return ETrue if supported.
+        */
+        virtual TBool ChannelSupported( const TSensrvChannelInfo& aInfo );
+
+        /**
+        * Registers a channel supported by this channel instance.
+        *
+        * @param aChannels Channel list.
+        * @return None.
+        */
+        virtual void RegisterChannelL( RSensrvChannelInfoList& aChannels ) = 0;
+        
+        /**
+        * Open the channel.
+        */
+        virtual void OpenChannelL() = 0;
+
+        /**
+        * Close the channel.
+        */
+        virtual void CloseChannelL() = 0;
+
+    protected: // Methods from base classes
+    
+        // @see CActive
+        void DoCancel();
+        
+        // @see CActive
+        TInt RunError( TInt aError );
+        
+        // @see MTCStatePool
+        CTCState* CurrentState() const;
+        
+        // @see MTCStatePool
+        //CTCState* PreviousState() const;
+
+        // @see MTCStatePool
+        void ChangeStateL( TInt aStateId );
+        
+        // @see MTCChannelTransaction
+        //TBool ReadyForTransaction() const;
+        
+        // @see MTCChannelTransaction
+        TUint8* DataBuffer() const;
+        
+        // @see MTCChannelTransaction
+        TInt DataCount() const;
+
+    protected: // New methods
+    
+        /**
+        * Constructor
+        */
+        void BaseConstructL();
+        
+        /**
+        * Finds a sensor channel.
+        *
+        * @param aChannelTypeId Channel type ID.
+        * @param aLocation Location of the sensor.
+        * @param aVendorId Sensor vendor ID.
+        * @param aChannelInfo Found channel info.
+        * @return ETrue if channel found.
+        */
+        static TBool FindChannelL( const TSensrvChannelTypeId& aChannelTypeId,
+            const TDesC8& aLocation,
+            const TDesC8& aVendorId,
+            TSensrvChannelInfo& aChannelInfo );
+
+        /**
+        * Register a state.
+        * Only the state with aStateId can be registered.
+        * 
+        * @param aStateId State to register.
+        * @param aStateArray Array where to add the state.
+        */
+        virtual void RegisterStateL( CTCState::TCStateId aStateId,
+            RStateArray& aStateArray ) = 0;
+            
+        /**
+        * Forces the current transaction to be completed.
+        * 
+        * @param aCode Completion code of the transaction.
+        */
+        virtual void CompleteTransaction( TInt aCode );
+
+    protected:
+
+        /**
+        * Default C++ constructor.
+        */
+        CTCChannel( MSsyCallback& aCallback );
+        
+    private: // New methods
+    
+        // Completes pending request
+        void CompleteSelf( TInt aCode );
+        
+    protected: // Data for inherited channels
+    
+        /** Channel ID */
+        TSensrvChannelInfo iChannelInfo;
+        
+        /** SSY callback interface */
+        MSsyCallback& iCallback;
+        
+        /** Current transaction ID */
+        TTCTransactionId iCurrentTransactionId;
+        
+        /** Current transaction, not owned */
+        TTCTransaction* iCurrentTransaction;
+        
+        /** Data buffer, not owned */
+        TUint8* iData;
+        
+        /** Data buffer count */
+        TInt iCount;
+        
+    private: // Private data for base channel
+    
+        /** State pool */
+        RStateArray iStatePool;
+        
+        /** Current state pointer, not owned */
+        CTCState* iCurrentState;
+        
+        /** Previous state pointer, not owned */
+        CTCState* iPreviousState;
+    };
+
+/** Channel array */
+typedef RPointerArray<CTCChannel> RChannelArray;
+
+#endif // TCCHANNEL_H
+
+// End of File