diff --git a/libraries/mogo-adas-data/src/main/proto/message_pad.proto b/libraries/mogo-adas-data/src/main/proto/message_pad.proto index a6af6b5c95..e129f1c26e 100644 --- a/libraries/mogo-adas-data/src/main/proto/message_pad.proto +++ b/libraries/mogo-adas-data/src/main/proto/message_pad.proto @@ -100,6 +100,7 @@ enum MessageType MsgTypePowerUnit = 0x1012e;//电源模块通信 MsgTypeSSMFuncMsg = 0x1012f;//SSM功能(上下行) MsgTypeSSMFuncStatusQuery = 0x10130;//SSM功能状态查询及返回(上下行) +// MsgTypeHeartbeat = 0x10131;//PAD给域控下发心跳 1Hz 空数据 TODO 废弃,改用发送"6e 68 6f 69"数据作为心跳 MsgTypeCaptureImgReqOnTakeOver = 0x10132;//人工接管时PAD请求前后摄像头数据 MsgTypeEzhouCloud = 0x10133;//NED pad通信(不仅限于鄂州) bus ros1 MAP500版本支持, bus ros2 MAP480版本支持,taxi 还没有上 MsgTypeCopyBag = 0x10134;//数据落盘(上下行) diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java index 3d4544da82..f24044b19e 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java @@ -70,6 +70,9 @@ import java.util.Map; import java.util.Set; import java.util.Timer; import java.util.TimerTask; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import bag_manager.BagManagerOuterClass; @@ -146,6 +149,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec */ private SubscribeInterface subscribeInterface; private Timer carConfigReqTimer;//车辆基础信息请求 多次请求防止无法收到基础信息情况出现 + private ScheduledExecutorService heartbeatScheduler;//心跳发送 private OnAdasListener mAdasListener; //连接状态listener @@ -868,6 +872,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec AutopilotAbilityManager.getInstance().start(); ParallelDrivingManager.getInstance().start(); // startCheckCompatibility(); + startSendHeartbeat(); //更新连接成功状态之后再根据是否认证进行认证检查 if (adasOptions.isCertification()) { //启动认证超时 @@ -884,6 +889,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec ParallelDrivingManager.getInstance().stop(); AdasManager.getInstance().setCarConfig(null); // stopCheckCompatibility(); + stopSendHeartbeat(); stopDispatchHandler(); isInitConfigure.set(false); stopCarConfigReq(); @@ -925,6 +931,26 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec } } + //车辆基础信息请求 + private synchronized void startSendHeartbeat() { + if (heartbeatScheduler == null || heartbeatScheduler.isShutdown()) { + heartbeatScheduler = Executors.newSingleThreadScheduledExecutor(); + heartbeatScheduler.scheduleWithFixedDelay(() -> { + if (mSocket != null && mSocket.isConnected()) { + mSocket.sendDataWebSocket(Constants.RAW_HEART_BEAT); + } + }, 100, 1000, TimeUnit.MILLISECONDS); + } + } + + private synchronized void stopSendHeartbeat() { + if (heartbeatScheduler != null) { + heartbeatScheduler.shutdownNow(); + heartbeatScheduler = null; + } + } + + // /** // * 检查兼容性 // */ diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java index c7476405e9..3ff2979d96 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Constants.java @@ -4,6 +4,8 @@ import com.google.gson.reflect.TypeToken; import java.util.HashSet; +import okio.ByteString; + /** * @ProjectName: lib-adas-fpga * @Package: PACKAGE_NAME @@ -33,11 +35,14 @@ public class Constants { * 数据协议头 */ public static final byte[] RAW_MG = new byte[]{(byte) 0x6d, 0x67}; + /** + * 心跳协议 + */ + public static final ByteString RAW_HEART_BEAT = ByteString.of((byte) 0x6e, (byte) 0x68, (byte) 0x6f, (byte) 0x69); public static final String DEFAULT_PING_ADDRESS_LIST = "[\"192.168.1.102\", \"192.168.8.102\"]"; - /** * 终端角色类型 */