diff -r 000000000000 -r 3da2a79470a7 testexecmgmt/ucc/Source/Uccs.v2/DeviceControlChannel/CApplicationControlNull.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testexecmgmt/ucc/Source/Uccs.v2/DeviceControlChannel/CApplicationControlNull.cpp Mon Mar 08 15:04:18 2010 +0800 @@ -0,0 +1,179 @@ +/* +* Copyright (c) 2005-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: +* System Includes +* +*/ + + + +#include +#include +#include +#include + + +/********************************************************************************************** + * + * Local Includes + * + *********************************************************************************************/ +#include "CApplicationControlNull.h" +#include "../Core/UCCS_ErrorCodes.h" + + +/********************************************************************************************** + * + * Defines + * + *********************************************************************************************/ +#define MAXTOKENS 64 + + +/********************************************************************************************** + * + * Constructor + * + *********************************************************************************************/ +CApplicationControlNull::CApplicationControlNull( MUccsControl *aCallBackService, IOutput *aOutput ) +{ + assert( aCallBackService != NULL ); + assert( aOutput != NULL ); + iOutput = aOutput; + iCallBackService = aCallBackService; +} + +/********************************************************************************************** + * + * Destructor + * + *********************************************************************************************/ +CApplicationControlNull::~CApplicationControlNull() +{ +} + + +/********************************************************************************************** + * + * Run() -- the main routine called to run the serial listener. + * + *********************************************************************************************/ +TCommandControlError CApplicationControlNull::Start( TRemoteControlTransport aTransport, char* aPortname, int *aErrorCode, int *aScriptError ) +{ + int err, i; + static int execution_count = 0; + + // check params + assert( aScriptError != NULL ); + *aScriptError = 0; + + // check the parameters are valid + if( aPortname == NULL ) { + return EAC_INVALIDPORT; + } + + // only run once -- then exit + if( execution_count > 0 ) { + return EAC_QUIT; + } + execution_count++; + + // parse the params + err = ParseArgumentString( aPortname ); + if( err == -1 ) { + return EAC_INVALIDPORT; + } + + // start the use-case + err = iCallBackService->StartUsecase( iArgs.iUsecaseID ); + if( err != UCCS_OK ) { + *aErrorCode = err; + return EAC_STARTUSECASEFAILED; + } + + // run rendezvous the set number of times - wait for user input before each one + // if the interactive flag is set. The last rendezvous is never interactive. + for( i = 0; i < iArgs.iRendezvousCount; i++ ) { + if( (iArgs.iInteractiveFlag != 0) && (i != (iArgs.iRendezvousCount-1)) ) { + fprintf( stdout, "Press enter to rendezvous.\n" ); + getchar(); + } + err = iCallBackService->Rendezvous( iArgs.iUsecaseID ); + if( err != UCCS_OK ) { + *aErrorCode = err; + return EAC_RENDEZVOUSFAILED; + } + } + + // put in a wait so that the other thread has time to finish up + Sleep( 1000 ); + + // end use-case + err = iCallBackService->EndUsecase( iArgs.iUsecaseID, 0, aScriptError ); + *aErrorCode = err; + if( ( err != UCCS_OK ) ){ + return EAC_ENDUSECASEFAILED; + } + + // done + return EAC_SUCCESS; +} + + +/********************************************************************************************** + * + * ParseArgumentString() - portname should be a string: + * "[:[:]]" + * + *********************************************************************************************/ +int CApplicationControlNull::ParseArgumentString( char *str ) +{ + char *ptr, *tokens[MAXTOKENS]; + int token_count = 0, i; + + // check params + assert( str != NULL ); + + // tokenise the string based on the ':' delimiter + for( ptr = str, i = 0; i < MAXTOKENS; i++ ) { + tokens[i] = ptr; + ptr = strchr( ptr, ':' ); + if( ptr == NULL ) + break; + *ptr = 0; + ptr++; + } + token_count = i + 1; + + // check that at least one token was found + if( token_count == 0 ) { + return -1; + } + + // initialise the optional args to their defaults + iArgs.iRendezvousCount = 1; + iArgs.iInteractiveFlag = 0; + + // now convert the tokens into meaningful things + iArgs.iUsecaseID = atoi(tokens[0]); + if( token_count > 1 ) { + iArgs.iRendezvousCount = atoi(tokens[1]); + } + if( token_count > 2 ) { + iArgs.iInteractiveFlag = atoi(tokens[2]); + } + + // done - success + return 0; +}