--- /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;
+}
+