--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/dun/plugins/inc/usb/DunUsbPlugin.h Fri Jun 11 14:27:06 2010 +0300
@@ -0,0 +1,362 @@
+/*
+* Copyright (c) 2006-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: DUN USB plugin
+*
+*/
+
+
+#ifndef C_CDUNUSBPLUGIN_H
+#define C_CDUNUSBPLUGIN_H
+
+#include <e32base.h>
+#include <usbman.h>
+#include "DunTransporter.h"
+#include "DunUsbListen.h"
+#include "DunUsbConfig.h"
+#include "DunPlugin.h"
+
+/**
+ * DUN USB plugin's port entity
+ * This class is used to keep track of N number of USB ports and port
+ * numbers associated to them (for CDunUsbConfig's purposes).
+ *
+ * @lib dunusb.lib
+ * @since S60 v3.2
+ */
+NONSHARABLE_CLASS( TUsbPortEntity )
+ {
+
+public:
+
+ /**
+ * Port number for USB local media side
+ */
+ TInt iPortNum;
+
+ /**
+ * Port for USB local media side
+ */
+ RComm iUsbPort;
+
+ };
+
+/**
+ * DUN USB plugin's main class
+ * This class creates new transporter channel(s) when configured USB is
+ * detected by CDunUsbListen class and acts on transporter's state changes.
+ * Also acts on DUN server's requests.
+ *
+ * @lib dunusb.lib
+ * @since S60 v3.2
+ */
+NONSHARABLE_CLASS( CDunUsbPlugin ) : public CBase,
+ public MDunLocalMediaPlugin,
+ public MDunListenCallback,
+ public MDunBufferCorrection,
+ public MDunConnMon,
+ public MDunUsbConfig
+ {
+
+public:
+
+ CDunUsbPlugin();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CDunUsbPlugin();
+
+private:
+
+ /**
+ * State of this plugin
+ *
+ * @since S60 3.2
+ * @return State of plugin
+ */
+ TDunPluginState PluginState();
+
+ /**
+ * Constructs a listener object for this plugin
+ *
+ * @since S60 3.2
+ * @return None
+ */
+ void ConstructListenerL();
+
+ /**
+ * Initializes USB by loading LDD
+ *
+ * @since S60 3.2
+ * @return None
+ */
+ void InitUsbL();
+
+ /**
+ * Initializes all usable USB ports for DUN
+ *
+ * @since S60 3.2
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt InitPorts();
+
+ /**
+ * Creates empty usable USB ports that can be used by DUN
+ *
+ * @since S60 3.2
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt CreateAllPorts();
+
+ /**
+ * Initializes one USB port for DUN
+ *
+ * @since S60 3.2
+ * @param aEntity Pointer to port entity
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt InitOnePort( TUsbPortEntity* aEntity );
+
+ /**
+ * Sets channel for one USB port
+ *
+ * @since S60 3.2
+ * @param aEntity Pointer to port entity
+ * @return None
+ */
+ void SetChannelL( TUsbPortEntity* aEntity );
+
+ /**
+ * Adds skipped error code to Transporter
+ * The skipped error is added to local media's read and write operations
+ *
+ * @since S60 3.2
+ * @param aError Skipped error code to add
+ * @param aComm RComm object for which to add the error code
+ * @return None
+ */
+ void AddSkippedErrorL( TInt aError, RComm* aComm );
+
+ /**
+ * Sets new state
+ * New state must be one more than the old state
+ *
+ * @since S60 3.2
+ * @param aPluginState New state to set for a plugin
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt ReportStateChangeUp( TDunPluginState aPluginState );
+
+ /**
+ * Sets new state
+ * New state must be one less than the old state
+ *
+ * @since S60 3.2
+ * @param aPluginState New state to set for a plugin
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt ReportStateChangeDown( TDunPluginState aPluginState );
+
+ /**
+ * Frees existing channels
+ *
+ * @since S60 3.2
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt FreeChannels();
+
+ /**
+ * Uninitializes this plugin
+ *
+ * @since S60 3.2
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt Uninitialize();
+
+ /**
+ * Gets port's index and entity by connection ID
+ *
+ * @since S60 3.2
+ * @param aConnId Connection ID of the connection to find
+ * @param aEntity Returned port entity
+ * @return KErrNotFound if entity not found, found index otherwise
+ */
+ TInt GetEntityByConnId( TConnId aConnId, TUsbPortEntity*& aEntity );
+
+ /**
+ * Gets port's entity by port number
+ *
+ * @since S60 3.2
+ * @param aPortNum Port number of the connection to find
+ * @param aEntity Returned port entity
+ * @return KErrNotFound if entity not found, found index otherwise
+ */
+ TInt GetEntityByPortNumber( TInt aPortNum, TUsbPortEntity*& aEntity );
+
+ /**
+ * Gets first free port's index and entity
+ *
+ * @since S60 3.2
+ * @param aEntity Returned port entity
+ * @return KErrNotFound if entity not found, found index otherwise
+ */
+ TInt GetFirstFreeEntity( TUsbPortEntity*& aEntity );
+
+// from base class MDunLocalMediaPlugin
+
+ void ConstructL( MDunServerCallback* aServer,
+ CDunTransporter* aTransporter );
+
+ /**
+ * From MDunLocalMediaPlugin.
+ * Gets called when server changes a plugin's state
+ *
+ * @since S60 3.2
+ * @param aPluginState New changed state
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt NotifyServerStateChange( TDunPluginState aPluginState );
+
+ /**
+ * From MDunLocalMediaPlugin.
+ * Gets called when server needs to know the active connection
+ * (For testing purposes only)
+ *
+ * @since S60 5.0
+ * @return Active connection, NULL otherwise
+ */
+ TConnId ActiveConnection();
+
+// from base class MDunListenCallback
+
+ /**
+ * From MDunListenCallback.
+ * Gets called when new channel must be created
+ *
+ * @since S60 3.2
+ * @param aNoFreeChans ETrue if no free channels, EFalse otherwise
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt NotifyChannelAllocate( TBool& aNoFreeChans );
+
+ /**
+ * From MDunListenCallback.
+ * Gets called when an existing channel must be freed
+ *
+ * @since S60 3.2
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt NotifyChannelFree();
+
+// from base class MDunConnMon
+
+ /**
+ * From MDunConnMon.
+ * Gets called when line status changes or when any type of error is
+ * detected
+ *
+ * @since S60 3.2
+ * @param aConnId Connection ID for callback
+ * @param aConnReason Reason for progress change
+ * @return None
+ */
+ void NotifyProgressChangeL( TConnId aConnId,
+ TDunConnectionReason aConnReason );
+
+// from base class MDunBufferCorrection
+
+ /**
+ * Gets called when request to change local media's buffer size
+ *
+ * @since S60 3.2
+ * @param aLength Suggested buffer length that will be used if no
+ * correction done
+ * @return New (corrected) buffer length
+ */
+ TInt NotifyBufferCorrection( TInt aLength );
+
+// from base class MDunUsbConfig
+
+ /**
+ * Gets called when one or more ACM configurations are added
+ *
+ * @since S60 3.2
+ * @param aIndex Index (also port number) of added ACM configuration
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt NotifyConfigAddition( TInt aIndex );
+
+ /**
+ * Gets called when one or more ACM configurations are removed
+ *
+ * @since S60 3.2
+ * @param aIndex Index (also port number) of removed ACM configuration
+ * @return Symbian error code on error, KErrNone otherwise
+ */
+ TInt NotifyConfigRemoval( TInt aIndex );
+
+private: // data
+
+ /**
+ * Callback to call when notification via MDunServerCallback to be made
+ * Not own.
+ */
+ MDunServerCallback* iServer;
+
+ /**
+ * Listener for detecting attached USB cable and configured ACM
+ * Notifies this class to create new channel
+ * Own.
+ */
+ CDunUsbListen* iUsbListen;
+
+ /**
+ * Listener and accessor for detecting USB ACM configuration change
+ * Own.
+ */
+ CDunUsbConfig* iUsbConfig;
+
+ /**
+ * Communications server used to load ECACM and open USB port(s)
+ * Also used to get port information to calculate number of supported ACMs
+ */
+ RCommServ iCommServer;
+
+ /**
+ * USB server (USB manager) needed for device state notifications
+ * Device states needed to create transporter channel
+ */
+ RUsb iUsbServer;
+
+ /**
+ * Array of port(s) for USB local media side
+ */
+ RArray<TUsbPortEntity> iUsbPorts;
+
+ /**
+ * Transporter to use for network side communication
+ * Not own.
+ */
+ CDunTransporter* iTransporter;
+
+ /**
+ * Flag to be set on if CDunUsbPlugin is waiting for shutdown.
+ * This flag is used to skip subsequent higher-level error codes after
+ * driver based error occurred.
+ */
+ TBool iShutdown;
+
+ };
+
+#endif // C_CDUNUSBPLUGIN_H