📄 source.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 + -