[6100][adas]数据落盘收发接口开发

This commit is contained in:
xinfengkun
2025-02-10 15:47:32 +08:00
parent 6fb4d4039b
commit d5690fc05e
10 changed files with 262 additions and 0 deletions

View File

@@ -129,6 +129,7 @@ import mogo.v2x.MogoV2X
import mogo.v2x.RoadOverviewEvents
import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass
import mogo_msg.MogoReportMsg
import packet_mytest_upload.CopyBag
import perception.FusionTrafficLightOuterClass
import perception.LaneMarkOuterClass
import planning.RoboSweeperTaskIndexOuterClass
@@ -1459,6 +1460,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
CallerCaptureImgManager.invokeCaptureImgOnTakeOver(isFront, data)
}
override fun onCopyBag(header: MessagePad.Header, diskCopy: CopyBag.DiskCopy) {
}
/**
* 是否可以启动自动驾驶
* 使用方法查看app_ipc_monitoring/uiMainActivity/onAutopilotAbility

View File

@@ -96,6 +96,8 @@ public enum MessageType {
TYPE_SEND_SSM_FUNC_STATUS_QUERY(MessagePad.MessageType.MsgTypeSSMFuncStatusQuery, "SSM功能状态查询"),
TYPE_RECEIVE_SSM_FUNC_STATUS_QUERY(MessagePad.MessageType.MsgTypeSSMFuncStatusQuery, "SSM功能状态响应"),
TYPE_SEND_CAPTURE_IMG_REQ_ON_TAKE_OVER(MessagePad.MessageType.MsgTypeCaptureImgReqOnTakeOver, "接管时摄像头数据请求"),
TYPE_SEND_COPY_BAG(MessagePad.MessageType.MsgTypeCopyBag, "数据落盘控制"),
TYPE_RECEIVE_COPY_BAG(MessagePad.MessageType.MsgTypeCopyBag, "数据落盘响应"),
//TODO 透传原始pb文件中不存在以下type。由于Java中无法强转,所以在mogo-adas-data/message_pad.proto中放开注释
TYPE_RECEIVE_PLANNING_DECISION_STATE(MessagePad.MessageType.MsgTypePlanningDecisionState, "Planning决策状态"),

View File

@@ -0,0 +1,37 @@
syntax = "proto3";
package packet_mytest_upload;
import "header.proto";
message DiskCopy {
common.Header header = 1;
int32 status = 2; //挂载状态 0-挂载成功1-挂载异常2-未挂载
MountSuccess mount_success = 3; // 挂载成功的信息集合
string mount_error = 4; // 挂载异常: 移动硬盘挂载失败,请重插或更换硬盘;
int64 copy_total_size = 5; // 需要拷贝的文件总大小
int64 copied_size = 6; // 已拷贝大小
int64 free_time = 7; // 拷贝剩余时间
bool copy_status = 8; // 拷贝是否成功,是-True,否-False
string copy_err = 9; // 拷贝异常提示,如域控间连接超时拷贝失败,建议查看各域控是否在线,不在线请重启车辆再试
bool abort_data = 10; // 即将中止数据拷贝并安全弹出硬盘,是否继续操作?
bool disk_unmount = 11; // 硬盘是否已安全弹出,是-True,否-False
string unmount_err = 12; // 硬盘弹出失败提示:安全弹出失败,建议车辆下电后拔走硬盘
string success_info = 13; // 拷贝成功的信息提示,如当前车辆拷贝的各类型的包各有多少个
}
message MountSuccess {
int64 total_size = 1; //磁盘总空间
int64 disk_free = 2; // 磁盘剩余空间
repeated string dates = 3; // 所有可拷贝日期list
string tips = 4; // 磁盘空间不足提示: 移动硬盘剩余空间不足,建议更换硬盘
}
message PadRequest {
common.Header header = 1;
int32 disk_status = 2; // 硬盘挂载状态查询,值为1表示需要查询
int32 copy_date = 3; // 拷贝日期 日期格式20250207
int32 safe_unmount = 4; // 硬盘安全弹出请求,值为1表示弹出请求
bool abort_copy = 5; // 是否中止拷贝, 是-True,否-False
}

View File

@@ -100,6 +100,7 @@ enum MessageType
MsgTypeSSMFuncMsg = 0x1012f;//SSM功能(上下行)
MsgTypeSSMFuncStatusQuery = 0x10130;//SSM功能状态查询及返回(上下行)
MsgTypeCaptureImgReqOnTakeOver = 0x10132;//人工接管时PAD请求前后摄像头数据
MsgTypeCopyBag = 0x10134;//数据落盘(上下行)
}
message Header

View File

@@ -81,6 +81,7 @@ import mogo.telematics.ParamSetCmdOuterClass;
import mogo.telematics.pad.MessagePad;
import mogo.yycp.paralleldriving.protocol.ParallelDrivingRequest;
import okio.ByteString;
import packet_mytest_upload.CopyBag;
import system_master.SsmInfo;
/**
@@ -3075,6 +3076,76 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
return sendPBMessage(MessageType.TYPE_SEND_CAPTURE_IMG_REQ_ON_TAKE_OVER, req.toByteArray());
}
/**
* 数据落盘
*/
private long sendCopyBagRequest(CopyBag.PadRequest.Builder builder) {
MessageId messageId = MessageId.build(MessageType.TYPE_SEND_COPY_BAG);
long t = System.currentTimeMillis();
int sec = (int) (t / 1000);
int nsec = (int) (t % 1000 * 1000000);
HeaderOuterClass.Time time = HeaderOuterClass.Time
.newBuilder()
.setSec(sec)
.setNsec(nsec)
.build();
HeaderOuterClass.Header header = HeaderOuterClass.Header.newBuilder()
.setSeq((int) messageId.id)
.setStamp(time)
.setFrameId("copy_bag")
.setModuleName("EagleEye")
.build();
builder.setHeader(header);
return sendPBMessage(MessageType.TYPE_SEND_COPY_BAG, builder.build().toByteArray(), messageId);
}
/**
* 数据落盘 硬盘挂载状态查询
*
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
public long sendCopyBagDiskStatus() {
return sendCopyBagRequest(CopyBag.PadRequest.newBuilder().setDiskStatus(1));
}
/**
* 数据落盘 拷贝日期
*
* @param time 拷贝日期 日期格式20250207
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
public long sendCopyBagCopyDate(int time) {
return sendCopyBagRequest(CopyBag.PadRequest.newBuilder().setCopyDate(time));
}
/**
* 数据落盘 硬盘安全弹出请求
*
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
public long sendCopyBagSafeUnmount() {
return sendCopyBagRequest(CopyBag.PadRequest.newBuilder().setSafeUnmount(1));
}
/**
* 数据落盘 终止拷贝
*
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
public long sendCopyBagAbortCopy() {
return sendCopyBagRequest(CopyBag.PadRequest.newBuilder().setAbortCopy(true));
}
}

View File

@@ -1875,6 +1875,59 @@ public class AdasManager implements IAdasNetCommApi {
return mChannel == null ? -1L : mChannel.sendCaptureImgReqOnTakeOver(uuid);
}
/**
* 数据落盘 硬盘挂载状态查询
*
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
@Override
public long sendCopyBagDiskStatus() {
return mChannel == null ? -1L : mChannel.sendCopyBagDiskStatus();
}
/**
* 数据落盘 拷贝日期
*
* @param time 拷贝日期 日期格式20250207
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
@Override
public long sendCopyBagCopyDate(int time) {
return mChannel == null ? -1L : mChannel.sendCopyBagCopyDate(time);
}
/**
* 数据落盘 硬盘安全弹出请求
*
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
@Override
public long sendCopyBagSafeUnmount() {
return mChannel == null ? -1L : mChannel.sendCopyBagSafeUnmount();
}
/**
* 数据落盘 终止拷贝
*
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
@Override
public long sendCopyBagAbortCopy() {
return mChannel == null ? -1L : mChannel.sendCopyBagAbortCopy();
}
/**
* 查询节点状态
*

View File

@@ -1360,6 +1360,50 @@ public interface IAdasNetCommApi {
*/
long sendCaptureImgReqOnTakeOver(long uuid);
/**
* 数据落盘 硬盘挂载状态查询
*
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
long sendCopyBagDiskStatus();
/**
* 数据落盘 拷贝日期
*
* @param time 拷贝日期 日期格式20250207
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
long sendCopyBagCopyDate(int time);
/**
* 数据落盘 硬盘安全弹出请求
*
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
long sendCopyBagSafeUnmount();
/**
* 数据落盘 终止拷贝
*
* @return 消息是否添加到WS消息发送队列返回值为非0的正整数时表示下发消息的消息ID
* * >=0表示添加到WS发送消息队列
* * =0表示乘客屏模式添加到WS发送消息队列
* * -1L添加到WS发送消息队列失败
*/
long sendCopyBagAbortCopy();
// TODO 需求暂停 待讨论
// boolean getRoutes();

View File

@@ -41,6 +41,7 @@ import mogo.v2x.MogoV2X;
import mogo.v2x.RoadOverviewEvents;
import mogo.yycp.paralleldriving.protocol.ParallelTaskProcessNoticeOuterClass;
import mogo_msg.MogoReportMsg;
import packet_mytest_upload.CopyBag;
import perception.FusionTrafficLightOuterClass;
import perception.LaneMarkOuterClass;
import planning.RoboSweeperTaskIndexOuterClass;
@@ -647,6 +648,14 @@ public interface OnAdasListener {
*/
void onCaptureImgOnTakeOver(@NonNull MessagePad.Header header, boolean isFront, @NonNull MessagePad.CaptureImgOnTakeOver data);
/**
* 数据落盘
*
* @param header 头
* @param diskCopy 数据
*/
void onCopyBag(@NonNull MessagePad.Header header, @NonNull CopyBag.DiskCopy diskCopy);
/**
* 是否有能力启动自动驾驶
*

View File

@@ -0,0 +1,33 @@
package com.zhidao.support.adas.high.msg;
import android.os.SystemClock;
import com.google.protobuf.InvalidProtocolBufferException;
import com.zhidao.support.adas.high.AdasChannel;
import com.zhidao.support.adas.high.OnAdasListener;
import com.zhidao.support.adas.high.common.CupidLogUtils;
import com.zhidao.support.adas.high.protocol.RawData;
import packet_mytest_upload.CopyBag;
/**
* 数据落盘
*/
public class CopyBagMessage extends MyAbstractMessageHandler {
public CopyBagMessage() {
}
@Override
public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException {
CopyBag.DiskCopy diskCopy = CopyBag.DiskCopy.parser().parseFrom(raw.originalData.toByteArray(), raw.getOffsetValue(), raw.getPackageLengthValue() - raw.getOffsetValue());
AdasChannel.calculateTimeConsumingOnDispatchRaw("数据落盘", raw.receiveTime);
long nowTime = 0;
if (CupidLogUtils.isEnableLog())
nowTime = SystemClock.elapsedRealtime();
if (adasListener != null) {
adasListener.onCopyBag(raw.getHeader(), diskCopy);
}
AdasChannel.calculateTimeConsumingBusiness("数据落盘", nowTime);
}
}

View File

@@ -56,6 +56,7 @@ public class MyMessageFactory implements IMyMessageFactory {
private IMsg powerUnitMessage;//电源模块
private IMsg padSsmFuncMsgMessage;//SSM功能
private IMsg captureImgOnTakeOverMessage;//接管时前方和后方摄像头数据请求的响应
private IMsg copyBagMessage;//数据落盘
private final AutopilotReview autopilotReview;
private final TurnLightState lightLeft = new TurnLightState();
@@ -324,6 +325,12 @@ public class MyMessageFactory implements IMyMessageFactory {
captureImgOnTakeOverMessage = new CaptureImgOnTakeOverMessage();
}
return captureImgOnTakeOverMessage;
} else if (messageType == MessageType.TYPE_RECEIVE_COPY_BAG.typeCode) {
//数据落盘
if (copyBagMessage == null) {
copyBagMessage = new CopyBagMessage();
}
return copyBagMessage;
} else {
//MessageType.TYPE_DEFAULT.typeCode
return null;