[fea]
[美化模式]
This commit is contained in:
yangyakun
2024-12-05 14:40:54 +08:00
parent 9afd36322b
commit 5b3bb09104
5 changed files with 200 additions and 44 deletions

View File

@@ -60,14 +60,16 @@ object OchAutoPilotStatusListenerManager : CallerBase<IOchAutopilotStatusListene
private var _autopilotState: Int by Delegates.observable(0) { _, oldValue, newValue ->
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)
}
}
}
}

View File

@@ -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(){}
}

View File

@@ -81,6 +81,9 @@ object LineManager : CallerBase<ILineCallback>() {
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<ILineCallback>() {
}
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<ILineCallback>() {
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<ILineCallback>() {
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<ILineCallback>() {
}
}
/**
* @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<ILineCallback>() {
type,
source
)
if(send){
M_LISTENERS.forEach {
it.value.startAutopilotSuccess(source,autopilotId)
}
}
}
}

View File

@@ -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()

View File

@@ -182,7 +182,7 @@ public class OrderModel {
new IReceivedMsgListener() {
@Override
public void onFusionColor(boolean fusionColor) {
IReceivedMsgListener.super.onFusionColor(fusionColor);
}
@Override