📄 jiso15693.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include "JISO15693.h"
#include "ReadDLL.h"
#include "ISO15693.h"
#include <strutils.hpp>
//#include <jni.h>
#pragma argsused
jstring stringToJstring( JNIEnv* env, const char* pat )
{
//定义java String类 strClass
jclass strClass = (env)->FindClass("Ljava/lang/String;");
//获取java String类方法String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String
jmethodID ctorID = (env)->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
jbyteArray bytes = (env)->NewByteArray(strlen(pat));//建立byte数组
(env)->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);//将char* 转换为byte数组
jstring encoding = (env)->NewStringUTF("GB2312"); // 设置String, 保存语言类型,用于byte数组转换至String时的参数
return (jstring)(env)->NewObject(strClass, ctorID, bytes, encoding);//将byte数组转换为java String,并输出
}
String jstringToString(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;
jclass clsstring = env->FindClass("java/lang/String");
jstring strencode = env->NewStringUTF("GB2312");
jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
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);
String stemp(rtn);
free(rtn);
return stemp;
}
//将1字节数组转化为对应16进制字符串
AnsiString f_bytetohex(UCHAR *buff,int ilen)
{
AnsiString s1;
int i;
s1="";
for(i=0;i<ilen;i++)
{
s1=s1+IntToHex(buff[i],2);
};
return s1;
}
//根据16进制形式的字符串将其转化为字节数组
int f_stringtobin(AnsiString s1, int str_len, UCHAR *buff)
{
int i;AnsiString s2;
for(i=0;i<str_len/2;i++)
{
s2= "0x" +MidStr(s1,i*2+1,2);
buff[i]=StrToInt(s2);
};
return 0;
}
char* jstringToWindows(JNIEnv* env, jstring jstr)
{
int length = env->GetStringLength(jstr);
const jchar* jcstr = env->GetStringChars( jstr, 0 );
char* rtn = (char*)malloc( length*2+1 );
int size = 0;
size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)jcstr, length, rtn,
(length*2+1), NULL, NULL );
if( size <= 0 )
return NULL;
env->ReleaseStringChars( jstr, jcstr );
rtn[size] = 0;
return rtn;
}
/*
* Class: JISO15693
* Method: Inventory
* Signature: (Ljava/lang/String;Ljava/lang/String;ZIIJ)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_Inventory
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jboolean AFI, jint AFIval, jint Flag, jlong nBytestoRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
return Inventory(send,rev,AFI,AFIval,Flag,nBytestoRead);
}
/*
* Class: JISO15693
* Method: StayQuite
* Signature: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;J)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_StayQuite
(JNIEnv *env, jclass, jstring Sendval, jstring retval, jint flag, jstring UID, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, retval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return StayQuite(send,rev,flag,uid,nBytesRead);
}
/*
* Class: JISO15693
* Method: Select
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IJ)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_Select
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jstring UID, jint flag, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return Select(send,rev,uid,flag,nBytesRead);
}
/*
* Class: JISO15693
* Method: ResetToReady
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IJ)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_ResetToReady
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jstring UID, jint flag, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return ResetToReady(send,rev,uid,flag,nBytesRead);
}
/*
* Class: JISO15693
* Method: WriteAFI
* Signature: (Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;J)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_WriteAFI
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jint AFIval, jint flag, jstring UID, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return WriteAFI(send,rev,AFIval,flag,uid,nBytesRead);
}
/*
* Class: JISO15693
* Method: LockAFI
* Signature: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;J)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_LockAFI
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jint flag, jstring UID, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return LockAFI(send,rev,flag,uid,nBytesRead);
}
/*
* Class: JISO15693
* Method: ReadSingleBlock
* Signature: (Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;J)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_ReadSingleBlock
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jint nblock, jint flag, jstring UID, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return ReadSingleBlock(send,rev,nblock,flag,uid,nBytesRead);
}
/*
* Class: JISO15693
* Method: WriteSingleBlock
* Signature: (Ljava/lang/String;Ljava/lang/String;I[CLjava/lang/String;J)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_WriteSingleBlock
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jint nblock, jstring Bval, jstring UID, jint flag,jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10],blockval[8];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
s = jstringToString(env, Bval);
f_stringtobin(s, s.Length(), blockval);
return WriteSingleBlock(send,rev,nblock,blockval,uid,flag,nBytesRead);
}
/*
* Class: JISO15693
* Method: LockBlock
* Signature: (Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;J)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_LockBlock
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jint flag, jint nblock, jstring UID, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return LockBlock(send,rev,flag,nblock,uid,nBytesRead);
}
/*
* Class: JISO15693
* Method: ReadMultiBlock
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIJ)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_ReadMultiBlock
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jstring UID, jint nStartBlock, jint nLength,jint flag, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return ReadMultiBlock(send,rev,uid,nStartBlock,nLength,flag,nBytesRead);
}
/*
* Class: JISO15693
* Method: WriteMultiBlock
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I[CIIJ)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_WriteMultiBlock
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jstring UID, jint nblock, jstring Bval, jint nStartBlock, jint nLength, jint flag, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10],blockval[8];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
s = jstringToString(env, Bval);
f_stringtobin(s, s.Length(), blockval);
return WriteMultiBlock(send,rev,uid,nblock,blockval,nStartBlock,nLength,flag,nBytesRead);
}
/*
* Class: JISO15693
* Method: WriteDSFID
* Signature: (Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;J)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_WriteDSFID
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jint flag, jint DSIFID, jstring UID, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return WriteDSFID(send,rev,flag,DSIFID,uid,nBytesRead);
}
/*
* Class: JISO15693
* Method: LockDSFID
* Signature: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;J)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_LockDSFID
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jint flag, jstring UID, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return LockDSFID(send,rev,flag,uid,nBytesRead);
}
/*
* Class: JISO15693
* Method: GetSysInfo
* Signature: (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;J)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_GetSysInfo
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jint flag, jstring UID, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return GetSysInfo(send,rev,flag,uid,nBytesRead);
}
/*
* Class: JISO15693
* Method: GetMultiBlockSecirotuStatus
* Signature: (Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;J)I
*/
JNIEXPORT jint JNICALL Java_JISO15693_GetMultiBlockSecirotuStatus
(JNIEnv *env, jclass, jstring Sendval, jstring REVval, jint flag, jint nStartBlock, jint nLength, jstring UID, jlong nBytesRead)
{
String s = jstringToString(env, Sendval);
UCHAR send[200],rev[200],uid[10];
f_stringtobin(s,s.Length(),send);
s = jstringToString(env, REVval);
f_stringtobin(s, s.Length(), rev);
s = jstringToString(env, UID);
f_stringtobin(s, s.Length(), uid);
return GetMultiBlockSecirotuStatus(send,rev,flag,nStartBlock,nLength,uid,nBytesRead);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -