testexecmgmt/ucc/Source/UCCSDeviceControl/CUCCSDeviceControl.cpp
changeset 0 3da2a79470a7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/Source/UCCSDeviceControl/CUCCSDeviceControl.cpp	Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,380 @@
+/*
+* 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 <e32uid.h>
+#include <string.h>
+#include <stdlib.h>
+
+
+/**********************************************************************************
+ *
+ * Local Includes
+ *
+ *********************************************************************************/
+#include "assert.h"
+#include "CUCCSDeviceControl.h"
+
+// Error Codes
+#include "CProtocolTypes.h"
+#include "UCCS_ErrorCodes.h"
+
+
+/**********************************************************************************
+ *
+ * Dll Entry point
+ *
+ *********************************************************************************/
+/**********************************************************************************
+ *
+ * Construction / Destruction
+ *
+ *********************************************************************************/
+EXPORT_C CUCCSDeviceControl* CUCCSDeviceControl::New()
+{
+	CUCCSDeviceControl* self = new CUCCSDeviceControl();
+    CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+    return self;
+}
+
+
+CUCCSDeviceControl::CUCCSDeviceControl()
+{
+}
+
+
+void CUCCSDeviceControl::ConstructL()
+{
+	iProtocol = new (ELeave) CUCCSDeviceProtocol();
+	assert( iProtocol != NULL );
+}
+
+
+EXPORT_C CUCCSDeviceControl::~CUCCSDeviceControl()
+{
+	int ret;
+	ret = iProtocol->disconnect();
+	assert (ret == TDC_SUCCESS);
+	assert( iProtocol != NULL );
+	delete iProtocol;
+	iProtocol = NULL;
+}
+
+
+EXPORT_C TUint CUCCSDeviceControl::connectL( TDesC *aRemoteHost, TDPTransport aTransportType )
+{
+	int ret = iProtocol->initialise(*aRemoteHost,aTransportType);
+	if (ret != TDP_SUCCESS)
+		return TDC_ERRINTIALISING;
+	return TDC_SUCCESS;
+}
+
+
+/**********************************************************************************
+ *
+ * startUseCase
+ *
+ *********************************************************************************/
+EXPORT_C TUint CUCCSDeviceControl::startUseCase ( TUint aData, int *aErrorCode )
+{		
+	int ret, datalen;
+	TStartUsecaseRequest req;
+	TStartUsecaseReply rep;
+	TPCommand cmdID;
+
+	// Send the request
+	cmdID = CMD_REQ_STARTUSECASEID;
+	req.iUsecaseID = aData;
+	datalen = sizeof(req);
+	
+	ret = iProtocol->sendMessage( cmdID, datalen, &req);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRSENDING;
+
+	// Get the reply
+	datalen = sizeof(rep);
+	ret = iProtocol->receiveMessage ( &cmdID, &datalen, &rep);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRRECV;
+
+	// Check that the reply cmdID is what we expect it to be
+	if ( cmdID != CMD_REP_STARTUSECASEID )
+		return TDC_INVALIDREPLY;
+
+	// Then return the result
+	return rep.iResult;
+}
+
+/**********************************************************************************
+ *
+ * signal
+ *
+ *********************************************************************************/
+EXPORT_C TUint CUCCSDeviceControl::signal( TUint aData, int *aErrorCode )
+{
+	int ret, datalen;
+	TSignalRequest req;
+	TSignalReply rep;
+	TPCommand cmdID;
+
+	// Send the request
+	cmdID = CMD_REQ_SIGNALID;
+	req.iUsecaseID = aData;
+	datalen = sizeof(req);
+	
+	ret = iProtocol->sendMessage( cmdID, datalen, &req);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRSENDING;
+
+	// Get the reply
+	datalen = sizeof(rep);
+	ret = iProtocol->receiveMessage ( &cmdID, &datalen, &rep);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRRECV;
+
+	// Check that the reply cmdID is what we expect it to be
+	if ( cmdID != CMD_REP_SIGNALID )
+		return TDC_INVALIDREPLY;
+
+	// Then return the result
+	return rep.iResult;
+}
+
+/**********************************************************************************
+ *
+ * waitfor
+ *
+ *********************************************************************************/
+EXPORT_C TUint CUCCSDeviceControl::waitfor( TUint aData, int *aErrorCode )
+{
+	int ret, datalen;
+	TWaitRequest req;
+	TWaitReply rep;
+	TPCommand cmdID;
+
+	// Send the request
+	cmdID = CMD_REQ_WAITID;
+	req.iUsecaseID = aData;
+	datalen = sizeof(req);
+	
+	ret = iProtocol->sendMessage( cmdID, datalen, &req);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRSENDING;
+
+	// Get the reply
+	datalen = sizeof(rep);
+	ret = iProtocol->receiveMessage ( &cmdID, &datalen, &rep);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRRECV;
+
+	// Check that the reply cmdID is what we expect it to be
+	if ( cmdID != CMD_REP_WAITID )
+		return TDC_INVALIDREPLY;
+
+	// Then return the result
+	return rep.iResult;
+}
+
+/**********************************************************************************
+ *
+ * rendezvous
+ *
+ *********************************************************************************/
+EXPORT_C TUint CUCCSDeviceControl::rendezvous( TUint aData, int *aErrorCode )
+{
+	int ret, datalen;
+	TRendezvousRequest req;
+	TRendezvousReply rep;
+	TPCommand cmdID;
+
+	// Send the request
+	cmdID = CMD_REQ_RENDEZVOUSID;
+	req.iUsecaseID = aData;
+	datalen = sizeof(req);
+	
+	ret = iProtocol->sendMessage( cmdID, datalen, &req);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRSENDING;
+
+	// Get the reply
+	datalen = sizeof(rep);
+	ret = iProtocol->receiveMessage ( &cmdID, &datalen, &rep);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRRECV;
+
+	// Check that the reply cmdID is what we expect it to be
+	if ( cmdID != CMD_REP_RENDEZVOUSID )
+		return TDC_INVALIDREPLY;
+
+	// Then return the result
+	return rep.iResult;
+}
+
+/**********************************************************************************
+ *
+ * endUseCase
+ *
+ *********************************************************************************/
+EXPORT_C TUint CUCCSDeviceControl::endUseCase (TUint aUseCaseID, TUint aResult, int *aErrorCode )
+{	
+	int ret, datalen;
+	TEndUsecaseRequest req;
+	TEndUsecaseReply rep;
+	TPCommand cmdID;
+
+	// Send the request
+	cmdID = CMD_REQ_ENDUSECASEID;
+	req.iUsecaseID = aUseCaseID;
+	req.iResult = aResult;
+	datalen = sizeof(req);
+	
+	ret = iProtocol->sendMessage( cmdID, datalen, &req);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRSENDING;
+
+	// Get the reply
+	datalen = sizeof(rep);
+	ret = iProtocol->receiveMessage ( &cmdID, &datalen, &rep);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRRECV;
+
+	// Check that the reply cmdID is what we expect it to be
+	if ( cmdID != CMD_REP_ENDUSECASEID )
+		return TDC_INVALIDREPLY;
+
+	// Then return the result
+	return rep.iCommandResult;
+}
+
+/**********************************************************************************
+ *
+ * getVariableName
+ *
+ *********************************************************************************/
+EXPORT_C TUint CUCCSDeviceControl::getVariableName( char* aVariableName, char* aOutputBuffer, int aOutputBufferSize, int *aErrorCode )
+{
+	int ret, len, recDatalen;
+	TGetVariableNameRequest var_req;
+	TGetVariableNameReply var_rep;
+	TPCommand cmd;
+
+	// Check params
+	assert ( aVariableName != NULL );
+	assert ( aOutputBuffer != NULL );
+	assert ( aOutputBufferSize >= 0);
+
+	// Check if aVariableName can be copied into our structure
+	len = strlen(aVariableName) + 1;
+	if ( len > MAXVARNAMELEN )
+		return TDC_VARNAMETOOLONG;
+
+	// Then copy into our buffer
+	memcpy ( var_req.iVariableName, aVariableName, len);
+
+	// Send the request
+	cmd = CMD_REQ_GETVARIABLENAMEID;
+	ret = iProtocol->sendMessage( cmd, sizeof(var_req), &var_req);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRSENDING;
+
+	// Get the reply
+	recDatalen = sizeof(var_rep);
+	ret = iProtocol->receiveMessage( &cmd, &recDatalen, &var_rep);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRRECV;
+
+	// Check whether we successfully retrieved the value we want
+	if ( cmd != CMD_REP_GETVARIABLENAMEID)
+		return TDC_INVALIDREPLY;			// Not what we are expecting 
+
+	// Only copy the data if everything went ok at the UCCS end - UCCS_OK 
+	if ( var_rep.iResult == UCCS_OK )
+	{
+		// Return the data
+		// Check that the data received will fit into the return buffer
+		len = strlen (var_rep.iVariableValue) + 1;
+		if ( len > aOutputBufferSize )
+			return TDC_VARVALTOOLONG;
+
+		// Else copy the data into the return buffer
+		memcpy ( aOutputBuffer, var_rep.iVariableValue, len);
+	}
+
+	return var_rep.iResult;
+}
+
+/**********************************************************************************
+ *
+ * runCommand
+ *
+ *********************************************************************************/
+EXPORT_C TUint CUCCSDeviceControl::runCommandL( char* aCommandLine, int *aErrorCode )
+{
+	int ret, len, recDatalen;
+	TRunCommandRequest* run_req = new (ELeave) (TRunCommandRequest);
+	TRunCommandReply run_rep;
+	TPCommand cmd;
+
+	// Check params
+	assert ( aCommandLine != NULL );
+
+	// Check if aCommandLine can be copied into our structure
+	len = strlen( aCommandLine )+1;
+	if ( len > MAXCOMMANDLINELEN )
+		return TDC_COMMANDLINETOOLONG;
+
+	// Then copy into our buffer
+	memset( run_req->iCommandLine, 0x00, sizeof(run_req->iCommandLine) );
+	memcpy( run_req->iCommandLine, aCommandLine, len);
+
+	// Send the request
+	cmd = CMD_REQ_RUNCOMMAND;
+	ret = iProtocol->sendMessage( cmd, sizeof(*run_req), run_req);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRSENDING;
+
+	// Get the reply
+	recDatalen = sizeof(run_rep);
+	ret = iProtocol->receiveMessage( &cmd, &recDatalen, &run_rep);
+	*aErrorCode = ret;
+	if ( ret != TDP_SUCCESS )
+		return TDC_ERRRECV;
+
+	// Check whether we successfully retrieved the value we want
+	if ( cmd != CMD_REP_RUNCOMMAND)
+		return TDC_INVALIDREPLY;			// Not what we are expecting 
+
+	return run_rep.iResult;
+}
+