Commit b8d0dbdc authored by captainwong's avatar captainwong

fix #acct

parent 9c16685c
......@@ -62,12 +62,14 @@ JNIEXPORT jobject JNICALL Java_javademo_jni_AdemcoHbLibrary_parse
}
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;
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),
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));
if (res > 0) {
buff[res] = 0;
......@@ -77,17 +79,19 @@ JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack
}
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;
std::string sacct = env->GetStringUTFChars(acct, &iscopy);
std::string s = env->GetStringUTFChars(xdata, &iscopy);
auto xdata_ = ademco::makeXData(s.data(), s.size());
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),
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_);
if (res > 0) {
//buff[res] = 0;
auto ascii = ademco::detail::toString(buff, res, ademco::detail::ToStringOption::ALL_CHAR_AS_HEX, false, false);
memcpy(buff, ascii.data(), ascii.size());
return env->NewStringUTF(buff);
......@@ -96,12 +100,14 @@ JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_pack2
}
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;
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),
nullptr, static_cast<size_t>(ademco_id));
s, 0);
if (res > 0) {
buff[res] = 0;
return env->NewStringUTF(buff);
......
......@@ -26,26 +26,26 @@ JNIEXPORT jobject JNICALL Java_javademo_jni_AdemcoHbLibrary_parse
/*
* Class: javademo_jni_AdemcoHbLibrary
* Method: pack
* Signature: (IIIII)Ljava/lang/String;
* Signature: (ILjava/lang/String;IIII)Ljava/lang/String;
*/
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
* 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
(JNIEnv *, jobject, jint, jint, jint, jint, jint, jstring);
(JNIEnv *, jobject, jint, jstring, jint, jint, jint, jint, jstring);
/*
* Class: javademo_jni_AdemcoHbLibrary
* Method: packAck
* Signature: (II)Ljava/lang/String;
* Signature: (ILjava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_javademo_jni_AdemcoHbLibrary_packAck
(JNIEnv *, jobject, jint, jint);
(JNIEnv *, jobject, jint, jstring);
#ifdef __cplusplus
}
......
......@@ -41,33 +41,35 @@ public class AdemcoHbLibrary
/*
* @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, 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)打包成网络传输数据
* @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, 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
* @param[in] seq 序号
* @param[in] ademco_id 安定宝ID
* @param[in] acct 主机账号
* @return String
*/
public native String packAck(int seq, int ademco_id);
public native String packAck(int seq, String acct);
// public void testPrint(){ nativePrint(); }
......
......@@ -23,16 +23,16 @@ public class SimpleServer {
// 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("using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0");
String data = lib.pack(1234, "861234567890", 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("using seq=1234, acct=861234567890, ");
String data = lib.packAck(1234, "861234567890");
System.out.println("data=" + data);
}
......
......@@ -59,16 +59,16 @@ public class SimpleServerThread extends Thread {
if (m.find()) {
String id = m.group(1);
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 seq: " + seq);
System.out.println("Found ademco_id: " + ademco_id);
System.out.println("Found acct: " + acct);
switch(id){
case "ACK":break;
case "NULL": // reply ack
{
String ack = lib.packAck(seq, ademco_id);
String ack = lib.packAck(seq, acct);
System.out.println("replying ack:" + ack);
writer.write(ack);
writer.flush();
......@@ -78,7 +78,7 @@ public class SimpleServerThread extends Thread {
case "ADM-CID":
{
// reply ack
String ack = lib.packAck(seq, ademco_id);
String ack = lib.packAck(seq, acct);
System.out.println("replying ack:" + ack);
writer.write(ack);
writer.flush();
......@@ -87,7 +87,6 @@ public class SimpleServerThread extends Thread {
m = r2.matcher(line);
if (m.find()) {
int ademco_id16 = Integer.parseInt(m.group(1), 16);
assert(ademco_id == ademco_id16);
int ademco_event = Integer.parseInt(m.group(2));
int gg = Integer.parseInt(m.group(3));
int zone = Integer.parseInt(m.group(4));
......@@ -99,7 +98,7 @@ public class SimpleServerThread extends Thread {
long now = System.currentTimeMillis();
if(now - lastTimeStatusChange > 5000){
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);
byte[] data = hexStringToByteArray(cmd);
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