diff -r f7fbeaeb166a -r b23265fb36da cbsatplugin/atmisccmdplugin/src/cfuncommandhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbsatplugin/atmisccmdplugin/src/cfuncommandhandler.cpp Tue Apr 27 16:49:44 2010 +0300 @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2010 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 : + * + */ + +#include "cfuncommandhandler.h" + +#include +#include + +#include + +#include "atmisccmdpluginconsts.h" +#include "debug.h" + +CCFUNCommandHandler* CCFUNCommandHandler::NewL(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone) + { + TRACE_FUNC_ENTRY + CCFUNCommandHandler* self = new (ELeave) CCFUNCommandHandler(aCallback, aATCmdParser, aPhone); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + TRACE_FUNC_EXIT + return self; + } + +CCFUNCommandHandler::CCFUNCommandHandler(MATMiscCmdPlugin* aCallback, TAtCommandParser& aATCmdParser, RMobilePhone& aPhone) : + CATCmdAsyncBase(aCallback, aATCmdParser, aPhone) + { + TRACE_FUNC_ENTRY + TRACE_FUNC_EXIT + } + +void CCFUNCommandHandler::ConstructL() + { + TRACE_FUNC_ENTRY + iReply.CreateL(KDefaultCmdBufLength); + iProfileEngine = CreateProfileEngineL(); + TRACE_FUNC_EXIT + } + +CCFUNCommandHandler::~CCFUNCommandHandler() + { + TRACE_FUNC_ENTRY + Cancel(); + if (iProfileEngine != NULL) + { + iProfileEngine->Release(); + } + TRACE_FUNC_EXIT + } + +void CCFUNCommandHandler::HandleCommand(const TDesC8& /*aCmd*/, RBuf8& /*aReply*/, TBool /*aReplyNeeded*/) + { + TInt ret = KErrNone; + iReply.Zero(); + TAtCommandParser::TCommandHandlerType cmdHandlerType = iATCmdParser.CommandHandlerType(); + + switch (cmdHandlerType) + { + case (TAtCommandParser::ECmdHandlerTypeTest): + { + iCallback->CreateReplyAndComplete( EReplyTypeOther, KCFUNSupportedCmdsList); + break; + } + case (TAtCommandParser::ECmdHandlerTypeRead): + { + TInt profileId = iProfileEngine->ActiveProfileId(); + + iReply.Append( KAtCFUN ); + + if( profileId == EProfileOffLineId ) + { + iReply.Append( '0' ); + } + else + { + iReply.Append( '1' ); + } + iReply.Append( KOKCRLF ); + iCallback->CreateReplyAndComplete( EReplyTypeOther, iReply); + break; + } + case (TAtCommandParser::ECmdHandlerTypeSet): + { + TInt func = 0; + TInt reset = 0; // default 0 - do not reset the MT before setting it to power level + + ret = iATCmdParser.NextIntParam(func); + if (ret != KErrNone && ret != KErrNotFound) + { + iCallback->CreateReplyAndComplete(EReplyTypeError); + TRACE_FUNC_EXIT + return; + } + ret = iATCmdParser.NextIntParam(reset); + + // second parameter is optional, but only 0 and 1 are valid if it is specified + if (ret != KErrNone && ret != KErrNotFound && (reset != 0 || reset != 1)) + { + iCallback->CreateReplyAndComplete(EReplyTypeError); + TRACE_FUNC_EXIT + return; + } + ret = ActivateProfile(func, reset); + + break; + } + default: + { + iCallback->CreateReplyAndComplete(EReplyTypeError); + } + } + + if (ret != KErrNone) + { + iCallback->CreateReplyAndComplete(EReplyTypeError); + } + else + { + iCallback->CreateReplyAndComplete( EReplyTypeOther, iReply ); + } + TRACE_FUNC_EXIT + } + +void CCFUNCommandHandler::HandleCommandCancel() + { + TRACE_FUNC_ENTRY + // no asyc requests are made in when using AT+CFUN + TRACE_FUNC_EXIT + } + + +void CCFUNCommandHandler::RunL() + { + TRACE_FUNC_ENTRY + // no asyc requests are made in when using AT+CFUN + TRACE_FUNC_EXIT + } + +void CCFUNCommandHandler::DoCancel() + { + TRACE_FUNC_ENTRY + // no asyc requests are made in when using AT+CFUN + TRACE_FUNC_EXIT + } + +TInt CCFUNCommandHandler::ActivateProfile(TInt aFunc, TInt aReset) + { + TInt err = KErrNone; + + switch (aFunc) + { + case (0): + case (4): + { + err = SetActiveProfile(KOfflineProfileId); + break; + } + case (1): + { + err = SetActiveProfile(KGeneralProfileId); + break; + } + default: + { + err = KErrArgument; + break; + } + } + + if (err == KErrNone && aReset == 1) + { + err = RestartDevice(); + } + + return err; + } + +TInt CCFUNCommandHandler::SetActiveProfile(TInt aProfileId) + { + TInt err = KErrNone; + + if(iProfileEngine) + { + TRAP(err, iProfileEngine->SetActiveProfileL( aProfileId )); + } + + return err; + } + +TInt CCFUNCommandHandler::RestartDevice() + { + RStarterSession session; + TInt err = session.Connect(); + + if( err == KErrNone ) + { + session.Reset(RStarterSession::EUnknownReset); + session.Close(); + } + + return err; + }