bluetoothmgmt/btmgr/eirclient/src/eirclient.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 15 Jan 2010 08:13:17 +0200
changeset 0 29b1cd4cb562
permissions -rw-r--r--
Revision: 200951_001

// Copyright (c) 2007-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:
//

#include <bluetooth/eirclient.h>
#include <e32uid.h>
#include <e32base.h>
#include <bluetooth/eirmanshared.h>
#include "eirmanclientlogger.h"

// Don't allocate memory for dedicated message slots, just use the ones from
// the global pool.
const TInt KAsyncMessageSlots = -1;

/* REirMan Client side class
REirMan provides access to EIR Manager API
*/
REirMan::REirMan() 
	: iBytesAvailablePckg(0)
	{
	LOG_FUNC
	}

/**
Connect the Handle to the Server
Must be called before all other methods except Version()

@return KErrNone if successful, otherwise the error that occurred
*/
void REirMan::Connect(TRequestStatus& aStatus)
	{
	LOG_FUNC
	
	// Don't start the Bluetooth Protocol Stack. It's either loaded and we'll use it, or else this will fail
	TInt err = CreateSession(KEirManServerName, Version(), KAsyncMessageSlots, EIpcSession_Unsharable, NULL, &aStatus);

	LOG1(_L8("CreateSession returned %d"), err);

	if(err != KErrNone)
		{
		TRequestStatus* status = &aStatus;
		*status = KRequestPending;
		User::RequestComplete(status, err);
		}
	}

/**

*/
void REirMan::SpaceAvailableNotification(TUint& aBytesAvailable, TRequestStatus& aStatus) 
	{
	LOG_FUNC
	
	iBytesAvailablePckg.Set((TUint8*)&aBytesAvailable, sizeof(TUint), sizeof(TUint));

	SendReceive(EEirManSpaceAvailableNotification, TIpcArgs(&iBytesAvailablePckg), aStatus);
	}

/**

*/
void REirMan::CancelSpaceAvailableNotification()
	{
	LOG_FUNC
	SendReceive(EEirManCancelSpaceAvailableNotification);
	}

/**

*/
void REirMan::SetData(const TDesC8& aData, TEirDataMode aDataMode, TRequestStatus& aStatus) 
	{
	LOG_FUNC

	SendReceive(EEirManSetData, TIpcArgs(&aData, aDataMode), aStatus);
	}

/**

*/
void REirMan::RegisterTag(TEirTag aEirTag, TRequestStatus& aStatus)
	{
	LOG_FUNC

	SendReceive(EEirManRegisterTag, TIpcArgs(aEirTag), aStatus);
	}

// private
/**
Extract the version of the server providing the REirMan API

@return Version of the server
*/
TVersion REirMan::Version() const
	{
	return(TVersion(KEirManSrvMajorVersionNumber,KEirManSrvMinorVersionNumber,KEirManSrvBuildVersionNumber));
	}

TInt REirMan::RegisterTag(TEirTag aEirTag)
	{
	LOG_FUNC

	TInt ret = SendReceive(EEirManRegisterTag, TIpcArgs(aEirTag));

	return ret;
	}

void REirMan::NewData(TInt aRequiredLength, TRequestStatus& aStatus)
	{
	LOG_FUNC
	
	SendReceive(EEirManNewData, TIpcArgs(aRequiredLength), aStatus);
	}