diff --git a/OCH/mogo-och-bus-passenger/build.gradle b/OCH/mogo-och-bus-passenger/build.gradle
index b38804a63d..fc55956e11 100644
--- a/OCH/mogo-och-bus-passenger/build.gradle
+++ b/OCH/mogo-och-bus-passenger/build.gradle
@@ -60,6 +60,7 @@ dependencies {
implementation rootProject.ext.dependencies.mogo_core_data
implementation rootProject.ext.dependencies.mogo_core_function_call
implementation rootProject.ext.dependencies.mogo_core_function_v2x
+ implementation rootProject.ext.dependencies.mogo_core_function_hmi
}else {
implementation project(":core:mogo-core-utils")
implementation project(":foudations:mogo-commons")
@@ -67,6 +68,7 @@ dependencies {
implementation project(':core:mogo-core-data')
implementation project(':core:mogo-core-function-call')
implementation project(':core:function-impl:mogo-core-function-v2x')
+ implementation project(':core:function-impl:mogo-core-function-hmi')
}
}
diff --git a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml
index dd85781820..0ba9339fee 100644
--- a/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml
+++ b/OCH/mogo-och-bus-passenger/src/main/res/layout/bus_p_base_fragment.xml
@@ -4,6 +4,14 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5390f68844..93042f91d2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -36,6 +36,14 @@
android:name="MAP_SDK_VERSION"
android:value="${MAP_SDK_VERSION}" />
+
+
+
+
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/OnAdasClientListener.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/OnAdasClientListener.java
new file mode 100644
index 0000000000..c3de9e1ffb
--- /dev/null
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/OnAdasClientListener.java
@@ -0,0 +1,154 @@
+package com.zhidao.adas.client;
+
+import com.zhidao.adas.client.bean.ArrivalNotification;
+import com.zhidao.adas.client.bean.AutopilotState;
+import com.zhidao.adas.client.bean.BasicInfoReq;
+import com.zhidao.adas.client.bean.CarConfigResp;
+import com.zhidao.adas.client.bean.GlobalPathResp;
+import com.zhidao.adas.client.bean.GnssInfo;
+import com.zhidao.adas.client.bean.MogoReportMessage;
+import com.zhidao.adas.client.bean.PerceptionTrafficLight;
+import com.zhidao.adas.client.bean.RecordPanel;
+import com.zhidao.adas.client.bean.TrackedObjects;
+import com.zhidao.adas.client.bean.Trajectory;
+import com.zhidao.adas.client.bean.VehicleState;
+import com.zhidao.adas.client.bean.Warn;
+import com.zhidao.support.adas.high.bean.IPCUpgradeStateInfo;
+import com.zhidao.support.adas.high.bean.SSHResult;
+import com.zhidao.support.adas.high.common.ProtocolStatus;
+
+public abstract class OnAdasClientListener {
+ /**
+ * 自动驾驶局部轨迹 车前引导线
+ *
+ * @param trajectory 数据
+ */
+ public void onTrajectory(Trajectory trajectory) {
+ }
+
+ /**
+ * 障碍物 他车数据
+ *
+ * @param trackedObjects 数据
+ */
+ public void onTrackedObjects(TrackedObjects trackedObjects) {
+ }
+
+ /**
+ * 惯导信息
+ *
+ * @param gnssInfo 数据
+ */
+ public void onGnssInfo(GnssInfo gnssInfo) {
+ }
+
+ /**
+ * 底盘信息, 透传底盘状态,pb参考底盘
+ *
+ * @param vehicleState 数据
+ */
+ public void onVehicleState(VehicleState vehicleState) {
+ }
+
+ /**
+ * 自动驾驶状态
+ *
+ * @param autopilotState 数据
+ */
+ public void onAutopilotState(AutopilotState autopilotState) {
+ }
+
+ /**
+ * 监控事件报告
+ *
+ * @param mogoReportMessage 数据
+ */
+ public void onReportMessage(MogoReportMessage mogoReportMessage) {
+ }
+
+ /**
+ * 感知红绿灯
+ *
+ * @param trafficLights 感知红绿灯
+ */
+ public void onPerceptionTrafficLight(PerceptionTrafficLight trafficLights) {
+ }
+
+ /**
+ * 自动驾驶设备基础信息请求
+ *
+ * @param basicInfoReq 数据 目前没有任何参数
+ */
+ public void onBasicInfoReq(BasicInfoReq basicInfoReq) {
+ }
+
+ /**
+ * 车机基础信息应答
+ *
+ * @param carConfigResp 数据
+ */
+ public void onCarConfigResp(CarConfigResp carConfigResp) {
+ }
+
+ /**
+ * 数据采集结果
+ *
+ * @param recordPanel 数据
+ */
+ public void onRecordResult(RecordPanel recordPanel) {
+ }
+
+ /**
+ * 自动驾驶路径应答
+ *
+ * @param globalPathResp 数据
+ */
+ public void onGlobalPathResp(GlobalPathResp globalPathResp) {
+ }
+
+
+ /**
+ * 报警信息
+ * 暂时保留,目前没有使用
+ *
+ * @param warn 数据
+ */
+ @Deprecated
+ public void onWarn(Warn warn) {
+ }
+
+ /**
+ * 到站提醒 自动驾驶站点
+ *
+ * @param arrivalNotification 数据
+ */
+ public void onArrivalNotification(ArrivalNotification arrivalNotification) {
+ }
+
+ /**
+ * 升级状态
+ *
+ * @param info
+ */
+ @Deprecated
+ public void onUpgradeStateInfo(IPCUpgradeStateInfo info) {
+ }
+
+ /**
+ * 向IPC发送命令返回结果
+ *
+ * @param info
+ */
+ public void onSSHResult(SSHResult info) {
+ }
+
+ /**
+ * 数据错误
+ *
+ * @param status 错误原因
+ * @param bytes 原始数据
+ */
+ public void onError(ProtocolStatus status, byte[] bytes) {
+
+ }
+}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java
index 787f60c6d0..64d47bc670 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ArrivalNotification.java
@@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
-public class ArrivalNotification extends Base {
+public class ArrivalNotification extends BaseInfo {
public final MessagePad.ArrivalNotification bean;
public ArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java
index 95924fa432..aaebc9ba7a 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutopilotState.java
@@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
-public class AutopilotState extends Base {
+public class AutopilotState extends BaseInfo {
public final MessagePad.AutopilotState bean;
public AutopilotState(MessagePad.Header header, MessagePad.AutopilotState bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Base.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Base.java
deleted file mode 100644
index e492bd77ef..0000000000
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Base.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.zhidao.adas.client.bean;
-
-
-import com.google.protobuf.TextFormat;
-
-import mogo.telematics.pad.MessagePad;
-
-public abstract class Base {
- public final MessagePad.Header header;
- public final int len;
-
- public Base(int len, MessagePad.Header header) {
- this.len = 8 + header.getSerializedSize() + len;
- this.header = header;
- }
-
- @Override
- public String toString() {
- return len + "##Header:[" + TextFormat.printer().escapingNonAscii(false).shortDebugString(header)+"]\n";
- }
-}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java
new file mode 100644
index 0000000000..cf2f171b1d
--- /dev/null
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BaseInfo.java
@@ -0,0 +1,32 @@
+package com.zhidao.adas.client.bean;
+
+
+import com.google.protobuf.TextFormat;
+
+import mogo.telematics.pad.MessagePad;
+
+public abstract class BaseInfo {
+ public final String action;
+ public final long nowTime;
+ public final MessagePad.Header header;
+ public final int len;
+
+ public BaseInfo(String action, int len, MessagePad.Header header) {
+ this.action = action;
+ nowTime = System.currentTimeMillis();
+ this.len = 8 + header.getSerializedSize() + len;
+ this.header = header;
+ }
+
+ public BaseInfo(String action, int len) {
+ this.action = action;
+ nowTime = System.currentTimeMillis();
+ this.len = len;
+ this.header = null;
+ }
+
+ @Override
+ public String toString() {
+ return len + "##Header:[" + TextFormat.printer().escapingNonAscii(false).shortDebugString(header) + "]\n";
+ }
+}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java
index 698bea7d2d..496d32df71 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/BasicInfoReq.java
@@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
-public class BasicInfoReq extends Base {
+public class BasicInfoReq extends BaseInfo {
public final MessagePad.BasicInfoReq bean;
public BasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java
index 85488fe61a..0fadfaa882 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/CarConfigResp.java
@@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
-public class CarConfigResp extends Base {
+public class CarConfigResp extends BaseInfo {
public final MessagePad.CarConfigResp bean;
public CarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ErrorData.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ErrorData.java
index aded5d05cc..a9e21f6c31 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ErrorData.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ErrorData.java
@@ -3,11 +3,12 @@ package com.zhidao.adas.client.bean;
import com.zhidao.support.adas.high.common.DigitalTrans;
import com.zhidao.support.adas.high.common.ProtocolStatus;
-public class ErrorData {
+public class ErrorData extends BaseInfo {
private final ProtocolStatus status;
private final byte[] bytes;
public ErrorData(ProtocolStatus status, byte[] bytes) {
+ super("接收", bytes.length);
this.status = status;
this.bytes = bytes;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java
index 5fb044171c..5d4d67cd6d 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GlobalPathResp.java
@@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
-public class GlobalPathResp extends Base {
+public class GlobalPathResp extends BaseInfo {
public final MessagePad.GlobalPathResp bean;
public GlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java
index cb762f80f8..2e37afa373 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/GnssInfo.java
@@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
-public class GnssInfo extends Base {
+public class GnssInfo extends BaseInfo {
public final MessagePad.GnssInfo bean;
public GnssInfo(MessagePad.Header header, MessagePad.GnssInfo bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java
index 39a2f8e7e2..54c4eb7be9 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MogoReportMessage.java
@@ -5,11 +5,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
import mogo_msg.MogoReportMsg;
-public class MogoReportMessage extends Base {
+public class MogoReportMessage extends BaseInfo {
public final MogoReportMsg.MogoReportMessage bean;
public MogoReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MySSHResult.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MySSHResult.java
new file mode 100644
index 0000000000..0273e1713d
--- /dev/null
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/MySSHResult.java
@@ -0,0 +1,10 @@
+package com.zhidao.adas.client.bean;
+
+public class MySSHResult extends BaseInfo {
+ public final String info;
+
+ public MySSHResult(String info, int len) {
+ super("接收", len);
+ this.info = info;
+ }
+}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java
index 5b50580c61..5587a6acd8 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/PerceptionTrafficLight.java
@@ -5,11 +5,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
import perception.TrafficLightOuterClass;
-public class PerceptionTrafficLight extends Base {
+public class PerceptionTrafficLight extends BaseInfo {
public final TrafficLightOuterClass.TrafficLights bean;
public PerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java
index 3071ef7317..c00cce9217 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/RecordPanel.java
@@ -5,11 +5,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
import record_cache.RecordPanelOuterClass;
-public class RecordPanel extends Base {
+public class RecordPanel extends BaseInfo {
public final RecordPanelOuterClass.RecordPanel bean;
public RecordPanel(MessagePad.Header header, RecordPanelOuterClass.RecordPanel bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java
index caaa4d1c81..efcbcb2fef 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/TrackedObjects.java
@@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
-public class TrackedObjects extends Base {
+public class TrackedObjects extends BaseInfo {
private MessagePad.TrackedObjects bean;
public TrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java
index 047888f8f7..ac4cbe5c33 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Trajectory.java
@@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
-public class Trajectory extends Base {
+public class Trajectory extends BaseInfo {
public final MessagePad.Trajectory bean;
public Trajectory(MessagePad.Header header, MessagePad.Trajectory bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
@Override
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java
index df03675788..ebdacb3c7d 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/VehicleState.java
@@ -5,11 +5,11 @@ import com.google.protobuf.TextFormat;
import chassis.VehicleStateOuterClass;
import mogo.telematics.pad.MessagePad;
-public class VehicleState extends Base {
+public class VehicleState extends BaseInfo {
public final VehicleStateOuterClass.VehicleState bean;
public VehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java
index f438ae5b8f..fd41e8e212 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/Warn.java
@@ -4,11 +4,11 @@ import com.google.protobuf.TextFormat;
import mogo.telematics.pad.MessagePad;
-public class Warn extends Base {
+public class Warn extends BaseInfo {
public final MessagePad.Warn bean;
public Warn(MessagePad.Header header, MessagePad.Warn bean) {
- super(bean.getSerializedSize(), header);
+ super("接收", bean.getSerializedSize(), header);
this.bean = bean;
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java
index 016bfcacbc..ad3059f24d 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/log/LogSave.java
@@ -4,6 +4,21 @@ import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
+import com.zhidao.adas.client.OnAdasClientListener;
+import com.zhidao.adas.client.bean.ArrivalNotification;
+import com.zhidao.adas.client.bean.AutopilotState;
+import com.zhidao.adas.client.bean.BaseInfo;
+import com.zhidao.adas.client.bean.BasicInfoReq;
+import com.zhidao.adas.client.bean.CarConfigResp;
+import com.zhidao.adas.client.bean.GlobalPathResp;
+import com.zhidao.adas.client.bean.GnssInfo;
+import com.zhidao.adas.client.bean.MogoReportMessage;
+import com.zhidao.adas.client.bean.PerceptionTrafficLight;
+import com.zhidao.adas.client.bean.RecordPanel;
+import com.zhidao.adas.client.bean.TrackedObjects;
+import com.zhidao.adas.client.bean.Trajectory;
+import com.zhidao.adas.client.bean.VehicleState;
+import com.zhidao.adas.client.bean.Warn;
import com.zhidao.support.adas.high.common.ThreadPoolManager;
import java.io.BufferedWriter;
@@ -11,7 +26,9 @@ import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
import java.util.Locale;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
@@ -25,12 +42,13 @@ public class LogSave {
private static final String LOG_FILE_NAME = "%s.log";//文件名称
private volatile static LogSave INSTANCE;
private static final long MAX_CAPACITY = 20 * 1024 * 1024L;//单文件最大存储容量 kb
- private final LinkedBlockingQueue queue;
+ private final LinkedBlockingQueue queue;
private BufferedWriter buff = null;
private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault());
private File file;
private volatile long capacity = MAX_CAPACITY;
private Future future;
+ private List listeners = new ArrayList<>();
private LogSave() {
queue = new LinkedBlockingQueue<>();
@@ -47,6 +65,15 @@ public class LogSave {
return INSTANCE;
}
+ public void registerOnAdasClientListener(OnAdasClientListener listener) {
+ if (!listeners.contains(listener)) {
+ listeners.add(listener);
+ }
+ }
+
+ public void unregisterOnAdasClientListener(OnAdasClientListener listener) {
+ listeners.remove(listener);
+ }
public boolean isSdcardUse() {
boolean bl = false;
@@ -74,13 +101,12 @@ public class LogSave {
}
- public void saveLog(String action, String data) {
- long nowTime = System.currentTimeMillis();
- String time = sdf.format(new Date(nowTime));
- String builder = time + " [action]:" + action + " [data]:" + data;
- queue.add(builder);
- }
+ public void saveLog(BaseInfo info) {
+ if (isStart()) {
+ queue.add(info);
+ }
+ }
public boolean isStart() {
return future != null;
}
@@ -128,9 +154,43 @@ public class LogSave {
closeBufferedWriter();
getFile();
}
- String data = queue.take();
- if (!TextUtils.isEmpty(data)) {
- buff.write(data);
+ BaseInfo data = queue.take();
+ if (!listeners.isEmpty()) {
+ for (OnAdasClientListener listener : listeners) {
+ if (data instanceof Trajectory) {
+ listener.onTrajectory((Trajectory) data);
+ } else if (data instanceof TrackedObjects) {
+ listener.onTrackedObjects((TrackedObjects) data);
+ }else if (data instanceof GnssInfo) {
+ listener.onGnssInfo((GnssInfo) data);
+ }else if (data instanceof VehicleState) {
+ listener.onVehicleState((VehicleState) data);
+ }else if (data instanceof AutopilotState) {
+ listener.onAutopilotState((AutopilotState) data);
+ }else if (data instanceof MogoReportMessage) {
+ listener.onReportMessage((MogoReportMessage) data);
+ }else if (data instanceof PerceptionTrafficLight) {
+ listener.onPerceptionTrafficLight((PerceptionTrafficLight) data);
+ }else if (data instanceof BasicInfoReq) {
+ listener.onBasicInfoReq((BasicInfoReq) data);
+ }else if (data instanceof CarConfigResp) {
+ listener.onCarConfigResp((CarConfigResp) data);
+ }else if (data instanceof RecordPanel) {
+ listener.onRecordResult((RecordPanel) data);
+ }else if (data instanceof GlobalPathResp) {
+ listener.onGlobalPathResp((GlobalPathResp) data);
+ }else if (data instanceof Warn) {
+ listener.onWarn((Warn) data);
+ }else if (data instanceof ArrivalNotification) {
+ listener.onArrivalNotification((ArrivalNotification) data);
+ }
+ }
+ }
+
+ String time = sdf.format(new Date(data.nowTime));
+ String builder = time + " [action]:" + data.action + " [data]:" + data.toString();
+ if (!TextUtils.isEmpty(builder)) {
+ buff.write(builder);
buff.newLine();
buff.flush();
}
diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java
index fbfb7d61ae..622e1e6fac 100644
--- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java
+++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java
@@ -54,6 +54,7 @@ import com.zhidao.adas.client.bean.GlobalPathResp;
import com.zhidao.adas.client.bean.GnssInfo;
import com.zhidao.adas.client.bean.IPCConnectState;
import com.zhidao.adas.client.bean.MogoReportMessage;
+import com.zhidao.adas.client.bean.MySSHResult;
import com.zhidao.adas.client.bean.PerceptionTrafficLight;
import com.zhidao.adas.client.bean.RecordPanel;
import com.zhidao.adas.client.bean.TrackedObjects;
@@ -632,7 +633,8 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
@Override
public void onSSHResult(final SSHResult info) {
- LogSave.getInstance().saveLog("接收", info.toString());
+ MySSHResult result = new MySSHResult(info.toString(), 0);
+ LogSave.getInstance().saveLog(result);
showToastCenter("IPC命令下发结果:" + info.code + " 命令:" + info.cmd + " 信息:" + info.msg);
CupidLogUtils.w(TAG, "IPC命令下发结果:" + info.code + " 命令:" + info.cmd + " 信息:" + info.msg);
}
@@ -640,63 +642,63 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
@Override
public void onError(ProtocolStatus status, byte[] bytes) {
ErrorData base = new ErrorData(status, bytes);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().post(base);
}
@Override
public void onTrajectory(MessagePad.Header header, MessagePad.Trajectory trajectory) {
Trajectory base = new Trajectory(header, trajectory);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().post(base);
}
@Override
public void onTrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects trackedObjects) {
TrackedObjects base = new TrackedObjects(header, trackedObjects);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().post(base);
}
@Override
public void onGnssInfo(MessagePad.Header header, MessagePad.GnssInfo gnssInfo) {
GnssInfo base = new GnssInfo(header, gnssInfo);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().post(base);
}
@Override
public void onVehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState vehicleState) {
VehicleState base = new VehicleState(header, vehicleState);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().post(base);
}
@Override
public void onAutopilotState(MessagePad.Header header, MessagePad.AutopilotState autopilotState) {
AutopilotState base = new AutopilotState(header, autopilotState);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().post(base);
}
@Override
public void onReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage mogoReportMessage) {
MogoReportMessage base = new MogoReportMessage(header, mogoReportMessage);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().post(base);
}
@Override
public void onPerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights trafficLights) {
PerceptionTrafficLight base = new PerceptionTrafficLight(header, trafficLights);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().post(base);
}
@Override
public void onBasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq basicInfoReq) {
BasicInfoReq info = new BasicInfoReq(header, basicInfoReq);
- LogSave.getInstance().saveLog("接收", info.toString());
+ LogSave.getInstance().saveLog(info);
AdasManager.getInstance().sendBasicInfoResp("X202021111192N41VY", 1);
showToastCenter("收到车机基础信息请求:" + info.toString());
// EventBus.getDefault().post(new BasicInfoReq(header, basicInfoReq));
@@ -705,14 +707,14 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
@Override
public void onCarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp carConfigResp) {
CarConfigResp base = new CarConfigResp(header, carConfigResp);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().postSticky(base);
}
@Override
public void onRecordResult(MessagePad.Header header, RecordPanelOuterClass.RecordPanel recordPanel) {
RecordPanel base = new RecordPanel(header, recordPanel);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
recordKey = recordPanel.getKey();
recordFileName = recordPanel.getFilename();
EventBus.getDefault().post(base);
@@ -721,27 +723,27 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
@Override
public void onGlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp globalPathResp) {
GlobalPathResp base = new GlobalPathResp(header, globalPathResp);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().post(base);
}
@Override
public void onWarn(MessagePad.Header header, MessagePad.Warn warn) {
Warn base = new Warn(header, warn);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().post(base);
}
@Override
public void onArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification arrivalNotification) {
ArrivalNotification base = new ArrivalNotification(header, arrivalNotification);
- LogSave.getInstance().saveLog("接收", base.toString());
+ LogSave.getInstance().saveLog(base);
EventBus.getDefault().post(base);
}
@Override
public void onUpgradeStateInfo(final IPCUpgradeStateInfo info) {
- LogSave.getInstance().saveLog("接收", info.toString());
+// LogSave.getInstance().saveLog("接收", info.toString());
EventBus.getDefault().post(info);
}
@@ -898,7 +900,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
}
getHandler().sendEmptyMessage(WHAT_IPC_IP);
}
- LogSave.getInstance().saveLog("连接状态", status);
+// LogSave.getInstance().saveLog("连接状态", status);
CupidLogUtils.i(TAG, "connectStatus=" + status);
}
diff --git a/config.gradle b/config.gradle
index 4965ab8c16..5edb8a051f 100644
--- a/config.gradle
+++ b/config.gradle
@@ -166,7 +166,7 @@ ext {
crashreportapmbyte : "com.mogo.test:crashreport-apmbyte:${CRASHREPORT_APMBYTE_VERSION}",
crashreportnoop : "com.mogo.test:crashreport-noop:${CRASHREPORT_NOOP_VERSION}",
crashreportupgrade : "com.mogo.test:crashreport-upgrade:${CRASHREPORT_UPGRADE_VERSION}",
- apm_insight : 'com.volcengine:apm_insight:1.4.4.cn',
+ apm_insight : 'com.volcengine:apm_insight:1.4.5.cn',
apm_insight_crash : 'com.volcengine:apm_insight_crash:1.4.2',
//========================= TTS语音 Maven 版本管理 =========================
diff --git a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java
index 90e5188004..4bf44658d8 100644
--- a/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java
+++ b/core/function-impl/mogo-core-function-bindingcar/src/main/java/com/mogo/eagle/core/function/bindingcar/BindingcarProvider.java
@@ -10,6 +10,7 @@ import com.mogo.eagle.core.data.constants.MogoServicePaths;
import com.mogo.eagle.core.function.api.bindingcar.BindingcarCallBack;
import com.mogo.eagle.core.function.api.bindingcar.IMoGoBindingcarProvider;
import com.mogo.eagle.core.function.bindingcar.network.BindingcarNetWorkManager;
+import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils;
import org.jetbrains.annotations.NotNull;
@@ -66,11 +67,13 @@ public class BindingcarProvider implements IMoGoBindingcarProvider {
private int getScreenType() {
int screenType = -1;
- if (FunctionBuildConfig.appIdentityMode == 0 || FunctionBuildConfig.appIdentityMode == 0xA0) {
+ if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
screenType = 1; //司机屏
- } else if (FunctionBuildConfig.appIdentityMode == 1 || FunctionBuildConfig.appIdentityMode == 0xA1) {
- screenType = 2; //乘客屏
}
+
+// if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
+// screenType = 2; //乘客屏
+// }
return screenType;
}
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/WaringPresenter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/HmiPresenter.kt
similarity index 58%
rename from core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/WaringPresenter.kt
rename to core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/HmiPresenter.kt
index 866cf26116..7ebe9297ac 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/WaringPresenter.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/HmiPresenter.kt
@@ -6,8 +6,8 @@ import com.mogo.commons.mvp.Presenter
* @author xiaoyuzhou
* @date 2021/8/3 3:55 下午
*/
-class WaringPresenter(view: MoGoWarningContract.View?) :
- Presenter(view) {
+class HmiPresenter(view: MoGoHmiContract.View?) :
+ Presenter(view) {
}
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoWarningContract.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiContract.kt
similarity index 93%
rename from core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoWarningContract.kt
rename to core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiContract.kt
index b9916ef0da..3cb6912670 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoWarningContract.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiContract.kt
@@ -11,7 +11,7 @@ import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
*@author xiaoyuzhou
*@date 2021/8/4 3:38 下午
*/
-interface MoGoWarningContract {
+interface MoGoHmiContract {
interface View : IView {
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt
index 76628e984a..70b9dd7140 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/MoGoHmiFragment.kt
@@ -60,10 +60,10 @@ import java.util.*
* 预警图层
*/
@Route(path = MoGoFragmentPaths.PATH_FRAGMENT_HMI)
-class MoGoHmiFragment : MvpFragment(),
+class MoGoHmiFragment : MvpFragment(),
IMoGoWaringProvider,
IMoGoHmiViewProxy,
- MoGoWarningContract.View,
+ MoGoHmiContract.View,
IMoGoAutopilotRecordListener {
private val TAG = "MoGoHmiFragment"
@@ -347,8 +347,8 @@ class MoGoHmiFragment : MvpFragment
return TAG
}
- override fun createPresenter(): WaringPresenter {
- return WaringPresenter(this)
+ override fun createPresenter(): HmiPresenter {
+ return HmiPresenter(this)
}
override fun setSpeedChartViewVisibility(visibility: Int) {
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/BrakeViewStatus.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/BrakeViewStatus.kt
index 5324d03e61..56f19763b4 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/BrakeViewStatus.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/BrakeViewStatus.kt
@@ -10,7 +10,9 @@ import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.animation.DecelerateInterpolator
import androidx.constraintlayout.widget.ConstraintLayout
+import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.hmi.R
+import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import kotlinx.android.synthetic.main.view_brake_light_status.view.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
@@ -28,7 +30,12 @@ class BrakeViewStatus @JvmOverloads constructor(
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
init {
- LayoutInflater.from(context).inflate(R.layout.view_brake_light_status, this, true)
+ //bus乘客端
+ if (AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode) && AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
+ LayoutInflater.from(context).inflate(R.layout.view_brake_light_status_daytime, this, true)
+ } else {
+ LayoutInflater.from(context).inflate(R.layout.view_brake_light_status, this, true)
+ }
}
private var isBrake: Boolean = false
@@ -55,12 +62,12 @@ class BrakeViewStatus @JvmOverloads constructor(
if (isBrake) {
isBrake = false
GlobalScope.launch(Dispatchers.Main) {
- scaleImageAndTv()
+// scaleImageAndTv()
var disappearAnimation = AlphaAnimation(1f, 0f)
- disappearAnimation.duration = 1200
+ disappearAnimation.duration = 400
layout_brake.startAnimation(disappearAnimation)
- image_brake.startAnimation(disappearAnimation)
- tv_brake.startAnimation(disappearAnimation)
+// image_brake.startAnimation(disappearAnimation)
+// tv_brake.startAnimation(disappearAnimation)
disappearAnimation.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationRepeat(p0: Animation?) {
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt
index 394e463161..de079bb6b6 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/turnlight/TurnLightViewStatus.kt
@@ -107,9 +107,9 @@ class TurnLightViewStatus @JvmOverloads constructor(
//显示背景
private fun showNormalAnimation() {
val appearAnimation = AlphaAnimation(0f, 1.0f)
- appearAnimation.duration = 600
+ appearAnimation.duration = 300
val appearAnimationImage = AlphaAnimation(0f, 1.0f)
- appearAnimation.duration = 1000
+ appearAnimation.duration = 500
turn_light_layout.startAnimation(appearAnimation)
left_nor_image.startAnimation(appearAnimationImage)
right_nor_image.startAnimation(appearAnimationImage)
@@ -134,7 +134,7 @@ class TurnLightViewStatus @JvmOverloads constructor(
disappearAnimationLeft.duration = 300
val disappearAnimationBg = AlphaAnimation(1.0f, 0f)
- disappearAnimationBg.duration = 1200
+ disappearAnimationBg.duration = 500
left_nor_image.startAnimation(disappearAnimationLeft)
right_nor_image.startAnimation(disappearAnimationLeft)
@@ -170,7 +170,7 @@ class TurnLightViewStatus @JvmOverloads constructor(
//实现图片闪烁效果
private fun setAnimation(imageView: ImageView) {
val animation = AlphaAnimation(1.0f, 0f)
- animation.duration = 600
+ animation.duration = 500
animation.interpolator = LinearInterpolator()
animation.repeatCount = Animation.INFINITE
animation.repeatMode = Animation.REVERSE
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt
index 66be06132d..4d201ca303 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/CircularProgressView.kt
@@ -5,6 +5,7 @@ import android.content.Context
import android.content.res.TypedArray
import android.graphics.*
import android.util.AttributeSet
+import android.util.Log
import android.view.View
import android.view.animation.OvershootInterpolator
import androidx.core.content.ContextCompat
@@ -16,23 +17,28 @@ import com.mogo.eagle.core.function.hmi.R
* @since: 2022/1/14
*/
class CircularProgressView @JvmOverloads constructor(
- context: Context, attrs: AttributeSet?, defStyleAttr : Int)
- : View(context, attrs, defStyleAttr){
+ context: Context, attrs: AttributeSet?, defStyleAttr: Int)
+ : View(context, attrs, defStyleAttr) {
+
+ val typedArray: TypedArray = context.obtainStyledAttributes(attrs, R.styleable.CircularProgressView)
+ val TAG: String = "CircularProgressView"
- val typedArray : TypedArray = context.obtainStyledAttributes(attrs, R.styleable.CircularProgressView)
// 绘制画笔
- private val mBackPaint : Paint = Paint()
- private val mProgPaint : Paint = Paint()
+ private val mBackPaint: Paint = Paint()
+ private val mProgPaint: Paint = Paint()
+
// 绘制区域
- private var mRectF : RectF? = null
+ private var mRectF: RectF? = null
+
// 圆环渐变色
- private var mColorArray : IntArray?=null
+ private var mColorArray: IntArray? = null
+
// 圆环进度(0-100) 初始化进度
- private var mProgress : Int = typedArray.getInteger(R.styleable.CircularProgressView_progress, 0)
+ private var mProgress: Int = typedArray.getInteger(R.styleable.CircularProgressView_progress, 0)
- constructor(context : Context) : this(context,null)
+ constructor(context: Context) : this(context, null)
- constructor(context : Context,attrs : AttributeSet?) :this(context, attrs, 0)
+ constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
init {
// 初始化背景圆环画笔
@@ -52,9 +58,9 @@ class CircularProgressView @JvmOverloads constructor(
// 初始化进度圆环渐变色
val startColor = typedArray.getColor(R.styleable.CircularProgressView_progStartColor, -1)
val firstColor = typedArray.getColor(R.styleable.CircularProgressView_progFirstColor, -1)
- if(startColor != -1 && firstColor != -1){
- mColorArray = intArrayOf(startColor,firstColor)
- }else{
+ if (startColor != -1 && firstColor != -1) {
+ mColorArray = intArrayOf(startColor, firstColor)
+ } else {
mColorArray = null
}
@@ -67,16 +73,17 @@ class CircularProgressView @JvmOverloads constructor(
val viewWide = getMeasuredWidth() - getPaddingLeft() - getPaddingRight();
val viewHigh = getMeasuredHeight() - getPaddingTop() - getPaddingBottom();
val mRectLength =
- ((if (viewWide > viewHigh) viewHigh else viewWide) - if (mBackPaint.strokeWidth > mProgPaint.strokeWidth) mBackPaint.strokeWidth else mProgPaint.strokeWidth).toInt()
+ ((if (viewWide > viewHigh) viewHigh else viewWide) - if (mBackPaint.strokeWidth > mProgPaint.strokeWidth) mBackPaint.strokeWidth else mProgPaint.strokeWidth).toInt()
val mRectL = getPaddingLeft() + (viewWide - mRectLength) / 2
val mRectT = getPaddingTop() + (viewHigh - mRectLength) / 2
mRectF = RectF(mRectL.toFloat(), mRectT.toFloat(), (mRectL + mRectLength).toFloat(),
- (mRectT + mRectLength).toFloat())
+ (mRectT + mRectLength).toFloat())
+ Log.d(TAG, "渐变色:" + mColorArray?.size.toString())
// 设置进度圆环渐变色
mColorArray?.let {
mProgPaint.shader = LinearGradient(
- 0.0f, 0.0f, 0.0f,
- measuredWidth.toFloat(), it, null, Shader.TileMode.MIRROR)
+ 0.0f, 0.0f, 0.0f,
+ measuredWidth.toFloat(), it, null, Shader.TileMode.MIRROR)
}
}
@@ -84,9 +91,11 @@ class CircularProgressView @JvmOverloads constructor(
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
canvas?.let {
- mRectF?.let { it1 -> it.drawArc(it1, 0.0f, 360.0f, false, mBackPaint) }
- mRectF?.let { it1 -> it.drawArc(it1, 275.0f,
- (360 * mProgress / 100).toFloat(), false, mProgPaint) }
+ mRectF?.let { it1 -> it.drawArc(it1, 0.0f, 360.0f, false, mBackPaint) }
+ mRectF?.let { it1 ->
+ it.drawArc(it1, 275.0f,
+ (360 * mProgress / 100).toFloat(), false, mProgPaint)
+ }
}
}
@@ -95,7 +104,7 @@ class CircularProgressView @JvmOverloads constructor(
* 获取当前进度
* @return 当前进度(0-100)
*/
- fun getProgress() : Int{
+ fun getProgress(): Int {
return mProgress
}
@@ -103,7 +112,7 @@ class CircularProgressView @JvmOverloads constructor(
* 设置当前进度
* @param progress 当前进度(0-100)
*/
- fun setProgress(progress : Int){
+ fun setProgress(progress: Int) {
mProgress = progress
invalidate()
}
@@ -113,12 +122,12 @@ class CircularProgressView @JvmOverloads constructor(
* @param progress 当前进度(0-100)
* @param animTime 动画时间(毫秒)
*/
- fun setProgress(progress : Int, animTime : Long){
- if (animTime<=0){
+ fun setProgress(progress: Int, animTime: Long) {
+ if (animTime <= 0) {
setProgress(progress)
- } else{
+ } else {
val animator = ValueAnimator.ofInt(mProgress, progress)
- animator.addUpdateListener{
+ animator.addUpdateListener {
mProgress = it.animatedValue as Int
invalidate()
}
@@ -132,7 +141,7 @@ class CircularProgressView @JvmOverloads constructor(
* 设置背景圆环宽度
* @param width 背景圆环宽度
*/
- fun setBackWidth(width : Int){
+ fun setBackWidth(width: Int) {
mBackPaint.strokeWidth = width.toFloat()
invalidate()
}
@@ -141,8 +150,8 @@ class CircularProgressView @JvmOverloads constructor(
* 设置背景圆环颜色
* @param color 背景圆环颜色
*/
- fun setBackColor(color : Int){
- mBackPaint.color = ContextCompat.getColor(context,color)
+ fun setBackColor(color: Int) {
+ mBackPaint.color = ContextCompat.getColor(context, color)
invalidate()
}
@@ -150,39 +159,50 @@ class CircularProgressView @JvmOverloads constructor(
* 设置进度圆环宽度
* @param width 进度圆环宽度
*/
- fun setProgWidth(width : Int){
+ fun setProgWidth(width: Int) {
mProgPaint.strokeWidth = width.toFloat()
invalidate()
}
/**
- * 设置进度圆环颜色
+ * 设置进度圆环渐变色起始色
* @param color 景圆环颜色
*/
- fun setProgColor(color : Int){
- mProgPaint.color = ContextCompat.getColor(context,color)
+ fun setProgColor(color: Int) {
+ mProgPaint.color = ContextCompat.getColor(context, color)
mProgPaint.shader = null
invalidate()
}
- fun setProgColor(startColor : Int,endColor: Int){
- mColorArray = intArrayOf(ContextCompat.getColor(context,startColor),ContextCompat.getColor(context,endColor))
+
+ /**
+ * 渐变色结束色
+ */
+ fun setProgFirstColor(color: Int) {
+ mProgPaint.color = ContextCompat.getColor(context, color)
+ mProgPaint.shader = null
+ invalidate()
+ }
+
+
+ fun setProgColor(startColor: Int, endColor: Int) {
+ mColorArray = intArrayOf(ContextCompat.getColor(context, startColor), ContextCompat.getColor(context, endColor))
mColorArray?.let {
mProgPaint.shader = LinearGradient(0f, 0f, 0f,
- getMeasuredWidth().toFloat(), it, null, Shader.TileMode.MIRROR)
+ getMeasuredWidth().toFloat(), it, null, Shader.TileMode.MIRROR)
}
}
- fun setProgColor(colorArray : IntArray){
+ fun setProgColor(colorArray: IntArray) {
colorArray.let {
- if(it.size<2){
+ if (it.size < 2) {
return
}
mColorArray = it.copyOf()
- mColorArray?.let{
+ mColorArray?.let {
mProgPaint.shader = LinearGradient(0f, 0f, 0f,
- getMeasuredWidth().toFloat(), it, null, Shader.TileMode.MIRROR)
+ getMeasuredWidth().toFloat(), it, null, Shader.TileMode.MIRROR)
}
}
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java
new file mode 100644
index 0000000000..97ab6a6dcd
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/SteeringWheelView.java
@@ -0,0 +1,190 @@
+package com.mogo.eagle.core.function.hmi.ui.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.animation.LinearInterpolator;
+import android.view.animation.RotateAnimation;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.ConstraintLayout;
+
+import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo;
+import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
+import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotVehicleStateListener;
+import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager;
+import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotVehicleStateListenerManager;
+import com.mogo.eagle.core.function.hmi.R;
+import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
+
+import org.jetbrains.annotations.NotNull;
+
+import chassis.Chassis;
+import mogo.telematics.pad.MessagePad;
+import mogo_msg.MogoReportMsg;
+
+import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_BUS_P;
+
+/**
+ * @author Jing
+ * @description 方向盘
+ * 方向盘跟随CAN数据做旋转
+ * 档位随CAN数据做切换和高亮显示
+ * @since: 4/7/22
+ */
+public class SteeringWheelView extends ConstraintLayout {
+ private static final String TAG = "SteeringWheelView";
+ private ImageView autopilotIV;
+ private TextView steeringTV;
+ private TapPositionView tapPositionView;
+ private CircularProgressView steeringCircularV;
+ private RotateAnimation rotateAnimation;
+ private float fromDegrees = 0;//方向盘旋转起始位置
+
+ public SteeringWheelView(@NonNull Context context) {
+ super(context);
+ Log.d(TAG, "1");
+ }
+
+ public SteeringWheelView(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ Log.d(TAG, "2");
+ LayoutInflater.from(context).inflate(R.layout.hmi_steering_wheel, this);
+ initView();
+ CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, mGoAutopilotStatusListener);
+ CallerAutopilotVehicleStateListenerManager.INSTANCE.addListener(TAG, mIMoGoAutopilotVehicleStateListener);
+ }
+
+ private void initView() {
+ autopilotIV = (ImageView) findViewById(R.id.autopilot_iv);
+ steeringTV = findViewById(R.id.steering_tv);
+ tapPositionView = findViewById(R.id.tap_position);
+ steeringCircularV = findViewById(R.id.steering_circular);
+ steeringCircularV.setBackWidth(8);
+ steeringCircularV.setBackColor(R.color.hmi_light_blue_00);
+ steeringCircularV.setProgColor(R.color.hmi_light_blue, R.color.hmi_dark_blue);
+ steeringCircularV.setProgress(10, 1000);
+ }
+
+ public SteeringWheelView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ Log.d(TAG, "3");
+ }
+
+ public SteeringWheelView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ Log.d(TAG, "4");
+ }
+
+ private final IMoGoAutopilotStatusListener mGoAutopilotStatusListener = new IMoGoAutopilotStatusListener() {
+ @Override
+ public void onAutopilotArriveAtStation(@org.jetbrains.annotations.Nullable MessagePad.ArrivalNotification arrivalNotification) {
+
+ }
+
+ @Override
+ public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) {
+
+ }
+
+ @Override
+ public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) {
+ if (autopilotStatusInfo == null) return;
+ int state = autopilotStatusInfo.getState();
+ CallerLogger.INSTANCE.d(M_BUS_P + TAG, "state = %s", state);
+ if (autopilotIV != null) {
+ Log.d(TAG, "autopilotIV != null");
+ if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {
+
+ autopilotIV.setImageResource(R.drawable.bg_auto);
+
+ } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) {
+ autopilotIV.setImageResource(R.drawable.bg_auto_nor);
+
+ } else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE) {
+ autopilotIV.setImageResource(R.drawable.bg_auto_nor);
+ }
+ } else {
+ Log.d(TAG, "autopilotIV=null");
+ }
+ }
+
+ @Override
+ public void onAutopilotSNRequest() {
+
+ }
+ };
+
+ private final IMoGoAutopilotVehicleStateListener mIMoGoAutopilotVehicleStateListener = new IMoGoAutopilotVehicleStateListener() {
+ /**
+ * 车辆转向灯
+ * @param lightSwitch
+ */
+ @Override
+ public void onAutopilotLightSwitchData(@org.jetbrains.annotations.Nullable Chassis.LightSwitch lightSwitch) {
+ Log.d(TAG, "车辆转向灯:" + lightSwitch.toString());
+ }
+
+ /**
+ * 刹车灯
+ * @param brakeLight
+ */
+ @Override
+ public void onAutopilotBrakeLightData(boolean brakeLight) {
+ Log.d(TAG, "刹车灯:" + String.valueOf(brakeLight));
+ }
+
+ @Override
+ public void onAutopilotSteeringData(float steering) {
+ if (steeringTV != null && String.valueOf(steering) != null) {
+ steeringTV.setText(String.valueOf(steering) + "°");
+ steeringCircularV.setProgress((int) steering, 1000);
+ animationWithSteeringData(steering);
+ } else {
+ Log.d(TAG, "steering未呈现");
+ }
+ }
+
+ /**
+ * 档位
+ * @param gear
+ */
+ @Override
+ public void onAutopilotGearData(@NotNull Chassis.GearPosition gear) {
+ Log.d(TAG, "档位" + gear.toString());
+ if (tapPositionView != null) {
+ tapPositionView.updateWithGear(gear);
+ }
+ }
+ };
+
+ /**
+ * 方向盘随CAN数据做方向和角度旋转
+ * 参数1从哪一个旋转角度开始
+ * 参数2:转到什么角度
+ * 后4个参数用于设置围绕着旋转的圆的圆心在哪里
+ * 参数3:肯定x轴坐标的类型,有ABSOLUT绝对坐标、RELATIVE_TO_SELF相对于自身坐标、RELATIVE_TO_PARENT相对于父控件的坐标
+ * 参数4:x轴的值,0.5f代表是以自身这个控件的一半长度为x轴
+ * 参数5:肯定y轴坐标的类型
+ * 参数6:y轴的值,0.5f代表是以自身这个控件的一半长度为x轴
+ *
+ * @param steering
+ */
+ private void animationWithSteeringData(float steering) {
+ Log.d(TAG, "方向盘转动" + String.valueOf(steering));
+ rotateAnimation = new RotateAnimation(fromDegrees, steering,
+ RotateAnimation.RELATIVE_TO_SELF, 0.5f,
+ RotateAnimation.RELATIVE_TO_SELF, 0.5f);
+ rotateAnimation.setDuration(1000);//旋转时长
+ rotateAnimation.setFillAfter(true);//旋转后保持原状
+ autopilotIV.clearAnimation();
+ autopilotIV.startAnimation(rotateAnimation);
+ fromDegrees = steering;
+ }
+
+}
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TapPositionView.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TapPositionView.java
new file mode 100644
index 0000000000..1a655e3660
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/widget/TapPositionView.java
@@ -0,0 +1,80 @@
+package com.mogo.eagle.core.function.hmi.ui.widget;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.ConstraintLayout;
+
+import com.mogo.eagle.core.function.hmi.R;
+
+import org.jetbrains.annotations.NotNull;
+
+import chassis.Chassis;
+
+/**
+ * @author Jing
+ * @description 方向盘下方的档位
+ * @since: 4/7/22
+ */
+public class TapPositionView extends ConstraintLayout {
+ private static final String TAG = "TapPositionView";
+ private TextView tabP;
+ private TextView tabR;
+ private TextView tabN;
+ private TextView tabD;
+
+ public TapPositionView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ Log.d(TAG, "2");
+ LayoutInflater.from(context).inflate(R.layout.hmi_tap_position, this);
+ tabP = findViewById(R.id.tap_p);
+ tabR = findViewById(R.id.tap_r);
+ tabN = findViewById(R.id.tap_n);
+ tabD = findViewById(R.id.tap_d);
+ }
+
+ public void updateWithGear(@NotNull Chassis.GearPosition gear) {
+ if (tabP != null && tabR != null && tabN != null && tabD != null) {
+ switch (gear) {
+ case GEAR_NONE:
+ tabP.setTextColor(Color.parseColor("#6E8EC9"));
+ tabR.setTextColor(Color.parseColor("#6E8EC9"));
+ tabN.setTextColor(Color.parseColor("#6E8EC9"));
+ tabD.setTextColor(Color.parseColor("#6E8EC9"));
+ break;
+ case GEAR_P:
+ tabP.setTextColor(Color.parseColor("#0043FF"));
+ tabR.setTextColor(Color.parseColor("#6E8EC9"));
+ tabN.setTextColor(Color.parseColor("#6E8EC9"));
+ tabD.setTextColor(Color.parseColor("#6E8EC9"));
+ break;
+ case GEAR_R:
+ tabR.setTextColor(Color.parseColor("#0043FF"));
+ tabP.setTextColor(Color.parseColor("#6E8EC9"));
+ tabN.setTextColor(Color.parseColor("#6E8EC9"));
+ tabD.setTextColor(Color.parseColor("#6E8EC9"));
+ break;
+ case GEAR_N:
+ tabN.setTextColor(Color.parseColor("#0043FF"));
+ tabR.setTextColor(Color.parseColor("#6E8EC9"));
+ tabP.setTextColor(Color.parseColor("#6E8EC9"));
+ tabD.setTextColor(Color.parseColor("#6E8EC9"));
+ break;
+ case GEAR_D:
+ tabD.setTextColor(Color.parseColor("#0043FF"));
+ tabN.setTextColor(Color.parseColor("#6E8EC9"));
+ tabR.setTextColor(Color.parseColor("#6E8EC9"));
+ tabP.setTextColor(Color.parseColor("#6E8EC9"));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+}
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bus_shache_nor_daytime.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bus_shache_nor_daytime.png
new file mode 100644
index 0000000000..d16d1ce141
Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/bus_shache_nor_daytime.png differ
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto.png
new file mode 100644
index 0000000000..748625a43c
Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto.png differ
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto_nor.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto_nor.png
new file mode 100644
index 0000000000..a9965aaf1f
Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_auto_nor.png differ
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_outer.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_outer.xml
new file mode 100644
index 0000000000..f5e1da1a55
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_outer.xml
@@ -0,0 +1,13 @@
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_wheel.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_wheel.xml
new file mode 100644
index 0000000000..156cc4f0e0
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/bg_steering_wheel.xml
@@ -0,0 +1,9 @@
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_in_steering.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_in_steering.png
new file mode 100644
index 0000000000..4545e67555
Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/icon_in_steering.png differ
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/streeing_wheel_rotate.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/streeing_wheel_rotate.xml
new file mode 100644
index 0000000000..a883260939
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xxhdpi/streeing_wheel_rotate.xml
@@ -0,0 +1,18 @@
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/brakelight_background_daytime.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/brakelight_background_daytime.xml
new file mode 100644
index 0000000000..6c257d12d7
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable/brakelight_background_daytime.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml
index b24ba66e08..f2b87a5de9 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/fragment_hmi.xml
@@ -137,8 +137,8 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/hmi_tap_position.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/hmi_tap_position.xml
new file mode 100644
index 0000000000..5020791857
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/hmi_tap_position.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml
index 3e39181da0..ca5882f47d 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/module_main_activity_main.xml
@@ -37,7 +37,7 @@
app:layout_constraintEnd_toEndOf="parent" />
-
+
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_brake_light_status_daytime.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_brake_light_status_daytime.xml
new file mode 100644
index 0000000000..1996b061ac
--- /dev/null
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_brake_light_status_daytime.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_turn_light_status.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_turn_light_status.xml
index d2dd2a6052..4127b7d4f3 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_turn_light_status.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_turn_light_status.xml
@@ -38,8 +38,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
- android:layout_marginLeft="10px"
- android:layout_marginTop="5px"
+ android:layout_marginLeft="13px"
+ android:layout_marginTop="3px"
android:src="@drawable/module_arrow_left_select_nor"
android:visibility="gone" />
@@ -48,8 +48,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
- android:layout_marginTop="5px"
- android:layout_marginRight="10px"
+ android:layout_marginTop="3px"
+ android:layout_marginRight="13px"
android:src="@drawable/module_arrow_right_select_nor"
android:visibility="gone" />
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml
index bd4ed43a04..7218d86231 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/color.xml
@@ -46,6 +46,7 @@
#3B4577
#000000
+ #E6FFFFFF
#FFFFA28B
#FFDA1100
@@ -53,4 +54,7 @@
#FF006D43
#FFFFE198
#FFFF9B00
+ #45D3FF
+ #1B5BFF
+ #0045D3FF
\ No newline at end of file
diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml
index 79e0076a1b..3641ccb612 100644
--- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml
+++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/dimens.xml
@@ -37,10 +37,12 @@
1066px
60px
- 270px
+ 275px
120px
460px
120px
+ 220px
+ 120px
225px
154px
diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawer.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawer.java
index 8c989e773c..f56a931402 100644
--- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawer.java
+++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawer.java
@@ -1,15 +1,18 @@
package com.mogo.eagle.core.function.map;
+import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_HMI;
+
+import android.annotation.SuppressLint;
import android.content.Context;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.eagle.core.data.config.FunctionBuildConfig;
import com.mogo.eagle.core.data.enums.TrafficTypeEnum;
-import com.mogo.eagle.core.data.traffic.TrafficData;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
import com.mogo.map.MogoMarkerManager;
import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.common.utils.DrivingDirectionUtils;
import java.util.ArrayList;
import java.util.List;
@@ -31,12 +34,12 @@ public class IdentifyDataDrawer {
/**
* 上一帧数据的缓存
*/
- private static final ConcurrentHashMap mMarkersCaches = new ConcurrentHashMap<>();
+ private static final ConcurrentHashMap mMarkersCaches = new ConcurrentHashMap<>();
/**
* 已经感知不到的脏数据
*/
- private final ConcurrentHashMap mDirtyPositions = new ConcurrentHashMap<>();
+ private final ConcurrentHashMap firstData = new ConcurrentHashMap<>();
/**
* 记录每次实际绘制的交通元素UUID
*/
@@ -71,6 +74,7 @@ public class IdentifyDataDrawer {
*
* @param resultList adas感知融合数据
*/
+ @SuppressLint("NewApi")
public void renderAdasRecognizedResult(List resultList) {
if (resultList == null || resultList.isEmpty()) {
clearOldMarker();
@@ -84,35 +88,32 @@ public class IdentifyDataDrawer {
return;
}
- // 循环将集合中的数据提取记录
-
- for (MessagePad.TrackedObject trafficData : resultList) {
- // 过滤掉未知感知数据
- if (!FunctionBuildConfig.isDrawUnknownIdentifyData &&
- trafficData.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.getType()) {
- //CallerLogger.INSTANCE.w(TAG, "未知感知类型数据,丢弃,不渲染");
- continue;
+ long start = System.currentTimeMillis();
+ //清除缓存
+ for (MessagePad.TrackedObject data : resultList) {
+ if (trafficDataUuidList.size() > 0 && trafficDataUuidList.contains("" + data.getUuid())) {
+ trafficDataUuidList.remove("" + data.getUuid());
}
- trafficDataUuidList.add("" + trafficData.getUuid());
}
-// // 找出上一针数据中已经不在本次数据中存在的数据
-// for (String uuid : mMarkersCaches.keySet()) {
-// if (!trafficDataUuidList.contains(uuid)) {
-// mDirtyPositions.put(uuid, mMarkersCaches.get(uuid));
-// }
-// }
-// // 移除脏数据
-// for (String uuid : mDirtyPositions.keySet()) {
-// MogoApisHandler.getInstance().getApis()
-// .getMapServiceApi()
-// .getMarkerManager(mContext)
-// .removeMarker(uuid);
-// }
+ trafficDataUuidList.forEach(uuid -> {
+ mMarkersCaches.remove(uuid);
+ });
- // 绘制新数据
- MogoMarkerManager.getInstance(mContext)
- .updateBatchMarkerPosition(filterTrafficData(resultList));
+ CallerLogger.INSTANCE.d(M_HMI + "arrow47", "origin data size : " + resultList.size());
+ ArrayList filterList = filterTrafficData(resultList);
+ long cost = System.currentTimeMillis() - start;
+ CallerLogger.INSTANCE.d(M_HMI + "arrow47", "cost : " + cost);
+
+ if (filterList.size() > 0) {
+ // 绘制新数据
+ MogoMarkerManager.getInstance(mContext)
+ .updateBatchMarkerPosition(filterList);
+ }
+
+ CallerLogger.INSTANCE.d(M_HMI + "arrow47", "first data size : " + firstData.size() + " , mMarkersCaches : " + mMarkersCaches.size());
+ // 首次未添加的感知物在调用完绘制方法后再塞入cache map
+ mMarkersCaches.putAll(firstData);
}
/**
@@ -121,14 +122,46 @@ public class IdentifyDataDrawer {
* @return 过滤后的数据集合
*/
private ArrayList filterTrafficData(List trafficData) {
+ firstData.clear();
mFilterTrafficData.clear();
+ trafficDataUuidList.clear();
for (MessagePad.TrackedObject data : trafficData) {
// 过滤掉未知感知数据
- if (data.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.getType()) {
+ if (!FunctionBuildConfig.isDrawUnknownIdentifyData && data.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.getType()) {
//CallerLogger.INSTANCE.w(TAG, "未知感知类型数据,丢弃,不渲染");
continue;
}
- mFilterTrafficData.add(data);
+
+ //首次过来的数据不添加,首次未添加的感知物在调用完绘制方法后再塞入cache map
+ MessagePad.TrackedObject cacheData = mMarkersCaches.get("" + data.getUuid());
+ if (cacheData != null) {
+ MessagePad.TrackedObject correctData = null;
+ //todo 进行修正
+ if (Math.abs(cacheData.getHeading() - data.getHeading()) > 40 && Math.abs(cacheData.getHeading() - data.getHeading()) < 90) {
+ CallerLogger.INSTANCE.d(M_HMI + "arrow47", "uuid: " + data.getUuid() + " , 40~90差值范围 , 上一帧 : " + cacheData.getHeading() + " , 当前帧 : " + data.getHeading());
+ }
+ if (Math.abs(cacheData.getHeading() - data.getHeading()) > 90) {
+ int degree = DrivingDirectionUtils.getDegreeOfCar2Poi(cacheData.getLongitude(), cacheData.getLatitude(), data.getLongitude(), data.getLatitude(), Double.valueOf(cacheData.getHeading()).intValue());
+ if (degree > 90) {
+ CallerLogger.INSTANCE.d(M_HMI + "arrow47", "uuid: " + data.getUuid() + " , 夹角 : " + degree + " , 修正 上一帧 : " + cacheData.getHeading() + " , 当前帧 : " + data.getHeading());
+ correctData = data.toBuilder().setHeading(cacheData.getHeading()).build();
+ } else {
+ CallerLogger.INSTANCE.d(M_HMI + "arrow47", "uuid: " + data.getUuid() + " , 夹角 : " + degree + " , 未修正 上一帧 : " + cacheData.getHeading() + " , 当前帧 : " + data.getHeading());
+ }
+ }
+ if (correctData != null) {
+ mFilterTrafficData.add(correctData);
+ //更新已存在的感知物体数据
+ mMarkersCaches.put("" + data.getUuid(), correctData);
+ } else {
+ mFilterTrafficData.add(data);
+ //更新已存在的感知物体数据
+ mMarkersCaches.put("" + data.getUuid(), data);
+ }
+ } else {
+ firstData.put("" + data.getUuid(), data);
+ }
+ trafficDataUuidList.add("" + data.getUuid());
}
return mFilterTrafficData;
}
diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawerTest.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawerTest.java
new file mode 100644
index 0000000000..a5f40d4a71
--- /dev/null
+++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/IdentifyDataDrawerTest.java
@@ -0,0 +1,212 @@
+package com.mogo.eagle.core.function.map;
+
+import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_HMI;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+
+import com.mogo.commons.AbsMogoApplication;
+import com.mogo.eagle.core.data.config.FunctionBuildConfig;
+import com.mogo.eagle.core.data.enums.TrafficTypeEnum;
+import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
+import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
+import com.mogo.map.MogoMap;
+import com.mogo.map.MogoMarkerManager;
+import com.mogo.module.common.MogoApisHandler;
+import com.mogo.module.common.constants.AdasRecognizedType;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+
+import mogo.telematics.pad.MessagePad;
+
+/**
+ * @author xiaoyuzhou
+ * @date 2021/10/19 10:45 上午
+ * 域控制器识别信息绘制
+ */
+public class IdentifyDataDrawerTest {
+ private static final String TAG = "IdentifyDataDrawer";
+
+ protected final Context mContext;
+ private static volatile IdentifyDataDrawerTest sInstance;
+
+ /**
+ * 上一帧数据的缓存
+ */
+ private static final ConcurrentHashMap mMarkersCaches = new ConcurrentHashMap<>();
+
+ private static final ConcurrentHashMap algoCache = new ConcurrentHashMap<>();
+
+ /**
+ * 记录每次实际绘制的交通元素UUID
+ */
+ private final ArrayList trafficDataUuidList = new ArrayList<>();
+ /**
+ * 过滤后的数据集合
+ */
+ private final ArrayList mFilterTrafficData = new ArrayList<>();
+
+ private IdentifyDataDrawerTest() {
+ mContext = AbsMogoApplication.getApp();
+ addPreVehicleModel();
+ }
+
+ public static IdentifyDataDrawerTest getInstance() {
+ if (sInstance == null) {
+ synchronized (IdentifyDataDrawerTest.class) {
+ if (sInstance == null) {
+ sInstance = new IdentifyDataDrawerTest();
+ }
+ }
+ }
+ return sInstance;
+ }
+
+ public synchronized void release() {
+ sInstance = null;
+ }
+
+ /**
+ * 渲染 adas 识别的数据
+ *
+ * @param resultList adas感知融合数据
+ */
+ @SuppressLint("NewApi")
+ public void renderAdasRecognizedResult(List resultList) {
+ if (resultList == null || resultList.isEmpty()) {
+ clearOldMarker();
+ CallerLogger.INSTANCE.w(TAG, "感知数据为空无需渲染……");
+ return;
+ }
+
+ if (!MogoApisHandler.getInstance().getApis().getStatusManagerApi().isVrMode()) {
+ clearOldMarker();
+ CallerLogger.INSTANCE.w(TAG, "渲染 adas 识别的数据 当前不是VR模式");
+ return;
+ }
+
+ //清除缓存
+ for (MessagePad.TrackedObject data : resultList) {
+ if (trafficDataUuidList.size() > 0 && trafficDataUuidList.contains("" + data.getUuid())) {
+ trafficDataUuidList.remove("" + data.getUuid());
+ }
+ }
+ trafficDataUuidList.forEach(uuid -> {
+ mMarkersCaches.remove(uuid);
+ algoCache.remove(uuid);
+ });
+
+ ArrayList filterList = filterTrafficData(resultList);
+ if (filterList.size() > 0) {
+ // 绘制新数据
+ MogoMarkerManager.getInstance(mContext)
+ .updateBatchMarkerPosition(filterList);
+ }
+ }
+
+ /**
+ * 数据过滤器
+ *
+ * @return 过滤后的数据集合
+ */
+ private ArrayList filterTrafficData(List trafficData) {
+ mFilterTrafficData.clear();
+ trafficDataUuidList.clear();
+ for (MessagePad.TrackedObject data : trafficData) {
+ // 过滤掉未知感知数据
+ if (!FunctionBuildConfig.isDrawUnknownIdentifyData && data.getType() == TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI.getType()) {
+ //CallerLogger.INSTANCE.w(TAG, "未知感知类型数据,丢弃,不渲染");
+ continue;
+ }
+
+ MessagePad.TrackedObject cacheData = mMarkersCaches.get("" + data.getUuid());
+ double heading = MogoMap.getInstance().getMogoMap().getUIController().getAngle(cacheData.getLongitude(), cacheData.getLatitude(), data.getLongitude(), data.getLatitude());
+ CallerLogger.INSTANCE.d(M_HMI + "arrow47", " uuid : " + data.getUuid() + " , origin heading : " + data.getHeading() + " , correct heading : " + heading + " ---- " + (data.getHeading() - heading));
+
+// double heading = kalmanFilter(data);
+ MessagePad.TrackedObject correctData = data.toBuilder().setHeading(heading).build();
+ mFilterTrafficData.add(correctData);
+ //更新已存在的感知物体数据
+ mMarkersCaches.put("" + correctData.getUuid(), correctData);
+ trafficDataUuidList.add("" + correctData.getUuid());
+ }
+ return mFilterTrafficData;
+ }
+
+ private double kalmanFilter(MessagePad.TrackedObject data) {
+ String uuid = "" + data.getUuid();
+ if (algoCache.containsKey(uuid)) {
+ Object o = algoCache.get(uuid);
+ KalmanFilter kf = (KalmanFilter) o;
+ assert kf != null;
+ double[] lonLat = kf.filter(data.getLongitude(), data.getLatitude());
+ algoCache.put(uuid, kf);
+ MessagePad.TrackedObject cacheTrackObj = mMarkersCaches.get(uuid);
+ assert cacheTrackObj != null;
+ double heading = MogoMap.getInstance().getMogoMap().getUIController().getAngle(cacheTrackObj.getLongitude(), cacheTrackObj.getLatitude(), lonLat[0], lonLat[1]);
+ CallerLogger.INSTANCE.d(M_HMI + "arrow47", " uuid : " + uuid + " , origin heading : " + data.getHeading() + " , correct heading : " + heading + " ---- " + (data.getHeading() - heading));
+ return heading;
+ } else {
+ double r = 0.00005;
+ if (AdasRecognizedType.valueFrom(data.getType()) == AdasRecognizedType.classIdTrafficBus || AdasRecognizedType.valueFrom(data.getType()) == AdasRecognizedType.classIdTrafficTruck) {
+ r = 0.0001;
+ }
+ algoCache.put(uuid, new KalmanFilter(data.getLongitude(), data.getLatitude(), r));
+ return data.getHeading();
+ }
+ }
+
+ /**
+ * 清除旧的 marker 数据
+ */
+ public void clearOldMarker() {
+ for (String uuid : trafficDataUuidList) {
+ MogoMarkerManager.getInstance(mContext)
+ .removeMarker(uuid);
+ }
+ trafficDataUuidList.clear();
+ }
+
+ private void addPreVehicleModel() {
+ CallerLogger.INSTANCE.d(TAG, "添加感知模型到地图中……");
+ addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_WEI_ZHI, "添加感知模型到地图中……preVehicleStrWeiZhi=");
+
+ addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_PEOPLE, "添加感知模型到地图中……preVehicleStrPeople=");
+
+ addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_BICYCLE, "添加感知模型到地图中……preVehicleStrBicycle=");
+
+ addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_TA_CHE, "添加感知模型到地图中……preVehicleStrTaChe=");
+
+ addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_MOTO, "添加感知模型到地图中……preVehicleStrMoto=");
+
+ addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_BUS, "添加感知模型到地图中……preVehicleStrBus=");
+
+ addPreVehicleModelWeiZhi(TrafficTypeEnum.TYPE_TRAFFIC_ID_TRUCK, "添加感知模型到地图中……preVehicleStrTruck=");
+ }
+
+ /**
+ * 添加模型到地图中
+ *
+ * @param typeTrafficIdWeiZhi
+ * @param s
+ */
+ private void addPreVehicleModelWeiZhi(TrafficTypeEnum typeTrafficIdWeiZhi, String s) {
+ String preVehicleStrWeiZhi = MogoMarkerManager.getInstance(mContext)
+ .addPreVehicleModel(typeTrafficIdWeiZhi.getType(),
+ typeTrafficIdWeiZhi.getTraffic3DIconId());
+ CallerLogger.INSTANCE.d(TAG, s + preVehicleStrWeiZhi);
+
+ if (preVehicleStrWeiZhi == null) {
+ UiThreadHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ CallerLogger.INSTANCE.w(TAG, "添加感知模型到地图中失败,尝试重复添加……");
+ addPreVehicleModelWeiZhi(typeTrafficIdWeiZhi, s);
+ }
+ }, 1000L);
+ }
+ }
+
+}
diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/KalmanFilter.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/KalmanFilter.java
new file mode 100644
index 0000000000..08605437fa
--- /dev/null
+++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/map/KalmanFilter.java
@@ -0,0 +1,34 @@
+package com.mogo.eagle.core.function.map;
+
+public class KalmanFilter {
+ private final double q = 1.0E-6D;
+ double r = 5.0E-5D;
+ double[][] xhat = new double[][]{{0.0D, 0.0D}, {0.0D, 0.0D}};
+ double[][] p = new double[][]{{1.0D, 1.0D}, {0.0D, 0.0D}};
+ double[][] xhatminus = new double[][]{{0.0D, 0.0D}, {0.0D, 0.0D}};
+ double[][] pMinus = new double[][]{{0.0D, 0.0D}, {0.0D, 0.0D}};
+ double[][] k = new double[][]{{0.0D, 0.0D}, {0.0D, 0.0D}};
+ int idx = 1;
+
+ public KalmanFilter(double lon, double lat, double r) {
+ this.xhat[0][0] = lon;
+ this.xhat[0][1] = lat;
+ this.r = r;
+ }
+
+ public double[] filter(double lon, double lat) {
+ for(int i = 0; i < 2; ++i) {
+ this.xhatminus[this.idx][i] = this.xhat[1 - this.idx][i];
+ this.pMinus[this.idx][i] = this.p[1 - this.idx][i] + 1.0E-6D;
+ this.k[this.idx][i] = this.pMinus[this.idx][i] / (this.pMinus[this.idx][i] + this.r);
+ double value = i == 0 ? lon : lat;
+ this.xhat[this.idx][i] = this.xhatminus[this.idx][i] + this.k[this.idx][i] * (value - this.xhatminus[this.idx][i]);
+ this.p[this.idx][i] = (1.0D - this.k[this.idx][i]) * this.pMinus[this.idx][i];
+ }
+
+ double lon1 = this.xhat[this.idx][0];
+ double lat1 = this.xhat[this.idx][1];
+ this.idx = 1 - this.idx;
+ return new double[]{lon1, lat1};
+ }
+}
diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java
index 0531987cb2..ecbb52d6be 100644
--- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java
+++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/smp/SmallMapDirectionView.java
@@ -262,7 +262,7 @@ public class SmallMapDirectionView
new PolylineOptions()
.addAll(mCoordinatesLatLng)
.color(Color.argb(255, 31, 127, 255))
- .width(5));
+ .width(6));
}
// else {
diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_end.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_end.png
index f3cb78aed4..f030e6887d 100644
Binary files a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_end.png and b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_end.png differ
diff --git a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_start.png b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_start.png
index 4d2a797823..9a7f520b33 100644
Binary files a/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_start.png and b/core/function-impl/mogo-core-function-map/src/main/res/drawable-xhdpi-2560x1440/module_small_map_view_dir_start.png differ
diff --git a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightHMIManager.kt b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightHMIManager.kt
index 08e0e109ee..66ce2bb505 100644
--- a/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightHMIManager.kt
+++ b/core/function-impl/mogo-core-function-v2x/src/main/java/com/mogo/eagle/core/function/v2x/trafficlight/TrafficLightHMIManager.kt
@@ -40,20 +40,20 @@ class TrafficLightHMIManager {
trafficLightStatus.isGreen() || trafficLightStatus.isFlashGreen() -> {
CallerHmiManager.showWarningTrafficLight(3)
CallerHmiManager.changeCountdownGreen(remain)
- CallerHmiManager.changeCountdownRed(-1)
- CallerHmiManager.changeCountdownYellow(-1)
+// CallerHmiManager.changeCountdownRed(-1)
+// CallerHmiManager.changeCountdownYellow(-1)
}
trafficLightStatus.isYellow() -> {
CallerHmiManager.showWarningTrafficLight(2)
CallerHmiManager.changeCountdownYellow(remain)
- CallerHmiManager.changeCountdownGreen(-1)
- CallerHmiManager.changeCountdownRed(-1)
+// CallerHmiManager.changeCountdownGreen(-1)
+// CallerHmiManager.changeCountdownRed(-1)
}
trafficLightStatus.isRed() -> {
CallerHmiManager.showWarningTrafficLight(1)
CallerHmiManager.changeCountdownRed(remain)
- CallerHmiManager.changeCountdownGreen(-1)
- CallerHmiManager.changeCountdownYellow(-1)
+// CallerHmiManager.changeCountdownGreen(-1)
+// CallerHmiManager.changeCountdownYellow(-1)
}
}
}
diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/OverlayViewUtils.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/OverlayViewUtils.java
new file mode 100644
index 0000000000..e65a5b3c52
--- /dev/null
+++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/util/OverlayViewUtils.java
@@ -0,0 +1,93 @@
+package com.mogo.eagle.core.utilcode.util;
+
+import android.app.Activity;
+import android.content.Context;
+import android.view.View;
+import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
+
+/**
+ * 遮罩层工具类
+ *
+ * @author mogoauto
+ */
+public class OverlayViewUtils {
+ private static final String TAG = "OverlayViewUtils";
+
+ private static WindowManager windowManager;
+ private static Context applicationContext;
+ private static volatile boolean isShowing = false;
+
+ /**
+ * 记录上一次的View
+ */
+ private static View lastOverlayView;
+
+ /**
+ * 添加覆盖View在Activity上面
+ */
+ public static void showOverlayView(Activity context, View overlayView) {
+ if (applicationContext == null) {
+ applicationContext = context.getApplicationContext();
+ }
+
+ if (windowManager == null) {
+ windowManager = context.getWindowManager();
+ }
+
+ // 设置View显示模式,沉浸式的侵入到状态栏,导航栏
+ overlayView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
+
+ LayoutParams params = new LayoutParams();
+ params.width = LayoutParams.MATCH_PARENT;
+ params.height = LayoutParams.MATCH_PARENT;
+ params.alpha = 1.0f;
+ // 设置窗口类型为应用子窗口,和PopupWindow同类型
+ params.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;
+ // 没有边界限制,允许窗口扩展到屏幕外
+ params.flags = WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+
+
+ // 如果正在展示中,并且lastOverlayView不为null,先做移除操作,保证覆盖在最上面的View只有一个,防止叠加导致无法移除
+ if (lastOverlayView != null) {
+ dismissOverlayView(lastOverlayView);
+ }
+
+ try {
+ // 后门逻辑,长时间触摸消失
+ overlayView.setOnLongClickListener(v -> {
+ dismissOverlayView(lastOverlayView);
+ return true;
+ });
+ lastOverlayView = overlayView;
+ windowManager.addView(overlayView, params);
+ isShowing = true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ /**
+ * 移除覆盖View在Activity上面
+ */
+ public static void dismissOverlayView(View overlayView) {
+ if (!isShowing) {
+ return;
+ }
+ try {
+ if (windowManager != null && overlayView != null) {
+ windowManager.removeView(overlayView);
+ }
+ isShowing = false;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+}
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java
index ce43c5d3a6..37d5d9358c 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/IPCFixationIPHelper.java
@@ -124,7 +124,7 @@ public class IPCFixationIPHelper {
public void run() {
start(ips);
}
- }, 5 * 1000L);//延时
+ }, 4 * 1000L);//延时
}
}
}
@@ -135,7 +135,7 @@ public class IPCFixationIPHelper {
Process p;
try {
//ping -c 3 -w 100 中 ,-c 是指ping的次数 3是指ping 3次 ,-w 100 以秒为单位指定超时间隔,是指超时时间为100秒
- p = Runtime.getRuntime().exec("ping -c 2 -w 5 " + str);
+ p = Runtime.getRuntime().exec("ping -c 2 -w 2 " + str);
int status = p.waitFor();
InputStream input = p.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java
index 4e857e76e7..30b82afadf 100644
--- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java
+++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/socket/FpgaSocket.java
@@ -77,9 +77,9 @@ public class FpgaSocket implements IWebSocket {
}
if (okBuilder == null) {
okBuilder = new OkHttpClient.Builder();
- okBuilder.writeTimeout(5, TimeUnit.SECONDS)
- .readTimeout(5, TimeUnit.SECONDS)
- .connectTimeout(5, TimeUnit.SECONDS);
+ okBuilder.writeTimeout(4, TimeUnit.SECONDS)
+ .readTimeout(4, TimeUnit.SECONDS)
+ .connectTimeout(1, TimeUnit.SECONDS);
}
if (client == null) {
client = okBuilder.build();
@@ -117,7 +117,7 @@ public class FpgaSocket implements IWebSocket {
if (isReconnect) {
if (!isUserCloseWebSocket) {
try {
- Thread.sleep(5000L);
+ Thread.sleep(2000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java
index dcf235541d..11b968b840 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/IMogoMap.java
@@ -1,6 +1,5 @@
package com.mogo.map;
-import com.mogo.eagle.core.data.traffic.TrafficData;
import com.mogo.map.marker.IMogoMarker;
import com.mogo.map.marker.MogoMarkerOptions;
import com.mogo.map.overlay.IMogoPolyline;
diff --git a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
index 65cb31af57..9ae3db58a1 100644
--- a/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
+++ b/libraries/mogo-map-api/src/main/java/com/mogo/map/uicontroller/IMogoMapUIController.java
@@ -352,4 +352,10 @@ public interface IMogoMapUIController {
* 设置地图视线角度
*/
void setMapDAngle(float angle);
+
+ /**
+ * 获取行车方向
+ * @return
+ */
+ float getAngle(double startLon, double startLat, double endLon, double endLat);
}
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java
index 6881bc8434..f18918c184 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/AMapViewWrapper.java
@@ -1079,4 +1079,9 @@ public class AMapViewWrapper implements IMogoMapView,
mMapView.getMapAutoViewHelper().setMapDAngle(angle);
}
+ @Override
+ public float getAngle(double startLon, double startLat, double endLon, double endLat) {
+ return MapAutoApi.INSTANCE.getAngle(startLon,startLat,endLon,endLat);
+ }
+
}
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
index d0e275cd76..0eaa831de4 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/MogoMapUIController.java
@@ -454,4 +454,13 @@ public class MogoMapUIController implements IMogoMapUIController {
mDelegate.setMapDAngle(angle);
}
}
+
+ @Override
+ public float getAngle(double startLon, double startLat, double endLon, double endLat) {
+ initDelegate();
+ if (mDelegate != null) {
+ return mDelegate.getAngle(startLon, startLat, endLon, endLat);
+ }
+ return 0.0f;
+ }
}
diff --git a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java
index 39051ccaf9..38fc9ebdae 100644
--- a/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java
+++ b/libraries/mogo-map/src/main/java/com/mogo/map/uicontroller/AMapUIController.java
@@ -374,4 +374,12 @@ public class AMapUIController implements IMogoMapUIController {
mClient.setMapDAngle(angle);
}
}
+
+ @Override
+ public float getAngle(double startLon, double startLat, double endLon, double endLat) {
+ if (mClient != null) {
+ return mClient.getAngle(startLon,startLat,endLon,endLat);
+ }
+ return 0;
+ }
}
diff --git a/modules/mogo-module-common/build.gradle b/modules/mogo-module-common/build.gradle
index 68289ac3e8..af317b04ce 100644
--- a/modules/mogo-module-common/build.gradle
+++ b/modules/mogo-module-common/build.gradle
@@ -81,6 +81,7 @@ dependencies {
} else {
api project(":libraries:mogo-map")
api project(":libraries:mogo-map-api")
+ implementation project(':libraries:mogo-adas-data')
api project(":foudations:mogo-commons")
api project(':services:mogo-service-api')
api project(':core:mogo-core-utils')
diff --git a/modules/mogo-module-common/src/main/res/values-xhdpi-2560x1600/dimens.xml b/modules/mogo-module-common/src/main/res/values-xhdpi-2560x1600/dimens.xml
index 3fec33a8e2..e8a50c2de8 100644
--- a/modules/mogo-module-common/src/main/res/values-xhdpi-2560x1600/dimens.xml
+++ b/modules/mogo-module-common/src/main/res/values-xhdpi-2560x1600/dimens.xml
@@ -11,5 +11,6 @@
120px
37px
27px
-
+ 144px
+ 300px
diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java
index 1f0a18821a..7ad39389d2 100644
--- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java
+++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/routeoverlay/MogoRouteOverlayManager.java
@@ -180,6 +180,8 @@ public class MogoRouteOverlayManager implements
}
// CallerLogger.INSTANCE.d(M_OLD_ROUTE + TAG , "onLocationChanged: size = "+ mTrajectoryList.size()+" ----- "+mLocation.getLongitude()+"-"+mLocation.getLatitude());
ArrayList list = new ArrayList();
+ MogoLatLng carlatLng = new MogoLatLng(CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lat(),CallerAutoPilotStatusListenerManager.INSTANCE.getCurWgs84Lon());
+ list.add(carlatLng);
for (MogoLatLng latLng : temp) {
// if(!isPointOnCarFront(mLocation,latLng)){
list.add(latLng);
@@ -191,6 +193,7 @@ public class MogoRouteOverlayManager implements
}
}
+
public boolean isPointOnCarFront(MogoLocation carLocal, MogoLatLng pointLocal) {
double carLon = carLocal.getLongitude();
double carLat = carLocal.getLatitude();
diff --git a/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java b/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java
index 9e3b4eb108..385e073181 100644
--- a/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java
+++ b/test/crashreport-apmbyte/src/main/java/com/mogo/test/crashreport/apm/ApmCrashReportProvider.java
@@ -53,10 +53,10 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider {
return map;
}
});
- crash.config().setChannel("eagle");
+ String mapSDKVersion = AppUtils.getCustomMapSDKVersion(context);
+ crash.config().setChannel("MAP_SDK_VERSION:"+mapSDKVersion);
//可选,可以设置自定义did,不设置会使用内部默认的
crash.config().setDeviceId(MoGoAiCloudClientConfig.getInstance().getSn());
- String mapSDKVersion = AppUtils.getCustomMapSDKVersion(context);
crash.addTags(MAP_SDK_VERSION, mapSDKVersion);
// crash.setReportUrl("www.xxx.com"); // 私有化部署:私有化部署才配置上报地址
// crash.addTags("key", "value"); // 自定义筛选tag, 按需添加、可多次覆盖
@@ -66,6 +66,7 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider {
dimension.put("Devices_SN_DeviceId", MoGoAiCloudClientConfig.getInstance().getSn() + "__" + DeviceIdUtils.getDeviceId(context));
dimension.put("Devices_SN_WidevineID_MD5", MoGoAiCloudClientConfig.getInstance().getSn() + "__" + DeviceIdUtils.getWidevineIDWithMd5(context));
dimension.put("Devices_SN_WidevineID", MoGoAiCloudClientConfig.getInstance().getSn() + "__" + DeviceIdUtils.getWidevineID(context));
+ dimension.put(MAP_SDK_VERSION, mapSDKVersion);
HashMap metric = new HashMap<>();
//指标值
//metric.put("Devices_ID_metric", (double) 100);
@@ -95,7 +96,7 @@ public class ApmCrashReportProvider implements ITestCrashReportProvider {
//是否打印日志,注:线上release版本要配置为false
builder.debugMode(true);
//支持用户自定义user_id把平台数据和自己用户关联起来,可以不配置
- builder.userId(MoGoAiCloudClientConfig.getInstance().getSn());
+// builder.userId(MoGoAiCloudClientConfig.getInstance().getSn());
//私有化部署:配置数据上报的域名 (私有化部署才需要配置,内部有默认域名),测试支持设置http://www.xxx.com 默认是https协议
// builder.defaultReportDomain("www.xxx.com");
//设置渠道。1.3.16版本增加接口