usbmgmt/usbmgr/usbman/server/INC/CUsbSession.h
changeset 0 c9bc50fca66e
child 26 f3a1ae528dee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/INC/CUsbSession.h	Tue Feb 02 02:02:59 2010 +0200
@@ -0,0 +1,191 @@
+/**
+* Copyright (c) 1997-2009 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:
+* Implements a Session of a Symbian OS server for the RUsb API
+* 
+*
+*/
+
+
+
+/**
+ @file
+*/
+
+#ifndef __CUSBSESSION_H__
+#define __CUSBSESSION_H__
+
+#include <e32std.h>
+#include "MUsbDeviceNotify.h"
+#include <usb/usbshared.h>
+
+#ifdef SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+#include "musbotghostnotifyobserver.h"
+#endif // SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+
+// device event queue size is number of device states + 1
+// (+1 so we can distinguish full & empty!)
+// (any state can only appear in the queue once)
+const TInt KDeviceStatesQueueSize = KUsbDeviceStates + 1;
+const TInt KOtgHostMessageQueueSize = KDeviceStatesQueueSize * 2;
+
+//
+// Forward declarations
+//
+class CUsbServer;
+
+/**
+ * The CUsbSession class
+ *
+ * Implements a Session of a Symbian OS server for the RUsb API
+ */
+NONSHARABLE_CLASS(CUsbSession) : public CSession2
+							   , public MUsbDeviceNotify
+#ifdef SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+							   , public MUsbOtgHostNotifyObserver
+#endif // SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+	{
+public:
+	static CUsbSession* NewL(CUsbServer* aServer);
+	virtual ~CUsbSession();
+
+	// CSession2
+	virtual void ServiceL(const RMessage2& aMessage);
+	virtual void CreateL();
+
+	// MUsbDeviceNotify
+	virtual void UsbDeviceStateChange(TInt aLastError, TUsbDeviceState aOldState, TUsbDeviceState aNewState);
+	virtual void UsbServiceStateChange(TInt aLastError, TUsbServiceState aOldState, TUsbServiceState aNewState);
+
+#ifdef SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+	// MUsbOtgHostNotifyObserver
+	virtual void UsbOtgHostMessage(TInt aMessage);
+	virtual void UsbHostEvent(TDeviceEventInformation& aDevInfo);
+
+	TInt DoRequestSession();
+#endif // SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+
+protected:
+	CUsbSession(CUsbServer* aServer);
+
+	void DispatchMessageL(const RMessage2& aMessage);
+	TInt StartDeviceL(const RMessage2& aMessage, TBool& aComplete);
+	TInt StopDeviceL(const RMessage2& aMessage, TBool& aComplete);
+	TInt StartCancel(const RMessage2& aMessage, TBool& aComplete);
+	TInt StopCancel(const RMessage2& aMessage, TBool& aComplete);
+	TInt RegisterDeviceObserver(const RMessage2& aMessage, TBool& aComplete);
+	TInt RegisterServiceObserver(const RMessage2& aMessage, TBool& aComplete);
+	TInt GetCurrentServiceState(const RMessage2& aMessage);
+	TInt GetCurrentDeviceState(const RMessage2& aMessage);
+	TInt DeRegisterServiceObserver();
+	TInt DeRegisterDeviceObserver();
+	TInt TryStartDeviceL(const RMessage2& aMessage, TBool& aComplete);
+	TInt TryStopDeviceL(const RMessage2& aMessage, TBool& aComplete);
+	TInt CancelInterest(const RMessage2& aMessage);
+	TInt GetCurrentPersonalityId(const RMessage2& aMessage);
+	TInt GetSupportedClasses(const RMessage2& aMessage);
+	TInt GetPersonalityIds(const RMessage2& aMessage);
+	TInt GetDescription(const RMessage2& aMessage);
+	TInt GetDetailedDescription(const RMessage2& aMessage);         
+	TInt ClassSupported(const RMessage2& aMessage);
+	TInt GetPersonalityProperty(const RMessage2& aMessage);         
+
+	void UsbDeviceDequeueEvent();
+
+#ifdef SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+	// Common functions
+	TInt SetCtlSessionMode(const RMessage2& aMessage);
+	TInt RegisterMsgObserver(const RMessage2& aMessage, TBool& aComplete);
+	TInt DeRegisterMsgObserver();
+
+	// OTG
+	TInt BusRequest();
+	TInt BusRespondSrp();
+
+	TInt BusClearError();
+
+	TInt BusDrop();
+
+	// HOST
+	TInt EnableFunctionDriverLoading();
+	TInt DisableFunctionDriverLoading();
+	TInt GetSupportedLanguages(const RMessage2& aMessage);
+	TInt GetManufacturerStringDescriptor(const RMessage2& aMessage);
+	TInt GetProductStringDescriptor(const RMessage2& aMessage);
+	TInt GetOtgDescriptor(const RMessage2& aMessage);
+
+	TInt RegisterHostObserver(const RMessage2& aMessage, TBool& aComplete);
+	TInt DeRegisterHostObserver();
+	TInt RequestSession();
+#endif // SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+
+private:
+	void HandleServiceStateChangeWhileStarting(TInt aLastError,
+		TUsbServiceState aNewState);
+	void HandleServiceStateChangeWhileStopping(TInt aLastError,
+		TUsbServiceState aNewState);
+
+#ifdef SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+	void UsbMsgDequeue();
+
+	void UsbHostEventDequeue();
+	TInt GetSupportedLanguagesL(const RMessage2& aMessage);
+
+#endif // SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+
+private:
+	CUsbServer* iUsbServer;
+
+	RMessage2 iStartMessage;
+	RMessage2 iStopMessage;
+	RMessage2 iCancelMessage;
+	RMessage2 iServiceObserverMessage;
+	RMessage2 iDeviceObserverMessage;
+
+	TBool iStartOutstanding;
+	TBool iStopOutstanding;
+	TBool iCancelOutstanding;
+	TBool iDeviceObserverOutstanding;
+	TBool iServiceObserverOutstanding;
+	TBool iPersonalityCfged;
+
+ 	TFixedArray<TUsbDeviceState, KDeviceStatesQueueSize> iDeviceStateQueue;
+ 	TUsbDeviceState iNotifiedDevState;
+ 	TBool iObserverQueueEvents;
+ 	TInt iDevStateQueueHead;
+ 	TInt iDevStateQueueTail;
+
+#ifdef SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+ 	static CUsbSession* iCtlSession;
+ 	TBool iSessionCtlMode;
+
+	RMessage2 iMsgObserverMessage;
+	TBool iMsgObserverOutstanding;
+	TFixedArray<TInt, KOtgHostMessageQueueSize> iMsgQueue;
+ 	TBool iMsgObserverQueueEvents;
+ 	TInt iMsgQueueHead;
+ 	TInt iMsgQueueTail;
+ 	TInt iNotifiedMsg;
+
+	RMessage2 iHostEventObserverMessage;
+	TBool iHostEventObserverOutstanding;
+	TFixedArray<TDeviceEventInformation, KDeviceStatesQueueSize> iHostStateQueue;
+ 	TBool iHostEventObserverQueueEvents;
+ 	TInt iHostEventQueueHead;
+ 	TInt iHostEventQueueTail;
+ 	TDeviceEventInformation iNotifiedHostState;
+#endif // SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
+	};
+
+#endif //__CUSBSESSION_H__