diff --git a/src/main/java/com/example/mina/client/aeroflex/AeroflexClient.java b/src/main/java/com/example/mina/client/aeroflex/AeroflexClient.java deleted file mode 100644 index 8d8a4d0..0000000 --- a/src/main/java/com/example/mina/client/aeroflex/AeroflexClient.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.example.mina.client.aeroflex; - -import com.example.mina.client.base.AbstractClient; -import com.example.mina.client.coder.ByteFactory; -import com.example.mina.client.entity.AbstractClientMessage; -import com.example.mina.server.entity.AeroflexDataBuffer; - -/** - * @author dy - * @date 2021/3/10 - */ -public class AeroflexClient extends AbstractClient { - - @Override - protected void init(AbstractClientMessage abstractClientMessage) { - protocolCodecFactory = new ByteFactory(); - abstractVirtualBoxClientHandler = new AeroflexClientHandler(abstractClientMessage, hardwareDataBuffer); - } - - @Override - protected void initHardwareDataBuffer() { - hardwareDataBuffer = new AeroflexDataBuffer(10, 10); - } - - @Override - protected void initClientMessage() { - - } - - @Override - public boolean setAttenuation(int row, int col, int attenuation) { - return false; - } - - @Override - public int getAttenuation(int row, int col) { - return 0; - } - - @Override - public Boolean reset() { - return null; - } - - @Override - public int[][] getAll() { - return new int[0][]; - } - -} diff --git a/src/main/java/com/example/mina/client/aeroflex/AeroflexClientHandler.java b/src/main/java/com/example/mina/client/aeroflex/AeroflexClientHandler.java deleted file mode 100644 index 6bbdf2d..0000000 --- a/src/main/java/com/example/mina/client/aeroflex/AeroflexClientHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.mina.client.aeroflex; - -import com.example.mina.client.base.AbstractVirtualBoxClientHandler; -import com.example.mina.client.entity.AbstractClientMessage; -import com.example.mina.client.entity.Command; -import com.example.mina.server.base.AbstractHardwareDataBuffer; - -/** - * @author dy - * @date 2021/3/10 - */ -public class AeroflexClientHandler extends AbstractVirtualBoxClientHandler { - - public AeroflexClientHandler(AbstractClientMessage clientMessage, - AbstractHardwareDataBuffer abstractHardwareDataBuffer) { - super(clientMessage, abstractHardwareDataBuffer); - } - - @Override - protected boolean handleCommandResponse(byte[] cmd, byte[] response, int responseLen) { - return false; - } -} diff --git a/src/main/java/com/example/mina/client/base/AbstractClient.java b/src/main/java/com/example/mina/client/base/AbstractClient.java index 4726991..ced2462 100644 --- a/src/main/java/com/example/mina/client/base/AbstractClient.java +++ b/src/main/java/com/example/mina/client/base/AbstractClient.java @@ -55,7 +55,7 @@ public abstract class AbstractClient { connectFuture.awaitUninterruptibly(); // 获取连接会话 this.ioSession = connectFuture.getSession(); - setAttenuation(1, 1, 10); + //setAttenuation(1, 1, 10); } public boolean isConnected() { @@ -66,9 +66,9 @@ public abstract class AbstractClient { } - abstract public boolean setAttenuation(int row, int col, int attenuation); + //abstract public boolean setAttenuation(int row, int col, int attenuation); - abstract public int getAttenuation(int row, int col); + //abstract public int getAttenuation(int row, int col); abstract public Boolean reset(); diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteDecoder.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteDecoder.java new file mode 100644 index 0000000..692c7ef --- /dev/null +++ b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteDecoder.java @@ -0,0 +1,29 @@ +package com.example.mina.client.box.aeroflex; + +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.ProtocolDecoderAdapter; +import org.apache.mina.filter.codec.ProtocolDecoderOutput; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author dy + * @date 2021/3/3 + */ +public class AeroflexByteDecoder extends ProtocolDecoderAdapter { + //打印日志信息 + private final static Logger log = LoggerFactory + .getLogger(ProtocolDecoder.class); + + @Override + public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { + int limit = in.limit(); + byte[] bytes = new byte[limit]; + + in.get(bytes); + + out.write(bytes); + } +} diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteEnCoder.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteEnCoder.java new file mode 100644 index 0000000..1b45ffd --- /dev/null +++ b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteEnCoder.java @@ -0,0 +1,39 @@ +package com.example.mina.client.box.aeroflex; + +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.ProtocolEncoderAdapter; +import org.apache.mina.filter.codec.ProtocolEncoderOutput; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author dy + * @date 2021/3/3 + */ +public class AeroflexByteEnCoder extends ProtocolEncoderAdapter { + //用于打印日志信息 + private final static Logger log = LoggerFactory + .getLogger(ProtocolEncoder.class); + + //编码 将数据包转成字节数组 + @Override + public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { + byte[] bytes = (byte[]) message; + + IoBuffer buffer = IoBuffer.allocate(bytes.length); + buffer.setAutoExpand(true); + + // 将数据放入缓冲IoBuffer + buffer.put(bytes); + // 写状态切换到读状态 + buffer.flip(); + + out.write(buffer); +// out.flush(); +// +// buffer.free(); + } + +} diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteFactory.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteFactory.java new file mode 100644 index 0000000..c4fdf0b --- /dev/null +++ b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexByteFactory.java @@ -0,0 +1,34 @@ +package com.example.mina.client.box.aeroflex; + +import org.apache.mina.core.session.IoSession; +import org.apache.mina.filter.codec.ProtocolCodecFactory; +import org.apache.mina.filter.codec.ProtocolDecoder; +import org.apache.mina.filter.codec.ProtocolEncoder; + +/** + * @author dy + * @date 2021/3/3 + */ +public class AeroflexByteFactory implements ProtocolCodecFactory { + private final AeroflexByteDecoder decoder; + private final AeroflexByteEnCoder encoder; + + //构造 + public AeroflexByteFactory() { + encoder = new AeroflexByteEnCoder(); + decoder = new AeroflexByteDecoder(); + } + + @Override + public ProtocolDecoder getDecoder(IoSession arg0) throws Exception { + // TODO Auto-generated method stub + return decoder; + } + + @Override + public ProtocolEncoder getEncoder(IoSession arg0) throws Exception { + // TODO Auto-generated method stub + return encoder; + } + +} diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClient.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClient.java new file mode 100644 index 0000000..477cdac --- /dev/null +++ b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClient.java @@ -0,0 +1,50 @@ +package com.example.mina.client.box.aeroflex; + +import com.example.mina.client.base.AbstractClient; +import com.example.mina.client.coder.ByteFactory; +import com.example.mina.client.entity.AbstractClientMessage; +import com.example.mina.server.entity.AeroflexDataBuffer; + +/** + * @author dy + * @date 2021/3/10 + */ +public class AeroflexClient extends AbstractClient { + + @Override + protected void init(AbstractClientMessage abstractClientMessage) { + protocolCodecFactory = new ByteFactory(); + abstractVirtualBoxClientHandler = new AeroflexClientHandler(abstractClientMessage, hardwareDataBuffer); + } + + @Override + protected void initHardwareDataBuffer() { + hardwareDataBuffer = new AeroflexDataBuffer(10, 10); + } + + @Override + protected void initClientMessage() { + + } + + /*@Override + public boolean setAttenuation(int row, int col, int attenuation) { + return false; + } + + @Override + public int getAttenuation(int row, int col) { + return 0; + }*/ + + @Override + public Boolean reset() { + return null; + } + + @Override + public int[][] getAll() { + return new int[0][]; + } + +} diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClientHandler.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClientHandler.java new file mode 100644 index 0000000..4a81748 --- /dev/null +++ b/src/main/java/com/example/mina/client/box/aeroflex/AeroflexClientHandler.java @@ -0,0 +1,22 @@ +package com.example.mina.client.box.aeroflex; + +import com.example.mina.client.base.AbstractVirtualBoxClientHandler; +import com.example.mina.client.entity.AbstractClientMessage; +import com.example.mina.server.base.AbstractHardwareDataBuffer; + +/** + * @author dy + * @date 2021/3/10 + */ +public class AeroflexClientHandler extends AbstractVirtualBoxClientHandler { + + public AeroflexClientHandler(AbstractClientMessage clientMessage, + AbstractHardwareDataBuffer abstractHardwareDataBuffer) { + super(clientMessage, abstractHardwareDataBuffer); + } + + @Override + protected boolean handleCommandResponse(byte[] cmd, byte[] response, int responseLen) { + return false; + } +} diff --git a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteDecoder.java b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteDecoder.java new file mode 100644 index 0000000..557a572 --- /dev/null +++ b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteDecoder.java @@ -0,0 +1,29 @@ +package com.example.mina.client.box.lte3000; + +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.ProtocolDecoderAdapter; +import org.apache.mina.filter.codec.ProtocolDecoderOutput; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author dy + * @date 2021/3/3 + */ +public class Lte3000ByteDecoder extends ProtocolDecoderAdapter { + //打印日志信息 + private final static Logger log = LoggerFactory + .getLogger(ProtocolDecoder.class); + + @Override + public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { + int limit = in.limit(); + byte[] bytes = new byte[limit]; + + in.get(bytes); + + out.write(bytes); + } +} diff --git a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteEnCoder.java b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteEnCoder.java new file mode 100644 index 0000000..2be5a0f --- /dev/null +++ b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteEnCoder.java @@ -0,0 +1,39 @@ +package com.example.mina.client.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.ProtocolEncoderAdapter; +import org.apache.mina.filter.codec.ProtocolEncoderOutput; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author dy + * @date 2021/3/3 + */ +public class Lte3000ByteEnCoder extends ProtocolEncoderAdapter { + //用于打印日志信息 + private final static Logger log = LoggerFactory + .getLogger(ProtocolEncoder.class); + + //编码 将数据包转成字节数组 + @Override + public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { + byte[] bytes = (byte[]) message; + + IoBuffer buffer = IoBuffer.allocate(bytes.length); + buffer.setAutoExpand(true); + + // 将数据放入缓冲IoBuffer + buffer.put(bytes); + // 写状态切换到读状态 + buffer.flip(); + + out.write(buffer); +// out.flush(); +// +// buffer.free(); + } + +} diff --git a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteFactory.java b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteFactory.java new file mode 100644 index 0000000..f9ba037 --- /dev/null +++ b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ByteFactory.java @@ -0,0 +1,34 @@ +package com.example.mina.client.box.lte3000; + +import org.apache.mina.core.session.IoSession; +import org.apache.mina.filter.codec.ProtocolCodecFactory; +import org.apache.mina.filter.codec.ProtocolDecoder; +import org.apache.mina.filter.codec.ProtocolEncoder; + +/** + * @author dy + * @date 2021/3/3 + */ +public class Lte3000ByteFactory implements ProtocolCodecFactory { + private final Lte3000ByteDecoder decoder; + private final Lte3000ByteEnCoder encoder; + + //构造 + public Lte3000ByteFactory() { + encoder = new Lte3000ByteEnCoder(); + decoder = new Lte3000ByteDecoder(); + } + + @Override + public ProtocolDecoder getDecoder(IoSession arg0) throws Exception { + // TODO Auto-generated method stub + return decoder; + } + + @Override + public ProtocolEncoder getEncoder(IoSession arg0) throws Exception { + // TODO Auto-generated method stub + return encoder; + } + +} diff --git a/src/main/java/com/example/mina/client/box/lte3000/Lte3000Client.java b/src/main/java/com/example/mina/client/box/lte3000/Lte3000Client.java new file mode 100644 index 0000000..d827143 --- /dev/null +++ b/src/main/java/com/example/mina/client/box/lte3000/Lte3000Client.java @@ -0,0 +1,72 @@ +package com.example.mina.client.box.lte3000; + +import com.example.mina.client.base.AbstractClient; +import com.example.mina.client.coder.ByteFactory; +import com.example.mina.client.entity.AbstractClientMessage; +import com.example.mina.client.entity.Command; +import com.example.mina.client.entity.Lte3000Message; +import com.example.mina.server.entity.Lte3000DataBuffer; +import com.example.mina.server.util.Lte3000CommandHelper; + +/** + * @author dy + * @date 2021/3/10 + */ +public class Lte3000Client extends AbstractClient { + + @Override + protected void init(AbstractClientMessage abstractClientMessage) { + protocolCodecFactory = new Lte3000ByteFactory(); + abstractVirtualBoxClientHandler = new Lte3000ClientHandler(abstractClientMessage, hardwareDataBuffer); + } + + @Override + protected void initHardwareDataBuffer() { + hardwareDataBuffer = new Lte3000DataBuffer(32, 32, 30); + } + + @Override + protected void initClientMessage() { + abstractClientMessage = new Lte3000Message(); + abstractClientMessage.setHost("localhost"); + abstractClientMessage.setPort(9102); + for (int i = 0; i < this.hardwareDataBuffer.getMaxRow(); i++) { + abstractClientMessage.getCommands().add(new Command("", Lte3000CommandHelper.genCommandGetCross(i + 1))); + } + + // query attenuation + // the LTE attenuation is bound to column + for (int j = 0; j < this.hardwareDataBuffer.getMaxCol(); j++) { + abstractClientMessage.getCommands().add(new Command("", Lte3000CommandHelper.genCommandGetAttn(j + 1))); + } + + } + + + public void setAttenuation(int row, int col, int atten) { + //ioSession.write("abcdfd".getBytes()); + byte[] cmd; + if (row == 0) { + cmd = Lte3000CommandHelper.genCommandSetAttn(col, atten); + }else{ + cmd = Lte3000CommandHelper.genCommandSetCross(row, col); + } + ioSession.write(cmd); + } + + + public int getAttenuation(int col) { + return hardwareDataBuffer.getOffset(col); + } + + @Override + public Boolean reset() { + return null; + } + + @Override + public int[][] getAll() { + return new int[0][]; + } + +} diff --git a/src/main/java/com/example/mina/client/box/lte3000/Lte3000ClientHandler.java b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ClientHandler.java new file mode 100644 index 0000000..8516bea --- /dev/null +++ b/src/main/java/com/example/mina/client/box/lte3000/Lte3000ClientHandler.java @@ -0,0 +1,112 @@ +package com.example.mina.client.box.lte3000; + +import com.example.mina.client.base.AbstractVirtualBoxClientHandler; +import com.example.mina.client.entity.AbstractClientMessage; +import com.example.mina.server.base.AbstractHardwareDataBuffer; +import com.example.mina.server.util.Lte3000CommandHelper; +import lombok.extern.slf4j.Slf4j; +import org.apache.mina.core.session.IoSession; + +/** + * @author dy + * @date 2021/3/10 + */ +@Slf4j +public class Lte3000ClientHandler extends AbstractVirtualBoxClientHandler { + + public Lte3000ClientHandler(AbstractClientMessage clientMessage, + AbstractHardwareDataBuffer abstractHardwareDataBuffer) { + super(clientMessage, abstractHardwareDataBuffer); + } + + @Override + public void sessionOpened(IoSession session) { + super.sessionOpened(session); + } + + protected boolean isSameValue(byte value, int expect) { + return ((0xFF & value) == expect); + } + + @Override + protected boolean handleCommandResponse(byte[] cmd, byte[] response, int responseLen) { + if (response[0] != Lte3000CommandHelper.ACK || responseLen < 6) { + return false; + } + //api document: "SRM - MRF - MRM - XRM - QRM - LTE Protocol v2.15 Rev FR.pdf" + + //O:Query Output Channel P.106 + //0x4F + if (responseLen == 9 && isSameValue(response[3], 0x4F)) { // 'O' +// 0x6 0x46 0x46 0x4F 0x30 0x32 0x38 0x3 0x70 + int col = Lte3000CommandHelper.getBcdPort(cmd[4], cmd[5], cmd[6]); + int row = Lte3000CommandHelper.getBcdPort(response[4], response[5], response[6]); + // limits only one set "ON" in a column, others should be OFF + for (int i = 1; i <= hardwareDataBuffer.getMaxRow(); i++) { + if (i == row) { + hardwareDataBuffer.setAttenuation(i, col, 1); + } else { + hardwareDataBuffer.setAttenuation(i, col, 0); + } + } + log.info("RESPONSE Ox4F. ROW = {}, COL = {}", row, col); + return true; + } + + //S: Set CrossPoint P.115 + //0x53 + if (responseLen == 6 && isSameValue(response[3], 0x53)) { + int col = Lte3000CommandHelper.getBcdPort(cmd[4], cmd[5], cmd[6]); + int row = Lte3000CommandHelper.getBcdPort(cmd[7], cmd[8], cmd[9]); + // limits only one set "ON" in a column, others should be OFF + for (int i = 1; i <= hardwareDataBuffer.getMaxRow(); i++) { + if (i == row) { + hardwareDataBuffer.setAttenuation(i, col, 1); + } else { + hardwareDataBuffer.setAttenuation(i, col, 0); + } + } + log.info("RESPONSE Ox53. ROW = {}, COL = {}", row, col); + return true; + } + + //XGMO: Set Gain Control to Manual Mode - Output p.137 + //0x58 0x47 0x4D 0x4F + if (responseLen == 9 && response[3] == 'X' && response[4] == 'G' && response[5] == 'M' && response[6] == 'O') { +// receive - 0x2 0x30 0x30 0x58 0x47 0x4D 0x4F 0x30 0x30 0x31 0x40 0x2D 0x36 0x33 0x2E 0x30 0x3 0x5B +// 00XGMO001@-63.0[ +// set col/attn 1/63 + + int col = Lte3000CommandHelper.getBcdPort(cmd[7], cmd[8], cmd[9]); + int attn = Lte3000CommandHelper.getBcdAttn(cmd[11], cmd[12], cmd[13], cmd[14], cmd[15]); + hardwareDataBuffer.setOffset(col, attn); + log.info("RESPONSE XGMO. ATTN = {}, COL = {}", attn, col); + return true; + } + + + //XGRO: Gain Control Read Status - Output P.139 + if (responseLen == 16 && response[3] == 'X' && response[4] == 'G' && response[5] == 'R' && response[6] == 'O') { + /* + Example Command: + 02 XX XX 58 46 52 4F 30 31 36 03 XX + STX ADR ADR X G R O O 1 6 ETX CHK + (Read attenuation control status of system output 16) + */ + /* + Example Response: + 06 XX XX 58 46 52 4F 4D 40 2D 31 33 2E 35 03 XX + ACK ADR ADR X G R O M @ - 1 3 . 5 ETX CHX + (Output set at -13.5 dB of attenuation in manual mode. ) + */ + int col = Lte3000CommandHelper.getBcdPort(cmd[7], cmd[8], cmd[9]); + int attn = Lte3000CommandHelper.getBcdAttn(response[9], response[10], response[11], response[12], response[13]); + hardwareDataBuffer.setOffset(col, attn); + log.info("RESPONSE XGRO. ATTN = {}, COL = {}", attn, col); + return true; + } + + log.info("收到服务器回传的消息了"); + return false; + } +} diff --git a/src/main/java/com/example/mina/client/lte3000/Lte3000Client.java b/src/main/java/com/example/mina/client/lte3000/Lte3000Client.java deleted file mode 100644 index 2d0d45c..0000000 --- a/src/main/java/com/example/mina/client/lte3000/Lte3000Client.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.example.mina.client.lte3000; - -import com.example.mina.client.base.AbstractClient; -import com.example.mina.client.coder.ByteFactory; -import com.example.mina.client.entity.AbstractClientMessage; -import com.example.mina.client.entity.Command; -import com.example.mina.client.entity.Lte3000Message; -import com.example.mina.server.entity.Lte3000DataBuffer; -import com.example.mina.server.util.Lte3000CommandHelper; - -/** - * @author dy - * @date 2021/3/10 - */ -public class Lte3000Client extends AbstractClient { - - @Override - protected void init(AbstractClientMessage abstractClientMessage) { - protocolCodecFactory = new ByteFactory(); - abstractVirtualBoxClientHandler = new Lte3000ClientHandler(abstractClientMessage, hardwareDataBuffer); - } - - @Override - protected void initHardwareDataBuffer() { - hardwareDataBuffer = new Lte3000DataBuffer(32, 32, 30); - } - - @Override - protected void initClientMessage() { - abstractClientMessage = new Lte3000Message(); - abstractClientMessage.setHost("localhost"); - abstractClientMessage.setPort(9102); - for (int i = 0; i < this.hardwareDataBuffer.getMaxRow(); i++) { - abstractClientMessage.getCommands().add(new Command("", Lte3000CommandHelper.genCommandGetCross(i + 1))); - } - - // query attenuation - // the LTE attenuation is bound to column - for (int j = 0; j < this.hardwareDataBuffer.getMaxCol(); j++) { - abstractClientMessage.getCommands().add(new Command("", Lte3000CommandHelper.genCommandGetAttn(j + 1))); - } - - } - - @Override - public boolean setAttenuation(int row, int col, int attenuation) { - ioSession.write("abcdfd".getBytes()); - return false; - } - - @Override - public int getAttenuation(int row, int col) { - return 0; - } - - @Override - public Boolean reset() { - return null; - } - - @Override - public int[][] getAll() { - return new int[0][]; - } - -} diff --git a/src/main/java/com/example/mina/client/lte3000/Lte3000ClientHandler.java b/src/main/java/com/example/mina/client/lte3000/Lte3000ClientHandler.java deleted file mode 100644 index 0d79847..0000000 --- a/src/main/java/com/example/mina/client/lte3000/Lte3000ClientHandler.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.example.mina.client.lte3000; - -import com.example.mina.client.base.AbstractVirtualBoxClientHandler; -import com.example.mina.client.entity.AbstractClientMessage; -import com.example.mina.server.base.AbstractHardwareDataBuffer; -import com.example.mina.server.util.Lte3000CommandHelper; -import lombok.extern.slf4j.Slf4j; -import org.apache.mina.core.session.IoSession; - -/** - * @author dy - * @date 2021/3/10 - */ -@Slf4j -public class Lte3000ClientHandler extends AbstractVirtualBoxClientHandler { - - public Lte3000ClientHandler(AbstractClientMessage clientMessage, - AbstractHardwareDataBuffer abstractHardwareDataBuffer) { - super(clientMessage, abstractHardwareDataBuffer); - } - - @Override - public void sessionOpened(IoSession session) { - super.sessionOpened(session); - } - - protected boolean isSameValue(byte value, int expect) { - return ((0xFF & value) == expect); - } - - @Override - protected boolean handleCommandResponse(byte[] cmd, byte[] response, int responseLen) { - if (response[0] != Lte3000CommandHelper.ACK || responseLen < 6) { - return false; - } - //api document: "SRM - MRF - MRM - XRM - QRM - LTE Protocol v2.15 Rev FR.pdf" - - //O:Query Output Channel P.106 - //0x4F - if (responseLen == 9 && isSameValue(response[3], 0x4F)) { // 'O' -// 0x6 0x46 0x46 0x4F 0x30 0x32 0x38 0x3 0x70 - int col = Lte3000CommandHelper.getBcdPort(cmd[4], cmd[5], cmd[6]); - int row = Lte3000CommandHelper.getBcdPort(response[4], response[5], response[6]); - // limits only one set "ON" in a column, others should be OFF - for (int i = 1; i <= hardwareDataBuffer.getMaxRow(); i++) { - if (i == row) { - hardwareDataBuffer.setAttenuation(i, col, 1); - } else { - hardwareDataBuffer.setAttenuation(i, col, 0); - } - } - log.info("RESPONSE Ox4F. ROW = {}, COL = {}", row, col); - return true; - } - - //S: Set CrossPoint P.115 - //0x53 - if (responseLen == 6 && isSameValue(response[3], 0x53)) { - int col = Lte3000CommandHelper.getBcdPort(cmd[4], cmd[5], cmd[6]); - int row = Lte3000CommandHelper.getBcdPort(cmd[7], cmd[8], cmd[9]); - // limits only one set "ON" in a column, others should be OFF - for (int i = 1; i <= hardwareDataBuffer.getMaxRow(); i++) { - if (i == row) { - hardwareDataBuffer.setAttenuation(i, col, 1); - } else { - hardwareDataBuffer.setAttenuation(i, col, 0); - } - } - log.info("RESPONSE Ox53. ROW = {}, COL = {}", row, col); - return true; - } - - //XGMO: Set Gain Control to Manual Mode - Output p.137 - //0x58 0x47 0x4D 0x4F - if (responseLen == 9 && response[3] == 'X' && response[4] == 'G' && response[5] == 'M' && response[6] == 'O') { -// receive - 0x2 0x30 0x30 0x58 0x47 0x4D 0x4F 0x30 0x30 0x31 0x40 0x2D 0x36 0x33 0x2E 0x30 0x3 0x5B -// 00XGMO001@-63.0[ -// set col/attn 1/63 - - int col = Lte3000CommandHelper.getBcdPort(cmd[7], cmd[8], cmd[9]); - int attn = Lte3000CommandHelper.getBcdAttn(cmd[11], cmd[12], cmd[13], cmd[14], cmd[15]); - hardwareDataBuffer.setOffset(col, attn); - log.info("RESPONSE XGMO. ATTN = {}, COL = {}", attn, col); - return true; - } - - - //XGRO: Gain Control Read Status - Output P.139 - if (responseLen == 16 && response[3] == 'X' && response[4] == 'G' && response[5] == 'R' && response[6] == 'O') { - /* - Example Command: - 02 XX XX 58 46 52 4F 30 31 36 03 XX - STX ADR ADR X G R O O 1 6 ETX CHK - (Read attenuation control status of system output 16) - */ - /* - Example Response: - 06 XX XX 58 46 52 4F 4D 40 2D 31 33 2E 35 03 XX - ACK ADR ADR X G R O M @ - 1 3 . 5 ETX CHX - (Output set at -13.5 dB of attenuation in manual mode. ) - */ - int col = Lte3000CommandHelper.getBcdPort(cmd[7], cmd[8], cmd[9]); - int attn = Lte3000CommandHelper.getBcdAttn(response[9], response[10], response[11], response[12], response[13]); - hardwareDataBuffer.setOffset(col, attn); - log.info("RESPONSE XGRO. ATTN = {}, COL = {}", attn, col); - return true; - } - - log.info("收到服务器回传的消息了"); - return false; - } -} diff --git a/src/main/java/com/example/mina/client/test/MinaClient.java b/src/main/java/com/example/mina/client/test/MinaClient.java index f3256e6..815e10a 100644 --- a/src/main/java/com/example/mina/client/test/MinaClient.java +++ b/src/main/java/com/example/mina/client/test/MinaClient.java @@ -1,9 +1,6 @@ package com.example.mina.client.test; -import com.example.mina.client.aeroflex.AeroflexClient; -import com.example.mina.client.aeroflex.AeroflexClientHandler; -import com.example.mina.client.coder.ByteFactory; -import com.example.mina.client.lte3000.Lte3000Client; +import com.example.mina.client.box.lte3000.Lte3000Client; public class MinaClient { diff --git a/src/main/java/com/example/mina/client/util/StrUtil.java b/src/main/java/com/example/mina/client/util/StrUtil.java deleted file mode 100644 index 5603f9c..0000000 --- a/src/main/java/com/example/mina/client/util/StrUtil.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.example.mina.client.util; - -public class StrUtil { -} diff --git a/src/main/java/com/example/mina/server/box/lte3000/Lte3000VirtualBoxHandler.java b/src/main/java/com/example/mina/server/box/lte3000/Lte3000VirtualBoxHandler.java index 26ad22b..82ca348 100644 --- a/src/main/java/com/example/mina/server/box/lte3000/Lte3000VirtualBoxHandler.java +++ b/src/main/java/com/example/mina/server/box/lte3000/Lte3000VirtualBoxHandler.java @@ -66,6 +66,7 @@ public class Lte3000VirtualBoxHandler extends AbstractVirtualBoxHandler