mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dpsscriptsender.cpp
author hgs
Thu, 04 Nov 2010 15:31:42 +0800
changeset 60 841f70763fbe
parent 49 c20dd21d1eb4
permissions -rw-r--r--
201044_04

/*
* 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 the dps script sending function. 
*
*/


#include <f32file.h>
#include "dpsscriptsender.h"
#include "dpsstatemachine.h"
#include "pictbridge.h"
#include "dpstransaction.h"
#include "dpsfile.h"
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
#include "dpsscriptsenderTraces.h"
#endif

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CDpsScriptSender* CDpsScriptSender::NewL(CDpsStateMachine* aOperator)
    {
    CDpsScriptSender* self = new(ELeave) CDpsScriptSender(aOperator);
    return self;	
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
CDpsScriptSender::CDpsScriptSender(CDpsStateMachine* aOperator) : 
    CActive(EPriorityNormal), iOperator(aOperator), 
    iReply(EFalse) 
    {
    OstTraceFunctionEntry0( CDPSSCRIPTSENDER_CDPSSCRIPTSENDER_CONS_ENTRY );
    CActiveScheduler::Add(this);  
    OstTraceFunctionExit0( CDPSSCRIPTSENDER_CDPSSCRIPTSENDER_CONS_EXIT );
    }  
  
// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//	
CDpsScriptSender::~CDpsScriptSender()
    {
    OstTraceFunctionEntry0( DUP1_CDPSSCRIPTSENDER_CDPSSCRIPTSENDER_DES_ENTRY );
    Cancel();
    OstTraceFunctionExit0( DUP1_CDPSSCRIPTSENDER_CDPSSCRIPTSENDER_DES_EXIT );
    }
 
// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//  
TInt CDpsScriptSender::SendScript(TBool aReply)
    {
    OstTraceFunctionEntry0( CDPSSCRIPTSENDER_SENDSCRIPT_ENTRY ); 
    if (!IsActive())
        {
        iReply = aReply;  
        TFileName file(iOperator->DpsEngine()->DpsFolder());
        RFile script;
        if (aReply)
            {
            file.Append(KDpsDeviceResponseFileName);
            }
        else
            {
            file.Append(KDpsDeviceRequestFileName);
            }
        TInt err = script.Open(iOperator->Trader()->
            FileHandle()->FileSession(), file, EFileRead);
        if (err != KErrNone)
            {
            OstTraceFunctionExit0( CDPSSCRIPTSENDER_SENDSCRIPT_EXIT );
            return err;
            }
        TInt size;    
        script.Size(size);
        script.Close();
        if (aReply)
            {
            iOperator->DpsEngine()->
                Ptp().SendObject(file, iStatus, EFalse, size);       
            }
        else
            {            
            iOperator->DpsEngine()->
                Ptp().SendObject(file, iStatus, ETrue, size);
            }
        SetActive();    
	    OstTraceFunctionExit0( DUP1_CDPSSCRIPTSENDER_SENDSCRIPT_EXIT );
	    return KErrNone;
        }
    else
        {
        OstTraceFunctionExit0( DUP2_CDPSSCRIPTSENDER_SENDSCRIPT_EXIT );
        return KErrInUse;
        }
    }
 
// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CDpsScriptSender::RunL()
    {
    OstTraceFunctionEntry0( CDPSSCRIPTSENDER_RUNL_ENTRY );
    
    if (KErrNone == iStatus.Int())
        {
        // the device request is sent
        if (!iReply)
            {
            iOperator->ScriptSentNotifyL(EFalse);      
            }    
        // the device response is sent    
        else 
            {
            iOperator->ScriptSentNotifyL(ETrue);      
            }
        }                
    else
    	{
        OstTrace1( TRACE_ERROR, CDPSSCRIPTSENDER_RUNL, "the iStatus is wrong %d!!!", iStatus.Int() );
        iOperator->Error(iStatus.Int());
    	}
    OstTraceFunctionExit0( CDPSSCRIPTSENDER_RUNL_EXIT );
    }
  
// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//  
void CDpsScriptSender::DoCancel()
    {
    OstTraceFunctionEntry0( CDPSSCRIPTSENDER_DOCANCEL_ENTRY );
    iOperator->DpsEngine()->Ptp().CancelSendObject();
    OstTraceFunctionExit0( CDPSSCRIPTSENDER_DOCANCEL_EXIT );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//	
TInt CDpsScriptSender::RunError(TInt aError)	
    {
    OstTraceFunctionEntry0( CDPSSCRIPTSENDER_RUNERROR_ENTRY );
    OstTraceDef1( OST_TRACE_CATEGORY_PRODUCTION, TRACE_IMPORTANT, CDPSSCRIPTSENDER_RUNERROR, 
            "error code %d", aError);
    Cancel();
    iOperator->Error(aError);
    OstTraceFunctionExit0( CDPSSCRIPTSENDER_RUNERROR_EXIT );
    return KErrNone;
    }