testexecmgmt/ucc/Source/Uccs.v2/ServiceStubs/GPSSimulator/CAPICommandHandlerStub.cpp
changeset 0 3da2a79470a7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/Source/Uccs.v2/ServiceStubs/GPSSimulator/CAPICommandHandlerStub.cpp	Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,654 @@
+/*
+* 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:  
+*
+*/
+
+
+
+
+#include "CAPICommandHandlerStub.h"
+#include "APICommandHandler.h"
+
+CAPICommandHandlerStub::CAPICommandHandlerStub()
+{
+	iGPSSimulator = new CCGpssimulator();
+}
+
+CAPICommandHandlerStub::~CAPICommandHandlerStub()
+{
+	delete iGPSSimulator;
+}
+
+int CAPICommandHandlerStub::StartUccsService( char *aHostName,  int *aErrorCode, int *aUnused )
+{
+	int client_stub_error;
+	
+	*aErrorCode = 0;
+	
+	// connect to the remote service
+	client_stub_error = iGPSSimulator->Connect( aHostName );
+
+	// return the result
+	return client_stub_error;
+}
+
+int CAPICommandHandlerStub::StopUccsService( int *aErrorCode, int *aUnused )
+{
+	int client_stub_error;
+	*aErrorCode = 0;
+
+	// shutdown the stub -- force it to close
+	client_stub_error = iGPSSimulator->Disconnect();
+	
+	// done
+	return client_stub_error;
+}
+
+CDataRecord* CAPICommandHandlerStub::IssueCommand( CDataRecord* aRequest )
+{
+	int call_result, err, client_stub_error, method_id = -1;
+	
+	CDataRecord *request_reply;
+
+	TStartupInfo sarg_startup_info;
+	int rv_integer, sarg_integer;
+
+	// create a standard reply 
+	request_reply = CreateBaseReply( aRequest );
+
+	// get and check the method_id
+	err = request_reply->GetFieldAsInt( "METHODID", &method_id );
+	if( method_id == -1 )
+	{
+		UpdateCompletionCode( request_reply, ERR_INVALID_METHOD );
+		return request_reply;
+	}
+
+	// now dispatch and call the appropriate method
+	switch( method_id )
+	{
+		// ss_startuprpcservice
+		case 1:
+			{
+				// extract the parameters
+				sarg_startup_info.iEmpty = 0;
+
+				// make the call and update the return value
+				client_stub_error = iGPSSimulator->ss_startuprpcservice( sarg_startup_info, &rv_integer );
+				UpdateCompletionCode( request_reply, client_stub_error );		
+				if( client_stub_error != ERR_NONE )
+				{
+					break;
+				}
+				// set any return information
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// sc_shutdownrpcservice
+		case 2: 
+			{
+				// extract the parameters
+				GETINTEGERARGUMENT( "FORCE", &sarg_integer, 1, 1, aRequest, request_reply );
+
+				// make the call and update the return value
+				client_stub_error = iGPSSimulator->sc_shutdownrpcservice( sarg_integer, &rv_integer );
+				UpdateCompletionCode( request_reply, client_stub_error );
+				if( client_stub_error != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// startsimulator		
+		case 10:
+			{
+				// Make the call and update the return values
+				call_result = iGPSSimulator->startsimulator( &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// stopsimulator		
+		case 11:
+			{
+				// Make the call and update the return values
+				call_result = iGPSSimulator->stopsimulator( &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+			
+		// setfielddefault
+		case 12:
+			{
+				// Extract the parameters
+				int		fieldID;
+				int		state;
+				char*	value = NULL;
+	
+				GETINTEGERARGUMENT( "FIELD", &fieldID, 1, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "STATE", &state, 2, 0, aRequest, request_reply );
+				GETSTRINGARGUMENT( "VALUE", &value, 3, 1, aRequest, request_reply );
+
+				TField	field = {0,0,0};
+				field.iFieldId = fieldID;
+				field.iState = state;
+				if( value!=NULL )
+				{
+					strcpy( field.iValue, value );
+				}
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->setfielddefault( field, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// setsatellitedefault
+		case 13:
+			{
+				// Extract the parameters
+				int		elevation;
+				int		azimuth;
+				int		snr;
+				int		id;
+
+				GETINTEGERARGUMENT( "ELEVATION", &elevation, 1, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "AZIMUTH", &azimuth, 2, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "SNR", &snr, 3, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "SATID", &id, 4, 0, aRequest, request_reply );
+
+				TSatellite	satellite;
+				satellite.iAzimuth = azimuth;
+				satellite.iElevation = elevation;
+				satellite.iSNR = snr;
+				satellite.iId = id;
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->setsatellitedefault( satellite, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// positionset
+		case 14:
+			{
+				// Extract the parameters
+				char*	latitude;
+				char*	ns;
+				char*	longitude;
+				char*	ew;
+
+				GETSTRINGARGUMENT( "LATITUDE", &latitude, 1, 0, aRequest, request_reply );
+				GETSTRINGARGUMENT( "NS", &ns, 2, 0, aRequest, request_reply );
+				GETSTRINGARGUMENT( "LONGITUDE", &longitude, 3, 0, aRequest, request_reply );
+				GETSTRINGARGUMENT( "EW", &ew, 4, 0, aRequest, request_reply );
+
+				TPositionInfo	pos;
+				pos.iLatitude = atof( latitude );
+				pos.iNS = strcmp("N", ns)?1:0;
+				pos.iLongitude = atof( longitude );
+				pos.iEW = strcmp("E", ew)?1:0;
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->positionset( pos, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+			
+		// courseset
+		case 15:
+			{
+				// Extract the parameters
+				int	speed;
+				int	direction;
+
+				GETINTEGERARGUMENT( "SPEED", &speed, 1, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "DIRECTION", &direction, 2, 0, aRequest, request_reply );
+
+				TCourse	course;
+				course.iSpeed = (double)speed;
+				course.iDirection = (double)direction;
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->courseset( course, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+			
+		// accuracyset
+		case 16:
+			{
+				// Extract the parameters
+				char* accuracyStr;
+				char* hwconstantStr;
+				GETSTRINGARGUMENT( "ACCURACY", &accuracyStr, 1, 0, aRequest, request_reply );
+				GETSTRINGARGUMENT( "HWCONSTANT", &hwconstantStr, 1, 0, aRequest, request_reply );
+
+				// Make the call and update the return values
+				TAccuracy accuracy;
+				accuracy.iAccuracy = atof(accuracyStr);
+				accuracy.iHWConstant = atof(hwconstantStr);
+				call_result = iGPSSimulator->accuracyset( accuracy, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// satelliteset
+		case 17:
+			{
+				// Extract the parameters
+				int		elevation;
+				int		azimuth;
+				int		snr;
+				int		id;
+
+				GETINTEGERARGUMENT( "ELEVATION", &elevation, 1, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "AZIMUTH", &azimuth, 2, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "SNR", &snr, 3, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "SATID", &id, 4, 0, aRequest, request_reply );
+
+				TSatellite	satellite;
+				satellite.iAzimuth = azimuth;
+				satellite.iElevation = elevation;
+				satellite.iSNR = snr;
+				satellite.iId = id;
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->satelliteset( satellite, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// batchappendsentence
+		case 18:
+			{
+				// Extract the parameters
+				int		sentenceId;
+				int		frequency;
+
+				GETINTEGERARGUMENT( "SENTENCEID", &sentenceId, 1, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "FREQUENCY", &frequency, 2, 0, aRequest, request_reply );
+
+				TAppendSentence sentence;
+				sentence.iSentenceId = sentenceId;
+				sentence.iFrequency = frequency;
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->batchappendsentence( sentence, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// batchappendusersentence
+		case 19:
+			{
+				// Extract the parameters
+				int	sentenceId;
+				int	frequency = 1;
+				int numFields = 0;
+
+				GETINTEGERARGUMENT( "NUMFIELDS", &numFields, 1, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "SENTENCEID", &sentenceId, 2, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "FREQUENCY", &frequency, 3, 1, aRequest, request_reply );
+
+				TAppendSentence	sentence;
+				sentence.iSentenceId = sentenceId;
+				sentence.iFrequency = frequency;
+				TAppendUserSentence userSentence;
+				userSentence.iAppendSentence = sentence;
+
+				// Allocate enough space for the number of user fields
+				userSentence.iUserFields.iUserFields_len = numFields;
+				userSentence.iUserFields.iUserFields_val = new TField[numFields];
+				int count = 0;
+
+				// Check each possible field id to see if it has been entered in the script
+				for( int field_id = 1 ; field_id <= F_NUMBER_OF_FIELDS ; field_id++ )
+				{
+					string field_str;
+					switch( field_id )
+					{
+						case F_TIME:				field_str = "TIME"; break;
+						case F_STATUS:				field_str = "STATUS"; break;
+						case F_DATE:				field_str = "DATE"; break;
+						case F_LATITUDE:			field_str = "LATITUDE"; break;
+						case F_LAT_NORTH_SOUTH:		field_str = "LAT_NORTH_SOUTH"; break;
+						case F_LONGITUDE:			field_str = "LONGITUDE"; break;
+						case F_LON_EAST_WEST:		field_str = "LON_EAST_WEST"; break;
+						case F_SPEED_OVER_GROUND:	field_str = "SPEED"; break;
+						case F_COURSE_OVER_GROUND:	field_str = "COURSE"; break;
+						case F_MAGNETIC_VARIATION:	field_str = "MAGNETIC_VARIATION"; break;
+						case F_MAG_EAST_WEST:		field_str = "MAG_EAST_WEST"; break;
+						case F_MODE_INDICATOR:		field_str = "MODE_INDICATOR"; break;
+						case F_OPERATION_MODE:		field_str = "OPERATION_MODE"; break;
+						case F_FIX_MODE:			field_str = "FIX_MODE"; break;
+						case F_SATELLITE_ONE:		field_str = "SATELLITE_ONE"; break;
+						case F_SATELLITE_TWO:		field_str = "SATELLITE_TWO"; break;
+						case F_SATELLITE_THREE:		field_str = "SATELLITE_THREE"; break;
+						case F_SATELLITE_FOUR:		field_str = "SATELLITE_FOUR"; break;
+						case F_SATELLITE_FIVE:		field_str = "SATELLITE_FIVE"; break;
+						case F_SATELLITE_SIX:		field_str = "SATELLITE_SIX"; break;
+						case F_SATELLITE_SEVEN:		field_str = "SATELLITE_SEVEN"; break;
+						case F_SATELLITE_EIGHT:		field_str = "SATELLITE_EIGHT"; break;
+						case F_SATELLITE_NINE:		field_str = "SATELLITE_NINE"; break;
+						case F_SATELLITE_TEN:		field_str = "SATELLITE_TEN"; break;
+						case F_SATELLITE_ELEVEN:	field_str = "SATELLITE_ELEVEN"; break;
+						case F_SATELLITE_TWELVE:	field_str = "SATELLITE_TWELVE"; break;
+						case F_PDOP:				field_str = "PDOP"; break;
+						case F_HDOP:				field_str = "HDOP"; break;
+						case F_VDOP:				field_str = "VDOP"; break;
+						case F_SATELLITES_IN_USE:	field_str = "SATELLITES_IN_USE"; break;
+						case F_ANTENNA_ALTITUDE:	field_str = "ANTENNA_ALTITUDE"; break;
+						case F_ANTENNA_METERS:		field_str = "ANTENNA_METERS"; break;
+						case F_GEOIDAL_SEPARATION:	field_str = "GEOIDAL_SEPARATION"; break;
+						case F_GEOIDAL_METERS:		field_str = "GEOIDAL_METERS"; break;
+						case F_DIFFERENTIAL_AGE:	field_str = "DIFFERENTIAL_AGE"; break;
+						case F_DIFFERENTIAL_REF_ID:	field_str = "DIFFERENTIAL_REF_ID"; break;
+						case F_GPS_QUALITY:			field_str = "GPS_QUALITY"; break;
+						case F_NUMBER_OF_SENTENCES:	field_str = "NUMBER_OF_SENTENCES"; break;
+						case F_CHECKSUM:			field_str = "CHECKSUM"; break;
+						default:
+							break;
+					}
+					
+					// Append _STATE for each id for the state retrieval
+					string field_state_str = field_str + "_STATE";
+					char* field_state = NULL;
+					GETSTRINGARGUMENT( (char*)field_state_str.c_str(), &field_state, field_id+4, 1, aRequest, request_reply );
+
+					if( field_state != NULL && count<numFields )
+					{
+						userSentence.iUserFields.iUserFields_val[count].iFieldId = field_id;
+						userSentence.iUserFields.iUserFields_val[count].iState = atoi( field_state );
+
+						if( atoi(field_state) == S_VALUE )
+						{
+							char* field = NULL;
+							GETSTRINGARGUMENT( (char*)field_str.c_str(), &field, field_id+4+F_NUMBER_OF_FIELDS, 0, aRequest, request_reply );
+
+							if( field != NULL && count < numFields )
+							{
+								strcpy( userSentence.iUserFields.iUserFields_val[count++].iValue, field );
+							}							
+						}
+					}
+				}
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->batchappendusersentence( userSentence, &rv_integer );
+
+				// Cleanup the user fields now
+				delete[] userSentence.iUserFields.iUserFields_val;
+
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// batchsetdelay
+		case 20:
+			{
+				// Extract the parameters
+				int	delay;
+
+				GETINTEGERARGUMENT( "DELAY", &delay, 1, 0, aRequest, request_reply );
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->batchsetdelay( delay, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// batchreset
+		case 21:
+			{
+				// Make the call and update the return values
+				call_result = iGPSSimulator->batchreset( &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+			
+		// setcomport
+		case 22:
+			{
+				// Extract the parameters
+				char*	port;
+	
+				GETSTRINGARGUMENT( "COMPORT", &port, 1, 0, aRequest, request_reply );
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->setcomport( port, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// setchunkmode
+		case 23:
+			{
+				// Extract the parameters
+				int	mode;
+	
+				GETINTEGERARGUMENT( "MODE", &mode, 1, 0, aRequest, request_reply );
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->setchunkmode( mode==0?false:true, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// setchunksize
+		case 24:
+			{
+				// Extract the parameters
+				int	size;
+	
+				GETINTEGERARGUMENT( "SIZE", &size, 1, 0, aRequest, request_reply );
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->setchunksize( size, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+			
+		// setchunkdelay
+		case 25:
+			{
+				// Extract the parameters
+				int	delay;
+	
+				GETINTEGERARGUMENT( "DELAY", &delay, 1, 0, aRequest, request_reply );
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->setchunkdelay( delay, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+			
+		// startcomms
+		case 26:
+			{
+				// Make the call and update the return values
+				call_result = iGPSSimulator->startcomms( &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// stopcomms
+		case 27:
+			{
+				// Make the call and update the return values
+				call_result = iGPSSimulator->stopcomms( &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+
+		// batchappenduserstring
+		case 28:
+			{
+				// Extract the parameters
+				char*	userString;
+				int		frequency;
+
+				GETSTRINGARGUMENT( "STRING", &userString, 1, 0, aRequest, request_reply );
+				GETINTEGERARGUMENT( "FREQUENCY", &frequency, 2, 0, aRequest, request_reply );
+
+				TAppendString sentence;
+				strcpy( sentence.iUserString, userString );
+				sentence.iFrequency = frequency;
+
+				// Make the call and update the return values
+				call_result = iGPSSimulator->batchappenduserstring( sentence, &rv_integer );
+				UpdateCompletionCode( request_reply, call_result );
+				if( call_result != ERR_NONE )
+				{
+					break;
+				}
+				// set the return values
+				request_reply->NewField( "RESULT", rv_integer );
+			}
+			break;
+			
+		// Any other method id results in an invalid method id result
+		default:
+			{
+				UpdateCompletionCode( request_reply, ERR_INVALID_METHOD );
+			}
+			break;
+	}
+
+	// everything should be handled above 
+	return request_reply;
+}
+
+int CAPICommandHandlerStub::GetStatus()
+{
+	return -1;
+}
+
+char *CAPICommandHandlerStub::GetLastRPCError( int *aIntError )
+{
+	return iGPSSimulator->GetLastRPCError( aIntError );
+}