Qrb3000VirtualBoxHandler.java
3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package com.example.mina.server.box.qrb3000;
import com.example.mina.server.base.AbstractVirtualBoxHandler;
import com.example.mina.server.entity.Qrb3000DataBuffer;
import com.example.mina.server.util.CommandHelper;
import com.example.mina.server.util.LogUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.mina.core.session.IoSession;
/**
* @author dy
* @date 21/03/05
*/
@Slf4j
public class Qrb3000VirtualBoxHandler
extends AbstractVirtualBoxHandler<Qrb3000RequestMessage, Qrb3000ResponseMessage> {
private Qrb3000DataBuffer dataBuffer;
@Override
protected void initMatrix() {
int row = 100;
int col = 100;
int maxAttenuate = 63;
dataBuffer = new Qrb3000DataBuffer(row, col, maxAttenuate);
}
@Override
protected Qrb3000ResponseMessage handleMessage(Qrb3000RequestMessage message) {
String cmd = new String(message.getInput()).trim();
log.info("qrb3000VirtualBoxHandler receive: {}", cmd);
byte[] buffer = message.getAnalyticalMessage();
int len = message.getInput().length;
//F: Firmware Version / Unit ID Page 82
//02 XX XX 46 03 XX
//response
//06 XX XX 46 76 37 2E 30 30 20 50 76 32 2E 31 35 20…
//ACK ADR ADR F v 7 . 0 0 P v 2 . 1 5 …
//…58 52 4D 32 32 35 30 2F 30 33 32 58 30 33 32 3 XX
//… X R M 2 2 5 0 / 0 3 2 X 0 3 2 ETX CHK
if (len == message.LENGTH6) {
return Qrb3000ResponseMessage.builder().result(buffer).build();
}
if (len == message.LENGTH8) {
switch (message.getInput()[0]) {
case 0x30:
LogUtils.println(String.format("setAttenuation: %d, %d, %d",
CommandHelper.BCD_REV[message.getInput()[3]],
CommandHelper.BCD_REV[message.getInput()[4]],
message.getInput()[5]));
dataBuffer.setAttenuation(CommandHelper.BCD_REV[message.getInput()[3]],
CommandHelper.BCD_REV[message.getInput()[4]],
message.getInput()[5]);
buffer[5] = (byte) dataBuffer.getAttenuation(CommandHelper.BCD_REV[message.getInput()[3]],
CommandHelper.BCD_REV[message.getInput()[4]]);
return Qrb3000ResponseMessage.builder().result(buffer).build();
case 0x68:
// dataBuffer.setOffset(Qrb3000CommandHelper.BCD_REV[message.getInput()[3]], random.nextInt(120) - 60 );
buffer[6] = (byte) dataBuffer.getOffset(CommandHelper.BCD_REV[message.getInput()[3]]);
return Qrb3000ResponseMessage.builder().result(buffer).build();
case 0x62:
return Qrb3000ResponseMessage.builder().result(buffer).build();
default:
break;
}
} else {
buffer[6] = (byte) dataBuffer.getOffset(CommandHelper.BCD_REV[message.getInput()[3]]);
return Qrb3000ResponseMessage.builder().result(buffer).build();
}
buffer = new byte[len + 2];
buffer[0] = (byte) 0xFE;
buffer[1] = (byte) 0xFE;
System.arraycopy(message.getInput(), 0, buffer, 2, len);
return Qrb3000ResponseMessage.builder().result(buffer).build();
}
@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);
}
}