adaptationlayer/modematadaptation/modematext_dll/src/modemat_atext.cpp
changeset 0 63b37f68c1ce
child 5 8ccc39f9d787
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/modematadaptation/modematext_dll/src/modemat_atext.cpp	Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,429 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 "modemat_atext.h"
+#include "modemattrace.h"
+
+const TInt KMaxCommandCount(160);
+
+const char* const atCommands[] =
+    {
+    ("ATS0"),
+    ("ATS1"),
+    ("ATS2"),
+    ("ATS3"),
+    ("ATS4"),
+    ("ATS5"),
+    ("ATS6"),
+    ("ATS7"),
+    ("ATS8"),
+    ("ATS10"),
+    ("ATS12"),
+    ("ATS25"),
+    ("ATE"),
+    ("ATE0"),
+    ("ATE1"),
+    ("ATQ"),
+    ("ATQ0"),
+    ("ATQ1"),
+    ("ATV"),
+    ("ATV0"),
+    ("ATV1"),
+    ("ATX"),
+    ("ATX0"),
+    ("ATX1"),
+    ("ATX2"),
+    ("ATX3"),
+    ("ATX4"),
+    ("ATX5"),
+    ("AT&C"),
+    ("AT&C0"),
+    ("AT&C1"),
+    ("AT&D"),
+    ("AT&D0"),
+    ("AT&D1"),
+    ("AT&D2"),
+    ("AT&D3"),
+    ("AT+IFC"),
+    ("AT+ILRR"),
+    ("ATS25"),
+    ("AT&S"),
+    ("AT&S0"),
+    ("AT&S1"),
+    ("AT&K"),
+    ("AT&K0"),
+    ("AT&K3"),
+    ("AT&K4"),
+    ("ATZ"),
+    ("ATZ0"),
+    ("ATZ1"),
+    ("AT&F"),
+    ("AT&F0"),
+    ("ATI"), //ati0-255 accepted
+    ("AT+GMI"),
+    ("AT+GMM"),
+    ("AT+GMR"),
+    ("AT+GSN"),
+    ("AT+GCAP"),
+    ("AT&V"),
+    ("AT&V0"),
+    ("AT&V1"),
+    ("AT&V2"),
+    ("AT&W"),
+    ("AT&W0"),
+    ("AT&W1"),
+    ("AT&Y"),
+    ("AT&Y0"),
+    ("AT&Y1"),
+    ("AT+CGMI"),
+    ("AT+CGMM"),
+    ("AT+CGMR"),
+    ("AT+CGSN"),
+    ("AT+CSCS"),
+    ("AT+CIMI"),
+    ("AT+WS46"),
+    ("ATD"),
+    ("ATA"),
+    ("ATH"),
+    ("ATH0"),
+    ("ATO"),
+    ("ATO0"),
+    ("ATT"),
+    ("ATP"),
+    ("AT+DS"),
+    ("AT+DR"),
+    ("ATB"),
+    ("ATB0"),
+    ("ATB1"),
+    ("ATB2"),
+    ("AT+CSTA"),
+    ("AT+CHUP"),
+    ("AT+CR"),
+    ("AT+CEER"),
+    ("AT+CRC"),
+    ("AT+CSNS"),
+    ("AT+CVHU"),
+    ("AT+CREG"),
+    ("AT+COPS"),
+    ("AT+CLIP"),
+    ("AT+CLIR"),
+    ("AT+COLP"),
+    ("AT+CCFC"),
+    ("AT+CCWA"),
+    ("AT+CHLD"),
+    ("AT+CLCC"),
+    ("AT+CSSN"),
+    ("AT+CPAS"),
+    ("AT+CSQ"),
+    ("AT+CMEE"),
+    ("AT+CSMS"),
+    ("AT+CPMS"),
+    ("AT+CMGF"),
+    ("AT+CSCA"),
+    ("AT+CSMP"),
+    ("AT+CSDH"),
+    ("AT+CSAS"),
+    ("AT+CRES"),
+    ("AT+CMGS"),
+    ("AT+CMGC"),
+    ("AT+CMMS"),
+    ("AT+CGSMS"),
+    ("AT+FCLASS"),
+    ("AT+VTS"),
+    ("AT+CGDCONT"),
+    ("AT+CGEQREQ"),
+    ("AT+CGEQMIN"),
+    ("AT+CGEQNEG"),
+    ("AT+CGREG"),
+    ("AT+CGATT"),
+    ("AT+CGACT"),
+    ("AT+CGDATA"),
+    ("AT+CGDSCONT"),
+    ("AT+CGTFT"),
+    ("AT+CGCMOD"),
+    ("AT+CBCIE"),
+    ("AT*NAUTODISC"),
+    ("AT*NRLP"),
+    ("AT*NSYNCSEQ"),
+    ("AT*NVTMODE"),
+    ("AT*NTRACE"),
+    ("AT*NNET"),
+    ("AT*NOKIAFBUS"),
+    ("AT*NPTTLOGIN"),
+    ("AT*NPTTLOGOFF"),
+    ("AT*NPTTATTACH"),
+    ("AT*NPTTDETACH"),
+    ("AT*NPTT"),
+    ("AT*NTESTSYSTEM"),
+    ("AT*NLOGGING"),
+    ("AT*NBALOCK"),
+    ("AT*NCHLOCK"),
+    ("AT*NCELLBARR"),
+    ("AT*NEOTD"),
+    ("AT*NTESTAUDIO"),
+    ("AT*NSECLOCK"),
+    ("AT*NSYSLOCK"),
+    ("AT*NUMAMODE"),
+    ("AT*NSMSROUTE"),
+    ("AT"),
+    ("LAST")
+    };
+ const TInt KPartLength = KDefaultCmdBufLength;
+ const TInt KPackets = 10;
+
+_LIT8(KATDCommand,"ATD");
+_LIT8(KATICommand,"ATI");
+_LIT8(KLastCommand,"LAST");
+
+
+TPtrC8 CModemATExt::GetAtCommand( TInt aNumber )  //list of supported commands for this plugin
+    {
+    C_TRACE((_L("CModemATExt::GetAtCommand(%d)"), aNumber));
+    const TUint8 **keys = (const TUint8**) atCommands;
+    TPtrC8 keyword( aNumber < KMaxCommandCount ? keys[ aNumber ] : keys[ KMaxCommandCount - 1 ] );
+    return keyword;
+    }
+
+CModemATExt* CModemATExt::NewL()
+    {
+    C_TRACE((_L("CModemATExt::NewL")));
+    CModemATExt* self = new (ELeave) CModemATExt();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CModemATExt::~CModemATExt()
+    {
+    C_TRACE((_L("CModemATExt::~CModemATExt()")));
+    if (iReplyBuffer) 
+        {
+        delete iReplyBuffer;
+        iReplyBuffer = NULL;
+        }
+    
+     if(iUnsolicitedBuffer) 
+         {
+         delete iUnsolicitedBuffer;
+         iUnsolicitedBuffer = NULL;
+         } 
+    if( iCommandBuf ) 
+         {
+         delete iCommandBuf;
+         iCommandBuf = NULL;
+         }
+    iRModemAt.Disconnect();
+    }
+
+TBool CModemATExt::IsCommandSupported( const TDesC8& aCmd)
+    {
+    C_TRACE((_L("CModemATExt::IsCommandSupported")));
+    DUMP_MESSAGE((aCmd));
+
+    if(aCmd.Find( KATDCommand )!=KErrNotFound)  
+        {
+        C_TRACE((_L("ATD")));
+        return ETrue;
+        }
+    if(aCmd.Find(KATICommand)!=KErrNotFound) 
+        {
+        C_TRACE((_L("ATI")));
+        return ETrue;
+        }
+    for ( TInt i = 0; i < KMaxCommandCount; i++ ) 
+        {
+        C_TRACE((_L("round %d"),i));
+        if( GetAtCommand(i).Find(KLastCommand) != KErrNotFound) 
+            {
+            // All messages have been searched so the command is not supported
+            C_TRACE((_L("********* COMMAND IS NOT SUPPORTED ********* ")));
+            DUMP_MESSAGE(aCmd);
+            return EFalse;
+            }
+        
+        if(aCmd.Find(GetAtCommand(i))!=KErrNotFound)  
+            {
+            //just command
+            C_TRACE((_L("Command"),i));
+            if(aCmd.Length()==GetAtCommand(i).Length())
+                {
+                C_TRACE((_L("Ok"),i));
+                return ETrue;
+                }
+            
+            if(aCmd.Length()>GetAtCommand(i).Length()) //setting command 
+                {
+                C_TRACE((_L("Setting")));
+                if( aCmd[GetAtCommand(i).Length()] == '=' ||
+                   aCmd[GetAtCommand(i).Length()] == '?' )
+                   {
+                    C_TRACE((_L("Ok"),i));
+                   return ETrue;
+                   }
+                }
+            }
+        }
+    C_TRACE((_L("return EFalse")));
+    return EFalse; 
+    }
+
+void CModemATExt::HandleCommand( const TDesC8& aCmd, RBuf8& aReply, TBool aReplyNeeded )
+    {
+    C_TRACE((_L("CModemATExt::HandleCommand()" )));
+    DUMP_MESSAGE(aCmd);
+
+    iReply = &aReply;
+    iReplyNeeded = aReplyNeeded;
+    if( iCommandBuf ) 
+         {
+         delete iCommandBuf;
+         iCommandBuf = NULL;
+         }
+    iCommandBuf = HBufC8::New( aCmd.Length() + 1 );
+    TPtr8 ptr = iCommandBuf->Des();
+    ptr.Append( aCmd );
+    ptr.Append( iCarriageReturn );
+    iRModemAt.HandleATCommand( ptr, iReplyPtr );
+    }
+
+void CModemATExt::HandleCommandCancel()
+    {
+    C_TRACE((_L("CModemATExt::HandleCommandCancel()")));
+    iRModemAt.HandleATCommandCancel();
+    }
+
+TInt CModemATExt::NextReplyPartLength()
+    {
+    C_TRACE((_L("CModemATExt::NextReplyPartLength()")));
+    return Min( iReplyPtr.Length(), KPartLength);
+    }
+
+TInt CModemATExt::GetNextPartOfReply( RBuf8& aNextReply )
+    {
+    C_TRACE((_L("CModemATExt::GetNextPartOfReply()")));
+    aNextReply.Create(iReplyPtr,KPartLength);
+    iReplyPtr.Delete(0,KPartLength);
+    return KErrNone;
+    }
+
+void CModemATExt::ReceiveUnsolicitedResult()
+    {
+    C_TRACE((_L("CModemATExt::ReceiveUnsolicitedResult()")));
+    iRModemAt.ReceiveUnsolicitedResult(iUnsolicitedPtr);
+    }
+
+void CModemATExt::ReceiveUnsolicitedResultCancel()
+    {
+    C_TRACE((_L("CModemATExt::ReceiveUnsolicitedResultCancel")));
+    iRModemAt.ReceiveUnsolicitedResultCancel();
+    }
+
+TBool CModemATExt::HandleEditorModeInput( const TDesC8& /*aInput*/,
+                                                RBuf8& /*aReply*/,
+                                                TBool& /*aEchoOn*/)
+    {
+    C_TRACE((_L("CModemATExt::HandleEditorModeInput()")));
+    return EFalse;  //commands are execute commands, this function is newer called
+    }
+
+void CModemATExt::ReportNvramStatusChange( const TDesC8& /*aNvram*/ ) 
+    {
+    C_TRACE((_L("CModemATExt::ReportNvramStatusChange()")));
+    //Ignored in this plugin
+    }
+
+
+CModemATExt::CModemATExt() : 
+    iReplyBuffer(NULL), 
+    iReplyPtr(0, 0), 
+    iUnsolicitedPtr(0, 0), 
+    iUnsolicitedBuffer(NULL),
+    iReply(NULL),
+    iReplyNeeded(EFalse)
+    {
+    C_TRACE((_L("CModemATExt::CModemATExt()")));
+    }
+     
+void CModemATExt::ConstructL()
+    {
+    C_TRACE((_L("CModemATExt::ConstructL()")));
+    iReplyBuffer = HBufC8::NewL( KDefaultCmdBufLength * KPackets ); 
+    iReplyPtr.Set( iReplyBuffer->Des() );
+    iUnsolicitedBuffer = HBufC8::NewL(KDefaultCmdBufLength);
+    }
+
+void CModemATExt::ReportConnectionName( const TDesC8& aName ) 
+    {
+    C_TRACE((_L("CModemATExt::ReportConnectionName()")));
+    DUMP_MESSAGE((aName));
+    iName.Copy(aName);
+    iRModemAt.Connect(EATExtPlugin, iName, this);
+    }
+
+void CModemATExt::HandleATCommandCompleted( TInt aErr ) 
+    {
+    C_TRACE((_L("CModemATExt::HandleATCommandCompleted()")));
+    
+    if(iReplyNeeded) 
+        {
+        C_TRACE((_L("Reply needed")));
+        iReply->Create( iReplyPtr,KPartLength );
+        }
+    
+    iReplyPtr.Delete(0, KPartLength);
+    C_TRACE((_L("Error status %d"),aErr));
+    
+    if( aErr == KErrNone) 
+        {
+        C_TRACE((_L("No errors")));
+        HandleCommandCompleted(aErr, EReplyTypeOk);
+        } 
+    else 
+        {
+        C_TRACE((_L("Reply Error")));
+        HandleCommandCompleted(aErr, EReplyTypeError);
+        }
+    }
+
+void CModemATExt::HandleUnsolicitedResultReceived( TInt /*aErr*/ )
+    {
+    C_TRACE((_L("CModemATExt::HandleUnsolicitedResultReceived")));
+    SendUnsolicitedResult( iUnsolicitedPtr );
+    }
+
+void CModemATExt::HandleSignalIndication( TInt /*aErr*/ )
+    {
+    C_TRACE((_L("CModemATExt::HandleSignalIndication")));
+    //COMMON plugin handles signal indications
+    }
+
+void CModemATExt::ReportExternalHandleCommandError()
+    {
+    C_TRACE((_L("CModemATExt::ReportExternalHandleCommandError()")));
+    //external error occurred, cancel AT-command
+    iRModemAt.HandleATCommandCancel();
+    }
+
+void CModemATExt::HandleCommandModeChanged( TInt /*aErr*/, TCommandMode /*aMode*/ )
+    {
+    C_TRACE((_L("CModemATExt::HandleCommandModeChanged()")));
+    //COMMON plugin handles mode change requests
+    }
+//  End of File