[change]添加乘客屏发送自动驾驶命令转发到司机屏,司机屏发送到工控机

This commit is contained in:
xinfengkun
2022-06-17 17:08:14 +08:00
parent 78637a6a62
commit 88583b71a3
8 changed files with 137 additions and 61 deletions

View File

@@ -227,24 +227,39 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
* @param data 数据
* @return boolean
*/
private boolean sendWsMessage(MessagePad.MessageType msgType, byte[] data) {
if (mSocket != null && rawPack != null) {
ByteString byteString = rawPack.pack(msgType, data);
if (byteString != null) {
return mSocket.sendDataWebSocket(byteString);
private boolean sendPBMessage(MessagePad.MessageType msgType, byte[] data) {
if (rawPack != null) {
byte[] bytes = rawPack.pack(msgType, data);
//司机屏工控机数据转发
if (adasOptions.isClient()) {
if (onMultiDeviceListener != null)
onMultiDeviceListener.onForwardingPassengerIPCMessage(bytes);
return true;
} else {
return sendWsMessage(bytes);
}
}
return false;
}
@Override
public boolean sendWsMessage(byte[] bytes) {
if (mSocket == null || bytes == null || bytes.length <= 0) {
return false;
}
ByteString byteString = ByteString.of(bytes);
return mSocket.sendDataWebSocket(byteString);
}
/**
* 解析工控机发送过来PB的数据
* 乘客屏数据解析
*
* @param bytes 数据
*/
@Override
public void decoderRaw(byte[] bytes) {
if (bytes == null || bytes.length == 0) {
if (bytes == null || bytes.length <= 0) {
return;
}
ByteString byteString = ByteString.of(bytes);
@@ -396,9 +411,9 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
@Override
public void onMessage(ByteString bytes) throws InvalidProtocolBufferException {
decoderRaw(bytes);
//乘客屏数据
//司机屏工控机数据
if (!adasOptions.isClient() && onMultiDeviceListener != null) {
onMultiDeviceListener.onForwardingIPCMessage(bytes.toByteArray());
onMultiDeviceListener.onForwardingDriverIPCMessage(bytes.toByteArray());
}
}
@@ -621,7 +636,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
.setSn(sn)
.setEnvironment(environment)
.build();
return sendWsMessage(MessageType.TYPE_SEND_BASIC_INFO_RESP.typeCode, resp.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_BASIC_INFO_RESP.typeCode, resp.toByteArray());
}
/**
@@ -648,7 +663,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
if (routeInfo != null)
builder.setRouteInfo(routeInfo);
MessagePad.SetAutopilotModeReq req = builder.build();
return sendWsMessage(MessageType.TYPE_SEND_SET_AUTOPILOT_MODE_REQ.typeCode, req.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_SET_AUTOPILOT_MODE_REQ.typeCode, req.toByteArray());
}
/**
@@ -663,7 +678,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
.newBuilder()
.setEnable(enable)
.build();
return sendWsMessage(MessageType.TYPE_SEND_SET_DEMO_MODE_REQ.typeCode, req.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_SET_DEMO_MODE_REQ.typeCode, req.toByteArray());
}
/**
@@ -676,7 +691,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
MessagePad.CarConfigReq req = MessagePad.CarConfigReq
.newBuilder()
.build();
return sendWsMessage(MessageType.TYPE_SEND_CAR_CONFIG_REQ.typeCode, req.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_CAR_CONFIG_REQ.typeCode, req.toByteArray());
}
/**
@@ -706,7 +721,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
.setReason(reason)
.setReasonID(reasonID)
.build();
return sendWsMessage(MessageType.TYPE_SEND_RECORD_CAUSE.typeCode, resp.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_RECORD_CAUSE.typeCode, resp.toByteArray());
}
@Override
@@ -752,7 +767,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
.setIsRecord(isRecord)
.setSustain(sustain)
.build();
return sendWsMessage(MessageType.TYPE_SEND_RECORD_DATA.typeCode, req.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_RECORD_DATA.typeCode, req.toByteArray());
}
/**
@@ -767,7 +782,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
.newBuilder()
.setSpeedLimit(speedLimit)
.build();
return sendWsMessage(MessageType.TYPE_SEND_SET_AUTOPILOT_SPEED_REQ.typeCode, req.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_SET_AUTOPILOT_SPEED_REQ.typeCode, req.toByteArray());
}
/**
@@ -788,7 +803,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
MessagePad.GlobalPathReq req = MessagePad.GlobalPathReq
.newBuilder()
.build();
return sendWsMessage(MessageType.TYPE_SEND_GLOBAL_PATH_REQ.typeCode, req.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_GLOBAL_PATH_REQ.typeCode, req.toByteArray());
}
/**
@@ -834,7 +849,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
builder.setLaneDetail(laneDetail);
builder.setTimestamp(timestamp);
MessagePad.TrafficLightData req = builder.build();
return sendWsMessage(MessageType.TYPE_SEND_TRAFFIC_LIGHT_DATA.typeCode, req.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_TRAFFIC_LIGHT_DATA.typeCode, req.toByteArray());
}
/**
@@ -858,7 +873,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
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());
return sendPBMessage(MessageType.TYPE_SEND_SYSTEM_CMD_REQ.typeCode, req.toByteArray());
}
/**
@@ -872,7 +887,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
MessagePad.TrajectoryDownloadReq.Builder builder = MessagePad.TrajectoryDownloadReq.newBuilder();
builder.setLine(line);
MessagePad.TrajectoryDownloadReq req = builder.build();
return sendWsMessage(MessageType.TYPE_SEND_TRAJECTORY_DOWNLOAD_REQ.typeCode, req.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_TRAJECTORY_DOWNLOAD_REQ.typeCode, req.toByteArray());
}
/**
@@ -885,7 +900,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
MessagePad.StatusQueryReq req = MessagePad.StatusQueryReq
.newBuilder()
.build();
return sendWsMessage(MessageType.TYPE_SEND_STATUS_QUERY_REQ.typeCode, req.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_STATUS_QUERY_REQ.typeCode, req.toByteArray());
}
@@ -901,7 +916,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
.newBuilder()
.setEnable(enable)
.build();
return sendWsMessage(MessageType.TYPE_SEND_SET_RAIN_MODE_REQ.typeCode, req.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_SET_RAIN_MODE_REQ.typeCode, req.toByteArray());
}
}

View File

@@ -187,6 +187,20 @@ public class AdasManager implements IAdasNetCommApi {
return null;
}
/**
* 向工控机发送数据
*
* @param bytes 数据
* @return boolean
*/
@Override
public boolean sendWsMessage(byte[] bytes) {
if (mChannel != null) {
return mChannel.sendWsMessage(bytes);
}
return false;
}
/**
* 解析工控机发送过来的数据
* 多设备时使用

View File

@@ -206,6 +206,14 @@ public interface IAdasNetCommApi {
// TODO 需求暂停 待讨论
// boolean getRoutes();
/**
* 向工控机发送数据
*
* @param bytes 数据
* @return boolean
*/
boolean sendWsMessage(byte[] bytes);
/**
* 解析工控机发送过来的数据
* 多设备时使用

View File

@@ -3,6 +3,7 @@ package com.zhidao.support.adas.high;
/**
* 多设备监听
* 服务端实现此监听,将工控机发送过来的数据通过其他方式传递出去
* 客户端实现此监听,将乘客屏数据通过其他方式发送到乘客屏
*/
public interface OnMultiDeviceListener {
@@ -12,5 +13,13 @@ public interface OnMultiDeviceListener {
*
* @param bytes 数据
*/
void onForwardingIPCMessage(byte[] bytes);
void onForwardingDriverIPCMessage(byte[] bytes);
/**
* 转发乘客屏
* 如果是服务端此回调不会被调用
*
* @param bytes
*/
void onForwardingPassengerIPCMessage(byte[] bytes);
}

View File

@@ -6,7 +6,6 @@ import com.zhidao.support.adas.high.common.Constants;
import java.util.concurrent.atomic.AtomicLong;
import mogo.telematics.pad.MessagePad;
import okio.ByteString;
/**
* 数据打包
@@ -25,7 +24,7 @@ public class RawPack {
}
public synchronized ByteString pack(MessagePad.MessageType msgType, byte[] data) {
public synchronized byte[] pack(MessagePad.MessageType msgType, byte[] data) {
if (msgType == null) {
return null;
}
@@ -57,8 +56,7 @@ public class RawPack {
if (data != null && data.length > 0) {
System.arraycopy(data, 0, msg, messageProtocol.getOutHeaderLength() + header.length, data.length);
}
return ByteString.of(msg);
return msg;
}
/**