diff -r 4ac512a68352 -r 21625e5de155 usbdrv/peripheral/public/usbcshared.inl --- a/usbdrv/peripheral/public/usbcshared.inl Wed Aug 25 15:55:37 2010 +0800 +++ b/usbdrv/peripheral/public/usbcshared.inl Mon Sep 06 11:27:08 2010 +0800 @@ -186,6 +186,23 @@ return EFalse; } +TBool DUsbClientController::IsInTheChargerTypeList(const TUsbcChargerTypeCallback& aCallback) + { + const TInt irq = __SPIN_LOCK_IRQSAVE(iUsbLock); + TSglQueIter iter(iChargerTypeCallbacks); + TUsbcChargerTypeCallback* p; + while ((p = iter++) != NULL) + { + if (p == &aCallback) + { + __SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq); + return ETrue; + } + } + __SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq); + return EFalse; + } + // // --- Misc classes --- // @@ -545,6 +562,91 @@ } +// --- TUsbcChargerTypeCallback + +/** Constructor. + */ +TUsbcChargerTypeCallback::TUsbcChargerTypeCallback(DBase* aOwner, TDfcFn aCallback, + TInt aPriority) + : iOwner(aOwner), + iDfc(aCallback, aOwner, aPriority), + iChargerType(UsbShai::EPortTypeNone), + iPendingNotify(EFalse) + {} + +/** Set charger type which is to be notified to client. + @param Charger type to be set +*/ +void TUsbcChargerTypeCallback::SetChargerType(TUint aType) + { + iChargerType = aType; + } + + +/** Returns a pointer to the owner of this request. + @return A pointer to the owner of this request. +*/ +DBase* TUsbcChargerTypeCallback::Owner() const + { + return iOwner; + } + + +/** Charger type which is to be notified to client. + @return Value of Charger Type +*/ +TUint TUsbcChargerTypeCallback::ChargerType() const + { + return iChargerType; + } + + +/** Set whether there is an pending charger type which is to be notified to client. + @param whether there is an pending charger type +*/ +void TUsbcChargerTypeCallback::SetPendingNotify(TBool aPendingNotify) + { + iPendingNotify = aPendingNotify; + } + +/** return whether there is an pending charger type which is to be notified to client. + @return whether there is an pending charger type +*/ +TBool TUsbcChargerTypeCallback::PendingNotify() const + { + return iPendingNotify; + } + +/** Executes the callback function set by the owner of this request. + @return KErrNone. +*/ +TInt TUsbcChargerTypeCallback::DoCallback() + { + if (NKern::CurrentContext() == NKern::EThread) + iDfc.Enque(); + else + iDfc.Add(); + return KErrNone; + } + + +/** Cancels the callback function set by the owner of this request. + */ +void TUsbcChargerTypeCallback::Cancel() + { + iDfc.Cancel(); + } + + +/** Set DFC queue. + @param aDfcQ DFC queue to be set +*/ +void TUsbcChargerTypeCallback::SetDfcQ(TDfcQue* aDfcQ) + { + iDfc.SetDfcQ(aDfcQ); + } + + /** Returns a pointer to the currently selected (active) setting of this interface. @return A pointer to the currently selected (active) setting of this interface.