bluetooth/btstack/linkmgr/PhysicalLinkHelper.cpp
branchRCL_3
changeset 25 99439b07e980
parent 0 29b1cd4cb562
--- a/bluetooth/btstack/linkmgr/PhysicalLinkHelper.cpp	Wed Sep 01 12:38:54 2010 +0100
+++ b/bluetooth/btstack/linkmgr/PhysicalLinkHelper.cpp	Tue Sep 14 23:28:24 2010 +0300
@@ -22,60 +22,37 @@
 #include "ProxySAP.h"
 #include "linkmgr.h"
 
+
 #ifdef __FLOG_ACTIVE
 _LIT8(KLogComponent, LOG_COMPONENT_LINKMGR);
 #endif
 
-CRoleSwitcher::CRoleSwitcher(CPhysicalLinksManager& aLinkMgr, CPhysicalLink& aLink, TBTBasebandRole aRole)
-	: CTimer(CActive::EPriorityStandard)
-	, iLinkMgr(aLinkMgr)
+CPhysicalLinkHelper::CPhysicalLinkHelper(CPhysicalLinksManager& aLinkMgr, CPhysicalLink& aLink)
+	: iLinkMgr(aLinkMgr)
 	, iLink(aLink)
-	, iRole(aRole)
-	, iIsEncryptionDisabledForRoleSwitch(EFalse)
 	{
 	LOG_FUNC
-	iState = &iLinkMgr.RoleSwitcherStateFactory().GetState(CRoleSwitcherStateFactory::EIdle);
-	}
-
-CRoleSwitcher* CRoleSwitcher::NewL(CPhysicalLinksManager& aLinkMgr, CPhysicalLink& aLink, TBTBasebandRole aRole)
-	{
-	LOG_STATIC_FUNC
-	CRoleSwitcher* self = new(ELeave) CRoleSwitcher(aLinkMgr, aLink, aRole);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
 	}
 	
-void CRoleSwitcher::ConstructL()
+void CPhysicalLinkHelper::BaseConstructL()
 	{
 	LOG_FUNC
 	
 	// create Proxy telling it the possible PHY
 	iBTProxySAP = CBTProxySAP::NewL(iLinkMgr, &iLink);
 	iBTProxySAP->SetNotify(this);
-		
-	TCallBack cb(EventReceivedCallBack, this);
-	iEventReceivedCallBack = new (ELeave)CAsyncCallBack(cb, EActiveHighPriority);
-
-	CTimer::ConstructL();
-	CActiveScheduler::Add(this);
-
-	// add ourselves to the list in LinkMgr, LinkMgr will kick off the role change state machine 	
-	iLinkMgr.AddRoleSwitcher(*this);
-	iAddedToLinkMgr = ETrue;
+	
+	TCallBack ecb(EventReceivedCallBack, this);
+	iEventReceivedCallBack = new (ELeave)CAsyncCallBack(ecb, EActiveHighPriority);
 	}
 	
-CRoleSwitcher::~CRoleSwitcher()
+CPhysicalLinkHelper::~CPhysicalLinkHelper()
 	{
 	LOG_FUNC
-	if (iAddedToLinkMgr)
-		{
-		iLinkMgr.RemoveRoleSwitcher(*this);
-		}
-		
-	Cancel(); // watchdog timer
+	
+	RemoveTimer();
 	delete iBTProxySAP;
+	
 	if (iEventReceivedCallBack)
 		{
 		iEventReceivedCallBack->Cancel();
@@ -83,158 +60,14 @@
 		}
 	}
 
-void CRoleSwitcher::DisableLPM()
+void CPhysicalLinkHelper::DisableLPM()
    	{
 	LOG_FUNC
 	TPckgBuf<TInt> optionBuf;	
    	iBTProxySAP->SAPSetOption(KSolBtLMProxy, EBBRequestPreventAllLowPowerModes, optionBuf);
    	}
 
-void CRoleSwitcher::EnableLPM()
-   	{
-	LOG_FUNC
-	TPckgBuf<TInt> optionBuf;	
-   	iBTProxySAP->SAPSetOption(KSolBtLMProxy, EBBRequestAllowAllLowPowerModes, optionBuf);
-   	}
-
-void CRoleSwitcher::DisableEncryption()
-  	{
-	LOG_FUNC
- 	// data traffic suspended
-	iLinkMgr.LinkManagerProtocol().ACLController().SetParked(iLink.Handle(), ETrue);
-   	TBTBasebandEvent event(ENotifyEncryptionChangeOff);
-   	iBTProxySAP->Ioctl(KSolBtLMProxy, KLMBasebandEventOneShotNotificationIoctl, &event);
-	iLinkMgr.Encrypt(EFalse, iLink);
-
-	// set flag here, it's too late when we receive the event as AccessReqester
-	// might receive the baseband notification earlier then the flag is set!	
-	iIsEncryptionDisabledForRoleSwitch = ETrue;
-  	}
-
-void CRoleSwitcher::EnableEncryption()
-  	{
-	LOG_FUNC  	
-   	TBTBasebandEvent event(ENotifyEncryptionChangeOn);
-   	iBTProxySAP->Ioctl(KSolBtLMProxy, KLMBasebandEventOneShotNotificationIoctl, &event);
-	iLinkMgr.Encrypt(ETrue, iLink);	
-	// data traffic is enabled in IoctlComplete
-  	}
-   	
-void CRoleSwitcher::ChangeRole()
-	{
-	LOG_FUNC
-   	TBTBasebandEvent event(ENotifyAnyRole);
-   	iBTProxySAP->Ioctl(KSolBtLMProxy, KLMBasebandEventOneShotNotificationIoctl, &event);
-	iLinkMgr.ChangeRole(iRole, iLink);
-	}
-
-void CRoleSwitcher::CancelIoctl()
-	{
-	LOG_FUNC
-	iBTProxySAP->CancelIoctl(KSolBtLMProxy, KLMBasebandEventOneShotNotificationIoctl);
-	}
-	
-// Timer
-void CRoleSwitcher::RunL()
-	{
-	LOG_FUNC
-	iState->TimerExpired(*this);
-	}
-	
-TInt CRoleSwitcher::RunError(TInt aError)
-	{
-	LOG_FUNC
-	iState->Error(*this, aError);
-	return KErrNone;
-	}
-   	   	
-// From MSocketNotify
-void CRoleSwitcher::NewData(TUint /*aCount*/)
-	{
-	LOG_FUNC
-	
-	}
-	
-void CRoleSwitcher::CanSend()
-	{
-	LOG_FUNC
-	
-	}
-	
-void CRoleSwitcher::ConnectComplete()
-	{
-	LOG_FUNC
-	
-	}
-	
-void CRoleSwitcher::ConnectComplete(const TDesC8& /*aConnectData*/)
-	{
-	LOG_FUNC
-	
-	}
-	
-void CRoleSwitcher::ConnectComplete(CServProviderBase& /*aSSP*/)
-	{
-	LOG_FUNC
-	
-	}
-	
-void CRoleSwitcher::ConnectComplete(CServProviderBase& /*aSSP*/,const TDesC8& /*aConnectData*/)
-	{
-	LOG_FUNC
-	
-	}
-	
-void CRoleSwitcher::CanClose(TDelete /*aDelete*/)
-	{
-	LOG_FUNC
-	
-	}
-
-void CRoleSwitcher::CanClose(const TDesC8& /*aDisconnectData*/,TDelete /*aDelete*/)
-	{
-	LOG_FUNC
-	
-	}
-	
-void CRoleSwitcher::Error(TInt /*aError*/,TUint /*aOperationMask*/)
-	{
-	LOG_FUNC
-	
-	}
-	
-void CRoleSwitcher::Disconnect(void)
-	{
-	LOG_FUNC
-	iState->Error(*this, KErrDisconnected);
-	}
-
-void CRoleSwitcher::Disconnect(TDesC8& /*aDisconnectData*/)
-	{
-	LOG_FUNC
-	iState->Error(*this, KErrDisconnected);
-	}
-
-void CRoleSwitcher::Start()
-	{
-	LOG_FUNC
-	iState->Start(*this);
-	}
-
-void CRoleSwitcher::Finish()
-	{
-	LOG_FUNC
-	// async call to delete this class
-	iLink.AsyncDeleteRoleSwitcher();
-	}
-		
-void CRoleSwitcher::SaveEncryption()
-	{
-	LOG_FUNC
-	iIsEncrypted = iLink.Encrypted();
-	}
-	
-TBool CRoleSwitcher::IsEPRSupported() const
+TBool CPhysicalLinkHelper::IsEPRSupported() const
 	{
 	LOG_FUNC
 	// For Lisbon (Bluetooth 2.1), if EPR is supported both locally and remotely,
@@ -243,418 +76,144 @@
 	return iLink.IsEncryptionPauseResumeSupported();
 	}
 
-void CRoleSwitcher::LogRoleSwitchSuccessful() const
+void CPhysicalLinkHelper::NotifyBasebandEvent(TNotifyEvent aEvent)
+	{
+	LOG_FUNC
+	TBTBasebandEvent event(aEvent.NotifyEvent());
+	iBTProxySAP->Ioctl(KSolBtLMProxy, KLMBasebandEventOneShotNotificationIoctl, &event);
+	}
+
+void CPhysicalLinkHelper::CancelNotify()
+	{
+	LOG_FUNC
+	iBTProxySAP->CancelIoctl(KSolBtLMProxy, KLMBasebandEventOneShotNotificationIoctl);
+	}
+	
+void CPhysicalLinkHelper::QueueTimer(TTimeIntervalMicroSeconds32 aTimerVal)
+	{
+	LOG_FUNC
+
+	TCallBack cb(TimerExpiredCallBack, this);
+	iTimerEntry.Set(cb);
+	BTSocketTimer::Queue(aTimerVal, iTimerEntry);
+	}
+
+
+void CPhysicalLinkHelper::RemoveTimer()
+	{
+	LOG_FUNC
+
+	BTSocketTimer::Remove(iTimerEntry);
+	}
+   	   	
+// From MSocketNotify
+void CPhysicalLinkHelper::NewData(TUint /*aCount*/)
+	{
+	LOG_FUNC
+	
+	}
+	
+void CPhysicalLinkHelper::CanSend()
+	{
+	LOG_FUNC
+	
+	}
+	
+void CPhysicalLinkHelper::ConnectComplete()
 	{
 	LOG_FUNC
-	TInt eventType;
-	eventType = (iRole == EMaster ? ENotifyMaster :ENotifySlave);
+	
+	}
+	
+void CPhysicalLinkHelper::ConnectComplete(const TDesC8& /*aConnectData*/)
+	{
+	LOG_FUNC
+	
+	}
+	
+void CPhysicalLinkHelper::ConnectComplete(CServProviderBase& /*aSSP*/)
+	{
+	LOG_FUNC
 	
-	if (iBasebandEvent.EventType()==eventType &&
-	    iBasebandEvent.ErrorCode()==KErrNone)
-		{
-		LOG(_L("CRoleSwitcher RoleSwitch OK"));	
-		}
-	else 
-		{
-		LOG(_L("CRoleSwitcher RoleSwitch failed"));
-		}
+	}
+	
+void CPhysicalLinkHelper::ConnectComplete(CServProviderBase& /*aSSP*/,const TDesC8& /*aConnectData*/)
+	{
+	LOG_FUNC
+	
+	}
+	
+void CPhysicalLinkHelper::CanClose(TDelete /*aDelete*/)
+	{
+	LOG_FUNC
+	
 	}
 
-void CRoleSwitcher::IoctlComplete(TDesC8 *aBuf)
+void CPhysicalLinkHelper::CanClose(const TDesC8& /*aDisconnectData*/,TDelete /*aDelete*/)
+	{
+	LOG_FUNC
+	
+	}
+	
+void CPhysicalLinkHelper::Error(TInt /*aError*/,TUint /*aOperationMask*/)
+	{
+	LOG_FUNC
+	
+	}
+	
+void CPhysicalLinkHelper::Disconnect(void)
+	{
+	LOG_FUNC
+	Error(KErrDisconnected);
+	}
+
+void CPhysicalLinkHelper::Disconnect(TDesC8& /*aDisconnectData*/)
+	{
+	LOG_FUNC
+	Error(KErrDisconnected);
+	}
+
+void CPhysicalLinkHelper::IoctlComplete(TDesC8 *aBuf)
 	{
 	LOG_FUNC
 	const TBTBasebandEventNotification* event = reinterpret_cast<const TBTBasebandEventNotification*>(aBuf->Ptr());
 	iBasebandEvent = *event;
 	iEventReceivedCallBack->CallBack();
 	}
-	
-/*static*/ TInt CRoleSwitcher::EventReceivedCallBack(TAny* aRoleSwitcher)
-	{
-	LOG_STATIC_FUNC
-	CRoleSwitcher* roleSwitcher = static_cast<CRoleSwitcher*>(aRoleSwitcher);
-	roleSwitcher->iState->EventReceived(*roleSwitcher);
-	return EFalse;
-	}
-		
 
-//----------------------------------------------------------------------------------
-// STATE FACTORY
-//----------------------------------------------------------------------------------
-
-CRoleSwitcherStateFactory* CRoleSwitcherStateFactory::NewL()
+/*static*/ TInt CPhysicalLinkHelper::EventReceivedCallBack(TAny* aThis)
 	{
 	LOG_STATIC_FUNC
-	CRoleSwitcherStateFactory* ret=new (ELeave) CRoleSwitcherStateFactory();
-	CleanupStack::PushL(ret);
-	ret->ConstructL();
-	CleanupStack::Pop(ret);
-	return ret;
-	}
-
-void CRoleSwitcherStateFactory::ConstructL()
-	{
-	LOG_FUNC	
-	iStates[EIdle]					=new (ELeave) TRSStateIdle(*this);
-	iStates[EDisablingLPM]			=new (ELeave) TRSStateDisablingLPM(*this);
-	iStates[EDisablingEncryption]	=new (ELeave) TRSStateDisablingEncryption(*this);
-	iStates[EChangingRole]			=new (ELeave) TRSStateChangingRole(*this);
-	iStates[EChangingRoleWithEPR]	=new (ELeave) TRSStateChangingRoleWithEPR(*this);
-	iStates[EEnablingEncryption]	=new (ELeave) TRSStateEnablingEncryption(*this);
-	}
-
-CRoleSwitcherStateFactory::CRoleSwitcherStateFactory()
-	{
-	LOG_FUNC
-	iStates.DeleteAll();
-	}
-
-TRoleSwitcherState& CRoleSwitcherStateFactory::GetState(CRoleSwitcherStateFactory::TRoleSwitcherStates aState)
-	{
-	LOG_FUNC
-	__ASSERT_DEBUG(iStates[aState],  Panic(ERoleSwitcherInvalidState));
-	return *iStates[aState];
-	}
-
-TInt CRoleSwitcherStateFactory::StateIndex(const TRoleSwitcherState* aState) const
-	{
-	LOG_FUNC
-	TInt state;
-	for (state = 0; state < ERoleSwitcherMaxState; state++)
-		{
-		if (iStates[state] == aState)
-			{
-			return state;
-			}
-		}
-	
-	return KUnknownState;
-	}
-
-
-//----------------------------------------------------------------------------------
-// STATES
-//----------------------------------------------------------------------------------
-
-TRoleSwitcherState::TRoleSwitcherState(CRoleSwitcherStateFactory& aFactory)
-: iFactory(aFactory)
-	{
-	LOG_FUNC
-	}
-
-void TRoleSwitcherState::PanicInState(TLinkPanic aPanic) const
-	{
-	LOG_FUNC
-	Panic(aPanic, iFactory.StateIndex(this));
-	}
-
-void TRoleSwitcherState::ChangeState(CRoleSwitcher& aContext, CRoleSwitcherStateFactory::TRoleSwitcherStates aState) const
-	{
-	LOG_FUNC
-	
-	aContext.iState->Exit(aContext);
-
-#ifdef __FLOG_ACTIVE
-	TRoleSwitcherState* state=&iFactory.GetState(aState);
-	LOG2(_L("RoleSwitcher: State %S -> %S"), &aContext.iState->iName, &state->iName);
-#endif //__FLOG_ACTIVE
-	aContext.iState=&iFactory.GetState(aState);
-
-	aContext.iState->Enter(aContext);
+	CPhysicalLinkHelper* helper = static_cast<CPhysicalLinkHelper*>(aThis);
+	helper->DoEventReceivedCallBack();
+	return EFalse;
 	}
 
-void TRoleSwitcherState::Enter(CRoleSwitcher& /*aContext*/) const
-	{
-	LOG_FUNC
-	// do nothing
-	}
-
-void TRoleSwitcherState::Exit(CRoleSwitcher& /*aContext*/) const
-	{
-	LOG_FUNC
-	// do nothing
-	}
-
-void TRoleSwitcherState::Start(CRoleSwitcher& /*aContext*/) const
-	{
-	LOG_FUNC
-	PanicInState(ERoleSwitcherStateMachineInvalidEvent);
-	}
-
-void TRoleSwitcherState::Error(CRoleSwitcher& aContext, TInt /*aErr*/) const
-	{
-	LOG_FUNC
-	aContext.CancelIoctl();
-	aContext.Cancel();
-	ChangeState(aContext, CRoleSwitcherStateFactory::EIdle);
-	}
-
-void TRoleSwitcherState::EventReceived(CRoleSwitcher& /*aContext*/) const
-	{
-	LOG_FUNC
-	// do nothing
-	}
-
-void TRoleSwitcherState::TimerExpired(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	ChangeState(aContext, CRoleSwitcherStateFactory::EIdle);
-	}
-
-//----------------------------------------------------------------------------------
-
-TRSStateIdle::TRSStateIdle(CRoleSwitcherStateFactory& aFactory)
-: TRoleSwitcherState(aFactory)
-	{
-	LOG_FUNC
-	STATENAME("TRSStateIdle");
-	}
-
-void TRSStateIdle::Start(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	aContext.After(KTimeoutRoleSwitch);	// watchdog timer
-	ChangeState(aContext, CRoleSwitcherStateFactory::EDisablingLPM);
-	}	
-
-void TRSStateIdle::Enter(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	aContext.Finish();
-	}	
-
-//----------------------------------------------------------------------------------
-
-TRSStateDisablingLPM::TRSStateDisablingLPM(CRoleSwitcherStateFactory& aFactory)
-: TRoleSwitcherState(aFactory)
-	{
-	LOG_FUNC
-	STATENAME("TRSStateDisablingLPM");
-	}
-
-void TRSStateDisablingLPM::Enter(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	// DisableLPM even if link is active to prevent possible LPM requests during encryption disabling
-
-	if (aContext.iLink.LinkMode() == EActiveMode)
-		{
-		aContext.DisableLPM();
-		if (aContext.IsEPRSupported())
-			{
-			ChangeState(aContext, CRoleSwitcherStateFactory::EChangingRoleWithEPR);
-			}
-		else
-			{
-			ChangeState(aContext, CRoleSwitcherStateFactory::EDisablingEncryption);
-			}
-		// don't wait for notification
-		}
-	else
-		{
-		TBTBasebandEvent event(ENotifyActiveMode);
-		aContext.iBTProxySAP->Ioctl(KSolBtLMProxy, KLMBasebandEventOneShotNotificationIoctl, &event);
-		aContext.DisableLPM();
-		}
-	}
-
-void TRSStateDisablingLPM::EventReceived(CRoleSwitcher& aContext) const
+void CPhysicalLinkHelper::DoEventReceivedCallBack()
 	{
 	LOG_FUNC
-	if (aContext.iBasebandEvent.EventType()==ENotifyActiveMode &&
-		aContext.iBasebandEvent.ErrorCode()==KErrNone)
-		{
-		if (aContext.IsEPRSupported())
-			{
-			ChangeState(aContext, CRoleSwitcherStateFactory::EChangingRoleWithEPR);
-			}
-		else
-			{
-			ChangeState(aContext, CRoleSwitcherStateFactory::EDisablingEncryption);
-			}
-		}
-	else 
-		{
-		LOG(_L("CRoleSwitcher RoleSwitch failed in DisableLPM"));
-		// we can quit SM, don't need to rewind
-		ChangeState(aContext, CRoleSwitcherStateFactory::EIdle);
-		}
-	}
-
-//----------------------------------------------------------------------------------
-TRSStateDisablingEncryption::TRSStateDisablingEncryption(CRoleSwitcherStateFactory& aFactory)
-: TRoleSwitcherState(aFactory)
-	{
-	LOG_FUNC
-	STATENAME("TRSStateDisablingEncryption");
-	}
-
-void TRSStateDisablingEncryption::Enter(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	aContext.SaveEncryption();
-	if (aContext.iIsEncrypted)
-		{
-		aContext.DisableEncryption();
-		}
-	else
-		{
-		ChangeState(aContext, CRoleSwitcherStateFactory::EChangingRole);
-		}
-	}
-
-void TRSStateDisablingEncryption::EventReceived(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	if (aContext.iBasebandEvent.EventType()==ENotifyEncryptionChangeOff &&
-	    aContext.iBasebandEvent.ErrorCode()==KErrNone)
-		{
-		ChangeState(aContext, CRoleSwitcherStateFactory::EChangingRole);
-		}
-	else 
-		{
-		LOG(_L("CRoleSwitcher RoleSwitch failed in DisableEncryption"));
-		// before quiting SM , try to enable LPM
-		aContext.EnableLPM();
-		ChangeState(aContext, CRoleSwitcherStateFactory::EIdle);
-		}
-	}
-
-void TRSStateDisablingEncryption::TimerExpired(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	aContext.CancelIoctl();
-	ChangeState(aContext, CRoleSwitcherStateFactory::EEnablingEncryption);
-	}
-
-//----------------------------------------------------------------------------------
-TRSStateChangingRole::TRSStateChangingRole(CRoleSwitcherStateFactory& aFactory)
-: TRoleSwitcherState(aFactory)
-	{
-	LOG_FUNC
-	STATENAME("TRSStateChangingRole");
-	}
-
-void TRSStateChangingRole::Enter(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	aContext.ChangeRole();
-	}
-
-void TRSStateChangingRole::EventReceived(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	aContext.Cancel();	// cancel watchdog timer
-
-	FTRACE(aContext.LogRoleSwitchSuccessful());
-	
-
-	ChangeState(aContext, CRoleSwitcherStateFactory::EEnablingEncryption);
-	}
-
-void TRSStateChangingRole::TimerExpired(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	aContext.CancelIoctl();
-	ChangeState(aContext, CRoleSwitcherStateFactory::EEnablingEncryption);
+	EventReceived(iBasebandEvent);
 	}
 
-//----------------------------------------------------------------------------------
-TRSStateChangingRoleWithEPR::TRSStateChangingRoleWithEPR(CRoleSwitcherStateFactory& aFactory)
-: TRoleSwitcherState(aFactory)
+/*static*/ TInt CPhysicalLinkHelper::TimerExpiredCallBack(TAny* aThis)
 	{
-	LOG_FUNC
-	STATENAME("TRSStateChangingRoleWithEPR");
-	}
-
-void TRSStateChangingRoleWithEPR::Enter(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	aContext.ChangeRole();
+	LOG_STATIC_FUNC
+	CPhysicalLinkHelper* helper = static_cast<CPhysicalLinkHelper*>(aThis);
+	helper->DoTimerExpiredCallBack();
+	return EFalse;
 	}
 
-void TRSStateChangingRoleWithEPR::EventReceived(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	aContext.Cancel();	// cancel watchdog timer
-
-	FTRACE(aContext.LogRoleSwitchSuccessful());
-		
-	ChangeState(aContext, CRoleSwitcherStateFactory::EIdle);
-	}
-
-void TRSStateChangingRoleWithEPR::TimerExpired(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	aContext.CancelIoctl();
-	ChangeState(aContext, CRoleSwitcherStateFactory::EIdle);
-	}
-
-//----------------------------------------------------------------------------------
-TRSStateEnablingEncryption::TRSStateEnablingEncryption(CRoleSwitcherStateFactory& aFactory)
-: TRoleSwitcherState(aFactory)
-	{
-	LOG_FUNC
-	STATENAME("TRSStateEnablingEncryption");
-	}
-
-void TRSStateEnablingEncryption::Enter(CRoleSwitcher& aContext) const
+void CPhysicalLinkHelper::DoTimerExpiredCallBack()
 	{
 	LOG_FUNC
-	if (aContext.iIsEncrypted)
-		{
-		aContext.After(KTimeoutOneCommand);
-		aContext.EnableEncryption();
-		}
-	else
-		{
-		aContext.EnableLPM();
-		ChangeState(aContext, CRoleSwitcherStateFactory::EIdle);
-		}
-	}
-	
-void TRSStateEnablingEncryption::Exit(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	if (aContext.iIsEncrypted)
-		{
-		// enable data traffic
-		aContext.iLinkMgr.LinkManagerProtocol().ACLController().SetParked(aContext.iLink.Handle(), EFalse);
-		}
+	TimerExpired();
 	}
 
-void TRSStateEnablingEncryption::EventReceived(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	aContext.Cancel(); // watchdog timer
-	if (aContext.iBasebandEvent.EventType()==ENotifyEncryptionChangeOn &&
-		aContext.iBasebandEvent.ErrorCode()==KErrNone)
-		{
-		aContext.EnableLPM();		
-		ChangeState(aContext, CRoleSwitcherStateFactory::EIdle);
-		aContext.iIsEncryptionDisabledForRoleSwitch = EFalse;
-		}
-	else 
-		{
-		LOG(_L("CRoleSwitcher SetEncryption failed, disconnect link"));
-		if (aContext.iLink.Terminate(ERemoteUserEndedConnection) != KErrNone) 
-			{
-			LOG(_L("CRoleSwitcher OOM"));
-			}
-		ChangeState(aContext, CRoleSwitcherStateFactory::EIdle);
-		}
-	}
-
-void TRSStateEnablingEncryption::TimerExpired(CRoleSwitcher& aContext) const
-	{
-	LOG_FUNC
-	LOG(_L("CRoleSwitcher Timeout in EncryptionEnable, disconnect"));
-	aContext.CancelIoctl();			
-	if (aContext.iLink.Terminate(ERemoteUserEndedConnection) != KErrNone)
-			{
-			LOG(_L("CRoleSwitcher OOM"));
-			}
-	ChangeState(aContext, CRoleSwitcherStateFactory::EIdle);
-	}
+	
 
 
 
+
+
+
+