Commit 13fde13a authored by captainwong's avatar captainwong

fix 2

parent 64da4482
......@@ -16,7 +16,7 @@ JAVA_INCLUDE_OS=$JAVA_INCLUDE/linux
# macOS
#JAVA_INCLUDE_OS=$JAVA_INCLUDE/darwin
rm -f javademo/jin/*.class
# 编译Java类
javac -encoding utf-8 javademo/jni/AdemcoHbLibrary.java
# 生成C++头文件
......
......@@ -79,13 +79,31 @@ JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack
}
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack2
(JNIEnv* env, jobject, jint seq, jstring acct, jint ademco_id, jint ademco_event, jint zone, jint gg, jstring xdata)
(JNIEnv* env, jobject, jint seq, jstring acct, jint ademco_id, jint ademco_event, jint zone, jint gg, jcharArray xdata, jint xdata_len)
{
jboolean iscopy = 0;
std::string sacct = env->GetStringUTFChars(acct, &iscopy);
std::string s = env->GetStringUTFChars(xdata, &iscopy);
printf("%s\n", ademco::detail::toString(s.data(), s.size(), ademco::detail::ToStringOption::ALL_CHAR_AS_HEX, false, false).data());
auto xdata_ = ademco::makeXData(s.data(), s.size());
jchar *array = env->GetCharArrayElements(xdata, nullptr); //复制数组元素到array内存空间
if(array == nullptr){
return 0;
}
jboolean *buf = (jboolean *)calloc(xdata_len , sizeof(jboolean)); //开辟jboolean类型的内存空间,jboolean对应的c++类型为unsigned char
if(buf == nullptr){
LOGE("jni_radio_send: calloc error.");
return 0;
}
for(int i=0; i < xdata_len; i++){ //把jcharArray的数据元素复制到buf所指的内存空间
*(buf + i) = (jboolean)(*(array + i));
}
env->ReleaseCharArrayElements(xdata, array, 0);//释放资源
auto xdata_ = ademco::makeXData(buf, xdata_len);
free(buf);//释放内存空间
buf = nullptr;
ademco::AdemcoPacket ap;
char buff[1024];
auto res = ap.make_hb(buff, sizeof(buff), static_cast<uint16_t>(seq),
......
......@@ -37,7 +37,7 @@ JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack
* Signature: (ILjava/lang/String;IIIILjava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack2
(JNIEnv *, jobject, jint, jstring, jint, jint, jint, jint, jstring);
(JNIEnv *, jobject, jint, jstring, jint, jint, jint, jint, jcharArray, jint);
/*
* Class: javademo_jni_AdemcoHbLibrary
......
......@@ -73,8 +73,13 @@ public class SimpleServer {
// System.out.println(printable_bytes(xdata));
// String sx = new String(xdata);
// System.out.println("sx=" + sx);
String xdata = "\u00EB\u00BA\u003F\u00A1\u0076";
System.out.println("xdata=" + printable_bytes(xdata));
// String xdata = "\u00EB\u00BA\u003F\u00A1\u0076";
char[] xdata = new char[5];
xdata[0] = 0xEB;
xdata[1] = 0xBA;
xdata[2] = 0x3F;
xdata[3] = 0xA1;
xdata[4] = 0x76;
String data = lib.pack2(1234, "861234567890", 666666, 3400, 0, 0, xdata);
try{
byte[] bytes = data.getBytes(data);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment