|
|
@@ -2,8 +2,7 @@ package com.zd.netty.sdk;
|
|
|
|
|
|
import com.gg.reader.api.dal.GClient;
|
|
|
import com.gg.reader.api.dal.GServer;
|
|
|
-import com.gg.reader.api.protocol.gx.MsgAppSetGpo;
|
|
|
-import com.gg.reader.api.protocol.gx.MsgBaseStop;
|
|
|
+import com.gg.reader.api.protocol.gx.*;
|
|
|
import com.zd.common.core.utils.SpringUtils;
|
|
|
import com.zd.netty.service.ISendService;
|
|
|
import com.zd.netty.service.IService;
|
|
|
@@ -14,7 +13,9 @@ import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.util.Hashtable;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
import java.util.TimerTask;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.ScheduledExecutorService;
|
|
|
@@ -33,7 +34,7 @@ public class DeJuRFIDListenerService implements IService {
|
|
|
|
|
|
AtomicBoolean isAlarm = new AtomicBoolean();
|
|
|
|
|
|
- static GClient client;
|
|
|
+ GClient client;
|
|
|
|
|
|
private final ScheduledExecutorService scheduledExecutorService = SpringUtils.getBean("scheduledExecutorService");
|
|
|
|
|
|
@@ -48,6 +49,9 @@ public class DeJuRFIDListenerService implements IService {
|
|
|
subscribeServerHandler(server);
|
|
|
if (client!=null){
|
|
|
clientMap.put(ipAddress,client);
|
|
|
+ setPower(hardware);
|
|
|
+ setInventory(hardware);
|
|
|
+ subscribeHandler(client);
|
|
|
}
|
|
|
log.info("开始监听");
|
|
|
} else {
|
|
|
@@ -69,20 +73,19 @@ public class DeJuRFIDListenerService implements IService {
|
|
|
client.setSendHeartBeat(true);//开启心跳检测Tcp连接状态
|
|
|
client.setPrint(true);
|
|
|
subscribeTcpHandler();//订阅Tcp断连上报
|
|
|
- subscribeHandler(client);
|
|
|
stop();//测试监听成功的连接是否通信正常
|
|
|
};
|
|
|
}
|
|
|
|
|
|
//订阅TCP断开连接上报
|
|
|
- private static void subscribeTcpHandler() {
|
|
|
+ private void subscribeTcpHandler() {
|
|
|
client.onDisconnected = s -> {
|
|
|
log.info("连接" + s + "已断开");
|
|
|
client.close();//释放当前连接资源
|
|
|
};
|
|
|
}
|
|
|
|
|
|
- private static void stop() {
|
|
|
+ private void stop() {
|
|
|
MsgBaseStop msg = new MsgBaseStop();
|
|
|
client.sendSynMsg(msg);
|
|
|
if (0x00 == msg.getRtCode()) {
|
|
|
@@ -145,4 +148,73 @@ public class DeJuRFIDListenerService implements IService {
|
|
|
}
|
|
|
}, delayTime, TimeUnit.SECONDS);
|
|
|
}
|
|
|
+
|
|
|
+ private void setPower(RemoteLabHardware hardware){
|
|
|
+ // 功率配置, 将4个天线功率都设置为30dBm.
|
|
|
+ Integer uniformPower = hardware.getUniformPower();
|
|
|
+ MsgBaseGetPower msgBaseGetPower = new MsgBaseGetPower();
|
|
|
+ client.sendSynMsg(msgBaseGetPower);
|
|
|
+ if (0 == msgBaseGetPower.getRtCode()) {
|
|
|
+ Hashtable<Integer, Integer> dicPower = msgBaseGetPower.getDicPower();
|
|
|
+ Integer integer = dicPower.get(0);
|
|
|
+ if (!Objects.equals(integer, uniformPower)) {
|
|
|
+ MsgBaseSetPower msgBaseSetPower = new MsgBaseSetPower();
|
|
|
+ Hashtable<Integer, Integer> hashtable = new Hashtable<>();
|
|
|
+
|
|
|
+ Integer channels = hardware.getChannels();
|
|
|
+ for (int i = 1; i <= channels; i++) {
|
|
|
+ hashtable.put(i, uniformPower);
|
|
|
+ }
|
|
|
+ msgBaseSetPower.setDicPower(hashtable);
|
|
|
+ client.sendSynMsg(msgBaseSetPower);
|
|
|
+ if (0 != msgBaseSetPower.getRtCode()) {
|
|
|
+ log.error("Power configuration error.");
|
|
|
+ reset(client);
|
|
|
+ disconnect(hardware);
|
|
|
+ start(hardware);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.error("Power configuration error.");
|
|
|
+ reset(client);
|
|
|
+ disconnect(hardware);
|
|
|
+ start(hardware);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setInventory(RemoteLabHardware hardware){
|
|
|
+ //天线读卡, 读取EPC数据区以及TID数据区
|
|
|
+ MsgBaseInventoryEpc msgBaseInventoryEpc = new MsgBaseInventoryEpc();
|
|
|
+ switch (hardware.getChannels()) {
|
|
|
+ case 4:
|
|
|
+ msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1 | EnumG.AntennaNo_2 | EnumG.AntennaNo_3 | EnumG.AntennaNo_4);
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1 | EnumG.AntennaNo_2 | EnumG.AntennaNo_3 | EnumG.AntennaNo_4 | EnumG.AntennaNo_5 | EnumG.AntennaNo_6 | EnumG.AntennaNo_7 | EnumG.AntennaNo_8);
|
|
|
+ break;
|
|
|
+ case 16:
|
|
|
+ msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1 | EnumG.AntennaNo_2 | EnumG.AntennaNo_3 | EnumG.AntennaNo_4 | EnumG.AntennaNo_5 | EnumG.AntennaNo_6 | EnumG.AntennaNo_7 | EnumG.AntennaNo_8 | EnumG.AntennaNo_9 | EnumG.AntennaNo_10 | EnumG.AntennaNo_11 | EnumG.AntennaNo_12 | EnumG.AntennaNo_13 | EnumG.AntennaNo_14 | EnumG.AntennaNo_15 | EnumG.AntennaNo_16);
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ default:
|
|
|
+ msgBaseInventoryEpc.setAntennaEnable(EnumG.AntennaNo_1);
|
|
|
+ }
|
|
|
+ msgBaseInventoryEpc.setInventoryMode(EnumG.InventoryMode_Inventory);
|
|
|
+
|
|
|
+ client.sendSynMsg(msgBaseInventoryEpc);
|
|
|
+ if (0 != msgBaseInventoryEpc.getRtCode()) {
|
|
|
+ log.error("Inventory epc error.");
|
|
|
+ reset(client);
|
|
|
+ disconnect(hardware);
|
|
|
+ start(hardware);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void reset(GClient client) {
|
|
|
+ MsgAppReset msgAppReset = new MsgAppReset();
|
|
|
+ client.sendSynMsg(msgAppReset);
|
|
|
+ if (0 != msgAppReset.getRtCode()) {
|
|
|
+ log.error("Reset epc error.");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|