Commit b5c539d7 authored by captainwong's avatar captainwong

test pack/packAck ok

parent bee6491a
...@@ -7,4 +7,5 @@ JAVA_INCLUDE='/usr/lib/jvm/java-8-openjdk-amd64/include' ...@@ -7,4 +7,5 @@ JAVA_INCLUDE='/usr/lib/jvm/java-8-openjdk-amd64/include'
javac -encoding utf-8 javademo/jni/AdemcoHbLibrary.java && javah -d javademo/cpp -jni javademo.jni.AdemcoHbLibrary javac -encoding utf-8 javademo/jni/AdemcoHbLibrary.java && javah -d javademo/cpp -jni javademo.jni.AdemcoHbLibrary
g++ -std=c++11 $JAVADEMO_SRC/pch.cpp $JAVADEMO_SRC/dllmain.cpp -I$JAVADEMO_SRC -Iinclude -I$JAVA_INCLUDE -I$JAVA_INCLUDE/linux -fPIC -shared -o build/libademcojava.so g++ -std=c++11 $JAVADEMO_SRC/pch.cpp $JAVADEMO_SRC/dllmain.cpp -I$JAVADEMO_SRC -Iinclude -I$JAVA_INCLUDE -I$JAVA_INCLUDE/linux -fPIC -shared -o build/libademcojava.so
java javademo.jni.AdemcoHbLibrary javac -encoding utf-8 javademo/jni/SimpleServer.java
java javademo.jni.SimpleServer 12345
...@@ -63,3 +63,32 @@ JNIEXPORT jobject JNICALL Java_javademo_jni_AdemcoHbLibrary_nativeParse ...@@ -63,3 +63,32 @@ JNIEXPORT jobject JNICALL Java_javademo_jni_AdemcoHbLibrary_nativeParse
return obj; return obj;
} }
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_nativePack
(JNIEnv* env, jclass clazz, jint seq, jint ademco_id, jint ademco_event, jint zone, jint gg)
{
ademco::AdemcoPacket ap;
char buff[1024];
auto res = ap.make_hb(buff, sizeof(buff), static_cast<uint16_t>(seq),
nullptr, static_cast<size_t>(ademco_id), static_cast<unsigned char>(gg),
static_cast<ademco::ADEMCO_EVENT>(ademco_event), static_cast<size_t>(zone));
if (res > 0) {
buff[res] = 0;
return env->NewStringUTF(buff);
}
return 0;
}
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_nativePackAck
(JNIEnv* env, jclass clazz, jint seq, jint ademco_id)
{
ademco::AdemcoPacket ap;
char buff[1024];
auto res = ap.make_ack(buff, sizeof(buff), static_cast<uint16_t>(seq),
nullptr, static_cast<size_t>(ademco_id));
if (res > 0) {
buff[res] = 0;
return env->NewStringUTF(buff);
}
return 0;
}
...@@ -23,6 +23,22 @@ JNIEXPORT void JNICALL Java_javademo_jni_AdemcoHbLibrary_nativePrint ...@@ -23,6 +23,22 @@ JNIEXPORT void JNICALL Java_javademo_jni_AdemcoHbLibrary_nativePrint
JNIEXPORT jobject JNICALL Java_javademo_jni_AdemcoHbLibrary_nativeParse JNIEXPORT jobject JNICALL Java_javademo_jni_AdemcoHbLibrary_nativeParse
(JNIEnv *, jclass, jstring, jint); (JNIEnv *, jclass, jstring, jint);
/*
* Class: javademo_jni_AdemcoHbLibrary
* Method: nativePack
* Signature: (IIIII)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_nativePack
(JNIEnv *, jclass, jint, jint, jint, jint, jint);
/*
* Class: javademo_jni_AdemcoHbLibrary
* Method: nativePackAck
* Signature: (II)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_nativePackAck
(JNIEnv *, jclass, jint, jint);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
...@@ -5,8 +5,7 @@ import java.nio.file.FileSystems; ...@@ -5,8 +5,7 @@ import java.nio.file.FileSystems;
public class AdemcoHbLibrary public class AdemcoHbLibrary
{ {
static static
{ {
if (System.getProperty("os.name").startsWith("Windows")) { // Windows if (System.getProperty("os.name").startsWith("Windows")) { // Windows
System.load( System.load(
FileSystems.getDefault() FileSystems.getDefault()
...@@ -39,11 +38,30 @@ public class AdemcoHbLibrary ...@@ -39,11 +38,30 @@ public class AdemcoHbLibrary
*/ */
private static native ParseResult nativeParse(String pack, int pack_len); private static native ParseResult nativeParse(String pack, int pack_len);
/*
* @brief 将远程控制命令打包成网络传输数据
* @param[in] seq 序号
* @param[in] ademco_id 安定宝ID
* @param[in] ademco_event 安定宝事件码
* @param[in] zone 防区号
* @param[in] gg 分防区号
* @return String
*/
private static native String nativePack(int seq, int ademco_id, int ademco_event, int zone, int gg);
/*
* @brief 打包ACK
* @param[in] seq 序号
* @param[in] ademco_id 安定宝ID
* @return String
*/
private static native String nativePackAck(int seq, int ademco_id);
public void testPprint(){ nativePrint(); } public void testPprint(){ nativePrint(); }
public ParseResult parse(String pack, int pack_len){return nativeParse(pack, pack_len);} public ParseResult parse(String pack, int pack_len){return nativeParse(pack, pack_len);}
public String pack(int seq, int ademco_id, int ademco_event, int zone, int gg){return nativePack(seq, ademco_id, ademco_event, zone, gg);}
public String packAck(int seq, int ademco_id){return nativePackAck(seq, ademco_id);}
public static void main(String[] args){ public static void main(String[] args){
AdemcoHbLibrary lib = new AdemcoHbLibrary(); AdemcoHbLibrary lib = new AdemcoHbLibrary();
...@@ -57,26 +75,4 @@ public class AdemcoHbLibrary ...@@ -57,26 +75,4 @@ public class AdemcoHbLibrary
} }
/*
* @brief 将远程控制命令打包成网络传输数据
* @param[in|out] buff 缓冲区
* @param[in] buff_len 缓冲区长度
* @param[in] seq 序号
* @param[in] ademco_id 安定宝ID
* @param[in] ademco_event 安定宝事件码
* @param[in] zone 防区号
* @param[in] gg 分防区号
* @return 大于0 成功,返回值代表包长;0 buff空间不足
*/
//DLL_FUNC int pack(char* buff, int buff_len, int seq, int ademco_id, int ademco_event, int zone, int gg);
/*
* @brief 打包ACK
* @param[in|out] buff 缓冲区
* @param[in] buff_len 缓冲区长度
* @param[in] seq 序号
* @param[in] ademco_id 安定宝ID
* @return 大于0 成功,返回值代表包长;0 buff空间不足
*/
//DLL_FUNC int pack_ack(char* buff, int buff_len, int seq, int ademco_id);
} }
...@@ -5,22 +5,53 @@ import java.net.*; ...@@ -5,22 +5,53 @@ import java.net.*;
public class SimpleServer { public class SimpleServer {
public static void main(String[] args) { public static void main(String[] args) {
AdemcoHbLibrary lib = new AdemcoHbLibrary();
lib.testPprint();
// test parse
{
System.out.println("testing parse...");
String data = "\nC5C30053\"HENG-BO\"0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019\r";
System.out.println("using data=" + data);
AdemcoHbLibrary.ParseResult res = lib.parse(data, data.length());
assert(res.result == 0);
assert(res.cb_commited == data.length());
System.out.println("parse result=" + res.result + ",cb_commited=" + res.cb_commited);
}
// test pack
{
System.out.println("testing pack...");
System.out.println("using seq=1234, ademco_id=666666, event=3400, zone=0, gg=0");
String data = lib.pack(1234, 666666, 3400, 0, 0);
System.out.println("data=" + data);
}
// test pack ack
{
System.out.println("testing packAck...");
System.out.println("using seq=1234, ademco_id=666666");
String data = lib.packAck(1234, 666666);
System.out.println("data=" + data);
}
int port = 12345; int port = 12345;
if (args.length > 0){ if (args.length > 0){
port = Integer.parseInt(args[0]); port = Integer.parseInt(args[0]);
} }
// try (ServerSocket serverSocket = new ServerSocket(port)) { try (ServerSocket serverSocket = new ServerSocket(port)) {
// System.out.println("Server is listening on port " + port); System.out.println("Server is listening on port " + port);
// while (true) { while (true) {
// Socket socket = serverSocket.accept(); Socket socket = serverSocket.accept();
// System.out.println("New client connected"); System.out.println("New client connected");
// new SimpleServerThread(socket).start(); new SimpleServerThread(socket).start();
// } }
// } catch (IOException ex) { } catch (IOException ex) {
// System.out.println("Server exception: " + ex.getMessage()); System.out.println("Server exception: " + ex.getMessage());
// ex.printStackTrace(); ex.printStackTrace();
// } }
} }
} }
\ No newline at end of file
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