From a4370eb06ec2f3446ed92b9d6bd0d884242ce8e3 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Wed, 8 Mar 2023 16:19:21 +0800 Subject: [PATCH] =?UTF-8?q?[opt2.15.0][adas-lib]=E5=A2=9E=E5=8A=A0lanning?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=91=BD=E4=BB=A4=EF=BC=88=E7=9B=AE=E5=89=8D?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E8=A5=84=E9=98=B3=E9=A9=BE=E7=85=A7=E8=80=83?= =?UTF-8?q?=E8=AF=95=EF=BC=89=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=8E=A7=E5=88=B6?= =?UTF-8?q?V2N=E6=95=B0=E6=8D=AE=E7=BB=99=E8=BD=A6=E7=AB=AFPnC=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app_ipc_monitoring/gradle.properties | 4 +- .../adas/client/adapter/SendCmdAdapter.java | 68 +++++++++++ .../com/zhidao/adas/client/bean/SendCmd.java | 68 +++++++++++ .../adas/client/bean/SendCmdOption.java | 23 ++++ .../zhidao/adas/client/ui/MainActivity.java | 62 ++++------ .../zhidao/adas/client/ui/SendCmdDialog.java | 111 ++++++++++++++++++ .../zhidao/adas/client/utils/Constants.java | 15 +-- .../src/main/res/layout/dialog_send_cmd.xml | 38 ++++++ .../src/main/proto/message_pad.proto | 8 +- .../src/main/proto/param_set_cmd.proto | 3 +- .../zhidao/support/adas/high/AdasChannel.java | 54 +++++++-- .../zhidao/support/adas/high/AdasManager.java | 57 ++++++++- .../support/adas/high/IAdasNetCommApi.java | 32 ++++- 13 files changed, 481 insertions(+), 62 deletions(-) create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/SendCmdAdapter.java create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SendCmd.java create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SendCmdOption.java create mode 100644 app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/SendCmdDialog.java create mode 100644 app_ipc_monitoring/src/main/res/layout/dialog_send_cmd.xml diff --git a/app_ipc_monitoring/gradle.properties b/app_ipc_monitoring/gradle.properties index 20893e085c..dd007305b4 100644 --- a/app_ipc_monitoring/gradle.properties +++ b/app_ipc_monitoring/gradle.properties @@ -1,2 +1,2 @@ -#Thu Mar 02 14:18:22 CST 2023 -VERSION_CODE=2 +#Wed Mar 08 16:14:51 CST 2023 +VERSION_CODE=3 diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/SendCmdAdapter.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/SendCmdAdapter.java new file mode 100644 index 0000000000..2454e6f754 --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/adapter/SendCmdAdapter.java @@ -0,0 +1,68 @@ +package com.zhidao.adas.client.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.zhidao.adas.client.R; +import com.zhidao.adas.client.bean.SendCmdOption; + +import java.util.List; + +/** + * @author song kenan + * @des + * @date 2021/8/13 + */ +public class SendCmdAdapter extends RecyclerView.Adapter { + private final List> data; + private final OnItemClickListener listener; + + public interface OnItemClickListener { + void onItemClick(SendCmdOption data); + } + + public SendCmdAdapter(List> data, OnItemClickListener listener) { + this.data = data; + this.listener = listener; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_info, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + SendCmdOption option = data.get(position); + holder.title.setText(option.name); + } + + @Override + public int getItemCount() { + return data == null ? 0 : data.size(); + } + + + class ViewHolder extends RecyclerView.ViewHolder { + TextView title; + + public ViewHolder(View itemView) { + super(itemView); + title = itemView.findViewById(R.id.tv_info_title); + itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + listener.onItemClick(data.get(getBindingAdapterPosition())); + } + }); + + } + } +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SendCmd.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SendCmd.java new file mode 100644 index 0000000000..620ac1fa6b --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SendCmd.java @@ -0,0 +1,68 @@ +package com.zhidao.adas.client.bean; + +import com.zhidao.adas.client.utils.Constants; + +import java.util.ArrayList; +import java.util.List; + +public class SendCmd { + + public final String name; + public final List> value; + + public SendCmd(String name, List> value) { + this.name = name; + this.value = value; + } + + //Planning命令 + public static SendCmd getSendToPlanning() { + List> cmds = new ArrayList<>(); + cmds.add(new SendCmdOption("靠边停车", SendCmdOption.TAG.PULL_OVER, 1)); + cmds.add(new SendCmdOption("重新起步", SendCmdOption.TAG.PULL_OVER, 2)); + cmds.add(new SendCmdOption("紧急停车", SendCmdOption.TAG.PULL_OVER, 3)); + cmds.add(new SendCmdOption("左变道", SendCmdOption.TAG.LANE_CHANGE, 1)); + cmds.add(new SendCmdOption("右变道", SendCmdOption.TAG.LANE_CHANGE, 2)); + cmds.add(new SendCmdOption("超车", SendCmdOption.TAG.LANE_CHANGE, 3)); + cmds.add(new SendCmdOption("恢复自动决策", SendCmdOption.TAG.LANE_CHANGE, 4)); + return new SendCmd(Constants.TITLE.SEND_PLANNING_CMD, cmds); + } + + //演示模式开关 + public static SendCmd getSendDemoMode() { + List> cmds = new ArrayList<>(); + cmds.add(new SendCmdOption("打开", SendCmdOption.TAG.DEMO_MODE, 1)); + cmds.add(new SendCmdOption("关闭", SendCmdOption.TAG.DEMO_MODE, 0)); + return new SendCmd(Constants.TITLE.SEND_SET_DEMO_MODE_REQ, cmds); + } + + //盲区开关 + public static SendCmd getSendBlindArea() { + List> cmds = new ArrayList<>(); + cmds.add(new SendCmdOption("开启", SendCmdOption.TAG.BLIND_AREA, true)); + cmds.add(new SendCmdOption("关闭", SendCmdOption.TAG.BLIND_AREA, false)); + return new SendCmd(Constants.TITLE.SEND_BLIND_AREA, cmds); + } + //V2N数据到PnC + public static SendCmd getSendV2nToPnc() { + List> cmds = new ArrayList<>(); + cmds.add(new SendCmdOption("发送", SendCmdOption.TAG.V2N_TO_PNC, true)); + cmds.add(new SendCmdOption("关闭", SendCmdOption.TAG.V2N_TO_PNC, false)); + return new SendCmd(Constants.TITLE.SEND_V2N_TO_PNC, cmds); + } + //雨天模式开关 + public static SendCmd getSendRainMode() { + List> cmds = new ArrayList<>(); + cmds.add(new SendCmdOption("打开", SendCmdOption.TAG.RAIN_MODE, 1)); + cmds.add(new SendCmdOption("关闭", SendCmdOption.TAG.RAIN_MODE, 0)); + return new SendCmd(Constants.TITLE.SEND_SET_RAIN_MODE_REQ, cmds); + } + + //绕障类功能开关 + public static SendCmd getSendDetouring() { + List> cmds = new ArrayList<>(); + cmds.add(new SendCmdOption("开", SendCmdOption.TAG.DETOURING, 1)); + cmds.add(new SendCmdOption("关", SendCmdOption.TAG.DETOURING, 0)); + return new SendCmd(Constants.TITLE.SEND_DETOURING, cmds); + } +} diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SendCmdOption.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SendCmdOption.java new file mode 100644 index 0000000000..0cfa16eebc --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/bean/SendCmdOption.java @@ -0,0 +1,23 @@ +package com.zhidao.adas.client.bean; + +public class SendCmdOption { + public interface TAG { + int PULL_OVER = 0;//Planning指令 靠边停车 + int LANE_CHANGE = 1;//Planning指令 变道 + int DEMO_MODE = 2;//演示模式 + int BLIND_AREA = 3;//盲区数据开关 + int RAIN_MODE = 4;//雨天模式 + int DETOURING = 5;//绕障类功能 + int V2N_TO_PNC = 5;//V2N数据到PnC + } + + public final String name; + public final int tag; + public final T value; + + public SendCmdOption(String name, int tag, T value) { + this.name = name; + this.tag = tag; + this.value = value; + } +} 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 1e12734f64..d6a73ea144 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 @@ -60,6 +60,7 @@ import com.zhidao.adas.client.bean.ObuSpat; import com.zhidao.adas.client.bean.PerceptionTrafficLight; import com.zhidao.adas.client.bean.ReceiveBytesData; import com.zhidao.adas.client.bean.ReceiveData; +import com.zhidao.adas.client.bean.SendCmd; import com.zhidao.adas.client.bean.SpecialVehicleBean; import com.zhidao.adas.client.log.ConnectStatusSave; import com.zhidao.adas.client.log.LogSave; @@ -661,18 +662,15 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas titleBtnData.add(Constants.TITLE.SEND_TRAFFIC_LIGHT_DATA); titleBtnData.add(Constants.TITLE.SEND_SET_AUTOPILOT_SPEED_REQ); titleBtnData.add(Constants.TITLE.SEND_RECORD_CAUSE); - titleBtnData.add(Constants.TITLE.SEND_SET_DEMO_MODE_REQ_OPEN); - titleBtnData.add(Constants.TITLE.SEND_SET_DEMO_MODE_REQ_CLOSE); - titleBtnData.add(Constants.TITLE.SEND_SET_RAIN_MODE_REQ_OPEN); - titleBtnData.add(Constants.TITLE.SEND_SET_RAIN_MODE_REQ_CLOSE); - titleBtnData.add(Constants.TITLE.SEND_DETOURING_OPEN); - titleBtnData.add(Constants.TITLE.SEND_DETOURING_CLOSE); + titleBtnData.add(Constants.TITLE.SEND_SET_DEMO_MODE_REQ); + titleBtnData.add(Constants.TITLE.SEND_SET_RAIN_MODE_REQ); + titleBtnData.add(Constants.TITLE.SEND_DETOURING); titleBtnData.add(Constants.TITLE.SEND_SYSTEM_CMD_REQ_REBOOT); titleBtnData.add(Constants.TITLE.SEND_DETOURING_SPEED); titleBtnData.add(Constants.TITLE.SEND_TRIP_INFO); titleBtnData.add(Constants.TITLE.SEND_PLANNING_CMD); - titleBtnData.add(Constants.TITLE.SEND_BLIND_AREA_OPEN); - titleBtnData.add(Constants.TITLE.SEND_BLIND_AREA_CLOSE); + titleBtnData.add(Constants.TITLE.SEND_BLIND_AREA); + titleBtnData.add(Constants.TITLE.SEND_V2N_TO_PNC); } private void initBtnRecyclerView() { @@ -1449,33 +1447,21 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas //采集类型 AdasManager.getInstance().sendRecordCause(recordKey, recordFileName, "1", "变道有干扰"); break; - case Constants.TITLE.SEND_SET_DEMO_MODE_REQ_OPEN: - //打开演示模式 - AdasManager.getInstance().sendDemoModeReq(1); + case Constants.TITLE.SEND_SET_DEMO_MODE_REQ: + //演示模式 + new SendCmdDialog(this, SendCmd.getSendDemoMode()).show(); break; - case Constants.TITLE.SEND_SET_DEMO_MODE_REQ_CLOSE: - //关闭演示模式 - AdasManager.getInstance().sendDemoModeReq(0); - break; - case Constants.TITLE.SEND_SET_RAIN_MODE_REQ_OPEN: - //打开雨天模式 - AdasManager.getInstance().sendRainModeReq(1); - break; - case Constants.TITLE.SEND_SET_RAIN_MODE_REQ_CLOSE: - //关闭雨天模式 - AdasManager.getInstance().sendRainModeReq(0); + case Constants.TITLE.SEND_SET_RAIN_MODE_REQ: + //雨天模式 + new SendCmdDialog(this, SendCmd.getSendRainMode()).show(); break; case Constants.TITLE.SEND_RECORD_DATA_CONFIG_RESP: //数据采集配置 showRecordDataConfigRespDialog(); break; - case Constants.TITLE.SEND_DETOURING_OPEN: - //绕障类功能开 - AdasManager.getInstance().sendDetouring(1); - break; - case Constants.TITLE.SEND_DETOURING_CLOSE: - //绕障类功能关 - AdasManager.getInstance().sendDetouring(0); + case Constants.TITLE.SEND_DETOURING: + //绕障类功能 + new SendCmdDialog(this, SendCmd.getSendDetouring()).show(); break; case Constants.TITLE.SEND_DETOURING_SPEED: //绕障速度设置 @@ -1490,14 +1476,16 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas AdasManager.getInstance().sendTripInfoReq(5, "x22", "x23", "x24", false); break; case Constants.TITLE.SEND_PLANNING_CMD: - AdasManager.getInstance().sendPlanningCmd(1); - AdasManager.getInstance().sendPlanningCmd(2); + //Planning指令 + new SendCmdDialog(this, SendCmd.getSendToPlanning()).show(); break; - case Constants.TITLE.SEND_BLIND_AREA_OPEN: - AdasManager.getInstance().sendBlindAreaCmd(true); + case Constants.TITLE.SEND_BLIND_AREA: + //盲区数据开关 + new SendCmdDialog(this, SendCmd.getSendBlindArea()).show(); break; - case Constants.TITLE.SEND_BLIND_AREA_CLOSE: - AdasManager.getInstance().sendBlindAreaCmd(false); + case Constants.TITLE.SEND_V2N_TO_PNC: + //V2N数据到PnC + new SendCmdDialog(this, SendCmd.getSendV2nToPnc()).show(); break; } } @@ -1602,7 +1590,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas break; case WHAT_RECEIVE_ERROR_DATA_SHOW: title.setText(R.string.have_error_data); - title.setTextColor(getColor(android.R.color.holo_red_light)); + title.setTextColor(getResources().getColor(android.R.color.holo_red_light)); title.setVisibility(View.VISIBLE); getHandler().sendEmptyMessageDelayed(WHAT_RECEIVE_ERROR_DATA_HINT, 500); break; @@ -1611,7 +1599,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas break; case WHAT_RECEIVE_ERROR_DATA_STOP: title.setText(R.string.app_name); - title.setTextColor(getColor(R.color.colorWhile)); + title.setTextColor(getResources().getColor(R.color.colorWhile)); title.setVisibility(View.VISIBLE); errorDataUpdateTime = 0; break; diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/SendCmdDialog.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/SendCmdDialog.java new file mode 100644 index 0000000000..b2a82d7cbd --- /dev/null +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/SendCmdDialog.java @@ -0,0 +1,111 @@ +package com.zhidao.adas.client.ui; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.SimpleItemAnimator; + +import com.zhidao.adas.client.R; +import com.zhidao.adas.client.adapter.SendCmdAdapter; +import com.zhidao.adas.client.bean.SendCmd; +import com.zhidao.adas.client.bean.SendCmdOption; +import com.zhidao.adas.client.utils.Constants; +import com.zhidao.support.adas.high.AdasManager; + + +public class SendCmdDialog extends Dialog { + private RecyclerView recyclerView; + private final SendCmd sendCmd; + + public SendCmdDialog(@NonNull Context context, SendCmd sendCmd) { + super(context, R.style.CustomDialog); + this.sendCmd = sendCmd; + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_send_cmd); + //初始化界面控件 + initView(); + initRecyclerView(); + //初始化界面控件的事件 + setOnDismissListener(new OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + } + }); + + } + + @Override + public void show() { + super.show(); + } + + private void initRecyclerView() { + //创建默认的线性LayoutManager 横向的GridLayoutManager + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); + linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView.setLayoutManager(linearLayoutManager); + //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能 + recyclerView.setHasFixedSize(true); + //解决局部刷新闪屏问题 + SimpleItemAnimator animator = (SimpleItemAnimator) recyclerView.getItemAnimator(); + if (animator != null) + animator.setSupportsChangeAnimations(false); + //创建并设置Adapter + SendCmdAdapter adapter = new SendCmdAdapter(sendCmd.value, new SendCmdAdapter.OnItemClickListener() { + @Override + public void onItemClick(SendCmdOption data) { + String name = sendCmd.name; + if (Constants.TITLE.SEND_PLANNING_CMD.equals(name)) { + if (data.tag == SendCmdOption.TAG.PULL_OVER) { + AdasManager.getInstance().sendPlanningPullOverCmd((int) data.value); + } else if (data.tag == SendCmdOption.TAG.LANE_CHANGE) { + AdasManager.getInstance().sendPlanningLaneChangeCmd((int) data.value); + } + } else if (Constants.TITLE.SEND_SET_DEMO_MODE_REQ.equals(name)) { + if (data.tag == SendCmdOption.TAG.DEMO_MODE) { + AdasManager.getInstance().sendDemoModeReq((int) data.value); + } + } else if (Constants.TITLE.SEND_BLIND_AREA.equals(name)) { + if (data.tag == SendCmdOption.TAG.BLIND_AREA) { + AdasManager.getInstance().sendBlindAreaCmd((boolean) data.value); + } + } else if (Constants.TITLE.SEND_V2N_TO_PNC.equals(name)) { + if (data.tag == SendCmdOption.TAG.V2N_TO_PNC) { + AdasManager.getInstance().sendV2nToPncCmd((boolean) data.value); + } + } else if (Constants.TITLE.SEND_SET_RAIN_MODE_REQ.equals(name)) { + if (data.tag == SendCmdOption.TAG.RAIN_MODE) { + AdasManager.getInstance().sendRainModeReq((int) data.value); + } + } else if (Constants.TITLE.SEND_DETOURING.equals(name)) { + if (data.tag == SendCmdOption.TAG.DETOURING) { + AdasManager.getInstance().sendDetouring((int) data.value); + } + } + } + }); + recyclerView.setAdapter(adapter); + } + + /** + * 初始化界面控件 + */ + private void initView() { + recyclerView = findViewById(R.id.recyclerView); + TextView title = findViewById(R.id.title); + title.setText(sendCmd.name); + } + + +} \ No newline at end of file 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 f368736d09..ba0998ca62 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 @@ -192,18 +192,15 @@ public class Constants { String SEND_SET_AUTOPILOT_SPEED_REQ = "自动驾驶限速"; String SEND_SYSTEM_CMD_REQ_REBOOT = "重启所有节点"; String SEND_RECORD_CAUSE = "采集类型"; - String SEND_SET_DEMO_MODE_REQ_OPEN = "打开演示模式"; - String SEND_SET_DEMO_MODE_REQ_CLOSE = "关闭演示模式"; - String SEND_SET_RAIN_MODE_REQ_OPEN = "打开雨天模式"; - String SEND_SET_RAIN_MODE_REQ_CLOSE = "关闭雨天模式"; + String SEND_SET_DEMO_MODE_REQ = "演示模式"; + String SEND_SET_RAIN_MODE_REQ = "雨天模式"; String SEND_RECORD_DATA_CONFIG_RESP = "数据采集配置"; - String SEND_DETOURING_OPEN = "绕障类功能开"; - String SEND_DETOURING_CLOSE = "绕障类功能关"; + String SEND_DETOURING = "绕障类功能"; String SEND_DETOURING_SPEED = "绕障速度阈值"; String SEND_TRIP_INFO = "行程信息"; - String SEND_PLANNING_CMD = "给Planning指令"; - String SEND_BLIND_AREA_OPEN = "盲区数据开"; - String SEND_BLIND_AREA_CLOSE = "盲区数据关"; + String SEND_PLANNING_CMD = "Planning指令"; + String SEND_BLIND_AREA = "盲区数据开关"; + String SEND_V2N_TO_PNC = "V2N数据到PnC"; } } diff --git a/app_ipc_monitoring/src/main/res/layout/dialog_send_cmd.xml b/app_ipc_monitoring/src/main/res/layout/dialog_send_cmd.xml new file mode 100644 index 0000000000..31f8918306 --- /dev/null +++ b/app_ipc_monitoring/src/main/res/layout/dialog_send_cmd.xml @@ -0,0 +1,38 @@ + + + + + + + + + \ No newline at end of file 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 e32a91efa3..87008d10c4 100644 --- a/libraries/mogo-adas-data/src/main/proto/message_pad.proto +++ b/libraries/mogo-adas-data/src/main/proto/message_pad.proto @@ -599,12 +599,18 @@ message TripInfoEvent //message definition for MsgTypePlanningCmd message PullOverCmd { - uint32 cmd = 1; //0: default 1: 靠边停车 2:重新起步 + uint32 cmd = 1; //0: default 1: 靠边停车 2:重新起步 3:紧急停车 +} + +message LaneChangeCmd +{ + uint32 cmd = 1; //0: default 1: 左变道 2:右变道 3:超车 4:恢复自动决策 } message PlanningCmd { PullOverCmd pullOverCmd = 1; + LaneChangeCmd laneChangeCmd = 2; } //message definition for MsgTypeSetParamReqV2 diff --git a/libraries/mogo-adas-data/src/main/proto/param_set_cmd.proto b/libraries/mogo-adas-data/src/main/proto/param_set_cmd.proto index 1524e30c31..cce727e633 100644 --- a/libraries/mogo-adas-data/src/main/proto/param_set_cmd.proto +++ b/libraries/mogo-adas-data/src/main/proto/param_set_cmd.proto @@ -4,7 +4,8 @@ package mogo.telematics; enum ParamSetType { ParamSetTypeNone = 0; - ParamSetTypeBlindArea = 1; + ParamSetTypeBlindArea = 1; //bool, :off 1:on + ParamSetTypeV2N = 2; //bool, 0:不发给PnC 1:发给Pnc } message ParamSetCmd 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 94fc7a58e5..b0b0fdaff8 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 @@ -1231,17 +1231,47 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec return subscribeInterface != null && subscribeInterface.subscribeInterface(role, type, messageType); } + + /** + * 给Planning发送靠边停车指令 + * + * @param pullOverCmd 命令 0: default 1: 靠边停车 2:重新起步 3:紧急停车 TODO 值3 目前仅襄阳牌照考试支持 + * @return boolean 是否加入发送队列 + */ + @Override + public boolean sendPlanningPullOverCmd(int pullOverCmd) { + return sendPlanningCmd(pullOverCmd, -1); + } + + /** + * 给Planning发送变道指令 + * TODO 目前此功能仅襄阳牌照考试支持 + * + * @param laneChangeCmd 命令 0: default 1: 左变道 2:右变道 3:超车 4:恢复自动决策 + * @return boolean 是否加入发送队列 + */ + @Override + public boolean sendPlanningLaneChangeCmd(int laneChangeCmd) { + return sendPlanningCmd(-1, laneChangeCmd); + } + /** * 给Planning发送指令 * - * @param cmd 命令 0: default 1: 靠边停车 2:重新起步 - * @return boolean + * @param pullOverCmd 命令 0: default 1: 靠边停车 2:重新起步 3:紧急停车 TODO 值3 仅襄阳牌照考试支持 + * @param laneChangeCmd 命令 0: default 1: 左变道 2:右变道 3:超车 4:恢复自动决策 TODO laneChangeCmd 仅襄阳牌照考试支持 + * @return boolean 是否加入发送队列 */ @Override - public boolean sendPlanningCmd(int cmd) { - MessagePad.PlanningCmd planningCmd = MessagePad.PlanningCmd.newBuilder() - .setPullOverCmd(MessagePad.PullOverCmd.newBuilder().setCmd(cmd)) - .build(); + public boolean sendPlanningCmd(int pullOverCmd, int laneChangeCmd) { + MessagePad.PlanningCmd.Builder build = MessagePad.PlanningCmd.newBuilder(); + if (pullOverCmd > -1) { + build.setPullOverCmd(MessagePad.PullOverCmd.newBuilder().setCmd(pullOverCmd)); + } + if (laneChangeCmd > -1) { + build.setLaneChangeCmd(MessagePad.LaneChangeCmd.newBuilder().setCmd(laneChangeCmd)); + } + MessagePad.PlanningCmd planningCmd = build.build(); return sendPBMessage(MessageType.TYPE_SEND_PLANNING_CMD.typeCode, planningCmd.toByteArray()); } @@ -1567,6 +1597,16 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec return sendPBMessage(MessageType.TYPE_SEND_BAG_MANAGER_CMD.typeCode, bagManager.toByteArray()); } + /** + * 控制V2N数据给车端PnC + * + * @param switchCmd true为发给PnC,false为不发给PnC + * @return boolean + */ + @Override + public boolean sendV2nToPncCmd(boolean switchCmd) { + return sendSetParamReqV2(ParamSetCmdOuterClass.ParamSetType.ParamSetTypeV2N, switchCmd); + } /** * 盲区数据开关 @@ -1587,7 +1627,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec ParamSetCmdOuterClass.ParamSetCmd.Builder builder = ParamSetCmdOuterClass.ParamSetCmd.newBuilder() .setSrc(1) .setType(paramSetType); - if (paramSetType == ParamSetCmdOuterClass.ParamSetType.ParamSetTypeBlindArea) { + if (paramSetType == ParamSetCmdOuterClass.ParamSetType.ParamSetTypeBlindArea || paramSetType == ParamSetCmdOuterClass.ParamSetType.ParamSetTypeV2N) { builder.setBoolValue((Boolean) value); } ParamSetCmdOuterClass.ParamSetCmd req = builder.build(); 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 7ea65cff4e..0430b47deb 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 @@ -603,15 +603,51 @@ public class AdasManager implements IAdasNetCommApi { return mChannel != null && mChannel.subscribeInterface(role, type, messageType); } + /** + * 给Planning发送靠边停车指令 + * + * @param pullOverCmd 命令 0: default 1: 靠边停车 2:重新起步 3:紧急停车 TODO 值3 目前仅襄阳牌照考试支持 + * @return boolean 是否加入发送队列 + */ + @Override + public boolean sendPlanningPullOverCmd(int pullOverCmd) { + return mChannel != null && mChannel.sendPlanningPullOverCmd(pullOverCmd); + } + + /** + * 给Planning发送变道指令 + * TODO 目前此功能仅襄阳牌照考试支持 + * + * @param laneChangeCmd 命令 0: default 1: 左变道 2:右变道 3:超车 4:恢复自动决策 + * @return boolean 是否加入发送队列 + */ + @Override + public boolean sendPlanningLaneChangeCmd(int laneChangeCmd) { + return mChannel != null && mChannel.sendPlanningLaneChangeCmd(laneChangeCmd); + } + /** * 给Planning发送指令 * + * @param pullOverCmd 命令 0: default 1: 靠边停车 2:重新起步 3:紧急停车 TODO 值3 仅襄阳牌照考试支持 + * @param laneChangeCmd 命令 0: default 1: 左变道 2:右变道 3:超车 4:恢复自动决策 TODO laneChangeCmd 仅襄阳牌照考试支持 + * @return boolean 是否加入发送队列 + */ + @Override + public boolean sendPlanningCmd(int pullOverCmd, int laneChangeCmd) { + return mChannel != null && mChannel.sendPlanningCmd(pullOverCmd, laneChangeCmd); + } + + /** + * 给Planning发送 靠边停车 指令 + * TODO 已废弃 新接口{@link AdasManager#sendPlanningPullOverCmd(int)} + * * @param cmd 命令 0: default 1: 靠边停车 2:重新起步 * @return boolean */ - @Override + @Deprecated public boolean sendPlanningCmd(int cmd) { - return mChannel != null && mChannel.sendPlanningCmd(cmd); + return mChannel != null && mChannel.sendPlanningPullOverCmd(cmd); } /** @@ -822,6 +858,23 @@ public class AdasManager implements IAdasNetCommApi { return mChannel != null && mChannel.sendBagManagerCmd(bagManager); } + /** + * 控制V2N数据给车端PnC + * + * @param switchCmd true为发给PnC,false为不发给PnC + * @return boolean + */ + @Override + public boolean sendV2nToPncCmd(boolean switchCmd) { + return mChannel != null && mChannel.sendV2nToPncCmd(switchCmd); + } + + /** + * 盲区数据开关 + * + * @param switchCmd 数据开关 + * @return boolean + */ @Override public boolean sendBlindAreaCmd(boolean switchCmd) { return mChannel != null && mChannel.sendBlindAreaCmd(switchCmd); 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 00778cc9f5..14dc5df6d8 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 @@ -321,13 +321,31 @@ public interface IAdasNetCommApi { */ boolean subscribeInterface(@Define.TerminalRole int role, @Define.SubscribeType int type, @NonNull MessageType messageType); + /** + * 给Planning发送靠边停车指令 + * + * @param pullOverCmd 命令 0: default 1: 靠边停车 2:重新起步 3:紧急停车 TODO 值3 目前仅襄阳牌照考试支持 + * @return boolean 是否加入发送队列 + */ + boolean sendPlanningPullOverCmd(int pullOverCmd); + + /** + * 给Planning发送变道指令 + * TODO 目前此功能仅襄阳牌照考试支持 + * + * @param laneChangeCmd 命令 0: default 1: 左变道 2:右变道 3:超车 4:恢复自动决策 + * @return boolean 是否加入发送队列 + */ + boolean sendPlanningLaneChangeCmd(int laneChangeCmd); + /** * 给Planning发送指令 * - * @param cmd 命令 0: default 1: 靠边停车 2:重新起步 - * @return boolean + * @param pullOverCmd 命令 0: default 1: 靠边停车 2:重新起步 3:紧急停车 TODO 值3 目前仅襄阳牌照考试支持 + * @param laneChangeCmd 命令 0: default 1: 左变道 2:右变道 3:超车 4:恢复自动决策 TODO laneChangeCmd 仅襄阳牌照考试支持 + * @return boolean 是否加入发送队列 */ - boolean sendPlanningCmd(int cmd); + boolean sendPlanningCmd(int pullOverCmd, int laneChangeCmd); /** * 福田清扫车业务指令下发 @@ -506,6 +524,14 @@ public interface IAdasNetCommApi { */ boolean sendBagManagerCmd(BagManagerOuterClass.BagManager bagManager); + /** + * 控制V2N数据给车端PnC + * + * @param switchCmd true为发给PnC,false为不发给PnC + * @return boolean + */ + boolean sendV2nToPncCmd(boolean switchCmd); + /** * 盲区数据开关 *