diff -r 000000000000 -r f63038272f30 bluetoothengine/btaudioman/src/basrvacc.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btaudioman/src/basrvacc.cpp Mon Jan 18 20:28:57 2010 +0200 @@ -0,0 +1,275 @@ +/* +* Copyright (c) 2005-2006 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: Implementation of an accessory management. +* +*/ + + +// INCLUDE FILES +#include "basrvacc.h" +#include "basrvaccman.h" +#include "basrvrvc.h" +#include "basrvaccstatequery.h" +#include "basrvpowercontrolagent.h" +#include "debug.h" + +// ================= MEMBER FUNCTIONS ======================= + +CBasrvAcc* CBasrvAcc::NewL(CBasrvAccMan& aAccMan) + { + CBasrvAcc* self = CBasrvAcc::NewLC(aAccMan); + CleanupStack::Pop(); + return self; + } + +CBasrvAcc* CBasrvAcc::NewLC(CBasrvAccMan& aAccMan) + { + CBasrvAcc* self = new(ELeave) CBasrvAcc(aAccMan); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CBasrvAcc::~CBasrvAcc() + { + delete iState; + delete iRvc; + delete iPowerController; + TRACE_FUNC + } + +const TBTDevAddr& CBasrvAcc::Remote() + { + return iAccInfo.iAddr; + } + +void CBasrvAcc::ConnectL(const TBTDevAddr& aAddr) + { + TRACE_FUNC + if (!iState) + { + iAccInfo.SetBDAddress(aAddr); + iState = CBasrvAccStateQuery::NewL(*this, ETrue); + iState->EnterL(); + } + else + { + iState->ConnectL(aAddr); + } + } + +void CBasrvAcc::CancelConnect() + { + TRACE_FUNC + if (iState) + { + iState->CancelConnect(); + } + } + +void CBasrvAcc::DisconnectL() + { + TRACE_FUNC + if (iState) + { + iState->DisconnectL(); + } + } + +void CBasrvAcc::AccessoryConnectedL(const TBTDevAddr& aAddr, TProfiles aProfile) + { + TRACE_FUNC + if (!iState) + { + iAccInfo.SetBDAddress(aAddr); + iAccInfo.iConnProfiles = aProfile; + iAccInfo.iSuppProfiles = aProfile; + iState = CBasrvAccStateQuery::NewL(*this, EFalse); + iState->EnterL(); + } + else if (aAddr == iAccInfo.iAddr) + { + iState->AccessoryConnected(aProfile); + } + } + +void CBasrvAcc::AccOpenedAudio(TProfiles aProfile) + { + TRACE_FUNC + iState->AccOpenedAudio(aProfile); + } + +void CBasrvAcc::AccClosedAudio(TProfiles aProfile) + { + TRACE_FUNC + iState->AccClosedAudio(aProfile); + } + +void CBasrvAcc::AccessoryDisconnectedL(TProfiles aProfile) + { + TRACE_FUNC + iState->AccessoryDisconnectedL(aProfile); + } + +void CBasrvAcc::OpenAudioL(TAccAudioType aType) + { + TRACE_FUNC + iState->OpenAudioL(aType); + } + +void CBasrvAcc::CloseAudioL(TAccAudioType aType) + { + TRACE_FUNC + iState->CloseAudioL(aType); + } + +const TAccInfo* CBasrvAcc::AccInfo(const TBTDevAddr& aAddr) + { + TRACE_FUNC + if (iAccInfo.iAddr == aAddr) + { + return &iAccInfo; + } + return NULL; + } + +void CBasrvAcc::ChangeStateL(CBasrvAccState* aNewState) + { + TRACE_FUNC_ENTRY + delete iState; + iState = aNewState; + if (iState) + { + TInt err = KErrNone; + TRAP(err, iState->EnterL()); + if (err) + { + ChangeStateL(iState->ErrorOnEntry(err)); + } + } + if (!iState) + { + iAccMan.AccObsoleted(this, iAccInfo.iAddr); + } + TRACE_FUNC_EXIT + } + +CBasrvAccMan& CBasrvAcc::AccMan() + { + return iAccMan; + } + + +TAccInfo& CBasrvAcc::AccInfo() + { + return iAccInfo; + } + +TBTEngConnectionStatus CBasrvAcc::ConnectionStatus() const + { + if (iState) + { + return iState->ConnectionStatus(); + } + + return EBTEngNotConnected; + } + +void CBasrvAcc::RequestSniffMode() + { + if (!(AccInfo().iSuppProfiles & EHFP) && !(AccInfo().iSuppProfiles & EStereo)) + { + return; // No power mode handling with HSP + } + + if (!iPowerController) + { + TRAP_IGNORE(iPowerController = CBasrvPowerControlAgent::NewL(iAccInfo.iAddr)); + } + + if (iPowerController) + { + iPowerController->RequestSniffMode(); + } + } + +void CBasrvAcc::RequestActiveMode() + { + if (!(AccInfo().iSuppProfiles & EHFP) && !(AccInfo().iSuppProfiles & EStereo)) + { + return; // No power mode handling with HSP + } + if (!iPowerController) + { + TRAP_IGNORE(iPowerController = CBasrvPowerControlAgent::NewL(iAccInfo.iAddr)); + } + if (iPowerController) + { + iPowerController->RequestActiveMode(); + } + } + +void CBasrvAcc::CancelPowerModeControl() + { + if (iPowerController) + { + iPowerController->CancelPowerModeControl(); + } + } + +void CBasrvAcc::NotifyLinkChange2Rvc() + { + if (!iRvc) + iRvc = CBasrvRvc::New(*this); + if (iRvc) + { + iRvc->Update(iAccInfo.iConnProfiles, iAccInfo.iAudioOpenedProfiles); + } + } + +void CBasrvAcc::PreventLowPowerMode() + { + TRACE_FUNC + if (!iPowerController) + { + TRAP_IGNORE(iPowerController = CBasrvPowerControlAgent::NewL(iAccInfo.iAddr)); + } + if (iPowerController) + { + iPowerController->PreventLowPowerMode(); + } + } + +void CBasrvAcc::AllowLowPowerMode() + { + TRACE_FUNC + if (iPowerController) + { + iPowerController->AllowLowPowerMode(); + } + } + + +CBasrvAcc::CBasrvAcc(CBasrvAccMan& aAccMan) + : iAccMan(aAccMan) + { + TRACE_FUNC + iAccInfo.SetBDAddress(TBTDevAddr()); + } + +void CBasrvAcc::ConstructL() + { + } + +// End of File