diff -r d3e8e7d462dd -r f92a4f87e424 usbmgmt/usbmgr/device/classdrivers/ncm/classimplementation/ncmpktdrv/pktdrv/inc/ncmcommunicationinterface.h --- /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 + +#ifndef __OVER_DUMMYUSBSCLDD__ +#include +#else //!__OVER_DUMMYUSBSCLDD__ +#include +#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 iSetupPacket; + /** + * control transfer data + */ + TBuf8 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