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()); } } public native void testPrint(); public class ParseResult { // 0 解析到正确、完整的一包; // 1 解析到正确、不完整的一包,需要缓存数据,下次继续处理; // 2 解析到错误的数据,需要清空缓冲区 public int result; // 可以正确解析的包长(单次函数调用最多解析一包) public int cb_commited; } /* * @brief 解析网络数据 * @param[in] pack 网络数据流 * @param[in] pack_len 网络数据流有效长度 * @return ParseResult */ public native ParseResult parse(String pack, int pack_len); /* * @brief 将远程控制命令(不包含xdata)打包成网络传输数据 * @param[in] seq 序号 * @param[in] acct 主机账号 * @param[in] ademco_id 安定宝ID * @param[in] ademco_event 安定宝事件码 * @param[in] zone 防区号 * @param[in] gg 分防区号 * @return String */ public native String pack(int seq, String acct, int ademco_id, int ademco_event, int zone, int gg); /* * @brief 将远程控制命令(包含xdata)打包成网络传输数据 * @param[in] seq 序号 * @param[in] acct 主机账号 * @param[in] ademco_id 安定宝ID * @param[in] ademco_event 安定宝事件码 * @param[in] zone 防区号 * @param[in] gg 分防区号 * @return hex String,如字符串"123456" 表示为 "313233343536", 需手动转换为byte[] 进行发送,参考SimpleServerThread */ public native String pack2(int seq, String acct, int ademco_id, int ademco_event, int zone, int gg, String xdata); /* * @brief 打包ACK * @param[in] seq 序号 * @param[in] acct 主机账号 * @return String */ public native String packAck(int seq, String acct); // public void testPrint(){ 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);} }