diff -r 000000000000 -r af10295192d8 linklayercontrol/networkinterfacemgr/src/MCOMMV2.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linklayercontrol/networkinterfacemgr/src/MCOMMV2.CPP Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,262 @@ +// Copyright (c) 1997-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: +// Comms reader and writer mixin +// +// + +/** + @file +*/ + + +#include +#include "NI_STD.H" +#include "Ni_Log.h" +#include "bcacontrol.h" + +NONSHARABLE_CLASS(CCommReaderV2) : public CActive +/** +@internalComponent +*/ + { +friend class MCommV2; +public: + CCommReaderV2(MCommV2* aComm, TInt aPriority); + virtual ~CCommReaderV2(); + virtual void RunL(); + virtual void DoCancel(); +private: + void CompleteNow(TInt aError); +private: + MCommV2 *iComm; + }; + +NONSHARABLE_CLASS(CCommWriterV2) : public CActive +/** +@internalComponent +*/ + { +friend class MCommV2; +public: + CCommWriterV2(MCommV2* aComm, TInt aPriority); + virtual ~CCommWriterV2(); + virtual void RunL(); + virtual void DoCancel(); +private: + void CompleteNow(TInt aError); +private: + MCommV2 *iComm; + }; + +#if !defined(__EABI__) && !defined(__X86GCC__) +EXPORT_C MCommV2::MCommV2() +/** +Constructor +*/ + { + } +#endif + +EXPORT_C void MCommV2::CommDelete() + { + LOG( NifmanLog::Printf(_L("MCommV2 %08x:\tCommDelete()"), this); ) + delete iCommReader; + iCommReader = NULL; + delete iCommWriter; + iCommWriter = NULL; + delete iBcaControl; + iBcaControl = NULL; + } + + +EXPORT_C TInt MCommV2::CommOpen(const TDesC& aChannelId) + { + iChannelId = aChannelId; + LOG( NifmanLog::Printf(_L("MCommV2 %08x:\tCommOpen('%S')"), this, &aChannelId); ) + TRAPD(err, iBcaControl->StartLoadL();); + LOG( + if (err != KErrNone) + { + NifmanLog::Printf(_L("MCommV2 %08x:\tCommOpen() returned error %d"), this, err); + } + ) + return err; + } + +EXPORT_C void MCommV2::CommClose() + { + LOG( NifmanLog::Printf(_L("MCommV2 %08x:\tCommClose()"), this); ) + iCommReader->Cancel(); + iCommWriter->Cancel(); + iBcaControl->Shutdown(KErrNone); + iChannelId.Zero(); + } + +EXPORT_C void MCommV2::CommConstructL(TInt aReadPriority, TInt aWritePriority) + { + iCommReader = new (ELeave) CCommReaderV2(this, aReadPriority); + iCommWriter = new (ELeave) CCommWriterV2(this, aWritePriority); + iBcaControl = new (ELeave) CScriptBcaControl (this); + } + +EXPORT_C void MCommV2::CommWrite(const TDesC8& aDes) + { + __ASSERT_ALWAYS(iCommWriter!=NULL, NetUtilPanic(ENuPanic_NotConstructed)); + __ASSERT_ALWAYS(iBca!=NULL, NetUtilPanic(ENuPanic_NotConstructed)); + iBca->Write(iCommWriter->iStatus, aDes); + iCommWriter->SetActive(); + } + +EXPORT_C void MCommV2::CommWriteReady() + { + __ASSERT_ALWAYS(iCommWriter!=NULL, NetUtilPanic(ENuPanic_NotConstructed)); + __ASSERT_ALWAYS(iBca!=NULL, NetUtilPanic(ENuPanic_NotConstructed)); + iBca->Write(iCommWriter->iStatus, TPtrC8(NULL, 0)); + iCommWriter->SetActive(); + } + +EXPORT_C TBool MCommV2::CommIsWriting() const + { + + return iCommWriter->IsActive(); + } + +EXPORT_C void MCommV2::CommRead(TDes8& aDes) + { + __ASSERT_ALWAYS(iCommReader!=NULL, NetUtilPanic(ENuPanic_NotConstructed)); + __ASSERT_ALWAYS(iBca!=NULL, NetUtilPanic(ENuPanic_NotConstructed)); + iBca->Read(iCommReader->iStatus, aDes); + iCommReader->SetActive(); + } + +EXPORT_C void MCommV2::CommReadOneOrMore(TDes8& aDes) + { + __ASSERT_ALWAYS(iCommReader!=NULL, NetUtilPanic(ENuPanic_NotConstructed)); + __ASSERT_ALWAYS(iBca!=NULL, NetUtilPanic(ENuPanic_NotConstructed)); + iBca->Read(iCommReader->iStatus, aDes); + iCommReader->SetActive(); + } + +EXPORT_C void MCommV2::CommReadReady() + { + __ASSERT_ALWAYS(iCommReader!=NULL, NetUtilPanic(ENuPanic_NotConstructed)); + iCommReader->SetActive(); + } + +EXPORT_C TBool MCommV2::CommIsReading() const + { + + return iCommReader->IsActive(); + } + +EXPORT_C void MCommV2::CommCancel() + { + if (iCommWriter) + iCommWriter->Cancel(); + if (iCommReader) + iCommReader->Cancel(); + if (iBcaControl) + { + iBcaControl->Cancel(); + } + } + +EXPORT_C void MCommV2::CommWriteCancel() + { + if (iCommWriter) + iCommWriter->Cancel(); + } + +EXPORT_C void MCommV2::CommReadCancel() + { + if (iCommReader) + iCommReader->Cancel(); + } + +EXPORT_C const TDesC& MCommV2::BcaName() + { + return BcaStack(); + } + +EXPORT_C void MCommV2::SetBca(BasebandChannelAdaptation::MBca* aBca) + { + iBca = aBca; + } +EXPORT_C const TDesC& MCommV2::Port() + { + return iChannelId; + } + +// + +CCommWriterV2::CCommWriterV2(MCommV2* aComm, TInt aPriority) + : CActive(aPriority), iComm(aComm) + { + CActiveScheduler::Add(this); + } + +CCommWriterV2::~CCommWriterV2() + { + Cancel(); + } + +void CCommWriterV2::RunL() + { + iComm->CommWriteCancel(); + iComm->CommWriteComplete(iStatus.Int()); + } + +void CCommWriterV2::DoCancel() + { + __ASSERT_ALWAYS(iComm->iBca!=NULL, NetUtilPanic(ENuPanic_NotConstructed)); + iComm->iBca->CancelWrite(); + } + +void CCommWriterV2::CompleteNow(TInt aError) + { + TRequestStatus* statusPtr=&iStatus; + User::RequestComplete(statusPtr,aError); + } + +// + +CCommReaderV2::CCommReaderV2(MCommV2* aComm, TInt aPriority) + : CActive(aPriority), iComm(aComm) + { + CActiveScheduler::Add(this); + } + +CCommReaderV2::~CCommReaderV2() + { + Cancel(); + } + +void CCommReaderV2::RunL() + { + iComm->CommReadCancel(); + iComm->CommReadComplete(iStatus.Int()); + } + +void CCommReaderV2::DoCancel() + { + __ASSERT_ALWAYS(iComm->iBca!=NULL, NetUtilPanic(ENuPanic_NotConstructed)); + iComm->iBca->CancelRead(); + } + +void CCommReaderV2::CompleteNow(TInt aError) + { + TRequestStatus* statusPtr=&iStatus; + User::RequestComplete(statusPtr,aError); + } +