--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswstubs/examplecommonisc/IscDriver/inc/IscDevice.h Thu Jan 14 07:14:53 2010 +0200
@@ -0,0 +1,333 @@
+/*
+* 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:
+*
+*/
+
+
+#ifndef ISCDEVICE_H
+#define ISCDEVICE_H
+
+// INCLUDES
+#include <kernel.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class DIscDataTransmissionBase;
+class DIscMultiplexerBase;
+class DIscChannel;
+class DIscMainRcvBuffer;
+class DIscQueue;
+class DIscSendQueue;
+class TIscSendFrameInfo;
+
+// CLASS DECLARATION
+
+/**
+* Isc driver ldd factory object
+*
+* @lib IscDriver.LIB
+* @since 2.8
+*/
+class DIscDevice : public DLogicalDevice
+ {
+ public: // Constructors and destructor
+ /**
+ * C++ default constructor.
+ */
+ IMPORT_C DIscDevice();
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C virtual ~DIscDevice();
+
+
+ public: // Functions from base classes
+
+ /**
+ * From DLogicalDevice.
+ * Create a logical channel
+ * @since 2.8
+ * @param DLogicalChannelBase*& aChannel logical channel to be set
+ * @return TInt KErrNone if succesful, otherwise KErrNoMemory
+ */
+ virtual TInt Create( DLogicalChannelBase*& aChannel );
+
+ /**
+ * Complete the installation of driver
+ * @since 2.8
+ * @return TInt KErrNone if successful
+ */
+ virtual TInt Install();
+
+ /**
+ * From DLogicalDevice.
+ * Get capabilities of this logical device
+ * @since 2.8
+ * @param TDes8& aDes a reference which contains return
+ * information describing the capabilities of this device.
+ * @return void
+ */
+ IMPORT_C virtual void GetCaps( TDes8& aDes ) const;
+
+ public: // New functions
+
+ /**
+ * Complete the initialization of driver
+ * @since 2.8
+ * @return void
+ */
+ void Initialize();
+
+ /**
+ * Get message block from buffers allocated in IscDataTransmissionBase.dll
+ * @since 2.8
+ * @param TDes8*& aPtr pointer where message block is set
+ * @param TUint16 aSize size of needed memory block
+ * @return void
+ */
+ IMPORT_C void ReserveMemoryBlock( TDes8*& aPtr, TUint16 aSize );
+
+ /**
+ * Release memory block allocated with ReserveMemoryBlock
+ * @since 2.8
+ * @param TDes8* aData
+ * @return void
+ */
+ IMPORT_C void ReleaseMemoryBlock( TDes8* aData );
+
+ /**
+ * Connection status change function. Can be called from any context.
+ * @since 2.8
+ * @param const TInt aStatus status of driver
+ * @return void
+ */
+ EXPORT_C void NotifyConnectionStatus( const TInt aStatus );
+
+ /**
+ * Frames coming from Domestic OS
+ * @since 2.8
+ * @param TDesC8* aData pointer to data
+ * @return void
+ */
+ IMPORT_C void Receive( TDesC8* aData ) const;
+
+ /**
+ * Queue frames that will be sent to Domestic OS
+ * @since 2.8
+ * @param aChannelId number of sender channel
+ * @param const TDesC8* aFrame pointer to send frame
+ * @param aChannelPtr DIscChannel pointer
+ * @param aMultiplexerDfc dfc to run by data transmission driver after frame has delivered
+ * @param aMultiplexerErrorCode status how frame transmission succeeded
+ * @return TInt KErrNone if frame added to send queue succesfully
+ */
+ IMPORT_C TInt QueueFrame( const TUint16 aChannelId,
+ const TDesC8* aFrame,
+ const TAny* aChannelPtr,
+ TAny* aFrameInfo );
+
+ /**
+ * Cancels sending of frames to Domestic OS of certain channel and deletes queued frames
+ * @since 2.8
+ * @param aChannelId channel number to which canceling is done
+ * @param aChannelPtr DIscChannel pointer
+ * @return TInt KErrNone when canceling is done
+ */
+ IMPORT_C TInt CancelSending( const TUint16 aChannelId,
+ const TAny* aChannelPtr );
+
+ /**
+ * Adds Dfc to empty queues. Can be called from any context.
+ * @since 2.8
+ * @return void
+ */
+ IMPORT_C void FlushQueues();
+
+ /**
+ * Function to complete user side asynchronous request. Uses DIscChannel pointer
+ * @since 2.8
+ * @param aOperation operation to complete
+ * @param aCompleteStatus status of operation
+ * @param aChannelPtr pointer to a DIscChannel
+ * @return void
+ */
+ IMPORT_C void CompleteRequest( TUint16 aOperation,
+ TInt aCompleteStatus,
+ const TAny* aChannelPtr );
+
+ /**
+ * Function to notify client about uplink flow control status
+ * @since 2.8
+ * @param aULFlowStatus EIscFlowControlOn / EIscFlowControlOff
+ * @param aChannelId Channel to be affected by the flow control
+ * @param aChannelPtr pointer to DIscChannel
+ * @return void
+ */
+ IMPORT_C void ULFlowControl( const TInt aULFlowStatus,
+ const TUint16 aChannelId,
+ const TAny* aChannelPtr );
+
+ /**
+ * Function to check if asycnhronous request is active
+ * @since 2.8
+ * @param const TUint16 aReqNumber request number
+ * @param const TUint16 aChannelId channel number
+ * @return TInt KRequestPending if request active, otherwise KErrNone
+ */
+ IMPORT_C TInt IsPending( const TUint16 aReqNumber,
+ const TAny* aChannelPtr );
+
+ /**
+ * Copy data from user buffer to kernel side buffer by multiplexer.
+ * This method will be deprecated in the future.
+ * It is preffered to use GetThreadPtr instead.
+ * @since 2.8
+ * @param aUserBuffer pointer to source descriptor
+ * @param aKernelBuffer pointer to destination descriptor
+ * @param aChannelPtr DIscChannel pointer
+ * @param aOffset Offset of the source buffer
+ * @return KErrNone if successful
+ */
+ IMPORT_C TInt CopyFromUserBuffer( const TDesC8& aUserBuffer,
+ TDes8& aKernelBuffer,
+ const TAny* aChannelPtr,
+ const TInt aOffset );
+
+ /**
+ * Copy data to user side buffer from kernel side by multiplexer.
+ * This method will be deprecated in the future.
+ * It is preffered to use GetThreadPtr instead.
+ * @since 2.8
+ * @param aUserBuffer pointer to destination descriptor
+ * @param aKernelBuffer pointer to source descriptor
+ * @param aChannelPtr DIscChannel pointer
+ * @param aOffset Offset of the destination buffer
+ * @return KErrNone if succesful
+ */
+ IMPORT_C TInt CopyToUserBuffer( TAny* aUserBuffer,
+ const TDesC8& aKernelBuffer,
+ const TAny* aChannelPtr,
+ const TInt aOffset );
+
+ /**
+ * Returns a user side thread of a given channel.
+ * @since 3.0
+ * @param const TAny* aChannelPtr, channel pointer (DIscChannel).
+ * @return DThread*, user side clients thread. Ownership is not given.
+ */
+ IMPORT_C DThread* GetThreadPtr( const TAny* aChannelPtr );
+
+ /**
+ * Notify multiplexer about down link flow control
+ * @since 2.8
+ * @param const TInt aDLFlowStatus EIscFlowControlOn / EIscFlowControlOff
+ * @param const TUint16 aChannel channel number
+ * @return void
+ */
+ void DLFlowControlNotify( const TInt aDLFlowStatus,
+ const TUint16 aChannel,
+ const TAny* aChannelPtr );
+
+ /**
+ * Function to tell current status of connection to Domestic OS
+ * @since 2.8
+ * @return TInt EIscConnectionOk / EIscConnectionNotOk
+ */
+ TInt ConnectionStatus();
+
+ protected:
+
+ /**
+ * Function to disable interrupts
+ * @since 2.8
+ * @return TInt KErrNone if succesful
+ */
+ static TInt DisableIrqs();
+
+ /**
+ * Function to restore interrupts
+ * @since 2.8
+ * @param TInt aLevel level where interrupts should be restored
+ * @return void
+ */
+ static void RestoreIrqs( TInt aLevel );
+
+
+ private:
+
+ /**
+ * Function to connect to DataTransmission and Multiplexer ldds
+ * @since 2.8
+ * @return TInt KErrNone if succesful
+ */
+ TInt InitializeLdd2LddInterface();
+
+ /**
+ * Dfc to empty control channel and other send queues
+ * @since 2.8
+ * @param TAny* aPtr pointer to DIscDevice
+ * @return static void
+ */
+ static void Flush( TAny* aPtr );
+
+ /**
+ * Notifies connection changes.
+ * @since 2.8
+ * @param TAny* aPtr
+ * @return static void
+ */
+ static void NotifyConnection( TAny* aPtr );
+
+
+ public: // Data
+
+ static DIscMultiplexerBase* iIscMultiplexerInterface;
+ static DIscDataTransmissionBase* iIscDataTransmissionInterface;
+
+
+ private: // Data
+
+ TUint32** iSend;
+ TUint32** iTempSend;
+ TUint32** iControlSend;
+
+ TIscSendFrameInfo** iSendFrameParameters;
+ TIscSendFrameInfo** iTempFrameParameters;
+ TIscSendFrameInfo** iControlFrameParameters;
+
+ static DIscSendQueue* iSendQueue;
+ static DIscSendQueue* iTempQueue;
+ static DIscSendQueue* iControlSendQueue;
+
+ static TDfc* iSendDfc;
+ static TDfc* iNotifyDfc;
+
+ DIscMainRcvBuffer* iIscMainRcvBuffer;
+
+ static TInt iConnectionStatus;
+
+ };
+
+#endif // ISCDEVICE_H
+
+// End of File