From d5690fc05ec0a958588301fdad8af82249e20821 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Mon, 10 Feb 2025 15:47:32 +0800 Subject: [PATCH] =?UTF-8?q?[6100][adas]=E6=95=B0=E6=8D=AE=E8=90=BD?= =?UTF-8?q?=E7=9B=98=E6=94=B6=E5=8F=91=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 5 ++ .../zhjt/mogo/adas/common/MessageType.java | 2 + .../src/main/proto/copy_bag.proto | 37 ++++++++++ .../src/main/proto/message_pad.proto | 1 + .../zhidao/support/adas/high/AdasChannel.java | 71 +++++++++++++++++++ .../zhidao/support/adas/high/AdasManager.java | 53 ++++++++++++++ .../support/adas/high/IAdasNetCommApi.java | 44 ++++++++++++ .../support/adas/high/OnAdasListener.java | 9 +++ .../support/adas/high/msg/CopyBagMessage.java | 33 +++++++++ .../adas/high/msg/MyMessageFactory.java | 7 ++ 10 files changed, 262 insertions(+) create mode 100644 libraries/mogo-adas-data/src/main/proto/copy_bag.proto create mode 100644 libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CopyBagMessage.java diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt index 0c209f2d37..1fd779a6e0 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -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 diff --git a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java index 31f37d973f..823df71930 100644 --- a/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java +++ b/libraries/mogo-adas-data/src/main/java/com/zhjt/mogo/adas/common/MessageType.java @@ -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决策状态"), diff --git a/libraries/mogo-adas-data/src/main/proto/copy_bag.proto b/libraries/mogo-adas-data/src/main/proto/copy_bag.proto new file mode 100644 index 0000000000..1ba777bfd1 --- /dev/null +++ b/libraries/mogo-adas-data/src/main/proto/copy_bag.proto @@ -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 +} \ 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 04b716d7df..eafae0ed0b 100644 --- a/libraries/mogo-adas-data/src/main/proto/message_pad.proto +++ b/libraries/mogo-adas-data/src/main/proto/message_pad.proto @@ -100,6 +100,7 @@ enum MessageType MsgTypeSSMFuncMsg = 0x1012f;//SSM功能(上下行) MsgTypeSSMFuncStatusQuery = 0x10130;//SSM功能状态查询及返回(上下行) MsgTypeCaptureImgReqOnTakeOver = 0x10132;//人工接管时PAD请求前后摄像头数据 + MsgTypeCopyBag = 0x10134;//数据落盘(上下行) } message Header 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 f6b1ff6198..134c227fe9 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 @@ -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)); + } } 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 dfa841a03a..f66441766d 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 @@ -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(); + } + /** * 查询节点状态 * 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 f090f48455..fc8ba34401 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 @@ -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(); 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 2408c9c74a..2d475249a6 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 @@ -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); + /** * 是否有能力启动自动驾驶 * diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CopyBagMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CopyBagMessage.java new file mode 100644 index 0000000000..d90c9a6a6b --- /dev/null +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/CopyBagMessage.java @@ -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); + } +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java index 8ee150b3d5..4711f0b415 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/MyMessageFactory.java @@ -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;