From 88f15034f09201a9eb6cd70b939439c7726c8d91 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Mon, 29 Jul 2024 15:15:25 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AD=94=E6=96=B9APP=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_mogo_magic_ring/build.gradle | 32 +- .../main/java/com/zhidao/adas/magic/App.java | 2 + .../zhidao/adas/magic/ui/MainActivity.java | 340 ++++++++++++------ .../zhidao/adas/magic/utils/Constants.java | 2 +- .../src/main/res/layout/item_main.xml | 9 +- .../src/main/res/values/colors.xml | 18 +- 6 files changed, 288 insertions(+), 115 deletions(-) diff --git a/app_mogo_magic_ring/build.gradle b/app_mogo_magic_ring/build.gradle index eedafacce7..4807b0464f 100644 --- a/app_mogo_magic_ring/build.gradle +++ b/app_mogo_magic_ring/build.gradle @@ -9,8 +9,8 @@ android { minSdkVersion rootProject.ext.android.minSdkVersion targetSdkVersion rootProject.ext.android.targetSdkVersion multiDexEnabled true - versionCode 1 - versionName "1.0" + versionCode 2 + versionName "2.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -20,10 +20,34 @@ android { } } - - buildTypes { + signingConfigs { release { + keyAlias = 'CarLauncher' + storeFile file('../keystore/car_launcher.jks') + storePassword 'ZDauto123456' + keyPassword 'ZDauto123456' + } + releaseEB5 { + keyAlias = 'android_platform' + storeFile file('../keystore/EB5/car_launcher.jks') + storePassword 'ZDauto123456' + keyPassword 'ZDauto123456' + } + } + buildTypes { + debug { + debuggable true minifyEnabled false + zipAlignEnabled false + shrinkResources false + signingConfig signingConfigs.release + } + release { + debuggable false + minifyEnabled false + zipAlignEnabled false + shrinkResources false + signingConfig signingConfigs.release proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } diff --git a/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/App.java b/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/App.java index 6ecaf6c21d..050e3c0115 100644 --- a/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/App.java +++ b/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/App.java @@ -3,11 +3,13 @@ package com.zhidao.adas.magic; import android.app.Application; import com.zhidao.adas.magic.utils.CrashHandler; +import com.zhidao.support.adas.high.AdasManager; public class App extends Application { @Override public void onCreate() { super.onCreate(); CrashHandler.getInstance().init(this); + AdasManager.getInstance().init(this); } } 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 d5d62fca87..0274d15758 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 @@ -48,18 +48,21 @@ import com.zhidao.support.adas.high.AdasOptions; import com.zhidao.support.adas.high.OnAdasConnectStatusListener; import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.bean.VersionCompatibility; -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.zhjt.mogo.adas.data.AdasConstants; +import com.zhjt.mogo.adas.data.AiCloudTask; import com.zhjt.mogo.adas.data.bean.AdasParam; import com.zhjt.mogo.adas.data.bean.AutopilotStatistics; -import com.zhjt.mogo.adas.data.bean.UnableAutopilotReason; -import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask; +import com.zhjt.mogo.adas.data.bean.LaunchConditionData; +import com.zhjt.mogo.adas.data.bean.ReceivedAck; +import com.zhjt.mogo.adas.data.bean.UnableLaunchReason; import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable; import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask; -import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume; import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus; +import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume; import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm; +import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume; import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus; import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop; @@ -77,17 +80,24 @@ import java.util.Timer; import java.util.TimerTask; import bag_manager.BagManagerOuterClass; +import chassis.Chassis; import chassis.ChassisStatesOuterClass; import chassis.VehicleStateOuterClass; +import fault_management.FmInfo; +import fsm.Fsm2024; import function_state_management.FunctionStates; +import localization.LocState; import mogo.telematics.pad.MessagePad; import mogo.v2x.MogoV2X; import mogo.v2x.RoadOverviewEvents; +import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass; import mogo_msg.MogoReportMsg; -import perception.TrafficLightOuterClass; +import perception.FusionTrafficLightOuterClass; +import perception.LaneMarkOuterClass; import planning.RoboSweeperTaskIndexOuterClass; import prediction.Prediction; import record_cache.RecordPanelOuterClass; +import system_master.SsmInfo; import system_master.SystemStatusInfo; public class MainActivity extends BaseActivity implements OnAdasListener, OnAdasConnectStatusListener, BaseAdapter.OnItemClickListener { @@ -106,8 +116,8 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private RadioGroup connectionType; private AppCompatButton connect; private AppCompatButton disconnect; - private RadioButton fixation; - private RadioButton assign; + private RadioButton specified; + private RadioButton ping; private RecyclerView infoBtn; private TextView tvConnectState; private TextView gnss_hint; @@ -116,7 +126,8 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private Timer timerAcc; private final List titleBtnData = new ArrayList<>(); private final List connectStatusList = new ArrayList<>(); - private int connectStatus; + private AdasConstants.IpcConnectionStatus connectStatus; + private String certificationResult = "未开启认证"; private ListPopupWindow listPopupWindow; private FloatWindow floatWindow; private View include_title; @@ -130,7 +141,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas initView(); initAdas(); connectStatus = AdasManager.getInstance().getIpcConnectionStatus(); - onUpdateConnectStateView(); + onUpdateConnectStateView("未连接"); showIPCIP(); AdasManager.getInstance().setEnableLog(false); vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); @@ -168,21 +179,29 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas private void connect(boolean isConnect) { + AdasOptions options = AdasManager.getInstance().getAdasOptions(); + AdasOptions.Builder builder; + if (options == null) { + builder = AdasOptions.newBuilder().setPassenger(false); + } else { + builder = options.toBuilder(); + } if (isConnect) { switch (Constants.getIpcConnectionMode(this)) { - case AdasOptions.IPC_CONNECTION_MODE.FIXATION: - AdasManager.getInstance().getAdasOptions().setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(this)); + case AdasOptions.IPC_CONNECTION_MODE.PING: + builder.setPingAddressList(AdasManager.getInstance().getPingAddressList()); break; - case AdasOptions.IPC_CONNECTION_MODE.ASSIGN: + case AdasOptions.IPC_CONNECTION_MODE.SPECIFIED: String ip = etIp.getText().toString().trim(); if (TextUtils.isEmpty(ip)) { Toast.makeText(this, "请输入指定IP", Toast.LENGTH_SHORT).show(); return; } - AdasManager.getInstance().getAdasOptions().setIpcAssignIP(ip); + builder.setSpecifiedAddress(ip); break; } - AdasManager.getInstance().getAdasOptions().setIpcConnectionMode(Constants.getIpcConnectionMode(this)); + builder.setConnectionMode(Constants.getIpcConnectionMode(this)); + AdasManager.getInstance().setAdasOptions(builder.build()); AdasManager.getInstance().connect(); } else AdasManager.getInstance().disconnect(); @@ -197,8 +216,8 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas tvIp = findViewById(R.id.tv_ip); connect = findViewById(R.id.connect); disconnect = findViewById(R.id.disconnect); - fixation = findViewById(R.id.fixation); - assign = findViewById(R.id.assign); + specified = findViewById(R.id.specified); + ping = findViewById(R.id.ping); title = findViewById(R.id.title); infoBtn = findViewById(R.id.info_btn); @@ -221,11 +240,11 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas initListData(); initBtnRecyclerView(); switch (Constants.getIpcConnectionMode(this)) { - case 0: - fixation.setChecked(true); - break; case 1: - assign.setChecked(true); + specified.setChecked(true); + break; + case 0: + ping.setChecked(true); break; } @@ -241,14 +260,10 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas public void onCheckedChanged(RadioGroup group, int checkedId) { AdasManager.getInstance().disconnect(); int type; - switch (checkedId) { - default: - case R.id.assign: - type = AdasOptions.IPC_CONNECTION_MODE.ASSIGN; - break; - case R.id.fixation: - type = AdasOptions.IPC_CONNECTION_MODE.FIXATION; - break; + if (checkedId == R.id.specified) { + type = AdasOptions.IPC_CONNECTION_MODE.SPECIFIED; + } else { + type = AdasOptions.IPC_CONNECTION_MODE.PING; } Constants.setIpcConnectionMode(MainActivity.this, type); } @@ -407,56 +422,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } - private int getStatusColor(int connectStatus) { - int color; - switch (connectStatus) { - case IPC_CONNECTION_STATUS.CONNECTED: - color = R.color.connect_status_connected; - break; - default: - case IPC_CONNECTION_STATUS.DISCONNECTED: - color = R.color.connect_status_disconnected; - break; - case IPC_CONNECTION_STATUS.CONNECTING: - color = R.color.connect_status_connecting; - break; - case IPC_CONNECTION_STATUS.SEARCH_ADDRESS: - color = R.color.connect_status_search_address; - break; - case IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS: - color = R.color.connect_status_disconnecting; - break; - } - return color; - } - - private String onUpdateConnectStateView() { - String status; - switch (connectStatus) { - case IPC_CONNECTION_STATUS.CONNECTED: - status = "已连接"; - break; - default: - case IPC_CONNECTION_STATUS.DISCONNECTED: - status = "未连接"; - break; - case IPC_CONNECTION_STATUS.CONNECTING: - status = "连接中"; - break; - case IPC_CONNECTION_STATUS.SEARCH_ADDRESS: - status = "搜索IP"; - break; - case IPC_CONNECTION_STATUS.NOT_FOUND_ADDRESS: - status = "未找到"; - break; - } - Message msg = Message.obtain(); - msg.obj = new IPCConnectState(status, getStatusColor(connectStatus)); - msg.what = WHAT_IPC_CONNECT_STATE; - getHandler().sendMessage(msg); - return status; - } - @Override public void onError(ProtocolStatus status, byte[] bytes) { @@ -491,6 +456,11 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } + @Override + public void onLightSwitch(@NonNull Chassis.LightSwitch light) { + + } + @Override public void onAutopilotState(MessagePad.Header header, MessagePad.AutopilotState autopilotState) { } @@ -500,7 +470,8 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } @Override - public void onPerceptionTrafficLight(MessagePad.Header header, TrafficLightOuterClass.TrafficLights trafficLights) { + public void onPerceptionTrafficLight(MessagePad.Header header, FusionTrafficLightOuterClass.FusionTrafficLights trafficLights) { + } @Override @@ -546,6 +517,26 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas public void onStatusQueryResp(MessagePad.Header header, SystemStatusInfo.StatusInfo statusInfo) { } + @Override + public void onSystemStatus(MessagePad.Header header, SsmInfo.SsmStatusInf statusInf) { + + } + + @Override + public void onFaultManagementState(MessagePad.Header header, @NonNull FmInfo.FaultResultMsg fmInfo) { + + } + + @Override + public void onFSM2024State(@NonNull MessagePad.Header header, @NonNull Fsm2024.FSMStateMsg fsmState) { + + } + + @Override + public void onLocalizationState(MessagePad.Header header, @NonNull LocState.loc_state locState) { + + } + @Override public void onRecordDataConfigResp(MessagePad.Header header, MessagePad.RecordDataConfig config) { @@ -593,45 +584,57 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } @Override - public void onSweeperFutianCloudTask(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTask.TaskInfo taskInfo) { + public void onSweeperFutianCloudTask(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTask.TaskInfo taskInfo) { } @Override - public void onSweeperFutianCloudTaskConfirm(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskConfirm.TaskConfirm taskConfirm) { + public void onSweeperFutianCloudTaskConfirm(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskConfirm.TaskConfirm taskConfirm) { } @Override - public void onSweeperFutianCloudTaskStatus(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskStatus.TaskStatusPush taskStatusPush) { + public void onSweeperFutianCloudTaskStatus(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskStatus.TaskStatusPush taskStatusPush) { } @Override - public void onSweeperFutianCloudTaskStop(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskStop.StopTaskReq stopTaskReq) { + public void onSweeperFutianCloudTaskStop(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskStop.StopTaskReq stopTaskReq) { } @Override - public void onSweeperFutianCloudTaskSuspendResume(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp) { + public void onSweeperFutianCloudTaskSuspendResume(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp) { } @Override - public void onSweeperFutianCloudBootable(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperBootable.IsBootableResp isBootableResp) { + public void onSweeperFutianCloudBootable(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperBootable.IsBootableResp isBootableResp) { } @Override - public void onSweeperFutianCloudBigTaskStatus(@NonNull MessagePad.Header header, @NonNull SweeperCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush) { + public void onSweeperFutianCloudBigTaskStatus(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush) { + + } + + + @Override + public void onSweeperFutianCloudTaskCloudSuspendResume(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable SweeperTaskCloudSuspendResume.BigTaskActionPush bigTaskActionPush) { } @Override - public void onSweeperFutianCloudTaskUnknown(@NonNull MessagePad.Header header, @NonNull byte[] bytes) { + public void onParallelDrivingResp(@NonNull MessagePad.Header header, @NonNull AiCloudTask.MessageType messageType, @Nullable String reqNo, long sysTime, @Nullable ParallelTaskProcessNoticeOuterClass.ParallelTaskProcessNotice parallelTaskProcessNotice) { } + @Override + public void onAiCloudTaskUnknown(@NonNull MessagePad.Header header, @NonNull byte[] bytes) { + + } + + @Override public void onBagManagerCmd(MessagePad.Header header, BagManagerOuterClass.BagManager bagManager) { @@ -658,7 +661,52 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } @Override - public void onAutopilotAbility(boolean isAutopilotAbility, @Nullable List unableAutopilotReasons) { + public void onV2nNioGreenWavePassageEvent(@NonNull MessagePad.Header header, @NonNull MessagePad.V2nCrossSpeed crossSpeed) { + + } + + @Override + public void onV2nNioCrossoverEvent(@NonNull MessagePad.Header header, @NonNull MessagePad.Event event) { + + } + + @Override + public void onV2nNioOtherRetrogradeEvent(@NonNull MessagePad.Header header, @NonNull MessagePad.Event event) { + + } + + @Override + public void onV2nNioCongestionEvent(@NonNull MessagePad.Header header, @NonNull MessagePad.V2nCongestion congestion) { + + } + + @Override + public void onLaneMarksTran(@NonNull MessagePad.Header header, @NonNull LaneMarkOuterClass.LaneMarks laneMarks) { + + } + + @Override + public void onSsmReceiveTimeout(boolean isTimeout) { + + } + + @Override + public void onFsm2024ReceiveTimeout(boolean isTimeout) { + + } + + @Override + public void onAutopilotAbility(boolean isAutopilotAbility, @NonNull LaunchConditionData launchConditionData, @Nullable ArrayList unableAutopilotReasons) { + + } + + @Override + public void onParallelDrivingAbility(boolean isParallelDrivingAbility) { + + } + + @Override + public void onReceiveReceivedAck(@NonNull ReceivedAck receivedAck) { } @@ -670,41 +718,133 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas int mode = Constants.getIpcConnectionMode(this); switch (mode) { default: - case AdasOptions.IPC_CONNECTION_MODE.FIXATION: - options = new AdasOptions.Builder().setClient(false).setIpcFixationIP(AdasManager.getInstance().getIPCFixationIPList(this)).setIpcConnectionMode(mode).build(); + case AdasOptions.IPC_CONNECTION_MODE.PING: + options = AdasOptions.newBuilder().setPassenger(false).setPingAddressList(AdasManager.getInstance().getPingAddressList()).setConnectionMode(mode).build(); break; - case AdasOptions.IPC_CONNECTION_MODE.ASSIGN: - options = new AdasOptions.Builder().setClient(false).setIpcAssignIP(Constants.getIPCIp(this)).setIpcConnectionMode(mode).build(); + case AdasOptions.IPC_CONNECTION_MODE.SPECIFIED: + options = AdasOptions.newBuilder().setPassenger(false).setSpecifiedAddress(Constants.getIPCIp(this)).setConnectionMode(mode).build(); break; } - AdasManager.getInstance().create(options, this); + AdasManager.getInstance().create(this, options, this); AdasManager.getInstance().setOnAdasListener(this); } + private int getStatusColor(AdasConstants.IpcConnectionStatus connectStatus) { + int color; + if (connectStatus == AdasConstants.IpcConnectionStatus.CONNECTED) { + color = R.color.connect_status_connected; + } else if (connectStatus == AdasConstants.IpcConnectionStatus.CONNECTING) { + color = R.color.connect_status_connecting; + } else if (connectStatus == AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER) { + color = R.color.connect_status_reconnecting_timer; + } else if (connectStatus == AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK) { + color = R.color.connect_status_reconnecting_network; + } else if (connectStatus == AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION) { + color = R.color.connect_status_connect_failed; + } else if (connectStatus == AdasConstants.IpcConnectionStatus.ILLEGAL_ADDRESS) { + color = R.color.connect_status_illegal_address; + } else if (connectStatus == AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS) { + color = R.color.connect_status_search_address; + } else if (connectStatus == AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS) { + color = R.color.connect_status_not_found_address; + } else if (connectStatus == AdasConstants.IpcConnectionStatus.CERTIFICATION_FAILED) { + color = R.color.connect_status_certification_failed; + } else if (connectStatus == AdasConstants.IpcConnectionStatus.HEARTBEAT_TIMEOUT) { + color = R.color.connect_status_heartbeat_timeout; + } else if (connectStatus == AdasConstants.IpcConnectionStatus.PROTOCOL_MISMATCH) { + color = R.color.connect_status_protocol_mismatch; + } else if (connectStatus == AdasConstants.IpcConnectionStatus.SERVER_DISCONNECTED) { + color = R.color.connect_status_server_disconnect; + } else { + color = R.color.connect_status_disconnected; + } + return color; + } + + private void onUpdateConnectStateView(String status) { + Message msg = Message.obtain(); + msg.obj = new IPCConnectState(status, getStatusColor(connectStatus)); + msg.what = WHAT_IPC_CONNECT_STATE; + getHandler().sendMessage(msg); + } @Override - public void onConnectionIPCStatus(int ipcConnectionStatus, String reason) { - String time = sdf.format(new Date()); - connectStatusList.add(0, new IPCConnectState(reason == null ? "主动断开连接" : reason, getStatusColor(ipcConnectionStatus))); + public void onConnectionIPCStatus(AdasConstants.IpcConnectionStatus ipcConnectionStatus, @Nullable String reason) { + String connectStatusDescribe = "未连接"; + if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.DISCONNECTED) { + connectStatusDescribe = "主动断开连接\n未连接或主动断开连接(未连接:鹰眼首次启动时未调用连接函数【目前鹰眼默认启动就会调用连接函数】;主动断开连接:主动调用断开连接函数;"; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) { + connectStatusDescribe = "已连接"; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTING) { + connectStatusDescribe = "连接中"; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.RECONNECTING_TIMER) { + connectStatusDescribe = "重连中\n类型:定时器"; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.RECONNECTING_NETWORK) { + connectStatusDescribe = "重连中\n类型:网络监听"; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECT_EXCEPTION) { + connectStatusDescribe = "连接异常\n鹰眼与域控连接失败、无法连接、非正常断开等,原因:" + reason; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.ILLEGAL_ADDRESS) { + connectStatusDescribe = "非法地址\n连接模式为指定地址时:表示当前鹰眼调用连接时传入的域控地址错误或不符合规则【不修改默认配置不会出现此问题】;连接模式为PING模式时:表示传入的PING地址列表存在问题"; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.SEARCH_ADDRESS) { + connectStatusDescribe = "正在搜索域控地址"; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.NOT_FOUND_ADDRESS) { + connectStatusDescribe = "找不到可用地址\n域控地址列表中的全部地址均无法连通【不修改默认配置的情况下需要排查PAD是否连接车载路由器、工控机是否连接车载路由器、工控机是否开机等】"; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CERTIFICATION_FAILED) { + connectStatusDescribe = "域控证书认证异常\n鹰眼端或鹰眼端和域控端启用认证后出现异常,原因:" + certificationResult; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.HEARTBEAT_TIMEOUT) { + connectStatusDescribe = "心跳超时\n连接域控成功后在一段时间内未收到域控任何数据),超时时间:" + reason + "秒"; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.PROTOCOL_MISMATCH) { + connectStatusDescribe = "協議不匹配\n被连接的域控端非WebSocket协议【可能性非常低】"; + } else if (ipcConnectionStatus == AdasConstants.IpcConnectionStatus.SERVER_DISCONNECTED) { + connectStatusDescribe = "域控主动断开连接\n域控主动发起断开WebSocket连接,目前主要原因有:1.证书认证失败;2.老版本MAP不支持多连接的情况下会踢掉客户端;域控断开发送的消息:" + reason; + } + + connectStatusList.add(0, new IPCConnectState(connectStatusDescribe, getStatusColor(ipcConnectionStatus))); if (connectStatusList.size() > 100) { connectStatusList.remove(connectStatusList.size() - 1); } connectStatus = ipcConnectionStatus; - String status = onUpdateConnectStateView(); - if (connectStatus == IPC_CONNECTION_STATUS.CONNECTED) { + if (connectStatusDescribe.contains("\n")) { + connectStatusDescribe = connectStatusDescribe.substring(0, connectStatusDescribe.indexOf("\n")); + } + onUpdateConnectStateView(connectStatusDescribe); + if (connectStatus == AdasConstants.IpcConnectionStatus.CONNECTED) { getHandler().sendEmptyMessage(WHAT_IPC_IP); String tem = getIPCIP(); if (!TextUtils.isEmpty(tem)) { List ips = Constants.getIpcUsedIps(this); Constants.addIpcUsedIps(this, ips, tem); } - } else if (connectStatus == IPC_CONNECTION_STATUS.DISCONNECTED) { + } else if (connectStatus == AdasConstants.IpcConnectionStatus.DISCONNECTED) { getHandler().sendEmptyMessage(WHAT_IPC_IP); } // LogSave.getInstance().saveLog("连接状态", status); // CupidLogUtils.i(TAG, "connectStatus=" + status); } + + @Override + public void onCertification(@NonNull AdasConstants.CertificationStatus status) { + if (status == AdasConstants.CertificationStatus.TIMEOUT) { + certificationResult = "证书认证超时(表示域控未发送BasicInfoReq接口的数据【这种情况可能是连接出现了问题】)"; + + } else { + if (status != AdasConstants.CertificationStatus.NOT_ENABLED) { + if (status == AdasConstants.CertificationStatus.CERTIFICATE_CHAIN_SUCCESS) { + certificationResult = "成功校验域控证书"; + } else if (status == AdasConstants.CertificationStatus.ROOT_CRT_ERROR) { + certificationResult = "获取ROOT证书异常(表示未传递证书,没有拿到ROOT证书)"; + + } else if (status == AdasConstants.CertificationStatus.IPC_CRT_ERROR) { + certificationResult = "获取域控证书异常(表示域控发送了BasicInfoReq接口的数据但是未传递证书或证书解码失败【失败的可能性很低】)"; + + } else if (status == AdasConstants.CertificationStatus.CERTIFICATE_CHAIN_FAILED) { + certificationResult = "域控证书校验失败(表示证书链未验证通过。证书不匹配、证书格式不正确)"; + } + } + } + } + @Override public void onCompatibility(VersionCompatibility versionCompatibility) { showToastCenter("所连工控机:\n" + (versionCompatibility == null ? "未连接" : versionCompatibility.toString()), Toast.LENGTH_LONG); @@ -746,7 +886,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } } - if (connectStatus != IPC_CONNECTION_STATUS.CONNECTED) { + if (connectStatus != AdasConstants.IpcConnectionStatus.CONNECTED) { String msg = "未连接工控机"; showToastCenter(msg); return; diff --git a/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/utils/Constants.java b/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/utils/Constants.java index 34b6778852..6b8f24388a 100644 --- a/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/utils/Constants.java +++ b/app_mogo_magic_ring/src/main/java/com/zhidao/adas/magic/utils/Constants.java @@ -23,7 +23,7 @@ public class Constants { /***********************是否使用固定IP******************/ - // 0:固定IP 1:指定 2:UDP + // 0:Ping 1:指定 private static final String IPC_CONNECTION_MODE = "ipc_connection_mode"; public static void setIpcConnectionMode(Context context, int type) { diff --git a/app_mogo_magic_ring/src/main/res/layout/item_main.xml b/app_mogo_magic_ring/src/main/res/layout/item_main.xml index 56460fa16e..85f6e9b021 100644 --- a/app_mogo_magic_ring/src/main/res/layout/item_main.xml +++ b/app_mogo_magic_ring/src/main/res/layout/item_main.xml @@ -36,8 +36,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginStart="5dp" - android:gravity="center" - android:layoutDirection="ltr" + android:gravity="center|start" android:text="未连接" android:textColor="@color/colorWhile" android:textSize="16dp" @@ -128,17 +127,17 @@ android:orientation="horizontal"> diff --git a/app_mogo_magic_ring/src/main/res/values/colors.xml b/app_mogo_magic_ring/src/main/res/values/colors.xml index bfe52b115c..fa4ccb7d75 100644 --- a/app_mogo_magic_ring/src/main/res/values/colors.xml +++ b/app_mogo_magic_ring/src/main/res/values/colors.xml @@ -12,9 +12,17 @@ #DC143C #32CD32 #708090 - #32CD32 - #DC143C - #FF00FF - #DAA520 - #1E90FF + #FF0000 + #00FF00 + #800080 + #BF9548 + #FFA500 + #FF6347 + #b408aa + #00FFFF + #FFC0CB + #800000 + #FFD700 + #01014F + #4d0303