diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserverplugins/multimodetsy/hayes/ATIO.CPP --- a/telephonyserverplugins/multimodetsy/hayes/ATIO.CPP Mon May 03 13:37:20 2010 +0300 +++ b/telephonyserverplugins/multimodetsy/hayes/ATIO.CPP Thu May 06 15:10:38 2010 +0100 @@ -1,534 +1,534 @@ -// 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: -// Serial IO Functions -// -// - -#include "ATIO.H" -#include "mSLOGGER.H" -#include "ATERROR.H" - -// -// CCompletionEntry -// -CCompletionEntry* CCompletionEntry::NewL(CCommChatString* aCs, CATBase* aAtCommand) - { - return new(ELeave) CCompletionEntry(aCs,aAtCommand); - } - -CCompletionEntry::CCompletionEntry(CCommChatString* aCs, CATBase* aAtCommand) : iCs(aCs), iAtCommand(aAtCommand) - {} - -CCompletionEntry::~CCompletionEntry() - {} - -// -// CATIo -// -CATIO* CATIO::NewL(TFileName& aCsy, TName& aPort,TPortAccess& aPortAccess) - { - CATIO* atIo=new(ELeave) CATIO(aPortAccess); - CleanupStack::PushL(atIo); - atIo->ConstructL(aCsy,aPort); - CleanupStack::Pop(); - LOGTEXT2(_L8("CATIO::NewL returns 0x%x"),atIo); - return atIo; - } - -CATIO::CATIO(TPortAccess& aPortAccess) - : iPortAccess(aPortAccess) - { - iExpectList.SetOffset(_FOFF(CCompletionEntry,iLink)); - } - -void CATIO::ConstructL(TFileName& aCsy, TName& aPort) - { - iCsy=aCsy; - CommConstructL(KCommReadPriority,KCommWritePriority); - iChat = new (ELeave) CCommChatter(this, KChatterPriority); - iChat->CreateL(KChatBufferSize); - - { // Braces scope the lifetime of tmpCsy and tmpPort - TBuf8 tmpCsy; - TBuf8 tmpPort; - tmpCsy.Copy(aCsy); // Convert parameter to 8 bit string - tmpPort.Copy(aPort); // Convert parameter to 8 bit string - LOGTEXTREL3(_L8("CATIO::ConstructL Attempting open csy:%S port:%S"),&tmpCsy,&tmpPort); - } - TInt ret = CommOpen(aCsy, aPort, ECommShared); - if(ret == KErrAccessDenied || ret == KErrInUse) - iPortAccess=EPortAccessDenied; - else - (void)User::LeaveIfError(ret); - LOGTEXTREL(_L8("CATIO::ConstructL Open successful")); - - iChatStringFound= new(ELeave) CArrayFixFlat(5); - } - -CATIO::~CATIO() - { - delete iChatStringFound; - delete iChat; - } - -TInt CATIO::ConfigurePort(TCommConfig aConfiguration) - { - if (iPortAccess==EPortAccessAllowed) - { - TInt ret; - TCommConfig cbuf; - TCommConfigV01 &cfg=cbuf(); - iCommPort.Config(cbuf); // Get the Configuration - - TCommConfigV01 &newCfg=aConfiguration(); - cfg.iRate=newCfg.iRate; - cfg.iDataBits=newCfg.iDataBits; - cfg.iStopBits=newCfg.iStopBits; - cfg.iParity=newCfg.iParity; - cfg.iHandshake=newCfg.iHandshake; - ret = iCommPort.SetConfig(cbuf); // Set the Configuration - if(ret!=KErrNone) - { - LOGTEXT2(_L8("CATIO:\tError %d configuring port"),ret); - return ret; - } - } - return KErrNone; - } - -TInt CATIO::GetPortShutdownTimeout() - { - if (iPortAccess==EPortAccessAllowed) - { - TCommConfig2 cbuf; - TCommConfigV02& cfg=cbuf(); - iCommPort.Config(cbuf); // Get the Configuration - - return (cfg.iTxShutdownTimeout); - } - else - return (0); - } - -TInt CATIO::SetPortShutdownTimeout(TInt aTimeout) - { - if (iPortAccess==EPortAccessAllowed) - { - TCommConfig2 cbuf; - TCommConfigV02 &cfg=cbuf(); - iCommPort.Config(cbuf); // Get the Configuration - - cfg.iTxShutdownTimeout = aTimeout; - return (iCommPort.SetConfig(cbuf)); // Set the Configuration - } - else - return KErrAccessDenied; - } - -void CATIO::Start(CATBase* aCompletionClass) - { - CommReadReady(); - StartWrite(aCompletionClass); - } - -void CATIO::StartWrite(CATBase* aCompletionClass) - { - if (iPortAccess==EPortAccessAllowed) - { - iWriteCommand=aCompletionClass; - CommWriteReady(); - iWritePending=ETrue; - } - } - -TPtrC8 CATIO::Buffer() const - { - return iChat->Buffer(); - } - -TInt CATIO::BufferFindF(const TDesC8& aDes) const - { - return iChat->Buffer().FindF(aDes); - } - -TPtrC8 CATIO::CurrentLine() const - { - return iChat->CurrentLine(); - } - -void CATIO::ClearBuffer() - { - if(!iPreserveBuffer) - iChat->ClearBuffer(); - } - -void CATIO::ClearCurrentLine() - { - iChat->ClearCurrentLine(); - } - -void CATIO::CommReadComplete(TInt aStatus) - { - LOGTEXT(_L8("Read Completion")); - __ASSERT_ALWAYS(iReadPending,Panic(EATCommand_IllegalCompletionReadNotExpected)); - if (aStatus==KErrCommsLineFail) - { - if (iSecondChanceForCommsError++!=1) - aStatus=KErrNone; // only signal error if get 2 KErrCommsLineFail's in succession - else - iSecondChanceForCommsError=0; - } - if (aStatus!=KErrNone) - { - SignalCommandsWithError(aStatus); - return; - } - iReadPending = EFalse; - TRAPD(ret,ProcessReadCharsL()); - if(ret!=KErrNone) - { - Cancel(); // This error cannot be related to a command - so they'll all be cleaned up. - iChat->DeleteAllAndStop(); - } - } - -void CATIO::SignalCommandsWithError(TInt aStatus) -// -// Complete all current AT commands with the error and call the error handler -// - { - LOGTEXT2(_L8("Received an error of %d"),aStatus); - Cancel(); - CCompletionEntry* ce; - TDblQueIter iter(iExpectList); - while (ce = iter, ce!=NULL) - { - ce->iAtCommand->GenericEventSignal(EReadCompletion,aStatus); - iter.SetToLast(); - CCompletionEntry* removeSimilar; - while (removeSimilar=iter--, removeSimilar!=ce) - { - if(removeSimilar && removeSimilar->iAtCommand==ce->iAtCommand) - { - iChat->RemoveString(removeSimilar->iCs); - delete removeSimilar->iCs; - removeSimilar->iLink.Deque(); - delete removeSimilar; - } - } - iChat->RemoveString(ce->iCs); - delete ce->iCs; - ce->iLink.Deque(); - delete ce; - iter.SetToFirst(); - } - // Reset TSY status, complete notifications and re-add some expect strings - iErrorHandler->CleanUp(aStatus); - } - -void CATIO::ProcessReadCharsL() - { - LOGTEXT2(_L8("Received %d"),iRxBuf.Length()); - LOGTEXTREL2(_L8("Rx:\t%S"),&iRxBuf); - - TBool hitFlag=EFalse; - TInt len; - - for (iRxBufOffset=0; iRxBufOffsetAddCharL(iRxBuf[iRxBufOffset]); -// Check for hits and one up-call per hit NOW - if((len=iChatStringFound->Count())>0) - { - for(TInt i=0;i iter(iExpectList); - TBool aFoundFlag=EFalse; - while (ce = iter++, ce!=NULL) - { - if(ce->iCs==iChatStringFound->At(i)) - { - iCurrentFoundChatString=ce->iCs; - ce->iAtCommand->GenericEventSignal(EReadCompletion,KErrNone); - aFoundFlag=ETrue; - break; - } - } - if(!aFoundFlag) - { - LOGTEXT(_L8("Internal Error - Chat String signalled, but not found")); - User::Leave(KErrGeneral); - } - } - iChatStringFound->Delete(0,iChatStringFound->Count()); - } - } - if(hitFlag) - { - //iReadPending=EFalse; - Read(); // Queue Another... - } - else - { - iReadPending = ETrue; - CommReadOneOrMore(iRxBuf); - } - } - -void CATIO::SetPreserveBufferFlag(TBool aFlg) -// -// Set Preserve Buffer Flag -// - { - iPreserveBuffer=aFlg; - } - -CCommChatString* CATIO::FoundChatString() - { - return iCurrentFoundChatString; - } - -CCommChatString* CATIO::AddExpectString(CATBase* aATBase, const TDesC8& aString, TBool aPartLine) - { - CCommChatString* cs=NULL; - - TRAPD(err,cs=DoAddExpectStringL(aATBase,aString,aPartLine)); - if(err==KErrNone) - LOGTEXT2(_L8("CATIO::AddExpectString added %S"),&aString); - else - { - cs=NULL; - LOGTEXT2(_L8("CATIO::AddExpectString FAILED TO ADD %S"),&aString); - } - return cs; - } - -CCommChatString* CATIO::DoAddExpectStringL(CATBase* aATBase, const TDesC8& aString, TBool aPartLine) - { - CCommChatString* cs=iChat->AddStringL(aString, aPartLine); - CCompletionEntry* completionEntry=CCompletionEntry::NewL(cs,aATBase); - iExpectList.AddLast(*completionEntry); - return cs; - } - - -void CATIO::RemoveExpectString(CCommChatString* aExpectString) - { -// Find the AT Command to complete - CCompletionEntry* ce; - TDblQueIter iter(iExpectList); - while (ce = iter++, ce!=NULL) - { - if(ce->iCs==aExpectString) - { - iChat->RemoveString(ce->iCs); - delete ce->iCs; - ce->iLink.Deque(); - delete ce; - break; - } - } - } - -void CATIO::RemoveExpectStrings(CATBase* aATBase) - { -// Find the AT Command to complete - CCompletionEntry* ce; - TDblQueIter iter(iExpectList); - while (ce = iter++, ce!=NULL) - { - if(ce->iAtCommand==aATBase) - { - iChat->RemoveString(ce->iCs); - delete ce->iCs; - ce->iLink.Deque(); - delete ce; - } - } - } - -void CATIO::CommWriteComplete(TInt aStatus) - { - LOGTEXT(_L8("Comm Write Completion")); - iChat->StopTimer(); - __ASSERT_ALWAYS(iWritePending,Panic(EATCommand_IllegalCompletionWriteNotExpected)); -// if(!iWritePending) -// aStatus=KErrIllegalWriteComplete; // No Write Queued! - iWritePending=EFalse; - iWriteCommand->GenericEventSignal(EWriteCompletion,aStatus); - } - -void CATIO::ChatStringMatchL(CCommChatString* aCs) - { - iStringFound=ETrue; - iChatStringFound->AppendL(aCs); - } - -void CATIO::ChatTimeout() - { - LOGTEXT(_L8("Chat Time-out Completion")); - if(iWaitTimerPending) - { - iWaitTimerPending=EFalse; - iTimeOutCommand->GenericEventSignal(ETimeOutCompletion,KErrNone); - } - else - Panic(EATCommand_IllegalWaitCompletion); - } - -void CATIO::SetTimeOut(CATBase* aCompletionClass, TUint aTimePeriodMillisec) - { - iTimeOutCommand=aCompletionClass; - iChat->StartTimer(aTimePeriodMillisec*1000); - iWaitTimerPending=ETrue; - } - -void CATIO::Read() - { - if (iPortAccess==EPortAccessAllowed && iReadPending==FALSE) - { - iReadPending=ETrue; - iStringFound=EFalse; - CommReadOneOrMore(iRxBuf); - iRxBufOffset = 0; - LOGTEXT(_L8("Queued a Read")); - } - } - -void CATIO::Write(CATBase* aCompletionClass, const TDesC8& aString) - { - if (iPortAccess==EPortAccessAllowed) - { - ClearBuffer(); // assume previous responses fully processed - iWriteCommand=aCompletionClass; - iWritePending=ETrue; - CommWrite(aString); - if (aString.Length() > 350) - { - LOGTEXT2(_L8("CATIO:\taString too big! Length:%d"), aString.Length()); - } - else - { - LOGTEXTREL2(_L8("Tx:\t%S"),&aString); - } - LOGTEXT(_L8("Queued a Transmission")); - } - } - -TBool CATIO::ReadPending() - { - return iReadPending; - } - -void CATIO::Disconnect() - { - if (iPortAccess == EPortAccessAllowed) - { - TCommConfig cbuf; - TCommConfigV01 &cfg=cbuf(); - iCommPort.Config(cbuf); - cfg.iHandshake = KConfigFreeRTS | KConfigFreeDTR; - TInt ret=iCommPort.SetConfig(cbuf); - if (ret == KErrNone) - iCommPort.SetSignalsToSpace(KSignalRTS | KSignalDTR); - } - - CommClose(); - - iPortAccess = EPortAccessDenied; - } - -void CATIO::Cancel() - { - LOGTEXT(_L8("CATIO:\tCancel called")); - CommCancel(); - iReadPending = EFalse; - iWritePending = EFalse; - iChat->StopTimer(); - } - -void CATIO::ReadCancel() - { - LOGTEXT(_L8("CATIO:\tReadCancel called")); - CommReadCancel(); - iReadPending = EFalse; - } - -void CATIO::WriteAndTimerCancel(CATBase* aATBase) - { - if (aATBase==iWriteCommand) - { - CommWriteCancel(); - } - if (aATBase==iTimeOutCommand) - { - iChat->StopTimer(); - } - } - - -void CATIO::DropDtr() - { - if (iPortAccess==EPortAccessAllowed) - { - LOGTEXT(_L8("CATIO::DropDtr Dropping DTR")); - iCommPort.SetSignals(0,KSignalDTR); - } - } - - -void CATIO::RaiseDTR() - { - if (iPortAccess==EPortAccessAllowed) - { - LOGTEXT(_L8("CATIO::RaiseDTR Raising DTR")); - iCommPort.SetSignals(KSignalDTR,0); - } - } - -void CATIO::ResetReadAndWriteBuffers() - { - iCommPort.ResetBuffers(); - } - -TInt CATIO::GetSizeOfRxBuffer() - { - return iCommPort.QueryReceiveBuffer(); - } - -TUint CATIO::Signals() - { - return iCommPort.Signals(); - } - -void CATIO::DropRTS() - { - if (iPortAccess==EPortAccessAllowed) - { - LOGTEXT(_L8("Dropping RTS")); - iCommPort.SetSignals(0,KSignalRTS); - } - } - -void CATIO::RaiseRTS() - { - if (iPortAccess==EPortAccessAllowed) - { - LOGTEXT(_L8("Raising RTS")); - iCommPort.SetSignals(KSignalRTS,0); - } - } +// 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: +// Serial IO Functions +// +// + +#include "ATIO.H" +#include "mSLOGGER.H" +#include "ATERROR.H" + +// +// CCompletionEntry +// +CCompletionEntry* CCompletionEntry::NewL(CCommChatString* aCs, CATBase* aAtCommand) + { + return new(ELeave) CCompletionEntry(aCs,aAtCommand); + } + +CCompletionEntry::CCompletionEntry(CCommChatString* aCs, CATBase* aAtCommand) : iCs(aCs), iAtCommand(aAtCommand) + {} + +CCompletionEntry::~CCompletionEntry() + {} + +// +// CATIo +// +CATIO* CATIO::NewL(TFileName& aCsy, TName& aPort,TPortAccess& aPortAccess) + { + CATIO* atIo=new(ELeave) CATIO(aPortAccess); + CleanupStack::PushL(atIo); + atIo->ConstructL(aCsy,aPort); + CleanupStack::Pop(); + LOGTEXT2(_L8("CATIO::NewL returns 0x%x"),atIo); + return atIo; + } + +CATIO::CATIO(TPortAccess& aPortAccess) + : iPortAccess(aPortAccess) + { + iExpectList.SetOffset(_FOFF(CCompletionEntry,iLink)); + } + +void CATIO::ConstructL(TFileName& aCsy, TName& aPort) + { + iCsy=aCsy; + CommConstructL(KCommReadPriority,KCommWritePriority); + iChat = new (ELeave) CCommChatter(this, KChatterPriority); + iChat->CreateL(KChatBufferSize); + + { // Braces scope the lifetime of tmpCsy and tmpPort + TBuf8 tmpCsy; + TBuf8 tmpPort; + tmpCsy.Copy(aCsy); // Convert parameter to 8 bit string + tmpPort.Copy(aPort); // Convert parameter to 8 bit string + LOGTEXTREL3(_L8("CATIO::ConstructL Attempting open csy:%S port:%S"),&tmpCsy,&tmpPort); + } + TInt ret = CommOpen(aCsy, aPort, ECommShared); + if(ret == KErrAccessDenied || ret == KErrInUse) + iPortAccess=EPortAccessDenied; + else + (void)User::LeaveIfError(ret); + LOGTEXTREL(_L8("CATIO::ConstructL Open successful")); + + iChatStringFound= new(ELeave) CArrayFixFlat(5); + } + +CATIO::~CATIO() + { + delete iChatStringFound; + delete iChat; + } + +TInt CATIO::ConfigurePort(TCommConfig aConfiguration) + { + if (iPortAccess==EPortAccessAllowed) + { + TInt ret; + TCommConfig cbuf; + TCommConfigV01 &cfg=cbuf(); + iCommPort.Config(cbuf); // Get the Configuration + + TCommConfigV01 &newCfg=aConfiguration(); + cfg.iRate=newCfg.iRate; + cfg.iDataBits=newCfg.iDataBits; + cfg.iStopBits=newCfg.iStopBits; + cfg.iParity=newCfg.iParity; + cfg.iHandshake=newCfg.iHandshake; + ret = iCommPort.SetConfig(cbuf); // Set the Configuration + if(ret!=KErrNone) + { + LOGTEXT2(_L8("CATIO:\tError %d configuring port"),ret); + return ret; + } + } + return KErrNone; + } + +TInt CATIO::GetPortShutdownTimeout() + { + if (iPortAccess==EPortAccessAllowed) + { + TCommConfig2 cbuf; + TCommConfigV02& cfg=cbuf(); + iCommPort.Config(cbuf); // Get the Configuration + + return (cfg.iTxShutdownTimeout); + } + else + return (0); + } + +TInt CATIO::SetPortShutdownTimeout(TInt aTimeout) + { + if (iPortAccess==EPortAccessAllowed) + { + TCommConfig2 cbuf; + TCommConfigV02 &cfg=cbuf(); + iCommPort.Config(cbuf); // Get the Configuration + + cfg.iTxShutdownTimeout = aTimeout; + return (iCommPort.SetConfig(cbuf)); // Set the Configuration + } + else + return KErrAccessDenied; + } + +void CATIO::Start(CATBase* aCompletionClass) + { + CommReadReady(); + StartWrite(aCompletionClass); + } + +void CATIO::StartWrite(CATBase* aCompletionClass) + { + if (iPortAccess==EPortAccessAllowed) + { + iWriteCommand=aCompletionClass; + CommWriteReady(); + iWritePending=ETrue; + } + } + +TPtrC8 CATIO::Buffer() const + { + return iChat->Buffer(); + } + +TInt CATIO::BufferFindF(const TDesC8& aDes) const + { + return iChat->Buffer().FindF(aDes); + } + +TPtrC8 CATIO::CurrentLine() const + { + return iChat->CurrentLine(); + } + +void CATIO::ClearBuffer() + { + if(!iPreserveBuffer) + iChat->ClearBuffer(); + } + +void CATIO::ClearCurrentLine() + { + iChat->ClearCurrentLine(); + } + +void CATIO::CommReadComplete(TInt aStatus) + { + LOGTEXT(_L8("Read Completion")); + __ASSERT_ALWAYS(iReadPending,Panic(EATCommand_IllegalCompletionReadNotExpected)); + if (aStatus==KErrCommsLineFail) + { + if (iSecondChanceForCommsError++!=1) + aStatus=KErrNone; // only signal error if get 2 KErrCommsLineFail's in succession + else + iSecondChanceForCommsError=0; + } + if (aStatus!=KErrNone) + { + SignalCommandsWithError(aStatus); + return; + } + iReadPending = EFalse; + TRAPD(ret,ProcessReadCharsL()); + if(ret!=KErrNone) + { + Cancel(); // This error cannot be related to a command - so they'll all be cleaned up. + iChat->DeleteAllAndStop(); + } + } + +void CATIO::SignalCommandsWithError(TInt aStatus) +// +// Complete all current AT commands with the error and call the error handler +// + { + LOGTEXT2(_L8("Received an error of %d"),aStatus); + Cancel(); + CCompletionEntry* ce; + TDblQueIter iter(iExpectList); + while (ce = iter, ce!=NULL) + { + ce->iAtCommand->GenericEventSignal(EReadCompletion,aStatus); + iter.SetToLast(); + CCompletionEntry* removeSimilar; + while (removeSimilar=iter--, removeSimilar!=ce) + { + if(removeSimilar && removeSimilar->iAtCommand==ce->iAtCommand) + { + iChat->RemoveString(removeSimilar->iCs); + delete removeSimilar->iCs; + removeSimilar->iLink.Deque(); + delete removeSimilar; + } + } + iChat->RemoveString(ce->iCs); + delete ce->iCs; + ce->iLink.Deque(); + delete ce; + iter.SetToFirst(); + } + // Reset TSY status, complete notifications and re-add some expect strings + iErrorHandler->CleanUp(aStatus); + } + +void CATIO::ProcessReadCharsL() + { + LOGTEXT2(_L8("Received %d"),iRxBuf.Length()); + LOGTEXTREL2(_L8("Rx:\t%S"),&iRxBuf); + + TBool hitFlag=EFalse; + TInt len; + + for (iRxBufOffset=0; iRxBufOffsetAddCharL(iRxBuf[iRxBufOffset]); +// Check for hits and one up-call per hit NOW + if((len=iChatStringFound->Count())>0) + { + for(TInt i=0;i iter(iExpectList); + TBool aFoundFlag=EFalse; + while (ce = iter++, ce!=NULL) + { + if(ce->iCs==iChatStringFound->At(i)) + { + iCurrentFoundChatString=ce->iCs; + ce->iAtCommand->GenericEventSignal(EReadCompletion,KErrNone); + aFoundFlag=ETrue; + break; + } + } + if(!aFoundFlag) + { + LOGTEXT(_L8("Internal Error - Chat String signalled, but not found")); + User::Leave(KErrGeneral); + } + } + iChatStringFound->Delete(0,iChatStringFound->Count()); + } + } + if(hitFlag) + { + //iReadPending=EFalse; + Read(); // Queue Another... + } + else + { + iReadPending = ETrue; + CommReadOneOrMore(iRxBuf); + } + } + +void CATIO::SetPreserveBufferFlag(TBool aFlg) +// +// Set Preserve Buffer Flag +// + { + iPreserveBuffer=aFlg; + } + +CCommChatString* CATIO::FoundChatString() + { + return iCurrentFoundChatString; + } + +CCommChatString* CATIO::AddExpectString(CATBase* aATBase, const TDesC8& aString, TBool aPartLine) + { + CCommChatString* cs=NULL; + + TRAPD(err,cs=DoAddExpectStringL(aATBase,aString,aPartLine)); + if(err==KErrNone) + LOGTEXT2(_L8("CATIO::AddExpectString added %S"),&aString); + else + { + cs=NULL; + LOGTEXT2(_L8("CATIO::AddExpectString FAILED TO ADD %S"),&aString); + } + return cs; + } + +CCommChatString* CATIO::DoAddExpectStringL(CATBase* aATBase, const TDesC8& aString, TBool aPartLine) + { + CCommChatString* cs=iChat->AddStringL(aString, aPartLine); + CCompletionEntry* completionEntry=CCompletionEntry::NewL(cs,aATBase); + iExpectList.AddLast(*completionEntry); + return cs; + } + + +void CATIO::RemoveExpectString(CCommChatString* aExpectString) + { +// Find the AT Command to complete + CCompletionEntry* ce; + TDblQueIter iter(iExpectList); + while (ce = iter++, ce!=NULL) + { + if(ce->iCs==aExpectString) + { + iChat->RemoveString(ce->iCs); + delete ce->iCs; + ce->iLink.Deque(); + delete ce; + break; + } + } + } + +void CATIO::RemoveExpectStrings(CATBase* aATBase) + { +// Find the AT Command to complete + CCompletionEntry* ce; + TDblQueIter iter(iExpectList); + while (ce = iter++, ce!=NULL) + { + if(ce->iAtCommand==aATBase) + { + iChat->RemoveString(ce->iCs); + delete ce->iCs; + ce->iLink.Deque(); + delete ce; + } + } + } + +void CATIO::CommWriteComplete(TInt aStatus) + { + LOGTEXT(_L8("Comm Write Completion")); + iChat->StopTimer(); + __ASSERT_ALWAYS(iWritePending,Panic(EATCommand_IllegalCompletionWriteNotExpected)); +// if(!iWritePending) +// aStatus=KErrIllegalWriteComplete; // No Write Queued! + iWritePending=EFalse; + iWriteCommand->GenericEventSignal(EWriteCompletion,aStatus); + } + +void CATIO::ChatStringMatchL(CCommChatString* aCs) + { + iStringFound=ETrue; + iChatStringFound->AppendL(aCs); + } + +void CATIO::ChatTimeout() + { + LOGTEXT(_L8("Chat Time-out Completion")); + if(iWaitTimerPending) + { + iWaitTimerPending=EFalse; + iTimeOutCommand->GenericEventSignal(ETimeOutCompletion,KErrNone); + } + else + Panic(EATCommand_IllegalWaitCompletion); + } + +void CATIO::SetTimeOut(CATBase* aCompletionClass, TUint aTimePeriodMillisec) + { + iTimeOutCommand=aCompletionClass; + iChat->StartTimer(aTimePeriodMillisec*1000); + iWaitTimerPending=ETrue; + } + +void CATIO::Read() + { + if (iPortAccess==EPortAccessAllowed && iReadPending==FALSE) + { + iReadPending=ETrue; + iStringFound=EFalse; + CommReadOneOrMore(iRxBuf); + iRxBufOffset = 0; + LOGTEXT(_L8("Queued a Read")); + } + } + +void CATIO::Write(CATBase* aCompletionClass, const TDesC8& aString) + { + if (iPortAccess==EPortAccessAllowed) + { + ClearBuffer(); // assume previous responses fully processed + iWriteCommand=aCompletionClass; + iWritePending=ETrue; + CommWrite(aString); + if (aString.Length() > 350) + { + LOGTEXT2(_L8("CATIO:\taString too big! Length:%d"), aString.Length()); + } + else + { + LOGTEXTREL2(_L8("Tx:\t%S"),&aString); + } + LOGTEXT(_L8("Queued a Transmission")); + } + } + +TBool CATIO::ReadPending() + { + return iReadPending; + } + +void CATIO::Disconnect() + { + if (iPortAccess == EPortAccessAllowed) + { + TCommConfig cbuf; + TCommConfigV01 &cfg=cbuf(); + iCommPort.Config(cbuf); + cfg.iHandshake = KConfigFreeRTS | KConfigFreeDTR; + TInt ret=iCommPort.SetConfig(cbuf); + if (ret == KErrNone) + iCommPort.SetSignalsToSpace(KSignalRTS | KSignalDTR); + } + + CommClose(); + + iPortAccess = EPortAccessDenied; + } + +void CATIO::Cancel() + { + LOGTEXT(_L8("CATIO:\tCancel called")); + CommCancel(); + iReadPending = EFalse; + iWritePending = EFalse; + iChat->StopTimer(); + } + +void CATIO::ReadCancel() + { + LOGTEXT(_L8("CATIO:\tReadCancel called")); + CommReadCancel(); + iReadPending = EFalse; + } + +void CATIO::WriteAndTimerCancel(CATBase* aATBase) + { + if (aATBase==iWriteCommand) + { + CommWriteCancel(); + } + if (aATBase==iTimeOutCommand) + { + iChat->StopTimer(); + } + } + + +void CATIO::DropDtr() + { + if (iPortAccess==EPortAccessAllowed) + { + LOGTEXT(_L8("CATIO::DropDtr Dropping DTR")); + iCommPort.SetSignals(0,KSignalDTR); + } + } + + +void CATIO::RaiseDTR() + { + if (iPortAccess==EPortAccessAllowed) + { + LOGTEXT(_L8("CATIO::RaiseDTR Raising DTR")); + iCommPort.SetSignals(KSignalDTR,0); + } + } + +void CATIO::ResetReadAndWriteBuffers() + { + iCommPort.ResetBuffers(); + } + +TInt CATIO::GetSizeOfRxBuffer() + { + return iCommPort.QueryReceiveBuffer(); + } + +TUint CATIO::Signals() + { + return iCommPort.Signals(); + } + +void CATIO::DropRTS() + { + if (iPortAccess==EPortAccessAllowed) + { + LOGTEXT(_L8("Dropping RTS")); + iCommPort.SetSignals(0,KSignalRTS); + } + } + +void CATIO::RaiseRTS() + { + if (iPortAccess==EPortAccessAllowed) + { + LOGTEXT(_L8("Raising RTS")); + iCommPort.SetSignals(KSignalRTS,0); + } + }