diff -r 26673e532f65 -r 159fc2f68139 ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/src/cbtprintercontroller.cpp --- a/ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/src/cbtprintercontroller.cpp Tue May 25 12:42:41 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,574 +0,0 @@ -/* -* Copyright (c) 2004-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: Defines the CBtPrinterController class. -* -*/ - - -#include - -#include "crsbtdevice.h" -#include "cbtprintercontroller.h" -#include "cbtsoapcodec.h" -#include "clog.h" -#include "tbtmapper.h" -#include "cbtdiscover.h" -#include "printmessagecodes.h" -#include "cbtstatuschannel.h" -#include "cbtjobchannel.h" -#include "rsutils.h" -#include "btnotifierapi.h" - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::NewL -// -//-------------------------------------------------------------------------------------------- -CBtPrinterController* CBtPrinterController::NewL(MBtPCObserver& aObs) -{ - CBtPrinterController *self = NewLC(aObs); - CleanupStack::Pop(); // self - - return self; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::NewLC -// -//-------------------------------------------------------------------------------------------- -CBtPrinterController* CBtPrinterController::NewLC(MBtPCObserver& aObs) -{ - CBtPrinterController *self = new (ELeave) CBtPrinterController(aObs); - CleanupStack::PushL(self); - self->ConstructL(); - return self; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::CBtPrinterController -// -//-------------------------------------------------------------------------------------------- -CBtPrinterController::CBtPrinterController(MBtPCObserver& aObs): - iObs( aObs ), - iJobChannel(NULL), - iObjectChannel(NULL) -{ - LOG("[CBtPrinterController::CBtPrinterController]\t"); -} - - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::~CBtPrinterController -// -//-------------------------------------------------------------------------------------------- -CBtPrinterController::~CBtPrinterController() -{ - LOG("[CBtPrinterController::~CBtPrinterController]\t"); - - ClearConnections(); - - if(iBtDiscoverEngine) - { - delete iBtDiscoverEngine; - iBtDiscoverEngine = NULL; - } - - if(iObjectChannel) - { - delete iObjectChannel; - iObjectChannel = NULL; - } - - if(iJobChannel) - { - delete iJobChannel; - iJobChannel = NULL; - } - - delete iQuery; - - iImageList.Reset(); - iImageList.Close(); - -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::ConstructL -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::ConstructL() -{ - LOG("[CBtPrinterController::ConstructL]\t begin"); - iJobId = KErrNotFound; - - iBtDiscoverEngine = CRsBtDiscoverEngine::NewL(*this); - - LOG("[CBtPrinterController::ConstructL]\t channels"); - iObjectChannel = NULL; - iJobChannel = CBtJobChannel::NewL(iObs); - - iQuery = NULL; - iProtocol = 0; - - InitJobVariables(); -} - - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::ConstructL -// -//-------------------------------------------------------------------------------------------- -TInt CBtPrinterController::GetPercentSent() -{ - LOG("[CBtPrinterController::GetPercentSent]\t"); - - return iPercents; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::Stop -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::Stop() -{ - LOG("[CBtPrinterController::Stop]\t"); - - iJobChannel->Cancel(); - - ClearConnections(); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::IsConnected -// -//-------------------------------------------------------------------------------------------- -TBool CBtPrinterController::IsConnected() -{ - LOG("[CBtPrinterController::IsConnected]\t"); - TBool connected = EFalse; - - if(iJobChannel && iJobChannel->IsConnected()) - { - connected = ETrue; - LOG1("[CBtPrinterController::IsConnected]\t iJobChannel->IsConnected() %d", connected); - } - - if(iObjectChannel && iObjectChannel->IsConnected()) - { - connected = ETrue; - LOG1("[CBtPrinterController::IsConnected]\t iObjectChannel->IsConnected() %d", connected); - } - - LOG1("[CBtPrinterController::IsConnected]\t return %d",connected); - return connected; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::FinishPrinting -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::FinishPrinting() -{ - LOG("[CBtPrinterController::FinishPrintingL]\t begin"); - - // Already finishing - if(iFinish) - { - LOG("[CBtPrinterController::FinishPrintingL]\t already finishing"); - return; - } - - iFinish = ETrue; - - Stop(); - - LOG("[CBtPrinterController::FinishPrintingL]\t end"); - return; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::StartDiscoveryL -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::StartDiscoveryL( TUint aProtocol) -{ - LOG1("[CBtPrinterController::StartDiscoveryL]\t aProtocol: %d", aProtocol); - - iProtocol = aProtocol; - iQuery = CBtOnQuery::NewL( *this ); - iQuery->IsBluetoothOn(); - - LOG("CBtPrinterController::StartDiscoveryL end"); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::CancelDiscoveryL -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::CancelDiscovery() -{ - LOG("[CBtPrinterController::CancelDiscovery]\t begin"); - iBtDiscoverEngine->Stop(); - - LOG1( "[CBtPrinterController::CancelDiscovery]\t iBtDiscoverEngine->IsActive() = %d", iBtDiscoverEngine->IsActive() ); - - Stop(); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::GetCapabilitiesL -// -// Fully independent and synchronous method. Does not require any existing -// connections and all connections will be deleted after execution. -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::GetCapabilitiesL(CRsBtDevice& aDevice) -{ - LOG("[CBtPrinterController::GetCapabilitiesL]\t"); - iJobChannel->Cancel(); - iJobChannel->GetCapabilitiesL(aDevice); - LOG("[CBtPrinterController::GetCapabilitiesL]\t out"); -} - - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::CreateJobL -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::CreateJobL(CRsBtDevice& aDevice, CPrintJob& aJob) -{ - LOG("[CBtPrinterController::CreateJobL]\t begin"); - - iJobChannel->Cancel(); - - iImageList.Reset(); - aJob.Images(iImageList); - iImageCount = iImageList.Count(); - LOG1("[CBtPrinterController::CreateJobL]\t iImageList.Count(): %d", iImageList.Count()); - if(0 == iImageCount) - User::Leave(KErrInvalidData); - - iJobId = KErrNotFound; - - iJobChannel->StartL(aDevice); - - iJobChannel->CreateJobL(aJob); - LOG("[CBtPrinterController::CreateJobL]\t CreateJobL done"); - - LOG1("[CBtPrinterController::CreateJobL]\t aDevice.UsedProtocol() %d", aDevice.UsedProtocol()); - if(KImagePrint_PrinterProtocol_BPP == aDevice.UsedProtocol()) - { - LOG("[CBtPrinterController::CreateJobL]\t before establishing"); - EstablishObjectChannelL( aDevice ); - } - else - { - iJobId = 1; - } - - LOG("[CBtPrinterController::CreateJobL]\t out"); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::GetPrinterStateL -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::GetPrinterStateL(CRsBtDevice& aDevice) -{ - LOG("[CBtPrinterController::GetPrinterStateL]\t begin"); - iJobChannel->Cancel(); - - if(!iJobChannel->IsConnected()) - { - iJobChannel->StartL(aDevice); - } - - iJobChannel->GetPrinterStateL(); - - LOG("[CBtPrinterController::GetPrinterStateL]\t OUT"); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::GetJobAttributesL -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::GetJobAttributesL(CRsBtDevice& aDevice, TInt aJobId) -{ - LOG("[CBtPrinterController::GetJobAttributesL]\t begin"); - - if(!iJobChannel || !iJobChannel->IsConnected()) - { - LOG("[CBtPrinterController::GetJobAttributesL]\t User::Leave(KErrInvalidSequence);"); - User::Leave(KErrInvalidSequence); - } - - LOG("[CBtPrinterController::GetJobAttributesL]\t iJobId = aJobId;"); - iJobId = aJobId; - - LOG("[CBtPrinterController::GetJobAttributesL]\t iJobChannel->GetJobAttributesL(aJobId);"); - iJobChannel->GetJobAttributesL(aJobId); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::CancelJobL -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::CancelJobL(CRsBtDevice& aDevice, TInt aJobId) -{ - LOG("[CBtPrinterController::CancelJob(TInt)]\t begin"); - - if(!iJobChannel || !iJobChannel->IsConnected()) - User::Leave(KErrInvalidSequence); - - iJobChannel->Cancel(); - - iJobId = aJobId; - - iJobChannel->CancelJobL(iJobId); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::GetEventL -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::GetEventL(TInt aJobId) -{ - LOG("[CBtPrinterController::GetEvent]\t begin"); - iJobId = aJobId; - - if(!iJobChannel || !iJobChannel->IsConnected()) - User::Leave(KErrInvalidSequence); - - iJobChannel->GetEventL(aJobId); -} - -//---------------------------------- - -/////////////////////////////// -// Private -/////////////////////////////// -// From MRsBtDiscoverEngineObserver. -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::HandleDiscoveryEvent -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::HandleDiscoveryEvent(TInt aEvent, TInt aErrorCode) -{ - LOG2("[CBtPrinterController::HandleDiscoveryEvent]\t aEvent: %d, aErrorCode: %d", aEvent, aErrorCode); - - switch ( aEvent ) - { - case MBtDiscoveryObserver::EFoundBtPrinter: - LOG("[CBtPrinterController::HandleBtDiscoverEngineEventL]\t EFoundBtPrinter"); - iObs.DeviceDiscovered(iBtDiscoverEngine->GetDevice()); - break; - case MBtDiscoveryObserver::ERemoveBtPrinter: - LOG("[CBtPrinterController::HandleBtDiscoverEngineEventL]\t ERemoveBtPrinter"); - iObs.DeviceDisappeared(iBtDiscoverEngine->GetDevice()); - break; - case MBtDiscoveryObserver::EDoneFindingPrinters: - LOG("[CBtPrinterController::HandleBtDiscoverEngineEventL]\t EDoneFindingPrinters"); - iObs.DiscoveryError(KErrNone); - break; - case MBtDiscoveryObserver::EErrorDuringDiscover: - LOG("[CBtPrinterController::HandleBtDiscoverEngineEventL]\t EErrorDuringDiscover"); - iObs.DiscoveryError(aErrorCode); - break; - default: - break; - } -} - -// From MBtObjectServerObserver -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::HandleObjectServerEvent -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::HandleObjectServerEvent(TInt aStatus, TInt aInfo) -{ - LOG2("[CBtPrinterController::OperationStatus]\t aStatus: %d, aInfo: %d", aStatus, aInfo); - - switch( aStatus ) - { - case KObjectServerStopped: - LOG("[CBtPrinterController::OperationStatus]\t iObjectChannel stopped"); - iServerError = KErrNone; - break; - case KObjectServerStarted: - LOG("[CBtPrinterController::OperationStatus]\t KObjectServerStarted"); - iServerError = KErrNone; - iPercents = 0; - iSentImages = 0; - break; - case KObjectServerAllFilesSent: // not used! - iServerError = KErrNone; - break; - case KObjectServerPackageSent: - iServerError = KErrNone; - iPercents = 100 * ((iSentImages * 100) + aInfo) / (iImageCount * 100); - LOG2("[CBtPrinterController::OperationStatus]\t iPercents %d, aInfo %d", iPercents, aInfo); - iObs.GetEventResponse(iJobId, EBtStateSending, EBtStatePrinting, ENoMessage, KErrNone); - break; - case KObjectServerFileSent: - LOG("[CBtPrinterController::OperationStatus]\t KObjectServerOneFileSent"); - iServerError = KErrNone; - - iPercents = 100 * ((iSentImages * 100) + aInfo) / (iImageCount * 100); - - ++iSentImages; - LOG2("[CBtPrinterController::OperationStatus]\t sent images: %d/%d", iSentImages, iImageCount); - if(iSentImages == iImageCount) - { - iObs.GetEventResponse(iJobId, EBtStatePrinting, EBtStatePrinting, ENoMessage, KErrNone); - } - else - { - iObs.GetEventResponse(iJobId, EBtStateSending, EBtStatePrinting, ENoMessage, KErrNone); - } - break; - case KErrNone: - break; - case KObjectServerBTDeviceMismatch: - LOG("[CBtPrinterController::OperationStatus]\t KObjectServerBTDeviceMismatch"); - break; - case KObjectServerTransportUp: - LOG("[CBtPrinterController::OperationStatus]\t KObjectServerTransportUp"); - iObs.GetEventResponse(iJobId, EBtStateSending, EBtStatePrinting, ENoMessage, KErrNone); - case KObjectServerConnected: - iServerError = KErrNone; - break; - case KObjectServerError: - LOG1("[CBtPrinterController::OperationStatus]\t KObjectServerError: %d", aInfo); - iServerError = aInfo; - //break here: other messages takes care of correct actions - break; - case KObjectServerDisconnected: - LOG1("[CBtPrinterController::OperationStatus]\t disconnected, iServerError %d", iServerError); - case KObjectServerTransportDown: - LOG1("[CBtPrinterController::OperationStatus]\t transport down. iServerError %d", iServerError); - if(KErrNone != iServerError) - iObs.GetEventResponse(iJobId, EBtStateSending, EBtStatePrinting, iServerError, KErrDisconnected); - iServerError = KErrNone; - break; - default: - LOG("[CBtPrinterController::OperationStatus]\t default..."); - break; - } -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::InitSyncVariables -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::InitJobVariables() -{ - iPercents = 0; - iImageCount = 0; - iServerError = KErrNone; - iFinish = EFalse; -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::ClearConnections -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::ClearConnections() -{ - LOG("[CBtPrinterController::ClearConnections]\t "); - - if(iBtDiscoverEngine) - iBtDiscoverEngine->Cancel(); - - if(iObjectChannel) - { - iObjectChannel->Stop(); - LOG("[CBtPrinterController::ClearConnections]\t **** iObjectChannel stop"); - } - - if(iJobChannel) - { - LOG("[CBtPrinterController::ClearConnections]\t **** iJobChannel stop"); - iJobChannel->Disconnect(); - } - - InitJobVariables(); -} - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::EstablishObjectChannelL -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::EstablishObjectChannelL( CRsBtDevice& aDevice ) -{ - if( 0 == iImageList.Count()) - User::Leave(KErrInvalidSequence); - - LOG("[CBtPrinterController::EstablishObjectChannelL]\t create iObjectChannel"); - if(iObjectChannel) - { - delete iObjectChannel; - iObjectChannel = NULL; - } - iObjectChannel = CBtObjectServer::NewL( aDevice.BDAddr(), iImageList, *this ); - iObjectChannel->StartL(); - - iImageList.Reset(); - -} - - -//-------------------------------------------------------------------------------------------- -// -// CBtPrinterController::BTOnCompleteL -// -//-------------------------------------------------------------------------------------------- -void CBtPrinterController::BTOnCompleteL( TBool aResult ) - { - LOG("[CBtPrinterController::BTOnComplete] begin \t "); - - if( !aResult ) - { - LOG("[CBtPrinterController::BTOnComplete]\t cancelling discovery, bt is not activated \t "); - CancelDiscovery(); - iObs.DiscoveryError( ENoConnection ); - } - - - iBtDiscoverEngine->Start( iProtocol ); - - LOG("[CBtPrinterController::BTOnComplete] end \t "); - } - -// End of File