diff -r 7fdc9a71d314 -r 8ad140f3dd41 hti/PC_Tools/HTIGateway/ServicePlugins/HtiScreenshot/HtiScreenshot.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hti/PC_Tools/HTIGateway/ServicePlugins/HtiScreenshot/HtiScreenshot.cpp Wed Oct 13 16:17:58 2010 +0300 @@ -0,0 +1,665 @@ +/* +* 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 "HtiScreenshotH.h" + +#include "hticommon.h" +#include "HtiPlugin.h" +#include + +#include "HtiSoapHandlerInterface.h" + +// Command codes +const unsigned char CMD_SCR_FULL = 0x01; +const unsigned char CMD_SCR_REGION = 0x02; +const unsigned char CMD_SCR_FULL_ZIP = 0x03; +const unsigned char CMD_SCR_REGION_ZIP = 0x04; + +const unsigned char CMD_TEXT_RCG_U = 0x11; +const unsigned char CMD_TEXT_IMG_U = 0x13; + +const unsigned char CMD_SCR_FULL_SERIES = 0x21; +const unsigned char CMD_SCR_REGION_SERIES = 0x22; +const unsigned char CMD_SCR_FULL_ZIP_SERIES = 0x23; +const unsigned char CMD_SCR_REGION_ZIP_SERIES = 0x24; + +const unsigned char CMD_CHANGE_SCREEN = 0x30; + +const unsigned char CMD_SCREEN_MODE = 0x3A; + +const unsigned char CMD_DELTA_SCR_FULL = 0x81; +const unsigned char CMD_DELTA_SCR_REGION = 0x82; +const unsigned char CMD_DELTA_SCR_FULL_ZIP = 0x83; +const unsigned char CMD_DELTA_SCR_REGION_ZIP = 0x84; +const unsigned char CMD_DELTA_SCR_RESET = 0x85; +const unsigned char CMD_DELTA_SCR_FULL_SERIES = 0xA1; +const unsigned char CMD_DELTA_SCR_REGION_SERIES = 0xA2; +const unsigned char CMD_DELTA_SCR_FULL_ZIP_SERIES = 0xA3; +const unsigned char CMD_DELTA_SCR_REGION_ZIP_SERIES = 0xA4; + + +const unsigned char HTI_FONT_BOLD = 0x01; +const unsigned char HTI_FONT_ITALIC = 0x02; +const unsigned char HTI_FONT_NOTAA = 0x04; +const unsigned char HTI_FONT_SUPER = 0x08; +const unsigned char HTI_FONT_SUB = 0x18; + +const unsigned char TXT_RCG_OK = 0xF0; +const unsigned char TXT_RCG_NOK = 0xF1; + +const int MAX_HREF_LEN = 128; + +char zipMimeType[] = "application/octet-stream"; //?? + +const static int g_ScreenHtiTimeoutImage = 120000; +const static int g_ScreenHtiTimeoutRecongition = 60000; + +//********************************************************************************** +// HELPER FUNCTIONS +// +//********************************************************************************** +//********************************************************************************** +// AddHtiFont +//********************************************************************************** +void AddHtiFont(HtiMsgHelper &msg, struct ns1__HtiFont &font) +{ + msg.AddWCStringWithLengthByte( font.fontName ); + msg.AddWord( font.fontHeight ); + + BYTE fontStyle = 0x0; + + // These can be combined + if( font.isBold ) + fontStyle |= HTI_FONT_BOLD; + if( font.isItalic ) + fontStyle |= HTI_FONT_ITALIC; + if( font.isNotAntialiased ) + fontStyle |= HTI_FONT_NOTAA; + + // And these cannot + if( font.position == 1 ) + fontStyle |= HTI_FONT_SUPER; + else if( font.position == 2 ) + fontStyle |= HTI_FONT_SUB; + + msg.AddByte( fontStyle ); +} + +//********************************************************************************** +// GetHref +//********************************************************************************** +void GetHref(char* str, const unsigned char cmd) +{ + sprintf(str, "htiSs%x%d", cmd, clock() ); +} + +//********************************************************************************** +// SetScreenCaptureAttachment +//********************************************************************************** +int SetScreenCaptureAttachment(struct soap* soap, + BYTE* data, + int dataSize, + BYTE command, + char* mimeType, + struct ns1__captureScreenResponse &r) +{ + // alloc soap memory for attachment + char* soapAttachment = (char*)soap_malloc(soap, dataSize ); + memcpy( soapAttachment, data, dataSize ); + + // get & set href for attachment + char href[MAX_HREF_LEN]; + GetHref(href, command); + r._returnAttachment.href = (char*)soap_malloc(soap, strlen(href)+1 ); + strcpy( r._returnAttachment.href, href ); + + // default mimetype is bmp + if ( !( mimeType ? strlen( mimeType ) : 0 ) ) + mimeType = "image/bmp"; + + // set mimetype + r._returnAttachment.mimeType = (char*)soap_malloc(soap, strlen(mimeType)+1 ); + strcpy( r._returnAttachment.mimeType, mimeType ); + + // set the attahcment + soap_set_dime(soap); + return soap_set_dime_attachment(soap, soapAttachment, dataSize, + mimeType, href, 0, NULL); +} + +//********************************************************************************** +// SetDeltaScreenCaptureAttachment +//********************************************************************************** +int SetDeltaScreenCaptureAttachment(struct soap* soap, + BYTE* data, + int dataSize, + BYTE command, + char* mimeType, + struct ns1__captureDeltaScreenResponse &r) +{ + // Set rectangle + r._returnDeltaAttachment.rect.topLeftX = *(WORD*)data; data+=2; + r._returnDeltaAttachment.rect.topLeftY = *(WORD*)data; data+=2; + r._returnDeltaAttachment.rect.bottomRightX = *(WORD*)data; data+=2; + r._returnDeltaAttachment.rect.bottomRightY = *(WORD*)data; data+=2; + dataSize -= 2*4; + + // No attachment? + if ( dataSize == 0 ) + return SOAP_OK; + + // alloc soap memory for attachment + char* soapAttachment = (char*)soap_malloc(soap, dataSize ); + memcpy( soapAttachment, data, dataSize ); + + // get & set href for attachment + char href[MAX_HREF_LEN]; + GetHref(href, command); + r._returnDeltaAttachment.href = (char*)soap_malloc(soap, strlen(href)+1 ); + strcpy( r._returnDeltaAttachment.href, href ); + + // default mimetype is bmp + if ( !( mimeType ? strlen( mimeType ) : 0 ) ) + mimeType = "image/bmp"; + + // set mimetype + r._returnDeltaAttachment.mimeType = (char*)soap_malloc(soap, strlen(mimeType)+1 ); + strcpy( r._returnDeltaAttachment.mimeType, mimeType ); + + // set the attahcment + soap_set_dime(soap); + return soap_set_dime_attachment(soap, soapAttachment, dataSize, + mimeType, href, 0, NULL); +} + +//********************************************************************************** +// GetSerieShotFiles +//********************************************************************************** +int GetSerieShotFiles(struct soap* soap, + HtiMsgHelper &msg, + struct ArrayOfFiles *files ) +{ + // list of screenshot files is returned + char** tmp_array_ptr = NULL; + int i = 0; + files->__size = 0; + while( i < msg.GetMsgLen() ) + { + int fileNameLen = msg.GetMsgBody()[i++]; + tmp_array_ptr = (char**) realloc(tmp_array_ptr, + (files->__size+1)*sizeof(char**)); + tmp_array_ptr[files->__size++] = msg.GetSoapString( i, fileNameLen ); + i += fileNameLen; + } + + if ( files->__size == 0 ) + { + soap->error = soap_receiver_fault( soap, "HtiError", + "No screenshot files returned"); + return SOAP_FAULT; + } + + // alloc (soap) space for pointers & copy data from tmp_array_ptr + files->__ptr = (char**) soap_malloc(soap, sizeof(char**)*files->__size); + memcpy(files->__ptr, tmp_array_ptr, sizeof(char**)*files->__size); + free(tmp_array_ptr); + return SOAP_OK; +} + +//********************************************************************************** +// SOAP FUNCTIONS +// +//********************************************************************************** + +//********************************************************************************** +// ns1__captureFullScreen +//********************************************************************************** +int ns1__captureFullScreen(struct soap* soap, + unsigned char colorDepth, + char *imageMimeType, + struct ns1__captureScreenResponse &r) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_SCR_FULL ); + msg.AddByte( colorDepth ); + msg.AddString( imageMimeType ); + if ( msg.SendReceiveMsg( g_ScreenHtiTimeoutImage ) ) + return SOAP_FAULT; + + return SetScreenCaptureAttachment( soap, msg.GetMsgBody(), msg.GetMsgLen(), + CMD_SCR_FULL, imageMimeType ,r ); +} + +//********************************************************************************** +// ns1__captureFullScreenZip +//********************************************************************************** +int ns1__captureFullScreenZip(struct soap* soap, + unsigned char colorDepth, + char *imageMimeType, + struct ns1__captureScreenResponse &r) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_SCR_FULL_ZIP ); + msg.AddByte( colorDepth ); + msg.AddString( imageMimeType ); + if ( msg.SendReceiveMsg( g_ScreenHtiTimeoutImage ) ) + return SOAP_FAULT; + + return SetScreenCaptureAttachment( soap, msg.GetMsgBody(), msg.GetMsgLen(), + CMD_SCR_FULL_ZIP, zipMimeType ,r ); +} + +//********************************************************************************** +// ns1__captureRegion +//********************************************************************************** +int ns1__captureRegion(struct soap* soap, + struct ns1__HtiRect rect, + unsigned char colorDepth, + char *imageMimeType, + struct ns1__captureScreenResponse &r) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_SCR_REGION ); + msg.AddWord( rect.topLeftX ); + msg.AddWord( rect.topLeftY ); + msg.AddWord( rect.bottomRightX ); + msg.AddWord( rect.bottomRightY ); + msg.AddByte( colorDepth ); + msg.AddString( imageMimeType ); + if ( msg.SendReceiveMsg( g_ScreenHtiTimeoutImage ) ) + return SOAP_FAULT; + + return SetScreenCaptureAttachment( soap, msg.GetMsgBody(), msg.GetMsgLen(), + CMD_SCR_REGION, imageMimeType ,r ); +} + +//********************************************************************************** +// ns1__captureRegionZip +//********************************************************************************** +int ns1__captureRegionZip(struct soap* soap, + struct ns1__HtiRect rect, + unsigned char colorDepth, + char *imageMimeType, + struct ns1__captureScreenResponse &r) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_SCR_REGION_ZIP ); + msg.AddWord( rect.topLeftX ); + msg.AddWord( rect.topLeftY ); + msg.AddWord( rect.bottomRightX ); + msg.AddWord( rect.bottomRightY ); + msg.AddByte( colorDepth ); + msg.AddString( imageMimeType ); + if ( msg.SendReceiveMsg( g_ScreenHtiTimeoutImage ) ) + return SOAP_FAULT; + + return SetScreenCaptureAttachment( soap, msg.GetMsgBody(), msg.GetMsgLen(), + CMD_SCR_REGION_ZIP, zipMimeType ,r ); +} + +//********************************************************************************** +// ns1__recognizeText +//********************************************************************************** +int ns1__recognizeText(struct soap* soap, + wchar_t *text, + struct ArrayOfHtiFonts* array, + struct ns1__recognizeTextResponse &r) +{ + // check text parameter + if ( check_mandatory_wcstring_parameter( soap, text, "text" ) ) + return SOAP_FAULT; + else if ( wcslen( text ) > 0xff ) + { + soap->error = soap_sender_fault(soap, "HtiGateway", "Text too long"); + return SOAP_FAULT; + } + + // check array parameter + if ( array == NULL ) + { + soap->error = soap_sender_fault( soap, "HtiGateway", + "No font array parameter" ); + return SOAP_FAULT; + } + else if ( array->__size < 0 ) + { + soap->error = soap_sender_fault( soap, "HtiGateway", "Font array empty" ); + return SOAP_FAULT; + } + else if ( array->__size > 0xff ) + { + soap->error = soap_sender_fault( soap, "HtiGateway", "Too many fonts" ); + return SOAP_FAULT; + } + for ( int i = 0; i < array->__size; i++ ) + { + char tmp[20]; + sprintf(tmp, "HtiFont[%d]", i); + if ( check_mandatory_wcstring_parameter( soap, + array->__ptrHtiFont[i].fontName, tmp ) ) + return SOAP_FAULT; + } + + // construct and send the message + HtiMsgHelper msg( soap, HTI_UID, CMD_TEXT_RCG_U ); + msg.AddWCStringWithLengthByte( text ); + msg.AddByte( array->__size ); + for( int i = 0; i < array->__size; i++ ) + AddHtiFont( msg, array->__ptrHtiFont[i] ); + + if ( msg.SendReceiveMsg( g_ScreenHtiTimeoutRecongition ) ) + return SOAP_FAULT; + + // Check response + if ( msg.CheckMsgExactLen( 6 ) ) + return SOAP_FAULT; + + switch( msg.GetByte(0) ) + { + case TXT_RCG_OK: + r._returnText.found = true; + r._returnText.x = msg.GetWord( 1 ); + r._returnText.y = msg.GetWord( 3 ); + r._returnText.fontIndex = msg.GetByte( 5 ); + break; + + case TXT_RCG_NOK: + r._returnText.found = false; + break; + + default: + soap->error = soap_receiver_fault_format(soap, "HtiError", + "Invalid response command code 0x%x", msg.GetByte(0) ); + return SOAP_FAULT; + } + + return SOAP_OK; +} + +//********************************************************************************** +// ns1__createTextImage +//********************************************************************************** +int ns1__createTextImage(struct soap* soap, + unsigned char colorDepth, + char *imageMimeType, + wchar_t *text, + struct ns1__HtiFont* font, + struct ns1__HtiRGB fgColor, + struct ns1__HtiRGB bgColor, + struct ns1__captureScreenResponse &r) +{ + // check text & imageMimeType parameters + if ( check_mandatory_wcstring_parameter( soap, text, "text" ) || + check_mandatory_string_parameter( soap, imageMimeType, "imageMimeType" ) ) + return SOAP_FAULT; + else if ( wcslen( text ) > 0xff ) + { + soap->error = soap_sender_fault(soap, "HtiGateway", "Text too long"); + return SOAP_FAULT; + } + + // check font parameter + if ( font == NULL ) + { + soap->error = soap_sender_fault( soap, "HtiGateway", "No font parameter" ); + return SOAP_FAULT; + } + if ( check_mandatory_wcstring_parameter( soap, font->fontName, "fontName" ) ) + return SOAP_FAULT; + + // construct and send the message + HtiMsgHelper msg( soap, HTI_UID, CMD_TEXT_IMG_U ); + msg.AddByte( colorDepth ); + msg.AddStringWithLengthByte( imageMimeType ); + msg.AddWCStringWithLengthByte( text ); + AddHtiFont( msg, *font ); + msg.AddByte( fgColor.red ); // note little endian encoding + msg.AddByte( fgColor.green ); + msg.AddByte( fgColor.blue ); + msg.AddByte( 0x00 ); + msg.AddByte( bgColor.red ); + msg.AddByte( bgColor.green ); + msg.AddByte( bgColor.blue ); + msg.AddByte( 0x00 ); + if ( msg.SendReceiveMsg( g_ScreenHtiTimeoutImage ) ) + return SOAP_FAULT; + + // get response + return SetScreenCaptureAttachment( soap, msg.GetMsgBody(), msg.GetMsgLen(), + CMD_TEXT_IMG_U, imageMimeType ,r ); +} + + + +//********************************************************************************** +// ns1__captureFullScreenSeries +//********************************************************************************** +int ns1__captureFullScreenSeries(struct soap* soap, + int duration, + int interval, + unsigned char colorDepth, + char *imageMimeType, + struct ArrayOfFiles *files) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_SCR_FULL_SERIES ); + msg.AddInt( duration ); + msg.AddInt( interval ); + msg.AddByte( colorDepth ); + msg.AddString( imageMimeType ); + int timeout = HTIMSG_TIMEOUT_10_SECONDS + duration/1000; // duration is in us + if ( msg.SendReceiveMsg( timeout ) ) + return SOAP_FAULT; + + return GetSerieShotFiles( soap, msg, files ); +} + +//********************************************************************************** +// ns1__captureFullScreenZipSeries +//********************************************************************************** +int ns1__captureFullScreenZipSeries(struct soap* soap, + int duration, + int interval, + unsigned char colorDepth, + char *imageMimeType, + struct ArrayOfFiles *files) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_SCR_FULL_ZIP_SERIES ); + msg.AddInt( duration ); + msg.AddInt( interval ); + msg.AddByte( colorDepth ); + msg.AddString( imageMimeType ); + int timeout = HTIMSG_TIMEOUT_10_SECONDS + duration/1000; // duration is in us + if ( msg.SendReceiveMsg( timeout ) ) + return SOAP_FAULT; + + return GetSerieShotFiles( soap, msg, files ); +} + +//********************************************************************************** +// ns1__captureRegionSeries +//********************************************************************************** +int ns1__captureRegionSeries(struct soap* soap, + int duration, + int interval, + unsigned char colorDepth, + struct ns1__HtiRect rect, + char *imageMimeType, + struct ArrayOfFiles *files) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_SCR_REGION_SERIES ); + msg.AddInt( duration ); + msg.AddInt( interval ); + msg.AddByte( colorDepth ); + msg.AddWord( rect.topLeftX ); + msg.AddWord( rect.topLeftY ); + msg.AddWord( rect.bottomRightX ); + msg.AddWord( rect.bottomRightY ); + msg.AddString( imageMimeType ); + int timeout = HTIMSG_TIMEOUT_10_SECONDS + duration/1000; // duration is in us + if ( msg.SendReceiveMsg( timeout ) ) + return SOAP_FAULT; + + return GetSerieShotFiles( soap, msg, files ); +} + +//********************************************************************************** +// ns1__captureRegionZipSeries +//********************************************************************************** +int ns1__captureRegionZipSeries(struct soap* soap, + int duration, + int interval, + unsigned char colorDepth, + struct ns1__HtiRect rect, + char *imageMimeType, + struct ArrayOfFiles *files) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_SCR_REGION_ZIP_SERIES ); + msg.AddInt( duration ); + msg.AddInt( interval ); + msg.AddByte( colorDepth ); + msg.AddWord( rect.topLeftX ); + msg.AddWord( rect.topLeftY ); + msg.AddWord( rect.bottomRightX ); + msg.AddWord( rect.bottomRightY ); + msg.AddString( imageMimeType ); + int timeout = HTIMSG_TIMEOUT_10_SECONDS + duration/1000; // duration is in us + if ( msg.SendReceiveMsg( timeout ) ) + return SOAP_FAULT; + + return GetSerieShotFiles( soap, msg, files ); +} + +//********************************************************************************** +// ns1__captureDeltaFullScreen +//********************************************************************************** +int ns1__captureDeltaFullScreen(struct soap* soap, + unsigned char colorDepth, + char *imageMimeType, + struct ns1__captureDeltaScreenResponse &r) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELTA_SCR_FULL ); + msg.AddByte( colorDepth ); + msg.AddString( imageMimeType ); + if ( msg.SendReceiveMsg( g_ScreenHtiTimeoutImage ) ) + return SOAP_FAULT; + + return SetDeltaScreenCaptureAttachment( soap, msg.GetMsgBody(), msg.GetMsgLen(), + CMD_DELTA_SCR_FULL, imageMimeType ,r ); +} +//********************************************************************************** +// ns1__captureDeltaFullScreenZip +//********************************************************************************** +int ns1__captureDeltaFullScreenZip(struct soap* soap, + unsigned char colorDepth, + char *imageMimeType, + struct ns1__captureDeltaScreenResponse &r) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELTA_SCR_FULL_ZIP ); + msg.AddByte( colorDepth ); + msg.AddString( imageMimeType ); + if ( msg.SendReceiveMsg( g_ScreenHtiTimeoutImage ) ) + return SOAP_FAULT; + + return SetDeltaScreenCaptureAttachment( soap, msg.GetMsgBody(), msg.GetMsgLen(), + CMD_DELTA_SCR_FULL_ZIP, zipMimeType ,r ); +} +//********************************************************************************** +// ns1__captureDeltaRegion +//********************************************************************************** +int ns1__captureDeltaRegion(struct soap* soap, + struct ns1__HtiRect rect, + unsigned char colorDepth, + char *imageMimeType, + struct ns1__captureDeltaScreenResponse &r) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELTA_SCR_REGION ); + msg.AddWord( rect.topLeftX ); + msg.AddWord( rect.topLeftY ); + msg.AddWord( rect.bottomRightX ); + msg.AddWord( rect.bottomRightY ); + msg.AddByte( colorDepth ); + msg.AddString( imageMimeType ); + if ( msg.SendReceiveMsg( g_ScreenHtiTimeoutImage ) ) + return SOAP_FAULT; + + return SetDeltaScreenCaptureAttachment( soap, msg.GetMsgBody(), msg.GetMsgLen(), + CMD_DELTA_SCR_REGION, imageMimeType ,r ); +} +//********************************************************************************** +// ns1__captureDeltaRegionZip +//********************************************************************************** +int ns1__captureDeltaRegionZip(struct soap* soap, + struct ns1__HtiRect rect, + unsigned char colorDepth, + char *imageMimeType, + struct ns1__captureDeltaScreenResponse &r) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELTA_SCR_REGION_ZIP ); + msg.AddWord( rect.topLeftX ); + msg.AddWord( rect.topLeftY ); + msg.AddWord( rect.bottomRightX ); + msg.AddWord( rect.bottomRightY ); + msg.AddByte( colorDepth ); + msg.AddString( imageMimeType ); + if ( msg.SendReceiveMsg( g_ScreenHtiTimeoutImage ) ) + return SOAP_FAULT; + + return SetDeltaScreenCaptureAttachment( soap, msg.GetMsgBody(), msg.GetMsgLen(), + CMD_DELTA_SCR_REGION_ZIP, zipMimeType ,r ); +} + +//********************************************************************************** +// ns1__selectScreen +//********************************************************************************** +int ns1__selectScreen(struct soap* soap, + unsigned char screenNr, + struct ns1__selectScreenResponse *out) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_CHANGE_SCREEN ); + msg.AddByte( screenNr ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__resetDeltaScreen +//********************************************************************************** +int ns1__resetDeltaScreen(struct soap* soap, + void *_, + struct ns1__resetDeltaScreenResponse *out) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELTA_SCR_RESET ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__screenMode +//********************************************************************************** +int ns1__screenMode(struct soap* soap, + void *_, + struct ns1__screenModeResponse& r) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_SCREEN_MODE ); + if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) ) + return SOAP_FAULT; + + // Check response + if ( msg.CheckMsgExactLen( 8 ) ) + return SOAP_FAULT; + + r._returnScreenMode.screenNumber = msg.GetByte( 0 ); + r._returnScreenMode.screenWidth = msg.GetWord( 1 ); + r._returnScreenMode.screenHeight = msg.GetWord( 3 ); + r._returnScreenMode.screenRotation = (ns1__screenOrientation)msg.GetByte( 5 ); + r._returnScreenMode.displayMode = msg.GetByte( 6 ); + r._returnScreenMode.focusScreenNumber = msg.GetByte( 7 ); + + return SOAP_OK; +}