[3.4.0-map-sdk] loc wgs84 opt , get instead of callback , add func of traffic light cross road

This commit is contained in:
zhongchao
2023-09-21 19:33:37 +08:00
parent 056ec28709
commit 39b7d8907f
13 changed files with 175 additions and 245 deletions

View File

@@ -13,14 +13,6 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<!--刹车、转向-->
<com.mogo.eagle.core.function.hmi.ui.vehicle.SteeringBrakeView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"

View File

@@ -14,7 +14,6 @@ import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.commons.module.status.StatusDescriptor
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.data.map.MogoLocation
@@ -33,11 +32,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
import com.mogo.eagle.core.utilcode.util.CoordinateUtils
import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.eagle.core.utilcode.util.*
import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager
import com.mogo.och.common.module.biz.common.socketmessage.data.OCHOperationalMessage
import com.mogo.och.common.module.biz.constant.LoginStatusManager
@@ -54,22 +49,9 @@ import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceM
import com.mogo.och.common.module.map.AmapNaviToDestinationModel
import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil.coordinateConverterWgsToGcjLocations
import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.taxi.bean.PrepareTaskRespBean
import com.mogo.och.taxi.bean.QueryCarOrderByNoRespBean
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
import com.mogo.och.taxi.bean.StartServiceRespBean
import com.mogo.och.taxi.bean.TrajectoryListRespBean
import com.mogo.och.taxi.callback.IOCHTaxiAutopilotPlanningCallback
import com.mogo.och.taxi.callback.ITaxiADASStatusCallback
import com.mogo.och.taxi.callback.ITaxiCarServiceCallback
import com.mogo.och.taxi.callback.ITaxiControllerStatusCallback
import com.mogo.och.taxi.callback.ITaxiOrderStatusCallback
import com.mogo.och.taxi.callback.ITaxiTaskWithOrderCallback
import com.mogo.och.taxi.constant.TaskStatusEnum
import com.mogo.och.taxi.constant.TaskTypeEnum
import com.mogo.och.taxi.constant.TaxiCarServingStatusManager
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
import com.mogo.och.taxi.constant.TaxiUnmannedConst
import com.mogo.och.taxi.bean.*
import com.mogo.och.taxi.callback.*
import com.mogo.och.taxi.constant.*
import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.BUSINESSTYPE
import com.mogo.och.taxi.network.TaxiTaskWithOrderServiceManager
import com.mogo.och.taxi.ui.debug.DebugView
@@ -84,8 +66,6 @@ import io.reactivex.schedulers.Schedulers
import mogo.telematics.pad.MessagePad.ArrivalNotification
import mogo.telematics.pad.MessagePad.GlobalPathResp
import mogo_msg.MogoReportMsg.MogoReportMessage
import system_master.SsmInfo
import system_master.SystemStatusInfo
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.TimeUnit
@@ -183,7 +163,7 @@ object TaxiTaskModel {
return mCurrentTaskWithOrder
}
fun getCurrentOrderTrajectoryList(): MutableList<TrajectoryListRespBean.Result>? {
fun getCurrentOrderTrajectoryList(): MutableList<TrajectoryListRespBean.Result> {
return mTaskTrajectoryList
}
@@ -250,18 +230,26 @@ object TaxiTaskModel {
* false: 暂停启动自驾
*/
fun handleBrakeStatusChange(brakeStatus: Boolean) {
if (brakeStatus){
mControllerStatusCallback?.resumeOpenAutopilotNonManual()
}else{
mControllerStatusCallback?.pauseOpenAutopilotNonManual()
}
if (brakeStatus) {
mControllerStatusCallback?.resumeOpenAutopilotNonManual()
} else {
mControllerStatusCallback?.pauseOpenAutopilotNonManual()
}
}
private val mMogoAutopilotStatusListener: IMoGoAutopilotStatusListener =
object : IMoGoAutopilotStatusListener {
override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) {
DebugView.printInfoMsg("[域控连接状态变化] status=$status, reason=${if (TextUtils.isEmpty(reason)) "" else reason}")
DebugView.printInfoMsg(
"[域控连接状态变化] status=$status, reason=${
if (TextUtils.isEmpty(
reason
)
) "" else reason
}"
)
}
override fun onAutopilotGuardian(guardianInfo: MogoReportMessage?) {
TaxiTrajectoryManager.getInstance().onAutopilotGuardian(guardianInfo)
}
@@ -295,7 +283,8 @@ object TaxiTaskModel {
if ((FunctionBuildConfig.isDemoMode
&& checkCurrentTaskCondition()
&& QueryCurrentTaskRespBean.isStartTaskType(mCurrentTaskWithOrder)
)){
)
) {
// 当美化模式演示模式开启时且有订单、且为去往目的地状态维持自动驾驶icon开启状态
return
}
@@ -305,20 +294,20 @@ object TaxiTaskModel {
if ((FunctionBuildConfig.isDemoMode
&& checkCurrentTaskCondition()
&& QueryCurrentTaskRespBean.isStartTaskType(mCurrentTaskWithOrder)
)
)
) {
// 当美化模式演示模式开启时且有订单、且为去往目的地状态维持自动驾驶icon开启状态
return
}
if (mADASStatusCallback != null) {
mADASStatusCallback!!.onAutopilotDisable()
}
mADASStatusCallback?.onAutopilotDisable()
} else if (state == IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING) {
DebugView.printInfoMsg("[自驾状态变化] afterValue=STATUS_PARALLEL_DRIVINGmeaning=平行驾驶中")
if (FunctionBuildConfig.isDemoMode) {
if ((checkCurrentTaskCondition()
&& QueryCurrentTaskRespBean.isStartTaskType(mCurrentTaskWithOrder)
)
&& QueryCurrentTaskRespBean.isStartTaskType(
mCurrentTaskWithOrder
)
)
) { //订单中
// 当美化模式演示模式开启时且有订单、且为去往目的地状态维持自动驾驶icon开启状态
} else { //美化模式下没订单,显示人工驾驶
@@ -330,7 +319,6 @@ object TaxiTaskModel {
}
}
override fun onAutopilotSNRequest() {}
override fun onAutopilotArriveAtStation(arrivalNotification: ArrivalNotification?) {
i(TAG, "onAutopilotArriveAtStation = ${arrivalNotification.toString()}")
DebugView.printInfoMsg("[MAP到站通知] 上报到站location=${arrivalNotification?.endLocation}")
@@ -354,9 +342,6 @@ object TaxiTaskModel {
}
}
override fun onAutopilotStatusRespByQuery(status: SystemStatusInfo.StatusInfo) {}
override fun onSystemStatus(statusInf: SsmInfo.SsmStatusInf) {}
}
private val mMogoStatusChangedListener: IMogoStatusChangedListener =
@@ -402,7 +387,7 @@ object TaxiTaskModel {
if (checkCurrentTaskCondition()) {
d(TAG, "--------本地开始计算全路径数据---------- ")
//转换成高德坐标系
if (mCurrentTaskRoutePointsGcj!!.size > 0) {
if (mCurrentTaskRoutePointsGcj.size > 0) {
mCurrentTaskRoutePointsGcj.clear()
}
mCurrentTaskRoutePointsGcj.addAll(
@@ -450,7 +435,7 @@ object TaxiTaskModel {
return OCHOperationalMessage::class.java
}
override fun onMsgReceived(obj: OCHOperationalMessage) {
override fun onMsgReceived(obj: OCHOperationalMessage?) {
if (obj == null) {
d(TAG, "onMsgReceived = null")
return
@@ -478,17 +463,18 @@ object TaxiTaskModel {
}
private val localCalculateDistanceListener: IDistanceListener = object : IDistanceListener {
override fun distanceCallback(lastSumLength: Float) {
val lastTime = lastSumLength / TaxiUnmannedConst.TAXI_AVERAGE_SPEED * 3.6 //秒
override fun distanceCallback(distance: Float) {
val lastTime = distance / TaxiUnmannedConst.TAXI_AVERAGE_SPEED * 3.6 //秒
d(
TAG,
"dynamicCalculateRouteInfo: lastSumLength=$lastSumLength, lastTime=$lastTime, threadName=Thread.currentThread().name"
"dynamicCalculateRouteInfo: lastSumLength=$distance, lastTime=$lastTime, threadName=Thread.currentThread().name"
)
mTaxiTaskWithOrderCallbackMap.forEach {
val listener = it.value
listener.onTaskTripInfoLocalCalculateChanged(
lastSumLength.toLong(),
lastTime.toLong())
distance.toLong(),
lastTime.toLong()
)
}
}
}
@@ -520,7 +506,7 @@ object TaxiTaskModel {
)
routeArrivingTemp.add(temp)
}
mAutopilotPlanningCallback!!.routeResult(
mAutopilotPlanningCallback?.routeResult(
routeArriviedTemp,
routeArrivingTemp,
location
@@ -569,7 +555,7 @@ object TaxiTaskModel {
siteId: Long, isArriveAtEndSite: Boolean,
isArrivedNearestStation: Boolean = false
) {
if (mIsArrivedSiteTag){
if (mIsArrivedSiteTag) {
DebugView.printInfoMsg("arriveSite接口正在调用中")
i(TAG, message = "arriveSite接口正在调用中 mIsArrivedSite = $mIsArrivedSiteTag")
return
@@ -678,7 +664,7 @@ object TaxiTaskModel {
)
return
}
val result: QueryCurrentTaskRespBean.Result = data.data!!
val result: QueryCurrentTaskRespBean.Result? = data.data
d(
TAG,
"queryCurrentTaskOnce onSuccessresult=${GsonUtil.jsonFromObject(result)}"
@@ -705,15 +691,13 @@ object TaxiTaskModel {
}
//订单或者伪任务更新, 都去刷新下界面
if (mCurrentTaskWithOrder == null
|| !mCurrentTaskWithOrder!!.equals(result)
) {
if (mCurrentTaskWithOrder == null || mCurrentTaskWithOrder!! != result) {
d(TAG, "queryCurrentTaskOnce: 更新本地数据")
mCurrentTaskWithOrder = result
// 任务为空
if (result.endSite == null && result.order == null) {
if (result?.endSite == null && result?.order == null) {
d(TAG, "queryCurrentTaskOnce: 任务为空")
if (mDriveToNearestStationTask == null) {
mTaxiTaskWithOrderCallbackMap.forEach {
@@ -728,7 +712,7 @@ object TaxiTaskModel {
//8.29更新: 当前任务完成且订单状态为乘客已上车, 则立马去拉取任务 不再等120s,否则送驾任务要等120s后才能去执行
// 主要是解决A-B演练任务同时接到A-B订单状态流转的问题
//注意: 需要去除到达乘客上车点的节点, 这个节点不拉取任务
if (result?.currentStatus == TaskStatusEnum.CompleteTask.code
if (result.currentStatus == TaskStatusEnum.CompleteTask.code
) {
mADASStatusCallback?.updateAutopilotStatus()
mTaxiTaskWithOrderCallbackMap.forEach {
@@ -749,7 +733,7 @@ object TaxiTaskModel {
}
//根据lineId集合去查轨迹集合, 返回的只是接驾任务的line集合, 没有送驾任务
var linesIds = arrayListOf<Long>()
val linesIds = arrayListOf<Long>()
linesIds.add(result.lineId) // 当前任务的
result.order?.also {
linesIds.addAll(it.planningLines) // 接驾
@@ -886,7 +870,7 @@ object TaxiTaskModel {
object : OchCommonServiceCallback<BaseData> {
override fun onSuccess(data: BaseData?) {
DebugView.printInfoMsg("[开始任务] 请求successlindId=$lineId")
if (isStartAutopilot){
if (isStartAutopilot) {
startAutoPilot() //自驾开启
}
d(TAG, "startTask onSuccess: data=${GsonUtil.jsonFromObject(data)}")
@@ -911,7 +895,7 @@ object TaxiTaskModel {
})
}
fun prepareNextTask(delayTime: Long,siteId: Long) {
fun prepareNextTask(delayTime: Long, siteId: Long) {
DebugView.printInfoMsg("[PrepareNextTask] 准备发送请求, siteId=$siteId")
TaxiTaskWithOrderServiceManager.prepareTask(
mContext,
@@ -930,7 +914,7 @@ object TaxiTaskModel {
DebugView.printErrorMsg("[PrepareNextTask] 请求fail, code=$code ,msg=$msg")
d(TAG, "prepareNextTask onFail: code=$code ,msg=$msg")
if (LoginStatusManager.isLogin() && TaxiCarServingStatusManager.isCarServingStatus()) {
startPrepareTaskDelay(delayTime,siteId)
startPrepareTaskDelay(delayTime, siteId)
}
}
})
@@ -940,12 +924,12 @@ object TaxiTaskModel {
removePrepareTaskDelay()
mPrepareTaskDelayRunnable = Runnable {
prepareNextTask(delayTime,siteId)
prepareNextTask(delayTime, siteId)
}
mTaxiTaskWithOrderCallbackMap.forEach {
val listener = it.value
listener.onStartPrepareTaskUI(delayTime,true)
listener.onStartPrepareTaskUI(delayTime, true)
}
DebugView.printInfoMsg("[PrepareNextTask] 倒计时${delayTime / 1000}秒后prepareNextTask, siteId=$siteId")
UiThreadHandler.postDelayed(
@@ -960,7 +944,7 @@ object TaxiTaskModel {
UiThreadHandler.removeCallbacks(mPrepareTaskDelayRunnable)
mTaxiTaskWithOrderCallbackMap.forEach {
val listener = it.value
listener.onStartPrepareTaskUI(0,false)
listener.onStartPrepareTaskUI(0, false)
}
mPrepareTaskDelayRunnable = null
}
@@ -970,7 +954,13 @@ object TaxiTaskModel {
* 查询当前任务的轨迹
*/
fun queryTaskTrajectoryByLineIds(planningLineIds: Array<Long>, currentTaskLineId: Long) {
DebugView.printInfoMsg("[查询轨迹信息] 准备发送请求currentTaskLineId=$currentTaskLineId, planningLineIds=${GsonUtil.jsonFromObject(planningLineIds)}")
DebugView.printInfoMsg(
"[查询轨迹信息] 准备发送请求currentTaskLineId=$currentTaskLineId, planningLineIds=${
GsonUtil.jsonFromObject(
planningLineIds
)
}"
)
TaxiTaskWithOrderServiceManager.queryTrajectoryByLindIds(
mContext,
planningLineIds,
@@ -980,7 +970,13 @@ object TaxiTaskModel {
TAG,
"queryTaskTrajectoryByLineIds onSuccess: ${GsonUtil.jsonFromObject(data?.data)}"
)
DebugView.printInfoMsg("[查询轨迹信息] 请求success, currentTaskLineId=$currentTaskLineId, planningLineIds=${GsonUtil.jsonFromObject(planningLineIds)}")
DebugView.printInfoMsg(
"[查询轨迹信息] 请求success, currentTaskLineId=$currentTaskLineId, planningLineIds=${
GsonUtil.jsonFromObject(
planningLineIds
)
}"
)
data?.data?.also {
mTaskTrajectoryList.addAll(it)
mCurrentTaskTrajectory = it.first { currentTaskLineId == it.lineId }
@@ -1033,8 +1029,8 @@ object TaxiTaskModel {
//暂停接单状态下,去接单
DebugView.printInfoMsg("[开始接单] 准备发送请求")
TaxiTaskWithOrderServiceManager.startService(mContext,
CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().latitude,
CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().longitude,
getChassisLocationGCJ02().latitude,
getChassisLocationGCJ02().longitude,
object : OchCommonServiceCallback<StartServiceRespBean> {
override fun onSuccess(data: StartServiceRespBean?) {
if (data == null) return
@@ -1079,13 +1075,13 @@ object TaxiTaskModel {
paramIndexes = [-1]
)
fun startAutopilotByClick(){
fun startAutopilotByClick() {
//订单状态流转成功, 点击了开启自驾按钮, 启动自驾
if (QueryCurrentTaskRespBean.isStartTaskType(mCurrentTaskWithOrder)) {
startAutoPilot()
}else if (QueryCurrentTaskRespBean.isGetTaskType(mCurrentTaskWithOrder)){
} else if (QueryCurrentTaskRespBean.isGetTaskType(mCurrentTaskWithOrder)) {
startTask(mCurrentTaskWithOrder!!.lineId, true)
}else{
} else {
e(TAG, "task currentStatus is not StartTask.")
DebugView.printInfoMsg("[启自驾] task currentStatus is not StartTask")
}
@@ -1168,9 +1164,7 @@ object TaxiTaskModel {
mCurrentTaskWithOrder!!.lineId,
if (mCurrentTaskWithOrder!!.order != null) mCurrentTaskWithOrder!!.order!!.orderNo else ""
)
if (mControllerStatusCallback != null) {
mControllerStatusCallback!!.startOpenAutopilot()
}
mControllerStatusCallback?.startOpenAutopilot()
}
private fun initAutopilotControlParameters(): AutopilotControlParameters? {
@@ -1306,16 +1300,12 @@ object TaxiTaskModel {
curTaskAndOrder.endSite!!.gcjLat,
curTaskAndOrder.endSite!!.gcjLon
)
if (mAutopilotPlanningCallback != null) {
mAutopilotPlanningCallback!!.setLineMarker(startStation, endStation)
}
mAutopilotPlanningCallback?.setLineMarker(startStation, endStation)
}
}
private fun cleanLineMarker() {
if (mAutopilotPlanningCallback != null) {
mAutopilotPlanningCallback!!.setLineMarker(null, null)
}
mAutopilotPlanningCallback?.setLineMarker(null, null)
}
/**
@@ -1339,7 +1329,7 @@ object TaxiTaskModel {
// 登出
fun logout() {
loginService!!.loginOut(
loginService?.loginOut(
getChassisLocationGCJ02().latitude,
getChassisLocationGCJ02().longitude
)
@@ -1350,18 +1340,15 @@ object TaxiTaskModel {
//导航去订单终点目的地
fun startNaviToEndStation(isShow: Boolean) {
if (mCurrentTaskRoutePointsGcj == null) return
if (mCurrentTaskRoutePointsGcj.size > 0) { //使用自驾轨迹
if (mOrderStatusCallback != null) {
mOrderStatusCallback!!.onNaviToEnd(false, isShow)
}
mOrderStatusCallback?.onNaviToEnd(false, isShow)
} else { //若直接要显示导航地图则直接导航, 若不是则2s后若无轨迹数据使用高德导航
if (isShow && mOrderStatusCallback != null) {
mOrderStatusCallback!!.onNaviToEnd(true, true)
if (isShow) {
mOrderStatusCallback?.onNaviToEnd(true, true)
} else {
UiThreadHandler.postDelayed({
if (mCurrentTaskRoutePointsGcj.size == 0 && mOrderStatusCallback != null) {
mOrderStatusCallback!!.onNaviToEnd(true, false)
if (mCurrentTaskRoutePointsGcj.size == 0) {
mOrderStatusCallback?.onNaviToEnd(true, false)
}
}, 2000L)
}
@@ -1453,7 +1440,7 @@ object TaxiTaskModel {
d(
TAG, "stopAutoStartAutopilot = ${mCurrentTaskWithOrder?.currentStatus}"
)
if (QueryCurrentTaskRespBean.isGetTaskType(mCurrentTaskWithOrder)){
if (QueryCurrentTaskRespBean.isGetTaskType(mCurrentTaskWithOrder)) {
mControllerStatusCallback?.stopOpenAutopilotNonManual()
mTaxiTaskWithOrderCallbackMap.forEach {
val listener = it.value
@@ -1462,14 +1449,14 @@ object TaxiTaskModel {
}
}
fun pauseStartAutopilot(){
fun pauseStartAutopilot() {
mTaxiTaskWithOrderCallbackMap.forEach {
val listener = it.value
listener.onPauseStartAutopilot()
}
}
fun resumeStartAutopilot(remainingTime: Long){
fun resumeStartAutopilot(remainingTime: Long) {
mTaxiTaskWithOrderCallbackMap.forEach {
val listener = it.value
listener.onStartAutopilot(remainingTime)

View File

@@ -11,6 +11,7 @@ import com.mogo.eagle.core.data.biz.trafficlight.isInRange
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_V2X
@@ -20,7 +21,8 @@ import com.mogo.eagle.function.biz.v2x.trafficlight.core.TrafficLightThreadHandl
import com.mogo.eagle.function.biz.v2x.trafficlight.core.TrafficLightThreadHandler.Companion.MSG_WHAT_STOP_SEARCH_TRAFFIC_LIGHT
import com.mogo.eagle.function.biz.v2x.trafficlight.network.TrafficLightNetWorkModel
class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener {
class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener,
CallerMapRoadListenerManager.OnRoadListener {
companion object {
@@ -40,6 +42,8 @@ class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener {
@Volatile
private var trafficLightResult: TrafficLightResult? = null
@Volatile
private var mCross: Boolean = false
private var inRange: Boolean = false
@Volatile
private var firstLoopCrossRoad: Boolean = true //开启循环请求路口
@@ -49,6 +53,7 @@ class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener {
fun initServer(context: Context) {
mContext = context
CallerChassisLocationGCJ02ListenerManager.addListener(TAG, this)
CallerMapRoadListenerManager.registerRoadListener(TAG, this)
mThreadHandler =
TrafficLightThreadHandler(Looper.getMainLooper(), {
//第一次查询路口时,如果红绿灯显示,则隐藏掉
@@ -118,6 +123,11 @@ class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener {
mThreadHandler?.sendEmptyMessageDelayed(MSG_WHAT_LOOP_SEARCH_CROSS_ROAD, 5_000L)
}
override fun onRoadChange(cross: Boolean) {
super.onRoadChange(cross)
mCross = cross
}
private fun checkOutOfRange() {
mLocation?.let { loc ->
roadIDResult?.let {
@@ -128,7 +138,7 @@ class MogoTrafficLightManager : IMoGoChassisLocationGCJ02Listener {
CallerTrafficLightListenerManager.invokeEnterCrossRoad(true)
return
}
if (inRange) {
if (inRange || !mCross) {
// CallerLogger.d(M_V2X + TAG, "离开路口")
CallerTrafficLightListenerManager.invokeEnterCrossRoad(false)
inRange = false

View File

@@ -5,8 +5,6 @@ import com.mogo.commons.utils.MogoAnalyticUtils
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.enums.CommunicationType
import com.mogo.eagle.core.data.enums.DataSourceType
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
import com.mogo.eagle.core.function.api.biz.IFuncBizProvider
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
import com.mogo.eagle.core.function.call.biz.CallerFuncBizListenerManager
@@ -17,7 +15,7 @@ import java.util.concurrent.atomic.AtomicBoolean
/**
* V2X消息播报埋点统计
*/
object V2XEventAnalyticsManager: IMoGoChassisLocationWGS84Listener,IFuncBizProvider{
object V2XEventAnalyticsManager: IFuncBizProvider{
private const val TAG = "V2XEventAnalyticsManager"
private val hasInit by lazy { AtomicBoolean(false) }
@@ -38,10 +36,6 @@ object V2XEventAnalyticsManager: IMoGoChassisLocationWGS84Listener,IFuncBizProvi
private const val EVENT_PARAMS_LATITUDE ="latitude" // 纬度
private const val EVENT_PARAMS_HEADING ="heading" // 航向角
private var longitude: Double?=null //经度
private var latitude: Double?=null //纬度
private var heading: Double?=null //航向角
private var oldTime = System.currentTimeMillis()
fun init(){
@@ -52,13 +46,11 @@ object V2XEventAnalyticsManager: IMoGoChassisLocationWGS84Listener,IFuncBizProvi
private fun registerListener(){
// 添加 ADAS车辆状态&定位 监听
CallerChassisLocationWGS84ListenerManager.addListener(TAG, this)
CallerFuncBizListenerManager.addListener(TAG,this)
}
private fun unRegisterListener(){
// 移除 ADAS车辆状态&定位 监听
CallerChassisLocationWGS84ListenerManager.removeListener(TAG)
CallerFuncBizListenerManager.removeListener(TAG)
}
@@ -87,9 +79,9 @@ object V2XEventAnalyticsManager: IMoGoChassisLocationWGS84Listener,IFuncBizProvi
msgEventParams[EVENT_PARAMS_PLATE_NUMBER] = AppConfigInfo.plateNumber //车牌号
msgEventParams[EVENT_PARAMS_CAR_SN] = MoGoAiCloudClientConfig.getInstance().sn //鹰眼SN
msgEventParams[EVENT_PARAMS_EYE_VERSION] = AppUtils.getAppVersionName() //鹰眼版本
msgEventParams[EVENT_PARAMS_LONGITUDE] = "$longitude" //经度
msgEventParams[EVENT_PARAMS_LATITUDE] = "$latitude" //纬度
msgEventParams[EVENT_PARAMS_HEADING] = "$heading" //航向角
msgEventParams[EVENT_PARAMS_LONGITUDE] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().longitude}" //经度
msgEventParams[EVENT_PARAMS_LATITUDE] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().latitude}" //纬度
msgEventParams[EVENT_PARAMS_HEADING] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().heading}" //航向角
MogoAnalyticUtils.track(EVENT_KEY_RECEIVE_V2X_MSG,msgEventParams)
}
@@ -109,20 +101,12 @@ object V2XEventAnalyticsManager: IMoGoChassisLocationWGS84Listener,IFuncBizProvi
msgEventParams[EVENT_PARAMS_PLATE_NUMBER] = AppConfigInfo.plateNumber //车牌号
msgEventParams[EVENT_PARAMS_CAR_SN] = MoGoAiCloudClientConfig.getInstance().sn //鹰眼SN
msgEventParams[EVENT_PARAMS_EYE_VERSION] = AppUtils.getAppVersionName() //鹰眼版本
msgEventParams[EVENT_PARAMS_LONGITUDE] = "$longitude" //经度
msgEventParams[EVENT_PARAMS_LATITUDE] = "$latitude" //纬度
msgEventParams[EVENT_PARAMS_HEADING] = "$heading" //航向角
msgEventParams[EVENT_PARAMS_LONGITUDE] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().longitude}" //经度
msgEventParams[EVENT_PARAMS_LATITUDE] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().latitude}" //纬度
msgEventParams[EVENT_PARAMS_HEADING] = "${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().heading}" //航向角
MogoAnalyticUtils.track(EVENT_KEY_V2X_MSG_EVENT,msgEventParams)
}
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
gnssInfo.let {
longitude = it.longitude
latitude = it.latitude
heading = it.heading
}
}
fun onDestroy(){
if (hasInit.compareAndSet(true, false)){
unRegisterListener()

View File

@@ -17,12 +17,10 @@ import com.mogo.eagle.core.data.deva.badcase.BagDescriptionEntity
import com.mogo.eagle.core.data.deva.badcase.BagInfoEntity
import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity
import com.mogo.eagle.core.data.deva.badcase.RecordCaseEntity
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotRecordListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast
@@ -37,12 +35,10 @@ import com.zhidao.loglib.upload.UploadManager
import com.zhidao.loglib.util.FileUtil
import com.zhjt.mogo_core_function_devatools.R
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseAnalyticsManager
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager
import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
import com.zhjt.mogo_core_function_devatools.badcase.record.RecordManager
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import mogo.telematics.pad.MessagePad
import record_cache.RecordPanelOuterClass
import java.io.File
import java.lang.StringBuilder
@@ -55,7 +51,7 @@ import java.util.*
* @since: 2022/7/13
*/
class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchListener,
IMoGoAutopilotRecordListener, IMoGoChassisLocationWGS84Listener {
IMoGoAutopilotRecordListener {
companion object {
const val TAG = "InitiativeBadCaseWindow"
@@ -94,8 +90,6 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
private var recordFileName: String?=null //录制文件包名
private var receiveTime: String?= null
private var uploadStamp: String = System.currentTimeMillis().toString()
private var longitude: Double?=null
private var latitude: Double?=null
private var bagManagerEntity: BagManagerEntity = BagManagerEntity()
@@ -109,7 +103,7 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
private var clickListener: ClickListener? = null
init {
initFloatWindow();
initFloatWindow()
}
private val presenter by lazy {
@@ -147,8 +141,6 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
//采集结果回调监听
CallerAutopilotRecordListenerManager.addListener(this.hashCode().toString(),this)
// 添加 ADAS车辆状态&定位 监听
CallerChassisLocationWGS84ListenerManager.addListener(this.hashCode().toString(), this)
viewAudioButton.setOnClickListener {
audioStatus = !audioStatus
setAudio(audioStatus)
@@ -309,14 +301,14 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
itx["audioUrl"] = downloadUrl?:"" //音频COS地址
itx["mapVersion"] = BadCaseConfig.dockerVersion ?:"" //工控机版本
itx["eyeVersion"] = AppUtils.getAppVersionName() //鹰眼版本
itx["coordinate"] = "latitude:${latitude};longitude:${longitude}" //坐标
itx["coordinate"] = "latitude:${getChassisLocationWGS84().latitude};longitude:${getChassisLocationWGS84().longitude}" //坐标
})
if (uploadResult == null || uploadResult.code != 200) {
TipToast.shortTip("上报失败")
} else {
TipToast.shortTip("上报成功")
//将上报BI的结果同步给工控机记录保存
recordKey?.let {
recordKey.let {
val hasAudio = downloadUrl != null
val descReqEntity = BagDescriptionEntity(uploadReason.toString(),hasAudio,downloadUrl.toString(),true)
bagManagerEntity.reqType = 5
@@ -324,15 +316,16 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
bagManagerEntity.descReq = descReqEntity
CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity)
}
val loc = getChassisLocationWGS84()
BadCaseAnalyticsManager.bagRecordUpload(recordKey.toString(),recordFileName?:"",uploadStamp,
"100",AppConfigInfo.plateNumber,BadCaseConfig.totalDuration.toString(),MoGoAiCloudClientConfig.getInstance().sn,
BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),latitude.toString(),longitude.toString(),
BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),loc.latitude.toString(),loc.longitude.toString(),
BadCaseConfig.identity,downloadUrl?:"",uploadReason.toString(),System.currentTimeMillis().toString(),"1")
//日志
CallerLogger.i("$M_DEVA$TAG", "BadCase Initiative Analytics="+"key="+recordKey+" filename="+recordFileName+
" receiveTime="+uploadStamp+" stat="+"100"+" plateNumber="+AppConfigInfo.plateNumber+
" totalDuration="+ BadCaseConfig.totalDuration +" carSn="+MoGoAiCloudClientConfig.getInstance().sn+" mapVersion="+BadCaseConfig.dockerVersion+
" eyeVersion="+AppUtils.getAppVersionName()+" latitude="+ latitude +" longitude="+ longitude+
" eyeVersion="+AppUtils.getAppVersionName()+" latitude="+ loc.latitude +" longitude="+ loc.longitude+
" identity="+BadCaseConfig.identity + " downloadUrl="+downloadUrl +" uploadReason="+uploadReason+
" uploadTime="+System.currentTimeMillis()+" channel="+"1")
BadCaseConfig.windowNum--
@@ -413,8 +406,6 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
fun hideFloatWindow() {
//注销采集结果回调监听
CallerAutopilotRecordListenerManager.removeListener(this.hashCode().toString())
// 移除 ADAS车辆状态&定位 监听
CallerChassisLocationWGS84ListenerManager.removeListener(this.hashCode().toString())
if (mFloatLayout.parent != null) mWindowManager!!.removeView(mFloatLayout)
}
@@ -440,9 +431,4 @@ class InitiativeBadCaseWindow constructor(activity: Activity) : View.OnTouchList
fun closeWindow()
}
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
latitude = gnssInfo.latitude
longitude = gnssInfo.longitude
}
}

View File

@@ -6,8 +6,6 @@ import android.graphics.Color
import android.graphics.PixelFormat
import android.os.CountDownTimer
import android.os.Handler
import android.os.Parcel
import android.os.Parcelable
import android.util.DisplayMetrics
import android.view.*
import android.widget.CheckBox
@@ -19,10 +17,8 @@ import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.deva.badcase.BagDescriptionEntity
import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.RecordBagMsg
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
@@ -38,7 +34,6 @@ import com.zhjt.mogo_core_function_devatools.badcase.consts.BadCaseConfig
import com.zhjt.mogo_core_function_devatools.badcase.record.RecordManager
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import mogo.telematics.pad.MessagePad
import com.zhidao.loglib.upload.UploadManager
import com.zhidao.loglib.util.FileUtil
import com.zhjt.mogo_core_function_devatools.badcase.BadCaseAnalyticsManager
@@ -52,7 +47,7 @@ import java.io.File
* @since: 2022/7/17
*/
class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListener,
IMoGoChassisLocationWGS84Listener, CompoundButton.OnCheckedChangeListener {
CompoundButton.OnCheckedChangeListener {
companion object {
const val TAG = "PassiveBadCaseWindow"
@@ -74,8 +69,6 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
private var receiveTime: String ?= null //接收时间
private var stat: String = ""
private var boxBean: MsgBoxBean ?= null
private var longitude: Double = 0.0
private var latitude: Double = 0.0
private var mInViewX = 0f
private var mInViewY = 0f
@@ -100,7 +93,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
private lateinit var flReasonLayout: FlexboxLayout
init {
initFloatWindow();
initFloatWindow()
}
private val presenter by lazy {
@@ -126,8 +119,6 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
BadCaseConfig.windowNum++
tvPassiveTime.text = "时间:${millis2String(System.currentTimeMillis(),TimeUtils.getHourMinSecondFormat())}"
tvPassiveIdentity.text = "身份:${BadCaseConfig.identity}"
// 添加 ADAS车辆状态&定位 监听
CallerChassisLocationWGS84ListenerManager.addListener(TAG, this)
viewAudioButton.setOnClickListener {
audioStatus = !audioStatus
setAudio(audioStatus)
@@ -271,7 +262,7 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
itx["audioUrl"] = downloadUrl?:"" //音频COS地址
itx["mapVersion"] = BadCaseConfig.dockerVersion ?:"" //工控机版本
itx["eyeVersion"] = AppUtils.getAppVersionName() //鹰眼版本
itx["coordinate"] = "latitude:${latitude};longitude:${longitude}" //坐标
itx["coordinate"] = "latitude:${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().latitude};longitude:${CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84().longitude}" //坐标
})
if (uploadResult == null || uploadResult.code != 200) {
@@ -288,15 +279,16 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
CallerAutoPilotControlManager.sendBagManagerCmd(bagManagerEntity)
}
//被动上报埋点统计
val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84()
BadCaseAnalyticsManager.bagRecordUpload(recordKey?:"",recordFileName?:"",receiveTime?:System.currentTimeMillis().toString(),
stat,AppConfigInfo.plateNumber,BadCaseConfig.totalDuration.toString(),MoGoAiCloudClientConfig.getInstance().sn,
BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),latitude.toString(),longitude.toString(),
BadCaseConfig.dockerVersion ?:"",AppUtils.getAppVersionName(),loc.latitude.toString(),loc.longitude.toString(),
BadCaseConfig.identity,downloadUrl?:"",uploadReason,System.currentTimeMillis().toString(),"0")
//日志
CallerLogger.i("$M_DEVA$TAG", "BadCase Passive Analytics="+"key="+recordKey+" filename="+recordFileName+
" receiveTime="+receiveTime+" stat="+"100"+" plateNumber="+AppConfigInfo.plateNumber+
" totalDuration="+ BadCaseConfig.totalDuration +" carSn="+MoGoAiCloudClientConfig.getInstance().sn+" mapVersion="+BadCaseConfig.dockerVersion+
" eyeVersion="+AppUtils.getAppVersionName()+" latitude="+ latitude +" longitude="+ longitude+
" eyeVersion="+AppUtils.getAppVersionName()+" latitude="+ loc.latitude +" longitude="+ loc.longitude+
" identity="+BadCaseConfig.identity + " downloadUrl="+downloadUrl +" uploadReason="+uploadReason+
" uploadTime="+System.currentTimeMillis()+" channel="+"0")
BadCaseConfig.windowNum--
@@ -390,7 +382,6 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
fun hideFloatWindow() {
// 移除 ADAS车辆状态&定位 监听
CallerChassisLocationWGS84ListenerManager.removeListener(TAG)
if (mFloatLayout.parent != null) mWindowManager!!.removeView(mFloatLayout)
}
@@ -411,9 +402,4 @@ class PassiveBadCaseWindow constructor(activity: Activity) : View.OnTouchListene
fun closeWindow()
}
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
latitude = gnssInfo.latitude
longitude = gnssInfo.longitude
}
}

View File

@@ -46,28 +46,26 @@ class SteeringBrakeView(context: Context, attrs: AttributeSet?) : ConstraintLayo
}
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
if (gnssInfo != null) {
//设置刹车信息,小于默认认为是刹车 //todo 优化sp获取不要每次回调都去调用sp
brakeLight =
if (gnssInfo.acceleration < SharedPrefsMgr.getInstance(Utils.getApp()).getFloat(
MoGoConfig.BRAKE_ACCELERATION_THRESHOLD, -2.5f
)
) {
1
} else {
0
}
CallerLogger.d(
"$M_HMI$TAG",
"---onAutopilotLightSwitchData ---Acceleration = " + gnssInfo.acceleration + "-- brakeLight = " + brakeLight
)
ThreadUtils.runOnUiThread {
if (!isShowTurnLight) { //在不展示转向灯的情况下,展示车辆刹车的动效
brakeView.visibility = View.VISIBLE
brakeView.setBrakeLight(brakeLight)
} else {
brakeView.visibility = View.GONE
}
//设置刹车信息,小于默认认为是刹车 //todo 优化sp获取不要每次回调都去调用sp
brakeLight =
if (gnssInfo.acceleration < SharedPrefsMgr.getInstance(Utils.getApp()).getFloat(
MoGoConfig.BRAKE_ACCELERATION_THRESHOLD, -2.5f
)
) {
1
} else {
0
}
CallerLogger.d(
"$M_HMI$TAG",
"---onAutopilotLightSwitchData ---Acceleration = " + gnssInfo.acceleration + "-- brakeLight = " + brakeLight
)
ThreadUtils.runOnUiThread {
if (!isShowTurnLight) { //在不展示转向灯的情况下,展示车辆刹车的动效
brakeView.visibility = View.VISIBLE
brakeView.setBrakeLight(brakeLight)
} else {
brakeView.visibility = View.GONE
}
}
}

View File

@@ -9,13 +9,11 @@ import androidx.constraintlayout.widget.ConstraintLayout
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.deva.bindingcar.AdUpgradeStateHelper
import com.mogo.eagle.core.data.deva.bindingcar.IPCUpgradeStateInfo
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener
import com.mogo.eagle.core.function.api.devatools.IMoGoDevaToolsListener
import com.mogo.eagle.core.function.api.hmi.autopilot.IMoGoCheckAutoPilotBtnListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsListenerManager
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
import com.mogo.eagle.core.function.call.hmi.CallerHmiListenerManager
@@ -42,7 +40,7 @@ class SystemVersionView @JvmOverloads constructor(
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), IMoGoAutopilotStatusListener,
IMoGoDevaToolsListener, IMoGoCheckAutoPilotBtnListener, IMoGoChassisLocationWGS84Listener {
IMoGoDevaToolsListener, IMoGoCheckAutoPilotBtnListener {
companion object {
const val TAG = "SystemVersionView"
@@ -57,7 +55,6 @@ class SystemVersionView @JvmOverloads constructor(
private var currentProgress: Int = -1 //当前已下载包体大小
private var isHDCached = false
private var location: MogoLocation? = null
init {
LayoutInflater.from(context).inflate(R.layout.view_system_version, this, true)
@@ -141,17 +138,17 @@ class SystemVersionView @JvmOverloads constructor(
ivHDCache.setOnClickListener {
hmiAction(
"$M_HMI$TAG",
"HD map view click , isHDCached:$isHDCached , lon:${location?.longitude} , lat:${location?.latitude}"
"HD map view click , isHDCached:$isHDCached , lon:${getChassisLocationWGS84().longitude} , lat:${getChassisLocationWGS84().latitude}"
)
if (isHDCached) {// 已缓存
ToastUtils.showShort(resources.getString(R.string.offline_had_downloaded))
} else {// 未缓存
if (CallerMapUIServiceManager.getCityCode().isNullOrEmpty()) {// 未拿到高德的cityCode
if (location == null || (location!!.longitude <= 0.0 && location!!.latitude <= 0.0)) {// 未拿到高精的经纬度
if ((getChassisLocationWGS84().longitude <= 0.0 && getChassisLocationWGS84().latitude <= 0.0)) {// 未拿到高精的经纬度
ToastUtils.showShort(resources.getString(R.string.location_try_again))
} else {// 拿到了高精的经纬度
val dialog = OfflineMapDialog(context)
dialog.location = location
dialog.location = getChassisLocationWGS84()
dialog.show()
}
} else {// 拿到高德的cityCode
@@ -313,7 +310,6 @@ class SystemVersionView @JvmOverloads constructor(
CallerHmiListenerManager.addListener(TAG, this)
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
CallerDevaToolsListenerManager.addListener(TAG, this)
CallerChassisLocationWGS84ListenerManager.addListener(TAG, this)
needQueryContainers = true
}
@@ -325,7 +321,6 @@ class SystemVersionView @JvmOverloads constructor(
CallerHmiListenerManager.removeListener(TAG)
CallerAutoPilotStatusListenerManager.removeListener(TAG)
CallerDevaToolsListenerManager.removeListener(TAG)
CallerChassisLocationWGS84ListenerManager.removeListener(TAG)
needQueryContainers = false
}
@@ -368,10 +363,6 @@ class SystemVersionView @JvmOverloads constructor(
adCircularProgressView?.visibility = View.GONE
}
override fun onChassisLocationWGS84(gnssInfo: MogoLocation) {
location = gnssInfo
}
/**
* 状态查询应答
* @param status 数据

View File

@@ -1,10 +1,8 @@
package com.mogo.eagle.core.function.business;
import androidx.annotation.Nullable;
import com.mogo.eagle.core.data.enums.DataSourceType;
import com.mogo.eagle.core.data.map.MogoLocation;
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationWGS84Listener;
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84ListenerManager;
import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager;
import com.mogo.map.MapDataWrapper;
@@ -12,19 +10,14 @@ import com.mogo.map.MapDataWrapper;
import java.util.Timer;
import java.util.TimerTask;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
/**
* 限速
*
* @author mogoauto
*/
public class SpeedLimitDataManager implements IMoGoChassisLocationWGS84Listener {
public class SpeedLimitDataManager {
private final static String TAG = "SpeedLimitDataManager";
private static volatile SpeedLimitDataManager instance;
private volatile MogoLocation mLocation;
private SpeedLimitDataManager() {
}
@@ -40,34 +33,26 @@ public class SpeedLimitDataManager implements IMoGoChassisLocationWGS84Listener
return instance;
}
@Override
public void onChassisLocationWGS84(@Nullable MogoLocation gnssInfo) {
mLocation = gnssInfo;
}
private class SpeedTimerTask extends TimerTask {
private static class SpeedTimerTask extends TimerTask {
@Override
public void run() {
if (mLocation != null) {
getSpeedLimit();
}
getSpeedLimit();
}
private void getSpeedLimit() {
MapDataWrapper.INSTANCE.getLimitSpeed(mLocation.getLongitude(), mLocation.getLatitude(), (float) mLocation.getHeading(), new Function1<Integer, Unit>() {
@Override
public Unit invoke(Integer integer) {
MogoLocation loc = CallerChassisLocationWGS84ListenerManager.INSTANCE.getChassisLocationWGS84();
if (loc.getLatitude() > 0 && loc.getLongitude() > 0) {
MapDataWrapper.INSTANCE.getLimitSpeed(loc.getLongitude(), loc.getLatitude(), (float) loc.getHeading(), integer -> {
if (integer != null && integer > 0) {
CallerLimitingVelocityListenerManager.INSTANCE.invokeUnion(integer, DataSourceType.MAP);
}
return null;
}
});
});
}
}
}
public void start() {
CallerChassisLocationWGS84ListenerManager.INSTANCE.addListener(TAG, this);
Timer mTimer = new Timer();
mTimer.schedule(new SpeedTimerTask(), 3000, 1000);
}

View File

@@ -75,18 +75,18 @@ public class MogoRouteOverlayManager implements
if (gnssInfo == null) {
return;
}
Log.d(TAG, "-- onChassisLocationGCJ02 -- 1 ---" + ":auto-mode:" + autopilotMode.get() + ", isArriveAtStation: " + isArriveAtStation.get());
// Log.d(TAG, "-- onChassisLocationGCJ02 -- 1 ---" + ":auto-mode:" + autopilotMode.get() + ", isArriveAtStation: " + isArriveAtStation.get());
if (isArriveAtStation.get() && autopilotMode.get() != 2) {
RouteOverlayDrawer.getInstance().clearMogoRouteOverlay();
return;
}
Log.d(TAG, "-- onChassisLocationGCJ02 -- 2 ---" + "auto-mode:" + autopilotMode.get() + ", isDemoMode:" + FunctionBuildConfig.isDemoMode + ", force:" + FunctionBuildConfig.isForceDrawAutopilotTrajectoryByDebugSettingView);
// Log.d(TAG, "-- onChassisLocationGCJ02 -- 2 ---" + "auto-mode:" + autopilotMode.get() + ", isDemoMode:" + FunctionBuildConfig.isDemoMode + ", force:" + FunctionBuildConfig.isForceDrawAutopilotTrajectoryByDebugSettingView);
boolean force = FunctionBuildConfig.isForceDrawAutopilotTrajectoryByDebugSettingView || FunctionBuildConfig.isDemoMode && FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData;
if (!force && autopilotMode.get() != 2) {
RouteOverlayDrawer.getInstance().clearMogoRouteOverlay();
return;
}
Log.d(TAG, "-- onChassisLocationGCJ02 -- 3 ---");
// Log.d(TAG, "-- onChassisLocationGCJ02 -- 3 ---");
synchronized (queue) {
if (!queue.isEmpty()) {
List<MessagePad.TrajectoryPoint> items = queue.pollLast();

View File

@@ -102,6 +102,7 @@ class ChainConstant {
const val CHAIN_CODE_V2X_MSG = "CHAIN_CODE_V2X_MSG"
const val CHAIN_CODE_MSG_BOX = "CHAIN_CODE_MSG_BOX"
const val CHAIN_CODE_HD_MAP_CALL = "CHAIN_CODE_HD_MAP_CALL"
const val CHAIN_CODE_HD_MAP_ROAD_CROSS = "CHAIN_CODE_HD_MAP_ROAD_CROSS"
const val CHAIN_CODE_HMI_ACTIONS = "CHAIN_CODE_HMI_ACTIONS"
//operation by user

View File

@@ -1,7 +1,11 @@
package com.mogo.eagle.core.function.call.map
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP
import com.zhidaoauto.map.data.road.RoadCross
import com.zhidaoauto.map.data.road.StopLine
import com.zhjt.service.chain.ChainLog
import java.util.concurrent.ConcurrentHashMap
import kotlin.properties.Delegates
@@ -9,11 +13,11 @@ object CallerMapRoadListenerManager {
interface OnRoadListener {
fun onRoadIdInfo(roadId: String){}
fun onRoadIdInfo(roadId: String) {}
fun onStopLineInfo(info: StopLine){}
fun onStopLineInfo(info: StopLine) {}
fun onRoadChange(cross: Boolean){}
fun onRoadChange(cross: Boolean) {}
}
private val listeners by lazy {
@@ -48,15 +52,21 @@ object CallerMapRoadListenerManager {
}
private var mCross: Boolean by Delegates.observable(false) { _, oldValue, newValue ->
if(oldValue != newValue){
Logger.d("emArrow","cross : $newValue")
if (oldValue != newValue) {
CallerLogger.d("$M_MAP onRoadChange", newValue)
listeners.forEach { entry ->
entry.value.onRoadChange(newValue)
}
}
}
fun invokeRoadChange(cross: Boolean) {
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_HD_MAP,
linkCode = ChainConstant.CHAIN_SOURCE_MAP,
nodeAliasCode = ChainConstant.CHAIN_CODE_HD_MAP_ROAD_CROSS,
paramIndexes = [0, 1]
)
fun invokeRoadChange(cross: Boolean, roadCross: RoadCross) {
mCross = cross
}

View File

@@ -207,18 +207,18 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
}
}
private var roadCross:RoadCross? by Delegates.observable(null){ _,oldValue,newValue ->
private var roadCross: RoadCross? by Delegates.observable(null) { _, oldValue, newValue ->
oldValue?.let {
//对驶入驶出路口做二次过滤,防止多次回调
if(it.status == 0 && newValue!!.status == 1){
if (it.status == 0 && newValue!!.status == 1) {
//进入路口
i("$M_MAP$TAG","进入路口 :${newValue.cross_id}")
invokeRoadChange(true)
i("$M_MAP$TAG", "进入路口 :${newValue.cross_id}")
invokeRoadChange(true, newValue)
}
if((it.status == 1 && newValue!!.status == 0) || (newValue!!.cross_id_end.isNotEmpty() && oldValue.cross_id_end != newValue.cross_id_end)){
if ((it.status == 1 && newValue!!.status == 0) || (newValue!!.cross_id_end.isNotEmpty() && oldValue.cross_id_end != newValue.cross_id_end)) {
//驶出路口
i("$M_MAP$TAG","驶出路口 上个:${oldValue.cross_id_end} , 下个:${newValue.cross_id_end}")
invokeRoadChange(false)
i("$M_MAP$TAG", "驶出路口 上个:${oldValue.cross_id_end} , 下个:${newValue.cross_id_end}")
invokeRoadChange(false, newValue)
}
}
}
@@ -232,7 +232,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
override fun onStopLineInfo(stopLine: StopLine?) {
stopLine?.let {
if(it.road_id.isNotEmpty() && it.points.size > 0){
if (it.road_id.isNotEmpty() && it.points.size > 0) {
d(M_MAP + TAG, "onStopLineInfo: $it")
invokeListenersOnStopLineGet(it)
}
@@ -252,7 +252,7 @@ class AMapViewWrapper(mMapView: MapAutoView) : IMogoMapView, IMogoMapUIControlle
}
override fun changeMapVisualAngle(angelMode: VisualAngleMode, mogoLatLng: MogoLatLng?) {
if(visualLock){
if (visualLock) {
e(M_MAP + TAG, "视角切换已锁定")
return
}