⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syjni.cpp

📁 使用Java的Jni技术对三洋数码相机驱动程序的封装,封装后的动态库可在Java开发环境中应用,解决了Java中调用Vc中开发的Dll问题
💻 CPP
字号:
// SYJNI.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "SYJNI.h"
#include <iostream.h>
#include <new.h>
#include "SYSDK.h"
#include "SanyoApi.h"

HANDLE m_hCamera;
CAM_COMM_PORT cam_comm_port;
static JNICallback m_callback;
JavaVM* g_pVm = 0;

/*
BOOL callback_proc(LPARAM lAppData, CAM_STATTYPE message_type, LONG lPercent)
{	
	JDK1_1AttachArgs thread_args;
	JNIEnv *env;
    g_pVm->AttachCurrentThread(( void** ) &env, &thread_args );
	g_pVm->GetEnv((void **)&env, JNI_VERSION_1_1);
	fprintf(stderr, "************ call back\n");	
	if (env == 0 ||env->ExceptionOccurred()) {
		fprintf(stderr, "************ java exception occurred\n");
		return 0;
	}
	env->CallVoidMethod(m_callback.m_obj,m_callback.release_progress_mid,(jlong)lPercent);

   /*JNICallback *callback = (JNICallback*)lAppData;
   JavaVM *s_pVm ;
   JDK1_1AttachArgs thread_args;
   callback->p_env->GetJavaVM(&s_pVm);
   s_pVm->AttachCurrentThread( ( void** ) &callback->p_env, &thread_args );
   callback->p_env->CallVoidMethod(callback->m_obj,callback->release_progress_mid,(jlong)lPercent);	
	return TRUE;
}

JNIEXPORT jlong JNICALL Java_cdsdk_SYSDK_start (JNIEnv *env, jobject obj)
{	
	env->GetJavaVM(&g_pVm);
	//设置JNI 指针,和Java回调函数ID

	memset(&m_callback,0,sizeof(JNICallback));
	m_callback.cls = env->GetObjectClass(obj);
	m_callback.p_env = env;
    m_callback.m_obj= env->NewGlobalRef(obj);	
	m_callback.release_progress_mid =env->GetMethodID(m_callback.cls, "releaseProgress", "(I)V");

   // m_callback.p_env->CallVoidMethod(m_callback.m_obj,m_callback.event_callback_mid,(jint)1,(jint)1,(jint)1,(jint)1);
	return 0;
}*/

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_getPictureFile(JNIEnv *env, jobject, jstring filename, jlong num)
{
	//MCam_setup_callback((LPFNSTATUS)callback_proc, NULL, m_hCamera);
	HANDLE hOutFile;
	const char* str = env->GetStringUTFChars( filename, 0);
    hOutFile = CreateFile(str,GENERIC_WRITE|GENERIC_READ, FILE_SHARE_WRITE|FILE_SHARE_READ,0,CREATE_ALWAYS,0,0);	
	CAM_ERROR cam_error = MCam_get_picture_file(hOutFile,num,m_hCamera);	
	CloseHandle(hOutFile); 
	env->ReleaseStringUTFChars(filename, str);
	return (jchar) cam_error;	
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_controlLcd(JNIEnv *, jobject,jint viewControl,jlong num)
{
	if (viewControl == 1)
	{
		CAM_ERROR cam_error = MCam_control_lcd (LCD_OPCODE_MONITOR,num,m_hCamera);
		return (jchar) cam_error;
	}
	else 
	{
		CAM_ERROR cam_error = MCam_control_lcd (LCD_OPCODE_POWER_OFF,num,m_hCamera);
		return (jchar) cam_error;
	}
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_getThroughPic(JNIEnv *, jobject)
{	
	//PBYTE buffer = (PBYTE) malloc(2097152);
	//byte pbuffer[4096] = {0}; 
	PBYTE pbuffer = new byte [4096]  ;	
	long *ppic_size = 0;	
	CAM_ERROR cam_error;
	if(pbuffer == NULL)
	{
		printf("pbuffer is null!!!");
		return -1;
	}
	if (MCam_ready ( m_hCamera )){
                 cam_error = MCam_get_through_picture(pbuffer, ppic_size, m_hCamera );		
	}	
	//free(pbuffer);
	delete pbuffer;
	return (jchar) cam_error;	
}
JNIEXPORT jint JNICALL Java_cdsdk_SYSDK_createHandle(JNIEnv *, jobject)
{
	m_hCamera = MCam_create_handle ();
	return 0;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_MCam_1error(JNIEnv *, jobject)
{
	CAM_ERROR cam_error = MCam_error (m_hCamera);
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_resetDLL(JNIEnv *, jobject)
{
    CAM_ERROR cam_error = MCam_reset_dll ();
    return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_closeHandle(JNIEnv *, jobject)
{
	CAM_ERROR cam_error = MCam_close_handle (m_hCamera);
	//CloseHandle(m_hCamera);
	return (jchar) cam_error;
}

JNIEXPORT jlong JNICALL Java_cdsdk_SYSDK_setPort(JNIEnv *, jobject, jint comm_auto,jint comm_usb)
{
  	if ((comm_auto == 0)&&(comm_usb == 1))
	{
		cam_comm_port = MCam_set_port (COMM_USB , m_hCamera );
	}else if ((comm_auto == 1)&&(comm_usb == 0))
	{
		cam_comm_port = MCam_set_port (COMM_AUTO , m_hCamera );
	}	
	return (jlong) cam_comm_port;	
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_sessionEnabled(JNIEnv *, jobject, jboolean enable_switch)
{
	CAM_ERROR cam_error = MCam_session_enabled ( enable_switch , m_hCamera );
	return (jchar) cam_error;
}

JNIEXPORT jboolean JNICALL Java_cdsdk_SYSDK_Ready(JNIEnv *, jobject)
{
	BOOL isReady = MCam_ready ( m_hCamera );
	return (jboolean) isReady;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setResolution(JNIEnv *, jobject, jchar res_select)
{
	CAM_ERROR cam_error;
 	if (res_select == 2)
	{
		 cam_error = MCam_set_resolution (RES_640_N,m_hCamera );
	}else if(res_select == 3)
	{
		 cam_error = MCam_set_resolution (RES_640_F,m_hCamera );
	}else if(res_select == 10)
	{
		 cam_error = MCam_set_resolution (RES_1600_N,m_hCamera );
	}else if(res_select == 11)
	{
		 cam_error = MCam_set_resolution (RES_1600_F,m_hCamera );
	}else if(res_select == 14)
	{
		 cam_error = MCam_set_resolution (RES_2048_N,m_hCamera );
	}else if(res_select == 15)
	{
		 cam_error = MCam_set_resolution (RES_2048_F,m_hCamera );
	}else if(res_select == 29)
	{
		 cam_error = MCam_set_resolution (RES_2048_S,m_hCamera );
	}else if(res_select == 65)
	{
		 cam_error = MCam_set_resolution (RES_2880_N,m_hCamera );
	}else if(res_select == 66)
	{
		 cam_error = MCam_set_resolution (RES_2880_F,m_hCamera );
	}	
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_getResolution(JNIEnv *, jobject)
{
	CAM_RES cam_res = MCam_get_resolution (m_hCamera);
	return (jchar) cam_res;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setExposure(JNIEnv *, jobject, jlong exp_duration)
{
	CAM_ERROR cam_error = MCam_set_exposure (exp_duration,m_hCamera );
	return (jchar) cam_error;
}

JNIEXPORT jlong JNICALL Java_cdsdk_SYSDK_getExposure(JNIEnv *, jobject)
{
	long exp_duration = MCam_get_resolution (m_hCamera);
	return (jlong) exp_duration;
}
JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setExposureBias(JNIEnv *, jobject, jlong Exposure_Bias )
{
	CAM_SFRACTION *pCAM_SFRACTION = new CAM_SFRACTION;
	pCAM_SFRACTION->lcam_denominator = Exposure_Bias;
	CAM_ERROR cam_error = MCam_set_exposure_bias (pCAM_SFRACTION, m_hCamera);
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setFlashMode(JNIEnv *, jobject, jchar flash_ctl)
{
	CAM_ERROR cam_error;
	if(flash_ctl == 0)
	{
		 cam_error = MCam_set_flash_mode (CAM_FLASH_AUTO,m_hCamera );	
	}else if (flash_ctl == 1)
	{
		 cam_error = MCam_set_flash_mode (CAM_FLASH_ON,m_hCamera );
	}else if (flash_ctl == 2)
	{
		 cam_error = MCam_set_flash_mode (CAM_FLASH_OFF,m_hCamera );
	}else if (flash_ctl == 3)
	{
		 cam_error = MCam_set_flash_mode (CAM_FLASH_RED,m_hCamera );
	}
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_getFlashMode(JNIEnv *, jobject)
{
	CAM_FLASH_MODE flash_ctl = MCam_get_flash_mode (m_hCamera);
	return (jchar) flash_ctl;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setISOSpeedRatings(JNIEnv *, jobject, jchar speed_rating)
{
	CAM_ERROR cam_error;
	if (speed_rating == 0)
	{
		 cam_error = MCam_set_iso_speed_ratings (SR_AUTO,m_hCamera );
	}else if (speed_rating == 1)
	{
		 cam_error = MCam_set_iso_speed_ratings (SR_ISO100,m_hCamera );
	}else if (speed_rating == 2)
	{
		 cam_error = MCam_set_iso_speed_ratings (SR_ISO200,m_hCamera );
	}else if (speed_rating == 3)
	{
		 cam_error = MCam_set_iso_speed_ratings (SR_ISO400,m_hCamera );
	}else if (speed_rating == 4)
	{
		 cam_error = MCam_set_iso_speed_ratings (SR_ISO50,m_hCamera );
	}
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setExposureMode(JNIEnv *, jobject, jlong aperture)
{
	EXPOSURE_MODE *pExpMode;
	pExpMode = new EXPOSURE_MODE;
	pExpMode->program_mode = PROGRAM_AUTO;
	pExpMode->aperture_number_numerator = aperture;	
	CAM_ERROR cam_error = MCam_set_exposure_mode (pExpMode,m_hCamera );
	return (jchar) cam_error;
}

JNIEXPORT jlong JNICALL Java_cdsdk_SYSDK_getPictureCount(JNIEnv *, jobject)
{
	long picCount = MCam_get_picture_count (m_hCamera);
	return (jlong) picCount;
}	

JNIEXPORT jlong JNICALL Java_cdsdk_SYSDK_getRemainingCount(JNIEnv *, jobject)
{
	long remainCount = MCam_get_remaining_count (m_hCamera);
	return (jlong) remainCount;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setPC_1CameraMode(JNIEnv *, jobject, jlong camera_mode)
{
	CAM_ERROR cam_error = MCam_set_pc_camera_mode (camera_mode,m_hCamera );
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_eraseAll(JNIEnv *, jobject)
{
	CAM_ERROR cam_error = MCam_erase_all (m_hCamera);
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_takePic(JNIEnv *, jobject)
{
	
	CAM_ERROR cam_error = MCam_take_pic (m_hCamera);
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_takePicSequential(JNIEnv *, jobject, jshort count)
{
	CAM_ERROR cam_error = MCam_take_pic_sequential (count,m_hCamera);
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setIntervalTime(JNIEnv *, jobject, jlong time)
{
	CAM_ERROR cam_error = MCam_set_interval_time ( time,m_hCamera );
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setLightSource(JNIEnv *, jobject, jchar light_source)
{
	CAM_ERROR cam_error;
	if (light_source == 0)
	{	
		 cam_error = MCam_set_light_source( LS_UNIDENTIFIED,m_hCamera );
	}else if (light_source == 1)
	{	
		 cam_error = MCam_set_light_source( LS_DAYLIGHT,m_hCamera );
	}else if (light_source == 2)
	{	
		 cam_error = MCam_set_light_source( LS_FLUORESCENT,m_hCamera );
	}else if (light_source == 3)
	{	
		 cam_error = MCam_set_light_source( LS_TUNGSTENT,m_hCamera );
	}else if (light_source == 225)
	{	
		 cam_error = MCam_set_light_source( LS_PRESET,m_hCamera );
	}else if (light_source == 254)
	{	
		 cam_error = MCam_set_light_source( LS_MANUAL,m_hCamera );
	}else if (light_source == 255)
	{	
		 cam_error = MCam_set_light_source( LS_CLOUDY,m_hCamera );
	}
	
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setFocus(JNIEnv *, jobject, jint focus_select)
{
	CAM_ERROR cam_error;
	if(focus_select == 0)
	{
		 cam_error = MCam_set_focus (CAM_FOCUS_NOT_AVAILABLE,m_hCamera);
	}else if(focus_select == 1)
	{
		 cam_error = MCam_set_focus (CAM_FOCUS_MACRO_ON,m_hCamera);
	}else if(focus_select == 2)
	{
		 cam_error = MCam_set_focus (CAM_FOCUS_AUTO,m_hCamera);
	}else if(focus_select == 3)
	{
		 cam_error = MCam_set_focus (CAM_FOCUS_MANUAL_ON,m_hCamera);
	}else if(focus_select == 4)
	{
		 cam_error = MCam_set_focus (CAM_FOCUS_DISTANT_ON,m_hCamera);
	}   
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setFocalLength(JNIEnv *, jobject, jlong pFocalLength)
{
	_CAM_FRACTION *pCAM_FRACTION = new _CAM_FRACTION;
	pCAM_FRACTION->ulcam_numerator = pFocalLength;
	CAM_ERROR cam_error = MCam_set_focal_length (pCAM_FRACTION,m_hCamera);
	return (jchar) cam_error;
}

JNIEXPORT jchar JNICALL Java_cdsdk_SYSDK_setManualFocus(JNIEnv *, jobject, jlong focus_value)
{/*
	CAM_ERROR cam_error;
	if (focus_value == 2)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_02,m_hCamera);
	}else if (focus_value == 5)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_05,m_hCamera);
	}if (focus_value == 10)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_10,m_hCamera);
	}if (focus_value == 15)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_15,m_hCamera);
	}if (focus_value == 20)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_20,m_hCamera);
	}if (focus_value == 30)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_30,m_hCamera);
	}if (focus_value == 50)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_50,m_hCamera);
	}if (focus_value == 70)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_70,m_hCamera);
	}if (focus_value == 100)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_100,m_hCamera);
	}if (focus_value == 150)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_150,m_hCamera);
	}if (focus_value == 200)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_200,m_hCamera);
	}if (focus_value == 300)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_300,m_hCamera);
	}if (focus_value == 500)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_500,m_hCamera);
	}if (focus_value == 800)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_800,m_hCamera);
	}if (focus_value == 4294967295)
	{
		CAM_ERROR cam_error = MCam_set_manual_focus(FV_INFINITE,m_hCamera);
	}
	return (jchar) cam_error;*/
	return 0;
}

BEGIN_MESSAGE_MAP(CSYJNIApp, CWinApp)
	//{{AFX_MSG_MAP(CSYJNIApp)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSYJNIApp construction

CSYJNIApp::CSYJNIApp()
{
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CSYJNIApp object

CSYJNIApp theApp;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -