usbmgmt/usbmgr/device/classdrivers/ncm/classimplementation/ncmpktdrv/pktdrv/inc/ncmcommunicationinterface.h
branchRCL_3
changeset 15 f92a4f87e424
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/device/classdrivers/ncm/classimplementation/ncmpktdrv/pktdrv/inc/ncmcommunicationinterface.h	Tue Aug 31 17:01:47 2010 +0300
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2010 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:
+* header file for NCM communication interface class 
+*
+*/
+
+/**
+@file
+@internalComponent
+*/
+
+#ifndef NCMCOMMUNICATIONINTERFACE_H
+#define NCMCOMMUNICATIONINTERFACE_H
+
+#include <e32base.h>
+
+#ifndef __OVER_DUMMYUSBSCLDD__
+#include <d32usbcsc.h>
+#else //!__OVER_DUMMYUSBSCLDD__
+#include <dummyusbsclddapi.h>
+#endif// __OVER_DUMMYUSBSCLDD__
+
+#include "ncmcomminterfacesenderandreceiver.h"
+#include "ncmpktdrvcommon.h"
+
+const TUint KSetupPacketLength = 8;
+const TUint KNtbParamStructLength = 28;
+const TUint KNtbInputSizeStructLength = 4;
+
+_LIT(KNcmCommInterface, "NcmCommunicationInterface");
+
+enum TNcmCommErrorCode
+    {
+    EInternalError,
+    EInvalidSetupPacketLength,
+    EInvalidOutSetupPacket,
+    EInvalidInSetupPacket,
+    EInvalidLengthToRead,
+    EInvalidDataPacketLength,
+    EInvalidFilterOffset
+    };
+
+/**
+* The interface to Ncm engine
+*/
+
+NONSHARABLE_CLASS(MNcmControlObserver)
+{
+public:
+    virtual TInt HandleSetNtbInputSize(TDes8& aBuf) = 0;
+    virtual TInt HandleGetNtbParam(TDes8& aBuf) = 0;
+    virtual TInt HandleGetNtbInputSize(TDes8& aBuf) = 0;
+    virtual void ControlError(TInt aError) = 0;
+};
+
+/**
+*  implement NCM control interface
+*/
+
+NONSHARABLE_CLASS(CNcmCommunicationInterface) : public CActive
+    {
+public:
+    static CNcmCommunicationInterface* NewL(MNcmControlObserver& aEngine, RDevUsbcScClient& aLdd);
+    ~CNcmCommunicationInterface();
+    TInt Start();
+    void Stop();
+    void ControlMsgError(TNcmCommErrorCode aCode);
+    TInt SendConnectionNotification(TBool aConnected);
+    TInt SendSpeedNotification(TInt aUSBitRate, TInt aDSBitRate);
+
+public:
+    inline RDevUsbcScClient& Ldd();
+    inline TBool IsStarted();
+    
+private:
+    enum TNcmCommRWState
+        {
+        EStateInitial = 0,
+        EStateReadSetup, 
+        EStateReadDataout, 
+        EStateWriteDatain
+        };
+
+    enum TUsbRequestType
+        {
+        EGetNtbParameters = 0x80,
+        EGetNtbInputSize  = 0x85,
+        ESetNtbInputSize  = 0x86
+        };
+
+private:
+    CNcmCommunicationInterface(MNcmControlObserver& aEngine, RDevUsbcScClient& aLdd);
+    void ConstructL();
+    void RunL();
+    void DoCancel();
+    void ReadSetup();
+    void DecodeSetup();
+    void ReadDataOut();
+    void WriteDataIn();
+    void ParseDataOut();
+    TInt WriteInterruptData(TInt aEndPoint, TDesC8& aDes, TInt aLength);
+    TInt GetInterfaceNumber();
+    
+
+private:
+    
+    MNcmControlObserver&                   iEngine;
+    /**
+    * USB request type
+    */        
+    TUint8                                 iRequestType;
+    /**
+    * data stage data length
+    */    
+    TUint16                                iDataStageLength;
+    /**
+    * usb setup packet
+    */    
+    TBuf8<KSetupPacketLength>              iSetupPacket;
+    /**
+    * control transfer data
+    */    
+    TBuf8<KNtbParamStructLength>           iDataBuffer;
+    TNcmCommRWState                        iRWState;
+    TBool                                  iStarted;
+    RDevUsbcScClient&                      iPort;
+    /**
+    * instance to CNcmCommInterfaceSenderAndReceiver
+    */    
+    CNcmCommInterfaceSenderAndReceiver*    iSenderAndReceiver;
+    /**
+    * communication interface number
+    */    
+    TUint8 iInterfaceNumber;
+
+    };
+
+// Inline functions
+#include "ncmcommunicationinterface.inl"
+
+#endif //NCMCOMMUNICATIONINTERFACE_H