From 31003c45064ee97b9bff1e122a5053b44db7cb65 Mon Sep 17 00:00:00 2001 From: linbenlei <572833793@qq.com> Date: Tue, 9 Mar 2021 15:37:16 +0800 Subject: [PATCH] fix: lte改写 --- src/main/java/com/example/mina/box/lte3000/Lte3000CodecFactory.java | 55 +------------------------------------------------------ src/main/java/com/example/mina/box/lte3000/Lte3000MessageDecoder.java | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/example/mina/box/lte3000/Lte3000MessageEncoder.java | 23 +++++++++++++++++++++++ src/main/java/com/example/mina/box/lte3000/Lte3000RequestMessage.java | 17 +++++++++++++++++ src/main/java/com/example/mina/box/lte3000/Lte3000VirtualBoxHandler.java | 55 +++++++++++++++++-------------------------------------- 5 files changed, 172 insertions(+), 92 deletions(-) create mode 100644 src/main/java/com/example/mina/box/lte3000/Lte3000MessageDecoder.java create mode 100644 src/main/java/com/example/mina/box/lte3000/Lte3000MessageEncoder.java diff --git a/src/main/java/com/example/mina/box/lte3000/Lte3000CodecFactory.java b/src/main/java/com/example/mina/box/lte3000/Lte3000CodecFactory.java index b3462b2..7a25926 100644 --- a/src/main/java/com/example/mina/box/lte3000/Lte3000CodecFactory.java +++ b/src/main/java/com/example/mina/box/lte3000/Lte3000CodecFactory.java @@ -1,13 +1,9 @@ package com.example.mina.box.lte3000; -import com.example.mina.box.lte3000.Lte3000RequestMessage; -import com.example.mina.box.lte3000.Lte3000ResponseMessage; -import org.apache.mina.core.buffer.IoBuffer; + import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.*; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.StandardCharsets; /** * @author 杜云山 @@ -25,54 +21,5 @@ public class Lte3000CodecFactory implements ProtocolCodecFactory { return new Lte3000MessageDecoder(); } - static class Lte3000MessageEncoder implements ProtocolEncoder { - - @Override - public void encode(IoSession session, Object message, ProtocolEncoderOutput out) { - - if (message instanceof Lte3000ResponseMessage) { - - byte[] result = ((Lte3000ResponseMessage) message).getResult(); - session.write(IoBuffer.wrap(result)); - } - } - - @Override - public void dispose(IoSession session) { - } - - } - - static class Lte3000MessageDecoder implements ProtocolDecoder { - - private final CharsetDecoder decoder = StandardCharsets.UTF_16.newDecoder(); - @Override - public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { - //String string = in.getString(decoder); - //byte[] bytes = in.array(); - byte[] bytes = new byte[in.limit()]; - int len = bytes.length; - in.get(bytes); - - Lte3000RequestMessage requestMessage = Lte3000RequestMessage.builder() - .cmd(new String(bytes)) - .bytes(bytes) - .len(len) - .build(); - - out.write(requestMessage); - } - - @Override - public void finishDecode(IoSession session, ProtocolDecoderOutput out) throws Exception { - - } - - @Override - public void dispose(IoSession session) throws Exception { - - } - - } } diff --git a/src/main/java/com/example/mina/box/lte3000/Lte3000MessageDecoder.java b/src/main/java/com/example/mina/box/lte3000/Lte3000MessageDecoder.java new file mode 100644 index 0000000..770cf2d --- /dev/null +++ b/src/main/java/com/example/mina/box/lte3000/Lte3000MessageDecoder.java @@ -0,0 +1,114 @@ +package com.example.mina.box.lte3000; + +import com.example.mina.util.CommandHelper; +import com.example.mina.util.Lte3000CommandHelper; +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; +import org.apache.mina.filter.codec.ProtocolDecoder; +import org.apache.mina.filter.codec.ProtocolDecoderOutput; + +import java.nio.charset.CharsetDecoder; +import java.nio.charset.StandardCharsets; + +public class Lte3000MessageDecoder implements ProtocolDecoder { + + private static final byte[] Response_46;// = "Fv7.46 Pv2.15 LTE2250/032X032".getBytes(); + private static final byte[] Response_53 = new byte[]{0x06, 0x30, 0x30, 0x53, 0x03, 0x56}; + private static final byte[] Response_58 = new byte[]{0x06, 0x30, 0x30, 0x58, 0x47, 0x4D, 0x4F, 0x03, 0x18}; + + static { + byte[] bs = "Fv7.46 Pv2.15 XRM2250/032X064".getBytes(); + Response_46 = new byte[bs.length + 6]; + System.arraycopy(bs, 0, Response_46, 4, bs.length); + Response_46[0] = 0x06; + Response_46[1] = 0x30; + Response_46[2] = 0x30; + Response_46[3] = 0x46; + Response_46[bs.length + 4] = 0x03; + Lte3000CommandHelper.setCHK(Response_46); + } + + private int getBcdPort(byte a, byte b, byte c) { + return (CommandHelper.BCD_REV[a] - 30) * 100 + (CommandHelper.BCD_REV[b] - 30) * 10 + (CommandHelper.BCD_REV[c] - 30); + } + private int getBcdAttn(byte a, byte b) { + return (CommandHelper.BCD_REV[a] - 30) * 10 + (CommandHelper.BCD_REV[b] - 30); + } + + + + @Override + public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { + //byte[] bytes = in.array(); + byte[] cmd = new byte[in.limit()]; + int len = cmd.length; + in.get(cmd); + String type = null; + Lte3000RequestMessage requestMessage = Lte3000RequestMessage.builder() + .cmd(new String(cmd)) + .bytes(cmd) + .len(len) + .response46(Response_46) + .response53(Response_53) + .response58(Response_58) + .build(); + + //F: Firmware Version / Unit ID P.82 + //0x46 + if (cmd[3] == 'F') { + requestMessage.setType("Firmware Version"); + } + + //O:Query Output Channel P.106 + //0x4F + if (cmd[3] == 'O') { + int col = this.getBcdPort(cmd[4], cmd[5], cmd[6]); + int row = 0; + requestMessage.setRow(row); + requestMessage.setCol(col); + requestMessage.setType("Query Output Channel"); + + } + + //S: Set Crosspoint P.115 + //0x53 + if (cmd[3] == 'S') { + int row = this.getBcdPort(cmd[7], cmd[8], cmd[9]); + int col = this.getBcdPort(cmd[4], cmd[5], cmd[6]); + requestMessage.setRow(row); + requestMessage.setCol(col); + requestMessage.setType("Set Crosspoint"); + } + + //XGMO: Set Gain Control to Manual Mode - Output p.137 + //0x58 0x47 0x4D 0x4F + if (cmd[3] == 'X' && cmd[4] == 'G' && cmd[5] == 'M' && cmd[6] == 'O' ) { + int col = this.getBcdPort(cmd[7], cmd[8], cmd[9]); + int attn = this.getBcdAttn(cmd[12], cmd[13]); + if (cmd[11] == 0x2D) { + + } + requestMessage.setAttn(attn); + requestMessage.setCol(col); + requestMessage.setType("Set Gain Control to Manual Mode"); + } + + //XGRO: Gain Control Read Status - Output P.139 + if (cmd[3] == 'X' && cmd[4] == 'G' && cmd[5] == 'R' && cmd[6] == 'O' ) { + int col = this.getBcdPort(cmd[7], cmd[8], cmd[9]); + requestMessage.setCol(col); + requestMessage.setType("Gain Control Read Status"); + } + out.write(requestMessage); + } + + @Override + public void finishDecode(IoSession session, ProtocolDecoderOutput out) throws Exception { + + } + + @Override + public void dispose(IoSession session) throws Exception { + + } +} diff --git a/src/main/java/com/example/mina/box/lte3000/Lte3000MessageEncoder.java b/src/main/java/com/example/mina/box/lte3000/Lte3000MessageEncoder.java new file mode 100644 index 0000000..76e2d23 --- /dev/null +++ b/src/main/java/com/example/mina/box/lte3000/Lte3000MessageEncoder.java @@ -0,0 +1,23 @@ +package com.example.mina.box.lte3000; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; +import org.apache.mina.filter.codec.ProtocolEncoder; +import org.apache.mina.filter.codec.ProtocolEncoderOutput; + +public class Lte3000MessageEncoder implements ProtocolEncoder { + + @Override + public void encode(IoSession session, Object message, ProtocolEncoderOutput out) { + + if (message instanceof Lte3000ResponseMessage) { + + byte[] result = ((Lte3000ResponseMessage) message).getResult(); + session.write(IoBuffer.wrap(result)); + } + } + + @Override + public void dispose(IoSession session) { + } +} diff --git a/src/main/java/com/example/mina/box/lte3000/Lte3000RequestMessage.java b/src/main/java/com/example/mina/box/lte3000/Lte3000RequestMessage.java index ebef6f4..eafa79f 100644 --- a/src/main/java/com/example/mina/box/lte3000/Lte3000RequestMessage.java +++ b/src/main/java/com/example/mina/box/lte3000/Lte3000RequestMessage.java @@ -19,4 +19,21 @@ public class Lte3000RequestMessage extends BaseRequestMessage { protected Integer len; protected byte[] bytes; + + protected String type; + + protected Integer row; + + protected Integer col; + + protected Integer attn; + + protected byte[] response46; + + protected byte[] response53; + + protected byte[] response58; + + + } diff --git a/src/main/java/com/example/mina/box/lte3000/Lte3000VirtualBoxHandler.java b/src/main/java/com/example/mina/box/lte3000/Lte3000VirtualBoxHandler.java index 6d774e7..d939319 100644 --- a/src/main/java/com/example/mina/box/lte3000/Lte3000VirtualBoxHandler.java +++ b/src/main/java/com/example/mina/box/lte3000/Lte3000VirtualBoxHandler.java @@ -17,21 +17,7 @@ import java.io.UnsupportedEncodingException; @Slf4j public class Lte3000VirtualBoxHandler extends AbstractVirtualBoxHandler { - private static final byte[] Response_46;// = "Fv7.46 Pv2.15 LTE2250/032X032".getBytes(); - private static final byte[] Response_53 = new byte[]{0x06, 0x30, 0x30, 0x53, 0x03, 0x56}; - private static final byte[] Response_58 = new byte[]{0x06, 0x30, 0x30, 0x58, 0x47, 0x4D, 0x4F, 0x03, 0x18}; - - static { - byte[] bs = "Fv7.46 Pv2.15 XRM2250/032X064".getBytes(); - Response_46 = new byte[bs.length + 6]; - System.arraycopy(bs, 0, Response_46, 4, bs.length); - Response_46[0] = 0x06; - Response_46[1] = 0x30; - Response_46[2] = 0x30; - Response_46[3] = 0x46; - Response_46[bs.length + 4] = 0x03; - Lte3000CommandHelper.setCHK(Response_46); - } + private Lte3000DataBuffer dataBuffer; @@ -48,9 +34,6 @@ public class Lte3000VirtualBoxHandler extends AbstractVirtualBoxHandler 0) { row = i; @@ -88,21 +71,18 @@ public class Lte3000VirtualBoxHandler extends AbstractVirtualBoxHandler