Commit 13fde13a authored by captainwong's avatar captainwong

fix 2

parent 64da4482
...@@ -16,7 +16,7 @@ JAVA_INCLUDE_OS=$JAVA_INCLUDE/linux ...@@ -16,7 +16,7 @@ JAVA_INCLUDE_OS=$JAVA_INCLUDE/linux
# macOS # macOS
#JAVA_INCLUDE_OS=$JAVA_INCLUDE/darwin #JAVA_INCLUDE_OS=$JAVA_INCLUDE/darwin
rm -f javademo/jin/*.class
# 编译Java类 # 编译Java类
javac -encoding utf-8 javademo/jni/AdemcoHbLibrary.java javac -encoding utf-8 javademo/jni/AdemcoHbLibrary.java
# 生成C++头文件 # 生成C++头文件
......
...@@ -79,13 +79,31 @@ JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack ...@@ -79,13 +79,31 @@ JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack
} }
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack2 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; jboolean iscopy = 0;
std::string sacct = env->GetStringUTFChars(acct, &iscopy); 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()); jchar *array = env->GetCharArrayElements(xdata, nullptr); //复制数组元素到array内存空间
auto xdata_ = ademco::makeXData(s.data(), s.size()); 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; ademco::AdemcoPacket ap;
char buff[1024]; char buff[1024];
auto res = ap.make_hb(buff, sizeof(buff), static_cast<uint16_t>(seq), 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 ...@@ -37,7 +37,7 @@ JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack
* Signature: (ILjava/lang/String;IIIILjava/lang/String;)Ljava/lang/String; * Signature: (ILjava/lang/String;IIIILjava/lang/String;)Ljava/lang/String;
*/ */
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack2 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 * Class: javademo_jni_AdemcoHbLibrary
......
...@@ -73,8 +73,13 @@ public class SimpleServer { ...@@ -73,8 +73,13 @@ public class SimpleServer {
// System.out.println(printable_bytes(xdata)); // System.out.println(printable_bytes(xdata));
// String sx = new String(xdata); // String sx = new String(xdata);
// System.out.println("sx=" + sx); // System.out.println("sx=" + sx);
String xdata = "\u00EB\u00BA\u003F\u00A1\u0076"; // String xdata = "\u00EB\u00BA\u003F\u00A1\u0076";
System.out.println("xdata=" + printable_bytes(xdata)); 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); String data = lib.pack2(1234, "861234567890", 666666, 3400, 0, 0, xdata);
try{ try{
byte[] bytes = data.getBytes(data); 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