Commit b8d0dbdc authored by captainwong's avatar captainwong

fix #acct

parent 9c16685c
...@@ -62,12 +62,14 @@ JNIEXPORT jobject JNICALL Java_javademo_jni_AdemcoHbLibrary_parse ...@@ -62,12 +62,14 @@ JNIEXPORT jobject JNICALL Java_javademo_jni_AdemcoHbLibrary_parse
} }
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack
(JNIEnv* env, jobject, jint seq, jint ademco_id, jint ademco_event, jint zone, jint gg) (JNIEnv* env, jobject, jint seq, jstring acct, jint ademco_id, jint ademco_event, jint zone, jint gg)
{ {
ademco::AdemcoPacket ap; ademco::AdemcoPacket ap;
char buff[1024]; char buff[1024];
jboolean iscopy = 0;
std::string sacct = env->GetStringUTFChars(acct, &iscopy);
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),
nullptr, static_cast<size_t>(ademco_id), static_cast<unsigned char>(gg), sacct, static_cast<size_t>(ademco_id), static_cast<unsigned char>(gg),
static_cast<ademco::ADEMCO_EVENT>(ademco_event), static_cast<size_t>(zone)); static_cast<ademco::ADEMCO_EVENT>(ademco_event), static_cast<size_t>(zone));
if (res > 0) { if (res > 0) {
buff[res] = 0; buff[res] = 0;
...@@ -77,17 +79,19 @@ JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack ...@@ -77,17 +79,19 @@ 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, 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, jstring xdata)
{ {
jboolean iscopy = 0; jboolean iscopy = 0;
std::string sacct = env->GetStringUTFChars(acct, &iscopy);
std::string s = env->GetStringUTFChars(xdata, &iscopy); std::string s = env->GetStringUTFChars(xdata, &iscopy);
auto xdata_ = ademco::makeXData(s.data(), s.size()); auto xdata_ = ademco::makeXData(s.data(), s.size());
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),
nullptr, static_cast<size_t>(ademco_id), static_cast<unsigned char>(gg), sacct, static_cast<size_t>(ademco_id), static_cast<unsigned char>(gg),
static_cast<ademco::ADEMCO_EVENT>(ademco_event), static_cast<size_t>(zone), xdata_); static_cast<ademco::ADEMCO_EVENT>(ademco_event), static_cast<size_t>(zone), xdata_);
if (res > 0) { if (res > 0) {
//buff[res] = 0;
auto ascii = ademco::detail::toString(buff, res, ademco::detail::ToStringOption::ALL_CHAR_AS_HEX, false, false); auto ascii = ademco::detail::toString(buff, res, ademco::detail::ToStringOption::ALL_CHAR_AS_HEX, false, false);
memcpy(buff, ascii.data(), ascii.size()); memcpy(buff, ascii.data(), ascii.size());
return env->NewStringUTF(buff); return env->NewStringUTF(buff);
...@@ -96,12 +100,14 @@ JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack2 ...@@ -96,12 +100,14 @@ JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack2
} }
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_packAck JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_packAck
(JNIEnv* env, jobject, jint seq, jint ademco_id) (JNIEnv* env, jobject, jint seq, jstring acct)
{ {
ademco::AdemcoPacket ap; ademco::AdemcoPacket ap;
char buff[1024]; char buff[1024];
jboolean iscopy = 0;
std::string s = env->GetStringUTFChars(acct, &iscopy);
auto res = ap.make_ack(buff, sizeof(buff), static_cast<uint16_t>(seq), auto res = ap.make_ack(buff, sizeof(buff), static_cast<uint16_t>(seq),
nullptr, static_cast<size_t>(ademco_id)); s, 0);
if (res > 0) { if (res > 0) {
buff[res] = 0; buff[res] = 0;
return env->NewStringUTF(buff); return env->NewStringUTF(buff);
......
...@@ -26,26 +26,26 @@ JNIEXPORT jobject JNICALL Java_javademo_jni_AdemcoHbLibrary_parse ...@@ -26,26 +26,26 @@ JNIEXPORT jobject JNICALL Java_javademo_jni_AdemcoHbLibrary_parse
/* /*
* Class: javademo_jni_AdemcoHbLibrary * Class: javademo_jni_AdemcoHbLibrary
* Method: pack * Method: pack
* Signature: (IIIII)Ljava/lang/String; * Signature: (ILjava/lang/String;IIII)Ljava/lang/String;
*/ */
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack
(JNIEnv *, jobject, jint, jint, jint, jint, jint); (JNIEnv *, jobject, jint, jstring, jint, jint, jint, jint);
/* /*
* Class: javademo_jni_AdemcoHbLibrary * Class: javademo_jni_AdemcoHbLibrary
* Method: pack2 * Method: pack2
* Signature: (IIIIILjava/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, jint, jint, jint, jint, jstring); (JNIEnv *, jobject, jint, jstring, jint, jint, jint, jint, jstring);
/* /*
* Class: javademo_jni_AdemcoHbLibrary * Class: javademo_jni_AdemcoHbLibrary
* Method: packAck * Method: packAck
* Signature: (II)Ljava/lang/String; * Signature: (ILjava/lang/String;)Ljava/lang/String;
*/ */
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_packAck JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_packAck
(JNIEnv *, jobject, jint, jint); (JNIEnv *, jobject, jint, jstring);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -41,33 +41,35 @@ public class AdemcoHbLibrary ...@@ -41,33 +41,35 @@ public class AdemcoHbLibrary
/* /*
* @brief 将远程控制命令(不包含xdata)打包成网络传输数据 * @brief 将远程控制命令(不包含xdata)打包成网络传输数据
* @param[in] seq 序号 * @param[in] seq 序号
* @param[in] acct 主机账号
* @param[in] ademco_id 安定宝ID * @param[in] ademco_id 安定宝ID
* @param[in] ademco_event 安定宝事件码 * @param[in] ademco_event 安定宝事件码
* @param[in] zone 防区号 * @param[in] zone 防区号
* @param[in] gg 分防区号 * @param[in] gg 分防区号
* @return String * @return String
*/ */
public native String pack(int seq, int ademco_id, int ademco_event, int zone, int gg); public native String pack(int seq, String acct, int ademco_id, int ademco_event, int zone, int gg);
/* /*
* @brief 将远程控制命令(包含xdata)打包成网络传输数据 * @brief 将远程控制命令(包含xdata)打包成网络传输数据
* @param[in] seq 序号 * @param[in] seq 序号
* @param[in] acct 主机账号
* @param[in] ademco_id 安定宝ID * @param[in] ademco_id 安定宝ID
* @param[in] ademco_event 安定宝事件码 * @param[in] ademco_event 安定宝事件码
* @param[in] zone 防区号 * @param[in] zone 防区号
* @param[in] gg 分防区号 * @param[in] gg 分防区号
* @return hex String,如字符串"123456" 表示为 "313233343536", 需手动转换为byte[] 进行发送,参考SimpleServerThread * @return hex String,如字符串"123456" 表示为 "313233343536", 需手动转换为byte[] 进行发送,参考SimpleServerThread
*/ */
public native String pack2(int seq, int ademco_id, int ademco_event, int zone, int gg, String xdata); public native String pack2(int seq, String acct, int ademco_id, int ademco_event, int zone, int gg, String xdata);
/* /*
* @brief 打包ACK * @brief 打包ACK
* @param[in] seq 序号 * @param[in] seq 序号
* @param[in] ademco_id 安定宝ID * @param[in] acct 主机账号
* @return String * @return String
*/ */
public native String packAck(int seq, int ademco_id); public native String packAck(int seq, String acct);
// public void testPrint(){ nativePrint(); } // public void testPrint(){ nativePrint(); }
......
...@@ -23,16 +23,16 @@ public class SimpleServer { ...@@ -23,16 +23,16 @@ public class SimpleServer {
// test pack // test pack
{ {
System.out.println("testing pack..."); System.out.println("testing pack...");
System.out.println("using seq=1234, ademco_id=666666, event=3400, zone=0, gg=0"); System.out.println("using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0");
String data = lib.pack(1234, 666666, 3400, 0, 0); String data = lib.pack(1234, "861234567890", 666666, 3400, 0, 0);
System.out.println("data=" + data); System.out.println("data=" + data);
} }
// test pack ack // test pack ack
{ {
System.out.println("testing packAck..."); System.out.println("testing packAck...");
System.out.println("using seq=1234, ademco_id=666666"); System.out.println("using seq=1234, acct=861234567890, ");
String data = lib.packAck(1234, 666666); String data = lib.packAck(1234, "861234567890");
System.out.println("data=" + data); System.out.println("data=" + data);
} }
......
...@@ -59,16 +59,16 @@ public class SimpleServerThread extends Thread { ...@@ -59,16 +59,16 @@ public class SimpleServerThread extends Thread {
if (m.find()) { if (m.find()) {
String id = m.group(1); String id = m.group(1);
int seq = Integer.parseInt(m.group(2)); int seq = Integer.parseInt(m.group(2));
int ademco_id = Integer.parseInt(m.group(3)); String acct = m.group(3);
System.out.println("Found id: " + id); System.out.println("Found id: " + id);
System.out.println("Found seq: " + seq); System.out.println("Found seq: " + seq);
System.out.println("Found ademco_id: " + ademco_id); System.out.println("Found acct: " + acct);
switch(id){ switch(id){
case "ACK":break; case "ACK":break;
case "NULL": // reply ack case "NULL": // reply ack
{ {
String ack = lib.packAck(seq, ademco_id); String ack = lib.packAck(seq, acct);
System.out.println("replying ack:" + ack); System.out.println("replying ack:" + ack);
writer.write(ack); writer.write(ack);
writer.flush(); writer.flush();
...@@ -78,7 +78,7 @@ public class SimpleServerThread extends Thread { ...@@ -78,7 +78,7 @@ public class SimpleServerThread extends Thread {
case "ADM-CID": case "ADM-CID":
{ {
// reply ack // reply ack
String ack = lib.packAck(seq, ademco_id); String ack = lib.packAck(seq, acct);
System.out.println("replying ack:" + ack); System.out.println("replying ack:" + ack);
writer.write(ack); writer.write(ack);
writer.flush(); writer.flush();
...@@ -87,7 +87,6 @@ public class SimpleServerThread extends Thread { ...@@ -87,7 +87,6 @@ public class SimpleServerThread extends Thread {
m = r2.matcher(line); m = r2.matcher(line);
if (m.find()) { if (m.find()) {
int ademco_id16 = Integer.parseInt(m.group(1), 16); int ademco_id16 = Integer.parseInt(m.group(1), 16);
assert(ademco_id == ademco_id16);
int ademco_event = Integer.parseInt(m.group(2)); int ademco_event = Integer.parseInt(m.group(2));
int gg = Integer.parseInt(m.group(3)); int gg = Integer.parseInt(m.group(3));
int zone = Integer.parseInt(m.group(4)); int zone = Integer.parseInt(m.group(4));
...@@ -99,7 +98,7 @@ public class SimpleServerThread extends Thread { ...@@ -99,7 +98,7 @@ public class SimpleServerThread extends Thread {
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
if(now - lastTimeStatusChange > 5000){ if(now - lastTimeStatusChange > 5000){
lastTimeStatusChange = now; lastTimeStatusChange = now;
String cmd = lib.pack2(seq+1, ademco_id16, ademco_event == 3400 ? 1400 : 3400, gg, zone, "123456"); String cmd = lib.pack2(seq+1, acct, ademco_id16, ademco_event == 3400 ? 1400 : 3400, gg, zone, "123456");
System.out.println("sending command:" + cmd); System.out.println("sending command:" + cmd);
byte[] data = hexStringToByteArray(cmd); byte[] data = hexStringToByteArray(cmd);
output.write(data); output.write(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