diff --git a/src/main/java/com/example/mina/box/lte3000/Lte3000CodecFactory.java b/src/main/java/com/example/mina/box/lte3000/Lte3000CodecFactory.java new file mode 100644 index 0000000..b610973 --- /dev/null +++ b/src/main/java/com/example/mina/box/lte3000/Lte3000CodecFactory.java @@ -0,0 +1,70 @@ +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.*; + +/** + * @author 杜云山 + * @date 20/07/07 + */ +public class Lte3000CodecFactory implements ProtocolCodecFactory { + + @Override + public ProtocolEncoder getEncoder(IoSession session) { + return new Lte3000MessageEncoder(); + } + + @Override + public ProtocolDecoder getDecoder(IoSession session) { + 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 { + + @Override + public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { + + byte[] bytes = new byte[in.limit()]; + in.get(bytes); + + Lte3000RequestMessage requestMessage = Lte3000RequestMessage.builder() + .cmd(new String(bytes)) + .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/Lte3000RequestMessage.java b/src/main/java/com/example/mina/box/lte3000/Lte3000RequestMessage.java new file mode 100644 index 0000000..00f3496 --- /dev/null +++ b/src/main/java/com/example/mina/box/lte3000/Lte3000RequestMessage.java @@ -0,0 +1,19 @@ +package com.example.mina.box.lte3000; + +import com.example.mina.base.BaseRequestMessage; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +/** + * @author 杜云山 + * @date 21/03/08 + */ +@EqualsAndHashCode(callSuper = true) +@SuperBuilder +@Data +@AllArgsConstructor +public class Lte3000RequestMessage extends BaseRequestMessage { + +} diff --git a/src/main/java/com/example/mina/box/lte3000/Lte3000ResponseMessage.java b/src/main/java/com/example/mina/box/lte3000/Lte3000ResponseMessage.java new file mode 100644 index 0000000..bd79ee8 --- /dev/null +++ b/src/main/java/com/example/mina/box/lte3000/Lte3000ResponseMessage.java @@ -0,0 +1,19 @@ +package com.example.mina.box.lte3000; + +import com.example.mina.base.BaseResponseMessage; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.SuperBuilder; + +/** + * @author 杜云山 + * @date 21/03/08 + */ +@EqualsAndHashCode(callSuper = true) +@SuperBuilder +@Data +@AllArgsConstructor +public class Lte3000ResponseMessage extends BaseResponseMessage { + +} diff --git a/src/main/java/com/example/mina/box/lte3000/Lte3000VirtualBoxHandler.java b/src/main/java/com/example/mina/box/lte3000/Lte3000VirtualBoxHandler.java new file mode 100644 index 0000000..fdade46 --- /dev/null +++ b/src/main/java/com/example/mina/box/lte3000/Lte3000VirtualBoxHandler.java @@ -0,0 +1,104 @@ +package com.example.mina.box.lte3000; + +import com.example.mina.base.AbstractVirtualBoxHandler; + +import com.example.mina.base.BaseRequestMessage; +import com.example.mina.base.BaseResponseMessage; +import com.example.mina.box.aeroflex.AeroflexRequestMessage; +import com.example.mina.box.aeroflex.AeroflexResponseMessage; +import com.example.mina.util.CommandHelper; +import com.example.mina.util.LogUtils; +import com.example.mina.entity.Lte3000DataBuffer; +import com.example.mina.helper.Lte3000CommandHelper; +import lombok.extern.slf4j.Slf4j; +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; + +/** + * @author 杜云山 + * @date 21/03/05 + */ +@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; + + public Lte3000VirtualBoxHandler() { + this.initMatrix(); + } + + @Override + protected void initMatrix() { + + int row = 32; + int col = 32; + int maxAttenuate = 30; + + dataBuffer = new Lte3000DataBuffer(row, col,maxAttenuate); + } + + 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 + protected Lte3000ResponseMessage handleMessage(Lte3000RequestMessage requestMessage) { + return null; + } + + @Override + public void messageReceived(IoSession session, Object message) { + + if (message instanceof Lte3000RequestMessage) { + + Lte3000ResponseMessage responseMessage = handleMessage((Lte3000RequestMessage) message); + session.write(responseMessage); + } + } + + + + @Override + public void sessionCreated(IoSession session) { + + log.info("--- abstractVirtual server session created"); + } + + @Override + public void sessionOpened(IoSession session) { + + log.info("--- abstractVirtual server session Opened"); + } + + @Override + public void sessionClosed(IoSession session) { + + log.info("--- abstractVirtual server session Closed"); + } + + @Override + public void messageSent(IoSession session, Object message) { + + log.info("--- abstractVirtual 发送数据成功!{}", message); + } + +} diff --git a/src/main/java/com/example/mina/box/lte3000/Lte3000VirtualBoxServer.java b/src/main/java/com/example/mina/box/lte3000/Lte3000VirtualBoxServer.java new file mode 100644 index 0000000..36beb29 --- /dev/null +++ b/src/main/java/com/example/mina/box/lte3000/Lte3000VirtualBoxServer.java @@ -0,0 +1,18 @@ +package com.example.mina.box.lte3000; + +import com.example.mina.base.AbstractVirtualBoxServer; +import com.example.mina.box.lte3000.Lte3000VirtualBoxHandler; +import com.example.mina.property.Lte3000VirtualBoxProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; + + +@Slf4j +@Configuration(proxyBeanMethods = false) +public class Lte3000VirtualBoxServer extends AbstractVirtualBoxServer { + + public Lte3000VirtualBoxServer(Lte3000VirtualBoxProperties lte3000VirtualBoxProperties) { + super(lte3000VirtualBoxProperties, new Lte3000VirtualBoxHandler(),new Lte3000CodecFactory()); + } + +} diff --git a/src/main/java/com/example/mina/box/rbm3000/Rbm3000CodecFactory.java b/src/main/java/com/example/mina/box/rbm3000/Rbm3000CodecFactory.java index 2798db0..2c385ab 100644 --- a/src/main/java/com/example/mina/box/rbm3000/Rbm3000CodecFactory.java +++ b/src/main/java/com/example/mina/box/rbm3000/Rbm3000CodecFactory.java @@ -1,13 +1,16 @@ +/* package com.example.mina.box.rbm3000; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.*; +*/ /** * @author 杜云山 * @date 20/07/07 - */ + *//* + public class Rbm3000CodecFactory implements ProtocolCodecFactory { @Override @@ -60,3 +63,4 @@ public class Rbm3000CodecFactory implements ProtocolCodecFactory { } } +*/ diff --git a/src/main/java/com/example/mina/boxhandler/Lte3000VirtualBoxHandler.java b/src/main/java/com/example/mina/boxhandler/Lte3000VirtualBoxHandler.java deleted file mode 100644 index 0345470..0000000 --- a/src/main/java/com/example/mina/boxhandler/Lte3000VirtualBoxHandler.java +++ /dev/null @@ -1,209 +0,0 @@ -package com.example.mina.boxhandler; - -import com.example.mina.base.AbstractVirtualBoxHandler; -import com.example.mina.base.CommandHelper; -import com.example.mina.util.LogUtils; -import com.example.mina.entity.Lte3000DataBuffer; -import com.example.mina.helper.Lte3000CommandHelper; -import lombok.extern.slf4j.Slf4j; -import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.session.IoSession; - -/** - * @author 杜云山 - * @date 21/03/05 - */ -@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; - - public Lte3000VirtualBoxHandler() { - this.initMatrix(); - } - - @Override - protected void initMatrix() { - - int row = 32; - int col = 32; - int maxAttenuate = 30; - - dataBuffer = new Lte3000DataBuffer(row, col,maxAttenuate); - } - - 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 messageReceived(IoSession session, Object message) { - - IoBuffer ioBuffer = (IoBuffer) message; - byte[] bytes = ioBuffer.array(); - - byte[] result = handleMessage(bytes, bytes.length); - - session.write(IoBuffer.wrap(result)); - } - - @Override - protected byte[] handleMessage(byte[] cmd, int len) { - - - - byte[] buffer; - LogUtils.printLTEcmd(cmd, len); - - - //F: Firmware Version / Unit ID P.82 - //0x46 - if (cmd[3] == 'F') { - buffer = Response_46; - LogUtils.println("--Response F(Firmware)--", buffer); - return buffer; - } - - //O:Query Output Channel P.106 - //0x4F - if (cmd[3] == 'O') { - int col = this.getBcdPort(cmd[4], cmd[5], cmd[6]); - - int row = 0; - for (int i = 1; i <= dataBuffer.getMaxRow(); i++) { - if (dataBuffer.getAttenuation(i, col) > 0) { - row = i; - break; - } - } - - buffer = new byte[]{0x06, cmd[1], cmd[2], 0x4F, CommandHelper.BCD[(byte)((row / 100) + 30)], - CommandHelper.BCD[(byte)(((row % 100) / 10) + 30)], CommandHelper.BCD[(byte)((row % 10) + 30)] - , 0x03, 0}; - - Lte3000CommandHelper.setCHK(buffer); - - - LogUtils.println("--Response O(Output)--", buffer); - return buffer; - } - - //S: Set Crosspoint P.115 - //0x53 - if (cmd[3] == 'S') { - buffer = Response_53; - - int row = this.getBcdPort(cmd[7], cmd[8], cmd[9]); - int col = this.getBcdPort(cmd[4], cmd[5], cmd[6]); - - LogUtils.println(" connect row/col ", row + "/" + col); - - for (int i = 1; i <= dataBuffer.getMaxRow(); i++) { - if (i == row) { - dataBuffer.setAttenuation(i, col, 1); - }else{ - dataBuffer.setAttenuation(i, col, 0); - } - - } - - LogUtils.println("--Response S--", buffer); - return buffer; - } - - - //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' ) { -// 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 = this.getBcdPort(cmd[7], cmd[8], cmd[9]); - int attn = this.getBcdAttn(cmd[12], cmd[13]); - if (cmd[11] == 0x2D) { -// attn *= -1; - } - LogUtils.println(" set col/attn ", col + "/" + attn); - - dataBuffer.setOffset(col, attn); - buffer = Response_58; - - LogUtils.println("--Response XGMO(set)--", buffer); - return buffer; - } - - - //XGRO: Gain Control Read Status - Output P.139 - if (cmd[3] == 'X' && cmd[4] == 'G' && cmd[5] == 'R' && cmd[6] == 'O' ) { -// 06 XX XX 58 46 20 4F 4D/41 40 2B/2D XX XX 2E -// ACK ADR ADR X G R O M/A @ +/- 10s 1s . -// XX 03 XX -// tenths ETX CHK - - int col = this.getBcdPort(cmd[7], cmd[8], cmd[9]); - int attn = dataBuffer.getOffset(col); - - buffer = new byte[]{0x06, 0x30, 0x30, 0x58, 0x47, 0x52, 0x4F, 0x4D, 0x40, 0x2B, - CommandHelper.BCD[(byte)((attn / 10) + 30)], CommandHelper.BCD[(byte)((attn % 10) + 30)] - , 0x2E, 0x30, 0x03, 0}; - - Lte3000CommandHelper.setCHK(buffer); - - LogUtils.println("--Response XGRO(get)--", buffer); - return buffer; - } - - - buffer = new byte[len + 2]; - buffer[0] = (byte)0xFE; - buffer[1] = (byte)0xFE; - System.arraycopy(cmd, 0, buffer, 2, len); - - return buffer; - } - - @Override - public void sessionCreated(IoSession session) { - - log.info("--- abstractVirtual server session created"); - } - - @Override - public void sessionOpened(IoSession session) { - - log.info("--- abstractVirtual server session Opened"); - } - - @Override - public void sessionClosed(IoSession session) { - - log.info("--- abstractVirtual server session Closed"); - } - - @Override - public void messageSent(IoSession session, Object message) { - - log.info("--- abstractVirtual 发送数据成功!{}", message); - } - -} diff --git a/src/main/java/com/example/mina/boxserver/Lte3000VirtualBoxServer.java b/src/main/java/com/example/mina/boxserver/Lte3000VirtualBoxServer.java deleted file mode 100644 index f24a9f6..0000000 --- a/src/main/java/com/example/mina/boxserver/Lte3000VirtualBoxServer.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.mina.boxserver; - -import com.example.mina.boxhandler.AeroflexVirtualBoxHandler; -import com.example.mina.boxhandler.Lte3000VirtualBoxHandler; -import com.example.mina.property.AeroflexVirtualBoxProperties; -import com.example.mina.property.Lte3000VirtualBoxProperties; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Configuration; - - -@Slf4j -@Configuration(proxyBeanMethods = false) -public class Lte3000VirtualBoxServer extends AbstractVirtualBoxServer { - - public Lte3000VirtualBoxServer(Lte3000VirtualBoxProperties lte3000VirtualBoxProperties) { - super(lte3000VirtualBoxProperties, new Lte3000VirtualBoxHandler()); - } - -} -- libgit2 0.21.2