testexecmgmt/ucc/Source/Uccs.v2/DeviceControlChannel/CUCCSCommandProtocol.cpp
changeset 0 3da2a79470a7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/Source/Uccs.v2/DeviceControlChannel/CUCCSCommandProtocol.cpp	Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,218 @@
+/*
+* 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 <time.h>
+#include <assert.h>
+
+/**********************************************************************************************
+ *
+ * Local Includes
+ *
+ *********************************************************************************************/
+#include "CUCCSCommandProtocol.h"
+#include "CFrameBuffer.h"
+#include "strncpynt.h"
+
+/**********************************************************************************************
+ *
+ * Defines
+ *
+ *********************************************************************************************/
+
+/**********************************************************************************************
+ *
+ * Constructor
+ *
+ *********************************************************************************************/
+CUCCSCommandProtocol::CUCCSCommandProtocol()
+{
+	iPort = NULL;
+	iOutput = NULL;
+ 
+	// Seed the random number generator
+	srand( (unsigned)time(NULL) );
+}
+
+/**********************************************************************************************
+ *
+ * Destructor
+ *
+ *********************************************************************************************/
+CUCCSCommandProtocol::~CUCCSCommandProtocol()
+{
+}
+	
+/**********************************************************************************************
+ *
+ * Initialise
+ *
+ *********************************************************************************************/
+TCPError CUCCSCommandProtocol::initialise(TRemoteControlTransport aTransport, char* aRemoteHost, IOutput* aOutput)
+{
+	int ret;
+
+	// Check params are not equal to NULL
+	assert (aRemoteHost != NULL);
+	assert (strlen(aRemoteHost) < (KMAXPORTNAME -1));
+	assert (aOutput != NULL);
+
+	// Assign the params to the relevant member data.
+	if ( aTransport == RCI_SERIAL )
+	{	
+		iPort = &iSerialPort;
+	}
+	else if ( aTransport == RCI_CONSOLE)
+	{
+		iPort = &iConsolePort;
+	}
+	else if ( aTransport == RCI_TCP)
+	{
+		iPort = &iTcpPort;
+	}
+	else
+	{
+		return TCP_INVALIDTRANSPORT;
+	}
+
+	// Set the state members 
+	STRNCPY_NULL_TERMINATE( iRemoteHost, aRemoteHost, KMAXPORTNAME );
+	iOutput = aOutput;
+	iRand_UID = (unsigned)rand();
+
+	// Open the serial port
+	ret = iPort->OpenPort(iRemoteHost);
+	if( ret != 0 ) {
+		return TCP_FAILEDTOOPENPORT;
+	}
+	return TCP_SUCCESS;
+}
+
+/**********************************************************************************************
+ *
+ * Disconnect
+ *
+ *********************************************************************************************/
+TCPError CUCCSCommandProtocol::disconnect()				
+{
+	// Close the serial port.
+	iPort->ClosePort();
+	iPort = NULL;
+
+	return TCP_SUCCESS;
+}
+
+/**********************************************************************************************
+ *
+ * SendReply
+ *
+ *********************************************************************************************/	
+TCPError CUCCSCommandProtocol::sendReply( TPCommand aCommand, int aDataSize, void* aData )
+{
+	int iFrameSize, ret;
+	TFBError err;
+
+	if (!isValidCMDID(aCommand))
+		return TCP_INVALIDCMDID;
+	
+	iFrameSize = KMAXFRAMESIZE;
+	err = CFrameBuffer::createSendBuffer( iRand_UID, aCommand, aDataSize, (char*)aData, iFrame, &iFrameSize );
+	if ( err != TFB_SUCCESS)
+		return TCP_ERRCREATINGBUFFER;
+
+	ret = iPort->SendBytes(iFrame, &iFrameSize);
+	if ( ret != 0 )
+		return TCP_ERRSENDINGBYTES;
+
+	return TCP_SUCCESS;
+}
+
+/**********************************************************************************************
+ *
+ * ReceiveMessage
+ *
+ *********************************************************************************************/	
+TCPError CUCCSCommandProtocol::receiveMessage( TPCommand* aCommand, int* aDataLength, void* aData )
+{
+	int res, len;
+	TPHeader header;
+
+	len = sizeof(header);
+
+	// Read the first 12 bytes of header -  the uid, command and the data size.	
+	res = iPort->ReceiveBytes((char*)&header, &len );
+	if ( res != 0 )
+		return TCP_ERRRECVINGBYTES;
+	
+	// Decode the response
+	iRand_UID = header.iUid;        
+	*aCommand = header.iCmdID;       
+	*aDataLength = header.iDataLen; 
+	
+	// Get the rest
+	res = iPort->ReceiveBytes((char*)aData, aDataLength);
+	if ( res != 0 )
+		return TCP_ERRRECVINGBYTES;
+	
+	return TCP_SUCCESS;
+}
+
+/**********************************************************************************************
+ *
+ * Check IDs
+ *
+ *********************************************************************************************/	
+bool CUCCSCommandProtocol::isValidCMDID(TPCommand aCommand)
+{	
+	bool ret_val = true;
+
+	switch (aCommand) 
+	{
+		case CMD_REP_SIGNALID:
+			break;
+
+		case CMD_REP_RENDEZVOUSID:
+			break;
+
+		case CMD_REP_WAITID:
+			break;
+   
+		case CMD_REP_STARTUSECASEID:
+			break;
+
+		case CMD_REP_ENDUSECASEID:
+			break;
+
+		case CMD_REP_GETVARIABLENAMEID:
+			break;
+
+		case CMD_QUITID:
+			break;
+
+		case CMD_REP_RUNCOMMAND:
+			break;
+
+		default:
+			ret_val = false;
+			break;
+   }
+
+	return ret_val;
+}
+