diff -r 2fefb5a2b416 -r f1fd07aa74c9 usbmgmt/usbmgr/device/classdrivers/ncm/public/usbncm.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbmgmt/usbmgr/device/classdrivers/ncm/public/usbncm.h Wed Jul 07 14:16:40 2010 +0800 @@ -0,0 +1,164 @@ +/* +* 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: +* +*/ + + +/** +@file +@publishedPartner +*/ + +#ifndef USBNCM_H +#define USBNCM_H + +//INCLUDES +#include + +/** Defines the exported P&S key and data structure of the value. */ +namespace UsbNcm + { + /** The property's category UID. + * This property is to notify the NCM connection state. + */ + static const TUid KCatNcmSvrUid = {0x101F7989}; + + /** The property's sub-key.*/ + static const TUint KKeyNcmConnectionEvent = 0x2002C33F; + + + /** NCM connection state.*/ + enum TNcmConnectionState + { + ENcmStateDisconnected = 0, + ENcmStateConnected, + ENcmStateMax + }; + + /** + * Defines the NCM connection event, which contains the IapId, NCM connection state and corresponding error code. + * The NCM connection is a special one which can not only be used by RConnection, but also needed to monitor the P&S to fetch its state changing. + * Once the P&S published the ENcmStateConnected, the iIapId is also available for starting this connection. + * Otherwise, if the P&S published the ENcmStateDisconnected, the iErrCode should be checked to notify the failure reason: + * KErrNone, normally disconnected probably because of USB cable unpluged. + * KErrInUse, means the other component(currently, BtPan or RNDIS) hold the other P&S key so that the DHCP Provision can't be done by NCM. + * system-wide error code, please check Developer Library. + * It is also possible that this P&S key is deleted when fetching its value because of the NCM connection closed by its driver. + * + * @see below sample code. + */ + struct TNcmConnectionEvent + { + TUint32 iIapId; + TNcmConnectionState iState; + TInt iErrCode; + TUint8 reserved[20]; + }; + } // namespace UsbNcm + +/** + Example Usage: + @code + //header file. + #include + using namespace UsbNcm; + + CMySampleClass: public CActive + { + private: + RProperty iProperty; + RConnection iConnection; + TPckgBuf iNcmEvent; + RSocket iSocket; + } + @endcode + + @code + #include "mysampleclass.h" + + void CMySampleClass::ContructL() + { + User::LeaveIfError(iProperty.Attach(KCatNcmSvrUid, KKeyNcmConnectionEvent, EOwnerThread)); + + iProperty.Get(iNcmEvent); + if (ENcmStateConnected == iNcmEvent.iState) + { + TRequestStatus* pStatus = &iStatus; + iStatus = KRequestPending; + User::RequestComplete(pStatus, KErrNone); + } + else + { + iProperty.Subscribe(iStatus); + SetActive(); + } + } + + void CMySampleClass::RunL() + { + if (KErrNone == iStatus.Int()) + { + iProperty.Get(iNcmEvent); + + switch(iNcmEvent.iState) + { + case ENcmStateConnected: + StartConnection(); + break; + + case ENcmStateDisconnected: + if (KErrInUse == iNcmEvent.u.iErrCode) + { + //Show error UI with msg like "BtPan or Rndis is active, pls deactive it then re-try....", etc. + } + else + { + //Show error UI with other msg as you like. + //StopConnection(); + } + break; + } + } + } + + //Sample code, not all string in this panic show on. + LIT(KNotFoundNcm, "NotFoundPanic - The NCM connection was not found!"); + + TInt CMySampleClass::StartConnection() + { + //the number of connections. + TInt cnt = 0; + iConnection.EnumerateConnections(cnt); + + TInt index = 1; + for (index = 1; index <= cnt; index++) + { + TPckgBuf info; + iConnection.GetConnectionInfo(index, info); + if (info().iIapId == iNcmEvent.iIapId) + { + iConnection.Attach(info, RConnection::EAttachTypeNormal); + break; + } + } + __ASSERT_ALWAYS(index <= cnt, User::Panic(KErrNotFound, KNotFoundNcm)); + + TInt ret = iSocket.Open(...., iConnection); + //..... + return ret; + } + @endcode +*/ +#endif // USBNCM_H