[650][adas] 下发启动自驾添加SessionID

This commit is contained in:
xinfengkun
2024-06-13 11:41:25 +08:00
parent f205893029
commit efe3eb1eed
6 changed files with 48 additions and 9 deletions

View File

@@ -448,6 +448,7 @@ message SetAutopilotModeReq
uint32 mode = 1; //1: enter autopilot mode, 0: quit autopilot mode
uint32 source = 2; //命令来源: 0: pad模拟, 1: pad业务, 2:aicloud, 3:魔方(清扫车MAP Version==332以及MAP Version>=350其他车型目前未上线)
RouteInfo routeInfo = 3; //自动驾驶路径信息
uint64 sessionId = 4; //autopilot cmd session ID
}
// message definition for MsgTypeSetDemoModeReq

View File

@@ -34,6 +34,7 @@ import com.zhidao.support.adas.high.common.RegexUtils;
import com.zhidao.support.adas.high.common.autopilot.ability.AutopilotAbilityManager;
import com.zhidao.support.adas.high.msg.IMsg;
import com.zhidao.support.adas.high.msg.MyMessageFactory;
import com.zhidao.support.adas.high.protocol.MessageId;
import com.zhidao.support.adas.high.protocol.PackData;
import com.zhidao.support.adas.high.protocol.RawData;
import com.zhidao.support.adas.high.protocol.RawPack;
@@ -424,18 +425,22 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
* * -1L添加到WS发送消息队列失败
*/
private long sendPBMessage(MessageType msgType, byte[] data) {
return sendPBMessage(msgType, data, null);
}
private long sendPBMessage(MessageType msgType, byte[] data, @Nullable MessageId messageId) {
if (rawPack != null) {
//司机屏工控机数据转发
if (adasOptions.isPassenger()) {
if (onMultiDeviceListener != null) {
onMultiDeviceListener.onForwardingPassengerIPCMessage(rawPack.pack(msgType, data).bytes);
onMultiDeviceListener.onForwardingPassengerIPCMessage(rawPack.pack(msgType, data, null).bytes);
}
return 0L;
} else {
if (mSocket == null || !mSocket.isConnected()) {
return -1L;
}
PackData packData = rawPack.pack(msgType, data);
PackData packData = rawPack.pack(msgType, data, messageId);
return sendWsMessage(packData.bytes) ? packData.msgId : -1L;
}
}
@@ -1192,21 +1197,23 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
* @param mode 1: enter autopilot mode, 0: quit autopilot mode
* @param source 命令来源: 0: pad模拟, 1: pad业务, 2:aicloud, 3:魔方(清扫车MAP Version==332以及MAP Version>=350其他车型目前未上线)
* @param routeInfo 自动驾驶路径信息
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID和SessionID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
@Override
public long sendAutoPilotModeReq(int mode, int source, MessagePad.RouteInfo routeInfo) {
MessageId messageId = MessageId.build(MessageType.TYPE_SEND_SET_AUTOPILOT_MODE_REQ);
MessagePad.SetAutopilotModeReq.Builder builder = MessagePad.SetAutopilotModeReq.newBuilder();
builder.setMode(mode);
builder.setSource(source);
if (routeInfo != null)
builder.setRouteInfo(routeInfo);
builder.setSessionId(messageId.id);
MessagePad.SetAutopilotModeReq req = builder.build();
if (autopilotReview != null) autopilotReview.onAutopilotCommandTrigger(req);
return sendPBMessage(MessageType.TYPE_SEND_SET_AUTOPILOT_MODE_REQ, req.toByteArray());
return sendPBMessage(MessageType.TYPE_SEND_SET_AUTOPILOT_MODE_REQ, req.toByteArray(), messageId);
}
/**

View File

@@ -396,7 +396,7 @@ public class AdasManager implements IAdasNetCommApi {
* @param mode 1: enter autopilot mode, 0: quit autopilot mode
* @param source 命令来源: 0: pad模拟, 1: pad业务, 2:aicloud, 3:魔方(清扫车MAP Version==332以及MAP Version>=350其他车型目前未上线)
* @param routeInfo 自动驾驶路径信息
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID和SessionID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败

View File

@@ -176,7 +176,7 @@ public interface IAdasNetCommApi {
* @param mode 1: enter autopilot mode, 0: quit autopilot mode
* @param source 命令来源: 0: pad模拟, 1: pad业务, 2:aicloud, 3:魔方(清扫车MAP Version==332以及MAP Version>=350其他车型目前未上线)
* @param routeInfo 自动驾驶路径信息
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID和SessionID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败

View File

@@ -0,0 +1,22 @@
package com.zhidao.support.adas.high.protocol;
import androidx.annotation.NonNull;
import com.zhidao.support.adas.high.common.MessageIdGenerator;
import com.zhjt.mogo.adas.common.MessageType;
public class MessageId {
public final long id;
public final long timeMillis;
private MessageId(long id, long timeMillis) {
this.id = id;
this.timeMillis = timeMillis;
}
public static MessageId build(@NonNull MessageType msgType) {
long timeMillis = System.currentTimeMillis();
long msgId = MessageIdGenerator.getInstance().getId(timeMillis, msgType.typeCode);
return new MessageId(msgId, timeMillis);
}
}

View File

@@ -1,5 +1,7 @@
package com.zhidao.support.adas.high.protocol;
import androidx.annotation.Nullable;
import com.zhidao.support.adas.high.common.Constants;
import com.zhidao.support.adas.high.common.MessageIdGenerator;
import com.zhidao.support.adas.high.common.ReceivedAckManager;
@@ -26,15 +28,22 @@ public class RawPack {
}
public synchronized PackData pack(MessageType msgType, byte[] data) {
public synchronized PackData pack(MessageType msgType, @Nullable byte[] data, @Nullable MessageId messageId) {
if (msgType == null) {
return null;
}
long timeMillis = System.currentTimeMillis();
MessagePad.MessageType type = msgType.typeCode;
long timeMillis;
long msgId;
if (messageId == null) {
timeMillis = System.currentTimeMillis();
msgId = MessageIdGenerator.getInstance().getId(timeMillis, type);
} else {
timeMillis = messageId.timeMillis;
msgId = messageId.id;
}
double time = timeMillis / 1000.0;
boolean isNeedAck = msgType.timeoutMillis > 0;
long msgId = MessageIdGenerator.getInstance().getId(timeMillis, type);
//封装Header
MessagePad.Header.Builder headerBuilder = MessagePad.Header.newBuilder();
headerBuilder.setMsgID(msgId);//消息唯一ID生成数据累加。从1开始连接未重新初始化就一直累加