瀏覽代碼

1.增加blue code功能
2.修改H键为进入护理,R键为退出护理及取消事件
3.其他优化

weizhengliang 9 月之前
父節點
當前提交
e155ba6651

+ 102 - 32
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/activity/MainActivity.kt

@@ -19,6 +19,7 @@ import com.google.gson.Gson
 import com.wdkl.app.ncs.conversion_box.BuildConfig
 import com.wdkl.app.ncs.conversion_box.R
 import com.wdkl.app.ncs.conversion_box.bean.CallingItem
+import com.wdkl.app.ncs.conversion_box.bean.EventBean
 import com.wdkl.app.ncs.conversion_box.bean.KeyFunc
 import com.wdkl.app.ncs.conversion_box.bean.SosItem
 import com.wdkl.app.ncs.conversion_box.databinding.MainActivityLayoutBinding
@@ -46,10 +47,7 @@ import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
 import com.wdkl.ncs.android.middleware.model.vo.DeviceNurseInfoVO
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
 import com.wdkl.ncs.android.middleware.tcp.TcpClient
-import com.wdkl.ncs.android.middleware.tcp.channel.DeviceUtil
-import com.wdkl.ncs.android.middleware.tcp.channel.EventUtil
-import com.wdkl.ncs.android.middleware.tcp.channel.OtherUtil
-import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
+import com.wdkl.ncs.android.middleware.tcp.channel.*
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpCallback
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
 import com.wdkl.ncs.android.middleware.tcp.enums.DeviceTypeEnum
@@ -155,6 +153,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
     private val keyFuncList = ArrayList<KeyFunc>()
     private val nursingMap = HashMap<String, Int>()
+    private val eventList = ArrayList<EventBean>()
 
     override fun getLayId(): Int {
         return R.layout.main_activity_layout
@@ -320,14 +319,14 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
             "start adbd"
         )
         try {
-            RunAsRoot(commands)
+            runAsRoot(commands)
         } catch (e: IOException) {
             e.printStackTrace()
         }
     }
 
 
-    private fun RunAsRoot(cmds: ArrayList<String>) {
+    private fun runAsRoot(cmds: ArrayList<String>) {
         val p = Runtime.getRuntime().exec("su")
         val os = DataOutputStream(p.outputStream)
         for (tmpCmd in cmds) {
@@ -947,10 +946,6 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                         //分机挂断
                         if (Constant.CALL_STATE == Constant.CALL_CALLING) {
                             if (addr.equals(curDeviceUart, true)) {
-                                /*EventBus.getDefault().post(MessageEvent("handoff", Constant.EVENT_END_CALL))
-                                Constant.CALL_STATE = Constant.CALL_STANDBY
-                                VoiceUtil.handoffAudioCall(curDeviceId, fromId, curInteractionVO!!.id)*/
-
                                 handoffCall()
                             } else {
                                 cancelOutCall(addr, false)
@@ -1047,7 +1042,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
                     "H" -> {
                         //护理按键
-                        val func = findKeyFunc("H")
+                        /*val func = findKeyFunc("H")
                         if (func != null) {
                             if (func.type == TcpAction.SideAction.NURSING.name) {
                                 val nurseMac = addr.toUpperCase(Locale.ROOT)
@@ -1067,7 +1062,12 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             }
                         } else {
                             Log.e(TAG, "error func: H护理按键")
-                        }
+                        }*/
+
+                        //进入护理
+                        val nurseMac = addr.toUpperCase(Locale.ROOT)
+                        nursingMap.put(nurseMac, -1)
+                        sendNursing(addr)
                     }
 
                     "Y" -> {
@@ -1083,6 +1083,28 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
                     "R" -> {
                         //清除所有事件
+                        //退出护理
+                        val mac = addr.toUpperCase(Locale.ROOT)
+                        Log.e(TAG,"nursing map size: " + nursingMap.size + ", " + mac)
+                        if (nursingMap.size > 0 && nursingMap.containsKey(mac)) {
+                            sendNursingEnd(addr)
+                            nursingMap.remove(mac)
+                        }
+
+                        Log.e(TAG,"event list size: " + eventList.size + ", " + mac)
+                        if (eventList.size > 0) {
+                            val iterator = eventList.iterator()
+                            while (iterator.hasNext()) {
+                                val it = iterator.next()
+                                Log.e(TAG, "mac: " + it.mac + ", interactionDO: " + it.interactionVO)
+                                if (addr.equals(it.mac, true) && it.interactionVO != null) {
+                                    val tcpModel = EventUtil.cancelEvent(it.interactionVO)
+                                    TcpClient.getInstance().sendMsg(tcpModel.toJson())
+
+                                    iterator.remove()
+                                }
+                            }
+                        }
                     }
 
                     "?" -> {
@@ -1226,7 +1248,20 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                 for (frameDevice in FrameHelper.frameDeviceList) {
                     if (frameDevice.device != null && uart.equals(frameDevice.device.ethMac, true)) {
                         val tcpModel = EventUtil.eventKeyClick(frameDevice.device.id, id)
-                        TcpClient.getInstance().sendTcp(tcpModel, false,  null)
+                        val transaction: TcpCallback = object : TcpCallback(tcpModel.tid, uart) {
+                            override fun onSuccess(jsonObject: JSONObject, tcpModel: TcpModel) {
+                                //事件发送成功,记录该事件数据
+                                val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
+                                val eventBean = EventBean(mac, interactionVO)
+                                eventList.add(eventBean)
+                            }
+
+                            override fun onFailed(jsonObject: JSONObject) {
+                                //
+                            }
+                        }
+
+                        TcpClient.getInstance().sendTcp(tcpModel, false,  transaction)
 
                         break
                     }
@@ -1268,7 +1303,10 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
                             val tcpModel = VoiceUtil.voiceCall(curDeviceId, RoleTypeEnum.NURSE.name)
                             val transaction: TcpCallback = object : TcpCallback(tcpModel.tid, uart) {
-                                override fun onSuccess(jsonObject: JSONObject) {
+                                override fun onSuccess(
+                                    jsonObject: JSONObject,
+                                    tcpModel: TcpModel
+                                ) {
                                     if (Constant.CALL_STATE == Constant.CALL_STANDBY) {
                                         Constant.CALL_STATE = Constant.CALL_OUTGOING
                                     }
@@ -1347,29 +1385,61 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         if (FrameHelper.frameDeviceList.size > 0 ) {
             for (frameDevice in FrameHelper.frameDeviceList) {
                 if (frameDevice.device != null && uart.equals(frameDevice.device.ethMac, true)) {
-                    updateCallText("SOS-->$uart, ${frameDevice.device.id}")
-                    //OtherUtil.sendSosCall(frameDevice.device.id)
+                    if (frameDevice.device.deviceType == DeviceTypeEnum.SIMULATE_BLUE_CODE.value()) {
+                        //blue code请求
+                        updateCallText("Blue code-->$uart, ${frameDevice.device.id}")
+
+                        val tcpModel = BlueCodeUtil.BlueCodeCall(frameDevice.device.id, frameDevice.frame.fullName)
+                        val transaction: TcpCallback = object : TcpCallback(tcpModel.tid, uart) {
+                            override fun onSuccess(
+                                jsonObject: JSONObject,
+                                tcpModel: TcpModel
+                            ) {
+                                //开启门灯
+                                Log.d(TAG, "blue code call success, mac: $mac")
+                                /*val doorAddr = getDoorLightAddrBySos(mac)
+                                if (!TextUtils.isEmpty(doorAddr)) {
+                                    SerialPortHelper.openDoorLightRed(doorAddr)
+                                }*/
+                            }
 
-                    val tcpModel = OtherUtil.SOSCall(frameDevice.device.id, 0)
-                    val transaction: TcpCallback = object : TcpCallback(tcpModel.tid, uart) {
-                        override fun onSuccess(jsonObject: JSONObject) {
-                            //开启门灯
-                            Log.d(TAG, "sos call success, mac: $mac")
-                            val doorAddr = getDoorLightAddrBySos(mac)
-                            if (!TextUtils.isEmpty(doorAddr)) {
-                                SerialPortHelper.openDoorLightRed(doorAddr)
+                            override fun onFailed(jsonObject: JSONObject) {
+                                // 这里写发送失败的方法
+                                val callbackString = jsonObject.getString(CALLBACK)
+                                Log.e(TAG, "blue code call fail: $callbackString, mac: $mac")
+                                //关闭紧急按钮
+                                SerialPortHelper.closeEmergency(mac)
                             }
                         }
+                        TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
+                    } else {
+                        updateCallText("SOS-->$uart, ${frameDevice.device.id}")
+
+                        val tcpModel = OtherUtil.SOSCall(frameDevice.device.id, 0)
+                        val transaction: TcpCallback = object : TcpCallback(tcpModel.tid, uart) {
+                            override fun onSuccess(
+                                jsonObject: JSONObject,
+                                tcpModel: TcpModel
+                            ) {
+                                //开启门灯
+                                Log.d(TAG, "sos call success, mac: $mac")
+                                val doorAddr = getDoorLightAddrBySos(mac)
+                                if (!TextUtils.isEmpty(doorAddr)) {
+                                    SerialPortHelper.openDoorLightRed(doorAddr)
+                                }
+                            }
 
-                        override fun onFailed(jsonObject: JSONObject) {
-                            // 这里写发送失败的方法
-                            val callbackString = jsonObject.getString(CALLBACK)
-                            Log.e(TAG, "sos call fail: $callbackString, mac: $mac")
-                            //关闭紧急按钮
-                            SerialPortHelper.closeEmergency(mac)
+                            override fun onFailed(jsonObject: JSONObject) {
+                                // 这里写发送失败的方法
+                                val callbackString = jsonObject.getString(CALLBACK)
+                                Log.e(TAG, "sos call fail: $callbackString, mac: $mac")
+                                //关闭紧急按钮
+                                SerialPortHelper.closeEmergency(mac)
+                            }
                         }
+                        TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
                     }
-                    TcpClient.getInstance().sendTcp(tcpModel, false, transaction)
+
                     break
                 }
             }
@@ -1988,7 +2058,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                     } else if (tcpModel.type == TcpType.SIDE) {
                         if (tcpModel.action == TcpAction.SideAction.NURSING) {
                             val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
-                            nursingMap.set(interactionVO.fromEthMac.toUpperCase(Locale.ROOT), interactionVO.id)
+                            nursingMap.set(interactionVO.fromEthIp.toUpperCase(Locale.ROOT), interactionVO.id)
                         } else {
                             //门灯控制
                             controlDoorLight(tcpModel)

+ 33 - 0
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/bean/EventBean.java

@@ -0,0 +1,33 @@
+package com.wdkl.app.ncs.conversion_box.bean;
+
+import com.wdkl.ncs.android.middleware.model.vo.InteractionVO;
+
+public class EventBean {
+    private String mac;
+    private InteractionVO interactionVO;
+
+    public EventBean() {
+
+    }
+
+    public EventBean(String mac, InteractionVO interactionVO) {
+        this.mac = mac;
+        this.interactionVO = interactionVO;
+    }
+
+    public String getMac() {
+        return mac;
+    }
+
+    public void setMac(String mac) {
+        this.mac = mac;
+    }
+
+    public InteractionVO getInteractionVO() {
+        return interactionVO;
+    }
+
+    public void setInteractionVO(InteractionVO interactionVO) {
+        this.interactionVO = interactionVO;
+    }
+}

+ 7 - 4
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/fragment/MainFragment.kt

@@ -69,14 +69,16 @@ class MainFragment: BaseFragment<MainFragmentPresenter, ConversionBoxMainLayBind
                 //房间设备
                 if (room.roomDeviceList != null) {
                     for (roomDevice in room.roomDeviceList) {
-                        var roomBean = FrameDeviceBean()
+                        val roomBean = FrameDeviceBean()
                         roomBean.frame = room.frameRoom
                         roomBean.device = roomDevice
                         FrameHelper.frameDeviceList.add(roomBean)
 
                         //关闭门灯
-                        if (roomDevice.deviceType == DeviceTypeEnum.SIMULATE_DOOR_LIGHT.value() && !TextUtils.isEmpty(roomDevice.ethMac)) {
-                            SerialPortHelper.closeDoorLight(roomDevice.ethMac)
+                        if (Constant.firstLoadData) {
+                            if (roomDevice.deviceType == DeviceTypeEnum.SIMULATE_DOOR_LIGHT.value() && !TextUtils.isEmpty(roomDevice.ethMac)) {
+                                SerialPortHelper.closeDoorLight(roomDevice.ethMac)
+                            }
                         }
                     }
                 }
@@ -86,7 +88,7 @@ class MainFragment: BaseFragment<MainFragmentPresenter, ConversionBoxMainLayBind
                         //床位设备
                         if (bed.bedDeviceList != null) {
                             for (bedDevice in bed.bedDeviceList) {
-                                var bedBean = FrameDeviceBean()
+                                val bedBean = FrameDeviceBean()
                                 bedBean.frame = bed.frameBed
                                 bedBean.device = bedDevice
                                 FrameHelper.frameDeviceList.add(bedBean)
@@ -95,6 +97,7 @@ class MainFragment: BaseFragment<MainFragmentPresenter, ConversionBoxMainLayBind
                     }
                 }
             }
+            Constant.firstLoadData = false
 
             adapter?.updateData(FrameHelper.frameDeviceList)
         }

+ 3 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/common/Constant.java

@@ -30,6 +30,9 @@ public class Constant {
     public static boolean LATER_RESTART = false;
     public static boolean test_mode = false;
 
+    //首次加载数据
+    public static boolean firstLoadData = true;
+
     //0--白天,1--夜晚
     public static int day_state = -1;
 

+ 2 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/TcpClientHandler.java

@@ -103,7 +103,8 @@ public class TcpClientHandler extends SimpleChannelInboundHandler<String> {
                                     if (transaction != null) {
                                         JSONObject jsonObject = new JSONObject();
                                         jsonObject.put(TcpCallback.CALLBACK, TcpCallback.CALLBACK_SUCCESS);
-                                        transaction.onSuccess(jsonObject);
+                                        //transaction.onSuccess(jsonObject);
+                                        transaction.onSuccess(jsonObject, tcpModel);
                                         trantCache.remove(tcpModel.getTid());
                                     }
                                 }

+ 53 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/BlueCodeUtil.java

@@ -0,0 +1,53 @@
+package com.wdkl.ncs.android.middleware.tcp.channel;
+
+import com.wdkl.ncs.android.middleware.tcp.TcpClient;
+import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction;
+import com.wdkl.ncs.android.middleware.tcp.enums.TcpType;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class BlueCodeUtil {
+
+    public static TcpModel BlueCodeCall(Integer fromId, String frame){
+        Map map = new HashMap();
+        map.put("title", frame);
+
+        TcpModel tcpModel = new TcpModel(null);
+        tcpModel.setType(TcpType.BLUE_CODE);
+        tcpModel.setAction(TcpAction.BlueCodeAction.CALL);
+        tcpModel.setFromId(fromId);
+        tcpModel.setData(map);
+        return tcpModel;
+    }
+
+    public static TcpModel BlueCodeResponse(String tid, Integer fromId, Integer interactionId){
+        TcpModel tcpModel = new TcpModel(tid);
+        tcpModel.setType(TcpType.BLUE_CODE);
+        tcpModel.setAction(TcpAction.BlueCodeAction.RESPONSE);
+        tcpModel.setFromId(fromId);
+        tcpModel.setData(interactionId);
+        return tcpModel;
+    }
+
+    public static TcpModel BlueCodeResponded(Integer fromId, Integer toId){
+        TcpModel tcpModel = new TcpModel(null);
+        tcpModel.setType(TcpType.BLUE_CODE);
+        tcpModel.setAction(TcpAction.BlueCodeAction.RESPONDED);
+        tcpModel.setFromId(fromId);
+        tcpModel.setToId(toId);
+        return tcpModel;
+    }
+
+
+    public static void sendBlueCodeCall(Integer fromId, String frame) {
+        TcpModel tcpModel = BlueCodeUtil.BlueCodeCall(fromId, frame);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+
+    public static void sendBlueCodeResponse(String tid, Integer fromId, Integer interactionId) {
+        TcpModel tcpModel = BlueCodeUtil.BlueCodeResponse(tid, fromId, interactionId);
+        TcpClient.getInstance().sendMsg(tcpModel.toJson());
+    }
+}

+ 1 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/DeviceChannel.java

@@ -81,6 +81,7 @@ public class DeviceChannel {
             case TIME:
             case SOS:
             case SIDE:
+            case BLUE_CODE:
                 EventBus.getDefault().post(new MessageEvent(tcpModel, EVENT_TCP_MSG));
                 break;
         }

+ 3 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/channel/OtherUtil.java

@@ -72,7 +72,9 @@ public class OtherUtil {
         tcpModel.setType(TcpType.SIDE);
         tcpModel.setAction(TcpAction.SideAction.NURSING_END);
         tcpModel.setFromId(fromId);
-        tcpModel.setData(interactionId);
+        if (interactionId != null && interactionId != -1) {
+            tcpModel.setData(interactionId);
+        }
         return tcpModel;
     }
 

+ 4 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/dto/TcpCallback.java

@@ -29,6 +29,10 @@ public class TcpCallback {
 
     }
 
+    public void onSuccess(JSONObject jsonObject, TcpModel tcpModel){
+
+    }
+
     public void onFailed(JSONObject jsonObject){
 
     }

+ 3 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/dto/TcpModel.java

@@ -154,6 +154,9 @@ public class TcpModel implements Serializable {
             case SIDE:
                 tcpAction = TcpAction.SideAction.fromString(action);
                 break;
+            case BLUE_CODE:
+                tcpAction = TcpAction.BlueCodeAction.fromString(action);
+                break;
         }
         tcpModel.setTid(tid);
         tcpModel.setType(tcpType);

+ 32 - 4
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/enums/DeviceTypeEnum.java

@@ -8,6 +8,7 @@ package com.wdkl.ncs.android.middleware.tcp.enums;
 
 public enum DeviceTypeEnum {
 
+    // 护士主机
     NURSE_HOST(1, "护士主机"),
     DOCTOR_HOST(2, "医生主机"),
     DOOR_DEVICE(3, "门口机"),
@@ -29,15 +30,42 @@ public enum DeviceTypeEnum {
     VISITATION(19,"探视机"),
     RS485_TRANSFER(20,"485转换盒"),
     EMERGENCY_BUTTON(21, "紧急按钮"),
-    RS485_DEER_DEVICE(22,"485门口分机"),
+    RS485_DOOR_DEVICE(22,"485门口分机"),
     ALARM_BODY_INDUCTIVE(23, "红外报警器"),
     ALARM_WATER_OVERFLOW(24, "用水监控器"),
     ALARM_HOUSEHOLD_GAS(25, "家用燃气报警器"),
     ALARM_HOUSEHOLD_SMOKE(26, "家用烟雾报警器"),
     ALARM_BUTTON_SOS(27, "一键报警器"),
-    DOOR_LOCK(30, "门磁传感器");
-    private int value;
-    private String typeName;
+    VITAL_SIGNS_DEVICE(28, "体征设备"),
+    ALARM_RESTRAINT_BAND(29, "约束带报警器"),
+    DOOR_LOCK(30, "门磁传感器"),
+    EMERGENCY_GATEWAY(31, "报警网关"),
+    ALARM_433BUTTON(32, "433报警器"),
+    OTHER_HOST(33, "其他主机"),
+    BREASTPLATE(34, "胸牌/手环"),
+    OWON_X5_GATEWAY(35,"OWONX5网关"),
+    FALL_DETECTION_RADAR(36,"防跌倒雷达"),
+    HUMAN_DETECTION_RADAR(37,"睡眠监测雷达"),
+    ALARM_INFUSION(38,"输液报警器"),
+    ELECTRONIC_FENCE(39,"电子围栏"),
+    S433_DOOR_LAMP(40,"433无线门灯"),
+    S433_TRANSFER_BOX(41,"433无线转换盒"),
+    S433_RECEIVER(42,"433接收"),
+    SLEEPMATTRESS(43,"睡眠床垫"),
+    S4G_INTERCOM(44,"4G对讲器"),
+    MULTIFUNCTIONAL_BUTTON(45,"多功能按钮"),
+    WATCH_IW(46,"智能手表-IW"),
+    S433_BJMD(47,"报警门灯"),
+    SOS_VOICE_BUTTON(48, "SOS语音按钮"),
+    PTT(49, "一键通"),
+    SMART_LIFE_GATEWAY(50, "智慧生活网关"),
+    SMART_LIFE_VOICE_GATE(51, "智慧生活语音网关"),
+    CURTAIN(52, "窗帘"),
+    SWITCH(53, "开关"),
+    SIMULATE_BLUE_CODE(54, "模拟蓝色代码");
+
+    private final int value;
+    private final String typeName;
 
 
     DeviceTypeEnum(int value, String typeName) {

+ 31 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/enums/TcpAction.java

@@ -629,4 +629,35 @@ public interface TcpAction {
             return userOptionEnum == null ? NO_MATCH :userOptionEnum;
         }
     }
+
+    enum BlueCodeAction implements TcpAction {
+        CALL("呼叫"),
+        SUCCESS("成功"),
+        RESPONSE("响应"),
+        RESPONDED("已响应"),
+        NO_MATCH("没有匹配");
+
+        private final String description;
+        BlueCodeAction(String description){
+            this.description = description;
+        }
+        public String getDescription() {
+            return description;
+        }
+
+        public String getName(){
+            return this.name();
+        }
+
+        private final static Map<String , BlueCodeAction> ENUM_MAP = new HashMap<String, BlueCodeAction>();
+        static {
+            for(BlueCodeAction v : values()) {
+                ENUM_MAP.put(v.toString() , v);
+            }
+        }
+        public static BlueCodeAction fromString(String v) {
+            BlueCodeAction userOptionEnum = ENUM_MAP.get(v);
+            return userOptionEnum == null ? NO_MATCH :userOptionEnum;
+        }
+    }
 }

+ 1 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/enums/TcpType.java

@@ -21,6 +21,7 @@ public enum TcpType {
     BROADCAST("广播"),
     ENTRACEGUARD("门禁"),
     CHANNELIM("频道留言"),
+    BLUE_CODE("blue_code"),
     TIME("时间");
 
     private String description;