--- /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 <stdio.h>
+#include <stdlib.h>
+#include <windows.h>
+#include <assert.h>
+
+
+/**********************************************************************************************
+ *
+ * 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:
+ * "<usecaseid>[:<rendezvous count>[:<interactive_flag>]]"
+ *
+ *********************************************************************************************/
+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;
+}