obex/obexprotocol/obexusbtransport/src/ObexUsbTransportController.cpp
author hgs
Tue, 19 Oct 2010 11:00:12 +0800
changeset 57 f6055a57ae18
parent 0 d0791faffa3f
permissions -rw-r--r--
201041_03

// Copyright (c) 2005-2009 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
 @internalComponent 
*/

#include <c32comm.h>
#include <obexusbtransportinfo.h>
#include "ObexUsbTransportController.h"
#include "usbconn.h"
#include "logger.h"

#ifdef __FLOG_ACTIVE
_LIT8(KLogComponent, "USB");
#endif

#ifdef _DEBUG
_LIT(KPanicCat, "ObexUsbTC");
enum
	{
	KUsbTCError = 0,
	};
#endif


/**
Constructs a CObexUsbTransportController object

@param	aTransportInfo	 Reference to a TObexTransportInfo object. Will be cast to TObexUsbTransportInfo.

@return	A new CObexUsbTransportController  object
*/
CObexUsbTransportController* CObexUsbTransportController::NewL(TObexTransportInfo& aTransportInfo)
	{
	CObexUsbTransportController* self = new(ELeave) CObexUsbTransportController;
	CleanupStack::PushL(self);
	self->ConstructL(aTransportInfo);
	CleanupStack::Pop(self);
	return(self);
	}

/**
CObexUsbTransportController constructor.
*/
CObexUsbTransportController::CObexUsbTransportController()
	:CObexTransportControllerBase()
	{
	}
	
	
/**
2nd Phase Construction.

@param	aTransportInfo	Reference to a TObexTransportInfo object. Will be cast to TObexUsbTransportInfo.
*/
void CObexUsbTransportController::ConstructL(TObexTransportInfo& aTransportInfo)
	{
	//Note: The CObexUsbConnector will determine if UsbTransportInfo has type TObexUsbTransportInfo or TObexUsbV2TransportInfo.
	//CObexUsbTransportController does not need to know	
	TObexUsbTransportInfo& usbTransportInfo = static_cast<TObexUsbTransportInfo&>(aTransportInfo);
	
	iConnector  = CObexUsbConnector::NewL(*this,  usbTransportInfo); 
	iTransportInfo = new(ELeave) TObexUsbTransportInfo;
	Mem::Copy(iTransportInfo, &usbTransportInfo, sizeof(TObexUsbTransportInfo));
	}

/**
CObexUsbTransportController destructor
*/
CObexUsbTransportController::~CObexUsbTransportController()
	{
	}


/**
Gets the socket associated with the connector and asks the socket for its  remote name. 
 
@param	aAddr	Reference to a TSockAddr. Since this is the USB transport controller, there is no socket
					address to return, so the reference is zeroed.
*/
void CObexUsbTransportController::DoRemoteAddr(TSockAddr& aAddr)
	{
	Mem::FillZ(&aAddr, sizeof(TSockAddr));
	}


/**
Used indirectly by CObex::ControlledTransportDown() to determine whether the transport
can be forced down, or if the connection should just be cancelled and cleaned up.

@return	The USB transport cannot be restarted, so should not be forced down. Hence return EFalse	
*/
TBool CObexUsbTransportController::DoIsTransportRestartable() const
	{
	return EFalse;
	}


/**
Returns the receive packet data limit

@return	The receive packet data limit	
*/
TUint16 CObexUsbTransportController::GetReceivePacketDataLimit()
	{
	LOG_FUNC
	
	// Set initial "software throttle" for packets (how big OBEX says they are)
	__ASSERT_DEBUG(iTransportInfo, PANIC(KPanicCat, KUsbTCError));
	TUint16 receivePacketDataLimit = iTransportInfo->iReceiveMtu;
	return receivePacketDataLimit;
	}
	
	
/*
Creates the reader and writer and constructs the packets
Called via CObexTransportControllerBase::DoTransportUp

@param	aInfo Connection info to pass to active reader/writer classes
*/	
void CObexUsbTransportController::NewTransportL(TObexConnectionInfo& aInfo)
	{
	__ASSERT_DEBUG((aInfo.iSocketType == TObexConnectionInfo::EUsbStream), PANIC(KPanicCat, KUsbTCError));
	
	//Get the RDevUsbcClient to pass to the active reader/writer
	RDevUsbcClient* usbc = reinterpret_cast<CObexUsbConnector*>(iConnector)->TransportObject();
	
	// Get the packet size of the link
	TInt pktSize = reinterpret_cast<CObexUsbConnector*>(iConnector)->GetTransportPacketSize();
	
	//CObexUsbActiveReader(MObexTransportNotify* aOwner, RDevUsbcClient& aUsb, TObexConnectionInfo& aInfo);
	iActiveReader = CObexUsbActiveReader::NewL(*this, *usbc, aInfo);	
	//CObexUsbActiveWriter(MObexTransportNotify* aOwner, RDevUsbcClient& aUsb, TObexConnectionInfo& aInfo);
	iActiveWriter = CObexUsbActiveWriter::NewL(*this, *usbc, aInfo, pktSize);
	
	iConnectionInfo = aInfo;
	}

	
/**
Implements MObexTransportNotify
Process the received packet.

@param	aPacket	A reference to a CObexPacket
*/
void CObexUsbTransportController::DoProcess(CObexPacket &aPacket)
	{
	CObexTransportControllerBase::DoProcess(aPacket);
	}

	
/*
Implements MObexTransportNotify
Calls base implementation
Future proofing against BC breaks

@param	aError	The error value
*/
void CObexUsbTransportController::DoError(TInt aError) 
	{
	CObexTransportControllerBase::DoError(aError);
	}

	
/*
Implements MObexTransportNotify
Calls base implementation
Future proofing against BC breaks

@param	aInfo Connection info to pass to active reader/writer classes
*/
void CObexUsbTransportController::DoTransportUp(TObexConnectionInfo& aInfo) 
	{
	CObexTransportControllerBase::DoTransportUp(aInfo);
	}