From 80648133bb898d914df042d8e946b166f4597b6f Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Wed, 27 Apr 2022 19:08:39 +0800 Subject: [PATCH] =?UTF-8?q?[change]=E4=BF=AE=E6=94=B9=E5=B7=A5=E6=8E=A7?= =?UTF-8?q?=E6=9C=BA=E9=87=8D=E5=90=AF=E6=8E=A5=E5=8F=A3=EF=BC=9A=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=87=8D=E6=8E=A5=E6=89=80=E6=9C=89=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20=E7=A7=BB=E9=99=A4=E9=87=8D=E5=90=AF?= =?UTF-8?q?=E5=B7=A5=E6=8E=A7=E6=9C=BA=20=E9=87=8D=E5=90=AFDocker=20?= =?UTF-8?q?=E5=85=B3=E6=9C=BA=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_ipc_monitoring/build.gradle | 1 + .../libs/arm64-v8a/libsshtool.so | Bin .../libs/armeabi-v7a/libsshtool.so | Bin .../zhidao/adas/client/DataDistribution.java | 1 + .../adapter/AutopilotConfigAdapter.java | 75 ++++++++++++++++++ .../adas/client/adapter/LineAdapter.java | 2 +- .../adas/client/bean/AutoPilotMode.java | 14 +++- .../com/zhidao/adas/client/ssh}/Base64.java | 2 +- .../com/zhidao/adas/client/ssh}/RSATool.java | 4 +- .../java/com/zhidao/adas/client/ssh}/SSH.java | 4 +- .../zhidao/adas/client/ssh/SSHManager.java | 65 +++++++++++++++ .../zhidao/adas/client/ssh}/SSHResult.java | 14 +++- .../com/zhidao/adas/client/ssh}/SSHTool.java | 2 +- .../adas/client/ui/AutoPilotModeDialog.java | 6 +- .../client/ui/AutopilotConfigActivity.java | 2 +- .../zhidao/adas/client/ui/MainActivity.java | 35 ++------ .../main/res/layout/item_autopilot_config.xml | 73 +++++++++++++++++ .../src/main/res/layout/item_info.xml | 2 +- .../autopilot/MoGoAutopilotProvider.kt | 4 +- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 15 ++-- .../src/main/proto/message_pad.proto | 14 ++++ libraries/mogo-adas/README.md | 21 ++--- libraries/mogo-adas/build.gradle | 2 +- .../zhidao/support/adas/high/AdasChannel.java | 71 ++++------------- .../zhidao/support/adas/high/AdasManager.java | 48 +++-------- .../support/adas/high/IAdasNetCommApi.java | 27 +++---- .../support/adas/high/OnAdasListener.java | 10 +-- .../support/adas/high/common/MessageType.java | 1 + 28 files changed, 336 insertions(+), 179 deletions(-) rename {libraries/mogo-adas => app_ipc_monitoring}/libs/arm64-v8a/libsshtool.so (100%) rename {libraries/mogo-adas => app_ipc_monitoring}/libs/armeabi-v7a/libsshtool.so (100%) rename {libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common => app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh}/Base64.java (99%) rename {libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common => app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh}/RSATool.java (97%) rename {libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common => app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh}/SSH.java (97%) create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSHManager.java rename {libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean => app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh}/SSHResult.java (63%) rename {libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common => app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh}/SSHTool.java (80%) diff --git a/app_ipc_monitoring/build.gradle b/app_ipc_monitoring/build.gradle index 775aab3f0a..f0a7388877 100644 --- a/app_ipc_monitoring/build.gradle +++ b/app_ipc_monitoring/build.gradle @@ -69,4 +69,5 @@ dependencies { implementation 'org.greenrobot:eventbus:3.2.0' implementation 'com.android.support:multidex:1.0.3' implementation 'com.mogo.cloud:telematic:1.3.55' + implementation 'com.jcraft:jsch:0.1.55' } diff --git a/libraries/mogo-adas/libs/arm64-v8a/libsshtool.so b/app_ipc_monitoring/libs/arm64-v8a/libsshtool.so similarity index 100% rename from libraries/mogo-adas/libs/arm64-v8a/libsshtool.so rename to app_ipc_monitoring/libs/arm64-v8a/libsshtool.so diff --git a/libraries/mogo-adas/libs/armeabi-v7a/libsshtool.so b/app_ipc_monitoring/libs/armeabi-v7a/libsshtool.so similarity index 100% rename from libraries/mogo-adas/libs/armeabi-v7a/libsshtool.so rename to app_ipc_monitoring/libs/armeabi-v7a/libsshtool.so diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java index aefb5ed711..413cd88d75 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/DataDistribution.java @@ -57,6 +57,7 @@ public class DataDistribution { } public void registerOnAdasClientListener(OnAdasClientListener listener) { + this.listener = null; this.listener = listener; // if (!listeners.contains(listener)) { // listeners.add(listener); diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/AutopilotConfigAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/AutopilotConfigAdapter.java index a5f2db2681..268ee6da53 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/AutopilotConfigAdapter.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/AutopilotConfigAdapter.java @@ -9,6 +9,8 @@ import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.ImageView; +import android.widget.RadioButton; +import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; @@ -113,6 +115,16 @@ public class AutopilotConfigAdapter extends RecyclerView.Adapter" + data.endName); + viewHolder.title.setText("(" + (data.isBus ? "Bus" : "Taxi") + ")" + data.name + " " + data.startName + "->" + data.endName); } @Override diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutoPilotMode.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutoPilotMode.java index 6eff67cbed..6fd27578bc 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutoPilotMode.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/AutoPilotMode.java @@ -15,6 +15,9 @@ public class AutoPilotMode { public Location endLatLon; public double speedLimit; public List wayLatLons; + public int routeID = -1;//道路ID + public String routeName;//道路名称 + public boolean isBus = false;//true:bus false:taxi public List getWayLatLons() { if (wayLatLons == null || wayLatLons.isEmpty()) return null; @@ -52,8 +55,13 @@ public class AutoPilotMode { } } } - return TextUtils.isEmpty(name) || TextUtils.isEmpty(startName) || TextUtils.isEmpty(endName) || - startLatLon == null || startLatLon.isNull() || endLatLon == null || endLatLon.isNull() || - speedLimit == 0.0; + if (isBus) { + return TextUtils.isEmpty(name) || TextUtils.isEmpty(startName) || TextUtils.isEmpty(endName) || + startLatLon == null || startLatLon.isNull() || endLatLon == null || endLatLon.isNull() || + speedLimit == 0.0 || routeID == -1 || TextUtils.isEmpty(routeName); + } else + return TextUtils.isEmpty(name) || TextUtils.isEmpty(startName) || TextUtils.isEmpty(endName) || + startLatLon == null || startLatLon.isNull() || endLatLon == null || endLatLon.isNull() || + speedLimit == 0.0; } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Base64.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/Base64.java similarity index 99% rename from libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Base64.java rename to app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/Base64.java index 16d63dfef1..383491b9d4 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Base64.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/Base64.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package com.zhidao.support.adas.high.common; +package com.zhidao.adas.client.ssh; import java.math.BigInteger; diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/RSATool.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/RSATool.java similarity index 97% rename from libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/RSATool.java rename to app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/RSATool.java index fa4ce4e790..6281286999 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/RSATool.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/RSATool.java @@ -1,8 +1,10 @@ -package com.zhidao.support.adas.high.common; +package com.zhidao.adas.client.ssh; +import com.zhidao.support.adas.high.common.CupidLogUtils; + import java.nio.charset.StandardCharsets; import java.security.Key; import java.security.KeyFactory; diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/SSH.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSH.java similarity index 97% rename from libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/SSH.java rename to app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSH.java index 481a369729..730c076d86 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/SSH.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSH.java @@ -1,4 +1,4 @@ -package com.zhidao.support.adas.high.common; +package com.zhidao.adas.client.ssh; import android.text.TextUtils; @@ -6,7 +6,7 @@ import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; -import com.zhidao.support.adas.high.bean.SSHResult; +import com.zhidao.support.adas.high.common.CupidLogUtils; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSHManager.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSHManager.java new file mode 100644 index 0000000000..9b5a9552c4 --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSHManager.java @@ -0,0 +1,65 @@ +package com.zhidao.adas.client.ssh; + +import android.text.TextUtils; + +import com.zhidao.support.adas.high.common.ThreadPoolManager; + +public class SSHManager { + private OnSShListener listener; + + public interface OnSShListener { + /** + * 向IPC发送命令返回结果 + * + * @param info + */ + void onSSHResult(SSHResult info); + } + + private String ipcConnectedIp; + private SSH ssh; + + public void shutdownIPC() { + sendIPCCmd("sudo -S shutdown -h now"); + } + + public void rebootIPC() { + sendIPCCmd("sudo -S reboot"); + } + + public void rebootAPDocker() { + sendIPCCmd("docker restart autocar_default_1"); + } + + private void sendIPCCmd(final String cmd) { + if (ssh == null) { + if (TextUtils.isEmpty(ipcConnectedIp)) { + if (listener != null) { + listener.onSSHResult(new SSHResult(SSHResult.RESULT_CODE.IP_UNKNOWN, cmd, "IPC IP未知")); + } + return; + } + ThreadPoolManager.getsInstance().execute(new Runnable() { + @Override + public void run() { + ssh = new SSH(); + String encodePwd = SSHTool.getEncodePwd(); + String privateKey = SSHTool.getPrivateKey(); + try { + String pwd = RSATool.decodeByPrivateKey(encodePwd, Base64.decodeBase64(privateKey)); + ssh.connect(ipcConnectedIp, 22, "reset", pwd); + SSHResult result = ssh.exec(cmd, pwd); + if (listener != null) + listener.onSSHResult(result); + } catch (Exception e) { + if (listener != null) + listener.onSSHResult(new SSHResult(SSHResult.RESULT_CODE.ERROR, cmd, e.getMessage())); + e.printStackTrace(); + } + ssh.disConnect(); + ssh = null; + } + }); + } + } +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/SSHResult.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSHResult.java similarity index 63% rename from libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/SSHResult.java rename to app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSHResult.java index d9f16e9219..efb052ad3e 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/SSHResult.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSHResult.java @@ -1,10 +1,22 @@ -package com.zhidao.support.adas.high.bean; +package com.zhidao.adas.client.ssh; + +import com.zhidao.adas.client.DataDistribution; +import com.zhidao.adas.client.bean.MySSHResult; +import com.zhidao.support.adas.high.common.CupidLogUtils; /** * SSH返回结果 */ public class SSHResult { + public void onSSHResult(final SSHResult info) { + MySSHResult result = new MySSHResult(info.toString(), 0); + DataDistribution.getInstance().addData(result); +// showToastCenter("IPC命令下发结果:" + info.code + " 命令:" + info.cmd + " 信息:" + info.msg); +// CupidLogUtils.w(TAG, "IPC命令下发结果:" + info.code + " 命令:" + info.cmd + " 信息:" + info.msg); + } + + public interface RESULT_CODE { /** * 工控机IP未知 diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/SSHTool.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSHTool.java similarity index 80% rename from libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/SSHTool.java rename to app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSHTool.java index f43b60f6b5..45d40f7867 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/SSHTool.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ssh/SSHTool.java @@ -1,4 +1,4 @@ -package com.zhidao.support.adas.high.common; +package com.zhidao.adas.client.ssh; public class SSHTool { static { diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutoPilotModeDialog.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutoPilotModeDialog.java index bdd5149aa4..3ebdd3292f 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutoPilotModeDialog.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/AutoPilotModeDialog.java @@ -15,8 +15,8 @@ import androidx.recyclerview.widget.SimpleItemAnimator; import com.zhidao.adas.client.R; import com.zhidao.adas.client.adapter.LineAdapter; import com.zhidao.adas.client.base.BaseAdapter; -import com.zhidao.adas.client.bean.UpdateDataEvent; import com.zhidao.adas.client.bean.AutoPilotMode; +import com.zhidao.adas.client.bean.UpdateDataEvent; import com.zhidao.adas.client.utils.Constants; import com.zhidao.support.adas.high.AdasManager; @@ -109,6 +109,10 @@ public class AutoPilotModeDialog extends Dialog { builder.setSpeedLimit(data.speedLimit); builder.setVehicleType(9); builder.setIsSpeakVoice(true); + if (data.isBus) { + builder.setRouteID(data.routeID); + builder.setRouteName(data.routeName); + } AdasManager.getInstance().sendAutoPilotModeReq(1, 0, builder.build()); AutoPilotModeDialog.this.dismiss(); } 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 b3fef92562..31bff8d2bc 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 @@ -189,7 +189,7 @@ public class AutopilotConfigActivity extends BaseActivity { }); } else { builder.setTitle("保存失败") - .setMessage("请输入必填项\n所有输入框均必填\uD83E\uDD2A") + .setMessage("请输入必填项\n所有输入框均必填\uD83E\uDD2A\n(Bus必须输入道路名称和道路ID)") .setPositiveButton("确认", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { 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 c74df8e22b..3fb2d54180 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 @@ -12,7 +12,6 @@ import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.util.Log; -import android.view.Gravity; import android.view.View; import android.view.WindowManager; import android.widget.AdapterView; @@ -73,7 +72,7 @@ import com.zhidao.support.adas.high.OnAdasConnectStatusListener; import com.zhidao.support.adas.high.OnAdasListener; import com.zhidao.support.adas.high.OnMultiDeviceListener; import com.zhidao.support.adas.high.bean.IPCUpgradeStateInfo; -import com.zhidao.support.adas.high.bean.SSHResult; +import com.zhidao.adas.client.ssh.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; @@ -472,9 +471,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas titleBtnData.add("数据采集end"); titleBtnData.add("发送信号灯"); titleBtnData.add("自动驾驶限速"); - titleBtnData.add("重启Docker"); - titleBtnData.add("重启IPC"); - titleBtnData.add("关机"); + titleBtnData.add("重启所有节点"); titleBtnData.add("采集类型"); titleBtnData.add("打开演示模式"); titleBtnData.add("关闭演示模式"); @@ -711,13 +708,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas return status; } - @Override - public void onSSHResult(final SSHResult info) { - MySSHResult result = new MySSHResult(info.toString(), 0); - DataDistribution.getInstance().addData(result); - showToastCenter("IPC命令下发结果:" + info.code + " 命令:" + info.cmd + " 信息:" + info.msg); - CupidLogUtils.w(TAG, "IPC命令下发结果:" + info.code + " 命令:" + info.cmd + " 信息:" + info.msg); - } + @Override public void onError(ProtocolStatus status, byte[] bytes) { @@ -819,9 +810,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas } - - - private void initAdas() { CupidLogUtils.e(TAG, "--->初始化"); AdasOptions options; @@ -1084,26 +1072,19 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas break; case 8: - //重启Docker - AdasManager.getInstance().rebootAPDocker(); + //重启所有节点 + AdasManager.getInstance().sendSystemCmdReq(MessagePad.SystemCmdType.SYSTEMCMD_REBOOT); break; + case 9: - //重启IPC - AdasManager.getInstance().rebootIPC(); - break; - case 10: - //关机 - AdasManager.getInstance().shutdownIPC(); - break; - case 11: //采集类型 AdasManager.getInstance().sendRecordCause(recordKey, recordFileName, "1", "变道有干扰"); break; - case 12: + case 10: //打开演示模式 AdasManager.getInstance().sendDemoModeReq(1); break; - case 13: + case 11: //关闭演示模式 AdasManager.getInstance().sendDemoModeReq(0); break; diff --git a/app_ipc_monitoring/src/main/res/layout/item_autopilot_config.xml b/app_ipc_monitoring/src/main/res/layout/item_autopilot_config.xml index aa1343be5e..3ada7d3e5e 100644 --- a/app_ipc_monitoring/src/main/res/layout/item_autopilot_config.xml +++ b/app_ipc_monitoring/src/main/res/layout/item_autopilot_config.xml @@ -20,6 +20,79 @@ android:layout_height="wrap_content" android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + diff --git a/app_ipc_monitoring/src/main/res/layout/item_info.xml b/app_ipc_monitoring/src/main/res/layout/item_info.xml index 517260aed3..580357f4da 100644 --- a/app_ipc_monitoring/src/main/res/layout/item_info.xml +++ b/app_ipc_monitoring/src/main/res/layout/item_info.xml @@ -16,6 +16,6 @@ android:gravity="center" android:text="INFO" android:textColor="@drawable/item_text_color" - android:textSize="16sp" /> + android:textSize="14sp" /> \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt index e5b0eca86a..d9cb24e8d1 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/MoGoAutopilotProvider.kt @@ -310,11 +310,11 @@ class MoGoAutopilotProvider : } override fun setIPCShutDown() { - AdasManager.getInstance().shutdownIPC() +// AdasManager.getInstance().shutdownIPC() } override fun setIPCReboot() { - AdasManager.getInstance().rebootAPDocker() +// AdasManager.getInstance().rebootAPDocker() } override fun recordCause(key: String?, name: String?, id: String?, reason: String?) { diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt index ee736d0533..8b06378099 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -39,7 +39,6 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_ import com.zhidao.support.adas.high.AdasManager import com.zhidao.support.adas.high.OnAdasListener import com.zhidao.support.adas.high.bean.IPCUpgradeStateInfo -import com.zhidao.support.adas.high.bean.SSHResult import com.zhidao.support.adas.high.common.ProtocolStatus import com.zhjt.service.chain.ChainLog import com.zhjt.service.chain.TracingConstants.Endpoint.Companion.PAD @@ -326,13 +325,13 @@ class MoGoAdasListenerImpl : OnAdasListener { } } - override fun onSSHResult(info: SSHResult?) { - if (info != null && "docker restart autocar_default_1" == info.cmd) { - showDockerRebootResult(info.code, info.msg) - } else { - CallerLogger.w("$M_ADAS_IMPL$TAG", "onSSHResult : result info is null") - } - } +// override fun onSSHResult(info: com.zhidao.adas.client.ssh.SSHResult?) { +// if (info != null && "docker restart autocar_default_1" == info.cmd) { +// showDockerRebootResult(info.code, info.msg) +// } else { +// CallerLogger.w("$M_ADAS_IMPL$TAG", "onSSHResult : result info is null") +// } +// } override fun onError(status: ProtocolStatus, bytes: ByteArray) { diff --git a/libraries/mogo-adas-data/src/main/proto/message_pad.proto b/libraries/mogo-adas-data/src/main/proto/message_pad.proto index e516162f8e..b2898fa5a7 100644 --- a/libraries/mogo-adas-data/src/main/proto/message_pad.proto +++ b/libraries/mogo-adas-data/src/main/proto/message_pad.proto @@ -34,6 +34,7 @@ enum MessageType MsgTypeTrafficLightData = 0x1010c; //发送红绿灯数据到工控机 MsgTypeWarn = 0x1010d; //预警数据 MsgTypeArrivalNotification = 0x1010e; //到站提醒 + MsgTypeSystemCmdReq = 0x1010f; //系统命令请求, 比如系统重启,启用新镜像 } message Header @@ -279,6 +280,19 @@ message ArrivalNotification Location endLocation = 2; } +// message definition for MsgTypeSystemCmdReq +enum SystemCmdType { + SYSTEMCMD_NONE = 0; + SYSTEMCMD_REBOOT = 1; + SYSTEMCMD_EMPLOY_NEW_IMAGE = 2; + SYSTEMCMD_SHUT_DOWN = 3; +} + +message SystemCmdReq +{ + SystemCmdType cmdType = 1; // +} + diff --git a/libraries/mogo-adas/README.md b/libraries/mogo-adas/README.md index c94cffa723..f5c1a7349d 100644 --- a/libraries/mogo-adas/README.md +++ b/libraries/mogo-adas/README.md @@ -83,21 +83,14 @@ ~~~ ~~~java /** - * 向工控机发送关机命令 + * 系统命令请求, 比如系统重启,启用新镜像 + * + * @param type SystemCmdType。SYSTEMCMD_REBOOT 重启所有节点 + * SystemCmdType。SYSTEMCMD_EMPLOY_NEW_IMAGE 使用新镜像(推镜像) + * SystemCmdType。SYSTEMCMD_SHUT_DOWN 关机 + * @return boolean */ - AdasManager.getInstance().shutdownIPC(); -~~~ -~~~java - /** - * 向工控机发送重启命令 - */ - AdasManager.getInstance().rebootIPC(); -~~~ -~~~java - /** - * 向工控机发送重启自动驾驶Docker命令 - */ - AdasManager.getInstance().rebootAPDocker(); + AdasManager.getInstance().sendSystemCmdReq(@NonNull MessagePad.SystemCmdType type); ~~~ ~~~java /** diff --git a/libraries/mogo-adas/build.gradle b/libraries/mogo-adas/build.gradle index fa5c2e6ba5..adc3b97ecb 100644 --- a/libraries/mogo-adas/build.gradle +++ b/libraries/mogo-adas/build.gradle @@ -83,7 +83,7 @@ dependencies { // implementation 'com.google.protobuf:protobuf-java:3.6.1' // implementation 'com.google.protobuf:protoc:3.6.1' // implementation 'com.google.protobuf:protobuf-java-util:3.6.1' - implementation 'com.jcraft:jsch:0.1.55' + // api project(path: ':lib_recorder') // api "com.zhidao.support.recorder:recorder:1.0.0.3" diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java index 42e62465e7..4f496b4a2c 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java @@ -13,19 +13,13 @@ import androidx.annotation.NonNull; import com.google.gson.Gson; import com.google.protobuf.InvalidProtocolBufferException; import com.zhidao.support.adas.high.bean.BaseInfo; -import com.zhidao.support.adas.high.bean.SSHResult; -import com.zhidao.support.adas.high.common.Base64; import com.zhidao.support.adas.high.common.Constants; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.common.DigitalTrans; import com.zhidao.support.adas.high.common.IPCFixationIPHelper; import com.zhidao.support.adas.high.common.MessageType; import com.zhidao.support.adas.high.common.ProtocolStatus; -import com.zhidao.support.adas.high.common.RSATool; import com.zhidao.support.adas.high.common.RegexUtils; -import com.zhidao.support.adas.high.common.SSH; -import com.zhidao.support.adas.high.common.SSHTool; -import com.zhidao.support.adas.high.common.ThreadPoolManager; import com.zhidao.support.adas.high.msg.IMsg; import com.zhidao.support.adas.high.msg.MyMessageFactory; import com.zhidao.support.adas.high.protocol.RawData; @@ -87,7 +81,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec * 工控机连接配置 */ private final AdasOptions adasOptions; - private SSH ssh; + /** * 已经链接成功的工控机IP 未连接未null */ @@ -200,53 +194,6 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec } } - private void sendIPCCmd(final String cmd) { - if (ssh == null) { - if (TextUtils.isEmpty(ipcConnectedIp)) { - if (mAdasListener != null) { - mAdasListener.onSSHResult(new SSHResult(SSHResult.RESULT_CODE.IP_UNKNOWN, cmd, "IPC IP未知")); - } - return; - } - ThreadPoolManager.getsInstance().execute(new Runnable() { - @Override - public void run() { - ssh = new SSH(); - String encodePwd = SSHTool.getEncodePwd(); - String privateKey = SSHTool.getPrivateKey(); - try { - String pwd = RSATool.decodeByPrivateKey(encodePwd, Base64.decodeBase64(privateKey)); - ssh.connect(ipcConnectedIp, 22, "reset", pwd); - SSHResult result = ssh.exec(cmd, pwd); - if (mAdasListener != null) - mAdasListener.onSSHResult(result); - } catch (Exception e) { - if (mAdasListener != null) - mAdasListener.onSSHResult(new SSHResult(SSHResult.RESULT_CODE.ERROR, cmd, e.getMessage())); - e.printStackTrace(); - } - ssh.disConnect(); - ssh = null; - } - }); - } - } - - @Override - public void shutdownIPC() { - sendIPCCmd("sudo -S shutdown -h now"); - } - - @Override - public void rebootIPC() { - sendIPCCmd("sudo -S reboot"); - } - - @Override - public void rebootAPDocker() { - sendIPCCmd("docker restart autocar_default_1"); - } - @Override public String getIpcConnectedIp() { return ipcConnectedIp; @@ -747,5 +694,21 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec MessagePad.TrafficLightData req = builder.build(); return sendWsMessage(MessageType.TYPE_SEND_TRAFFIC_LIGHT_DATA.typeCode, req.toByteArray()); } + + /** + * 系统命令请求, 比如系统重启,启用新镜像 + * + * @param type SystemCmdType。SYSTEMCMD_REBOOT 重启所有节点 + * SystemCmdType。SYSTEMCMD_EMPLOY_NEW_IMAGE 使用新镜像(推镜像) + * SystemCmdType。SYSTEMCMD_SHUT_DOWN 关机 + * @return boolean + */ + @Override + public boolean sendSystemCmdReq(@NonNull MessagePad.SystemCmdType type) { + MessagePad.SystemCmdReq.Builder builder = MessagePad.SystemCmdReq.newBuilder(); + builder.setCmdType(type); + MessagePad.SystemCmdReq req = builder.build(); + return sendWsMessage(MessageType.TYPE_SEND_SYSTEM_CMD_REQ.typeCode, req.toByteArray()); + } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java index 4706f0100c..d790094ac8 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java @@ -182,41 +182,6 @@ public class AdasManager implements IAdasNetCommApi { } } - - /** - * 向工控机发送关机命令 - * 目前提供的账号没有关机权限 - */ - @Override - @Deprecated - public void shutdownIPC() { - if (mChannel != null) { - mChannel.shutdownIPC(); - } - } - - /** - * 向工控机发送重启命令 - * 目前提供的账号没有重启权限 - */ - @Override - @Deprecated - public void rebootIPC() { - if (mChannel != null) { - mChannel.rebootIPC(); - } - } - - /** - * 向工控机发送重启自动驾驶Docker命令 - */ - @Override - public void rebootAPDocker() { - if (mChannel != null) { - mChannel.rebootAPDocker(); - } - } - /** * 解析工控机发送过来的数据 * 多设备时使用 @@ -412,6 +377,19 @@ public class AdasManager implements IAdasNetCommApi { return mChannel != null && mChannel.sendGlobalPathReq(); } + /** + * 系统命令请求, 比如系统重启,启用新镜像 + * + * @param type SystemCmdType。SYSTEMCMD_REBOOT 重启所有节点 + * SystemCmdType。SYSTEMCMD_EMPLOY_NEW_IMAGE 使用新镜像(推镜像) + * SystemCmdType。SYSTEMCMD_SHUT_DOWN 关机 + * @return boolean + */ + @Override + public boolean sendSystemCmdReq(@NonNull MessagePad.SystemCmdType type) { + return mChannel != null && mChannel.sendSystemCmdReq(type); + } + /** * 获取工控机固定IP列表 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java index 0e9d8db6ab..f1bdc9ab60 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java @@ -170,6 +170,16 @@ public interface IAdasNetCommApi { */ boolean sendGlobalPathReq(); + /** + * 系统命令请求, 比如系统重启,启用新镜像 + * + * @param type SystemCmdType。SYSTEMCMD_REBOOT 重启所有节点 + * SystemCmdType。SYSTEMCMD_EMPLOY_NEW_IMAGE 使用新镜像(推镜像) + * SystemCmdType。SYSTEMCMD_SHUT_DOWN 关机 + * @return boolean + */ + boolean sendSystemCmdReq(@NonNull MessagePad.SystemCmdType type); + // TODO 需求暂停 待讨论 // boolean getRoutes(); @@ -181,24 +191,10 @@ public interface IAdasNetCommApi { @Deprecated void sendBaseInfo(BaseInfo info); - /** - * 向工控机发送关机命令 - */ - void shutdownIPC(); - - /** - * 向工控机发送重启命令 - */ - void rebootIPC(); - - /** - * 向工控机发送重启自动驾驶Docker命令 - */ - void rebootAPDocker(); - /** * 解析工控机发送过来的数据 * 多设备时使用 + * * @param bytes 数据 */ void parseIPCData(byte[] bytes); @@ -209,5 +205,4 @@ public interface IAdasNetCommApi { void setEnableLog(boolean isEnableLog); - } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java index 47a336e015..c8b5ff52e4 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java @@ -1,7 +1,6 @@ package com.zhidao.support.adas.high; import com.zhidao.support.adas.high.bean.IPCUpgradeStateInfo; -import com.zhidao.support.adas.high.bean.SSHResult; import com.zhidao.support.adas.high.common.ProtocolStatus; import chassis.VehicleStateOuterClass; @@ -84,7 +83,7 @@ public interface OnAdasListener { /** * 他车轨迹预测 * - * @param header 头 + * @param header 头 * @param predictionObjects 他车轨迹预测数据 */ void onPredictionObstacleTrajectory(MessagePad.Header header, Prediction.mPredictionObjects predictionObjects); @@ -148,13 +147,6 @@ public interface OnAdasListener { @Deprecated void onUpgradeStateInfo(IPCUpgradeStateInfo info); - /** - * 向IPC发送命令返回结果 - * - * @param info - */ - void onSSHResult(SSHResult info); - /** * 数据错误 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java index 69feea61a9..2685ca4ba5 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/MessageType.java @@ -37,6 +37,7 @@ public enum MessageType { @Deprecated TYPE_RECEIVE_WARN(MessagePad.MessageType.MsgTypeWarn, "预警数据"), TYPE_RECEIVE_ARRIVAL_NOTIFICATION(MessagePad.MessageType.MsgTypeArrivalNotification, "到站提醒"), + TYPE_SEND_SYSTEM_CMD_REQ(MessagePad.MessageType.MsgTypeSystemCmdReq, "系统命令请求, 比如系统重启,启用新镜像"), /** * 工控机升级状态