From 53f2c79d4b8558cae6733ece05699a8340083c68 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Thu, 9 Feb 2023 15:42:09 +0800 Subject: [PATCH] =?UTF-8?q?[adas=20lib]=E5=B7=A5=E6=8E=A7=E6=9C=BA?= =?UTF-8?q?=E9=80=8F=E4=BC=A0OBU=20V2I=E6=95=B0=E6=8D=AE=E7=B2=BE=E5=BA=A6?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhidao/adas/client/DataDistribution.java | 49 +++ .../com/zhidao/adas/client/bean/ObuMap.java | 24 ++ .../com/zhidao/adas/client/bean/ObuRsi.java | 24 ++ .../com/zhidao/adas/client/bean/ObuRsm.java | 24 ++ .../com/zhidao/adas/client/bean/ObuSpat.java | 24 ++ .../zhidao/adas/client/ui/InfoFragment.java | 10 +- .../zhidao/adas/client/ui/MainActivity.java | 31 +- .../zhidao/adas/client/utils/Constants.java | 4 + .../zhidao/adas/magic/ui/MainActivity.java | 8 +- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 8 +- libraries/mogo-adas-data/README.md | 3 +- .../support/adas/high/OnAdasListener.java | 8 +- .../adas/high/msg/ObuWarningDataMessage.java | 379 ++++++++++++++++-- 13 files changed, 543 insertions(+), 53 deletions(-) create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java index 838fd8d895..d8f82d25ce 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java @@ -15,6 +15,10 @@ import com.zhidao.adas.client.bean.FSMFunctionStates; 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.ObuMap; +import com.zhidao.adas.client.bean.ObuRsi; +import com.zhidao.adas.client.bean.ObuRsm; +import com.zhidao.adas.client.bean.ObuSpat; import com.zhidao.adas.client.bean.ObuWarningData; import com.zhidao.adas.client.bean.OriginalPointCloudData; import com.zhidao.adas.client.bean.PerceptionTrafficLight; @@ -128,6 +132,10 @@ public class DataDistribution { public final List listRoboSweeperTaskIndex = new ArrayList<>(); public final List listBagManagerCmd = new ArrayList<>(); public final List listObuWarningData = new ArrayList<>(); + public final List listObuSpat = new ArrayList<>(); + public final List listObuRsi = new ArrayList<>(); + public final List listObuRsm = new ArrayList<>(); + public final List listObuMap = new ArrayList<>(); private long listTrajectorySize = 0; private long listTrackedObjectsSize = 0; @@ -152,6 +160,11 @@ public class DataDistribution { private long listRoboSweeperTaskIndexSize = 0; private long listBagManagerCmdSize = 0; private long listObuWarningDataSize = 0; + private long listObuSpatSize = 0; + private long listObuRsiSize = 0; + private long listObuRsmSize = 0; + private long listObuMapSize = 0; + public void clearCount() { listTrajectorySize = 1; @@ -177,6 +190,10 @@ public class DataDistribution { listRoboSweeperTaskIndexSize = 1; listBagManagerCmdSize = 1; listObuWarningDataSize = 1; + listObuSpatSize = 1; + listObuRsiSize = 1; + listObuRsmSize = 1; + listObuMapSize = 1; } public String cutDown(String str) { @@ -237,6 +254,38 @@ public class DataDistribution { if (listener != null && Constants.TITLE.RECEIVE_OBU_WARNING_DATA.equals(listener.first)) { listener.second.onRefresh(); } + } else if (data instanceof ObuSpat) { + listObuSpat.add(0, new DataShow(listObuSpatSize++, time + str)); + if (listObuSpat.size() > LIST_SIZE) { + listObuSpat.remove(listObuSpat.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_SPAT.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof ObuRsi) { + listObuRsi.add(0, new DataShow(listObuRsiSize++, time + str)); + if (listObuRsi.size() > LIST_SIZE) { + listObuRsi.remove(listObuRsi.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_RSI.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof ObuRsm) { + listObuRsm.add(0, new DataShow(listObuRsmSize++, time + str)); + if (listObuRsm.size() > LIST_SIZE) { + listObuRsm.remove(listObuRsm.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_RSM.equals(listener.first)) { + listener.second.onRefresh(); + } + } else if (data instanceof ObuMap) { + listObuMap.add(0, new DataShow(listObuMapSize++, time + str)); + if (listObuMap.size() > LIST_SIZE) { + listObuMap.remove(listObuMap.size() - 1); + } + if (listener != null && Constants.TITLE.RECEIVE_OBU_MAP.equals(listener.first)) { + listener.second.onRefresh(); + } } else if (data instanceof GnssInfo) { listGnssInfo.add(0, new DataShow(listGnssInfoSize++, time + str)); if (listGnssInfo.size() > LIST_SIZE) { diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java new file mode 100644 index 0000000000..88c93caf6e --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuMap.java @@ -0,0 +1,24 @@ +package com.zhidao.adas.client.bean; + +import com.google.protobuf.TextFormat; +import com.mogo.support.obu.ObuScene; + +import java.text.SimpleDateFormat; + +import mogo.telematics.pad.MessagePad; + +public class ObuMap extends BaseInfo { + public final ObuScene.MapMatchData bean; + + + public ObuMap(MessagePad.Header header, ObuScene.MapMatchData bean, SimpleDateFormat sdf) { + super("接收", bean.getSerializedSize(), header, sdf); + this.bean = bean; + } + + @Override + public String toString() { + return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + } + +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java new file mode 100644 index 0000000000..d433245ebe --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsi.java @@ -0,0 +1,24 @@ +package com.zhidao.adas.client.bean; + +import com.google.protobuf.TextFormat; +import com.mogo.support.obu.ObuScene; + +import java.text.SimpleDateFormat; + +import mogo.telematics.pad.MessagePad; + +public class ObuRsi extends BaseInfo { + public final ObuScene.RsiWarningData bean; + + + public ObuRsi(MessagePad.Header header, ObuScene.RsiWarningData bean, SimpleDateFormat sdf) { + super("接收", bean.getSerializedSize(), header, sdf); + this.bean = bean; + } + + @Override + public String toString() { + return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + } + +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java new file mode 100644 index 0000000000..6045845ae4 --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuRsm.java @@ -0,0 +1,24 @@ +package com.zhidao.adas.client.bean; + +import com.google.protobuf.TextFormat; +import com.mogo.support.obu.ObuScene; + +import java.text.SimpleDateFormat; + +import mogo.telematics.pad.MessagePad; + +public class ObuRsm extends BaseInfo { + public final ObuScene.RsmWarningData bean; + + + public ObuRsm(MessagePad.Header header, ObuScene.RsmWarningData bean, SimpleDateFormat sdf) { + super("接收", bean.getSerializedSize(), header, sdf); + this.bean = bean; + } + + @Override + public String toString() { + return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + } + +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java new file mode 100644 index 0000000000..bb4707903e --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/ObuSpat.java @@ -0,0 +1,24 @@ +package com.zhidao.adas.client.bean; + +import com.google.protobuf.TextFormat; +import com.mogo.support.obu.ObuScene; + +import java.text.SimpleDateFormat; + +import mogo.telematics.pad.MessagePad; + +public class ObuSpat extends BaseInfo { + public final ObuScene.SpatWarningData bean; + + + public ObuSpat(MessagePad.Header header, ObuScene.SpatWarningData bean, SimpleDateFormat sdf) { + super("接收", bean.getSerializedSize(), header, sdf); + this.bean = bean; + } + + @Override + public String toString() { + return super.toString() + TextFormat.printer().escapingNonAscii(false).printToString(bean); + } + +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/InfoFragment.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/InfoFragment.java index c080d2abf1..83e8d67fb7 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/InfoFragment.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/InfoFragment.java @@ -136,7 +136,15 @@ public class InfoFragment extends BaseFragment { adapter.setData(DataDistribution.getInstance().listStatusInfo); } else if (Constants.TITLE.RECEIVE_OBU_WARNING_DATA.equals(title)) { adapter.setData(DataDistribution.getInstance().listObuWarningData); - } else if (Constants.TITLE.RECEIVE_RECORD_DATA_CONFIG_RESP.equals(title)) { + }else if (Constants.TITLE.RECEIVE_OBU_SPAT.equals(title)) { + adapter.setData(DataDistribution.getInstance().listObuSpat); + } else if (Constants.TITLE.RECEIVE_OBU_RSI.equals(title)) { + adapter.setData(DataDistribution.getInstance().listObuRsi); + } else if (Constants.TITLE.RECEIVE_OBU_RSM.equals(title)) { + adapter.setData(DataDistribution.getInstance().listObuRsm); + } else if (Constants.TITLE.RECEIVE_OBU_MAP.equals(title)) { + adapter.setData(DataDistribution.getInstance().listObuMap); + } else if (Constants.TITLE.RECEIVE_RECORD_DATA_CONFIG_RESP.equals(title)) { adapter.setData(DataDistribution.getInstance().listRecordDataConfig); } else if (Constants.TITLE.RECEIVE_GLOBAL_PATH_RESP.equals(title)) { adapter.setData(DataDistribution.getInstance().listGlobalPathResp); 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 bc9235444e..4f27b36e6a 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 @@ -44,7 +44,6 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; import com.google.protobuf.TextFormat; -import com.mogo.support.obu.ObuPenetrate; import com.mogo.support.obu.ObuScene; import com.mogo.telematic.MogoProtocolMsg; import com.mogo.telematic.NSDNettyManager; @@ -70,6 +69,10 @@ 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.ObuMap; +import com.zhidao.adas.client.bean.ObuRsi; +import com.zhidao.adas.client.bean.ObuRsm; +import com.zhidao.adas.client.bean.ObuSpat; import com.zhidao.adas.client.bean.ObuWarningData; import com.zhidao.adas.client.bean.OriginalPointCloudData; import com.zhidao.adas.client.bean.PerceptionTrafficLight; @@ -552,7 +555,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onClick(View v) { if (TextUtils.equals(title.getText(), getString(R.string.have_error_data))) { - int position=titleFragmentData.size() - 1; + int position = titleFragmentData.size() - 1; infoFragment.smoothScrollToPosition(position); fragmentAdapter.setSelectedPosition(position); showFragment(Constants.TITLE.RECEIVE_ERROR); @@ -666,6 +669,10 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas titleFragmentData.add(Constants.TITLE.RECEIVE_ARRIVAL_NOTIFICATION); titleFragmentData.add(Constants.TITLE.RECEIVE_STATUS_QUERY_RESP); titleFragmentData.add(Constants.TITLE.RECEIVE_OBU_WARNING_DATA); + titleFragmentData.add(Constants.TITLE.RECEIVE_OBU_SPAT); + titleFragmentData.add(Constants.TITLE.RECEIVE_OBU_RSI); + titleFragmentData.add(Constants.TITLE.RECEIVE_OBU_RSM); + titleFragmentData.add(Constants.TITLE.RECEIVE_OBU_MAP); titleFragmentData.add(Constants.TITLE.RECEIVE_SWEEPER_TASK_INDEX_DATA); titleFragmentData.add(Constants.TITLE.RECEIVE_WARN); titleFragmentData.add(Constants.TITLE.RECEIVE_ERROR); @@ -1038,23 +1045,27 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } @Override - public void onoObuSpatWarning(MessagePad.Header header, ObuScene.SpatWarningData spatWarningData) { - + public void onObuSpatWarning(MessagePad.Header header, ObuScene.SpatWarningData spatWarningData) { + ObuSpat base = new ObuSpat(header, spatWarningData, sdf); + DataDistribution.getInstance().addData(base); } @Override - public void onoObuRsiWarning(MessagePad.Header header, ObuScene.RsiWarningData rsiWarningData) { - + public void onObuRsiWarning(MessagePad.Header header, ObuScene.RsiWarningData rsiWarningData) { + ObuRsi base = new ObuRsi(header, rsiWarningData, sdf); + DataDistribution.getInstance().addData(base); } @Override - public void onoObuRsmWarning(MessagePad.Header header, ObuScene.RsmWarningData rsmWarningData) { - + public void onObuRsmWarning(MessagePad.Header header, ObuScene.RsmWarningData rsmWarningData) { + ObuRsm base = new ObuRsm(header, rsmWarningData, sdf); + DataDistribution.getInstance().addData(base); } @Override - public void onoObuObuMapMath(MessagePad.Header header, ObuScene.MapMatchData mapMatchData) { - + public void onObuMapMath(MessagePad.Header header, ObuScene.MapMatchData mapMatchData) { + ObuMap base = new ObuMap(header, mapMatchData, sdf); + DataDistribution.getInstance().addData(base); } @Override diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java index 75d98e4d69..e9b2ae2466 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/utils/Constants.java @@ -173,6 +173,10 @@ public class Constants { String RECEIVE_ARRIVAL_NOTIFICATION = MessageType.TYPE_RECEIVE_ARRIVAL_NOTIFICATION.desc; String RECEIVE_STATUS_QUERY_RESP = MessageType.TYPE_RECEIVE_STATUS_QUERY_RESP.desc; String RECEIVE_OBU_WARNING_DATA = MessageType.TYPE_RECEIVE_OBU_WARNING_DATA.desc; + String RECEIVE_OBU_SPAT = "OBU SPAT信息"; + String RECEIVE_OBU_RSI = "OBU RSI信息"; + String RECEIVE_OBU_RSM = "OBU RSM信息"; + String RECEIVE_OBU_MAP = "OBU MAP信息"; String RECEIVE_ERROR = "错误数据"; diff --git a/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java b/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java index 43df01c887..7900d8cbdf 100644 --- a/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java +++ b/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/ui/MainActivity.java @@ -552,22 +552,22 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } @Override - public void onoObuSpatWarning(MessagePad.Header header, ObuScene.SpatWarningData spatWarningData) { + public void onObuSpatWarning(MessagePad.Header header, ObuScene.SpatWarningData spatWarningData) { } @Override - public void onoObuRsiWarning(MessagePad.Header header, ObuScene.RsiWarningData rsiWarningData) { + public void onObuRsiWarning(MessagePad.Header header, ObuScene.RsiWarningData rsiWarningData) { } @Override - public void onoObuRsmWarning(MessagePad.Header header, ObuScene.RsmWarningData rsmWarningData) { + public void onObuRsmWarning(MessagePad.Header header, ObuScene.RsmWarningData rsmWarningData) { } @Override - public void onoObuObuMapMath(MessagePad.Header header, ObuScene.MapMatchData mapMatchData) { + public void onObuMapMath(MessagePad.Header header, ObuScene.MapMatchData mapMatchData) { } diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt index 5e817bc880..c63a3ea889 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -542,7 +542,7 @@ class MoGoAdasListenerImpl : OnAdasListener { * @param header 头 * @param spatWarningData 数据 */ - override fun onoObuSpatWarning(header: MessagePad.Header?, spatWarningData: ObuScene.SpatWarningData?) { + override fun onObuSpatWarning(header: MessagePad.Header?, spatWarningData: ObuScene.SpatWarningData?) { CallerObuWarningSpatListenerManager.invokeObuSpatWarning(spatWarningData!!) } /** @@ -551,7 +551,7 @@ class MoGoAdasListenerImpl : OnAdasListener { * @param header 头 * @param rsiWarningData 数据 */ - override fun onoObuRsiWarning(header: MessagePad.Header?, rsiWarningData: ObuScene.RsiWarningData?) { + override fun onObuRsiWarning(header: MessagePad.Header?, rsiWarningData: ObuScene.RsiWarningData?) { CallerObuWarningRsiListenerManager.invokeObuRsiWarning(rsiWarningData!!) } @@ -561,7 +561,7 @@ class MoGoAdasListenerImpl : OnAdasListener { * @param header 头 * @param rsmWarningData 数据 */ - override fun onoObuRsmWarning(header: MessagePad.Header?, rsmWarningData: ObuScene.RsmWarningData?) { + override fun onObuRsmWarning(header: MessagePad.Header?, rsmWarningData: ObuScene.RsmWarningData?) { CallerObuWarningRsmListenerManager.invokeObuRsmWarning(rsmWarningData!!) } /** @@ -570,7 +570,7 @@ class MoGoAdasListenerImpl : OnAdasListener { * @param header 头 * @param mapMatchData 数据 */ - override fun onoObuObuMapMath(header: MessagePad.Header?, mapMatchData: ObuScene.MapMatchData?) { + override fun onObuMapMath(header: MessagePad.Header?, mapMatchData: ObuScene.MapMatchData?) { CallerObuMapMathListenerManager.invokeObuMapMath(mapMatchData!!) } diff --git a/libraries/mogo-adas-data/README.md b/libraries/mogo-adas-data/README.md index 72fc06ed07..62edd6feb9 100644 --- a/libraries/mogo-adas-data/README.md +++ b/libraries/mogo-adas-data/README.md @@ -1,5 +1,5 @@ # 工控机PB文件 用于生成Java Bean - +# ***鹰眼自用PB文件放在单独文件夹(personal)目的是为了区分工控机PB还是自用PB*** ## 1. studio中*.proto文件中如果出现“Cannot resolve symbol 'xxxx'”提示 **不影响正常编译,只影响美观以及无法在proto文件中跳转** ~~~ @@ -15,7 +15,6 @@ ~~~ # 工控机透传OBU V2I PB转换 -***鹰眼自用PB文件放在单独文件夹(personal)目的是为了区分工控机PB还是自用PB*** |工控机原始PB文件|转换后鹰眼所用PB| |:-|:-| |obu_warning_event.proto|personal/obu_penetrate.proto、personal/obu_scene.proto| diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java index 91cfec766c..c8df24eac7 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java @@ -209,7 +209,7 @@ public interface OnAdasListener { * @param header 头 * @param spatWarningData 数据 */ - void onoObuSpatWarning(MessagePad.Header header, ObuScene.SpatWarningData spatWarningData); + void onObuSpatWarning(MessagePad.Header header, ObuScene.SpatWarningData spatWarningData); /** * OBU RSI预警信息 @@ -217,7 +217,7 @@ public interface OnAdasListener { * @param header 头 * @param rsiWarningData 数据 */ - void onoObuRsiWarning(MessagePad.Header header, ObuScene.RsiWarningData rsiWarningData); + void onObuRsiWarning(MessagePad.Header header, ObuScene.RsiWarningData rsiWarningData); /** * OBU RSM预警信息 @@ -225,7 +225,7 @@ public interface OnAdasListener { * @param header 头 * @param rsmWarningData 数据 */ - void onoObuRsmWarning(MessagePad.Header header, ObuScene.RsmWarningData rsmWarningData); + void onObuRsmWarning(MessagePad.Header header, ObuScene.RsmWarningData rsmWarningData); /** * OBU 地图匹配结果 @@ -233,7 +233,7 @@ public interface OnAdasListener { * @param header 头 * @param mapMatchData 数据 */ - void onoObuObuMapMath(MessagePad.Header header, ObuScene.MapMatchData mapMatchData); + void onObuMapMath(MessagePad.Header header, ObuScene.MapMatchData mapMatchData); /** * 重构后的功能状态 diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ObuWarningDataMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ObuWarningDataMessage.java index e07f3d0f2e..a836e22487 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ObuWarningDataMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/ObuWarningDataMessage.java @@ -1,15 +1,19 @@ package com.zhidao.support.adas.high.msg; import android.os.SystemClock; -import android.util.Log; import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.UnknownFieldSet; +import com.mogo.support.obu.ObuBase; +import com.mogo.support.obu.ObuPenetrate; +import com.mogo.support.obu.ObuScene; import com.zhidao.support.adas.high.AdasChannel; import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.protocol.RawData; +import java.util.List; + import mogo.v2x.ObuWarningEvent; @@ -20,39 +24,358 @@ public class ObuWarningDataMessage extends MyAbstractMessageHandler { @Override public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException { - ObuWarningEvent.ObuWarningData obuWarningData = ObuWarningEvent.ObuWarningData.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue()); - AdasChannel.calculateTimeConsumingOnDispatchRaw("OBU预警事件", raw.receiveTime); - long nowTime = 0; - if (CupidLogUtils.isEnableLog()) - nowTime = SystemClock.elapsedRealtime(); - if (adasListener != null) { - adasListener.onObuWarningData(raw.getHeader(), obuWarningData); - } - AdasChannel.calculateTimeConsumingBusiness("OBU预警事件", nowTime); - - - -// ObuPenetrate.WarningData warningData = ObuPenetrate.WarningData.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue()); -// UnknownFieldSet set = warningData.getMapMatchData().getUnknownFields(); -// -// Log.i("ddd", "set.getField(7).getVarintList()=" + set.getField(7).getVarintList()); -// Long a = set.getField(7).getVarintList().get(0); -// -// ObuScene.MapMatchData.Builder MapMatchDataBuilder = warningData.getMapMatchData().toBuilder().setSpeedMinLimit(a * 0.02D); -// MapMatchDataBuilder.setUnknownFields(UnknownFieldSet.getDefaultInstance()); -// ObuPenetrate.WarningData.Builder builder = warningData.toBuilder(); -// builder.setMapMatchData(MapMatchDataBuilder); -// warningData = builder.build(); -//// Log.i("ddd","a="+a); -// -// +// ObuWarningEvent.ObuWarningData obuWarningData = ObuWarningEvent.ObuWarningData.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue()); // AdasChannel.calculateTimeConsumingOnDispatchRaw("OBU预警事件", raw.receiveTime); // long nowTime = 0; // if (CupidLogUtils.isEnableLog()) // nowTime = SystemClock.elapsedRealtime(); // if (adasListener != null) { -// adasListener.onObuWarningData(raw.getHeader(), warningData); +// adasListener.onObuWarningData(raw.getHeader(), obuWarningData); // } // AdasChannel.calculateTimeConsumingBusiness("OBU预警事件", nowTime); + + ObuPenetrate.PenetrateWarningData warningData = ObuPenetrate.PenetrateWarningData.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue()); + AdasChannel.calculateTimeConsumingOnDispatchRaw("OBU预警事件", raw.receiveTime); + long nowTime = 0; + if (CupidLogUtils.isEnableLog()) + nowTime = SystemClock.elapsedRealtime(); + if (adasListener != null) { + if (warningData.getMsgDataType() == 1) {//rsiEvent + if (warningData.hasRsiEvent()) { + ObuScene.RsiWarningData rsiWarningData = warningData.getRsiEvent(); + ObuScene.RsiWarningData.Builder rsiWarningDataBuilder = rsiWarningData.toBuilder(); + int size = rsiWarningData.getWarningMsgCount(); + for (int i = 0; i < size; i++) { + ObuBase.RsiWarning warning = rsiWarningData.getWarningMsg(i); + ObuBase.RsiWarning.Builder warningBuilder = warning.toBuilder(); + if (warning.hasPosition()) { + ObuBase.PositionLLV positionLLV = warning.getPosition(); + ObuBase.PositionLLV.Builder positionLLVBuilder = positionLLV.toBuilder(); + if (positionLLV.hasPosition()) { + ObuBase.PositionOffset positionOffset = positionLLV.getPosition(); + ObuBase.PositionOffset.Builder positionOffsetBuilder = positionOffset.toBuilder(); + if (positionOffset.hasPositionLL1()) { + ObuBase.PositionLL1 positionLL1 = positionOffset.getPositionLL1(); + ObuBase.PositionLL1.Builder positionLL1Builder = positionLL1.toBuilder(); + UnknownFieldSet set = positionLL1.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 1, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL1Builder.setLongitude(value); + } + value = getVarint(set, unknownFieldSetBuilder, 2, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL1Builder.setLatitude(value); + } + positionLL1Builder.setUnknownFields(unknownFieldSetBuilder.build()); + positionOffsetBuilder.setPositionLL1(positionLL1Builder); + positionLLVBuilder.setPosition(positionOffsetBuilder); + } + if (positionOffset.hasPositionLL2()) { + ObuBase.PositionLL2 positionLL2 = positionOffset.getPositionLL2(); + ObuBase.PositionLL2.Builder positionLL2Builder = positionLL2.toBuilder(); + UnknownFieldSet set = positionLL2.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 1, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL2Builder.setLongitude(value); + } + value = getVarint(set, unknownFieldSetBuilder, 2, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL2Builder.setLatitude(value); + } + positionLL2Builder.setUnknownFields(unknownFieldSetBuilder.build()); + positionOffsetBuilder.setPositionLL2(positionLL2Builder); + positionLLVBuilder.setPosition(positionOffsetBuilder); + } + if (positionOffset.hasPositionLL3()) { + ObuBase.PositionLL3 positionLL3 = positionOffset.getPositionLL3(); + ObuBase.PositionLL3.Builder positionLL3Builder = positionLL3.toBuilder(); + UnknownFieldSet set = positionLL3.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 1, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL3Builder.setLongitude(value); + } + value = getVarint(set, unknownFieldSetBuilder, 2, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL3Builder.setLatitude(value); + } + positionLL3Builder.setUnknownFields(unknownFieldSetBuilder.build()); + positionOffsetBuilder.setPositionLL3(positionLL3Builder); + positionLLVBuilder.setPosition(positionOffsetBuilder); + } + if (positionOffset.hasPositionLL4()) { + ObuBase.PositionLL4 positionLL4 = positionOffset.getPositionLL4(); + ObuBase.PositionLL4.Builder positionLL4Builder = positionLL4.toBuilder(); + UnknownFieldSet set = positionLL4.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 1, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL4Builder.setLongitude(value); + } + value = getVarint(set, unknownFieldSetBuilder, 2, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL4Builder.setLatitude(value); + } + positionLL4Builder.setUnknownFields(unknownFieldSetBuilder.build()); + positionOffsetBuilder.setPositionLL4(positionLL4Builder); + positionLLVBuilder.setPosition(positionOffsetBuilder); + } + if (positionOffset.hasPositionLL5()) { + ObuBase.PositionLL5 positionLL5 = positionOffset.getPositionLL5(); + ObuBase.PositionLL5.Builder positionLL5Builder = positionLL5.toBuilder(); + UnknownFieldSet set = positionLL5.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 1, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL5Builder.setLongitude(value); + } + value = getVarint(set, unknownFieldSetBuilder, 2, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL5Builder.setLatitude(value); + } + positionLL5Builder.setUnknownFields(unknownFieldSetBuilder.build()); + positionOffsetBuilder.setPositionLL5(positionLL5Builder); + positionLLVBuilder.setPosition(positionOffsetBuilder); + } + if (positionOffset.hasPositionLL6()) { + ObuBase.PositionLL6 positionLL6 = positionOffset.getPositionLL6(); + ObuBase.PositionLL6.Builder positionLL6Builder = positionLL6.toBuilder(); + UnknownFieldSet set = positionLL6.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 1, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL6Builder.setLongitude(value); + } + value = getVarint(set, unknownFieldSetBuilder, 2, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLL6Builder.setLatitude(value); + } + positionLL6Builder.setUnknownFields(unknownFieldSetBuilder.build()); + positionOffsetBuilder.setPositionLL6(positionLL6Builder); + positionLLVBuilder.setPosition(positionOffsetBuilder); + } + if (positionOffset.hasPositionLatLon()) { + ObuBase.PositionLatLon positionLatLon = positionOffset.getPositionLatLon(); + ObuBase.PositionLatLon.Builder positionLatLonBuilder = positionLatLon.toBuilder(); + UnknownFieldSet set = positionLatLon.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 1, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLatLonBuilder.setLongitude(value); + } + value = getVarint(set, unknownFieldSetBuilder, 2, 10000000.0D); + if (value != Double.MIN_VALUE) { + positionLatLonBuilder.setLatitude(value); + } + positionLatLonBuilder.setUnknownFields(unknownFieldSetBuilder.build()); + positionOffsetBuilder.setPositionLatLon(positionLatLonBuilder); + positionLLVBuilder.setPosition(positionOffsetBuilder); + } + } + if (positionLLV.hasVertical()) { + ObuBase.VerticalLLV verticalLLV = positionLLV.getVertical(); + ObuBase.VerticalLLV.Builder verticalLLVBuilder = verticalLLV.toBuilder(); + UnknownFieldSet set = verticalLLV.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 1, 10.0D); + if (value != Double.MIN_VALUE) { + verticalLLVBuilder.setOffset1(value); + } + value = getVarint(set, unknownFieldSetBuilder, 2, 10.0D); + if (value != Double.MIN_VALUE) { + verticalLLVBuilder.setOffset2(value); + } + value = getVarint(set, unknownFieldSetBuilder, 3, 10.0D); + if (value != Double.MIN_VALUE) { + verticalLLVBuilder.setOffset3(value); + } + value = getVarint(set, unknownFieldSetBuilder, 4, 10.0D); + if (value != Double.MIN_VALUE) { + verticalLLVBuilder.setOffset4(value); + } + value = getVarint(set, unknownFieldSetBuilder, 5, 10.0D); + if (value != Double.MIN_VALUE) { + verticalLLVBuilder.setOffset5(value); + } + value = getVarint(set, unknownFieldSetBuilder, 6, 10.0D); + if (value != Double.MIN_VALUE) { + verticalLLVBuilder.setOffset6(value); + } + value = getVarint(set, unknownFieldSetBuilder, 7, 10.0D); + if (value != Double.MIN_VALUE) { + verticalLLVBuilder.setElevation(value); + } + verticalLLVBuilder.setUnknownFields(unknownFieldSetBuilder.build()); + positionLLVBuilder.setVertical(verticalLLVBuilder); + } + + warningBuilder.setPosition(positionLLVBuilder); + } + UnknownFieldSet set = warning.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 6, 50.0D); + if (value != Double.MIN_VALUE) { + warningBuilder.setSpeedMaxLimit(value); + } + value = getVarint(set, unknownFieldSetBuilder, 7, 50.0D); + if (value != Double.MIN_VALUE) { + warningBuilder.setSpeedMinLimit(value); + } + value = getVarint(set, unknownFieldSetBuilder, 8, 10.0D); + if (value != Double.MIN_VALUE) { + warningBuilder.setEventRadius(value); + } + value = getVarint(set, unknownFieldSetBuilder, 11, 100.0D); + if (value != Double.MIN_VALUE) { + warningBuilder.setDistance(value); + } + warningBuilder.setUnknownFields(unknownFieldSetBuilder.build()); + rsiWarningDataBuilder.setWarningMsg(i, warningBuilder); + } + rsiWarningData = rsiWarningDataBuilder.build(); + adasListener.onObuRsiWarning(raw.getHeader(), rsiWarningData); + } + } else if (warningData.getMsgDataType() == 2) {//rsmEvent + if (warningData.hasRsmEvent()) { + ObuScene.RsmWarningData rsmWarningData = warningData.getRsmEvent(); + ObuScene.RsmWarningData.Builder rsmWarningDataBuilder = rsmWarningData.toBuilder(); + if (rsmWarningData.hasParticipant()) { + ObuBase.Participant participant = rsmWarningData.getParticipant(); + ObuBase.Participant.Builder participantBuilder = participant.toBuilder(); + UnknownFieldSet set = participant.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 5, 10000000.0D); + if (value != Double.MIN_VALUE) { + participantBuilder.setLatitude(value); + } + value = getVarint(set, unknownFieldSetBuilder, 6, 10000000.0D); + if (value != Double.MIN_VALUE) { + participantBuilder.setLongitude(value); + } + value = getVarint(set, unknownFieldSetBuilder, 7, 10.0D); + if (value != Double.MIN_VALUE) { + participantBuilder.setElevation(value); + } + value = getVarint(set, unknownFieldSetBuilder, 8, 50.0D); + if (value != Double.MIN_VALUE) { + participantBuilder.setSpeed(value); + } + value = getVarint(set, unknownFieldSetBuilder, 9, 80.0D); + if (value != Double.MIN_VALUE) { + participantBuilder.setHeading(value); + } + participantBuilder.setUnknownFields(unknownFieldSetBuilder.build()); + if (participant.hasAccFourAxes()) { + ObuBase.AccFourAxes accFourAxes = participant.getAccFourAxes(); + ObuBase.AccFourAxes.Builder accFourAxesBuilder = accFourAxes.toBuilder(); + UnknownFieldSet accFourAxesSet = accFourAxes.getUnknownFields(); + UnknownFieldSet.Builder accFourAxesSetBuilder = accFourAxesSet.toBuilder(); + value = getVarint(accFourAxesSet, accFourAxesSetBuilder, 1, 100.0D); + if (value != Double.MIN_VALUE) { + accFourAxesBuilder.setAccLng(value); + } + value = getVarint(accFourAxesSet, accFourAxesSetBuilder, 2, 100.0D); + if (value != Double.MIN_VALUE) { + accFourAxesBuilder.setAccLat(value); + } + value = getVarint(accFourAxesSet, accFourAxesSetBuilder, 3, 50.0D); + if (value != Double.MIN_VALUE) { + accFourAxesBuilder.setAccVert(value); + } + value = getVarint(accFourAxesSet, accFourAxesSetBuilder, 4, 100.0D); + if (value != Double.MIN_VALUE) { + accFourAxesBuilder.setAccYaw(value); + } + accFourAxesBuilder.setUnknownFields(accFourAxesSetBuilder.build()); + participantBuilder.setAccFourAxes(accFourAxesBuilder); + } + if (participant.hasPtcSize()) { + ObuBase.VehicleSize vehicleSize = participant.getPtcSize(); + ObuBase.VehicleSize.Builder vehicleSizeBuilder = vehicleSize.toBuilder(); + vehicleSizeBuilder.setHeight(vehicleSize.getHeight() * 5); + participantBuilder.setPtcSize(vehicleSizeBuilder); + } + rsmWarningDataBuilder.setParticipant(participantBuilder); + } + if (rsmWarningData.hasWarningMsg()) { + ObuBase.V2xWarning warning = rsmWarningData.getWarningMsg(); + ObuBase.V2xWarning.Builder warningBuilder = warning.toBuilder(); + UnknownFieldSet warningSet = warning.getUnknownFields(); + UnknownFieldSet.Builder warningSetBuilder = warningSet.toBuilder(); + double value = getVarint(warningSet, warningSetBuilder, 4, 100.0D); + if (value != Double.MIN_VALUE) { + warningBuilder.setDistance(value); + } + warningBuilder.setUnknownFields(warningSetBuilder.build()); + rsmWarningDataBuilder.setWarningMsg(warningBuilder); + } + rsmWarningData = rsmWarningDataBuilder.build(); + adasListener.onObuRsmWarning(raw.getHeader(), rsmWarningData); + } + } else if (warningData.getMsgDataType() == 3) {//spatEvent + if (warningData.hasSpatEvent()) { + ObuScene.SpatWarningData spatWarningData = warningData.getSpatEvent(); + ObuScene.SpatWarningData.Builder spatWarningDataBuilder = spatWarningData.toBuilder(); + int size = spatWarningData.getLightsCount(); + for (int i = 0; i < size; i++) { + ObuBase.SpatLight spatLight = spatWarningData.getLights(i); + ObuBase.SpatLight.Builder spatLightBuilder = spatLight.toBuilder(); + UnknownFieldSet set = spatLight.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 4, 10.0D); + if (value != Double.MIN_VALUE) { + spatLightBuilder.setCountDown(value); + } + value = getVarint(set, unknownFieldSetBuilder, 5, 50.0D); + if (value != Double.MIN_VALUE) { + spatLightBuilder.setSuggestMaxSpeed(value); + } + value = getVarint(set, unknownFieldSetBuilder, 6, 50.0D); + if (value != Double.MIN_VALUE) { + spatLightBuilder.setSuggestMinSpeed(value); + } + spatLightBuilder.setUnknownFields(unknownFieldSetBuilder.build()); + spatWarningDataBuilder.setLights(i, spatLightBuilder); + } + spatWarningData = spatWarningDataBuilder.build(); + adasListener.onObuSpatWarning(raw.getHeader(), spatWarningData); + } + } else if (warningData.getMsgDataType() == 4) {//mapMatchData + if (warningData.hasMapMatchData()) { + ObuScene.MapMatchData mapMatchData = warningData.getMapMatchData(); + ObuScene.MapMatchData.Builder mapMatchDataBuilder = mapMatchData.toBuilder(); + UnknownFieldSet set = mapMatchData.getUnknownFields(); + UnknownFieldSet.Builder unknownFieldSetBuilder = set.toBuilder(); + double value = getVarint(set, unknownFieldSetBuilder, 6, 50.0D); + if (value != Double.MIN_VALUE) { + mapMatchDataBuilder.setSpeedMaxLimit(value); + } + value = getVarint(set, unknownFieldSetBuilder, 7, 50.0D); + if (value != Double.MIN_VALUE) { + mapMatchDataBuilder.setSpeedMinLimit(value); + } + mapMatchDataBuilder.setUnknownFields(unknownFieldSetBuilder.build()); + mapMatchData = mapMatchDataBuilder.build(); + adasListener.onObuMapMath(raw.getHeader(), mapMatchData); + } + } + } + AdasChannel.calculateTimeConsumingBusiness("OBU预警事件", nowTime); + } + + private double getVarint(final UnknownFieldSet set, final UnknownFieldSet.Builder builder, final int number, final double precision) { + if (set.hasField(number)) { + List list = set.getField(number).getVarintList(); + if (list != null && !list.isEmpty()) { + Long value = list.get(0); + if (value != null) { + builder.clearField(number); + return value / precision; + } + } + } + return Double.MIN_VALUE; } }