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

📄 source.cpp

📁 RFID读写器调用实例程序。RFID读写器是远望谷804系列。通过JNI调用远望谷API。 提供读
💻 CPP
字号:
#include "hfut_wispy_LinkDll.h"

#include "XCRF500API.h"
#include <MALLOC.H>
#include <STDIO.H>
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <windows.h>

#define   CURRENT_ENCODE   "GBK" 

static HANDLE ChCom = (void *)(-1);
static bool PowerState = FALSE;



JNIEXPORT jint JNICALL Java_hfut_wispy_LinkDll_SayHello(JNIEnv *env, jobject obj)
{
	cout<< "hello world" <<endl;
	return 1;
}


JNIEXPORT jint JNICALL Java_hfut_wispy_LinkDll_XCOpen  (JNIEnv *env, jobject obj, jstring lsCfgFile, jstring lsCfgItem)
{
	
	//env->NewString
	LPCTSTR lsCfgFile1 = "D:\\VSProject\\Dll\\WindowsApplication2\\WindowsApplication2\\sysit.cfg";
	LPCTSTR lsCfgItem1 = "XCRF-804  Reader";
	int result = XCOpen(ChCom, lsCfgFile1, lsCfgItem1);
	

//	cout<< "hCom result in c++ is " << (int)ChCom <<endl;
	
	return (int)ChCom;
}


JNIEXPORT jint JNICALL Java_hfut_wispy_LinkDll_XCPowerOn  (JNIEnv *env, jobject obj, jint hCom)
{
	//int result = XCPowerOn((HANDLE)hCom);
	int result = XCPowerOn(ChCom);
	PowerState = TRUE;
//	cout << "XCPowerOn return in c++ is " << result <<endl;
	return result;
}


JNIEXPORT jint JNICALL Java_hfut_wispy_LinkDll_XCIdentify (JNIEnv *env, jobject obj, jint hCom, jbyte AntennaID, jbyte ScanTimes, jbyte ReadTimes)
{
	/*
	int result = XCIdentify((void *)hCom, (unsigned char )AntennaID, (unsigned char )ScanTimes, (unsigned char )ReadTimes);
	cout<< result <<endl;
	unsigned char uncp_hex_data[17] ;

	int result2 = XCEpcCodeReport((void *)hCom, uncp_hex_data);
	
	char temp[2];
	char EPCstr[40];
	for(int j=0; j<40; j++)
	{
		EPCstr[j] = 0;
	}
	for(int i=0; i<12; i++)
	{
		itoa((int)uncp_hex_data[i+5], temp, 16);
		EPCstr[i*2] = temp[0];
		EPCstr[i*2+1] = temp[1];
	}

	cout << (LPCTSTR)EPCstr <<endl;
	return result;
	*/

	int result = XCIdentifyEpcCode(ChCom, 
									(unsigned char) AntennaID, 
									(unsigned char) ScanTimes,
									(unsigned char) ReadTimes);

	unsigned char uncp_hex_data[17] ;

	Sleep(300);
	int result2 = XCEpcCodeReport(ChCom, uncp_hex_data);
	
	char temp[2];
	char EPCstr[40];
	for(int j=0; j<40; j++)
	{
		EPCstr[j] = 0;
	}
	for(int i=0; i<12; i++)
	{
		itoa((int)uncp_hex_data[i+5], temp, 16);
		EPCstr[i*2] = temp[0];
		EPCstr[i*2+1] = temp[1];
	}
//	cout<< "uncp_hex_data[3] in c++ is ";
//	cout<< (int)(unsigned char)uncp_hex_data[2] <<endl;
	cout<< (LPCTSTR)EPCstr <<endl;

	jclass clazz_LinkDll = env->GetObjectClass(obj);
	jfieldID fid_CharArray = env->GetFieldID(clazz_LinkDll,  "EPCCharArray", "[B");

	jbyteArray barr = env->NewByteArray(17);
	env->SetByteArrayRegion(barr, 0, 17, (const jbyte*)uncp_hex_data);
	jbyte* barr_element = env->GetByteArrayElements(barr, NULL);
	
	//cout<< "jByteArray[2] in c++ is " << (int)barr_element[2] <<endl;
	env->ReleaseByteArrayElements(barr, barr_element, 0);

	env->SetObjectField(obj, fid_CharArray, barr);



	return (jint)uncp_hex_data[8];
}


JNIEXPORT jint JNICALL Java_hfut_wispy_LinkDll_XCReport(JNIEnv *env, jobject obj, jint i, jbyteArray jbArr)
{
//	cout << "XCReport XCReport XCReport" <<endl;
	unsigned char uncp_hex_data[17] ;

	Sleep(20);
	int result2 = XCEpcCodeReport(ChCom, uncp_hex_data);
	
	char temp[2];
	char EPCstr[40];
	for(int j=0; j<40; j++)
	{
		EPCstr[j] = 0;
	}
	for(int ii=0; ii<12; ii++)
	{
		itoa((int)uncp_hex_data[ii+5], temp, 16);
		EPCstr[ii*2] = temp[0];
		EPCstr[ii*2+1] = temp[1];
	}
//	cout<< "uncp_hex_data[3] in c++ is ";
//	cout<< (int)(unsigned char)uncp_hex_data[2] <<endl;
//	cout<< (LPCTSTR)EPCstr <<endl;

	jclass clazz_LinkDll = env->GetObjectClass(obj);
	jfieldID fid_CharArray = env->GetFieldID(clazz_LinkDll,  "EPCCharArray", "[B");

	jbyteArray barr = env->NewByteArray(17);
	env->SetByteArrayRegion(barr, 0, 17, (const jbyte*)uncp_hex_data);
	jbyte* barr_element = env->GetByteArrayElements(barr, NULL);
	
//	cout<< "jByteArray[2] in c++ is " << (int)barr_element[2] <<endl;
	env->ReleaseByteArrayElements(barr, barr_element, 0);

	env->SetObjectField(obj, fid_CharArray, barr);



	return (jint)uncp_hex_data[8];
	return 1;
}


JNIEXPORT jint JNICALL Java_hfut_wispy_LinkDll_SayWorld(JNIEnv *env, jobject obj, jstring jstr)
{

	char*   rtn   =   NULL;   
    jclass   clsstring   =   env->FindClass("java/lang/String");   
    
    //new   encode   string   default   "GBK"   
    jstring   strencode   =   env->NewStringUTF(CURRENT_ENCODE);   
    jmethodID   mid   =   env->GetMethodID(clsstring,   "getBytes",   "(Ljava/lang/String;)[B");   
    
    //call   String.getBytes   method   to   avoid   incompatible   migrating   into   solaris   
    jbyteArray   barr=   (jbyteArray)env->CallObjectMethod(jstr,mid,strencode);   
    
    jsize   alen   =   env->GetArrayLength(barr);   
    jbyte*   ba   =   env->GetByteArrayElements(barr,JNI_FALSE);   
    
    if(alen   >   0)   
    {   
          rtn   =   (char*)malloc(alen+1);         //new   char[alen+1];   
          memcpy(rtn,ba,alen);   
          rtn[alen]=0;   
    }   
    env->ReleaseByteArrayElements(barr,ba,0);   
    
	cout << rtn << endl;
	return 1;
	
}


JNIEXPORT jint JNICALL Java_hfut_wispy_LinkDll_XCPowerOff(JNIEnv *env, jobject obj, jint hCom)
{
	int result = XCPowerOff(ChCom);
//	cout << "XCPowerOff return in c++ is " << result <<endl;
	PowerState = FALSE;
	return result;
}


JNIEXPORT jint JNICALL Java_hfut_wispy_LinkDll_XCClose(JNIEnv *env, jobject obj)
{

	ChCom = (void *)XCClose(ChCom);
//	cout<< "XCClose return in c++ is" << ChCom <<endl;
	ChCom = (void *)(-1);
	return -1;
}


JNIEXPORT jint JNICALL Java_hfut_wispy_LinkDll_GethCom(JNIEnv *env, jobject obj)
{
//	cout<< "GethCom in C++ will return is " << ChCom <<endl;
	return (jint)ChCom;
}

JNIEXPORT jint JNICALL Java_hfut_wispy_LinkDll_GetPowerState(JNIEnv *env, jobject obj)
{
	if(PowerState)
		cout<< "PowerState in C++ will return is " << "ON" <<endl;
	else
		cout<< "PowerState in C++ will return is " << "OFFFFFF" <<endl;
	return PowerState;
}

⌨️ 快捷键说明

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