diff -r 5b153be919d4 -r e9b924a62a66 bluetooth/gavdp/test/tavsrcController.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/gavdp/test/tavsrcController.cpp Wed Sep 01 12:38:54 2010 +0100 @@ -0,0 +1,188 @@ +// 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 "tavsrcController.h" + +#include +#include +#include + +CTavsrcController* CTavsrcController::NewL(CRemConInterfaceSelector& aIfSel, CActiveConsole& aConsole) + { + CTavsrcController* controller = new(ELeave) CTavsrcController(aIfSel, aConsole); + CleanupStack::PushL(controller); + controller->ConstructL(); + CleanupStack::Pop(controller); + return controller; + } + +CTavsrcController::CTavsrcController(CRemConInterfaceSelector& aIfSel, CActiveConsole& aConsole) + : CActive(EPriorityStandard), iState(EControllerNotConnected), iSelector(&aIfSel), iConsole(aConsole) + { + CActiveScheduler::Add(this); + } + +void CTavsrcController::ConstructL() + { + iCoreController = CRemConCoreApiController::NewL(*iSelector, *this); + iGoConnectionOrientedSent = EFalse; + } + +CTavsrcController::~CTavsrcController() + { + Cancel(); + } + +TInt CTavsrcController::Command(TRemConCoreApiOperationId aOpId) + { + TInt err = KErrNotReady; + + if(!IsActive()) + { + err = KErrNone; + + if(iState == EControllerConnected) + { + IssueCommand(aOpId); + } + else + { + // Need to connect first + TRAP(err, ConnectL()); + } + } + + return err; + } + + +void CTavsrcController::MrccacoResponse(TRemConCoreApiOperationId aOperationId, TInt aError) + { + iConsole.Console().Printf(_L("Received Response for Operation %d, Result %d\n"), aOperationId, aError); + } + +void CTavsrcController::IssueCommand(TRemConCoreApiOperationId aOpId) + { + switch(aOpId) + { + case ERemConCoreApiVolumeDown: + iCoreController->VolumeDown(iStatus, iNumRemotes, ERemConCoreApiButtonClick); + break; + case ERemConCoreApiVolumeUp: + iCoreController->VolumeUp(iStatus, iNumRemotes, ERemConCoreApiButtonPress); + break; + case ERemConCoreApiForward: + iCoreController->Forward(iStatus, iNumRemotes, ERemConCoreApiButtonClick); + break; + case ERemConCoreApiBackward: + iCoreController->Backward(iStatus, iNumRemotes, ERemConCoreApiButtonClick); + break; + case ERemConCoreApiPlay: + iCoreController->Play(iStatus, iNumRemotes, ERemConCoreApiButtonClick); + break; + case ERemConCoreApiStop: + iCoreController->Stop(iStatus, iNumRemotes, ERemConCoreApiButtonClick); + break; + default: + // Cos we don't want to SetActive(), alright? + return; + } + + iConsole.Console().Printf(_L("Sending Command Operation %d\n"), aOpId); + SetActive(); + } + +void CTavsrcController::ConnectL() + { + //Ask user which device address we should connect to... + iState = ESearchingForDevice; + User::LeaveIfError(iNotify.Connect()); + iNotify.StartNotifierAndGetResponse(iStatus, KDeviceSelectionNotifierUid, iPckg, iResPckg); + SetActive(); + } + +void CTavsrcController::RunL() + { + switch(iState) + { + case EControllerConnected: + { + // We don't care what the result was really + // Ask Tim about the display logging and + // log it + break; + } + case EControllerNotConnected: + { + iConsole.Console().Printf(_L("AVRCP connection completed, result = %d\n"), iStatus.Int()); + + if(iStatus.Int() == KErrNone) + { + // Connected ok, now issue command + iState = EControllerConnected; + IssueCommand(iOutstandingOperation); + } + break; + } + case ESearchingForDevice: + { + if (iStatus.Int() == KErrNone) + { + iState = EControllerNotConnected; + + iNotify.CancelNotifier(KDeviceSelectionNotifierUid); + iNotify.Close(); + + iConsole.Console().Printf(_L("Opening AVRCP connection...\n")); + + TBTDevAddr btAddr = iResPckg().BDAddr(); + // Store as 8 bit machine readable + RBuf8 bearerData; + bearerData.CreateL(btAddr.Des()); + + // Form the RemCon Addr from the AVRCP Uid and the + // bluetooth address + TRemConAddress addr; + addr.BearerUid() = TUid::Uid(KRemConBearerAvrcpImplementationUid); + addr.Addr() = bearerData; + + if (iGoConnectionOrientedSent) + { + // Only allowed to call GoConnectionOrientedL() once on pain of RemCon panic, + // ERemConClientPanicAlreadyConnectionOriented. Solution is to call GoConnectionlessL() + // before recalling GoConnectionOrientedL() + iSelector->GoConnectionlessL(); + } + iSelector->GoConnectionOrientedL(addr); + iSelector->ConnectBearer(iStatus); + iGoConnectionOrientedSent = ETrue; + + SetActive(); + break; + } + } + default: + { + // hmm shouldn't be here + __DEBUGGER(); + break; + } + } + } + +void CTavsrcController::DoCancel() + { + iCoreController->Cancel(); + }