From d9390d3fe55b70b9b8b61c936ca401203777d82c Mon Sep 17 00:00:00 2001 From: zhongchao Date: Wed, 30 Aug 2023 19:30:09 +0800 Subject: [PATCH] [6.0.0] fix bug of autopilot connect status --- .../lookaround/MoGoLookAroundProviderImpl.kt | 5 +- .../status/flow/can/CanImpl.kt | 4 +- .../status/flow/ipc/IpcImpl.kt | 2 +- .../status/flow/rtk/RTKImpl.kt | 8 +- .../status/flow/trace/TracingImpl.kt | 2 +- .../status/model/StatusModel.kt | 2 +- .../hmi/ui/tools/AutoPilotAndCheckView.kt | 2 +- .../CallerAutoPilotControlManager.kt | 7 - .../CallerAutoPilotStatusListenerManager.kt | 2 +- .../main/java/com/mogo/map/AMapWrapper.java | 183 ++++++++++++++---- 10 files changed, 162 insertions(+), 55 deletions(-) diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/lookaround/MoGoLookAroundProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/lookaround/MoGoLookAroundProviderImpl.kt index fedd73722e..89ea5f8921 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/lookaround/MoGoLookAroundProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/lookaround/MoGoLookAroundProviderImpl.kt @@ -19,7 +19,6 @@ import kotlinx.coroutines.flow.* import mogo.telematics.pad.MessagePad.Header import mogo.telematics.pad.MessagePad.SetParamReq import java.util.concurrent.atomic.AtomicInteger -import kotlin.concurrent.* internal class MoGoLookAroundProviderImpl: IMoGoLookAroundProvider, IMoGoBackCameraVideoListener, IMoGoRoboBusJinlvM1StitchedVideoListener, IMoGoGetParamResponseListener { @@ -69,7 +68,9 @@ internal class MoGoLookAroundProviderImpl: IMoGoLookAroundProvider, IMoGoBackCam private fun sendReqForParamPeriod() { scope.launch { while (targetX.get() == 0 || targetY.get() == 0) { - CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.M1_STITCHED_VIDEO_SELF_VEHICLE_PARAM) + if(CallerAutoPilotStatusListenerManager.isConnect()){ + CallerAutoPilotControlManager.sendGetParamReq(AdasConstants.MapSystemParamType.M1_STITCHED_VIDEO_SELF_VEHICLE_PARAM) + } delay(2000) } }.also { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/can/CanImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/can/CanImpl.kt index e6b92611d7..ed04aff1cb 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/can/CanImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/can/CanImpl.kt @@ -40,7 +40,7 @@ internal class CanImpl(ctx: Context) : private val state: AtomicInteger by lazy { AtomicInteger(Int.MIN_VALUE) } override fun onCreate() { - send(CanStatus(CallerAutoPilotControlManager.isConnected())) + send(CanStatus(CallerAutoPilotStatusListenerManager.isConnect())) CallerChassisAccStateListenerManager.addListener(TAG, this) CallerChassisBrakeStateListenerManager.addListener(TAG, this) @@ -58,7 +58,7 @@ internal class CanImpl(ctx: Context) : private fun isCanEnabled(): Boolean { val code = CallerAutoPilotStatusListenerManager.getAutoPilotReportMessageCode() - return CallerAutoPilotControlManager.isConnected() && code != "EHW_CAN" && (state.get() == Int.MIN_VALUE || state.get() == 0) + return CallerAutoPilotStatusListenerManager.isConnect() && code != "EHW_CAN" && (state.get() == Int.MIN_VALUE || state.get() == 0) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/ipc/IpcImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/ipc/IpcImpl.kt index bf80c144da..a113c357cf 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/ipc/IpcImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/ipc/IpcImpl.kt @@ -28,7 +28,7 @@ internal class IpcImpl(ctx: Context): IFlow(ctx), IMoGoAutopilotStatu } private fun checkAndSend() { - send(IpcStatus(CallerAutoPilotControlManager.isConnected())) + send(IpcStatus(CallerAutoPilotStatusListenerManager.isConnect())) } override fun onDestroy() { diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt index a25e636ae8..93d36a30de 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/rtk/RTKImpl.kt @@ -43,7 +43,7 @@ internal class RTKImpl(ctx: Context): IFlow(ctx), IMoGoAutopilotStatu CallerLogger.d("$M_DEVA$TAG", "-- onCreate --") CallerAutoPilotStatusListenerManager.addListener(TAG, this) CallerChassisLocationWGS84ListenerManager.addListener(TAG, this) - if (CallerAutoPilotControlManager.isConnected()) { + if (CallerAutoPilotStatusListenerManager.isConnect()) { check() } } @@ -86,13 +86,13 @@ internal class RTKImpl(ctx: Context): IFlow(ctx), IMoGoAutopilotStatu override fun onAutopilotIpcConnectStatusChanged(status: Int, reason: String?) { super.onAutopilotIpcConnectStatusChanged(status, reason) - if (!CallerAutoPilotControlManager.isConnected()) { + if (!CallerAutoPilotStatusListenerManager.isConnect()) { CallerLogger.d("$M_DEVA$TAG", "工控机断开了....") healthInfo.set(null) send(RTKStatus("", -1)) } - if (CallerAutoPilotControlManager.isConnected() && check == null && !isOldVersion.get()) { + if (CallerAutoPilotStatusListenerManager.isConnect() && check == null && !isOldVersion.get()) { check() } } @@ -114,7 +114,7 @@ internal class RTKImpl(ctx: Context): IFlow(ctx), IMoGoAutopilotStatu private fun isRTKEnabled(): Boolean { val code = CallerAutoPilotStatusListenerManager.getAutoPilotReportMessageCode() val gnssInfo = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() - return CallerAutoPilotControlManager.isConnected() && ( + return CallerAutoPilotStatusListenerManager.isConnect() && ( code != "EHW_RTK" && code != "EHW_GNSS" && code != "ESYS_RTK_STATUS_FAULT" && diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/trace/TracingImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/trace/TracingImpl.kt index f04a3971ec..0746962d6e 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/trace/TracingImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/flow/trace/TracingImpl.kt @@ -58,7 +58,7 @@ internal class TracingImpl(ctx: Context): IFlow(ctx), IMoGoAutopi super.onAutopilotIpcConnectStatusChanged(status, reason) try { if (ipcConnectStatus.get() != status) { - if (!CallerAutoPilotControlManager.isConnected()) { + if (!CallerAutoPilotStatusListenerManager.isConnect()) { old = UNKNOWN send(TracingStatus(UNKNOWN)) } diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/model/StatusModel.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/model/StatusModel.kt index 91d6115301..b0376af234 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/model/StatusModel.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/status/model/StatusModel.kt @@ -15,7 +15,7 @@ internal class StatusModel : ViewModel() { const val TAG = "StatusModel" val DEFAULTS = Pair(null, ArrayList().also { it += OverViewStatus() - it += IpcStatus(CallerAutoPilotControlManager.isConnected()) + it += IpcStatus(CallerAutoPilotStatusListenerManager.isConnect()) it += CanStatus(false) // it += TracingStatus(UNKNOWN) it += RTKStatus("", -1) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt index af79a7a9aa..34d7806abe 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/AutoPilotAndCheckView.kt @@ -186,7 +186,7 @@ internal class AutoPilotAndCheckView @JvmOverloads constructor( svLayout.post { svLayout.fullScroll(View.FOCUS_DOWN) } - if (!CallerAutoPilotStatusListenerManager.getConnectStates()) { + if (!CallerAutoPilotStatusListenerManager.isConnect()) { ToastUtils.showShort("设置车速失败,请启动域控制器") keyBoardUtil?.hideKeyboard() return@setOnTouchListener true diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt index 445a3ad2d3..22fb5e1fbf 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt @@ -479,13 +479,6 @@ object CallerAutoPilotControlManager { providerApi?.setControlAutopilotCarAuto(isEnable) } - /** - * 车机与工控机是否连上了 - */ - fun isConnected(): Boolean { - return providerApi?.isConnected() ?: false - } - /** * 查询工控机基础配置信息 */ diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt index c6eae4c451..70ef154e84 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotStatusListenerManager.kt @@ -83,7 +83,7 @@ object CallerAutoPilotStatusListenerManager : CallerBase 0 ? mAMap.drawThickLine(polylineOptions) : mAMap.drawLine(polylineOptions); + Polyline delegate = polylineOptions.lineWidth > 0 ? mAMap.drawThickLine(polylineOptions) : mAMap.drawLine(polylineOptions); if (delegate == null) { return null; } - return new com.mogo.map.overlay.wrapper.line.AMapPolylineWrapper(options.getId(), delegate,mMapView); + return new com.mogo.map.overlay.wrapper.line.AMapPolylineWrapper(options.getId(), delegate); } BatchMarkerOptions batchMarkerOptions = new BatchMarkerOptions(); @@ -119,15 +138,14 @@ public class AMapWrapper implements IMogoMap { return; } long time = markerOptionsArrayList.get(0).getTime(); - batchMarkerOptions.setList(markerOptionsArrayList); - batchMarkerOptions.setDelayStrategy(false); - batchMarkerOptions.setRuleAngle(8.0f); - batchMarkerOptions.setControlIcon(1); - batchMarkerOptions.setSatelliteTime(time); - batchMarkerOptions.setDeleteRule(0); - if(mMapView.getMarkerController() != null){ - mMapView.getMarkerController().updateBatchMarkerPositon(batchMarkerOptions); - } + batchMarkerOptions.list = markerOptionsArrayList; +// batchMarkerOptions.averageFlag = 0; + batchMarkerOptions.delayStrategy = false; + batchMarkerOptions.ruleAngle = 8.0f; + batchMarkerOptions.controlIcon = 1; + batchMarkerOptions.satelliteTime = time; + batchMarkerOptions.deleteRule = 0; + MarkerHelper.INSTANCE.updateBatchMarkerPositon(batchMarkerOptions); } BatchMarkerOptions aiBatchMarkerOptions = new BatchMarkerOptions(); @@ -153,23 +171,19 @@ public class AMapWrapper implements IMogoMap { } long time = markerOptionsArrayList.get(0).getTime(); // 最后一个参数,是否管理锚点的删除 - aiBatchMarkerOptions.setList(markerOptionsArrayList); - aiBatchMarkerOptions.setDelayStrategy(false); - aiBatchMarkerOptions.setRuleAngle(8.0f); - aiBatchMarkerOptions.setControlIcon(1); - aiBatchMarkerOptions.setSatelliteTime(time); - aiBatchMarkerOptions.setDeleteRule(0); - if(mMapView.getMarkerController() != null) { - mMapView.getMarkerController().updateBatchMarkerPositon(aiBatchMarkerOptions); - } + aiBatchMarkerOptions.list = markerOptionsArrayList; + aiBatchMarkerOptions.delayStrategy = false; + aiBatchMarkerOptions.ruleAngle = 8.0f; + aiBatchMarkerOptions.controlIcon = 1; + aiBatchMarkerOptions.satelliteTime = time; + aiBatchMarkerOptions.deleteRule = 0; + MarkerHelper.INSTANCE.updateBatchMarkerPositon(aiBatchMarkerOptions); } @Override public String addPreVehicleModel(int type, int modelRes) { try { - if(mMapView.getMarkerController() != null){ - return mMapView.getMarkerController().addPreVehicleModel(type, modelRes); - } + return MarkerHelper.INSTANCE.addPreVehicleModel(type, modelRes); } catch (Exception e) { e.printStackTrace(); } @@ -179,16 +193,73 @@ public class AMapWrapper implements IMogoMap { @Override public void removeMarker(String uuidString) { try { - if(mMapView.getMarkerController() != null){ - mMapView.getMarkerController().removeMarker(uuidString); - } + MarkerHelper.INSTANCE.removeMarker(uuidString); } catch (Exception e) { e.printStackTrace(); } } + @Override + public void clear() { + if (checkAMap()) { + mAMap.clearPanel(); + } + } + + @Override + public void clear(boolean isKeepMyLocationOverlay) { + if (checkAMap()) { + mAMap.clearPanel(); + } + } + + @Override + public void setPointToCenter(int x, int y) { + if (checkAMap()) { + LonLatPoint lonLatPoint = MapTools.INSTANCE.fromScreenLocation(new Point(x, y)); + mAMap.setCenter(lonLatPoint); + } + } + + @Override + public float getScalePerPixel() { + if (checkAMap()) { + return mAMap.getScalePerPixel(); + } + return 0; + } + + @Override + public void changeZoom(float zoom) { + CallerLogger.d(TAG, "changeZoom %s", zoom); + if (checkAMap()) { + mAMap.setZoom((int) zoom); + } + } + + @Override + public void changeZoom2(float zoom) { + CallerLogger.d(TAG, "changeZoom %s", zoom); + if (checkAMap()) { + mAMap.setZoomVal(zoom); + } + } + + @Override + public float getZoomLevel() { + if (checkAMap()) { + try { + return mAMap.getZoom(); + } catch (Exception ignored) { + + } + } + return 0; + } + private boolean checkAMap() { mAMap = mMapView.getMapAutoViewHelper(); + sAMap = mAMap; if (mAMap == null) { CallerLogger.e(TAG, "自研map实例为空,请检查"); return false; @@ -196,4 +267,46 @@ public class AMapWrapper implements IMogoMap { return true; } + @Override + public float getRoadWidth(double lon, double lat, float angle, boolean isGpsLocation, boolean isRTK) { + SinglePointRoadInfo singlePointRoadInfo = MapDataApi.INSTANCE.getSinglePointMatchRoad(lon, lat, angle, isGpsLocation, isRTK); + + return singlePointRoadInfo != null ? singlePointRoadInfo.getLaneWidth() : 0; + } + + @Override + public CenterLine getCenterLineRangeInfo(double lon, double lat, float angle, float distance) { + try { + com.zhidaoauto.map.sdk.open.road.CenterLine info = MapDataApi.INSTANCE.getCenterLineRangeInfo(lon, lat, angle, distance); + CenterLine ret = null; + if (info != null) { + ret = new CenterLine(info.id, info.tile_id, info.road_id, info.lane_id, convert(info.points), info.angle == null ? 0f : info.angle); + } + return ret; + } catch (Throwable t) { + t.printStackTrace(); + return null; + } + } + + @Override + public RoadNameInfo getRoadName(double lon, double lat, float angle) { +// com.zhidaoauto.map.sdk.open.road.RoadNameInfo info = MapDataApi.INSTANCE.getRoadName(lon, lat, angle); +// RoadNameInfo ret = null; +// if (info != null) { +// ret = new RoadNameInfo(info.tile_id, info.road_id, info.road_name); +// } + return null; + } + + private List> convert(List points) { + if (points == null || points.isEmpty()) { + return Collections.emptyList(); + } + List> ret = new ArrayList<>(points.size()); + for (LonLatPoint p : points) { + ret.add(Pair.create(p.longitude, p.latitude)); + } + return ret; + } }