diff -r 000000000000 -r 3da2a79470a7 testexecmgmt/ucc/Source/Uccs.v2/DeviceControlChannel/CUCCSCommandProtocol.cpp --- /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 +#include + +/********************************************************************************************** + * + * 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; +} +