diff -r 37b610eb7fe3 -r b5894bb67e73 systemswstubs/examplecommonisc/IscMultiplexerBase/inc/IscMultiplexerBase.h --- a/systemswstubs/examplecommonisc/IscMultiplexerBase/inc/IscMultiplexerBase.h Thu Aug 19 09:36:39 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,446 +0,0 @@ -/* -* 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 ISCMULTIPLEXERBASE_H -#define ISCMULTIPLEXERBASE_H - -// INCLUDES -#include -#include - -// CONSTANTS -_LIT( KIscMultiplexerName,"IscMultiplexer" ); - -const TUint16 KIscBufferAmount = 10; -// MACROS - -// DATA TYPES - -typedef struct -{ - TIscFrameType frameType; - TIscFrameConcatenation concatenation; - TUint16 totalLength; - TUint16 writeStartIndex; - TUint16 writeLength; -} TIscFrameInfo; - -typedef struct -{ - TUint16 size; - TUint16 count; -} TIscBufferEntry; - -typedef struct -{ - TUint16 mainRcvQueueSize; - TUint16 channelRcvQueueSize; - TUint16 channelDataRcvQueueSize; - TUint16 channelSendQueueSize; - TIscBufferEntry bufferConfig[KIscBufferAmount]; -} TIscConfiguration; - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS -class DIscDevice; - -// CLASS DECLARATION - -/** -* DIscMultiplexerBase defines the ISC Multiplexer Plug-In API. -* This class defines the base class for Multiplexer( s ) used in -* conjunction with ISC Driver -* -* @lib IscMultiplexerBase.LIB -* @since 2.8 -*/ -class DIscMultiplexerBase : public DLogicalDevice - { - public: // Constructors and destructor - - /** - * C++ default constructor. - */ - IMPORT_C DIscMultiplexerBase(); - - /** - * Destructor - */ - IMPORT_C virtual ~DIscMultiplexerBase(); - - public: // Functions from base class - - /** - * Implementation of pure-virtual Install from DLogicalDevice. This - * function calls Install2ndPhase. - * @since 2.8 - * @return TInt KErrNone - */ - IMPORT_C TInt Install(); - - public: // New functions - /** - * Second phase initialization, called during ISC Multiplexer loading - * ISC Multiplexer must do all initialization here that are normally - * done in Install() - * @since 2.8 - * @return TInt KErrNone if successful - */ - virtual TInt Install2ndPhase() = 0; - - /** - * Multiplexers "pre" intialization before Data transmission driver - * initialization has been done ( e.g. if buffer configurations are given from isc_config.ini ) - * @since 2.8 - * @param aParameters Additional parameters passed to multiplexer - * @return void - */ - IMPORT_C virtual void SetInitializationParameters( const TDesC8& aParameters ); - - /** - * Multiplexer intialization - * @since 2.8 - * @param aOperation The asynchronous request to complete after - * multiplexer intialization is complete - * @param aParameters Additional parameters passed to multiplexer - * @param aChannelPtr DIscChannel pointer - * @return void - */ - virtual void InitializeMultiplexer( const TUint16 aOperation, - const TDesC8& aParameters, - const TAny* aChannelPtr ) = 0; - - /** - * Open data link connection with the modem - * @since 2.8 - * @param aDLCI The channel id to open - * @param aOpenParams Additional open parameters given by the ISC user, - * NULL if omitted - * @param aChannelPtr DIscChannel pointer - * @return void - */ - virtual void OpenDLC( const TUint16 aDLCI, - const TDesC8* aOpenParams, - const TAny* aChannelPtr ) = 0; - - /** - * Close data link connection - * @since 2.8 - * @param aDLCI The channel id to close - * @param aChannelPtr DIscChannel pointer - * @return void - */ - virtual void CloseDLC( const TUint16 aDLCI, - const TAny* aChannelPtr ) = 0; - - /** - * Send data to Domestic OS - * @since 2.8 - * @param aOperation Used to distinguish whether it is a synchronous - * or asynchronous Send request ( EIscSyncSend / EIscAsyncSend ) - * @param aSenderChannel Sender channel id - * @param aData Data to be sent - * @param aChannelPtr DIscChannel pointer - * @return KErrNone if successful - */ - virtual TInt Send( const TUint16 aOperation, - const TUint16 aSenderChannel, - const TDesC8& aData, - const TAny* aChannelPtr ) = 0; - /** - * Send data to Domestic OS - * @since 2.8 - * @param aOperation Used to distinguish whether it is a synchronous - * or asynchronous Send request ( EIscSyncDataSend / EIscAsyncDataSend ) - * @param aSenderChannel Sender channel id - * @param aData Data to be sent - * @param aChannelPtr DIscChannel pointer - * @return KErrNone if successful - */ - virtual TInt DataSend( const TUint16 aOperation, - const TUint16 aSenderChannel, - const TDesC8& aData, - const TAny* aChannelPtr ) = 0; - - - /** - * Retrieve information on the incoming frame - * @since 2.8 - * @param aFrame Frame which info to retrieve - * @param aFrameInfo Structure that the multiplexer must fill - * @return void - */ - virtual void GetFrameInfo( const TDesC8& aFrame, - TIscFrameInfo& aFrameInfo ) const = 0; - - /** - * Retrieve the channel this frame belongs to - * @since 2.8 - * @param aFrame Frame to check - * @param aRcvChannelId Receiver channel id has to written into this - * variable. Value should be between 0 and 63. KIscFrameReceiverNotFound - * should be returned if multiplexer could not determine correct receiver - * or multiplexer just wants to delete the frame. For multiplexer's purposes - * channel ids higher than 63 are also possible - * @param aRcvChannelPtr Receiver channel pointer. If routing to control channel - * NULL should be returned an 0 to aRcvChannelId - * @return void - */ - virtual void GetRcvChannelId( const TDesC8& aFrame, - TUint16& aRcvChannelId, - TAny*& aRcvChannelPtr ) = 0; - - /** - * Set flow control to specified state - * @since 2.8 - * @param aFlowStatus EIscFlowControlOn / EIscFlowControlOff - * @param aChannelId Channel who requested to DL flow control change - * @param aChannelPtr DIscChannel pointer for corresponding channel - * @return void - */ - virtual void DLFlowControl( const TInt aFlowStatus, - const TUint16 aChannelId, - const TAny* aChannelPtr ) = 0; - - /** - * Handle frames going to control channel ( channel zero ) - * @since 2.8 - * @param aFrame Control frame to be handled - * @return void - */ - virtual void HandleControlFrame( const TDesC8& aFrame ) = 0; - - /** - * Notify multiplexer that some asynchronous operation has been - * cancelled - * @since 2.8 - * @param aChannelId Channel id which has cancelled the operation - * @param aOperation The operation that has been cancelled - * @param aChannelPtr Channel pointer which has cancelled the operation - * @return void - */ - virtual void CancelNotify( const TUint16 aChannelId, - const TUint16 aOperation, - const TAny* aChannelPtr ) = 0; - - /** - * API extension function - * @since 2.8 - * @param aChannelId Channel id that is executing the operation - * @param aOperation Which custom operation to execute - * @param aParameters Additional parameters, NULL if omitted - * @param aChannelPtr Pointer to DIscChannel - * @return TInt KErrNone if successful. KErrNotSupported if the - * operation that was requested is not supported by the multiplexer - */ - IMPORT_C virtual TInt CustomFunction( const TUint16 aChannelId, - const TUint16 aOperation, - TAny* aParameters, - const TAny* aChannelPtr ); - - /** - * Get information on specified channel - * @since 2.8 - * @param aChannelNumber The channel, which information is required - * @param aInfo Buffer in client address space where to write the data - * @return TInt KErrNone if successful. KErrNotSupported if not supported - * by the multiplexer - */ - IMPORT_C virtual TInt GetChannelInfo( const TUint16 aChannelNumber, - TDes8& aInfo ); - - /** - * Get maximun data size ( for sending and receiving ) - * @since 2.8 - * @param aChannelId Channel which needed maximum data size is queried - * @return TInt Maximun data size in bytes - */ - virtual TInt MaximumDataSize( const TUint16 aChannelId ) = 0; - - /** - * Inform multiplexer on connection status changes - * @since 2.8 - * @param aConnectionStatus EIscConnectionOk / EIscConnectionNotOk - * @return void - */ - virtual void NotifyConnectionStatus( const TInt aConnectionStatus ) = 0; - - /** - * Connect ISC Driver to ISC Multiplexer - * @since 2.8 - * @param aDevice Pointer to DIscDevice class of ISC Driver - * @return void - */ - IMPORT_C virtual void Connect( DIscDevice* aDevice ); - - /** - * Get buffer configurations from ISC Multiplexer - * @since 2.8 - * @param aConfig Configuration data structure that the multiplexer must fill - * @return void - */ - virtual void GetConfiguration( TIscConfiguration& aConfig ) = 0; - - - protected: // New functions - - /** - * Complete specified asynchronous request - * @since 2.8 - * @param aReqNumber Request to complete ( possible values in - * IscDefinitions.h ) - * @param aStatus Error code, KErrNone if the operation in question - * was successful - * @param aChannelPtr The channel, which request to complete - * @return void - */ - IMPORT_C void CompleteRequest( TUint16 aReqNumber, - TInt aStatus, - const TAny* aChannelPtr ); - - /** - * Check if specified request is pending in ISC Driver - * @since 2.8 - * @param aReqNumber Request to check if pending - * @param aChannelId The channel, which to check for the request - * @return TInt KRequestPending if the request is pending. KErrNone if - * request is not pending - */ - IMPORT_C TInt IsPending( const TUint16 aReqNumber, - const TAny* aChannelId ); - - /** - * Queue frame for sending - * @since 2.8 - * @param aChannelId On which channels queue to add the frame. Value - * must be between 0 and 63. 0( zero ) refers to the control channel. - * @param aFrame Frame to send - * @param aMultiplexerDfc Dfc to run when frame transmission to modem has been done - * @param aMultiplexerErrorCode error if data transmsission was succesful or not - * @return TInt KErrNone if successful. KErrNotFound if the channel - * in question was not open - */ - IMPORT_C TInt QueueFrame( const TUint16 aChannelId, - const TDesC8* aFrame, - const TAny* aChannelPtr, - TAny* aFrameInfo = NULL ); - - /** - * Start sending the frames - * @since 2.8 - * @return void - */ - IMPORT_C void FlushQueues(); - - /** - * Notify flow control changes to ISC Driver - * @since 2.8 - * @param aULFlowStatus Uplink flow control status, - * EIscFlowControlOff/EIscFlowControlOn - * @param aChannelId Channel to be affected by the flow control - * @param aChannel Channel to be affected by the flow control, NULL if wanted to have - * effect on all channels within this id. By default it affects all channels - * @return void - */ - IMPORT_C void ULFlowControl( const TInt aULFlowStatus, - const TUint16 aChannelId, - TAny* aChannelPtr = NULL ); - - /** - * Reserve memory block - * @since 2.8 - * @param aPtr Pointer to reserved memory block, NULL if not successful - * @param aSize Required minimun size of the block - * @return void - */ - IMPORT_C void ReserveMemoryBlock( TDes8*& aPtr, - const TUint16 aSize ); - - /** - * Release memory block allocated with ReserveMemoryBlock - * @since 2.8 - * @param aPtr Pointer to memory block to be released - * @return void - */ - IMPORT_C void ReleaseMemoryBlock( TDes8* aPtr ); - - - /** - * 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 = 0 ); - - /** - * 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 = 0 ); - - - /** - * Description_here - * @since 2.8 - * @param aChannelId Channel whose queued send frames should be deleted - * @param aChannelPtr Corresponding DIscChannel pointer - * @return TInt KErrNone if succesful - */ - IMPORT_C TInt CancelSending( const TUint16 aChannelId, const TAny* aChannelPtr ); - - - /** - * Returns a user side thread of a given channel. Returns NULL if channelptr - * is not valid or if the channel is not found. - * @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 ); - - - protected: // Data - - // pointer to DIscDevice class from ISC Driver - DIscDevice* iDevice; // No ownership - - }; - -#endif // ISCMULTIPLEXERBASE_H - -// End of File