testmgmt/testdriver/shared/com.symbian.jstat/nativeSrc/JStat.cpp
changeset 0 f1112f777ce9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testmgmt/testdriver/shared/com.symbian.jstat/nativeSrc/JStat.cpp	Mon Mar 08 15:05:03 2010 +0800
@@ -0,0 +1,307 @@
+/*
+* 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: 
+*
+*/
+
+
+//Source file that creates the interface between the C++		*
+//STAT component and Java.	
+
+#include <iostream> 
+#include <String>
+
+#include <windows.h>
+
+#include "com_symbian_jstat_JStat.h"
+#include "Stat.h"
+#include "StatExp.h"
+
+static const int MAX_PORT_STRING=6;
+char ComPort[MAX_PORT_STRING]="";
+
+HMODULE	ihLib =	NULL;
+PROC_CONNECT	iptrConnect =	NULL;
+PROC_DISCONNECT	iptrDisconnect =	NULL;
+PROC_SENDRAWCOMMAND	iptrSendRawCommand =	NULL;
+PROC_SETCOMMANDLOGGING	iptrSetCommandLogging =	NULL;
+PROC_GETERROR	iptrGetError =	NULL;
+PROC_VERSION iptrVersion = NULL;
+
+PROC_GETRECEIVEDDATA iptrGetReceivedData = NULL;
+
+int iType;
+
+
+void jstring2string( JNIEnv *env, const jstring src, std::string &dest )
+{
+	const char	*ptr =	env->GetStringUTFChars( src, false );
+	dest =	ptr;
+	env->ReleaseStringUTFChars( src, ptr );
+}
+
+void string2jstring( JNIEnv *env, const char* src, jstring &dest )
+{
+	dest =	env->NewStringUTF( src );
+}
+
+
+JNIEXPORT jint JNICALL Java_com_symbian_jstat_JStatRunCommand_connect
+  (JNIEnv *_env, jobject, jstring _pszPlatformType)
+{
+	try {
+		using std::cout;
+		using std::endl;
+
+		int connection=-1;
+		std::string aIPAddress;
+		std::string	pszPlatformType;
+
+		jstring2string( _env, _pszPlatformType, pszPlatformType );
+		
+		//***********************************************************************
+		//	USB
+		//***********************************************************************
+		if(strncmp(pszPlatformType.c_str(),"usb",3) == 0)
+			{
+			strcat(ComPort,pszPlatformType.c_str( )+3);
+			iType=SymbianUsb;
+			}
+	
+	
+		//***********************************************************************
+		//	TCP/IP
+		//***********************************************************************
+		else if(strncmp(pszPlatformType.c_str(),"tcp",3) == 0)
+			{
+			aIPAddress = pszPlatformType.substr(4);
+			pszPlatformType = pszPlatformType.substr(0,3);
+			iType=SymbianSocket;
+			}
+
+
+		//***********************************************************************
+		//	Infrared
+		//***********************************************************************
+		else if(strncmp(pszPlatformType.c_str( ),"ir",2) == 0)
+			{
+			strcpy(ComPort,"COM");				
+			strcat(ComPort,pszPlatformType.c_str( )+2);
+			}
+
+		//***********************************************************************
+		//	Serial
+		//***********************************************************************
+		else if(strncmp(pszPlatformType.c_str( ),"serial",6) == 0)
+			{
+			strcpy(ComPort,"COM");
+			strcat(ComPort,pszPlatformType.c_str( )+6);
+			iType=SymbianSerial;
+			}
+
+		//***********************************************************************
+		//	Bluetooth
+		//***********************************************************************
+		else if(strncmp(pszPlatformType.c_str( ),"bt",2) == 0)
+			{
+			strcpy(ComPort,"COM");
+			strcat(ComPort,pszPlatformType.c_str( )+2);
+			iType=SymbianBluetooth;
+			}
+
+		// load stat library first from local, if failed from epoc32
+
+		HMODULE	ihLib =	::LoadLibrary( DLLName );
+
+		if( ihLib  == NULL )
+			{
+			char path[MAX_PATH]=".\\stat.dll";
+			sprintf( path, "%s\\%s", DLLFolder, DLLName );
+			ihLib =	::LoadLibrary( path );
+			}
+
+		//if fails loading stat.dll return -1	
+		if( ihLib  == NULL )
+			{
+			cout << "Could not connect JStat.dll to STAT.dll." << endl;
+			return -1;
+			}
+		
+		// load functions
+		iptrConnect =	reinterpret_cast<PROC_CONNECT>(::GetProcAddress( ihLib, ProcConnect ));
+		iptrDisconnect =	reinterpret_cast<PROC_DISCONNECT>(::GetProcAddress( ihLib, ProcDisconnect ));
+		iptrSendRawCommand =	reinterpret_cast<PROC_SENDRAWCOMMAND>(::GetProcAddress( ihLib, ProcSendRawCommand ));
+		iptrSetCommandLogging =	reinterpret_cast<PROC_SETCOMMANDLOGGING>(::GetProcAddress( ihLib, ProcSetCommandLogging ));
+		iptrGetError =	reinterpret_cast<PROC_GETERROR>(::GetProcAddress( ihLib, ProcGetError ));
+		iptrGetReceivedData =	reinterpret_cast<PROC_GETRECEIVEDDATA>(::GetProcAddress( ihLib, ProcGetReceivedData ));
+		
+		//check all fuunctions were correctly loaded
+		if (iptrConnect == NULL)
+			{
+			cout << "Could not load JStat Function CONNECT." << endl;
+			return -1;	  
+			}
+		if (iptrDisconnect == NULL)
+			{
+			cout << "Could not load JStat Function DISCONNECT." << endl;
+			return -1;	  
+			}
+		if (iptrSendRawCommand == NULL)
+			{
+			cout << "Could not load JStat Function SENDRAWCOMMAND." << endl;
+			return -1;	  
+			}
+		if (iptrSetCommandLogging == NULL)
+			{
+			cout << "Could not load JStat Function SETCOMMANDLOGGING." << endl;
+			return -1;	  
+			}
+		if (iptrGetError == NULL)
+			{
+			cout << "Could not load JStat Function GETERROR." << endl;
+			return -1;	  
+			}
+		if (iptrGetReceivedData == NULL)
+		   {
+			cout << "Could not load JStat Function GETRECIEVEDDATA." << endl;
+			return -1;	   
+		   }
+		
+		
+		//connect using the previously set type
+		if(iType==SymbianSocket)
+			{
+			connection = (iptrConnect)((STATConnectType)iType,aIPAddress.c_str(),NULL,NULL);
+			}
+		else
+			{
+			connection = iptrConnect((STATConnectType)iType,ComPort,NULL,NULL);
+			}
+
+		
+		if(!connection)
+			{	
+			cout << "Could not connect JStat with transport." << endl;
+			return -1;
+			}
+		
+		
+		// Use default file name for logging (named according to the current date).
+		// Do not append.
+		char	*fileName =	NULL;
+		bool	append =	true;
+		(iptrSetCommandLogging)(connection,fileName,NULL,EVerbose,append,NULL,NULL);
+		
+		return connection;
+	} catch (...) {
+		return -1;
+	}
+
+}
+
+JNIEXPORT jint JNICALL Java_com_symbian_jstat_JStatRunCommand_disconnect
+  (JNIEnv *_env, jobject, jint _handle)
+{
+	//disconnect from STAT
+	try {
+		int ret;
+		
+		ret=(iptrDisconnect)(_handle);
+		
+		if( ihLib != NULL )
+			{
+			::FreeLibrary( ihLib );
+			ihLib =	NULL;
+			iptrConnect =	NULL;
+			iptrDisconnect =	NULL;
+			iptrSendRawCommand =	NULL;
+			iptrGetError =	NULL;
+			}
+
+		return ret;
+	} catch (...) {
+		return -1;
+	}
+
+}
+
+JNIEXPORT jint JNICALL Java_com_symbian_jstat_JStatRunCommand_doCommand
+  (JNIEnv *_env, jobject, jint _handle, jstring _command )
+{
+	//send a raw command to stat and returns the returned value
+	try {
+		int ret;
+		
+		std::string	command;
+		jstring2string( _env, _command, command );
+		ret = iptrSendRawCommand(_handle,command.c_str( ),NULL);
+
+		return (ret);
+	} catch (...) {
+		return -1;
+	}
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_symbian_jstat_JStatRunCommand_getError
+  (JNIEnv *_env, jobject, jint _handle)
+{
+	//return the error definition from stat
+	jstring error;
+
+	string2jstring( _env, iptrGetError(_handle), error);
+
+	return error;
+}
+
+
+JNIEXPORT jstring JNICALL Java_com_symbian_jstat_JStatRunCommand_getReceivedData
+  (JNIEnv *_env, jobject, jint _handle)
+{
+	//return the exposed buffer from received data
+
+	return (_env->NewStringUTF(iptrGetReceivedData(_handle)));
+}
+
+JNIEXPORT jstring JNICALL Java_com_symbian_jstat_JStat_getStatVersion
+(JNIEnv *_env, jobject)
+{
+	// load stat library first from local, if failed from epoc32
+	HMODULE	ihLib =	::LoadLibrary( DLLName );
+
+	if( ihLib  == NULL )
+		{
+		char path[MAX_PATH]=".\\stat.dll";
+		sprintf( path, "%s\\%s", DLLFolder, DLLName );
+		ihLib =	::LoadLibrary( path );
+		}
+
+	//if fails loading stat.dll return -1	
+	if( ihLib  == NULL )
+		{
+		return _env->NewStringUTF("Error loading stat.dll");
+		}
+	
+	// load version function
+	iptrVersion =	reinterpret_cast<PROC_VERSION>(::GetProcAddress( ihLib, ProcVersion ));
+
+	//check version function was correctly loaded
+	if(iptrVersion ==NULL )
+	   {
+	   return _env->NewStringUTF("Error loading Version function");	   
+	   }
+	
+	return _env->NewStringUTF(iptrVersion());
+}
+