From 24e5c0a709a65eab5606ceaf3f3ec631015d0ab8 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Wed, 13 Apr 2022 15:25:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B7=A5=E6=8E=A7=E6=9C=BA?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/AndroidManifest.xml | 2 + .../zhidao/adas/client/DataDistribution.java | 274 ++++++++++ .../adas/client/OnAdasClientListener.java | 282 +++++----- .../adas/client/adapter/DataShowAdapter.java | 33 +- .../zhidao/adas/client/base/BaseAdapter.java | 3 +- .../zhidao/adas/client/base/BaseFragment.java | 138 +++++ .../com/zhidao/adas/client/bean/BaseInfo.java | 2 +- .../com/zhidao/adas/client/log/LogSave.java | 78 +-- .../client/ui/AutopilotConfigActivity.java | 70 ++- .../zhidao/adas/client/ui/InfoFragment.java | 517 ++++++++++-------- .../zhidao/adas/client/ui/MainActivity.java | 181 +++--- .../adas/client/ui/UpgradeFragment.java | 119 ---- .../adas/client/ui/VersionFragment.java | 62 +-- .../zhidao/adas/client/utils/Constants.java | 47 ++ .../src/main/res/layout/fragment_info.xml | 37 ++ .../src/main/res/layout/fragment_upgrade.xml | 70 --- .../src/main/res/layout/item_log_info.xml | 2 +- .../src/main/res/layout/item_main.xml | 35 +- 18 files changed, 1122 insertions(+), 830 deletions(-) create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseFragment.java delete mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/UpgradeFragment.java delete mode 100644 app_ipc_monitoring/src/main/res/layout/fragment_upgrade.xml diff --git a/app_ipc_monitoring/src/main/AndroidManifest.xml b/app_ipc_monitoring/src/main/AndroidManifest.xml index 7b879c95e6..69c583db2c 100644 --- a/app_ipc_monitoring/src/main/AndroidManifest.xml +++ b/app_ipc_monitoring/src/main/AndroidManifest.xml @@ -40,6 +40,7 @@ @@ -51,6 +52,7 @@ 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 new file mode 100644 index 0000000000..800c42f1f6 --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java @@ -0,0 +1,274 @@ +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.BaseInfo; +import com.zhidao.adas.client.bean.BasicInfoReq; +import com.zhidao.adas.client.bean.CarConfigResp; +import com.zhidao.adas.client.bean.ErrorData; +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.adas.client.log.LogSave; +import com.zhidao.support.adas.high.common.ThreadPoolManager; + +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; + +/** + * 数据分发 + */ +public class DataDistribution { + private static final String TAG = DataDistribution.class.getSimpleName(); + private volatile static DataDistribution INSTANCE; + private final LinkedBlockingQueue queue; + private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS ", Locale.getDefault()); + private Future future; + private final List listeners = new ArrayList<>(); + + private DataDistribution() { + queue = new LinkedBlockingQueue<>(); + start(); + } + + public static DataDistribution getInstance() { + if (INSTANCE == null) { + synchronized (DataDistribution.class) { + if (INSTANCE == null) { + INSTANCE = new DataDistribution(); + } + } + } + return INSTANCE; + } + + public void registerOnAdasClientListener(OnAdasClientListener listener) { + if (!listeners.contains(listener)) { + listeners.add(listener); + } + } + + public void unregisterOnAdasClientListener(OnAdasClientListener listener) { + listeners.remove(listener); + } + + + public void addData(BaseInfo info) { + queue.add(info); + } + + + public void start() { + if (future == null) { + future = ThreadPoolManager.getsInstance().submit(new WriteThread()); + } + } + + public void stop() { + queue.clear(); + if (future != null && !future.isCancelled()) { + future.cancel(true); + } + future = null; + } + + + private static final int LIST_SIZE = 5;//默认list最大数据量5个 + public final List listTrajectory = new ArrayList<>(); + public final List listTrackedObjects = new ArrayList<>(); + public final List listGnssInfo = new ArrayList<>(); + public final List listVehicleState = new ArrayList<>(); + public final List listAutopilotState = new ArrayList<>(); + public final List listMogoReportMessage = new ArrayList<>(); + public final List listPerceptionTrafficLight = new ArrayList<>(); + public final List listBasicInfoReq = new ArrayList<>(); + public final List listRecordPanel = new ArrayList<>(); + public final List listGlobalPathResp = new ArrayList<>(); + public final List listWarn = new ArrayList<>(); + public final List listArrivalNotification = new ArrayList<>(); + public final List listErrorData = new ArrayList<>(); + public final List listUpdate = new ArrayList<>(); + + private String onTransmit(String time, BaseInfo data) { + String str = data.toString(); + if (data instanceof Trajectory) { + String temp = time + str; + if (temp.length() > 588) { + temp = temp.substring(0, 588) + "\n(已缩短。如需查看完整数据,请勾选日志存储复选框)"; + } + listTrajectory.add(temp); + if (listTrajectory.size() > LIST_SIZE) { + listTrajectory.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof TrackedObjects) { + String temp = time + str; + if (temp.length() > 588) { + temp = temp.substring(0, 588) + "\n(已缩短。如需查看完整数据,请勾选日志存储复选框)"; + } + listTrackedObjects.add(temp); + if (listTrackedObjects.size() > LIST_SIZE) { + listTrackedObjects.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof GnssInfo) { + listGnssInfo.add(time + str); + if (listGnssInfo.size() > LIST_SIZE) { + listGnssInfo.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof VehicleState) { + listVehicleState.add(time + str); + if (listVehicleState.size() > LIST_SIZE) { + listVehicleState.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof AutopilotState) { + listAutopilotState.add(time + str); + if (listAutopilotState.size() > LIST_SIZE) { + listAutopilotState.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof MogoReportMessage) { + listMogoReportMessage.add(time + str); + if (listMogoReportMessage.size() > LIST_SIZE) { + listMogoReportMessage.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof PerceptionTrafficLight) { + listPerceptionTrafficLight.add(time + str); + if (listPerceptionTrafficLight.size() > LIST_SIZE) { + listPerceptionTrafficLight.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof BasicInfoReq) { + listBasicInfoReq.add(time + str); + if (listBasicInfoReq.size() > LIST_SIZE) { + listBasicInfoReq.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof CarConfigResp) { + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof RecordPanel) { + listRecordPanel.add(time + str); + if (listRecordPanel.size() > LIST_SIZE) { + listRecordPanel.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof GlobalPathResp) { + listGlobalPathResp.add(time + str); + if (listGlobalPathResp.size() > LIST_SIZE) { + listGlobalPathResp.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof Warn) { + listWarn.add(time + str); + if (listWarn.size() > LIST_SIZE) { + listWarn.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof ArrivalNotification) { + listArrivalNotification.add(time + str); + if (listArrivalNotification.size() > LIST_SIZE) { + listArrivalNotification.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } else if (data instanceof ErrorData) { + listErrorData.add(time + str); + if (listErrorData.size() > 50) { + listErrorData.remove(0); + } + if (!listeners.isEmpty()) { + for (OnAdasClientListener listener : listeners) { + listener.onRefresh(); + } + } + } + + return str; + } + + private class WriteThread implements Runnable { + + @Override + public void run() { + synchronized (this) { + while (!Thread.currentThread().isInterrupted()) { + try { + BaseInfo data = queue.take(); + String time = sdf.format(new Date(data.nowTime)); + String temp = onTransmit(time, data); + String builder = time + "[action]:" + data.action + " [data]:" + temp; + LogSave.getInstance().saveLog(builder); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + } + +} \ No newline at end of file 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 index c3de9e1ffb..990a5256ec 100644 --- 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 @@ -1,154 +1,140 @@ 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) { - } + public abstract void onRefresh(); - /** - * 惯导信息 - * - * @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) { - - } +// /** +// * 自动驾驶局部轨迹 车前引导线 +// * +// * @param isAdd 是否是添加数据回调 +// */ +// public void onTrajectory() { +// } +// +// /** +// * 障碍物 他车数据 +// * +// * @param trackedObjects 数据 +// */ +// public void onTrackedObjects(TrackedObjects trackedObjects) { +// } +// +// /** +// * 惯导信息 +// * +// * @param isAdd 是否是添加数据回调 +// */ +// public void onGnssInfo() { +// } +// +// /** +// * 底盘信息, 透传底盘状态,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/adapter/DataShowAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/DataShowAdapter.java index 1ef3a2366e..d67a1f47b4 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/DataShowAdapter.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/DataShowAdapter.java @@ -12,37 +12,26 @@ import com.zhidao.adas.client.R; import com.zhidao.adas.client.base.BaseAdapter; import com.zhidao.adas.client.base.BaseViewHolder; -import java.util.Random; - //log所用 public class DataShowAdapter extends BaseAdapter { - private final int[] colors = {Color.parseColor("#FA8072"), Color.parseColor("#FF00FF"), Color.parseColor("#228B22"), Color.parseColor("#871f78")}; - private final Random random = new Random(); - public void refreshView(int position) { - if (position == -1) { - notifyDataSetChanged(); - } else { - notifyItemInserted(position); - } -// notifyDataSetChanged(); -// L.i(TAG, "position=" + position); + + public void refreshView() { +// notifyItemChanged(mDatas.size()-1,0); + notifyItemRangeChanged(0, getItemCount()); + } + + @Override + public long getItemId(int position) { + return position; } @SuppressLint("SetTextI18n") @Override protected void onBindDataToItem(ViewHolder viewHolder, String data, int position) { - if (data.contains("##")) { - String[] temp = data.split("##"); - viewHolder.id.setText("[" + temp[0] + "]" + (position + 1) + ". "); - viewHolder.editText.setTextColor(colors[random.nextInt(4)]); - viewHolder.editText.setText(temp[1]); - } else { - viewHolder.id.setText((position + 1) + ". "); - viewHolder.editText.setTextColor(colors[random.nextInt(4)]); - viewHolder.editText.setText(data); - } + viewHolder.id.setText((position + 1) + ". "); + viewHolder.editText.setText(data); } diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseAdapter.java index 495e2f4d8d..333d6198e1 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseAdapter.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseAdapter.java @@ -44,7 +44,8 @@ public abstract class BaseAdapter extends Recycler public void setData(List mDatas) { this.mDatas = mDatas; - notifyDataSetChanged(); + if (!mDatas.isEmpty()) + notifyDataSetChanged(); } public void setOnItemClickListener(OnItemClickListener listener) { diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseFragment.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseFragment.java new file mode 100644 index 0000000000..1f36d21caa --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/base/BaseFragment.java @@ -0,0 +1,138 @@ +package com.zhidao.adas.client.base; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import com.zhidao.adas.client.DataDistribution; +import com.zhidao.adas.client.OnAdasClientListener; + +import java.lang.ref.WeakReference; + +/** + * @author song kenan + * @des + * @date 2021/8/16 + */ +public abstract class BaseFragment extends Fragment { + private static final int WHAT_REFRESH = 0x01; + protected String title; + + + public BaseFragment(String title) { + this.title = title; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + initHandler(); + } + + + @Override + public void onResume() { + super.onResume(); + DataDistribution.getInstance().registerOnAdasClientListener(adasClientListener); + } + + @Override + public void onPause() { + super.onPause(); + DataDistribution.getInstance().unregisterOnAdasClientListener(adasClientListener); + } + + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (getHandler() != null) + getHandler().removeCallbacksAndMessages(null); + } + + protected abstract void onRefreshView(); + + + private final OnAdasClientListener adasClientListener = new OnAdasClientListener() { + @Override + public void onRefresh() { + getHandler().sendEmptyMessage(WHAT_REFRESH); + } + }; + + + private BaseHandler mBaseHandler; + + + /** + * 初始化一个Handler,如果需要使用Handler,先调用此方法, + * 然后可以使用postRunnable(Runnable runnable), + * sendMessage在handleMessage(Message msg)中接收msg + */ + public void initHandler() { + mBaseHandler = new BaseHandler(this); + } + + /** + * 返回Handler,在此之前确定已经调用initHandler() + * + * @return Handler + */ + public Handler getHandler() { + return mBaseHandler; + } + + + /** + * 同Handler 的 handleMessage, + * getHandler.sendMessage,发送的Message在此接收 + * 在此之前确定已经调用initHandler() + * + * @param msg + */ + protected void handleMessage(Message msg) { + switch (msg.what) { + case WHAT_REFRESH: + onRefreshView(); + break; + } + } + + /** + * 同Handler的postRunnable + * 在此之前确定已经调用initHandler() + */ + protected void postRunnable(Runnable runnable) { + postRunnableDelayed(runnable, 0); + } + + /** + * 同Handler的postRunnableDelayed + * 在此之前确定已经调用initHandler() + */ + protected void postRunnableDelayed(Runnable runnable, long delayMillis) { + if (mBaseHandler == null) initHandler(); + mBaseHandler.postDelayed(runnable, delayMillis); + } + + + protected static class BaseHandler extends Handler { + private final WeakReference mObjects; + + public BaseHandler(BaseFragment mPresenter) { + mObjects = new WeakReference(mPresenter); + } + + @Override + public void handleMessage(Message msg) { + BaseFragment mPresenter = mObjects.get(); + if (mPresenter != null) + mPresenter.handleMessage(msg); + } + } +} 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 index cf2f171b1d..b05ed5b232 100644 --- 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 @@ -27,6 +27,6 @@ public abstract class BaseInfo { @Override public String toString() { - return len + "##Header:[" + TextFormat.printer().escapingNonAscii(false).shortDebugString(header) + "]\n"; + return "原始数据长度:"+len + "\nHeader:[" + TextFormat.printer().escapingNonAscii(false).shortDebugString(header) + "]\n"; } } 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 ad3059f24d..9ba58355f9 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,21 +4,7 @@ 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; @@ -26,9 +12,7 @@ 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; @@ -42,13 +26,12 @@ 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 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<>(); @@ -65,15 +48,6 @@ 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; @@ -86,7 +60,6 @@ public class LogSave { private void getFile() throws IOException { if (isSdcardUse()) { String time = sdf.format(new Date()); - time = time.replace(" ", "_").replace(":", "-").replace(".", "-"); String childPath = time.split("_")[0] + File.separator; file = new File(ROOT_PATH + childPath + String.format(LOG_FILE_NAME, time)); if (!file.exists()) { @@ -101,12 +74,12 @@ public class LogSave { } - - public void saveLog(BaseInfo info) { + public void saveLog(String info) { if (isStart()) { queue.add(info); } } + public boolean isStart() { return future != null; } @@ -154,43 +127,9 @@ public class LogSave { closeBufferedWriter(); getFile(); } - 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); + String data = queue.take(); + if (buff != null && !TextUtils.isEmpty(data)) { + buff.write(data); buff.newLine(); buff.flush(); } @@ -198,9 +137,8 @@ public class LogSave { e.printStackTrace(); } } - Log.i(TAG, "退出线程"); } } } -} \ No newline at end of file +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutopilotConfigActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutopilotConfigActivity.java index 5bf766e595..cffdcfcd34 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutopilotConfigActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutopilotConfigActivity.java @@ -20,18 +20,18 @@ import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.zhidao.adas.client.OnAdasClientListener; import com.zhidao.adas.client.R; import com.zhidao.adas.client.adapter.AutopilotConfigAdapter; import com.zhidao.adas.client.base.BaseActivity; import com.zhidao.adas.client.bean.UpdateDataEvent; import com.zhidao.adas.client.bean.AutoPilotMode; -import com.zhidao.adas.client.bean.GnssInfo; +import com.zhidao.adas.client.DataDistribution; import com.zhidao.adas.client.utils.Constants; import com.zhidao.support.adas.high.common.ThreadPoolManager; + import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; import java.util.List; @@ -43,7 +43,8 @@ public class AutopilotConfigActivity extends BaseActivity { private AutopilotConfigAdapter autopilotConfigAdapter; private GridLayoutManager linearLayoutManager; - private static final int WHAT_START = 0; + private static final int WHAT_START = 0x01; + private static final int WHAT_UPDATE_SHOW = 0x02; TextView no_date; private TextView lonText; private TextView latText; @@ -64,7 +65,6 @@ public class AutopilotConfigActivity extends BaseActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true);//左侧添加一个默认的返回图标 getSupportActionBar().setHomeButtonEnabled(true); //设置返回键可用 initHandler(); - EventBus.getDefault().register(this); initRecyclerView(); toolbar_title.setOnLongClickListener(new View.OnLongClickListener() { @Override @@ -148,20 +148,30 @@ public class AutopilotConfigActivity extends BaseActivity { ThreadPoolManager.getsInstance().execute(runnable); } + @Override + protected void onStart() { + super.onStart(); + DataDistribution.getInstance().registerOnAdasClientListener(listener); + } + + @Override + protected void onStop() { + super.onStop(); + DataDistribution.getInstance().unregisterOnAdasClientListener(listener); + } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().post(new UpdateDataEvent()); - EventBus.getDefault().unregister(this); } @Override protected void handleMessage(Message msg) { super.handleMessage(msg); - AlertDialog.Builder builder = new AlertDialog.Builder(this); switch (msg.what) { case WHAT_START: + AlertDialog.Builder builder = new AlertDialog.Builder(this); if ((Boolean) msg.obj) { builder.setTitle("保存成功") .setMessage("配置保存成功啦") @@ -186,12 +196,19 @@ public class AutopilotConfigActivity extends BaseActivity { } }); } + AlertDialog dialog = builder.show(); +// dialog.setCancelable(false); +// dialog.setCanceledOnTouchOutside(false); + break; + case WHAT_UPDATE_SHOW: + if (lonText != null) + lonText.setText("Lon:" + lon); + if (latText != null) + latText.setText("Lat:" + lat); break; } - AlertDialog dialog = builder.show(); -// dialog.setCancelable(false); -// dialog.setCanceledOnTouchOutside(false); + } @Override @@ -243,17 +260,30 @@ public class AutopilotConfigActivity extends BaseActivity { } } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onLocationEvent(GnssInfo info) { - if (info != null && info.bean != null) { - lon = info.bean.getLongitude(); - lat = info.bean.getLatitude(); - if (lonText != null) - lonText.setText("Lon:" + lon); - if (latText != null) - latText.setText("Lat:" + lat); + private OnAdasClientListener listener = new OnAdasClientListener() { + @Override + public void onRefresh() { + List listGnssInfo = DataDistribution.getInstance().listGnssInfo; + if (!listGnssInfo.isEmpty()) { + String info = listGnssInfo.get(listGnssInfo.size() - 1); + lon = Double.parseDouble(info.split("longitude: ")[1].split("\n")[0]); + lat = Double.parseDouble(info.split("latitude: ")[1].split("\n")[0]); + getHandler().sendEmptyMessage(WHAT_UPDATE_SHOW); + } } - } + }; + +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onLocationEvent(GnssInfo info) { +// if (info != null && info.bean != null) { +// lon = info.bean.getLongitude(); +// lat = info.bean.getLatitude(); +// if (lonText != null) +// lonText.setText("Lon:" + lon); +// if (latText != null) +// latText.setText("Lat:" + lat); +// } +// } @Override public boolean onOptionsItemSelected(MenuItem item) { 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 c084a10332..a1a2e7359c 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 @@ -1,69 +1,40 @@ package com.zhidao.adas.client.ui; -import android.content.Context; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.SimpleItemAnimator; +import com.zhidao.adas.client.DataDistribution; import com.zhidao.adas.client.R; import com.zhidao.adas.client.adapter.DataShowAdapter; -import com.zhidao.adas.client.bean.ArrivalNotification; -import com.zhidao.adas.client.bean.AutopilotState; -import com.zhidao.adas.client.bean.ErrorData; -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.adas.client.base.BaseFragment; +import com.zhidao.adas.client.utils.Constants; import com.zhidao.adas.client.utils.MyLinearLayoutManager; -import com.zhidao.support.adas.high.common.CupidLogUtils; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.util.ArrayList; -import java.util.List; +import com.zhidao.support.adas.high.AdasManager; +import com.zhidao.support.adas.high.bean.IPCUpgradeInfo; /** * @author song kenan * @des * @date 2021/8/16 */ -public class InfoFragment extends Fragment { +public class InfoFragment extends BaseFragment { - private String title; - private final List data = new ArrayList<>(); private DataShowAdapter adapter; - public InfoFragment() { - } - public InfoFragment(String title) { - this.title = title; + super(title); } - @Override - public void onAttach(@NonNull Context context) { - super.onAttach(context); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } @Nullable @Override @@ -74,226 +45,300 @@ public class InfoFragment extends Fragment { } @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - EventBus.getDefault().register(this); + public void onStart() { + super.onStart(); + setData(); } - private TextView tvTitle; - private RecyclerView rvInfo; + private View layout_update; private void initView(View view) { - tvTitle = view.findViewById(R.id.tv_title); - rvInfo = view.findViewById(R.id.rv_info); - - CupidLogUtils.w("InfoFragment===>" + title); + TextView tvTitle = view.findViewById(R.id.tv_title); + RecyclerView rvInfo = view.findViewById(R.id.rv_info); + layout_update = view.findViewById(R.id.layout_update); tvTitle.setText(title); tvTitle.setGravity(Gravity.CENTER); //创建默认的线性LayoutManager 横向的GridLayoutManager MyLinearLayoutManager linearLayoutManager = new MyLinearLayoutManager(this.getContext()); - linearLayoutManager.setStackFromEnd(true);//列表再底部开始展示,反转后由上面开始展示 +// linearLayoutManager.setStackFromEnd(true);//列表再底部开始展示,反转后由上面开始展示 // linearLayoutManager.setReverseLayout(true);//列表翻转 rvInfo.setLayoutManager(linearLayoutManager); //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能 rvInfo.setHasFixedSize(false); rvInfo.setNestedScrollingEnabled(false); + //升级按钮 + Button btn1 = view.findViewById(R.id.btn1); + //升级按钮 + Button btn2 = view.findViewById(R.id.btn2); + btn1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AdasManager.getInstance().sendBaseInfo(IPCUpgradeInfo.affirm()); + } + }); + btn2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AdasManager.getInstance().sendBaseInfo(IPCUpgradeInfo.cancel()); + } + }); + + + RecyclerView.ItemAnimator itemAnimator = rvInfo.getItemAnimator(); + if (itemAnimator != null) { + itemAnimator.setAddDuration(0); + itemAnimator.setChangeDuration(0); + itemAnimator.setMoveDuration(0); + itemAnimator.setRemoveDuration(0); + ((SimpleItemAnimator) itemAnimator).setSupportsChangeAnimations(false); + } adapter = new DataShowAdapter(); - adapter.setData(data); + adapter.setHasStableIds(true); rvInfo.setAdapter(adapter); - } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onWarnEvent(Warn info) { - - if (title.equals(MainActivity.TITLE.RECEIVE_WARN)) { - if (data.size() > 9) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onRectEvent(TrackedObjects info) { - - if (title.equals(MainActivity.TITLE.RECEIVE_TRACKED_OBJECTS)) { - if (data.size() > 4) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onErrorEvent(ErrorData info) { - - if (title.equals(MainActivity.TITLE.RECEIVE_ERROR)) { - if (data.size() > 19) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - } - } - - private void onTurnLightState(int turnLight, boolean brake_light) { - StringBuilder builder = new StringBuilder(MainActivity.TITLE.RECEIVE_VEHICLE_STATE + "\t"); - if (turnLight == 0) { - builder.append("左转:关"); - builder.append("右转:关"); - } else if (turnLight == 1) { - builder.append("左转:开"); - builder.append("右转:关"); - } else if (turnLight == 2) { - builder.append("左转:关"); - builder.append("右转:开"); - } - - builder.append(brake_light ? " 刹车:开" : " 刹车:关"); - tvTitle.setText(builder.toString()); - } - - /** - * 解析转向灯 - */ - private int turnLightTimes = 0; - private boolean isOnTurnLight = false; - private int turnLight = 0; - - public int setTurnLightState(int turn_light) { - if (turn_light == 0) { - if (isOnTurnLight) { - if (turnLightTimes >= 10) { - isOnTurnLight = false; - turnLight = 0; - } - turnLightTimes++; - } - } else if (turn_light == 1) { - turnLightTimes = 0; - isOnTurnLight = true; - turnLight = 1; - } else if (turn_light == 2) { - turnLightTimes = 0; - isOnTurnLight = true; - turnLight = 2; - } - return turnLight; - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onVehicleStateEvent(VehicleState info) { - if (title.equals(MainActivity.TITLE.RECEIVE_VEHICLE_STATE)) { - if (data.size() > 9) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - int light = info.bean.getLight().getNumber();//转向灯状态 0是正常 1是左转 2是右转 - onTurnLightState(setTurnLightState(light), info.bean.getBrakeLightStatus()); + private void setData() { + switch (title) { + case Constants.TITLE.RECEIVE_GNSS_INFO: + adapter.setData(DataDistribution.getInstance().listGnssInfo); + break; + case Constants.TITLE.RECEIVE_VEHICLE_STATE: + adapter.setData(DataDistribution.getInstance().listVehicleState); + break; + case Constants.TITLE.RECEIVE_TRACKED_OBJECTS: + adapter.setData(DataDistribution.getInstance().listTrackedObjects); + break; + case Constants.TITLE.RECEIVE_AUTOPILOT_STATE: + adapter.setData(DataDistribution.getInstance().listAutopilotState); + break; + case Constants.TITLE.RECEIVE_WARN: + adapter.setData(DataDistribution.getInstance().listWarn); + break; + case Constants.TITLE.RECEIVE_TRAJECTORY: + adapter.setData(DataDistribution.getInstance().listTrajectory); + break; + case Constants.TITLE.RECEIVE_ARRIVAL_NOTIFICATION: + adapter.setData(DataDistribution.getInstance().listArrivalNotification); + break; + case Constants.TITLE.RECEIVE_GLOBAL_PATH_RESP: + adapter.setData(DataDistribution.getInstance().listGlobalPathResp); + break; + case Constants.TITLE.RECEIVE_IPC_UPGRADE_STATUS: + layout_update.setVisibility(View.VISIBLE); +// text2.setText("IPC升级 \nUpgradeStatus:" + IPCUpgradeStateInfo.UpgradeStatus.getStatus(info.getUpgradeStatus()) + +// "\nDownloadStatus:" + IPCUpgradeStateInfo.DownloadStatus.getStatus(info.getDownloadStatus()) + +// "\nUpgradeMode:" + IPCUpgradeStateInfo.UpgradeMode.getStatus(info.getUpgradeMode()) + +// "\nProgress:" + info.getProgress() + +// "\nImages:" + info.getImages()); + adapter.setData(DataDistribution.getInstance().listUpdate); + break; + case Constants.TITLE.RECEIVE_RECORD_RESULT: + adapter.setData(DataDistribution.getInstance().listRecordPanel); + break; + case Constants.TITLE.RECEIVE_REPORT_MESSAGE: + adapter.setData(DataDistribution.getInstance().listMogoReportMessage); + break; + case Constants.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT: + adapter.setData(DataDistribution.getInstance().listPerceptionTrafficLight); + break; + case Constants.TITLE.RECEIVE_ERROR: + adapter.setData(DataDistribution.getInstance().listErrorData); + break; } } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onGnssInfoEvent(GnssInfo info) { - if (title.equals(MainActivity.TITLE.RECEIVE_GNSS_INFO)) { - if (data.size() > 9) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onAutopilotStateEvent(AutopilotState info) { - if (title.equals(MainActivity.TITLE.RECEIVE_AUTOPILOT_STATE)) { - if (data.size() > 9) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - } - } - - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onTrajectoryEvent(Trajectory info) { - if (title.equals(MainActivity.TITLE.RECEIVE_TRAJECTORY)) { - if (data.size() > 4) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onArrivalNotificationEvent(ArrivalNotification info) { - if (title.equals(MainActivity.TITLE.RECEIVE_ARRIVAL_NOTIFICATION)) { - if (data.size() > 9) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onGlobalPathEvent(GlobalPathResp info) { - if (title.equals(MainActivity.TITLE.RECEIVE_GLOBAL_PATH_RESP)) { - if (data.size() > 9) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onRecordPanelEvent(RecordPanel info) { - if (title.equals(MainActivity.TITLE.RECEIVE_RECORD_RESULT)) { - if (data.size() > 9) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onMogoReportMessageEvent(MogoReportMessage info) { - if (title.equals(MainActivity.TITLE.RECEIVE_REPORT_MESSAGE)) { - if (data.size() > 9) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - } - } - - @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) - public void onPerceptionTrafficLightEvent(PerceptionTrafficLight info) { - if (title.equals(MainActivity.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT)) { - if (data.size() > 9) { - data.remove(0); - } - data.add(info.toString()); - adapter.notifyDataSetChanged(); - } - } - @Override - public void onDestroyView() { - super.onDestroyView(); - EventBus.getDefault().unregister(this); - } +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onWarnEvent(Warn info) { +// +// if (title.equals(MainActivity.TITLE.RECEIVE_WARN)) { +// if (data.size() > 9) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onRectEvent(TrackedObjects info) { +// +// if (title.equals(MainActivity.TITLE.RECEIVE_TRACKED_OBJECTS)) { +// if (data.size() > 4) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onErrorEvent(ErrorData info) { +// +// if (title.equals(MainActivity.TITLE.RECEIVE_ERROR)) { +// if (data.size() > 19) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// } +// } +// +// private void onTurnLightState(int turnLight, boolean brake_light) { +// StringBuilder builder = new StringBuilder(MainActivity.TITLE.RECEIVE_VEHICLE_STATE + "\t"); +// if (turnLight == 0) { +// builder.append("左转:关"); +// builder.append("右转:关"); +// } else if (turnLight == 1) { +// builder.append("左转:开"); +// builder.append("右转:关"); +// } else if (turnLight == 2) { +// builder.append("左转:关"); +// builder.append("右转:开"); +// } +// +// builder.append(brake_light ? " 刹车:开" : " 刹车:关"); +// tvTitle.setText(builder.toString()); +// } +// +// /** +// * 解析转向灯 +// */ +// private int turnLightTimes = 0; +// private boolean isOnTurnLight = false; +// private int turnLight = 0; +// +// public int setTurnLightState(int turn_light) { +// if (turn_light == 0) { +// if (isOnTurnLight) { +// if (turnLightTimes >= 10) { +// isOnTurnLight = false; +// turnLight = 0; +// } +// turnLightTimes++; +// } +// } else if (turn_light == 1) { +// turnLightTimes = 0; +// isOnTurnLight = true; +// turnLight = 1; +// } else if (turn_light == 2) { +// turnLightTimes = 0; +// isOnTurnLight = true; +// turnLight = 2; +// } +// return turnLight; +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onVehicleStateEvent(VehicleState info) { +// if (title.equals(MainActivity.TITLE.RECEIVE_VEHICLE_STATE)) { +// if (data.size() > 9) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// int light = info.bean.getLight().getNumber();//转向灯状态 0是正常 1是左转 2是右转 +// onTurnLightState(setTurnLightState(light), info.bean.getBrakeLightStatus()); +// } +// } +// +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onGnssInfoEvent(GnssInfo info) { +// if (title.equals(MainActivity.TITLE.RECEIVE_GNSS_INFO)) { +// if (data.size() > 9) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onAutopilotStateEvent(AutopilotState info) { +// if (title.equals(MainActivity.TITLE.RECEIVE_AUTOPILOT_STATE)) { +// if (data.size() > 9) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// } +// } +// +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onTrajectoryEvent(Trajectory info) { +// if (title.equals(MainActivity.TITLE.RECEIVE_TRAJECTORY)) { +// if (data.size() > 4) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onArrivalNotificationEvent(ArrivalNotification info) { +// if (title.equals(MainActivity.TITLE.RECEIVE_ARRIVAL_NOTIFICATION)) { +// if (data.size() > 9) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onGlobalPathEvent(GlobalPathResp info) { +// if (title.equals(MainActivity.TITLE.RECEIVE_GLOBAL_PATH_RESP)) { +// if (data.size() > 9) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onRecordPanelEvent(RecordPanel info) { +// if (title.equals(MainActivity.TITLE.RECEIVE_RECORD_RESULT)) { +// if (data.size() > 9) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN) +// public void onMogoReportMessageEvent(MogoReportMessage info) { +// if (title.equals(MainActivity.TITLE.RECEIVE_REPORT_MESSAGE)) { +// if (data.size() > 9) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// } +// } +// +// @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) +// public void onPerceptionTrafficLightEvent(PerceptionTrafficLight info) { +// if (title.equals(MainActivity.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT)) { +// if (data.size() > 9) { +// data.remove(0); +// } +// data.add(info.toString()); +// adapter.notifyDataSetChanged(); +// } +// } @Override - public void onDestroy() { - super.onDestroy(); + protected void onRefreshView() { + if (adapter != null) { +// adapter.notifyDataSetChanged(); + adapter.refreshView(); + } } + + } 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 622e1e6fac..4530ec44fe 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 @@ -61,6 +61,7 @@ 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.adas.client.DataDistribution; import com.zhidao.adas.client.log.LogSave; import com.zhidao.adas.client.utils.Constants; import com.zhidao.support.adas.high.AdasManager; @@ -73,10 +74,9 @@ import com.zhidao.support.adas.high.bean.SSHResult; import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.common.ProtocolStatus; +import com.zhidao.support.adas.high.common.ReceiveTimeoutManager; import com.zhidao.support.recorder.RecordDataManager; -import org.greenrobot.eventbus.EventBus; - import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; @@ -112,6 +112,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private RadioButton assign; private CheckBox cb_print; private CheckBox cb_save; + private CheckBox cb_timeout; private RecyclerView infoBtn; private RecyclerView infoFragment; private TextView tvConnectState; @@ -132,7 +133,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private InfoFragment trajectoryFragment; private InfoFragment autopilotWayArriveFragment; private InfoFragment autopilotRouteFragment; - private UpgradeFragment upgradeFragment; + private InfoFragment upgradeFragment; private InfoFragment badcseFragment; private InfoFragment errorFragment; private InfoFragment reportMessageFragment; @@ -148,36 +149,19 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private AutoPilotModeDialog autoPilotModeDialog; private ListPopupWindow listPopupWindow; - public interface TITLE { - String RECEIVE_TRAJECTORY = "车前引导线"; - String RECEIVE_TRACKED_OBJECTS = "障碍物信息"; - String RECEIVE_GNSS_INFO = "惯导信息"; - String RECEIVE_VEHICLE_STATE = "底盘信息"; - String RECEIVE_AUTOPILOT_STATE = "自动驾驶状态"; - String RECEIVE_REPORT_MESSAGE = "监控事件"; - String RECEIVE_PERCEPTION_TRAFFIC_LIGHT = "感知红绿灯"; +// @Override +// protected void onStart() { +// super.onStart(); +// LogSave.getInstance().start(); +// } +// +// @Override +// protected void onStop() { +// super.onStop(); +// //需要将数据换发到别的页面 +// LogSave.getInstance().stop(); +// } - // String RECEIVE_BASIC_INFO_REQ = "自动驾驶设备基础信息请求"; - String RECEIVE_CAR_CONFIG_RESP = "信息与配置"; - String RECEIVE_RECORD_RESULT = "数据采集结果"; - String RECEIVE_GLOBAL_PATH_RESP = "自动驾驶路径"; - String RECEIVE_WARN = "预警数据"; - String RECEIVE_ARRIVAL_NOTIFICATION = "到站提醒"; - String RECEIVE_IPC_UPGRADE_STATUS = "升级状态"; - String RECEIVE_ERROR = "错误数据"; - - - String SEND_BASIC_INFO_RESP = "自动驾驶设备基础信息应答"; - String SEND_SET_AUTOPILOT_MODE_REQ = "设置自动驾驶模式 启动自动驾驶"; - String SEND_SET_DEMO_MODE_REQ = "设置演示模式"; - String SEND_CAR_CONFIG_REQ = "车机基础信息请求"; - String SEND_RECORD_CAUSE = "记录人工接管原因"; - String SEND_RECORD_DATA = "数据采集请求"; - String SEND_SET_AUTOPILOT_SPEED_REQ = "设置自动驾驶最大速度"; - String SEND_GLOBAL_PATH_REQ = "自动驾驶路径请求"; - String SEND_TRAFFIC_LIGHT_DATA = "发送红绿灯数据到工控机"; - - } @Override protected void onCreate(Bundle savedInstanceState) { @@ -231,6 +215,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas assign = findViewById(R.id.assign); cb_print = findViewById(R.id.cb_print); cb_save = findViewById(R.id.cb_save); + cb_timeout = findViewById(R.id.cb_timeout); title = findViewById(R.id.title); infoBtn = findViewById(R.id.info_btn); infoFragment = findViewById(R.id.info_fragment); @@ -301,9 +286,27 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } } }); + boolean isEnable = Constants.getTimeoutEnable(this); + ReceiveTimeoutManager.getInstance().setEnable(isEnable, AdasManager.getInstance().getIpcConnectionStatus()); + cb_timeout.setChecked(ReceiveTimeoutManager.getInstance().isEnable()); + cb_timeout.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + Constants.setTimeoutEnable(MainActivity.this, isChecked); + ReceiveTimeoutManager.getInstance().setEnable(isChecked, AdasManager.getInstance().getIpcConnectionStatus()); + } + }); + cb_timeout.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + showToastCenter("由于没有心跳机制,如果服务器端断网或其他非正常断开,客户端无法感知,所以需要进行数据接收超时检测", Toast.LENGTH_LONG); + return true; + } + }); connectionType.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { + AdasManager.getInstance().disconnect(); int type; switch (checkedId) { default: @@ -391,20 +394,20 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } private void initListData() { - titleFragmentData.add(TITLE.RECEIVE_GNSS_INFO); - titleFragmentData.add(TITLE.RECEIVE_TRAJECTORY); - titleFragmentData.add(TITLE.RECEIVE_TRACKED_OBJECTS); - titleFragmentData.add(TITLE.RECEIVE_VEHICLE_STATE); - titleFragmentData.add(TITLE.RECEIVE_AUTOPILOT_STATE); - titleFragmentData.add(TITLE.RECEIVE_REPORT_MESSAGE); - titleFragmentData.add(TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT); - titleFragmentData.add(TITLE.RECEIVE_CAR_CONFIG_RESP); - titleFragmentData.add(TITLE.RECEIVE_RECORD_RESULT); - titleFragmentData.add(TITLE.RECEIVE_GLOBAL_PATH_RESP); - titleFragmentData.add(TITLE.RECEIVE_WARN); - titleFragmentData.add(TITLE.RECEIVE_ARRIVAL_NOTIFICATION); - titleFragmentData.add(TITLE.RECEIVE_IPC_UPGRADE_STATUS); - titleFragmentData.add(TITLE.RECEIVE_ERROR); + titleFragmentData.add(Constants.TITLE.RECEIVE_GNSS_INFO); + titleFragmentData.add(Constants.TITLE.RECEIVE_TRAJECTORY); + titleFragmentData.add(Constants.TITLE.RECEIVE_TRACKED_OBJECTS); + titleFragmentData.add(Constants.TITLE.RECEIVE_VEHICLE_STATE); + titleFragmentData.add(Constants.TITLE.RECEIVE_AUTOPILOT_STATE); + titleFragmentData.add(Constants.TITLE.RECEIVE_REPORT_MESSAGE); + titleFragmentData.add(Constants.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT); + titleFragmentData.add(Constants.TITLE.RECEIVE_CAR_CONFIG_RESP); + titleFragmentData.add(Constants.TITLE.RECEIVE_RECORD_RESULT); + titleFragmentData.add(Constants.TITLE.RECEIVE_GLOBAL_PATH_RESP); + titleFragmentData.add(Constants.TITLE.RECEIVE_WARN); + titleFragmentData.add(Constants.TITLE.RECEIVE_ARRIVAL_NOTIFICATION); + titleFragmentData.add(Constants.TITLE.RECEIVE_IPC_UPGRADE_STATUS); + titleFragmentData.add(Constants.TITLE.RECEIVE_ERROR); titleBtnData.add("启动自动驾驶"); @@ -462,12 +465,11 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas fragmentAdapter.setSelectedPosition(position); manager = getSupportFragmentManager(); transaction = manager.beginTransaction(); - CupidLogUtils.w(TAG, "TitleAdapter===>name:" + data); switch (data) { - case TITLE.RECEIVE_GNSS_INFO: + case Constants.TITLE.RECEIVE_GNSS_INFO: firstFragment(); break; - case TITLE.RECEIVE_VEHICLE_STATE: + case Constants.TITLE.RECEIVE_VEHICLE_STATE: if (canFragment == null) canFragment = new InfoFragment(data); if (!canFragment.isVisible()) { @@ -475,7 +477,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas transaction.commit(); } break; - case TITLE.RECEIVE_TRACKED_OBJECTS: + case Constants.TITLE.RECEIVE_TRACKED_OBJECTS: if (viewFragment == null) viewFragment = new InfoFragment(data); if (!viewFragment.isVisible()) { @@ -483,7 +485,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas transaction.commit(); } break; - case TITLE.RECEIVE_AUTOPILOT_STATE: + case Constants.TITLE.RECEIVE_AUTOPILOT_STATE: if (autoFragment == null) autoFragment = new InfoFragment(data); if (!autoFragment.isVisible()) { @@ -491,7 +493,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas transaction.commit(); } break; - case TITLE.RECEIVE_WARN: + case Constants.TITLE.RECEIVE_WARN: if (warnFragment == null) warnFragment = new InfoFragment(data); if (!warnFragment.isVisible()) { @@ -499,7 +501,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas transaction.commit(); } break; - case TITLE.RECEIVE_TRAJECTORY: + case Constants.TITLE.RECEIVE_TRAJECTORY: if (trajectoryFragment == null) trajectoryFragment = new InfoFragment(data); if (!trajectoryFragment.isVisible()) { @@ -507,7 +509,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas transaction.commit(); } break; - case TITLE.RECEIVE_ARRIVAL_NOTIFICATION: + case Constants.TITLE.RECEIVE_ARRIVAL_NOTIFICATION: if (autopilotWayArriveFragment == null) autopilotWayArriveFragment = new InfoFragment(data); if (!autopilotWayArriveFragment.isVisible()) { @@ -515,7 +517,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas transaction.commit(); } break; - case TITLE.RECEIVE_GLOBAL_PATH_RESP: + case Constants.TITLE.RECEIVE_GLOBAL_PATH_RESP: if (autopilotRouteFragment == null) autopilotRouteFragment = new InfoFragment(data); if (!autopilotRouteFragment.isVisible()) { @@ -523,15 +525,16 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas transaction.commit(); } break; - case TITLE.RECEIVE_IPC_UPGRADE_STATUS: + case Constants.TITLE.RECEIVE_IPC_UPGRADE_STATUS: + showToastCenter("“" + data + "”功能暂时未开发"); if (upgradeFragment == null) - upgradeFragment = new UpgradeFragment(data); + upgradeFragment = new InfoFragment(data); if (!upgradeFragment.isVisible()) { transaction.replace(R.id.fl_info, upgradeFragment); transaction.commit(); } break; - case TITLE.RECEIVE_RECORD_RESULT: + case Constants.TITLE.RECEIVE_RECORD_RESULT: if (badcseFragment == null) badcseFragment = new InfoFragment(data); if (!badcseFragment.isVisible()) { @@ -539,7 +542,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas transaction.commit(); } break; - case TITLE.RECEIVE_REPORT_MESSAGE: + case Constants.TITLE.RECEIVE_REPORT_MESSAGE: if (reportMessageFragment == null) reportMessageFragment = new InfoFragment(data); if (!reportMessageFragment.isVisible()) { @@ -547,7 +550,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas transaction.commit(); } break; - case TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT: + case Constants.TITLE.RECEIVE_PERCEPTION_TRAFFIC_LIGHT: if (perceptionTrafficLightFragment == null) perceptionTrafficLightFragment = new InfoFragment(data); if (!perceptionTrafficLightFragment.isVisible()) { @@ -555,7 +558,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas transaction.commit(); } break; - case TITLE.RECEIVE_CAR_CONFIG_RESP: + case Constants.TITLE.RECEIVE_CAR_CONFIG_RESP: AdasManager.getInstance().sendCarConfigReq(); if (versionFragment == null) versionFragment = new VersionFragment("工控机版本\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t固定IP配置"); @@ -565,7 +568,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } break; - case TITLE.RECEIVE_ERROR: + case Constants.TITLE.RECEIVE_ERROR: if (errorFragment == null) errorFragment = new InfoFragment(data); if (!errorFragment.isVisible()) { @@ -634,7 +637,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas @Override public void onSSHResult(final SSHResult info) { MySSHResult result = new MySSHResult(info.toString(), 0); - LogSave.getInstance().saveLog(result); + DataDistribution.getInstance().addData(result); showToastCenter("IPC命令下发结果:" + info.code + " 命令:" + info.cmd + " 信息:" + info.msg); CupidLogUtils.w(TAG, "IPC命令下发结果:" + info.code + " 命令:" + info.cmd + " 信息:" + info.msg); } @@ -642,115 +645,104 @@ 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); - EventBus.getDefault().post(base); + DataDistribution.getInstance().addData(base); } @Override public void onTrajectory(MessagePad.Header header, MessagePad.Trajectory trajectory) { Trajectory base = new Trajectory(header, trajectory); - LogSave.getInstance().saveLog(base); - EventBus.getDefault().post(base); + DataDistribution.getInstance().addData(base); } @Override public void onTrackedObjects(MessagePad.Header header, MessagePad.TrackedObjects trackedObjects) { TrackedObjects base = new TrackedObjects(header, trackedObjects); - LogSave.getInstance().saveLog(base); - EventBus.getDefault().post(base); + DataDistribution.getInstance().addData(base); } @Override public void onGnssInfo(MessagePad.Header header, MessagePad.GnssInfo gnssInfo) { GnssInfo base = new GnssInfo(header, gnssInfo); - LogSave.getInstance().saveLog(base); - EventBus.getDefault().post(base); + DataDistribution.getInstance().addData(base); } @Override public void onVehicleState(MessagePad.Header header, VehicleStateOuterClass.VehicleState vehicleState) { VehicleState base = new VehicleState(header, vehicleState); - LogSave.getInstance().saveLog(base); - EventBus.getDefault().post(base); + DataDistribution.getInstance().addData(base); } @Override public void onAutopilotState(MessagePad.Header header, MessagePad.AutopilotState autopilotState) { AutopilotState base = new AutopilotState(header, autopilotState); - LogSave.getInstance().saveLog(base); - EventBus.getDefault().post(base); + DataDistribution.getInstance().addData(base); } @Override public void onReportMessage(MessagePad.Header header, MogoReportMsg.MogoReportMessage mogoReportMessage) { MogoReportMessage base = new MogoReportMessage(header, mogoReportMessage); - LogSave.getInstance().saveLog(base); - EventBus.getDefault().post(base); + DataDistribution.getInstance().addData(base); } @Override public void onPerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights trafficLights) { PerceptionTrafficLight base = new PerceptionTrafficLight(header, trafficLights); - LogSave.getInstance().saveLog(base); - EventBus.getDefault().post(base); + DataDistribution.getInstance().addData(base); } @Override public void onBasicInfoReq(MessagePad.Header header, MessagePad.BasicInfoReq basicInfoReq) { BasicInfoReq info = new BasicInfoReq(header, basicInfoReq); - LogSave.getInstance().saveLog(info); + DataDistribution.getInstance().addData(info); AdasManager.getInstance().sendBasicInfoResp("X202021111192N41VY", 1); showToastCenter("收到车机基础信息请求:" + info.toString()); -// EventBus.getDefault().post(new BasicInfoReq(header, basicInfoReq)); } @Override public void onCarConfigResp(MessagePad.Header header, MessagePad.CarConfigResp carConfigResp) { CarConfigResp base = new CarConfigResp(header, carConfigResp); - LogSave.getInstance().saveLog(base); - EventBus.getDefault().postSticky(base); + DataDistribution.getInstance().addData(base); } @Override public void onRecordResult(MessagePad.Header header, RecordPanelOuterClass.RecordPanel recordPanel) { RecordPanel base = new RecordPanel(header, recordPanel); - LogSave.getInstance().saveLog(base); + DataDistribution.getInstance().addData(base); recordKey = recordPanel.getKey(); recordFileName = recordPanel.getFilename(); - EventBus.getDefault().post(base); } @Override public void onGlobalPathResp(MessagePad.Header header, MessagePad.GlobalPathResp globalPathResp) { GlobalPathResp base = new GlobalPathResp(header, globalPathResp); - LogSave.getInstance().saveLog(base); - EventBus.getDefault().post(base); + DataDistribution.getInstance().addData(base); } @Override public void onWarn(MessagePad.Header header, MessagePad.Warn warn) { Warn base = new Warn(header, warn); - LogSave.getInstance().saveLog(base); - EventBus.getDefault().post(base); + DataDistribution.getInstance().addData(base); } @Override public void onArrivalNotification(MessagePad.Header header, MessagePad.ArrivalNotification arrivalNotification) { ArrivalNotification base = new ArrivalNotification(header, arrivalNotification); - LogSave.getInstance().saveLog(base); - EventBus.getDefault().post(base); + DataDistribution.getInstance().addData(base); } @Override public void onUpgradeStateInfo(final IPCUpgradeStateInfo info) { // LogSave.getInstance().saveLog("接收", info.toString()); - EventBus.getDefault().post(info); } private Toast toast; public void showToastCenter(String msg) { + showToastCenter(msg, Toast.LENGTH_SHORT); + } + + public void showToastCenter(String msg, int duration) { runOnUiThread(new Runnable() { @Override public void run() { @@ -758,7 +750,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas toast.cancel(); toast = null; } - toast = Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT); //如果有居中显示需求 + toast = Toast.makeText(MainActivity.this, "", duration); //如果有居中显示需求 toast.setGravity(Gravity.CENTER, 0, 0); toast.setText(msg); toast.show(); @@ -879,6 +871,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas if (mExecutorServiceConfigTimer != null) { mExecutorServiceConfigTimer.shutdownNow(); } + DataDistribution.getInstance().stop(); } @@ -942,7 +935,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private void firstFragment() { if (carFragment == null) - carFragment = new InfoFragment(TITLE.RECEIVE_GNSS_INFO); + carFragment = new InfoFragment(Constants.TITLE.RECEIVE_GNSS_INFO); if (!carFragment.isVisible()) { transaction.replace(R.id.fl_info, carFragment); transaction.commit(); diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/UpgradeFragment.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/UpgradeFragment.java deleted file mode 100644 index f2d0de4970..0000000000 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/UpgradeFragment.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.zhidao.adas.client.ui; - -import android.content.Context; -import android.graphics.Color; -import android.os.Bundle; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import com.zhidao.adas.client.R; -import com.zhidao.support.adas.high.AdasManager; -import com.zhidao.support.adas.high.bean.IPCUpgradeInfo; -import com.zhidao.support.adas.high.bean.IPCUpgradeStateInfo; -import com.zhidao.support.adas.high.common.CupidLogUtils; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.util.Random; - -/** - * @des 升级页面 - */ -public class UpgradeFragment extends Fragment { - private final int[] colors = {Color.parseColor("#FA8072"), Color.parseColor("#FF00FF"), Color.parseColor("#228B22"), Color.parseColor("#871f78")}; - private final Random random = new Random(); - - private String title; - - public UpgradeFragment() { - } - - public UpgradeFragment(String title) { - this.title = title; - } - - @Override - public void onAttach(@NonNull Context context) { - super.onAttach(context); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_upgrade, container, false); - initView(view); - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - EventBus.getDefault().register(this); - } - - private TextView tvTitle; - private TextView text2; - private Button btn1; - private Button btn2; - - private void initView(View view) { - tvTitle = view.findViewById(R.id.tv_title); - text2 = view.findViewById(R.id.text2); - btn1 = view.findViewById(R.id.btn1); - btn2 = view.findViewById(R.id.btn2); - CupidLogUtils.w("InfoFragment===>" + title); - tvTitle.setText(title); - tvTitle.setGravity(Gravity.CENTER); - - btn1.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - AdasManager.getInstance().sendBaseInfo(IPCUpgradeInfo.affirm()); - } - }); - - btn2.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - AdasManager.getInstance().sendBaseInfo(IPCUpgradeInfo.cancel()); - } - }); - } - - @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) - public void onIPCUpgradeStateInfo(IPCUpgradeStateInfo info) { - text2.setTextColor(colors[random.nextInt(4)]); - text2.setText("IPC升级 \nUpgradeStatus:" + IPCUpgradeStateInfo.UpgradeStatus.getStatus(info.getUpgradeStatus()) + - "\nDownloadStatus:" + IPCUpgradeStateInfo.DownloadStatus.getStatus(info.getDownloadStatus()) + - "\nUpgradeMode:" + IPCUpgradeStateInfo.UpgradeMode.getStatus(info.getUpgradeMode()) + - "\nProgress:" + info.getProgress() + - "\nImages:" + info.getImages()); - } - - - @Override - public void onDestroyView() { - super.onDestroyView(); - EventBus.getDefault().unregister(this); - } - - @Override - public void onDestroy() { - super.onDestroy(); - } -} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java index 3c5e27e49f..5802921b59 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java @@ -14,7 +14,6 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.SimpleItemAnimator; @@ -22,34 +21,30 @@ import androidx.recyclerview.widget.SimpleItemAnimator; import com.zhidao.adas.client.BuildConfig; import com.zhidao.adas.client.R; import com.zhidao.adas.client.adapter.ConfigAdapter; +import com.zhidao.adas.client.base.BaseFragment; import com.zhidao.adas.client.bean.CarConfigResp; import com.zhidao.adas.client.bean.Config; import com.zhidao.support.adas.high.AdasManager; import com.zhidao.support.adas.high.common.CupidLogUtils; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import mogo.telematics.pad.MessagePad; + /** * @des 升级页面 */ -public class VersionFragment extends Fragment { +public class VersionFragment extends BaseFragment { - private String title; private ConfigAdapter adapter; - public VersionFragment() { + public VersionFragment(String title) { + super(title); } - public VersionFragment(String title) { - this.title = title; - } @Override public void onAttach(@NonNull Context context) { @@ -72,8 +67,8 @@ public class VersionFragment extends Fragment { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - EventBus.getDefault().register(this); showIps(); + showVersion(); } @@ -96,19 +91,15 @@ public class VersionFragment extends Fragment { } - private TextView tvTitle; - private TextView ipsView; - private Button btn1; - private Button btn2; private EditText ipView; private RecyclerView recyclerView; private void initView(View view) { - tvTitle = view.findViewById(R.id.tv_title); - btn1 = view.findViewById(R.id.btn1); + TextView tvTitle = view.findViewById(R.id.tv_title); + Button btn1 = view.findViewById(R.id.btn1); ipView = view.findViewById(R.id.ip); - btn2 = view.findViewById(R.id.btn2); + Button btn2 = view.findViewById(R.id.btn2); ipsView = view.findViewById(R.id.ips_view); recyclerView = view.findViewById(R.id.config_list); initFragmentRecyclerView(); @@ -153,14 +144,11 @@ public class VersionFragment extends Fragment { view.findViewById(R.id.line1).setVisibility(View.GONE); tvTitle.setText("版本"); } -// if (AdasManager.getInstance().getIpcConnectionStatus() != Constants.IPC_CONNECTION_STATUS.CONNECTED) - showVersion(null); } - @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) - public void showVersion(CarConfigResp adasConfig) { + public void showVersion() { List list = new ArrayList<>(); if (!BuildConfig.IS_CLIENT) { String ip = AdasManager.getInstance().getIpcConnectedIp(); @@ -168,25 +156,26 @@ public class VersionFragment extends Fragment { if (!TextUtils.isEmpty(ip)) { temp = ip + ":" + AdasManager.getInstance().getIpcConnectedPort(); } + MessagePad.CarConfigResp adasConfig = AdasManager.getInstance().getCarConfig(); list.add(new Config("工控机IP:", temp)); - list.add(new Config("工控机版本:", adasConfig == null ? null : adasConfig.bean.getDockVersion())); - list.add(new Config("车牌号:", adasConfig == null ? null : adasConfig.bean.getPlateNumber())); - list.add(new Config("MAC地址:", adasConfig == null ? null : adasConfig.bean.getMacAddress())); - list.add(new Config("自动驾驶限速:", adasConfig == null ? null : adasConfig.bean.getSpeedLimit() + "m/s")); - list.add(new Config("最大自动驾驶限速:", adasConfig == null ? null : adasConfig.bean.getMaxSpeedLimit() + "m/s")); - list.add(new Config("最小加速度:", adasConfig == null ? null : adasConfig.bean.getMinAcceleration() + "m/s²")); - list.add(new Config("最大加速度:", adasConfig == null ? null : adasConfig.bean.getMaxAcceleration() + "m/s²")); - list.add(new Config("IPC通信协议版本:", adasConfig == null ? null : String.valueOf(adasConfig.bean.getProtocolVersion().getNumber()))); + list.add(new Config("工控机版本:", adasConfig == null ? null : adasConfig.getDockVersion())); + list.add(new Config("车牌号:", adasConfig == null ? null : adasConfig.getPlateNumber())); + list.add(new Config("MAC地址:", adasConfig == null ? null : adasConfig.getMacAddress())); + list.add(new Config("自动驾驶限速:", adasConfig == null ? null : adasConfig.getSpeedLimit() + "m/s")); + list.add(new Config("最大自动驾驶限速:", adasConfig == null ? null : adasConfig.getMaxSpeedLimit() + "m/s")); + list.add(new Config("最小加速度:", adasConfig == null ? null : adasConfig.getMinAcceleration() + "m/s²")); + list.add(new Config("最大加速度:", adasConfig == null ? null : adasConfig.getMaxAcceleration() + "m/s²")); + list.add(new Config("IPC通信协议版本:", adasConfig == null ? null : String.valueOf(adasConfig.getProtocolVersion().getNumber()))); list.add(new Config("APP通信协议版本:", String.valueOf(AdasManager.getInstance().getProtocolVersion()))); } list.add(new Config("ADAS LIB版本:", AdasManager.getInstance().getAdasVersion())); adapter.setData(list); } + @Override - public void onDestroyView() { - super.onDestroyView(); - EventBus.getDefault().unregister(this); + protected void onRefreshView() { + showVersion(); } private void initFragmentRecyclerView() { @@ -204,9 +193,4 @@ public class VersionFragment extends Fragment { adapter = new ConfigAdapter(); recyclerView.setAdapter(adapter); } - - @Override - public void onDestroy() { - super.onDestroy(); - } } 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 709b4c590b..cc1308c998 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 @@ -124,5 +124,52 @@ public class Constants { return false; } + /*********************存储超时检测按钮开关状态******************/ + private static final String TIMEOUT_ENABLE = "timeout_enable"; + public static void setTimeoutEnable(Context context, boolean isEnable) { + PreferencesUtils.putBoolean(context, TIMEOUT_ENABLE, isEnable); + } + + public static boolean getTimeoutEnable(Context context) { + return PreferencesUtils.putBoolean(context, TIMEOUT_ENABLE, true); + } + + public static boolean delTimeoutEnable(Context context) { + return PreferencesUtils.delete(context, TIMEOUT_ENABLE); + } + + + + + public interface TITLE { + String RECEIVE_TRAJECTORY = "车前引导线"; + String RECEIVE_TRACKED_OBJECTS = "障碍物信息"; + String RECEIVE_GNSS_INFO = "惯导信息"; + String RECEIVE_VEHICLE_STATE = "底盘信息"; + String RECEIVE_AUTOPILOT_STATE = "自动驾驶状态"; + String RECEIVE_REPORT_MESSAGE = "监控事件"; + String RECEIVE_PERCEPTION_TRAFFIC_LIGHT = "感知红绿灯"; + + // String RECEIVE_BASIC_INFO_REQ = "自动驾驶设备基础信息请求"; + String RECEIVE_CAR_CONFIG_RESP = "信息与配置"; + String RECEIVE_RECORD_RESULT = "数据采集结果"; + String RECEIVE_GLOBAL_PATH_RESP = "自动驾驶路径"; + String RECEIVE_WARN = "预警数据"; + String RECEIVE_ARRIVAL_NOTIFICATION = "到站提醒"; + String RECEIVE_IPC_UPGRADE_STATUS = "升级状态"; + String RECEIVE_ERROR = "错误数据"; + + + String SEND_BASIC_INFO_RESP = "自动驾驶设备基础信息应答"; + String SEND_SET_AUTOPILOT_MODE_REQ = "设置自动驾驶模式 启动自动驾驶"; + String SEND_SET_DEMO_MODE_REQ = "设置演示模式"; + String SEND_CAR_CONFIG_REQ = "车机基础信息请求"; + String SEND_RECORD_CAUSE = "记录人工接管原因"; + String SEND_RECORD_DATA = "数据采集请求"; + String SEND_SET_AUTOPILOT_SPEED_REQ = "设置自动驾驶最大速度"; + String SEND_GLOBAL_PATH_REQ = "自动驾驶路径请求"; + String SEND_TRAFFIC_LIGHT_DATA = "发送红绿灯数据到工控机"; + + } } diff --git a/app_ipc_monitoring/src/main/res/layout/fragment_info.xml b/app_ipc_monitoring/src/main/res/layout/fragment_info.xml index e6d07a9906..2199310982 100644 --- a/app_ipc_monitoring/src/main/res/layout/fragment_info.xml +++ b/app_ipc_monitoring/src/main/res/layout/fragment_info.xml @@ -26,6 +26,43 @@ + + + +