diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt index 0c273facca..00c858f939 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/autopilot/OchAutoPilotStatusListenerManager.kt @@ -60,14 +60,16 @@ object OchAutoPilotStatusListenerManager : CallerBase if (oldValue != newValue) { - if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - if(oldValue==IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING){ - if(newValue==IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE){ - ToastUtils.showLong(R.string.common_change2_autopilot2_manual) - } - }else if(oldValue==IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING){ - if(newValue==IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE){ - ToastUtils.showLong(R.string.common_change2_pxjs_manual) + if (!FunctionBuildConfig.isDemoMode) { + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + if (oldValue == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { + if (newValue == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { + ToastUtils.showLong(R.string.common_change2_autopilot2_manual) + } + } else if (oldValue == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING) { + if (newValue == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) { + ToastUtils.showLong(R.string.common_change2_pxjs_manual) + } } } } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/ILineCallback.java b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/ILineCallback.java index a83654c7b2..d0aa60b939 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/ILineCallback.java +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/ILineCallback.java @@ -2,21 +2,59 @@ package com.mogo.och.common.module.manager.autopilot.line; public interface ILineCallback { + + /** + * 清除高精地图的轨迹线成功 + */ default void clearLineSuccess(){} + /** + * 高精地图上绘制轨迹线成功 + */ default void drawLineSuccess(){} + /** + * 高精地图上绘制轨迹线失败 + */ default void drawLineFail(){} + /** + * och 已向eye 发送启动自驾参数 + */ default void sendStartAutopilotSuccess(){} + /** + * 因为起始站点、自驾轨迹参数、线路信息变化导致的自驾orderId的变化 + */ + default void onAutopilotIdChange(String oldId,String newId){} + + + /** + * 启动自驾15s超时 + */ default void startAutopilotTimeOut(){} + /** + * 底盘收到启动自驾的指令 + */ default void sendStartAutopilotSuccessAck(){} + /** + * 底盘告知启动自驾失败 + * @param startFailedCode 错误码 + * @param startFailedMessage 错误信息 + */ default void startAutopilotFailure(String startFailedCode,String startFailedMessage){} - default void startAutopilotSuccess(){} + /** + * 自驾启动成功 + * @param source 自驾成功来源 + * @param autopilotId 当前启动自驾的id + */ + default void startAutopilotSuccess(int source, String autopilotId){} + /** + * 距离站点小于15m后向底盘查询是否到站底盘反馈 已到站 + */ default void arrivedStationSuccessBySearch(){} } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt index 634d2f258f..85fe8f695b 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt @@ -81,6 +81,9 @@ object LineManager : CallerBase() { private var autopilotId: String by Delegates.observable("") { _, oldValue, newValue -> if (oldValue != newValue) { CallerEagleBaseFunctionCall4OchManager.setOchAutopilotOrderId(newValue) + M_LISTENERS.forEach { + it.value.onAutopilotIdChange(oldValue,newValue) + } if(!AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)&&!AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)){ val (start, end) = getStations() if(start!=null&&end!=null){ @@ -252,11 +255,11 @@ object LineManager : CallerBase() { } private fun setAutopilotControlParameters(){ - getStationsWithLineAndContrai { start, end, lineInfo, contrai -> - val parameters = LineManager.initAutopilotControlParameters() + getStationsWithLine { start, end, lineInfo -> + val parameters = initAutopilotControlParameters() if (null == parameters) { e(M_BUS + TAG, "AutopilotControlParameters is empty.") - return@getStationsWithLineAndContrai + return@getStationsWithLine } d(M_BUS + TAG, "AutopilotControlParameters is update.") CallerAutoPilotStatusListenerManager.updateAutopilotControlParameters(parameters) @@ -315,6 +318,9 @@ object LineManager : CallerBase() { fun initAutopilotControlParameters(): AutopilotControlParameters? { var parameters: AutopilotControlParameters? = null + getStationsWithLine { start, end, lineInfo -> + this.autopilotId = "${lineInfo.lineId}_${start.siteId}_${end.siteId}_${lineInfo.orderId}" + } getStationsWithLineAndContrai { start, end, lineInfo, contrai -> parameters = AutopilotControlParameters() parameters?.routeID = lineInfo.lineId.toInt() @@ -324,7 +330,6 @@ object LineManager : CallerBase() { parameters?.startLatLon = AutoPilotLonLat(start.lat, start.lon) parameters?.endLatLon = AutoPilotLonLat(end.lat, end.lon) parameters?.vehicleType = 10 - this.autopilotId = "${lineInfo.lineId}_${start.siteId}_${end.siteId}_${lineInfo.orderId}" parameters?.orderId = this.autopilotId parameters?.firstAutopilotFlag = isFirstStartAutopilot @@ -518,6 +523,11 @@ object LineManager : CallerBase() { } } + /** + * @param source 0: och 通过自驾状态变化确定启动自驾成功 + * 1: 通过can消息发送自驾状态确定启动自驾成功 + * 2:通过FSM 反馈确定启动自驾成功 + */ fun triggerStartServiceEvent(send: Boolean,source:Int,type:String) { getStationsWithLine { start, end, lineInfo -> OchAutopilotAnalytics.triggerStartAutopilotEvent( @@ -531,6 +541,11 @@ object LineManager : CallerBase() { type, source ) + if(send){ + M_LISTENERS.forEach { + it.value.startAutopilotSuccess(source,autopilotId) + } + } } } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt index 38e889137b..3b7fc9b9ff 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt @@ -1,6 +1,7 @@ package com.mogo.och.common.module.wigets.autopilot import androidx.lifecycle.ViewModel +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager import com.mogo.eagle.core.utilcode.util.UiThreadHandler @@ -10,6 +11,8 @@ import com.mogo.och.common.module.manager.autopilot.autopilot.IOchAutopilotStatu import com.mogo.och.common.module.manager.autopilot.autopilot.OchAutoPilotStatusListenerManager import com.mogo.och.common.module.manager.autopilot.line.ILineCallback import com.mogo.och.common.module.manager.autopilot.line.LineManager +import com.mogo.och.common.module.manager.beautifymode.BeautifyManager +import com.mogo.och.common.module.manager.beautifymode.IBeautifyModeCallback import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.manager.loop.BizLoopManager import com.mogo.och.common.module.utils.RxUtils @@ -21,7 +24,7 @@ import java.util.concurrent.atomic.AtomicBoolean * @since: 2022/12/15 */ class AutopilotStateModel : ViewModel(), IOchAutopilotStatusListener, ILineCallback, - IOchDebugAutopilotStatusListener { + IOchDebugAutopilotStatusListener, IBeautifyModeCallback { private val TAG = AutopilotStateModel::class.java.simpleName @@ -29,12 +32,16 @@ class AutopilotStateModel : ViewModel(), IOchAutopilotStatusListener, ILineCall private val isPalyStartAni = AtomicBoolean(false) + // autopilotId 这个自驾id 启动成功过 + private var lineId:String? = null + override fun onCleared() { this.viewCallback = null AutopilotStateDebug.removeListener(TAG) OchAutoPilotStatusListenerManager.removeListener(TAG) LineManager.removeListener(TAG) + BeautifyManager.setStatusChangeListener(TAG,null) } fun setViewCallback(viewCallback:AutopilotStateCallback){ @@ -42,6 +49,7 @@ class AutopilotStateModel : ViewModel(), IOchAutopilotStatusListener, ILineCall AutopilotStateDebug.addListener(TAG,this) OchAutoPilotStatusListenerManager.addListener(TAG,this) LineManager.addListener(TAG,this) + BeautifyManager.setStatusChangeListener(TAG,this) } override fun debugStatusChange(debugStatus: Boolean) { @@ -90,39 +98,126 @@ class AutopilotStateModel : ViewModel(), IOchAutopilotStatusListener, ILineCall autopilotStateChange() } - private fun autopilotStateChange(){ - // 正在起自驾过程中 - // 自驾状态变化为非自驾状态 - // 或者 - // FSM 状态改为不能启动自驾 - // 按照启动自驾失败计算 - if(isPalyStartAni.get() && - (!CallerAutoPilotControlManager.isCanStartAutopilot(false) - || OchAutoPilotStatusListenerManager.autopilotState!=IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING)){ - OchChainLogManager.writeChainLog("自驾信息","正在起自驾过程中、自驾状态变化切为非自驾状态或者FSM 状态改为不能启动自驾") - startAutopilotFail() + override fun dispatchStatus(typeEnum: BeautifyManager.ChangeTypeEnum) { + OchChainLogManager.writeChainLog("美化模式","美化模式发生变化:${typeEnum}") + autopilotStateChange() + } + + override fun startAutopilotSuccess( + source: Int, + autopilotId: String? + ) { + LineManager.getLineInfo { + this.lineId = it.lineId.toString() + } + autopilotStateChange() + this.viewCallback?.startAutopilotSuccess() + } + + override fun onAutopilotIdChange(oldId: String?, newId: String?) { + if(LineManager.lineInfos?.lineId.toString()==this.lineId){ return } - BizLoopManager.runInMainThread{ - OchChainLogManager.writeChainLog("自驾信息","自驾状态:${OchAutoPilotStatusListenerManager.autopilotState} 能否启动自驾:${CallerAutoPilotControlManager.isCanStartAutopilot(false)}") - when (OchAutoPilotStatusListenerManager.autopilotState) { - IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE-> {// 不可用 不可启动自驾 - this.viewCallback?.autopilotDisable() - } - IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE-> { - if (CallerAutoPilotControlManager.isCanStartAutopilot(false) && OchAutoPilotStatusListenerManager.canStartAutopilotFromFSM) {// 不可用 - this.viewCallback?.canStartAutopilot() - } else {// 部分可用 - this.viewCallback?.autopilotDisable() + this.lineId = null + autopilotStateChange() + } + + /** + * 1、自驾状态发生变化 + * 2、能否启动自驾变化 + * 3、FSM能否启动自驾变化 + * 4、美化模式发生变化 + * 5、启动自驾成功 + * 6、自驾orderid发生变化 + * 7、启动自驾超时失败 + * 8、底盘明确告知启动自驾失败 + * 9、启动自驾失败展示3s 失败后恢复新的状态 + */ + private fun autopilotStateChange(){ + if (FunctionBuildConfig.isDemoMode) { + BizLoopManager.runInMainThread { + OchChainLogManager.writeChainLog( + "自驾信息", + "自驾状态:${OchAutoPilotStatusListenerManager.autopilotState} 能否启动自驾:${ + CallerAutoPilotControlManager.isCanStartAutopilot(false) + }" + ) + if(lineId.isNullOrEmpty()){// 没有启动成功过 + when (OchAutoPilotStatusListenerManager.autopilotState) { + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -> {// 不可用 不可启动自驾 + this.viewCallback?.canStartAutopilot() + } + + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> { + if (CallerAutoPilotControlManager.isCanStartAutopilot(false) && OchAutoPilotStatusListenerManager.canStartAutopilotFromFSM) {// 不可用 + this.viewCallback?.canStartAutopilot() + } else {// 部分可用 + this.viewCallback?.canStartAutopilot() + } + } + + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> {// 自驾中 + this.viewCallback?.stopAutopilotAnimation() + this.viewCallback?.inAutopilot() + } + + IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> {// 平行驾驶中 + this.viewCallback?.stopAutopilotAnimation() + this.viewCallback?.inAutopilot() + } } - } - IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING-> {// 自驾中 - this.viewCallback?.stopAutopilotAnimation() + }else{ this.viewCallback?.inAutopilot() } - IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING-> {// 平行驾驶中 - this.viewCallback?.stopAutopilotAnimation() - this.viewCallback?.inRemoteDriver() + } + + }else { + // 正在起自驾过程中 + // 自驾状态变化为非自驾状态 + // 或者 + // FSM 状态改为不能启动自驾 + // 按照启动自驾失败计算 + if (isPalyStartAni.get() && + (!CallerAutoPilotControlManager.isCanStartAutopilot(false) + || OchAutoPilotStatusListenerManager.autopilotState != IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) + ) { + OchChainLogManager.writeChainLog( + "自驾信息", + "正在起自驾过程中、自驾状态变化切为非自驾状态或者FSM 状态改为不能启动自驾" + ) + startAutopilotFail() + return + } + + BizLoopManager.runInMainThread { + OchChainLogManager.writeChainLog( + "自驾信息", + "自驾状态:${OchAutoPilotStatusListenerManager.autopilotState} 能否启动自驾:${ + CallerAutoPilotControlManager.isCanStartAutopilot(false) + }" + ) + when (OchAutoPilotStatusListenerManager.autopilotState) { + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -> {// 不可用 不可启动自驾 + this.viewCallback?.autopilotDisable() + } + + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> { + if (CallerAutoPilotControlManager.isCanStartAutopilot(false) && OchAutoPilotStatusListenerManager.canStartAutopilotFromFSM) {// 不可用 + this.viewCallback?.canStartAutopilot() + } else {// 部分可用 + this.viewCallback?.autopilotDisable() + } + } + + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> {// 自驾中 + this.viewCallback?.stopAutopilotAnimation() + this.viewCallback?.inAutopilot() + } + + IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> {// 平行驾驶中 + this.viewCallback?.stopAutopilotAnimation() + this.viewCallback?.inRemoteDriver() + } } } } @@ -144,7 +239,7 @@ class AutopilotStateModel : ViewModel(), IOchAutopilotStatusListener, ILineCall * 条件过滤完成 正式进入启动自驾状态 */ override fun sendStartAutopilotSuccess() { - OchChainLogManager.writeChainLog("自驾信息","启动自驾成功") + OchChainLogManager.writeChainLog("自驾信息","发送启动自驾信息到底盘成功") BizLoopManager.runInMainThread { this.viewCallback?.startAutopilotAnimation() isPalyStartAni.set(true) @@ -169,6 +264,12 @@ class AutopilotStateModel : ViewModel(), IOchAutopilotStatusListener, ILineCall } } + /** + * 1、正在起自驾过程中、自驾状态变化切为非自驾状态或者FSM 状态改为不能启动自驾 + * 2、debug状态下5s后自动按照失败计算 + * 3、超时失败 + * 4、底盘明确告知启动失败 + */ private fun startAutopilotFail(){ BizLoopManager.runInMainThread{ this.viewCallback?.stopAutopilotAnimation() diff --git a/OCH/offline/driver/src/main/java/com/mogo/och/offline/model/OrderModel.java b/OCH/offline/driver/src/main/java/com/mogo/och/offline/model/OrderModel.java index 53c9f0cbb6..7414400a0d 100644 --- a/OCH/offline/driver/src/main/java/com/mogo/och/offline/model/OrderModel.java +++ b/OCH/offline/driver/src/main/java/com/mogo/och/offline/model/OrderModel.java @@ -182,7 +182,7 @@ public class OrderModel { new IReceivedMsgListener() { @Override public void onFusionColor(boolean fusionColor) { - IReceivedMsgListener.super.onFusionColor(fusionColor); + } @Override