package javademo.jni; import java.nio.file.FileSystems; public class AdemcoHbLibrary { static { if (System.getProperty("os.name").startsWith("Windows")) { // Windows System.load( FileSystems.getDefault() .getPath("./x64/Release/ademco_java.dll") // Dynamic link .normalize().toAbsolutePath().toString()); }else{ // Unix based System.load( FileSystems.getDefault() .getPath("./build/libademcojava.so") // Dynamic link .normalize().toAbsolutePath().toString()); } } private native void nativePrint(); public class ParseResult { // 0 解析到正确、完整的一包; // 1 解析到正确、不完整的一包,需要缓存数据,下次继续处理; // 2 解析到错误的数据,需要清空缓冲区 public int result; // 可以正确解析的包长(单次函数调用最多解析一包) public int cb_commited; } /* * @brief 解析网络数据 * @param[in] pack 网络数据流 * @param[in] pack_len 网络数据流有效长度 * @return ParseResult */ 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 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){ AdemcoHbLibrary lib = new AdemcoHbLibrary(); lib.testPprint(); String data = "\nC5C30053\"HENG-BO\"0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019\r"; 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); } }