diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutoPilotModeDialog.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutoPilotModeDialog.java index 3ebdd3292f..74e5eb6eaa 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutoPilotModeDialog.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutoPilotModeDialog.java @@ -129,6 +129,14 @@ public class AutoPilotModeDialog extends Dialog { getContext().startActivity(new Intent(getContext(), AutopilotConfigActivity.class)); } }); + findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MessagePad.RouteInfo.Builder builder = MessagePad.RouteInfo.newBuilder(); + AdasManager.getInstance().sendAutoPilotModeReq(0, 0, builder.build()); + AutoPilotModeDialog.this.dismiss(); + } + }); } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java index fb15c5051a..dc83ac33f2 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java @@ -42,6 +42,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; +import com.google.protobuf.TextFormat; import com.mogo.telematic.MogoProtocolMsg; import com.mogo.telematic.NSDNettyManager; import com.mogo.telematic.client.listener.NettyClientListener; @@ -85,6 +86,7 @@ import com.zhidao.support.adas.high.OnAdasConnectStatusListener; import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.OnMultiDeviceListener; import com.zhidao.support.adas.high.bean.AutopilotAbility; +import com.zhidao.support.adas.high.bean.AutopilotStatistics; import com.zhidao.support.adas.high.bean.VersionCompatibility; import com.zhidao.support.adas.high.common.ByteUtil; import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS; @@ -839,13 +841,23 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas for (SystemStatusInfo.HealthInfo healthInfo : ability.statusInfo.getHealthInfoList()) { if (healthInfo.getState() == SystemStatusInfo.HealthState.FAULT) { isAutopilotAbility = false; - autopilotAbilityReason = healthInfo.getName() + " Topic异常"; + autopilotAbilityReason = healthInfo.getName() + " 节点异常"; break; } } Log.i(TAG, "是否可以启动自动驾驶=" + isAutopilotAbility + " 原因=" + autopilotAbilityReason); } + @Override + public void onStartAutopilotFailed(MogoReportMsg.MogoReportMessage message) { + + } + + @Override + public void onAutopilotStatistics(AutopilotStatistics statistics) { + Log.i(TAG, "启动自动驾驶状态=" + statistics.status + " 用时=" + statistics.usedTime + " SetAutopilotModeReq=" + TextFormat.printer().escapingNonAscii(false).printToString(statistics.req) + " failedMessage=" + (statistics.failedMessage == null ? null : TextFormat.printer().escapingNonAscii(false).printToString(statistics.failedMessage))); + } + @Override public void onTrajectory(MessagePad.Header header, MessagePad.Trajectory trajectory) { Trajectory base = new Trajectory(header, trajectory, sdf); diff --git a/app_ipc_monitoring/src/main/res/layout/dialog_autopilot_mode.xml b/app_ipc_monitoring/src/main/res/layout/dialog_autopilot_mode.xml index f1829fc2dc..554e402df0 100644 --- a/app_ipc_monitoring/src/main/res/layout/dialog_autopilot_mode.xml +++ b/app_ipc_monitoring/src/main/res/layout/dialog_autopilot_mode.xml @@ -4,7 +4,20 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_adas_dialog"> - + = + ConcurrentHashMap() + + /** + * 添加监听 + * @param tag 标记,用来注销监听使用 + * @param listener 监听回调 + */ + fun addListener( + @Nullable tag: String, + @Nullable listener: IMoGoStartAutopilotFailedListener + ) { + if (M_START_AUTOPILOT_FAILED_LISTENER.containsKey(tag)) { + return + } + M_START_AUTOPILOT_FAILED_LISTENER[tag] = listener + } + + /** + * 删除监听 + * @param tag 标记,用来注销监听使用 + */ + fun removeListener(@Nullable tag: String) { + if (!M_START_AUTOPILOT_FAILED_LISTENER.containsKey(tag)) { + return + } + M_START_AUTOPILOT_FAILED_LISTENER.remove(tag) + } + + /** + * 删除监听 + * @param listener 要删除的监听对象 + */ + fun removeListener(@Nullable listener: IMoGoStartAutopilotFailedListener) { + M_START_AUTOPILOT_FAILED_LISTENER.forEach { + if (it.value == listener) { + M_START_AUTOPILOT_FAILED_LISTENER.remove(it.key) + } + } + } + + @Synchronized + fun invokeStartAutopilotFailed(message: MogoReportMsg.MogoReportMessage?) { + M_START_AUTOPILOT_FAILED_LISTENER.forEach { + val listener = it.value + listener.onStartAutopilotFailed(message) + } + } +} \ No newline at end of file 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 e30c0fa60a..9eaad29ddb 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 @@ -19,8 +19,10 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.protobuf.InvalidProtocolBufferException; +import com.zhidao.support.adas.high.bean.AutopilotStatistics; import com.zhidao.support.adas.high.bean.VersionCompatibility; import com.zhidao.support.adas.high.common.AutopilotAbilityManager; +import com.zhidao.support.adas.high.common.AutopilotReview; import com.zhidao.support.adas.high.common.ByteUtil; import com.zhidao.support.adas.high.common.Constants; import com.zhidao.support.adas.high.common.CupidLogUtils; @@ -92,6 +94,10 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec * 消息工厂 */ private MyMessageFactory myMessageFactory; + /** + * 自动驾驶统计 + */ + private AutopilotReview autopilotReview; /** * 工控机连接配置 */ @@ -164,13 +170,26 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec //原始数据解析类 rawUnpack = new RawUnpack(); rawPack = new RawPack(); + autopilotReview = new AutopilotReview(onAutopilotReviewListener); //消息工厂 - myMessageFactory = new MyMessageFactory(); + myMessageFactory = new MyMessageFactory(autopilotReview); //启用线程分发 defaultDispatchHandler = new DispatchHandler(MessagePad.MessageType.MsgTypeDefault, this);//默认分发线程 不要添加到Map中 initOtherDispatchHandler(); } + /** + * 启动自动驾驶状态统计回调 + */ + private final AutopilotReview.OnAutopilotReviewListener onAutopilotReviewListener = new AutopilotReview.OnAutopilotReviewListener() { + @Override + public void onReview(AutopilotStatistics statistics) { + if (mAdasListener != null) { + mAdasListener.onAutopilotStatistics(statistics); + } + } + }; + /** * 初始化其他分发线程 */ @@ -757,6 +776,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec if (routeInfo != null) builder.setRouteInfo(routeInfo); MessagePad.SetAutopilotModeReq req = builder.build(); + if (autopilotReview != null) autopilotReview.onAutopilotCommandTrigger(req); return sendPBMessage(MessageType.TYPE_SEND_SET_AUTOPILOT_MODE_REQ.typeCode, req.toByteArray()); } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java index 6f9d7f09ba..649cbf48d7 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java @@ -1,6 +1,7 @@ package com.zhidao.support.adas.high; import com.zhidao.support.adas.high.bean.AutopilotAbility; +import com.zhidao.support.adas.high.bean.AutopilotStatistics; import com.zhidao.support.adas.high.common.ProtocolStatus; import chassis.VehicleStateOuterClass; @@ -179,13 +180,6 @@ public interface OnAdasListener { */ void onPlanningActionMsg(MessagePad.Header header, MessagePad.PlanningActionMsg planningActionMsg); - /** - * 数据错误 - * - * @param status 错误原因 - * @param bytes 原始数据 - */ - void onError(ProtocolStatus status, byte[] bytes); /** * 是否有能力启动自动驾驶 @@ -193,4 +187,31 @@ public interface OnAdasListener { * @param ability 是否可以启动自动驾驶 */ void onAutopilotAbility(AutopilotAbility ability); + + /** + * 启动自动驾驶失败回调 + * 根据MAP 系统监控状态返回过滤 + * message.getMsg() 获取详细错误说明 + * message.getCode() 可用于判断属于什么类型 + * + * @param message 数据 + */ + void onStartAutopilotFailed(MogoReportMsg.MogoReportMessage message); + + /** + * 启动自动驾驶状态统计 + * 触发机制:下发启动自动驾驶命令,根据MAP返回状态判断成功或失败 + * 统计四种状态:成功 失败 取消 超时 + * + * @param statistics 统计数据 + */ + void onAutopilotStatistics(AutopilotStatistics statistics); + + /** + * 数据错误 + * + * @param status 错误原因 + * @param bytes 原始数据 + */ + void onError(ProtocolStatus status, byte[] bytes); } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/AutopilotStatistics.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/AutopilotStatistics.java new file mode 100644 index 0000000000..c6acda417b --- /dev/null +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/AutopilotStatistics.java @@ -0,0 +1,46 @@ +package com.zhidao.support.adas.high.bean; + +import com.zhidao.support.adas.high.common.Define; + +import mogo.telematics.pad.MessagePad; +import mogo_msg.MogoReportMsg; + +/** + * 自动驾驶启动统计 + */ +public class AutopilotStatistics { + + /** + * 启动自动驾驶后状态 + * 0 成功 + * 1 失败 + * 2 取消 + * 3 超时 + * {@link com.zhidao.support.adas.high.common.Constants.AUTOPILOT_START_STATUS} + */ + @Define.AutopilotStartStatus + public final int status; + + /** + * 用时 + * 单位:ms + */ + public final long usedTime; + + /** + * 下发的启动自动驾驶命令 + */ + public final MessagePad.SetAutopilotModeReq req; + + /** + * 失败的消息 + */ + public final MogoReportMsg.MogoReportMessage failedMessage; + + public AutopilotStatistics(@Define.AutopilotStartStatus int status, long usedTime, MessagePad.SetAutopilotModeReq req, MogoReportMsg.MogoReportMessage failedMessage) { + this.status = status; + this.usedTime = usedTime; + this.req = req; + this.failedMessage = failedMessage; + } +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotReview.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotReview.java new file mode 100644 index 0000000000..3449c5ae8f --- /dev/null +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/AutopilotReview.java @@ -0,0 +1,117 @@ +package com.zhidao.support.adas.high.common; + +import android.os.SystemClock; + +import androidx.annotation.NonNull; + +import com.zhidao.support.adas.high.bean.AutopilotStatistics; + +import java.util.Timer; +import java.util.TimerTask; + +import mogo.telematics.pad.MessagePad; +import mogo_msg.MogoReportMsg; + +/** + * 自动驾驶状态检查/统计 + */ +public class AutopilotReview { + /** + * 默认启动自驾超时时间 + */ + private static final long DEFAULT_TIMEOUT = 30 * 1000L; + + + private Timer timer; + /** + * 下发的启动自动驾驶命令 + */ + public MessagePad.SetAutopilotModeReq startReq; + private long startTime;//自动驾驶命令下发启动时间 + + /** + * 失败的消息 + */ + public MogoReportMsg.MogoReportMessage failedMessage; + + private final OnAutopilotReviewListener listener; + + public AutopilotReview(@NonNull OnAutopilotReviewListener listener) { + this.listener = listener; + } + + public interface OnAutopilotReviewListener { + void onReview(AutopilotStatistics statistics); + } + + private void onCallback(@Define.AutopilotStartStatus int status) { + stopTimer(); + long usedTime = SystemClock.elapsedRealtime() - startTime; + if (listener != null) { + listener.onReview(new AutopilotStatistics(status, usedTime, startReq, failedMessage)); + } + startTime = 0; + startReq = null; + failedMessage = null; + } + + + private void startTimer() { + if (timer == null) { + timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + //超时 + onCallback(Constants.AUTOPILOT_START_STATUS.TIMEOUT); + } + }, DEFAULT_TIMEOUT); + } + } + + private void stopTimer() { + if (timer != null) { + timer.cancel(); + timer = null; + } + } + + /** + * 自动驾命令 + * + * @param req 启动或停止 + */ + public void onAutopilotCommandTrigger(MessagePad.SetAutopilotModeReq req) { + if (req.getMode() == 1) { + //启动自动驾驶 + startReq = req; + startTime = SystemClock.elapsedRealtime(); + startTimer(); + } else { + onCallback(Constants.AUTOPILOT_START_STATUS.CANCEL); + } + } + + /** + * 监控报告状态 目前只用于自动驾驶失败结果 + * + * @param message + */ + public void onReportResult(MogoReportMsg.MogoReportMessage message) { + if (startReq != null && message != null) { + failedMessage = message; + onCallback(Constants.AUTOPILOT_START_STATUS.FAILED); + } + } + + /** + * 自动驾驶状态 目前只用于自动驾驶成功结果 + * + * @param state + */ + public void onAutopilotResult(MessagePad.AutopilotState state) { + if (startReq != null && state != null && state.getState() == 2) { + onCallback(Constants.AUTOPILOT_START_STATUS.SUCCESSFUL); + } + } +} 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 e251ac7ec4..55b42ed75a 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 @@ -110,4 +110,26 @@ public class Constants { } + /** + * 启动自动驾驶后的状态 + */ + public interface AUTOPILOT_START_STATUS { + /** + * 成功 + */ + int SUCCESSFUL = 0; + /** + * 失败 + */ + int FAILED = 1; + /** + * 取消 + */ + int CANCEL = 2; + /** + * 超时 + */ + int TIMEOUT = 3; + } + } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java index a3d4bbc2ff..4ea9eec593 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java @@ -46,4 +46,12 @@ public final class Define { @Retention(RetentionPolicy.SOURCE) public @interface SubscribeType { } + + @IntDef(flag = true, value = {Constants.AUTOPILOT_START_STATUS.SUCCESSFUL, + Constants.AUTOPILOT_START_STATUS.FAILED, + Constants.AUTOPILOT_START_STATUS.CANCEL, + Constants.AUTOPILOT_START_STATUS.TIMEOUT}) + @Retention(RetentionPolicy.SOURCE) + public @interface AutopilotStartStatus { + } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MogoReport.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MogoReport.java index d518abcd07..4e5ade9c83 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MogoReport.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MogoReport.java @@ -5,12 +5,12 @@ package com.zhidao.support.adas.high.common; * 根据290消息定义编写 */ public class MogoReport { - private static final String RESULT_AUTOPILOT_SYSTEM_UNSTARTED = "RESULT_AUTOPILOT_SYSTEM_UNSTARTED"; - private static final String RESULT_AUTOPILOT_DISABLE = "RESULT_AUTOPILOT_DISABLE"; - private static final String RESULT_AUTOPILOT_INFERIOR = "RESULT_AUTOPILOT_INFERIOR"; - private static final String RESULT_REMOTEPILOT_DISABLE = "RESULT_REMOTEPILOT_DISABLE"; - private static final String RESULT_REMOTEPILOT_INFERIOR = "RESULT_REMOTEPILOT_INFERIOR"; - private static final String RESULT_SHOW_WARNING = "RESULT_SHOW_WARNING"; + public static final String RESULT_AUTOPILOT_SYSTEM_UNSTARTED = "RESULT_AUTOPILOT_SYSTEM_UNSTARTED"; + public static final String RESULT_AUTOPILOT_DISABLE = "RESULT_AUTOPILOT_DISABLE"; + public static final String RESULT_AUTOPILOT_INFERIOR = "RESULT_AUTOPILOT_INFERIOR"; + public static final String RESULT_REMOTEPILOT_DISABLE = "RESULT_REMOTEPILOT_DISABLE"; + public static final String RESULT_REMOTEPILOT_INFERIOR = "RESULT_REMOTEPILOT_INFERIOR"; + public static final String RESULT_SHOW_WARNING = "RESULT_SHOW_WARNING"; // private static final String RESULT_DISCONNECTED_WITH_PAD = "RESULT_DISCONNECTED_WITH_PAD"; // private static final String RESULT_PAD_CANNOT_CONNECT_TELEMATICS = "RESULT_PAD_CANNOT_CONNECT_TELEMATICS"; @@ -96,14 +96,14 @@ public class MogoReport { } - private static final String ACTION_CONTACT_TECH_SUPPORT = "ACTION_CONTACT_TECH_SUPPORT"; - private static final String ACTION_CONTACT_MAINTENANCE = "ACTION_CONTACT_MAINTENANCE"; - private static final String ACTION_CONTACT_HARDWARE_ENGINEER = "ACTION_CONTACT_HARDWARE_ENGINEER"; - private static final String ACTION_REBOOT_PAD = "ACTION_REBOOT_PAD"; - private static final String ACTION_REBOOT_VEHICLE = "ACTION_REBOOT_VEHICLE"; - private static final String ACTION_CHECK_GEAR = "ACTION_CHECK_GEAR"; - private static final String ACTION_CHECK_NETWORK = "ACTION_CHECK_NETWORK"; - private static final String ACTION_TRY_AGAIN_LATER = "ACTION_TRY_AGAIN_LATER"; + public static final String ACTION_CONTACT_TECH_SUPPORT = "ACTION_CONTACT_TECH_SUPPORT"; + public static final String ACTION_CONTACT_MAINTENANCE = "ACTION_CONTACT_MAINTENANCE"; + public static final String ACTION_CONTACT_HARDWARE_ENGINEER = "ACTION_CONTACT_HARDWARE_ENGINEER"; + public static final String ACTION_REBOOT_PAD = "ACTION_REBOOT_PAD"; + public static final String ACTION_REBOOT_VEHICLE = "ACTION_REBOOT_VEHICLE"; + public static final String ACTION_CHECK_GEAR = "ACTION_CHECK_GEAR"; + public static final String ACTION_CHECK_NETWORK = "ACTION_CHECK_NETWORK"; + public static final String ACTION_TRY_AGAIN_LATER = "ACTION_TRY_AGAIN_LATER"; public enum Action { diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java index 7a2b13a28c..e35bbb8071 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/AutopilotStateMessage.java @@ -5,6 +5,7 @@ import android.os.SystemClock; import com.google.protobuf.InvalidProtocolBufferException; import com.zhidao.support.adas.high.AdasChannel; import com.zhidao.support.adas.high.OnAdasListener; +import com.zhidao.support.adas.high.common.AutopilotReview; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.protocol.RawData; @@ -14,6 +15,11 @@ import mogo.telematics.pad.MessagePad; * 自动驾驶状态 */ public class AutopilotStateMessage extends MyAbstractMessageHandler { + private final AutopilotReview autopilotReview; + + public AutopilotStateMessage(AutopilotReview autopilotReview) { + this.autopilotReview = autopilotReview; + } @Override public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException { @@ -25,6 +31,9 @@ public class AutopilotStateMessage extends MyAbstractMessageHandler { if (adasListener != null) { adasListener.onAutopilotState(raw.getHeader(), autopilotState); } + if (autopilotReview != null) { + autopilotReview.onAutopilotResult(autopilotState); + } AdasChannel.calculateTimeConsumingBusiness("自动驾驶状态", nowTime); // CupidLogUtils.e("自动驾驶状态--->" + autopilotState.toString()); } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java index 97f7de500e..5786c0803b 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java @@ -1,5 +1,6 @@ package com.zhidao.support.adas.high.msg; +import com.zhidao.support.adas.high.common.AutopilotReview; import com.zhidao.support.adas.high.common.MessageType; import mogo.telematics.pad.MessagePad; @@ -31,6 +32,11 @@ public class MyMessageFactory implements IMyMessageFactory { private IMsg recordDataConfigRespMessage;//数据采集配置应答 private IMsg planningDecisionStateMessage;//planning决策状态 + private final AutopilotReview autopilotReview; + + public MyMessageFactory(AutopilotReview autopilotReview) { + this.autopilotReview = autopilotReview; + } @Override public IMsg createMessage(MessagePad.MessageType messageType) { @@ -61,13 +67,13 @@ public class MyMessageFactory implements IMyMessageFactory { } else if (messageType == MessageType.TYPE_RECEIVE_AUTOPILOT_STATE.typeCode) { //自动驾驶状态 if (autopilotStateMessage == null) { - autopilotStateMessage = new AutopilotStateMessage(); + autopilotStateMessage = new AutopilotStateMessage(autopilotReview); } return autopilotStateMessage; } else if (messageType == MessageType.TYPE_RECEIVE_REPORT_MESSAGE.typeCode) { //监控事件报告 if (reportMessage == null) { - reportMessage = new ReportMessage(); + reportMessage = new ReportMessage(autopilotReview); } return reportMessage; } else if (messageType == MessageType.TYPE_RECEIVE_PERCEPTION_TRAFFIC_LIGHT.typeCode) { diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ReportMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ReportMessage.java index 171deba19d..7baa2838cd 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ReportMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ReportMessage.java @@ -5,15 +5,24 @@ import android.os.SystemClock; import com.google.protobuf.InvalidProtocolBufferException; import com.zhidao.support.adas.high.AdasChannel; import com.zhidao.support.adas.high.OnAdasListener; +import com.zhidao.support.adas.high.common.AutopilotReview; import com.zhidao.support.adas.high.common.CupidLogUtils; +import com.zhidao.support.adas.high.common.MogoReport; import com.zhidao.support.adas.high.protocol.RawData; +import java.util.List; + import mogo_msg.MogoReportMsg; /** - * 监控事件报告 + * 监控事件报告回调 */ public class ReportMessage extends MyAbstractMessageHandler { + private final AutopilotReview autopilotReview; + + public ReportMessage(AutopilotReview autopilotReview) { + this.autopilotReview = autopilotReview; + } @Override public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException { @@ -23,8 +32,18 @@ public class ReportMessage extends MyAbstractMessageHandler { if (CupidLogUtils.isEnableLog()) nowTime = SystemClock.elapsedRealtime(); if (adasListener != null) { - adasListener.onReportMessage(raw.getHeader(), mogoReportMessage); + adasListener.onReportMessage(raw.getHeader(), mogoReportMessage);//监控报告回调 } AdasChannel.calculateTimeConsumingBusiness("监控事件报告", nowTime); + //分发自动驾驶启动失败相关回调 + List results = mogoReportMessage.getResultList(); + if (!results.isEmpty() && results.contains(MogoReport.RESULT_AUTOPILOT_DISABLE)) { + if (adasListener != null) { + adasListener.onStartAutopilotFailed(mogoReportMessage);//启动自动驾驶失败回调 + } + if (autopilotReview != null) { + autopilotReview.onReportResult(mogoReportMessage);//统计启动自动驾驶失败原因 + } + } } }