--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsref/telephonyrefplugins/atltsy/atcommand/sms/src/atsmssend.cpp Tue Aug 31 16:23:08 2010 +0300
@@ -0,0 +1,335 @@
+// 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 "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:
+// @file atsmssend.cpp
+// This contains CAtSmsSend which is used to send sms message
+//
+
+//system include
+#include <etelmm.h>
+#include <ctsy/ltsy/cctsydispatchercallback.h>
+
+// user include
+#include "atsmssend.h"
+#include "mslogger.h"
+#include "ltsycommondefine.h"
+#include "atmanager.h"
+#include "commengine.h"
+#include "smsatutil.h"
+
+//Constants
+_LIT8(KSmsSendCommandPdu,"AT+CMGS=%d\r");
+_LIT8(KCMGSResponseString,"+CMGS:");
+_LIT8(KDefaultSCA,"00");
+_LIT8(KSmsEnterPduResponse,">");
+_LIT8(KSendExpectedString,"+CMGS:*");
+const TInt KLtsyOnePause = 100000;
+const TInt KLtsySendSmsWriteTimeOut = 20;
+const TInt KLtsySendSmsReadTimeOut = 30;
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::CAtSmsSend
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsSend::CAtSmsSend(CGlobalPhonemanager& aGloblePhone,
+ CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+ :CAtCommandBase(aGloblePhone,aCtsyDispatcherCallback)
+ {
+ LOGTEXT(_L8("CAtSmsSend::CAtSmsSend called"));
+ iWriteTimeOut = KLtsySendSmsWriteTimeOut;
+ iReadTimeOut = KLtsySendSmsReadTimeOut;
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::~CAtSmsSend
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsSend::~CAtSmsSend()
+ {
+ LOGTEXT(_L8("CAtSmsSend::~CAtSmsSend called"));
+ delete iCallbackTimer;
+ iCallbackTimer = NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::NewLC
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsSend* CAtSmsSend::NewLC(CGlobalPhonemanager& aGloblePhone,
+ CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+ {
+ CAtSmsSend* self = new (ELeave)CAtSmsSend(aGloblePhone,
+ aCtsyDispatcherCallback);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::NewL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+CAtSmsSend* CAtSmsSend::NewL(CGlobalPhonemanager& aGloblePhone,
+ CCtsyDispatcherCallback& aCtsyDispatcherCallback)
+ {
+ CAtSmsSend* self=CAtSmsSend::NewLC(aGloblePhone,aCtsyDispatcherCallback);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::ConstructL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::ConstructL()
+ {
+ CAtCommandBase::ConstructL();
+ //Create Timer
+ iCallbackTimer = CCallbackTimer::NewL(*this);
+ //set writing timeout
+ iWriteTimeOut = KLtsyDefaultWriteTimeOut;
+ AddExpectStringL(KSmsEnterPduResponse);
+ AddExpectStringL(KSendExpectedString);
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::StartRequest
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::StartRequest()
+ {
+ ExecuteCommand();
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::ExecuteCommand
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::ExecuteCommand()
+ {
+ LOGTEXT(_L8("CAtSmsSend::ExecuteCommand called"));
+ LOGTEXT(_L8("SendPDUMessage..."));
+
+ iMsgDataAscii.Zero();
+ TInt ret = ConfirmSca();
+ if(ret == KErrNone)
+ {
+ //Here is a SCA
+ ret = SmsAtUtil::AppendAddressToAscii(iMsgDataAscii,iSmsSendParam.iGsmServiceCentre);
+ if( ret!=KErrNone )
+ {
+ BeginTimer();
+ iCallbackVal = ret;
+ return;
+ }
+ }
+ else
+ {
+ //Here is no SCA,usign default SCA
+ iMsgDataAscii.Append(KDefaultSCA);
+ }
+ const TInt msgDataAsciiLen(iMsgDataAscii.Length());
+ // Convert PDU to ASCII
+ SmsAtUtil::AppendDataToAscii(iMsgDataAscii,iSmsSendParam.iSmsTpdu);
+ iState = ESetPDULengthComplete;
+ StartWritingPduLength();
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::StartWritingPduLength
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::StartWritingPduLength()
+ {
+ LOGTEXT(_L8("CAtSmsSend::StartWritingPduLength called"));
+ TInt pduLen = iSmsSendParam.iSmsTpdu.Length();
+ iTxBuffer.Zero();
+ iTxBuffer.Format(KSmsSendCommandPdu,pduLen);
+ ClearBuffer();
+ iPhoneGlobals.iAtManager->SetSolicitedAtCommand(this);
+ iPhoneGlobals.iCommEngine->CommWrite(iTxBuffer);
+ StartTimer(iWriteTimeOut);
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::StartWritingPdu
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::StartWritingPdu()
+ {
+ LOGTEXT(_L8("CAtSmsSend::StartWritingPdu called"));
+ iTxBuffer.Zero();
+ iTxBuffer.Append(iMsgDataAscii);
+ iTxBuffer.Append(KLtsyCtrlZChar);
+ ClearBuffer();
+ iPhoneGlobals.iAtManager->SetSolicitedAtCommand(this);
+ iPhoneGlobals.iCommEngine->CommWrite(iTxBuffer);
+ StartTimer(iWriteTimeOut);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::SetMessageParam
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::SetMessageParam(TSmsSendParam aMsgParam)
+ {
+ iSmsSendParam = aMsgParam;
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::EventSignal
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::EventSignal(TAtEventSource aEventSource, TInt aStatus)
+ {
+ LOGTEXT3(_L8("CAtSmsSend::EventSignal aStatus=%D iSource=%D"),aStatus,aEventSource);
+ if(aStatus == KErrNone)
+ {
+ if(aEventSource == EWriteCompletion)
+ {
+ LOGTEXT(_L8("CAtSmsSend::EventSignal,EWriteCompletion!"));
+ return;
+ }
+ else
+ {
+ if( iState == ESetPDULengthComplete )
+ {
+ if(iError==KErrNone)
+ {
+ iState = ESendPDUComplete;
+ Complete();
+ StartWritingPdu();
+ return;
+ }
+ }
+ }
+ aStatus = iError;
+ }
+ Complete();
+ iPhoneGlobals.iEventSignalActive = EFalse;
+ iCtsyDispatcherCallback.CallbackSmsSendSmsMessageComp(aStatus,iSmsSendResponse.iValRef,
+ iSmsSendResponse.iSubmitReport);
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::ParseResponseL
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::ParseResponseL(const TDesC8& /*aResponseBuf*/)
+ {
+ LOGTEXT(_L8("CAtSmsSend::ParseResponseL called!"));
+ if(iState == ESetPDULengthComplete)
+ {
+ if(CurrentLine().MatchF(KSmsEnterPduResponse) != KErrNotFound)
+ {
+ iError = KErrNone;
+ }
+ else
+ {
+ iError = KErrNotFound;
+ }
+ }
+ else
+ {
+ iError = KErrNone;
+ TPtrC8 responseBuf;
+ responseBuf.Set(Buffer());
+ TInt pos = responseBuf.FindF(KCMGSResponseString);
+ if (pos == KErrNotFound)
+ {
+ LOGTEXT(_L8("CAtSmsSend::ParseCMGSResponse \"+CMGS:\" not found"));
+ iError = KErrNotFound;
+ return;
+ }
+
+ // Locate the message reference number
+ // (ie. read in all digits form the first found to the end of the string)
+ const TInt bufLength=responseBuf.Length();
+ pos += KCMGSResponseString().Length();
+ while(pos<bufLength && !(TChar(responseBuf[pos]).IsDigit()))
+ ++pos;
+ if(pos == bufLength)
+ {
+ LOGTEXT(_L8("CAtSmsSend::ParseCMGSResponse cannot find any digits after \"+CMS:\" "));
+ iError = KErrNotFound;
+ return;
+ }
+
+ // Read message number and store in clients data structure
+ TPtrC8 ptr = responseBuf.Mid(pos);
+ TLex8 lex(ptr);
+ TUint16 val;
+ TInt ret = lex.Val(val,EDecimal);
+ if(ret != KErrNone)
+ {
+ LOGTEXT(_L8("CAtSmsSend::ParseCMGSResponse cannot read Message Reference Number"));
+ iError = ret;
+ return;
+ }
+ iSmsSendResponse.iValRef = val;
+ LOGTEXT2(_L8("CAtSmsSend Message reference number %d"),val);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::ConfirmSca
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+TInt CAtSmsSend::ConfirmSca()
+ {
+ if(iSmsSendParam.iGsmServiceCentre.iTelNumber.Length() == 0)
+ {
+ return KErrNotFound;
+ }
+ if(!(iSmsSendParam.iGsmServiceCentre.iNumberPlan == RMobilePhone::EIsdnNumberPlan &&
+ (iSmsSendParam.iGsmServiceCentre.iTypeOfNumber == RMobilePhone::EInternationalNumber ||
+ iSmsSendParam.iGsmServiceCentre.iTypeOfNumber == RMobilePhone::EUnknownNumber)))
+ {
+ return KErrCorrupt;
+ }
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::BeginTimer
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::BeginTimer()
+ {
+ LOGTEXT(_L8("CAtSmsSend::BeginTimer() called"));
+
+ if (iCallbackTimer->IsActive())
+ {
+ iCallbackTimer->Cancel();
+ }
+ iCallbackTimer->After(KLtsyOnePause);
+ }
+
+// ---------------------------------------------------------------------------
+// CAtSmsSend::TimerRun
+// other items were commented in a header
+// ---------------------------------------------------------------------------
+void CAtSmsSend::TimerRun(TInt aError)
+ {
+ LOGTEXT(_L8("CAtSmsSend::TimerRun() called"));
+ if(aError == KErrNone)
+ {
+ Complete();
+ iPhoneGlobals.iEventSignalActive = EFalse;
+ iCtsyDispatcherCallback.CallbackSmsSendSmsMessageComp(iCallbackVal,iSmsSendResponse.iValRef,
+ iSmsSendResponse.iSubmitReport);
+ }
+ }
+
+//End of file