--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothapitest/bluetoothsvs/T_BTUserAPI/src/T_BluetoothPhysicalLinksData.cpp Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,638 @@
+/*
+* 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:
+*
+*/
+
+#include "T_BluetoothPhysicalLinksData.h"
+#include "T_BTDevAddrData.h"
+
+/*@{*/
+//Parameters
+_LIT(KRSocketServ, "socketserv");
+_LIT(KTBTDevAddr, "tbtdevaddr");
+_LIT(KIntDevAddr, "integerdevaddr");
+_LIT(KData, "data");
+_LIT(KMaxNumber, "maxnumber");
+_LIT(KExpectedSize, "expectedsize");
+_LIT(KExpectedDevAddr, "expecteddevaddr");
+_LIT(KExpectedIntDevAddr, "expectedintdevaddr");
+_LIT(KUid, "uid");
+_LIT(KExpectNull, "expectnull");
+_LIT(KErrForCreateConnection, "errforcreateconnection");
+_LIT(KErrForDisconnect, "errfordisconnect");
+_LIT(KErrForDisconnectAll, "errfordisconnectall");
+_LIT(KDelayAfterCreateConnection, "delayaftercreateconnection");
+
+//Commands
+_LIT(KCmdNewL, "NewL");
+_LIT(KCmdNewLC, "NewLC");
+_LIT(KCmdCreateConnection, "CreateConnection");
+_LIT(KCmdCancelCreateConnection, "CancelCreateConnection");
+_LIT(KCmdDisconnect, "Disconnect");
+_LIT(KCmdDisconnectAll, "DisconnectAll");
+_LIT(KCmdBroadcast, "Broadcast");
+_LIT(KCmdReadRaw, "ReadRaw");
+_LIT(KCmdEnumerate, "Enumerate");
+_LIT(KCmdDestructor, "~");
+_LIT(KCmdMBPLN_ExtensionInterfaceL, "MBPLN_ExtensionInterfaceL");
+
+// Logging
+_LIT(KLogMissingParameters, "Missing parameters '%S' or '%S'");
+_LIT(KLogMissingParameter, "Missing parameter '%S'");
+
+//constants
+const TInt KDataSize = 128;
+/*@}*/
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CT_BluetoothPhysicalLinksData* CT_BluetoothPhysicalLinksData::NewL()
+ {
+ CT_BluetoothPhysicalLinksData* ret=new (ELeave) CT_BluetoothPhysicalLinksData();
+ CleanupStack::PushL(ret);
+ ret->ConstructL();
+ CleanupStack::Pop(ret);
+ return ret;
+ }
+
+/**
+ * First phase construction
+ */
+CT_BluetoothPhysicalLinksData::CT_BluetoothPhysicalLinksData()
+: iData(NULL)
+, iErrForCreateConnection(0)
+, iErrForDisconnect(0)
+, iErrForDisconnectAll(0)
+, iDelayAfterCreateConnection(0)
+, iCreateIndex(0)
+, iDisconnectIndex(0)
+, iDisconnectAllIndex(0)
+ {
+ }
+
+/**
+ * Second phase construction
+ */
+void CT_BluetoothPhysicalLinksData::ConstructL()
+ {
+ }
+
+CT_BluetoothPhysicalLinksData::~CT_BluetoothPhysicalLinksData()
+ {
+ DestroyData();
+ }
+
+// Service methods
+TAny* CT_BluetoothPhysicalLinksData::GetObject()
+ {
+ return iData;
+ }
+
+void CT_BluetoothPhysicalLinksData::SetObjectL(TAny* aObject)
+ {
+ //called when loading up persistent data
+ DestroyData();
+ iData = static_cast<CBluetoothPhysicalLinks*>(aObject);
+ }
+
+void CT_BluetoothPhysicalLinksData::DisownObjectL()
+ {
+ iData = NULL;
+ }
+
+void CT_BluetoothPhysicalLinksData::DestroyData()
+ {
+ delete iData;
+ iData=NULL;
+ }
+
+inline TCleanupOperation CT_BluetoothPhysicalLinksData::CleanupOperation()
+ {
+ return CleanupOperation;
+ }
+
+void CT_BluetoothPhysicalLinksData::CleanupOperation(TAny* aAny)
+ {
+ CBluetoothPhysicalLinks* arg=static_cast<CBluetoothPhysicalLinks*>(aAny);
+ delete arg;
+ }
+
+void CT_BluetoothPhysicalLinksData::HandleCreateConnectionCompleteL(TInt aError)
+ {
+ INFO_PRINTF2(_L("MBluetoothPhysicalLinksNotifier::HandleCreateConnectionCompleteL Status (%d)"), aError);
+
+ DecOutstanding();
+ if ( aError!=iErrForCreateConnection )
+ {
+ ERR_PRINTF2(_L("HandleCreateConnectionCompleteL Call failed: aError = %d"),aError);
+ SetAsyncError(iCreateIndex, aError);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("HandleCreateConnectionCompleteL successful" ));
+ }
+ TTimeIntervalMicroSeconds32 interval = TTimeIntervalMicroSeconds32(iDelayAfterCreateConnection);
+ INFO_PRINTF2(_L("Waiting for %d micro secs"),iDelayAfterCreateConnection);
+ User::After(interval);
+ }
+
+void CT_BluetoothPhysicalLinksData::HandleDisconnectCompleteL(TInt aError)
+ {
+ INFO_PRINTF2(_L("MBluetoothPhysicalLinksNotifier::HandleDisconnectCompleteL Status (%d)"), aError);
+
+ DecOutstanding();
+ if ( aError!=iErrForDisconnect )
+ {
+ ERR_PRINTF2(_L("HandleDisconnectCompleteL Call failed: aError = %d"),aError);
+ SetAsyncError(iDisconnectIndex, aError);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("HandleDisconnectCompleteL successful" ));
+ }
+ }
+
+void CT_BluetoothPhysicalLinksData::HandleDisconnectAllCompleteL(TInt aError)
+ {
+ INFO_PRINTF2(_L("MBluetoothPhysicalLinksNotifier::HandleDisconnectAllCompleteL Status (%d)"), aError);
+
+ DecOutstanding();
+ if ( aError!=iErrForDisconnectAll )
+ {
+ ERR_PRINTF2(_L("HandleDisconnectAllCompleteL Call failed: aError = %d"),aError);
+ SetAsyncError(iDisconnectAllIndex, aError);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("HandleDisconnectAllCompleteL successful" ));
+ }
+ }
+
+TBool CT_BluetoothPhysicalLinksData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+ {
+ TBool ret = ETrue;
+
+ if ( aCommand==KCmdNewL )
+ {
+ DoCmdNewL(aSection);
+ }
+ else if ( aCommand==KCmdNewLC )
+ {
+ DoCmdNewLC(aSection);
+ }
+ else if ( aCommand==KCmdCreateConnection )
+ {
+ DoCmdCreateConnection(aSection, aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdCancelCreateConnection )
+ {
+ DoCmdCancelCreateConnection();
+ }
+ else if ( aCommand==KCmdDisconnect )
+ {
+ DoCmdDisconnect(aSection, aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdDisconnectAll )
+ {
+ DoCmdDisconnectAll(aSection, aAsyncErrorIndex);
+ }
+ else if ( aCommand==KCmdBroadcast )
+ {
+ DoCmdBroadcast(aSection);
+ }
+ else if ( aCommand==KCmdReadRaw )
+ {
+ DoCmdReadRaw(aSection);
+ }
+ else if ( aCommand==KCmdEnumerate )
+ {
+ DoCmdEnumerate(aSection);
+ }
+ else if ( aCommand==KCmdDestructor )
+ {
+ DoCmdDestructor();
+ }
+ else if ( aCommand==KCmdMBPLN_ExtensionInterfaceL )
+ {
+ DoCmdMBPLN_ExtensionInterfaceL(aSection);
+ }
+ else
+ {
+ ret=EFalse;
+ }
+
+ return ret;
+ }
+
+
+/**
+Test NewL()
+*/
+void CT_BluetoothPhysicalLinksData::DoCmdNewL(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("CBluetoothPhysicalLinks NewL Call"));
+ DestroyData();
+
+ TPtrC socketServName;
+ if(GetStringFromConfig(aSection, KRSocketServ(), socketServName))
+ {
+ RSocketServ* socketServ=static_cast<RSocketServ*>(GetDataObjectL(socketServName));
+ TRAPD(err, iData = CBluetoothPhysicalLinks::NewL(*this, *socketServ));
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothPhysicalLinks Standard Constructor NewL err=%d" ),err);
+ SetError(err);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(KLogMissingParameter, &KRSocketServ());
+ SetBlockResult(EFail);
+ }
+ }
+
+
+/**
+Test NewLC()
+*/
+void CT_BluetoothPhysicalLinksData::DoCmdNewLC(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("CBluetoothPhysicalLinks NewLC Call"));
+ DestroyData();
+
+ TPtrC socketServName;
+ if( GetStringFromConfig(aSection, KRSocketServ(), socketServName))
+ {
+ RSocketServ* socketServ=static_cast<RSocketServ*>(GetDataObjectL(socketServName));
+ TRAPD(err, iData = CBluetoothPhysicalLinks::NewLC(*this, *socketServ); CleanupStack::Pop(););
+ if( err!=KErrNone )
+ {
+ INFO_PRINTF2(_L("CBluetoothPhysicalLinks Standard Constructor NewLC err=%d" ),err);
+ SetError(err);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(KLogMissingParameter, &KRSocketServ());
+ SetBlockResult(EFail);
+ }
+ }
+
+
+/**
+Test CreateConnection()
+*/
+void CT_BluetoothPhysicalLinksData::DoCmdCreateConnection(const TDesC& aSection, const TInt aAsyncErrorIndex)
+ {
+ INFO_PRINTF1(_L("CBluetoothPhysicalLinks CreateConnection Call"));
+
+ TPtrC tBTDevAddrName;
+ TBool foundParameter=EFalse;
+ TInt err = 0;
+ if( GetStringFromConfig(aSection, KTBTDevAddr(), tBTDevAddrName))
+ {
+ foundParameter=ETrue;
+ CT_BTDevAddrData* tBTDevAddrData=static_cast<CT_BTDevAddrData*>(GetDataWrapperL(tBTDevAddrName));
+ const TBTDevAddr* btDevAddr = tBTDevAddrData->GetAddress();
+ err = iData->CreateConnection(*btDevAddr);
+ }
+
+ TInt intBtDevAddr=0;
+ if( GetIntFromConfig(aSection, KIntDevAddr(), intBtDevAddr))
+ {
+ foundParameter=ETrue;
+ const TBTDevAddr btDevAddr(intBtDevAddr);
+ err = iData->CreateConnection(btDevAddr);
+ }
+
+ if( !foundParameter )
+ {
+ ERR_PRINTF3(KLogMissingParameters, &KTBTDevAddr(), &KIntDevAddr());
+ SetBlockResult(EFail);
+ }
+
+ if(err != KErrNone)
+ {
+ ERR_PRINTF2(_L("CBluetoothPhysicalLinks CreateConnection failed with error %d"), err);
+ SetError(err);
+ }
+ else
+ {
+ IncOutstanding();
+ iCreateIndex = aAsyncErrorIndex;
+ }
+
+ if( !GetIntFromConfig(aSection, KErrForCreateConnection(), iErrForCreateConnection))
+ {
+ ERR_PRINTF2(KLogMissingParameter, &KErrForCreateConnection());
+ SetBlockResult(EFail);
+ }
+
+ if( !GetIntFromConfig(aSection, KDelayAfterCreateConnection(), iDelayAfterCreateConnection))
+ {
+ ERR_PRINTF2(KLogMissingParameter, &KDelayAfterCreateConnection());
+ SetBlockResult(EFail);
+ }
+ }
+
+
+/**
+Test CancelCreateConnection()
+*/
+void CT_BluetoothPhysicalLinksData::DoCmdCancelCreateConnection()
+ {
+ INFO_PRINTF1(_L("CBluetoothPhysicalLinks CancelCreateConnection Call"));
+ iData->CancelCreateConnection();
+ DecOutstanding();
+ }
+
+
+/**
+Test Disconnect()
+*/
+void CT_BluetoothPhysicalLinksData::DoCmdDisconnect(const TDesC& aSection, const TInt aAsyncErrorIndex)
+ {
+ INFO_PRINTF1(_L("CBluetoothPhysicalLinks Disconnect Call"));
+
+ TPtrC tBTDevAddrName;
+ TBool foundParameter=EFalse;
+ TInt err = 0;
+ if( GetStringFromConfig(aSection, KTBTDevAddr(), tBTDevAddrName))
+ {
+ foundParameter=ETrue;
+ CT_BTDevAddrData *tBTDeveAddr = static_cast<CT_BTDevAddrData*>(GetDataWrapperL(tBTDevAddrName));
+ const TBTDevAddr* btDevAddr = tBTDeveAddr->GetAddress();
+ err = iData->Disconnect(*btDevAddr);
+ }
+
+ TInt intBtDevAddr=0;
+ if( GetIntFromConfig(aSection, KIntDevAddr(), intBtDevAddr))
+ {
+ foundParameter=ETrue;
+ TBTDevAddr btDevAddr(intBtDevAddr);
+ iBTDeveAddr = btDevAddr;
+ err = iData->Disconnect(iBTDeveAddr);
+ }
+
+ if( !foundParameter )
+ {
+ ERR_PRINTF3(KLogMissingParameters, &KTBTDevAddr(), &KIntDevAddr());
+ SetBlockResult(EFail);
+ }
+
+ if(err != KErrNone)
+ {
+ ERR_PRINTF2(_L("CBluetoothPhysicalLinks Disconnect failed with error %d"), err);
+ SetError(err);
+ }
+ else
+ {
+ IncOutstanding();
+ iDisconnectIndex = aAsyncErrorIndex;
+ }
+
+ if( !GetIntFromConfig(aSection, KErrForDisconnect(), iErrForDisconnect))
+ {
+ ERR_PRINTF2(KLogMissingParameter, &KErrForDisconnect());
+ SetBlockResult(EFail);
+ }
+ }
+
+
+/**
+Test DisconnectAll()
+*/
+void CT_BluetoothPhysicalLinksData::DoCmdDisconnectAll(const TDesC& aSection, const TInt aAsyncErrorIndex)
+ {
+ INFO_PRINTF1(_L("CBluetoothPhysicalLinks DisconnectAll Call"));
+
+ TInt err = iData->DisconnectAll();
+ if(err != KErrNone)
+ {
+ ERR_PRINTF2(_L("CBluetoothPhysicalLinks DisconnectAll failed with error %d"), err);
+ SetError(err);
+ }
+ else
+ {
+ IncOutstanding();
+ iDisconnectAllIndex = aAsyncErrorIndex;
+ }
+
+ if( !GetIntFromConfig(aSection, KErrForDisconnectAll(), iErrForDisconnectAll))
+ {
+ ERR_PRINTF2(KLogMissingParameter, &KErrForDisconnectAll());
+ SetBlockResult(EFail);
+ }
+ }
+
+
+/**
+Test Broadcast()
+*/
+void CT_BluetoothPhysicalLinksData::DoCmdBroadcast(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("CBluetoothPhysicalLinks Broadcast Call"));
+
+ TPtrC data;
+ if( GetStringFromConfig(aSection, KData(), data))
+ {
+ HBufC8* data8 = HBufC8::NewLC(data.Length());
+ data8->Des().Copy(data);
+ TPtrC8 dataPtr = data8->Des();
+
+ TInt err = iData->Broadcast(dataPtr);
+ if(err != KErrNone)
+ {
+ ERR_PRINTF2(_L("CBluetoothPhysicalLinks Broadcast failed with error %d"), err);
+ SetError(err);
+ }
+ CleanupStack::PopAndDestroy(data8);
+ }
+ else
+ {
+ ERR_PRINTF2(KLogMissingParameter, &KData());
+ SetBlockResult(EFail);
+ }
+ }
+
+
+/**
+Test ReadRaw()
+*/
+void CT_BluetoothPhysicalLinksData::DoCmdReadRaw(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("CBluetoothPhysicalLinks ReadRaw Call"));
+
+ TPtrC data;
+ if( GetStringFromConfig(aSection, KData(), data))
+ {
+ TBuf8<KDataSize> dataPtr;
+ dataPtr.Copy(data);
+
+ TInt err = iData->ReadRaw(dataPtr);
+ if(err != KErrNone)
+ {
+ ERR_PRINTF2(_L("CBluetoothPhysicalLinks ReadRaw failed with error %d"), err);
+ SetError(err);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(KLogMissingParameter, &KData());
+ SetBlockResult(EFail);
+ }
+ }
+
+
+/**
+Test Enumerate()
+*/
+void CT_BluetoothPhysicalLinksData::DoCmdEnumerate(const TDesC& aSection)
+ {
+ INFO_PRINTF1(_L("CBluetoothPhysicalLinks Enumerate Call"));
+ TBool foundParameter=EFalse;
+ TInt maxNumber = 0;
+ RBTDevAddrArray devAddrArry;
+ if( GetIntFromConfig(aSection, KMaxNumber(), maxNumber))
+ {
+ foundParameter = ETrue;
+ TInt err = iData->Enumerate(devAddrArry, maxNumber);
+ if(err != KErrNone)
+ {
+ ERR_PRINTF2(_L("CBluetoothPhysicalLinks Enumerate failed with error %d"), err);
+ SetError(err);
+ }
+
+ INFO_PRINTF2(_L("CBluetoothPhysicalLinks Enumerate RBTDevAddrArray size = %d"), devAddrArry.Count());
+ TInt expectedSize = 0;
+ TBool result = EFalse;
+ if( GetIntFromConfig(aSection, KExpectedSize(), expectedSize) )
+ {
+ foundParameter = ETrue;
+ if( expectedSize != devAddrArry.Count() )
+ {
+ ERR_PRINTF1(_L("RBTDevAddrArray size not as expected!"));
+ SetBlockResult(EFail);
+ }
+ }
+ TBuf<KMaxSockAddrSize> tmpBuf;
+ for( int i=0; i<=devAddrArry.Count()-1; i++ )
+ {
+ TPtrC tBTDevAddrName;
+ if( GetStringFromConfig(aSection, KExpectedDevAddr(), tBTDevAddrName))
+ {
+ foundParameter=ETrue;
+ CT_BTDevAddrData* tBTDevAddrData=static_cast<CT_BTDevAddrData*>(GetDataWrapperL(tBTDevAddrName));
+ TBTDevAddr expectedDevAddr = *tBTDevAddrData->GetAddress();
+ expectedDevAddr.GetReadable(tmpBuf);
+ result = devAddrArry[i]==(expectedDevAddr);
+ if ( !result )
+ {
+ ERR_PRINTF2(_L("Actual BT Address is not as expected, expected address:(%S)"), &tmpBuf);
+ SetBlockResult(EFail);
+ }
+ }
+
+ TInt intBtDevAddr=0;
+ if( GetIntFromConfig(aSection, KExpectedIntDevAddr(), intBtDevAddr))
+ {
+ foundParameter=ETrue;
+ const TBTDevAddr expectedIntDevAddr(intBtDevAddr);
+ result = devAddrArry[i]==(expectedIntDevAddr);
+ if ( !result )
+ {
+ ERR_PRINTF2(_L("Actual BT Address is not as expected, expected address:(%D)"), intBtDevAddr);
+ SetBlockResult(EFail);
+ }
+ }
+ }
+ devAddrArry.Reset();
+ INFO_PRINTF1(_L("devAddrArry.Reset()"));
+ }
+ if (!foundParameter)
+ {
+ ERR_PRINTF3(KLogMissingParameters, &KExpectedDevAddr(), &KExpectedIntDevAddr());
+ SetBlockResult(EFail);
+ }
+ }
+
+
+/**
+Test Destructor
+*/
+void CT_BluetoothPhysicalLinksData::DoCmdDestructor()
+ {
+ DestroyData();
+ }
+
+
+/**
+Test MBPLN_ExtensionInterfaceL()
+*/
+void CT_BluetoothPhysicalLinksData::DoCmdMBPLN_ExtensionInterfaceL(const TDesC& aSection)
+ {
+ TInt tmp = 0;
+ void* theExtensionObjectPtr;
+
+ if( GetIntFromConfig(aSection, KUid(), tmp))
+ {
+ TUid uid=TUid::Uid(tmp);
+
+ TBool expectNull = EFalse;
+ if( GetBoolFromConfig(aSection, KExpectNull(), expectNull))
+ {
+ TRAPD(err, this->MBPLN_ExtensionInterfaceL(uid, theExtensionObjectPtr));
+ if( err!=KErrNone )
+ {
+ ERR_PRINTF2(_L("MBPLN_ExtensionInterfaceL err=%d"),err);
+ SetError(err);
+ }
+
+ if (expectNull)
+ {
+ //Fail if not NULL
+ if (theExtensionObjectPtr!=NULL)
+ {
+ ERR_PRINTF1(_L("Expected Null pointer but object found"));
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ //Fail if NULL
+ if (theExtensionObjectPtr==NULL)
+ {
+ ERR_PRINTF1(_L("Expected object but found NULL"));
+ SetBlockResult(EFail);
+ }
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(KLogMissingParameter, &KExpectNull());
+ SetBlockResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(KLogMissingParameter, &KUid());
+ SetBlockResult(EFail);
+ }
+ }
+
+
+