diff -r 7fdc9a71d314 -r 8ad140f3dd41 hti/PC_Tools/HTIGateway/ServicePlugins/HtiKeyEvent/HtiKeyEvent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hti/PC_Tools/HTIGateway/ServicePlugins/HtiKeyEvent/HtiKeyEvent.cpp Wed Oct 13 16:17:58 2010 +0300 @@ -0,0 +1,246 @@ +/* +* Copyright (c) 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 "HtiKeyEventH.h" +#include "HtiPlugin.h" +#include "HtiSoapHandlerInterface.h" + +const unsigned char CMD_SINGLE_KEY_PRESS = 0x01; +const unsigned char CMD_KEY_DOWN = 0x02; +const unsigned char CMD_KEY_UP = 0x03; +const unsigned char CMD_TYPE_TEXT = 0x04; +const unsigned char CMD_LONG_KEY_PRESS = 0x05; +const unsigned char CMD_TYPE_TEXT_PASSWORD = 0x06; +const unsigned char CMD_KEY_PRESS_SEQUENCE = 0x07; +const unsigned char CMD_TAP_SCREEN = 0x10; +const unsigned char CMD_TAP_AND_DRAG = 0x11; +const unsigned char CMD_TAP_AND_DRAG_MULTI = 0x12; +const unsigned char CMD_POINTER_DOWN = 0x13; +const unsigned char CMD_POINTER_UP = 0x14; + +const unsigned char KEY_EVENT_OK = 0xFF; + +//********************************************************************************** +// SOAP FUNCTIONS +// +//********************************************************************************** +//********************************************************************************** +// ns1__pressKey() +//********************************************************************************** +int ns1__pressKey(struct soap* soap, + short key, + struct ns1__pressKeyResponse *out) +{ + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_SINGLE_KEY_PRESS ); + msg.AddWord( key ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__holdKey() +//********************************************************************************** +int ns1__holdKey(struct soap* soap, + short key, + struct ns1__holdKeyResponse *out ) +{ + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_KEY_DOWN ); + msg.AddWord( key ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__releaseKey() +//********************************************************************************** +int ns1__releaseKey(struct soap* soap, + short key, + struct ns1__releaseKeyResponse *out) +{ + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_KEY_UP ); + msg.AddWord( key ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__longKeyPress() +//********************************************************************************** +int ns1__longKeyPress(struct soap* soap, + short key, + short time, + struct ns1__longKeyPressResponse *out) +{ + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_LONG_KEY_PRESS ); + msg.AddWord( key ); + msg.AddWord( time ); + return msg.SendReceiveMsg( time + HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__typeText() +//********************************************************************************** +int ns1__typeText(struct soap* soap, + wchar_t *text, + struct ns1__typeTextResponse *out) +{ + if(check_mandatory_wcstring_parameter(soap, text, "text")) + return SOAP_FAULT; + + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_TYPE_TEXT ); + msg.AddWCString( text ); + + // Set timeout for ok message + // Assume that writing 100 characters takes 10 seconds (should be more than enough) + // = 10s/100char = 0.1s/char = 100ms/char + int timeout = (int) wcslen(text)*100; + timeout+= HTIMSG_TIMEOUT_10_SECONDS; // add extra 10 seconds for lag + return msg.SendReceiveMsg( timeout ); +} + +//********************************************************************************** +// ns1__typeTextPassword() +//********************************************************************************** +int ns1__typeTextPassword(struct soap* soap, + wchar_t *text, + struct ns1__typeTextPasswordResponse *out) +{ + if(check_mandatory_wcstring_parameter(soap, text, "text")) + return SOAP_FAULT; + + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_TYPE_TEXT_PASSWORD ); + msg.AddWCString( text ); + + // Set timeout for ok message + // Assume that writing 100 characters takes 10 seconds (should be more than enough) + // = 10s/100char = 0.1s/char = 100ms/char + int timeout = (int) wcslen(text)*100; + timeout+= HTIMSG_TIMEOUT_10_SECONDS; // add extra 10 seconds for lag + return msg.SendReceiveMsg( timeout ); +} + +//********************************************************************************** +// ns1__keyPressSequence() +//********************************************************************************** +int ns1__keyPressSequence(struct soap* soap, + short time, + short interval, + struct ns1__arrayOfKeyCodes keyCodes, + struct ns1__keyPressSequenceResponse *out) +{ + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_KEY_PRESS_SEQUENCE ); + msg.AddWord( time ); + msg.AddWord( interval ); + for ( int i = 0; i < keyCodes.__size; i++ ) + { + msg.AddWord( keyCodes.__ptrKeyCode[i] ); + } + int timeout = keyCodes.__size * ( time + interval ); + timeout += HTIMSG_TIMEOUT_10_SECONDS; + return msg.SendReceiveMsg( timeout ); +} + +//********************************************************************************** +// ns1__tapScreen() +//********************************************************************************** +int ns1__tapScreen(struct soap* soap, + struct ns1__HtiPoint tapPoint, + short timeToHold, + short tapCount, + short pauseBetweenTaps, + struct ns1__tapScreenResponse *out) +{ + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_TAP_SCREEN ); + msg.AddWord( tapPoint.xCoordinate ); + msg.AddWord( tapPoint.yCoordinate ); + msg.AddWord( timeToHold ); + msg.AddWord( tapCount ); + msg.AddWord( pauseBetweenTaps ); + int timeout = tapCount * ( timeToHold + pauseBetweenTaps ); + timeout += HTIMSG_TIMEOUT_10_SECONDS; + return msg.SendReceiveMsg( timeout ); +} + +//********************************************************************************** +// ns1__tapAndDrag() +//********************************************************************************** +int ns1__tapAndDrag(struct soap* soap, + struct ns1__HtiPoint pointDown, + struct ns1__HtiPoint pointUp, + short dragTime, + struct ns1__tapAndDragResponse *out) +{ + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_TAP_AND_DRAG ); + msg.AddWord( pointDown.xCoordinate ); + msg.AddWord( pointDown.yCoordinate ); + msg.AddWord( pointUp.xCoordinate ); + msg.AddWord( pointUp.yCoordinate ); + msg.AddWord( dragTime ); + return msg.SendReceiveMsg( dragTime + HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__tapAndDragMultipoint() +//********************************************************************************** +int ns1__tapAndDragMultipoint(struct soap* soap, + short timeBetweenPoints, + short timeBetweenLines, + struct ns1__arrayOfLines lines, + struct ns1__tapAndDragMultipointResponse *out) +{ + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_TAP_AND_DRAG_MULTI ); + msg.AddWord( timeBetweenPoints ); + msg.AddWord( timeBetweenLines ); + int pointCount = 0; + for ( int i = 0; i < lines.__size; i++ ) + { + int pointsInLine = lines.__ptrLine[i].__size; + pointCount += pointsInLine; + msg.AddWord( pointsInLine ); + for ( int j = 0; j < pointsInLine; j++ ) + { + msg.AddWord( lines.__ptrLine[i].__ptrPoint[j].xCoordinate ); + msg.AddWord( lines.__ptrLine[i].__ptrPoint[j].yCoordinate ); + } + } + + int timeout = ( pointCount * timeBetweenPoints ) + + ( lines.__size * timeBetweenLines ); + timeout += HTIMSG_TIMEOUT_10_SECONDS; + return msg.SendReceiveMsg( timeout ); +} + +//********************************************************************************** +// ns1__pointerDown() +//********************************************************************************** +int ns1__pointerDown(struct soap* soap, + struct ns1__HtiPoint pointDown, + struct ns1__pointerDownResponse *out ) +{ + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_POINTER_DOWN ); + msg.AddWord( pointDown.xCoordinate ); + msg.AddWord( pointDown.yCoordinate ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__pointerUp() +//********************************************************************************** +int ns1__pointerUp(struct soap* soap, + struct ns1__HtiPoint pointUp, + struct ns1__pointerUpResponse *out ) +{ + HtiMsgHelper msg( soap, HTI_KEYEVENT_UID, CMD_POINTER_UP ); + msg.AddWord( pointUp.xCoordinate ); + msg.AddWord( pointUp.yCoordinate ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +}