Commit 9713cdaf authored by captainwong's avatar captainwong

add comment for arm/disarm; format code

parent e156a459
...@@ -15,7 +15,7 @@ namespace CSharpDemo ...@@ -15,7 +15,7 @@ namespace CSharpDemo
{ {
class Program class Program
{ {
static void Main(string[] args) static void Main(string[] args)
{ {
// test parse // test parse
{ {
...@@ -36,7 +36,7 @@ namespace CSharpDemo ...@@ -36,7 +36,7 @@ namespace CSharpDemo
Debug.Assert(pkt.data.ademcoEvent == AdemcoEvent.EVENT_I_AM_WIRE_MACHINE); Debug.Assert(pkt.data.ademcoEvent == AdemcoEvent.EVENT_I_AM_WIRE_MACHINE);
Debug.Assert(pkt.data.gg == 0); Debug.Assert(pkt.data.gg == 0);
Debug.Assert(pkt.data.zone == 0); Debug.Assert(pkt.data.zone == 0);
Console.WriteLine("res={0:D}, commited={1:D}", res, libademco.size_tp_value(cb)); Console.WriteLine("res={0:D}, commited={1:D}", res, libademco.size_tp_value(cb));
} }
// test pack // test pack
...@@ -46,11 +46,11 @@ namespace CSharpDemo ...@@ -46,11 +46,11 @@ namespace CSharpDemo
uint len = libademco.ademcoMakeHbPacket(buff, 1024, 1, "861234567890", 666666, AdemcoEvent.EVENT_ARM, 0, 0, null); uint len = libademco.ademcoMakeHbPacket(buff, 1024, 1, "861234567890", 666666, AdemcoEvent.EVENT_ARM, 0, 0, null);
Debug.Assert(len > 0); Debug.Assert(len > 0);
Console.WriteLine("len={0:D}", len); Console.WriteLine("len={0:D}", len);
libademco.ademcoPrint(buff, len); libademco.ademcoPrint(buff, len);
Console.WriteLine("test parse packed data"); Console.WriteLine("test parse packed data");
AdemcoPacket pkt = new AdemcoPacket(); AdemcoPacket pkt = new AdemcoPacket();
SWIGTYPE_p_size_t cb = libademco.new_size_tp(); SWIGTYPE_p_size_t cb = libademco.new_size_tp();
AdemcoParseResult res = libademco.ademcoPacketParse(buff, len, pkt, cb); AdemcoParseResult res = libademco.ademcoPacketParse(buff, len, pkt, cb);
Debug.Assert(res == AdemcoParseResult.RESULT_OK); Debug.Assert(res == AdemcoParseResult.RESULT_OK);
Debug.Assert(libademco.size_tp_value(cb) == len); Debug.Assert(libademco.size_tp_value(cb) == len);
...@@ -84,34 +84,39 @@ namespace CSharpDemo ...@@ -84,34 +84,39 @@ namespace CSharpDemo
{ {
var listener = new TcpListener(IPAddress.Any, port); var listener = new TcpListener(IPAddress.Any, port);
listener.Start(); listener.Start();
while(true){ while (true)
{
TcpClient client = listener.AcceptTcpClient(); TcpClient client = listener.AcceptTcpClient();
Thread thread = new Thread(new ParameterizedThreadStart(clientHandler)); Thread thread = new Thread(new ParameterizedThreadStart(clientHandler));
thread.Start(client); thread.Start(client);
} }
}catch(Exception e) }
catch (Exception e)
{ {
Console.WriteLine(e.Message); Console.WriteLine(e.Message);
} }
} }
static byte[] append(byte[] origin, byte[] buf, int len){ static byte[] append(byte[] origin, byte[] buf, int len)
{
byte[] dst = new byte[origin.Length + len]; byte[] dst = new byte[origin.Length + len];
Array.ConstrainedCopy(origin, 0, dst, 0, origin.Length); Array.ConstrainedCopy(origin, 0, dst, 0, origin.Length);
Array.ConstrainedCopy(buf, 0, dst, origin.Length, len); Array.ConstrainedCopy(buf, 0, dst, origin.Length, len);
return dst; return dst;
} }
static byte[] eat(byte[] origin, int len){ static byte[] eat(byte[] origin, int len)
if(origin.Length == len){return new byte[0];} {
if (origin.Length == len) { return new byte[0]; }
byte[] dst = new byte[origin.Length - len]; byte[] dst = new byte[origin.Length - len];
Array.ConstrainedCopy(origin, len, dst, 0, origin.Length - len); Array.ConstrainedCopy(origin, len, dst, 0, origin.Length - len);
return dst; return dst;
} }
static ushort nextSeq(ushort seq){ static ushort nextSeq(ushort seq)
if(++seq == 10000){ seq = 1;} {
if (++seq == 10000) { seq = 1; }
return seq; return seq;
} }
...@@ -141,14 +146,16 @@ namespace CSharpDemo ...@@ -141,14 +146,16 @@ namespace CSharpDemo
{ {
break; break;
} }
if(nread == 0){break;} if (nread == 0) { break; }
buff = append(buff, msg, nread); buff = append(buff, msg, nread);
AdemcoParseResult res = AdemcoParseResult.RESULT_OK; AdemcoParseResult res = AdemcoParseResult.RESULT_OK;
while(res == AdemcoParseResult.RESULT_OK){ while (res == AdemcoParseResult.RESULT_OK)
{
res = libademco.ademcoPacketParse(buff, (uint)buff.Length, pkt, cb); res = libademco.ademcoPacketParse(buff, (uint)buff.Length, pkt, cb);
switch(res){ switch (res)
case AdemcoParseResult.RESULT_OK: {
case AdemcoParseResult.RESULT_OK:
Console.Write("C:"); libademco.ademcoPrint(buff, libademco.size_tp_value(cb)); Console.Write("C:"); libademco.ademcoPrint(buff, libademco.size_tp_value(cb));
buff = eat(buff, (int)libademco.size_tp_value(cb)); buff = eat(buff, (int)libademco.size_tp_value(cb));
switch (pkt.id) switch (pkt.id)
...@@ -161,18 +168,24 @@ namespace CSharpDemo ...@@ -161,18 +168,24 @@ namespace CSharpDemo
replyAck(stream, pkt.seq, pkt.acct); replyAck(stream, pkt.seq, pkt.acct);
acct = pkt.acct; acct = pkt.acct;
ademco_id = pkt.data.ademcoId; ademco_id = pkt.data.ademcoId;
if(libademco.ademcoIsMachineTypeEvent(pkt.data.ademcoEvent) != 0){ if (libademco.ademcoIsMachineTypeEvent(pkt.data.ademcoEvent) != 0)
{
type = libademco.hbMachineTypeFromAdemcoEvent(pkt.data.ademcoEvent); type = libademco.hbMachineTypeFromAdemcoEvent(pkt.data.ademcoEvent);
} }
if(libademco.ademcoIsMachineStatusEvent(pkt.data.ademcoEvent) != 0){ if (libademco.ademcoIsMachineStatusEvent(pkt.data.ademcoEvent) != 0)
{
status = libademco.hbMachineStatusFromAdemcoEvent(pkt.data.ademcoEvent); status = libademco.hbMachineStatusFromAdemcoEvent(pkt.data.ademcoEvent);
} }
// 示范布撤防的调用方式 // 演示如何进行布撤防,真实项目里可以删改本段
if(++counter % 5 == 0){ if (++counter % 5 == 0)
if(status == HbMachineStatus.HMS_ARM){ {
if (status == HbMachineStatus.HMS_ARM)
{
sendDisarm(stream, nextSeq(seq), acct, ademco_id, "123456"); sendDisarm(stream, nextSeq(seq), acct, ademco_id, "123456");
}else{ }
else
{
sendArm(stream, nextSeq(seq), acct, ademco_id); sendArm(stream, nextSeq(seq), acct, ademco_id);
} }
} }
...@@ -190,7 +203,8 @@ namespace CSharpDemo ...@@ -190,7 +203,8 @@ namespace CSharpDemo
} }
} }
static void replyAck(NetworkStream stream, ushort seq, string acct){ static void replyAck(NetworkStream stream, ushort seq, string acct)
{
byte[] buff = new byte[1024]; byte[] buff = new byte[1024];
uint len = libademco.ademcoMakeAckPacket(buff, 1024, seq, acct, 0); uint len = libademco.ademcoMakeAckPacket(buff, 1024, seq, acct, 0);
Console.Write("S:"); Console.Write("S:");
...@@ -198,7 +212,8 @@ namespace CSharpDemo ...@@ -198,7 +212,8 @@ namespace CSharpDemo
stream.Write(buff, 0, (int)len); stream.Write(buff, 0, (int)len);
} }
static void sendArm(NetworkStream stream, ushort seq, string acct, uint ademcoId){ static void sendArm(NetworkStream stream, ushort seq, string acct, uint ademcoId)
{
byte[] buff = new byte[1024]; byte[] buff = new byte[1024];
uint len = libademco.ademcoMakeHbPacket(buff, 1024, seq, acct, ademcoId, AdemcoEvent.EVENT_ARM, 0, 0, null); uint len = libademco.ademcoMakeHbPacket(buff, 1024, seq, acct, ademcoId, AdemcoEvent.EVENT_ARM, 0, 0, null);
Console.Write("S:"); Console.Write("S:");
...@@ -206,10 +221,12 @@ namespace CSharpDemo ...@@ -206,10 +221,12 @@ namespace CSharpDemo
stream.Write(buff, 0, (int)len); stream.Write(buff, 0, (int)len);
} }
static void sendDisarm(NetworkStream stream, ushort seq, string acct, uint ademcoId, string pwd){ static void sendDisarm(NetworkStream stream, ushort seq, string acct, uint ademcoId, string pwd)
{
byte[] buff = new byte[1024]; byte[] buff = new byte[1024];
AdemcoXDataSegment xdata = null; AdemcoXDataSegment xdata = null;
if(!string.IsNullOrEmpty(pwd)){ if (!string.IsNullOrEmpty(pwd))
{
xdata = new AdemcoXDataSegment(); xdata = new AdemcoXDataSegment();
libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX, AdemcoXDataTransform.AdemcoXDataTransform_as_is, Encoding.ASCII.GetBytes(pwd), (uint)pwd.Length); libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX, AdemcoXDataTransform.AdemcoXDataTransform_as_is, Encoding.ASCII.GetBytes(pwd), (uint)pwd.Length);
} }
......
import java.io.*; import java.io.*;
import java.net.*; import java.net.*;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
...@@ -15,7 +14,9 @@ public class JavaDemo { ...@@ -15,7 +14,9 @@ public class JavaDemo {
try { try {
System.loadLibrary("ademco_java"); System.loadLibrary("ademco_java");
} catch (UnsatisfiedLinkError e) { } catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e); System.err.println(
"Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n"
+ e);
System.exit(1); System.exit(1);
} }
} }
...@@ -24,12 +25,12 @@ public class JavaDemo { ...@@ -24,12 +25,12 @@ public class JavaDemo {
private Map<SocketChannel, Client> clients; private Map<SocketChannel, Client> clients;
private InetSocketAddress listenAddr; private InetSocketAddress listenAddr;
public JavaDemo(String addr, int port) throws IOException{ public JavaDemo(String addr, int port) throws IOException {
listenAddr = new InetSocketAddress(addr, port); listenAddr = new InetSocketAddress(addr, port);
clients = new HashMap<SocketChannel, Client>(); clients = new HashMap<SocketChannel, Client>();
} }
private void start() throws IOException{ private void start() throws IOException {
selector = Selector.open(); selector = Selector.open();
ServerSocketChannel channel = ServerSocketChannel.open(); ServerSocketChannel channel = ServerSocketChannel.open();
channel.configureBlocking(false); channel.configureBlocking(false);
...@@ -37,21 +38,24 @@ public class JavaDemo { ...@@ -37,21 +38,24 @@ public class JavaDemo {
channel.register(selector, SelectionKey.OP_ACCEPT); channel.register(selector, SelectionKey.OP_ACCEPT);
System.out.println("Server started..."); System.out.println("Server started...");
while(true){ while (true) {
selector.select(); selector.select();
Iterator keys = selector.selectedKeys().iterator(); Iterator keys = selector.selectedKeys().iterator();
while(keys.hasNext()){ while (keys.hasNext()) {
SelectionKey key = (SelectionKey)keys.next(); SelectionKey key = (SelectionKey) keys.next();
keys.remove(); keys.remove();
if(!key.isValid()) continue; if (!key.isValid())
if(key.isAcceptable()) accept(key); continue;
else if(key.isReadable()) read(key); if (key.isAcceptable())
accept(key);
else if (key.isReadable())
read(key);
} }
} }
} }
private void accept(SelectionKey key) throws IOException{ private void accept(SelectionKey key) throws IOException {
ServerSocketChannel sChannel = (ServerSocketChannel)key.channel(); ServerSocketChannel sChannel = (ServerSocketChannel) key.channel();
SocketChannel channel = sChannel.accept(); SocketChannel channel = sChannel.accept();
channel.configureBlocking(false); channel.configureBlocking(false);
Socket socket = channel.socket(); Socket socket = channel.socket();
...@@ -61,11 +65,11 @@ public class JavaDemo { ...@@ -61,11 +65,11 @@ public class JavaDemo {
channel.register(selector, SelectionKey.OP_READ); channel.register(selector, SelectionKey.OP_READ);
} }
private void read(SelectionKey key) throws IOException{ private void read(SelectionKey key) throws IOException {
SocketChannel channel = (SocketChannel)key.channel(); SocketChannel channel = (SocketChannel) key.channel();
ByteBuffer buf = ByteBuffer.allocate(1024); ByteBuffer buf = ByteBuffer.allocate(1024);
int n = channel.read(buf); int n = channel.read(buf);
if(n==-1){ if (n == -1) {
clients.get(channel).offline(); clients.get(channel).offline();
clients.remove(channel); clients.remove(channel);
channel.close(); channel.close();
...@@ -78,7 +82,7 @@ public class JavaDemo { ...@@ -78,7 +82,7 @@ public class JavaDemo {
clients.get(channel).onMsg(data); clients.get(channel).onMsg(data);
} }
public static void test_libademco(){ public static void test_libademco() {
// test parse // test parse
{ {
System.out.println("testing parse..."); System.out.println("testing parse...");
...@@ -87,14 +91,14 @@ public class JavaDemo { ...@@ -87,14 +91,14 @@ public class JavaDemo {
AdemcoPacket pkt = new AdemcoPacket(); AdemcoPacket pkt = new AdemcoPacket();
SWIGTYPE_p_size_t cb = libademco.new_size_tp(); SWIGTYPE_p_size_t cb = libademco.new_size_tp();
AdemcoParseResult res = libademco.ademcoPacketParse(data.getBytes(), data.length(), pkt, cb); AdemcoParseResult res = libademco.ademcoPacketParse(data.getBytes(), data.length(), pkt, cb);
assert(res == AdemcoParseResult.RESULT_OK); assert (res == AdemcoParseResult.RESULT_OK);
assert(libademco.size_tp_value(cb) == data.length()); assert (libademco.size_tp_value(cb) == data.length());
System.out.println("parse result=" + res + ",cb_commited=" + libademco.size_tp_value(cb)); System.out.println("parse result=" + res + ",cb_commited=" + libademco.size_tp_value(cb));
libademco.delete_size_tp(cb); libademco.delete_size_tp(cb);
} }
// test pack // test pack
{ {
System.out.println("testing pack..."); System.out.println("testing pack...");
System.out.println("using seq=1234, acct=861234567890, 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");
AdemcoPacket pkt = new AdemcoPacket(); AdemcoPacket pkt = new AdemcoPacket();
...@@ -105,9 +109,11 @@ public class JavaDemo { ...@@ -105,9 +109,11 @@ public class JavaDemo {
// test pack with xdata // test pack with xdata
{ {
System.out.println("testing pack with xdata..."); System.out.println("testing pack with xdata...");
System.out.println("using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=123456"); System.out.println(
"using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=123456");
AdemcoXDataSegment xdata = new AdemcoXDataSegment(); AdemcoXDataSegment xdata = new AdemcoXDataSegment();
libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX, AdemcoXDataTransform.AdemcoXDataTransform_as_is, "123456".getBytes(), 6); libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX,
AdemcoXDataTransform.AdemcoXDataTransform_as_is, "123456".getBytes(), 6);
AdemcoPacket pkt = new AdemcoPacket(); AdemcoPacket pkt = new AdemcoPacket();
libademco.ademcoMakeHbPacket2(pkt, 1234, "861234567890", 666666l, AdemcoEvent.EVENT_ARM, 0l, 0l, xdata); libademco.ademcoMakeHbPacket2(pkt, 1234, "861234567890", 666666l, AdemcoEvent.EVENT_ARM, 0l, 0l, xdata);
System.out.println("data=" + printable_bytes(pkt.getRaw(), pkt.getRaw_len())); System.out.println("data=" + printable_bytes(pkt.getRaw(), pkt.getRaw_len()));
...@@ -116,15 +122,17 @@ public class JavaDemo { ...@@ -116,15 +122,17 @@ public class JavaDemo {
// test with hex xdata // test with hex xdata
{ {
System.out.println("testing pack with hex xdata..."); System.out.println("testing pack with hex xdata...");
System.out.println("using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=EB BA 3F A1 76"); System.out.println(
"using seq=1234, acct=861234567890, ademco_id=666666, event=3400, zone=0, gg=0, xdata=EB BA 3F A1 76");
byte[] xdatacontent = new byte[5]; byte[] xdatacontent = new byte[5];
xdatacontent[0] = (byte)0xEB; xdatacontent[0] = (byte) 0xEB;
xdatacontent[1] = (byte)0xBA; xdatacontent[1] = (byte) 0xBA;
xdatacontent[2] = (byte)0x3F; xdatacontent[2] = (byte) 0x3F;
xdatacontent[3] = (byte)0xA1; xdatacontent[3] = (byte) 0xA1;
xdatacontent[4] = (byte)0x76; xdatacontent[4] = (byte) 0x76;
AdemcoXDataSegment xdata = new AdemcoXDataSegment(); AdemcoXDataSegment xdata = new AdemcoXDataSegment();
libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX, AdemcoXDataTransform.AdemcoXDataTransform_as_is, xdatacontent, 5); libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX,
AdemcoXDataTransform.AdemcoXDataTransform_as_is, xdatacontent, 5);
AdemcoPacket pkt = new AdemcoPacket(); AdemcoPacket pkt = new AdemcoPacket();
libademco.ademcoMakeHbPacket2(pkt, 1234, "861234567890", 666666l, AdemcoEvent.EVENT_ARM, 0l, 0l, xdata); libademco.ademcoMakeHbPacket2(pkt, 1234, "861234567890", 666666l, AdemcoEvent.EVENT_ARM, 0l, 0l, xdata);
System.out.println("data=" + printable_bytes(pkt.getRaw(), pkt.getRaw_len())); System.out.println("data=" + printable_bytes(pkt.getRaw(), pkt.getRaw_len()));
...@@ -150,14 +158,14 @@ public class JavaDemo { ...@@ -150,14 +158,14 @@ public class JavaDemo {
} }
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
JavaDemo.test_libademco(); JavaDemo.test_libademco();
int port = 12345; int port = 12345;
if (args.length > 0){ if (args.length > 0) {
port = Integer.parseInt(args[0]); port = Integer.parseInt(args[0]);
} }
//new JavaDemo("localhost", port).start(); // new JavaDemo("localhost", port).start();
new JavaDemo("0.0.0.0", port).start(); new JavaDemo("0.0.0.0", port).start();
} }
...@@ -173,23 +181,23 @@ public class JavaDemo { ...@@ -173,23 +181,23 @@ public class JavaDemo {
String acct = ""; String acct = "";
long lastTimeStatusChange = 0; long lastTimeStatusChange = 0;
public Client(SocketChannel channel){ public Client(SocketChannel channel) {
this.channel = channel; this.channel = channel;
} }
public void offline(){ public void offline() {
System.out.println(id() + " is offline"); System.out.println(id() + " is offline");
libademco.delete_size_tp(cb); libademco.delete_size_tp(cb);
} }
public void onMsg(byte[] data) throws IOException { public void onMsg(byte[] data) throws IOException {
buf = append(buf, data); buf = append(buf, data);
//System.out.println(printable_bytes(buf)); // System.out.println(printable_bytes(buf));
AdemcoParseResult res = libademco.ademcoPacketParse(buf, buf.length, pkt, cb); AdemcoParseResult res = libademco.ademcoPacketParse(buf, buf.length, pkt, cb);
System.out.println(res + ", " + libademco.size_tp_value(cb)); System.out.println(res + ", " + libademco.size_tp_value(cb));
switch(res) { switch (res) {
case RESULT_OK: case RESULT_OK:
buf = trim(buf, (int)libademco.size_tp_value(cb)); buf = trim(buf, (int) libademco.size_tp_value(cb));
handleMsg(); handleMsg();
break; break;
case RESULT_NOT_ENOUGH: case RESULT_NOT_ENOUGH:
...@@ -200,26 +208,26 @@ public class JavaDemo { ...@@ -200,26 +208,26 @@ public class JavaDemo {
} }
} }
private byte[] getRawWithLen(){ private byte[] getRawWithLen() {
byte[] b = new byte[(int)pkt.getRaw_len()]; byte[] b = new byte[(int) pkt.getRaw_len()];
System.arraycopy(pkt.getRaw(), 0, b, 0, (int)pkt.getRaw_len()); System.arraycopy(pkt.getRaw(), 0, b, 0, (int) pkt.getRaw_len());
return b; return b;
} }
private String id(){ private String id() {
String str = "Client " + channel.socket().getRemoteSocketAddress(); String str = "Client " + channel.socket().getRemoteSocketAddress();
if(!acct.isEmpty()){ if (!acct.isEmpty()) {
str += " acct=" + acct; str += " acct=" + acct;
} }
if(ademco_id != 0){ if (ademco_id != 0) {
str += " ademco_id=" + ademco_id; str += " ademco_id=" + ademco_id;
} }
return str; return str;
} }
private int nextSeq(){ private int nextSeq() {
seq++; seq++;
if(seq == 10000){ if (seq == 10000) {
seq = 1; seq = 1;
} }
return seq; return seq;
...@@ -227,42 +235,43 @@ public class JavaDemo { ...@@ -227,42 +235,43 @@ public class JavaDemo {
private void handleMsg() throws IOException { private void handleMsg() throws IOException {
System.out.println(id() + " R:" + printable_bytes(pkt.getRaw(), pkt.getRaw_len())); System.out.println(id() + " R:" + printable_bytes(pkt.getRaw(), pkt.getRaw_len()));
switch(pkt.getId()){ switch (pkt.getId()) {
case AID_NULL: case AID_NULL:
acct = pkt.getAcct(); acct = pkt.getAcct();
replyAck(); replyAck();
break; break;
case AID_ACK: case AID_ACK:
break; break;
case AID_HB: case AID_HB:
case AID_ADM_CID: case AID_ADM_CID:
acct = pkt.getAcct(); acct = pkt.getAcct();
ademco_id = pkt.getData().getAdemcoId(); ademco_id = pkt.getData().getAdemcoId();
AdemcoEvent event = pkt.getData().getAdemcoEvent(); AdemcoEvent event = pkt.getData().getAdemcoEvent();
System.out.println(id() + " event=" + libademco.ademcoEventToString(event) + " zone=" + pkt.getData().getZone()); System.out.println(id() + " event=" + libademco.ademcoEventToString(event) + " zone="
if(libademco.ademcoIsMachineStatusEvent(event) != 0){ + pkt.getData().getZone());
if (libademco.ademcoIsMachineStatusEvent(event) != 0) {
status = libademco.hbMachineStatusFromAdemcoEvent(event); status = libademco.hbMachineStatusFromAdemcoEvent(event);
// test arm/disarm // 演示如何进行布撤防,真实项目里可以删改本段
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
if(now - lastTimeStatusChange > 5000){ if (now - lastTimeStatusChange > 5000) {
lastTimeStatusChange = now; lastTimeStatusChange = now;
if(status == HbMachineStatus.HMS_ARM){ if (status == HbMachineStatus.HMS_ARM) {
disarm("123456"); disarm("123456");
}else{ } else {
arm(); arm();
} }
} }
} }
if(libademco.ademcoIsMachineTypeEvent(event) != 0){ if (libademco.ademcoIsMachineTypeEvent(event) != 0) {
type = libademco.hbMachineTypeFromAdemcoEvent(event); type = libademco.hbMachineTypeFromAdemcoEvent(event);
} }
replyAck(); replyAck();
if(type == HbMachineType.HMT_INVALID && !acct.isEmpty() && ademco_id != 0){ if (type == HbMachineType.HMT_INVALID && !acct.isEmpty() && ademco_id != 0) {
askType(); askType();
} }
break; break;
} }
} }
...@@ -273,12 +282,13 @@ public class JavaDemo { ...@@ -273,12 +282,13 @@ public class JavaDemo {
} }
private void askType() throws IOException { private void askType() throws IOException {
libademco.ademcoMakeHbPacket2(pkt, nextSeq(), acct, ademco_id, AdemcoEvent.EVENT_WHAT_IS_YOUR_TYPE, 0L, 0L, null); libademco.ademcoMakeHbPacket2(pkt, nextSeq(), acct, ademco_id, AdemcoEvent.EVENT_WHAT_IS_YOUR_TYPE, 0L, 0L,
null);
channel.write(ByteBuffer.wrap(getRawWithLen())); channel.write(ByteBuffer.wrap(getRawWithLen()));
System.out.println(id() + " S:" + printable_bytes(pkt.getRaw(), pkt.getRaw_len())); System.out.println(id() + " S:" + printable_bytes(pkt.getRaw(), pkt.getRaw_len()));
} }
private void arm() throws IOException{ private void arm() throws IOException {
libademco.ademcoMakeHbPacket2(pkt, nextSeq(), acct, ademco_id, AdemcoEvent.EVENT_ARM, 0L, 0L, null); libademco.ademcoMakeHbPacket2(pkt, nextSeq(), acct, ademco_id, AdemcoEvent.EVENT_ARM, 0L, 0L, null);
channel.write(ByteBuffer.wrap(getRawWithLen())); channel.write(ByteBuffer.wrap(getRawWithLen()));
System.out.println(id() + " S:" + printable_bytes(pkt.getRaw(), pkt.getRaw_len())); System.out.println(id() + " S:" + printable_bytes(pkt.getRaw(), pkt.getRaw_len()));
...@@ -286,9 +296,10 @@ public class JavaDemo { ...@@ -286,9 +296,10 @@ public class JavaDemo {
private void disarm(String pwd) throws IOException { private void disarm(String pwd) throws IOException {
AdemcoXDataSegment xdata = null; AdemcoXDataSegment xdata = null;
if(pwd != null && !pwd.isEmpty()){ if (pwd != null && !pwd.isEmpty()) {
xdata = new AdemcoXDataSegment(); xdata = new AdemcoXDataSegment();
libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX, AdemcoXDataTransform.AdemcoXDataTransform_as_is, pwd.getBytes(), pwd.length()); libademco.ademcoMakeXData(xdata, AdemcoXDataLengthFormat.TWO_HEX,
AdemcoXDataTransform.AdemcoXDataTransform_as_is, pwd.getBytes(), pwd.length());
} }
libademco.ademcoMakeHbPacket2(pkt, nextSeq(), acct, ademco_id, AdemcoEvent.EVENT_DISARM, 0L, 0L, xdata); libademco.ademcoMakeHbPacket2(pkt, nextSeq(), acct, ademco_id, AdemcoEvent.EVENT_DISARM, 0L, 0L, xdata);
channel.write(ByteBuffer.wrap(getRawWithLen())); channel.write(ByteBuffer.wrap(getRawWithLen()));
...@@ -296,18 +307,18 @@ public class JavaDemo { ...@@ -296,18 +307,18 @@ public class JavaDemo {
} }
} }
public static String printable_bytes(byte[] b){ public static String printable_bytes(byte[] b) {
return printable_bytes(b, b.length); return printable_bytes(b, b.length);
} }
public static String printable_bytes(byte[] b, long length){ public static String printable_bytes(byte[] b, long length) {
String HEX_STRING = "0123456789ABCDEF"; String HEX_STRING = "0123456789ABCDEF";
String s = ""; String s = "";
for(int i = 0; i < length; i++){ for (int i = 0; i < length; i++) {
byte c = b[i]; byte c = b[i];
if(32 <= c && c <= 127){ if (32 <= c && c <= 127) {
s += (char)c; s += (char) c;
}else{ } else {
s += "\\x" + HEX_STRING.charAt((b[i] >>> 4) & 0x0F); s += "\\x" + HEX_STRING.charAt((b[i] >>> 4) & 0x0F);
s += HEX_STRING.charAt(b[i] & 0x0F); s += HEX_STRING.charAt(b[i] & 0x0F);
} }
...@@ -315,14 +326,14 @@ public class JavaDemo { ...@@ -315,14 +326,14 @@ public class JavaDemo {
return s; return s;
} }
public static String printable_bytes(char[] b){ public static String printable_bytes(char[] b) {
String HEX_STRING = "0123456789ABCDEF"; String HEX_STRING = "0123456789ABCDEF";
String s = ""; String s = "";
for(int i = 0; i < b.length; i++){ for (int i = 0; i < b.length; i++) {
int c = b[i] & 0xFF; int c = b[i] & 0xFF;
if(32 <= c && c <= 127){ if (32 <= c && c <= 127) {
s += (char)c; s += (char) c;
}else{ } else {
s += "\\x" + HEX_STRING.charAt(c >>> 4); s += "\\x" + HEX_STRING.charAt(c >>> 4);
s += HEX_STRING.charAt(c & 0x0F); s += HEX_STRING.charAt(c & 0x0F);
} }
...@@ -330,14 +341,14 @@ public class JavaDemo { ...@@ -330,14 +341,14 @@ public class JavaDemo {
return s; return s;
} }
public static String printable_bytes(String b){ public static String printable_bytes(String b) {
String HEX_STRING = "0123456789ABCDEF"; String HEX_STRING = "0123456789ABCDEF";
String s = ""; String s = "";
for(int i = 0; i < b.length(); i++){ for (int i = 0; i < b.length(); i++) {
char c = b.charAt(i); char c = b.charAt(i);
if(32 <= c && c <= 127){ if (32 <= c && c <= 127) {
s += (char)c; s += (char) c;
}else{ } else {
s += "\\x" + HEX_STRING.charAt(c >>> 4); s += "\\x" + HEX_STRING.charAt(c >>> 4);
s += HEX_STRING.charAt(c & 0x0F); s += HEX_STRING.charAt(c & 0x0F);
} }
...@@ -345,38 +356,38 @@ public class JavaDemo { ...@@ -345,38 +356,38 @@ public class JavaDemo {
return s; return s;
} }
public static char[] append(char[]origin, char[] buf){ public static char[] append(char[] origin, char[] buf) {
char[] dst = new char[origin.length + buf.length]; char[] dst = new char[origin.length + buf.length];
System.arraycopy(origin, 0, dst, 0, origin.length); System.arraycopy(origin, 0, dst, 0, origin.length);
System.arraycopy(buf , 0, dst, origin.length, buf.length); System.arraycopy(buf, 0, dst, origin.length, buf.length);
return dst; return dst;
} }
public static byte[] append(byte[]origin, byte[] buf){ public static byte[] append(byte[] origin, byte[] buf) {
byte[] dst = new byte[origin.length + buf.length]; byte[] dst = new byte[origin.length + buf.length];
System.arraycopy(origin, 0, dst, 0, origin.length); System.arraycopy(origin, 0, dst, 0, origin.length);
System.arraycopy(buf , 0, dst, origin.length, buf.length); System.arraycopy(buf, 0, dst, origin.length, buf.length);
return dst; return dst;
} }
public byte[] trim(byte[] origin, int pos){ public byte[] trim(byte[] origin, int pos) {
byte[] dst = new byte[origin.length - pos]; byte[] dst = new byte[origin.length - pos];
System.arraycopy(origin, pos, dst, 0, origin.length - pos); System.arraycopy(origin, pos, dst, 0, origin.length - pos);
return dst; return dst;
} }
public static byte[] c2b(char[] arr){ public static byte[] c2b(char[] arr) {
byte[] b = new byte[arr.length]; byte[] b = new byte[arr.length];
for(int i = 0; i < arr.length; i++){ for (int i = 0; i < arr.length; i++) {
b[i] = (byte)arr[i]; b[i] = (byte) arr[i];
} }
return b; return b;
} }
public static char[] b2c(byte[] arr){ public static char[] b2c(byte[] arr) {
char[] b = new char[arr.length]; char[] b = new char[arr.length];
for(int i = 0; i < arr.length; i++){ for (int i = 0; i < arr.length; i++) {
b[i] = (char)arr[i]; b[i] = (char) arr[i];
} }
return b; return b;
} }
......
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