diff -r 0aa8cc770c8a -r 4a793f564d72 mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dpsusbnotifier.cpp --- a/mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dpsusbnotifier.cpp Tue Aug 31 16:03:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,329 +0,0 @@ -/* -* Copyright (c) 2006, 2007 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: This class implements functions of set mtp personality, the -* notification of the MTP printer connection and the -* notification of the MTP printer disconnection. -* -*/ - - -#include -#include -#include -#include "dpsusbnotifier.h" -#include "dpsconst.h" -#include "dpsptpnotifier.h" -#include "dpsconnectnotifier.h" - -#ifdef _DEBUG -# define IF_DEBUG(t) {RDebug::t;} -#else -# define IF_DEBUG(t) -#endif - -const TInt KUnknownPersonality = 0; - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CDpsUsbNotifier* CDpsUsbNotifier::NewL(CDpsEngine* aEngine) - { - IF_DEBUG(Print(_L("CDpsUsbNotifier::NewL"))); - CDpsUsbNotifier* self = new(ELeave) CDpsUsbNotifier(aEngine); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CDpsUsbNotifier::CDpsUsbNotifier(CDpsEngine* aEngine) : - CActive(EPriorityNormal), iEngine(aEngine), - iPersonality(KUnknownPersonality), - iConnectState(EUsbDeviceStateUndefined), iConfigured(EFalse), - iConnection(CDpsEngine::ENotConnected), iRollback(EFalse) - { - IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::Ctor"))); - CActiveScheduler::Add(this); - IF_DEBUG(Print(_L("<<>>~CDpsUsbNotifier"))); - Cancel(); - Rollback(); - delete iPtpP; iPtpP = NULL; - delete iConnectP; iConnectP = NULL; - iUsbM.Close(); - iUsbW.Close(); - IF_DEBUG(Print(_L("<<<~CDpsUsbNotifier"))); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CDpsUsbNotifier::ConstructL() - { - IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::ConstructL"))); - User::LeaveIfError(iUsbM.Connect()); - User::LeaveIfError(iUsbW.Connect()); - iPtpP = CDpsPtpNotifier::NewL(this); - iConnectP = CDpsConnectNotifier::NewL(this); - IF_DEBUG(Print(_L("<<ChangePtpPersonality(); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CDpsUsbNotifier::CancelPrinterNotify() - { - IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::CancelPrinterNotify"))); - if (CDpsEngine::ENotConnected == iConnection) - { - iPtpP->Cancel(); - iConfigured = EFalse; - } - else if (CDpsEngine::EPrinterConnected == iConnection) - { - iConnectP->Cancel(); - } - // if the request is replied through RunL before the cancel - // iPrinterConnectRequest will be NULL and we don't need to cancel anything - if (iEngine->PrinterConnectRequest()) - { - User::RequestComplete(iEngine->PrinterConnectRequest(), KErrCancel); - } - IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::ConnectNotify"))); - iConnectP->ConnectNotify(); - IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::Rollback"))); - // only when the personality has changed, we switch back to the previous - // personality - if (iPersonality) - { - TInt personalityId = KUsbPersonalityIdMTP; - iUsbM.GetCurrentPersonalityId(personalityId); - IF_DEBUG(Print(_L("CDpsUsbNotifier::Rollback, current personality= %d"), personalityId)); - if(KUsbPersonalityIdPCSuiteMTP != personalityId) - { - if (!iConfigured || iRollback) - { - iUsbW.SetPreviousPersonality(); - } - else - { - iUsbW.SetPreviousPersonalityOnDisconnect(); - } - } - } - IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::PtpNotify %x %d"), - iConnectState, aErr)); - if (aErr == KErrNone) - { - // personality changed to MTP, but cable is not connected - if (iConnectState != EUsbDeviceStateUndefined) - { - if (!IsActive()) - { - iEngine->Ptp().IsDpsPrinter(iStatus); - SetActive(); - } - } - else - { - iConnection = CDpsEngine::ENotConnected; - User::RequestComplete(iEngine->PrinterConnectRequest(), iConnection); - } - } - else - { - iConnection = CDpsEngine::EWrongPrintModeConnected; - User::RequestComplete(iEngine->PrinterConnectRequest(), iConnection); - } - - IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::PersonalityChanged %x"), - iPersonality)); - if (iPersonality != KUsbPersonalityIdMTP) - { - iConnection = CDpsEngine::EWrongPrintModeConnected; - iConfigured = EFalse; - if (iEngine->PrinterConnectRequest()) - { - User::RequestComplete(iEngine->PrinterConnectRequest(), - iConnection); - } - } - // when UI gets this notification, it must quit. As the result, the dps - // engine will be deleted so we do not need to care the further change. - - IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::PersonalityChanged "))); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CDpsUsbNotifier::RunL() - { - IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::RunL"))); - - if (EPrinterAvailable == iStatus.Int()) - { - iConnection = CDpsEngine::EPrinterConnected; - iConfigured = ETrue; - iEngine->SetDpsFolder(iEngine->Ptp().PtpFolder()); - } - else if (iStatus.Int() != KErrCancel) - { - iConnection = CDpsEngine::EOtherConnected; - } - User::RequestComplete(iEngine->PrinterConnectRequest(), iConnection); - - IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::DoCancel"))); - iEngine->Ptp().CancelIsDpsPrinter(); - IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::DoCancel"))); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TInt CDpsUsbNotifier::RunError(TInt aErr) - { - IF_DEBUG(Print(_L("CDpsUsbNotifier::RunError is %d"), aErr)); - return aErr; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CDpsUsbNotifier::DisconnectNotify(TUsbDeviceState aState) - { - IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::DisconnectNotify %d"), aState)); - if (iConfigured) - { - iConnection = CDpsEngine::EPrinterDisconnected; - } - else - { - iConnection = CDpsEngine::ENotConnected; - } - iConfigured = EFalse; - if (EUsbDeviceStateUndefined == aState) - { - iRollback = ETrue; - } - if (iEngine->PrinterConnectRequest()) - { - User::RequestComplete(iEngine->PrinterConnectRequest(), iConnection); - } - - IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::ConnectState"))); - TInt ret = iUsbM.GetDeviceState(iConnectState); - IF_DEBUG(Print(_L("<<