[6.5.1_exam]合并Taxi考试到主分支
This commit is contained in:
@@ -637,6 +637,76 @@ class MoGoAutopilotControlProvider :
|
||||
return AdasManager.getInstance().sendDetouringSpeed(speed) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
* AEB开关
|
||||
* isEnable = true 开启
|
||||
* isEnable = false 关闭
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendAebCmd(isEnable: Boolean): Boolean {
|
||||
return if(isEnable){
|
||||
AdasManager.getInstance().sendAebCmd(1) > -1
|
||||
}else{
|
||||
AdasManager.getInstance().sendAebCmd(0) > -1
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 限制绕障开关
|
||||
* isEnable = true 限制绕障
|
||||
* isEnable = false 正常绕障
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendLaneChangeRestrainValid(isEnable: Boolean): Boolean {
|
||||
return if(isEnable){
|
||||
AdasManager.getInstance().sendLaneChangeRestrainValid(1) > -1
|
||||
}else{
|
||||
AdasManager.getInstance().sendLaneChangeRestrainValid(0) > -1
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 停车让行线前避让等待开关
|
||||
* isEnable = true 停车让行线前需要避让等待
|
||||
* isEnable = false 停车让行线前无需避让等待
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendStopYieldValid(isEnable: Boolean): Boolean {
|
||||
return if(isEnable){
|
||||
AdasManager.getInstance().sendStopYieldValid(1) > -1
|
||||
}else{
|
||||
AdasManager.getInstance().sendStopYieldValid(0) > -1
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 地图限速功能开关
|
||||
* isEnable = true 使用地图限速功能
|
||||
* isEnable = false 不使用地图限速功能
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendHadmapSpeedLimitValid(isEnable: Boolean): Boolean {
|
||||
return if(isEnable){
|
||||
AdasManager.getInstance().sendHadmapSpeedLimitValid(1) > -1
|
||||
}else{
|
||||
AdasManager.getInstance().sendHadmapSpeedLimitValid(0) > -1
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 环岛模式开关
|
||||
* isEnable = true 环岛模式
|
||||
* isEnable = false 普通模式
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendRampThetaValid(isEnable: Boolean): Boolean {
|
||||
return if(isEnable){
|
||||
AdasManager.getInstance().sendRampThetaValid(1) > -1
|
||||
}else{
|
||||
AdasManager.getInstance().sendRampThetaValid(0) > -1
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 弱网减速停车策略开关
|
||||
* isEnable = true 使用弱网减速停车策略
|
||||
@@ -1264,6 +1334,10 @@ class MoGoAutopilotControlProvider :
|
||||
return AdasManager.getInstance().sendPlanningLaneChangeCmd(cmd) > -1
|
||||
}
|
||||
|
||||
override fun sendPlanningPullOverCmd(pullOverCmd: Int): Boolean {
|
||||
return AdasManager.getInstance().sendPlanningPullOverCmd(pullOverCmd) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置座椅压力接口
|
||||
* @param driver 主驾是否有人
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.mogo.eagle.core.data.deva.report.WorkOrderReportInfo
|
||||
import com.mogo.eagle.core.data.deva.scene.SceneModule
|
||||
import com.mogo.eagle.core.data.deva.scene.SceneTAG
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.takeover.TakeOverAnnotation
|
||||
import com.mogo.eagle.core.function.api.devatools.IDevaToolsProvider
|
||||
import com.mogo.eagle.core.function.api.devatools.block.IMoGoBlockProvider
|
||||
import com.mogo.eagle.core.function.api.devatools.download.DownloadType
|
||||
@@ -73,6 +74,7 @@ import com.zhjt.mogo_core_function_devatools.status.entity.RouteDownloadStatus
|
||||
import com.zhjt.mogo_core_function_devatools.status.entity.Status
|
||||
import com.zhjt.mogo_core_function_devatools.status.ui.AutoPilotLaunchBeforeView
|
||||
import com.zhjt.mogo_core_function_devatools.strict.StrictModeProviderImpl
|
||||
import com.zhjt.mogo_core_function_devatools.takeover.TakeOverManager
|
||||
import com.zhjt.mogo_core_function_devatools.trace.TraceManager.Companion.traceManager
|
||||
import com.zhjt.mogo_core_function_devatools.tts.TtsManager.Companion.ttsManager
|
||||
import com.zhjt.mogo_core_function_devatools.upgrade.UpgradeManager.Companion.upgradeManager
|
||||
@@ -647,4 +649,8 @@ class DevaToolsProvider : IDevaToolsProvider, IAppStateListener {
|
||||
override fun setRouteDynamicColorEnable(enable: Boolean) {
|
||||
mapRouteProvider?.setRouteDynamicColorEnable(enable)
|
||||
}
|
||||
|
||||
override fun takeOver(@TakeOverAnnotation takeOverAnnotation: Int) {
|
||||
TakeOverManager.takeOverManager.takeOver(takeOverAnnotation)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.zhjt.mogo_core_function_devatools.takeover
|
||||
|
||||
import com.mogo.eagle.core.data.takeover.TakeOverAnnotation
|
||||
import com.zhjt.mogo_core_function_devatools.takeover.network.TakeOverNetWorkModel
|
||||
|
||||
class TakeOverManager {
|
||||
|
||||
companion object {
|
||||
val takeOverManager: TakeOverManager by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
|
||||
TakeOverManager()
|
||||
}
|
||||
}
|
||||
|
||||
private val takeOverNetWorkModel = TakeOverNetWorkModel()
|
||||
|
||||
fun takeOver(@TakeOverAnnotation takeOverAnnotation: Int) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.zhjt.mogo_core_function_devatools.takeover.network
|
||||
|
||||
import com.mogo.eagle.core.data.BaseResponse
|
||||
import retrofit2.http.*
|
||||
|
||||
interface TakeOverApiService {
|
||||
|
||||
//云端接管
|
||||
@Headers("Content-Type:application/json;charset=UTF-8")
|
||||
@POST("/paralleldriving-service/autocars")
|
||||
suspend fun takeOver(@Body map: MutableMap<String, Any>): BaseResponse<Any>
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.zhjt.mogo_core_function_devatools.takeover.network
|
||||
|
||||
import com.mogo.commons.debug.DebugConfig
|
||||
|
||||
class TakeOverHost {
|
||||
|
||||
companion object{
|
||||
private const val HOST_DEV = "http://dzt-test.zhidaozhixing.com/"
|
||||
private const val HOST_RELEASE = "http://dzt.zhidaozhixing.com/"
|
||||
|
||||
fun get(): String{
|
||||
return when (DebugConfig.getNetMode()) {
|
||||
DebugConfig.NET_MODE_DEV -> HOST_DEV
|
||||
DebugConfig.NET_MODE_QA -> HOST_DEV
|
||||
DebugConfig.NET_MODE_DEMO -> HOST_RELEASE
|
||||
DebugConfig.NET_MODE_RELEASE -> HOST_RELEASE
|
||||
else -> HOST_RELEASE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,288 @@
|
||||
package com.zhjt.mogo_core_function_devatools.takeover.network
|
||||
|
||||
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
|
||||
import com.mogo.eagle.core.data.BaseResponse
|
||||
import com.mogo.eagle.core.data.app.AppConfigInfo
|
||||
import com.mogo.eagle.core.data.takeover.*
|
||||
import com.mogo.eagle.core.network.MoGoRetrofitFactory
|
||||
import com.mogo.eagle.core.network.apiCall
|
||||
import com.mogo.eagle.core.network.request
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
|
||||
class TakeOverNetWorkModel {
|
||||
|
||||
private fun getNetWorkApi(baseUrl: String = TakeOverHost.get()): TakeOverApiService {
|
||||
return MoGoRetrofitFactory.getInstanceNoCallAdapter(baseUrl)
|
||||
.create(TakeOverApiService::class.java)
|
||||
}
|
||||
|
||||
private val retryMap: ConcurrentHashMap<Int, Int> = ConcurrentHashMap<Int, Int>()
|
||||
|
||||
fun manualControl(onSuccess: (() -> Unit), onError: ((String) -> Unit)) {
|
||||
request<BaseResponse<Any>> {
|
||||
start {
|
||||
retryMap[MANUAL_CONTROL] = retryMap[MANUAL_CONTROL] ?: 0 + 1
|
||||
}
|
||||
loader {
|
||||
apiCall {
|
||||
val map = mutableMapOf<String, Any>()
|
||||
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
|
||||
map["type"] = MANUAL_CONTROL
|
||||
map["plateNumber"] = AppConfigInfo.plateNumber ?: ""
|
||||
getNetWorkApi().takeOver(map)
|
||||
}
|
||||
}
|
||||
onSuccess {
|
||||
if (it.result != null) {
|
||||
retryMap.remove(MANUAL_CONTROL)
|
||||
onSuccess.invoke()
|
||||
} else {
|
||||
if (retryMap[MANUAL_CONTROL]!! <= 3) {
|
||||
retryMap[MANUAL_CONTROL] = retryMap[MANUAL_CONTROL]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else {
|
||||
onError.invoke("manualControl result is null")
|
||||
}
|
||||
}
|
||||
}
|
||||
onError {
|
||||
if (retryMap[MANUAL_CONTROL]!! <= 3) {
|
||||
retryMap[MANUAL_CONTROL] = retryMap[MANUAL_CONTROL]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else if (it.message != null) {
|
||||
onError.invoke(it.message!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun overTake(onSuccess: (() -> Unit), onError: ((String) -> Unit)) {
|
||||
request<BaseResponse<Any>> {
|
||||
start {
|
||||
retryMap[OVER_TAKE] = retryMap[OVER_TAKE] ?: 0 + 1
|
||||
}
|
||||
loader {
|
||||
apiCall {
|
||||
val map = mutableMapOf<String, Any>()
|
||||
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
|
||||
map["type"] = OVER_TAKE
|
||||
map["plateNumber"] = AppConfigInfo.plateNumber ?: ""
|
||||
getNetWorkApi().takeOver(map)
|
||||
}
|
||||
}
|
||||
onSuccess {
|
||||
if (it.result != null) {
|
||||
retryMap.remove(OVER_TAKE)
|
||||
onSuccess.invoke()
|
||||
} else {
|
||||
if (retryMap[OVER_TAKE]!! <= 3) {
|
||||
retryMap[OVER_TAKE] = retryMap[OVER_TAKE]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else {
|
||||
onError.invoke("overTake result is null")
|
||||
}
|
||||
}
|
||||
}
|
||||
onError {
|
||||
if (retryMap[OVER_TAKE]!! <= 3) {
|
||||
retryMap[OVER_TAKE] = retryMap[OVER_TAKE]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else if (it.message != null) {
|
||||
onError.invoke(it.message!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun lineToLeft(onSuccess: (() -> Unit), onError: ((String) -> Unit)) {
|
||||
request<BaseResponse<Any>> {
|
||||
start {
|
||||
retryMap[LINE_TO_LEFT] = retryMap[LINE_TO_LEFT] ?: 0 + 1
|
||||
}
|
||||
loader {
|
||||
apiCall {
|
||||
val map = mutableMapOf<String, Any>()
|
||||
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
|
||||
map["type"] = LINE_TO_LEFT
|
||||
map["plateNumber"] = AppConfigInfo.plateNumber ?: ""
|
||||
getNetWorkApi().takeOver(map)
|
||||
}
|
||||
}
|
||||
onSuccess {
|
||||
if (it.result != null) {
|
||||
retryMap.remove(LINE_TO_LEFT)
|
||||
onSuccess.invoke()
|
||||
} else {
|
||||
if (retryMap[LINE_TO_LEFT]!! <= 3) {
|
||||
retryMap[LINE_TO_LEFT] = retryMap[LINE_TO_LEFT]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else {
|
||||
onError.invoke("lineToLeft result is null")
|
||||
}
|
||||
}
|
||||
}
|
||||
onError {
|
||||
if (retryMap[LINE_TO_LEFT]!! <= 3) {
|
||||
retryMap[LINE_TO_LEFT] = retryMap[LINE_TO_LEFT]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else if (it.message != null) {
|
||||
onError.invoke(it.message!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun lineToRight(onSuccess: (() -> Unit), onError: ((String) -> Unit)) {
|
||||
request<BaseResponse<Any>> {
|
||||
start {
|
||||
retryMap[LINE_TO_RIGHT] = retryMap[LINE_TO_RIGHT] ?: 0 + 1
|
||||
}
|
||||
loader {
|
||||
apiCall {
|
||||
val map = mutableMapOf<String, Any>()
|
||||
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
|
||||
map["type"] = LINE_TO_RIGHT
|
||||
map["plateNumber"] = AppConfigInfo.plateNumber ?: ""
|
||||
getNetWorkApi().takeOver(map)
|
||||
}
|
||||
}
|
||||
onSuccess {
|
||||
if (it.result != null) {
|
||||
retryMap.remove(LINE_TO_RIGHT)
|
||||
onSuccess.invoke()
|
||||
} else {
|
||||
if (retryMap[LINE_TO_RIGHT]!! <= 3) {
|
||||
retryMap[LINE_TO_RIGHT] = retryMap[LINE_TO_RIGHT]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else {
|
||||
onError.invoke("lineToRight result is null")
|
||||
}
|
||||
}
|
||||
}
|
||||
onError {
|
||||
if (retryMap[LINE_TO_RIGHT]!! <= 3) {
|
||||
retryMap[LINE_TO_RIGHT] = retryMap[LINE_TO_RIGHT]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else if (it.message != null) {
|
||||
onError.invoke(it.message!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun pullOver(onSuccess: (() -> Unit), onError: ((String) -> Unit)) {
|
||||
request<BaseResponse<Any>> {
|
||||
start {
|
||||
retryMap[PULL_OVER] = retryMap[PULL_OVER] ?: 0 + 1
|
||||
}
|
||||
loader {
|
||||
apiCall {
|
||||
val map = mutableMapOf<String, Any>()
|
||||
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
|
||||
map["type"] = PULL_OVER
|
||||
map["plateNumber"] = AppConfigInfo.plateNumber ?: ""
|
||||
getNetWorkApi().takeOver(map)
|
||||
}
|
||||
}
|
||||
onSuccess {
|
||||
if (it.result != null) {
|
||||
retryMap.remove(PULL_OVER)
|
||||
onSuccess.invoke()
|
||||
} else {
|
||||
if (retryMap[PULL_OVER]!! <= 3) {
|
||||
retryMap[PULL_OVER] = retryMap[PULL_OVER]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else {
|
||||
onError.invoke("pullOver result is null")
|
||||
}
|
||||
}
|
||||
}
|
||||
onError {
|
||||
if (retryMap[PULL_OVER]!! <= 3) {
|
||||
retryMap[PULL_OVER] = retryMap[PULL_OVER]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else if (it.message != null) {
|
||||
onError.invoke(it.message!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun emergencyStop(onSuccess: (() -> Unit), onError: ((String) -> Unit)) {
|
||||
request<BaseResponse<Any>> {
|
||||
start {
|
||||
retryMap[EMERGENCY_STOP] = retryMap[EMERGENCY_STOP] ?: 0 + 1
|
||||
}
|
||||
loader {
|
||||
apiCall {
|
||||
val map = mutableMapOf<String, Any>()
|
||||
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
|
||||
map["type"] = EMERGENCY_STOP
|
||||
map["plateNumber"] = AppConfigInfo.plateNumber ?: ""
|
||||
getNetWorkApi().takeOver(map)
|
||||
}
|
||||
}
|
||||
onSuccess {
|
||||
if (it.result != null) {
|
||||
retryMap.remove(EMERGENCY_STOP)
|
||||
onSuccess.invoke()
|
||||
} else {
|
||||
if (retryMap[EMERGENCY_STOP]!! <= 3) {
|
||||
retryMap[EMERGENCY_STOP] = retryMap[EMERGENCY_STOP]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else {
|
||||
onError.invoke("emergencyStop result is null")
|
||||
}
|
||||
}
|
||||
}
|
||||
onError {
|
||||
if (retryMap[EMERGENCY_STOP]!! <= 3) {
|
||||
retryMap[EMERGENCY_STOP] = retryMap[EMERGENCY_STOP]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else if (it.message != null) {
|
||||
onError.invoke(it.message!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun takeOverRequest(onSuccess: (() -> Unit), onError: ((String) -> Unit)) {
|
||||
request<BaseResponse<Any>> {
|
||||
start {
|
||||
retryMap[TAKE_OVER_REQUEST] = retryMap[TAKE_OVER_REQUEST] ?: 0 + 1
|
||||
}
|
||||
loader {
|
||||
apiCall {
|
||||
val map = mutableMapOf<String, Any>()
|
||||
map["sn"] = MoGoAiCloudClientConfig.getInstance().sn
|
||||
map["type"] = TAKE_OVER_REQUEST
|
||||
map["plateNumber"] = AppConfigInfo.plateNumber ?: ""
|
||||
getNetWorkApi().takeOver(map)
|
||||
}
|
||||
}
|
||||
onSuccess {
|
||||
if (it.result != null) {
|
||||
retryMap.remove(TAKE_OVER_REQUEST)
|
||||
onSuccess.invoke()
|
||||
} else {
|
||||
if (retryMap[TAKE_OVER_REQUEST]!! <= 3) {
|
||||
retryMap[TAKE_OVER_REQUEST] = retryMap[TAKE_OVER_REQUEST]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else {
|
||||
onError.invoke("takeOverRequest result is null")
|
||||
}
|
||||
}
|
||||
}
|
||||
onError {
|
||||
if (retryMap[TAKE_OVER_REQUEST]!! <= 3) {
|
||||
retryMap[TAKE_OVER_REQUEST] = retryMap[TAKE_OVER_REQUEST]!! + 1
|
||||
manualControl(onSuccess, onError)
|
||||
} else if (it.message != null) {
|
||||
onError.invoke(it.message!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,7 +5,6 @@ import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.setting.CallerSeatPressureManager
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import kotlinx.android.synthetic.main.view_seat_pressure_setting.view.tb_co_driver
|
||||
import kotlinx.android.synthetic.main.view_seat_pressure_setting.view.tb_main_driver
|
||||
@@ -42,7 +41,6 @@ class SeatPressureSettingView @JvmOverloads constructor(
|
||||
}
|
||||
mainDriverStatus = isChecked
|
||||
CallerAutoPilotControlManager.sendSeatPressure(mainDriverStatus,coDriverStatus,rearRowStatus)
|
||||
updateBtnBg(mainDriverStatus,coDriverStatus,rearRowStatus)
|
||||
}
|
||||
//副驾
|
||||
tb_co_driver.isChecked = coDriverStatus
|
||||
@@ -52,7 +50,6 @@ class SeatPressureSettingView @JvmOverloads constructor(
|
||||
}
|
||||
coDriverStatus = isChecked
|
||||
CallerAutoPilotControlManager.sendSeatPressure(mainDriverStatus,coDriverStatus,rearRowStatus)
|
||||
updateBtnBg(mainDriverStatus,coDriverStatus,rearRowStatus)
|
||||
}
|
||||
//后排
|
||||
tb_rear_row.isChecked = rearRowStatus
|
||||
@@ -62,19 +59,8 @@ class SeatPressureSettingView @JvmOverloads constructor(
|
||||
}
|
||||
rearRowStatus = isChecked
|
||||
CallerAutoPilotControlManager.sendSeatPressure(mainDriverStatus,coDriverStatus,rearRowStatus)
|
||||
updateBtnBg(mainDriverStatus,coDriverStatus,rearRowStatus)
|
||||
}
|
||||
}
|
||||
|
||||
//TODO 看是否有需要
|
||||
private fun updateBtnBg(driver: Boolean,copilot: Boolean,backRow: Boolean){
|
||||
if(driver || copilot || backRow){
|
||||
//主驾、副驾、后排只要有一个位置有人则开关按钮就显示有人状态
|
||||
CallerSeatPressureManager.invokeUpdateBgEvent(true)
|
||||
}else{
|
||||
//所有座位都没有人则显示无人状态
|
||||
CallerSeatPressureManager.invokeUpdateBgEvent(false)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
package com.mogo.eagle.core.function.hmi.ui.vehicle
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.mogo.eagle.core.data.enums.EventTypeEnumNew
|
||||
import com.mogo.eagle.core.data.msgbox.AutopilotMsg
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxType
|
||||
import com.mogo.eagle.core.data.msgbox.V2XMsg
|
||||
import com.mogo.eagle.core.data.takeover.TAKE_OVER_REQUEST
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
|
||||
import com.mogo.eagle.core.function.call.setting.CallerTakeOverManager
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import com.mogo.eagle.core.utilcode.util.SPUtils
|
||||
import com.mogo.eagle.core.utilcode.util.SoundUtils
|
||||
import kotlinx.android.synthetic.main.view_remote_take_over_autopilot.view.*
|
||||
import kotlinx.android.synthetic.main.view_sop_setting.view.*
|
||||
|
||||
class TakeOverAutopilotView @JvmOverloads constructor(
|
||||
context: Context, attrs: AttributeSet? = null
|
||||
) : ConstraintLayout(context, attrs) {
|
||||
|
||||
private var takeOverRequest: Boolean = false
|
||||
|
||||
init {
|
||||
LayoutInflater.from(context).inflate(R.layout.view_remote_take_over_autopilot, this, true)
|
||||
initView()
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
//人工接管
|
||||
btn_manual_control.setOnClickListener {
|
||||
// 退出自驾
|
||||
CallerAutoPilotControlManager.cancelAutoPilot()
|
||||
// CallerDevaToolsManager.takeOver(MANUAL_CONTROL)
|
||||
}
|
||||
//超车
|
||||
btn_over_take.setOnClickListener {
|
||||
// 超车
|
||||
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(3)
|
||||
// CallerDevaToolsManager.takeOver(OVER_TAKE)
|
||||
}
|
||||
btn_line_to_left.setOnClickListener {
|
||||
// 向左变道
|
||||
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(1)
|
||||
// CallerDevaToolsManager.takeOver(LINE_TO_LEFT)
|
||||
}
|
||||
btn_line_to_right.setOnClickListener {
|
||||
// 向右变道
|
||||
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(2)
|
||||
// CallerDevaToolsManager.takeOver(LINE_TO_RIGHT)
|
||||
}
|
||||
btn_pull_over.setOnClickListener {
|
||||
// 靠边停车
|
||||
CallerAutoPilotControlManager.sendPlanningPullOverCmd(1)
|
||||
// CallerDevaToolsManager.takeOver(PULL_OVER)
|
||||
}
|
||||
btn_emergency_stop.setOnClickListener {
|
||||
// 紧急停车
|
||||
CallerAutoPilotControlManager.sendPlanningPullOverCmd(3)
|
||||
// CallerDevaToolsManager.takeOver(EMERGENCY_STOP)
|
||||
}
|
||||
//接管请求
|
||||
btn_take_over_request.setOnClickListener {
|
||||
// takeOverRequest 执行时,避免多次提示
|
||||
if (takeOverRequest) {
|
||||
return@setOnClickListener
|
||||
}
|
||||
// 接管请求提示
|
||||
CallerDevaToolsManager.takeOver(TAKE_OVER_REQUEST)
|
||||
CallerHmiManager.warningV2X(
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.poiType,
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.content,
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.tts,
|
||||
object : IMoGoWarningStatusListener {
|
||||
override fun onShow() {
|
||||
takeOverRequest = true
|
||||
CallerTakeOverManager.invokeTakeOverEvent(true)
|
||||
//加入消息盒子
|
||||
CallerMsgBoxManager.saveMsgBox(
|
||||
MsgBoxBean(
|
||||
MsgBoxType.AUTOPILOT, AutopilotMsg(
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.poiType.toInt(),
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.content,
|
||||
EventTypeEnumNew.TAKE_OVER_EVENT.tts,
|
||||
System.currentTimeMillis()
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onDismiss() {
|
||||
takeOverRequest = false
|
||||
CallerTakeOverManager.invokeTakeOverEvent(false)
|
||||
}
|
||||
},expireTime =3000L, isFromObu = false
|
||||
)
|
||||
SoundUtils.playRing(context)
|
||||
}
|
||||
//恢复自动决策
|
||||
btn_take_over_recover.setOnClickListener {
|
||||
CallerAutoPilotControlManager.sendPlanningLineChangeCmd(4)
|
||||
return@setOnClickListener
|
||||
}
|
||||
//AEB开关
|
||||
tb_aeb.isChecked = SPUtils.getInstance().getBoolean("aeb",false)
|
||||
tb_aeb.setOnCheckedChangeListener{ compoundButton, isChecked ->
|
||||
if(!compoundButton.isPressed){
|
||||
return@setOnCheckedChangeListener
|
||||
}
|
||||
CallerAutoPilotControlManager.sendAebCmd(isChecked)
|
||||
SPUtils.getInstance().put("aeb",isChecked)
|
||||
}
|
||||
//绕障开关
|
||||
tb_lane_change.isChecked = SPUtils.getInstance().getBoolean("lane_change",false)
|
||||
tb_lane_change.setOnCheckedChangeListener{ compoundButton, isChecked ->
|
||||
if(!compoundButton.isPressed){
|
||||
return@setOnCheckedChangeListener
|
||||
}
|
||||
CallerAutoPilotControlManager.sendLaneChangeRestrainValid(isChecked)
|
||||
SPUtils.getInstance().put("lane_change",isChecked)
|
||||
}
|
||||
//停车让行开关
|
||||
tb_stop_yield.isChecked = SPUtils.getInstance().getBoolean("stop_yield",false)
|
||||
tb_stop_yield.setOnCheckedChangeListener{ compoundButton, isChecked ->
|
||||
if(!compoundButton.isPressed){
|
||||
return@setOnCheckedChangeListener
|
||||
}
|
||||
CallerAutoPilotControlManager.sendStopYieldValid(isChecked)
|
||||
SPUtils.getInstance().put("stop_yield",isChecked)
|
||||
}
|
||||
//地图限速开关
|
||||
tb_map_speed.isChecked = SPUtils.getInstance().getBoolean("map_speed",false)
|
||||
tb_map_speed.setOnCheckedChangeListener { compoundButton, isChecked ->
|
||||
if(!compoundButton.isPressed){
|
||||
return@setOnCheckedChangeListener
|
||||
}
|
||||
CallerAutoPilotControlManager.sendHadmapSpeedLimitValid(isChecked)
|
||||
SPUtils.getInstance().put("map_speed",isChecked)
|
||||
}
|
||||
//环岛模式
|
||||
tb_ramp.isChecked = SPUtils.getInstance().getBoolean("ramp",false)
|
||||
tb_ramp.setOnCheckedChangeListener { compoundButton, isChecked ->
|
||||
if(!compoundButton.isPressed){
|
||||
return@setOnCheckedChangeListener
|
||||
}
|
||||
CallerAutoPilotControlManager.sendRampThetaValid(isChecked)
|
||||
SPUtils.getInstance().put("ramp",isChecked)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -14,10 +14,12 @@ import com.mogo.eagle.core.data.msgbox.V2XMsg
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoParallelDrivingStatusListener
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
|
||||
import com.mogo.eagle.core.function.api.setting.ITakeOverEventListener
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerParallelDrivingListenerManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager.saveMsgBox
|
||||
import com.mogo.eagle.core.function.call.setting.CallerTakeOverManager
|
||||
import com.mogo.eagle.core.function.hmi.R
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
@@ -33,7 +35,7 @@ class TakeOverView @JvmOverloads constructor(
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener,
|
||||
IMoGoParallelDrivingStatusListener {
|
||||
IMoGoParallelDrivingStatusListener,ITakeOverEventListener {
|
||||
|
||||
companion object {
|
||||
const val TAG = "TakeOverView"
|
||||
@@ -54,6 +56,7 @@ class TakeOverView @JvmOverloads constructor(
|
||||
super.onAttachedToWindow()
|
||||
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
|
||||
CallerParallelDrivingListenerManager.addListener(TAG,this)
|
||||
CallerTakeOverManager.addListener(TAG,this)
|
||||
}
|
||||
|
||||
override fun onAutopilotStatusResponse(state: Int) {
|
||||
@@ -169,6 +172,7 @@ class TakeOverView @JvmOverloads constructor(
|
||||
super.onDetachedFromWindow()
|
||||
CallerAutoPilotStatusListenerManager.removeListener(TAG)
|
||||
CallerParallelDrivingListenerManager.removeListener(TAG)
|
||||
CallerTakeOverManager.removeListener(TAG)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -300,4 +304,14 @@ class TakeOverView @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
override fun onTakeOverEvent(isShow: Boolean) {
|
||||
ThreadUtils.runOnUiThread {
|
||||
if(isShow){
|
||||
this@TakeOverView.visibility = View.VISIBLE
|
||||
}else{
|
||||
this@TakeOverView.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<gradient
|
||||
android:startColor="#A7D3F6"
|
||||
android:endColor="#8C9AFF"
|
||||
/>
|
||||
<corners android:radius="20px" />
|
||||
</shape>
|
||||
@@ -3,7 +3,8 @@
|
||||
android:layout_width="@dimen/dp_800"
|
||||
android:layout_height="@dimen/dp_1100"
|
||||
android:background="@color/color_D4D8DC"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
>
|
||||
|
||||
<Button
|
||||
android:id="@+id/mStopCarBtn"
|
||||
@@ -42,6 +43,7 @@
|
||||
/>
|
||||
|
||||
<com.mogo.eagle.core.function.hmi.ui.setting.SeatPressureSettingView
|
||||
android:id="@+id/seatPressureSettingView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/mStartCarBtn"
|
||||
@@ -51,7 +53,13 @@
|
||||
/>
|
||||
|
||||
|
||||
|
||||
<com.mogo.eagle.core.function.hmi.ui.vehicle.TakeOverAutopilotView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/seatPressureSettingView"
|
||||
/>
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -0,0 +1,187 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="@dimen/dp_631"
|
||||
android:layout_height="@dimen/dp_1250"
|
||||
>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_manual_control"
|
||||
style="?android:attr/borderlessButtonStyle"
|
||||
android:layout_width="@dimen/dp_502"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_80"
|
||||
android:background="@drawable/remote_take_over_autopilot_bg"
|
||||
android:gravity="center"
|
||||
android:text="@string/hmi_take_over"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_34"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_over_take"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
android:gravity="center"
|
||||
android:text="@string/hmi_over_take"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
app:layout_constraintStart_toStartOf="@+id/btn_manual_control"
|
||||
app:layout_constraintTop_toBottomOf="@+id/btn_manual_control" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_line_to_left"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
android:gravity="center"
|
||||
android:text="@string/hmi_line_to_left"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
app:layout_constraintEnd_toStartOf="@+id/btn_line_to_right"
|
||||
app:layout_constraintStart_toEndOf="@+id/btn_over_take"
|
||||
app:layout_constraintTop_toBottomOf="@+id/btn_manual_control" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_line_to_right"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
android:gravity="center"
|
||||
android:text="@string/hmi_line_to_right"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
app:layout_constraintEnd_toEndOf="@+id/btn_manual_control"
|
||||
app:layout_constraintTop_toBottomOf="@+id/btn_manual_control" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_pull_over"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
android:gravity="center"
|
||||
android:text="@string/hmi_pull_over"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
app:layout_constraintStart_toStartOf="@+id/btn_manual_control"
|
||||
app:layout_constraintTop_toBottomOf="@+id/btn_over_take" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_emergency_stop"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
android:gravity="center"
|
||||
android:text="@string/hmi_emergency_stop"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
app:layout_constraintEnd_toStartOf="@+id/btn_line_to_right"
|
||||
app:layout_constraintStart_toEndOf="@+id/btn_over_take"
|
||||
app:layout_constraintTop_toBottomOf="@+id/btn_line_to_left" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_take_over_request"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
android:gravity="center"
|
||||
android:text="@string/hmi_take_over_request"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
app:layout_constraintEnd_toEndOf="@+id/btn_manual_control"
|
||||
app:layout_constraintTop_toBottomOf="@+id/btn_line_to_right" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_take_over_recover"
|
||||
style="?android:attr/borderlessButtonStyle"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
android:gravity="center"
|
||||
android:text="@string/hmi_take_over_recover"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
app:layout_constraintTop_toBottomOf="@+id/btn_emergency_stop"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@id/tb_lane_change"
|
||||
/>
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/tb_lane_change"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
app:layout_constraintTop_toBottomOf="@id/btn_emergency_stop"
|
||||
app:layout_constraintLeft_toRightOf="@id/btn_take_over_recover"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:textOff="@string/hmi_open_lane_change"
|
||||
android:textOn="@string/hmi_close_lane_change"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/tb_aeb"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
app:layout_constraintTop_toBottomOf="@id/tb_lane_change"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@id/tb_stop_yield"
|
||||
android:textOff="@string/hmi_open_aeb"
|
||||
android:textOn="@string/hmi_close_aeb"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/tb_stop_yield"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
app:layout_constraintTop_toBottomOf="@id/tb_lane_change"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintLeft_toRightOf="@id/tb_aeb"
|
||||
android:textOff="@string/hmi_open_stop_yield"
|
||||
android:textOn="@string/hmi_close_stop_yield"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/tb_map_speed"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
app:layout_constraintTop_toBottomOf="@id/tb_aeb"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@id/tb_ramp"
|
||||
android:textOff="@string/hmi_open_map_speed"
|
||||
android:textOn="@string/hmi_close_map_speed"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
<ToggleButton
|
||||
android:id="@+id/tb_ramp"
|
||||
android:layout_width="@dimen/dp_147"
|
||||
android:layout_height="@dimen/dp_94"
|
||||
android:layout_marginTop="@dimen/dp_40"
|
||||
app:layout_constraintTop_toBottomOf="@id/tb_aeb"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintLeft_toRightOf="@id/tb_map_speed"
|
||||
android:textOff="@string/hmi_open_ramp"
|
||||
android:textOn="@string/hmi_close_ramp"
|
||||
android:textColor="#FF181D6D"
|
||||
android:textSize="@dimen/sp_30"
|
||||
android:gravity="center"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -131,6 +131,25 @@
|
||||
|
||||
<string name="road_cross_live_tip">蘑菇为您实时护航中,请放心驾驶!</string>
|
||||
|
||||
<string name="hmi_take_over">人工接管</string>
|
||||
<string name="hmi_over_take">超车</string>
|
||||
<string name="hmi_line_to_left">向左变道</string>
|
||||
<string name="hmi_line_to_right">向右变道</string>
|
||||
<string name="hmi_pull_over">靠边停车</string>
|
||||
<string name="hmi_emergency_stop">应急停车</string>
|
||||
<string name="hmi_take_over_request">接管请求</string>
|
||||
<string name="hmi_take_over_recover">恢复自动决策</string>
|
||||
<string name="hmi_open_lane_change">障碍物模式</string>
|
||||
<string name="hmi_close_lane_change">障碍物模式</string>
|
||||
<string name="hmi_open_aeb">制动模式</string>
|
||||
<string name="hmi_close_aeb">制动模式</string>
|
||||
<string name="hmi_open_stop_yield">停车</string>
|
||||
<string name="hmi_close_stop_yield">停车</string>
|
||||
<string name="hmi_open_map_speed">限速模式</string>
|
||||
<string name="hmi_close_map_speed">限速模式</string>
|
||||
<string name="hmi_open_ramp">环岛模式</string>
|
||||
<string name="hmi_close_ramp">环岛模式</string>
|
||||
|
||||
<string name="hmi_main_driver">主驾</string>
|
||||
<string name="hmi_co_driver">副驾</string>
|
||||
<string name="hmi_rear_row">后排</string>
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.mogo.eagle.core.data.takeover
|
||||
|
||||
import androidx.annotation.IntDef
|
||||
|
||||
const val MANUAL_CONTROL = 0
|
||||
const val OVER_TAKE = 1
|
||||
const val LINE_TO_LEFT = 2
|
||||
const val LINE_TO_RIGHT = 3
|
||||
const val PULL_OVER = 4
|
||||
const val EMERGENCY_STOP = 5
|
||||
const val TAKE_OVER_REQUEST = 6
|
||||
|
||||
@IntDef(
|
||||
MANUAL_CONTROL,
|
||||
OVER_TAKE,
|
||||
LINE_TO_LEFT,
|
||||
LINE_TO_RIGHT,
|
||||
PULL_OVER,
|
||||
EMERGENCY_STOP,
|
||||
TAKE_OVER_REQUEST
|
||||
)
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
annotation class TakeOverAnnotation(vararg val type: Int) {
|
||||
}
|
||||
|
||||
|
||||
@@ -194,6 +194,46 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider {
|
||||
*/
|
||||
fun sendDetouringSpeed(speed: Double): Boolean
|
||||
|
||||
/**
|
||||
* AEB开关
|
||||
* isEnable = true 开启
|
||||
* isEnable = false 关闭
|
||||
* @return boolean
|
||||
*/
|
||||
fun sendAebCmd(isEnable: Boolean): Boolean
|
||||
|
||||
/**
|
||||
* 限制绕障开关
|
||||
* isEnable = true 限制绕障
|
||||
* isEnable = false 正常绕障
|
||||
* @return boolean
|
||||
*/
|
||||
fun sendLaneChangeRestrainValid(isEnable: Boolean): Boolean
|
||||
|
||||
/**
|
||||
* 停车让行线前避让等待开关
|
||||
* isEnable = true 停车让行线前需要避让等待
|
||||
* isEnable = false 停车让行线前无需避让等待
|
||||
* @return boolean
|
||||
*/
|
||||
fun sendStopYieldValid(isEnable: Boolean): Boolean
|
||||
|
||||
/**
|
||||
* 地图限速功能开关
|
||||
* isEnable = true 使用地图限速功能
|
||||
* isEnable = false 不使用地图限速功能
|
||||
* @return boolean
|
||||
*/
|
||||
fun sendHadmapSpeedLimitValid(isEnable: Boolean): Boolean
|
||||
|
||||
/**
|
||||
* 环岛模式开关
|
||||
* isEnable = true 环岛模式
|
||||
* isEnable = false 普通模式
|
||||
* @return boolean
|
||||
*/
|
||||
fun sendRampThetaValid(isEnable: Boolean): Boolean
|
||||
|
||||
/**
|
||||
* 弱网减速停车策略开关
|
||||
* isEnable = true 使用弱网减速停车策略
|
||||
@@ -539,6 +579,8 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider {
|
||||
|
||||
fun sendPlanningLineChangeCmd(cmd: Int): Boolean
|
||||
|
||||
fun sendPlanningPullOverCmd(pullOverCmd: Int): Boolean
|
||||
|
||||
/**
|
||||
* 设置座椅压力接口
|
||||
* @param driver 主驾是否有人
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.mogo.eagle.core.data.deva.report.WorkOrderReportInfo
|
||||
import com.mogo.eagle.core.data.deva.scene.SceneModule
|
||||
import com.mogo.eagle.core.data.deva.scene.SceneTAG
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.takeover.TakeOverAnnotation
|
||||
import com.mogo.eagle.core.function.api.devatools.apm.*
|
||||
import com.mogo.eagle.core.function.api.devatools.block.*
|
||||
import com.mogo.eagle.core.function.api.devatools.strict.*
|
||||
@@ -321,4 +322,9 @@ interface IDevaToolsProvider : IProvider {
|
||||
* 是否开启引导线动效
|
||||
*/
|
||||
fun setRouteDynamicColorEnable(enable: Boolean)
|
||||
|
||||
/**
|
||||
* 接管
|
||||
*/
|
||||
fun takeOver(@TakeOverAnnotation takeOverAnnotation: Int)
|
||||
}
|
||||
@@ -3,8 +3,8 @@ package com.mogo.eagle.core.function.api.setting
|
||||
/**
|
||||
* 座椅压力事件监听回调接口
|
||||
*/
|
||||
interface ISeatPressureEventListener {
|
||||
interface ITakeOverEventListener {
|
||||
|
||||
fun onUpdateBgEvent(isPress: Boolean){}
|
||||
fun onTakeOverEvent(isShow: Boolean){}
|
||||
|
||||
}
|
||||
@@ -382,6 +382,56 @@ object CallerAutoPilotControlManager {
|
||||
return providerApi?.sendDetouringSpeed(speed)
|
||||
}
|
||||
|
||||
/**
|
||||
* AEB开关
|
||||
* isEnable = true 开启
|
||||
* isEnable = false 关闭
|
||||
* @return boolean
|
||||
*/
|
||||
fun sendAebCmd(isEnable: Boolean): Boolean?{
|
||||
return providerApi?.sendAebCmd(isEnable)
|
||||
}
|
||||
|
||||
/**
|
||||
* 限制绕障开关
|
||||
* isEnable = true 限制绕障
|
||||
* isEnable = false 正常绕障
|
||||
* @return boolean
|
||||
*/
|
||||
fun sendLaneChangeRestrainValid(isEnable: Boolean): Boolean?{
|
||||
return providerApi?.sendLaneChangeRestrainValid(isEnable)
|
||||
}
|
||||
|
||||
/**
|
||||
* 停车让行线前避让等待开关
|
||||
* isEnable = true 停车让行线前需要避让等待
|
||||
* isEnable = false 停车让行线前无需避让等待
|
||||
* @return boolean
|
||||
*/
|
||||
fun sendStopYieldValid(isEnable: Boolean): Boolean?{
|
||||
return providerApi?.sendStopYieldValid(isEnable)
|
||||
}
|
||||
|
||||
/**
|
||||
* 地图限速功能开关
|
||||
* isEnable = true 使用地图限速功能
|
||||
* isEnable = false 不使用地图限速功能
|
||||
* @return boolean
|
||||
*/
|
||||
fun sendHadmapSpeedLimitValid(isEnable: Boolean): Boolean?{
|
||||
return providerApi?.sendHadmapSpeedLimitValid(isEnable)
|
||||
}
|
||||
|
||||
/**
|
||||
* 环岛模式开关
|
||||
* isEnable = true 环岛模式
|
||||
* isEnable = false 普通模式
|
||||
* @return boolean
|
||||
*/
|
||||
fun sendRampThetaValid(isEnable: Boolean): Boolean?{
|
||||
return providerApi?.sendRampThetaValid(isEnable)
|
||||
}
|
||||
|
||||
/**
|
||||
* 弱网减速停车策略开关
|
||||
* isEnable = true 使用弱网减速停车策略
|
||||
@@ -846,6 +896,10 @@ object CallerAutoPilotControlManager {
|
||||
return providerApi?.sendPlanningLineChangeCmd(cmd) ?: false
|
||||
}
|
||||
|
||||
fun sendPlanningPullOverCmd(pullOverCmd: Int): Boolean{
|
||||
return providerApi?.sendPlanningPullOverCmd(pullOverCmd)?: false
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置座椅压力接口
|
||||
* @param driver 主驾是否有人
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.mogo.eagle.core.data.deva.report.WorkOrderReportInfo
|
||||
import com.mogo.eagle.core.data.deva.scene.SceneModule
|
||||
import com.mogo.eagle.core.data.deva.scene.SceneTAG
|
||||
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
|
||||
import com.mogo.eagle.core.data.takeover.TakeOverAnnotation
|
||||
import com.mogo.eagle.core.function.api.devatools.IDevaToolsProvider
|
||||
import com.mogo.eagle.core.function.api.devatools.block.*
|
||||
import com.mogo.eagle.core.function.api.devatools.download.*
|
||||
@@ -400,4 +401,11 @@ object CallerDevaToolsManager {
|
||||
fun setRouteDynamicColorEnable(enable: Boolean) {
|
||||
devaToolsProviderApi?.setRouteDynamicColorEnable(enable)
|
||||
}
|
||||
|
||||
/**
|
||||
* 接管
|
||||
*/
|
||||
fun takeOver(@TakeOverAnnotation takeOverAnnotation: Int) {
|
||||
devaToolsProviderApi?.takeOver(takeOverAnnotation)
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,18 @@
|
||||
package com.mogo.eagle.core.function.call.setting
|
||||
|
||||
import com.mogo.eagle.core.function.api.setting.ISeatPressureEventListener
|
||||
import com.mogo.eagle.core.function.api.setting.ITakeOverEventListener
|
||||
import com.mogo.eagle.core.function.call.base.CallerBase
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
/**
|
||||
* 座椅压力事件监听管理
|
||||
* 接管请求事件监听管理
|
||||
*/
|
||||
object CallerSeatPressureManager: CallerBase<ISeatPressureEventListener>() {
|
||||
object CallerTakeOverManager: CallerBase<ITakeOverEventListener>() {
|
||||
|
||||
fun invokeUpdateBgEvent(isPress: Boolean){
|
||||
fun invokeTakeOverEvent(isShow: Boolean){
|
||||
M_LISTENERS.forEach {
|
||||
val tag = it.key
|
||||
val listener = it.value
|
||||
listener.onUpdateBgEvent(isPress)
|
||||
listener.onTakeOverEvent(isShow)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1035,6 +1035,7 @@
|
||||
<dimen name="dp_1125">1125dp</dimen>
|
||||
<dimen name="dp_1170">1170dp</dimen>
|
||||
<dimen name="dp_1200">1200dp</dimen>
|
||||
<dimen name="dp_1250">1250dp</dimen>
|
||||
<dimen name="dp_1261">1261dp</dimen>
|
||||
<dimen name="dp_1300">1300dp</dimen>
|
||||
<dimen name="dp_1373">1373dp</dimen>
|
||||
|
||||
Reference in New Issue
Block a user