From d1e4df16d14b1fe06997b2270814592007adbaf5 Mon Sep 17 00:00:00 2001 From: bxb Date: Wed, 17 May 2023 15:26:06 +0800 Subject: [PATCH 1/7] =?UTF-8?q?[sweeper-cloud]=E6=A8=A1=E6=8B=9F=E4=BA=91?= =?UTF-8?q?=E6=8E=A7=E5=A4=A7=E4=BB=BB=E5=8A=A1=E7=8A=B6=E6=80=81=E6=B5=81?= =?UTF-8?q?=E8=BD=AC=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sweepercloud/fragment/SweeperFragment.kt | 45 +++++++++---------- .../util/SweeperCloudTaskUtils.kt | 2 +- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperFragment.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperFragment.kt index c1abd55103..dc97d85451 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperFragment.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperFragment.kt @@ -53,7 +53,7 @@ class SweeperFragment : BaseSweeperTabFragment Date: Wed, 17 May 2023 17:11:26 +0800 Subject: [PATCH 2/7] =?UTF-8?q?[sweeper-cloud]=E5=BC=B9=E7=AA=97=E5=B7=A6?= =?UTF-8?q?=E5=8F=B3=E9=97=B4=E8=B7=9D=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/sweepercloud/model/SweeperTaskModel.java | 2 +- .../res/drawable/bg_shape_dialog_cloud_view.xml | 1 - .../res/layout/dialog_sweeper_cloud_view.xml | 16 +++++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java index 5021ed81e1..0248ae7cbd 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java @@ -544,7 +544,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onAutopilotStatusResponse(@NonNull AutopilotStatusInfo autoPilotStatusInfo) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusResponse state:" + autoPilotStatusInfo.getState()); + //CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusResponse state:" + autoPilotStatusInfo.getState()); this.mAutopilotState = autoPilotStatusInfo.getState(); switch (autoPilotStatusInfo.getState()) { case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶 diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_dialog_cloud_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_dialog_cloud_view.xml index ff26c61d57..a0f105b0ac 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_dialog_cloud_view.xml +++ b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/bg_shape_dialog_cloud_view.xml @@ -1,5 +1,4 @@ - \ No newline at end of file diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_view.xml index 424034563e..5c9c42edbc 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_view.xml +++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_view.xml @@ -12,11 +12,13 @@ app:shadow_position="outer" app:xOffset="0dp" app:yOffset="0dp"> - + android:background="@drawable/bg_shape_dialog_cloud_view" + app:roundLayoutRadius="@dimen/dp_45" + > - + \ No newline at end of file From a7afc9db70c20cecb957b6ba62e85ef5b252a684 Mon Sep 17 00:00:00 2001 From: bxb Date: Wed, 17 May 2023 19:34:46 +0800 Subject: [PATCH 3/7] =?UTF-8?q?[sweeper-cloud]UI=E8=B5=B0=E6=9F=A5?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/sweepercloud/model/SweeperTaskModel.java | 14 +++++++------- .../sweeper_cloud_rotation_background.png | Bin 0 -> 2698 bytes .../drawable/shape_sweeper_cloud_rotation.xml | 12 ------------ .../drawable/sweeper_cloud_rotation_layer.xml | 5 +++++ .../res/layout/dialog_sweeper_cloud_view.xml | 2 +- 5 files changed, 13 insertions(+), 20 deletions(-) create mode 100755 OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotation_background.png delete mode 100644 OCH/sweeper/sweeper-cloud/src/main/res/drawable/shape_sweeper_cloud_rotation.xml create mode 100644 OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_cloud_rotation_layer.xml diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java index 0248ae7cbd..73382cb613 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java @@ -302,7 +302,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM if (taskInfo != null) { CallerLogger.INSTANCE.d(M_SWEEPER + TAG, - "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+" onSweeperFutianCloudTask:" + printMessage(taskInfo) + " mSweeperTaskCallback:" + mSweeperTaskCallback); + "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudTask:" +printMessage(taskInfo) + " mSweeperTaskCallback:" + mSweeperTaskCallback); } if (mSweeperTaskCallback != null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); @@ -314,7 +314,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM public void onSweeperFutianCloudTaskConfirm(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskConfirm.TaskConfirm taskConfirm) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+" onSweeperFutianCloudTaskConfirm:" + printMessage(taskConfirm)); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudTaskConfirm:" + printMessage(taskConfirm)); if (mSweeperTaskCallback != null&&taskConfirm!=null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudTaskConfirm(taskConfirm.getTaskId(), taskConfirm.getSubTaskId()); @@ -324,7 +324,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onSweeperFutianCloudTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskStatus.TaskStatusPush taskStatusPush) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+" onSweeperFutianCloudTaskStatus:" + printMessage(taskStatusPush)); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudTaskStatus:" + printMessage(taskStatusPush)); if (mSweeperTaskCallback != null&&taskStatusPush!=null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudTaskStatus(taskStatusPush.getTaskId(), taskStatusPush.getSubTaskId(), taskStatusPush.getTaskStatus()); @@ -334,7 +334,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onSweeperFutianCloudTaskStop(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskStop.StopTaskReq stopTaskReq) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+" onSweeperFutianCloudTaskStop:" + printMessage(stopTaskReq)); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudTaskStop:" + printMessage(stopTaskReq)); if (mSweeperTaskCallback != null&&stopTaskReq!=null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudTaskStop(stopTaskReq.getTaskId(), stopTaskReq.getType()); @@ -344,7 +344,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onSweeperFutianCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType,String reqNo, long sysTime, SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+" onSweeperFutianCloudTaskSuspendResume:" + printMessage(suspendResumeTaskResp)); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudTaskSuspendResume:" + printMessage(suspendResumeTaskResp)); if (mSweeperTaskCallback != null&&suspendResumeTaskResp!=null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudTaskSuspendResume(messageType, suspendResumeTaskResp.getTaskId(), @@ -355,7 +355,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onSweeperFutianCloudBootable(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperBootable.IsBootableResp isBootableResp) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+" onSweeperFutianCloudBootable:" + printMessage(isBootableResp)); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudBootable:" + printMessage(isBootableResp)); if (mSweeperTaskCallback != null&&isBootableResp!=null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudBootable(isBootableResp.getTaskId(), isBootableResp.getSubTaskId(), isBootableResp); @@ -365,7 +365,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onSweeperFutianCloudBigTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+" onSweeperFutianCloudBigTaskStatus:" + printMessage(bigTaskStatusPush)); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudBigTaskStatus:" + printMessage(bigTaskStatusPush)); if (mSweeperTaskCallback != null&&bigTaskStatusPush!=null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudBigTaskStatus(bigTaskStatusPush.getTaskId(), bigTaskStatusPush.getTaskStatus()); diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotation_background.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/sweeper_cloud_rotation_background.png new file mode 100755 index 0000000000000000000000000000000000000000..8d3650e9ba1c70df7edd5132f7dce637a811f2c8 GIT binary patch literal 2698 zcmV;53U&2~P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91L7)Qw1ONa40RR91K>z>%0Q{GrLjV8?^hrcPRCod9TU~D)R~dfK%7K2;s(?U zegV0u+6&TDk?bS{S&?OtMyWsI&-L!i9G>Uwp4l_&^~c)YdOaP$9Q4V&H!KgY|4`Mo ze_(%i4i$vUuj-NYyqwW_8PTz9?Yjfz+o_{G(JGXMfuh|1;3sOKU7P*XZ56b`UO3#J zdrQi-syv~U6nA@E^~olNMI{yqIR$(lUplH!4NoM%G$;VTzIOeDs0=VVnC3iL#oz3| ze=73_oh}Cg;nHvQ32#x(L5Y$;xYmnb4wHGQ5X+L6lSfaC%i2G#s;ISHYx$dh*Z%CZ zoQMM%ssu8usxpkxmB>mE?1gn?*;jJ+=4)!r)^(aD9e48JKFvf`~J0l zxu~PY(02g9SD7ysW%m7_sg=&e*n8`*y{!iqHKv|OIrS9e$oaB*Ldz|z7aOU2yA(PC z;j3@za#iGlS?wL=VZc@ghvaTIm2cI9U@Ry(Cow*TBa6p1WvYPv!hC%{k0yd`Z69WNg3f>US@9oSk3Jw7p&6G z7e_!V0OHBokS{lS0RT#W{SEb~ye2pBeVP^mg<33Q6Mxd9J8LLSv(v62*MN;!Cd@rM z0&?={Q{!@HFQ%?tpWUpZX`P;x^Dqx5-E~3-GIjfv?bnEHrvt6PMnS%uxV!)%001BT zLT(+!{NF2hTqnNx2e}AG?4*5$i)E=MA8ltf+D-@h0W^b&72qhq6yONxWdNu&$H{AjPU18%1HUOX*q!obYS8*Tg_58K(t4e-TrYXN&AHrD9UV0b$wOlC>IG?x| zun(~vi!?^>kQ$b~Xv8a6&^v?AxIr~7aU1nveSh0Rdoq9;g4$d->|`thqq z{#7e`tflnaU(zmj3IuM4ZDXc%g?oJ=bmeWAr~D)Ra@W1LUQ6qlfN*(IkGSywZiYU~ zy?`s^Vdvj}Nv&Y~yL*Y^#5;P#z9#`;J(4rFk|}qCZuz+9AL~!+gZM!5){Ed>`??DI`ecb1a7rM^ zTQa^84@Qzr5^faGs23GDESazhEZNv(H5C8(zsaD-lcD4VSSGwsjyy<`$kT;PWi_qe z;tD`8M`L_hBPPSJco*K?GhKdZG_79_M}r>E2Calx6gQ8{PSMKTX=?OS=DgFy?L#dC z9uG(DDB#IZr=1?h_Sh3u%q9_w1ENlS1Od9&FNCG+nqjLlnIcGB*Ar#}%KLDlnj2^A z9X=NzM1E6GSjGV1`MSfzPY%xs#q3|$9430=u+&4jS>XbbWhkO*a|!SQ5JTW0CQ|?l zM#G`ZG6b0a$^k)>Ap<6eQ5ouERD3Q#2>qs>P#z%EIYI^p5+t%c2I|_u03>>XIIziG ze+y@0&_s9}+l_o>PEoUu%quS7~G4XL;x#5u}=PF8yj9boH zzEDl;_n0p$9(jVK$ysH|5wiI#rePlXHAVr=h{2n4Q1MQdN_VpbK@q4G3h4GPX#si9EpySYlaH z-s%#DO}!9P)Wzj`EY*NOsw^5T*tvqU{St{$_Tem~=l=I8(uHarMO)<(}2aP1}M%x;)w9$4fm~shtr zf=vBq@Q<#r2Tw5N2;sd9l;Edkw|80tTE*)K1U`KE9sC9gWNA22O)sp`D>|DeORSq< zPX>)aH6#d1)U2dAHrhos23_x6)#M2GVN zG_&uA@4{Z7|0I4F`HiifV5;2?g#&@We(9W$E8L*U7L(8JY)6?* z>OqhoKY+*MJROGL5hIA>`H=)X88QbW_FRB3aQb1KQ ztS-tKe7zAUW%^E(w+**Z%HB@WHtiS^V?>An5jP%?JhRWtp@Lv#AXAh?NeElUc~&U~ zOU&LgX&VKT`@Bcw8g0yKkEk$%qKpaJkXX|G5Hei>!Ig{Cg)}*`#7L4NM~D;|GDJv_ zAU{AUiE;J;YX|cN-V~OV literal 0 HcmV?d00001 diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable/shape_sweeper_cloud_rotation.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/shape_sweeper_cloud_rotation.xml deleted file mode 100644 index e5d5e1fd4d..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/res/drawable/shape_sweeper_cloud_rotation.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - \ No newline at end of file diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_cloud_rotation_layer.xml b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_cloud_rotation_layer.xml new file mode 100644 index 0000000000..b4793b37ad --- /dev/null +++ b/OCH/sweeper/sweeper-cloud/src/main/res/drawable/sweeper_cloud_rotation_layer.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_view.xml index 5c9c42edbc..1f8c7ed1b2 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_view.xml +++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/dialog_sweeper_cloud_view.xml @@ -25,7 +25,7 @@ android:layout_height="@dimen/dp_84" android:layout_marginStart="@dimen/dp_30" android:layout_marginTop="@dimen/dp_30" - android:src="@drawable/shape_sweeper_cloud_rotation" + android:src="@drawable/sweeper_cloud_rotation_layer" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> From afa30152e560f0a78cced473981cf9c5f61717db Mon Sep 17 00:00:00 2001 From: bxb Date: Thu, 18 May 2023 17:15:50 +0800 Subject: [PATCH 4/7] =?UTF-8?q?[sweeper-cloud]pad=E6=94=B6=E5=88=B0?= =?UTF-8?q?=E5=9F=9F=E6=8E=A7=E4=BC=A0=E9=80=92=E8=BF=87=E6=9D=A5=E7=9A=84?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=95=B0=E6=8D=AE=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../high/msg/SweeperCloudTaskMessage.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SweeperCloudTaskMessage.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SweeperCloudTaskMessage.java index a40630efb7..3f74546c23 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SweeperCloudTaskMessage.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/msg/SweeperCloudTaskMessage.java @@ -1,11 +1,14 @@ package com.zhidao.support.adas.high.msg; import android.os.SystemClock; +import android.util.Log; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.TextFormat; import com.zhidao.support.adas.high.AdasChannel; import com.zhidao.support.adas.high.OnAdasListener; +import com.zhidao.support.adas.high.common.ByteUtil; import com.zhidao.support.adas.high.common.CupidLogUtils; import com.zhidao.support.adas.high.protocol.RawData; import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask; @@ -41,6 +44,7 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler { String reqNo = message.getReqNo(); //请求编号,响应请求时,使用请求方的请求编号 long sysTime = message.getSysTime(); //当前时间戳 ByteString payload = message.getPayload(); + Log.i("SweeperCloudTaskMessage", "MsgType=" + (msgType == null ? "null" : msgType.getNumber()) + " reqNo=" + reqNo + " sysTime=" + sysTime); boolean isExistPayload = payload != null && !payload.isEmpty(); if (msgType == SweeperCloudTask.MessageType.CloudPushTask || msgType == SweeperCloudTask.MessageType.PadSendGetTaskReq) { //1、云端下发大任务信息(type: 100001)-> sweeper_task.proto @@ -49,6 +53,8 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler { if (isExistPayload) { taskInfo = SweeperTask.TaskInfo.parseFrom(payload); } + Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (taskInfo == null ? "null" : + TextFormat.printer().escapingNonAscii(false).printToString(taskInfo))); adasListener.onSweeperFutianCloudTask(header, msgType, reqNo, sysTime, taskInfo); } else if (msgType == SweeperCloudTask.MessageType.CloudPushTaskConfirm) { //2、云端下发子任务,请求pad确认(type:100002)-> sweeper_task_confirm.proto @@ -56,6 +62,8 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler { if (isExistPayload) { taskConfirm = SweeperTaskConfirm.TaskConfirm.parseFrom(payload); } + Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (taskConfirm == null ? "null" : + TextFormat.printer().escapingNonAscii(false).printToString(taskConfirm))); adasListener.onSweeperFutianCloudTaskConfirm(header, msgType, reqNo, sysTime, taskConfirm); } else if (msgType == SweeperCloudTask.MessageType.CloudPushTaskStatus) { //3、云端下发任务状态到pad(type:100003)-> sweeper_task_status.proto @@ -63,6 +71,8 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler { if (isExistPayload) { taskStatusPush = SweeperTaskStatus.TaskStatusPush.parseFrom(payload); } + Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (taskStatusPush == null ? "null" : + TextFormat.printer().escapingNonAscii(false).printToString(taskStatusPush))); adasListener.onSweeperFutianCloudTaskStatus(header, msgType, reqNo, sysTime, taskStatusPush); } else if (msgType == SweeperCloudTask.MessageType.CloudPushTaskStop) { //4、云端请求pad结束任务(type:100004)-> sweeper_task_stop.proto @@ -70,6 +80,8 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler { if (isExistPayload) { stopTaskReq = SweeperTaskStop.StopTaskReq.parseFrom(payload); } + Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (stopTaskReq == null ? "null" : + TextFormat.printer().escapingNonAscii(false).printToString(stopTaskReq))); adasListener.onSweeperFutianCloudTaskStop(header, msgType, reqNo, sysTime, stopTaskReq); } else if (msgType == SweeperCloudTask.MessageType.PadSendTaskSuspend || msgType == SweeperCloudTask.MessageType.PadSendTaskResume) { //5、pad请求挂起任务(type:100005)-> sweeper_task_suspend_resume.proto @@ -78,6 +90,8 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler { if (isExistPayload) { suspendResumeTaskResp = SweeperTaskSuspendResume.SuspendResumeTaskResp.parseFrom(payload); } + Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (suspendResumeTaskResp == null ? "null" : + TextFormat.printer().escapingNonAscii(false).printToString(suspendResumeTaskResp))); adasListener.onSweeperFutianCloudTaskSuspendResume(header, msgType, reqNo, sysTime, suspendResumeTaskResp); } else if (msgType == SweeperCloudTask.MessageType.PadSendBootable) { //8、接管后回自驾-pad上报状态给云端 云端下发启动自驾(type: 100008)-> sweeper_autopilot.proto @@ -85,6 +99,8 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler { if (isExistPayload) { isBootableResp = SweeperBootable.IsBootableResp.parseFrom(payload); } + Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (isBootableResp == null ? "null" : + TextFormat.printer().escapingNonAscii(false).printToString(isBootableResp))); adasListener.onSweeperFutianCloudBootable(header, msgType, reqNo, sysTime, isBootableResp); } else if (msgType == SweeperCloudTask.MessageType.CloudPushBigTaskStatus) { //9、云端下发pad大任务状态(type: 100009)-> sweeper_big_task_status.proto @@ -92,9 +108,12 @@ public class SweeperCloudTaskMessage extends MyAbstractMessageHandler { if (isExistPayload) { bigTaskStatusPush = SweeperBigTaskStatus.BigTaskStatusPush.parseFrom(payload); } + Log.i("SweeperCloudTaskMessage", " msgType=" + msgType + " " + (bigTaskStatusPush == null ? "null" : + TextFormat.printer().escapingNonAscii(false).printToString(bigTaskStatusPush))); adasListener.onSweeperFutianCloudBigTaskStatus(header, msgType, reqNo, sysTime, bigTaskStatusPush); } else { //未知数据类型 + Log.i("SweeperCloudTaskMessage", " 错误数据=" + ByteUtil.byteArrToHex(bytes)); adasListener.onSweeperFutianCloudTaskUnknown(header, bytes); } } From accdce8a7c461df53da5464ab9e91c6a2af2ad2c Mon Sep 17 00:00:00 2001 From: bxb Date: Thu, 18 May 2023 17:20:47 +0800 Subject: [PATCH 5/7] =?UTF-8?q?[sweeper-cloud]pad=E7=AB=AF=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E5=B7=A5=E6=8E=A7=E6=9C=BA=E7=9A=84=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E7=8A=B6=E6=80=81=EF=BC=8C=E8=B0=83=E7=94=A8=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E4=BB=BB=E5=8A=A1=E7=9A=84=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E9=98=B2=E6=AD=A2=E5=B7=A5=E6=8E=A7=E6=9C=BA=E6=96=AD?= =?UTF-8?q?=E5=BC=80=E8=BF=9E=E6=8E=A5=E6=97=B6=EF=BC=8Cpad=E6=9C=AA?= =?UTF-8?q?=E6=8B=89=E5=8F=96=E5=88=B0=E5=BD=93=E5=89=8D=E6=AD=A3=E5=9C=A8?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E7=9A=84=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sweepercloud/model/SweeperTaskModel.java | 61 ++++++++++++------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java index 73382cb613..6d20c7ab1a 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java @@ -22,6 +22,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListener import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCleanSystemListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCloudTaskListenerManager; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; +import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.common.module.manager.OCHAdasAbilityManager; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.NumberFormatUtil; @@ -300,10 +301,8 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM public void onSweeperFutianCloudTask(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTask.TaskInfo taskInfo) { - if (taskInfo != null) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, - "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudTask:" +printMessage(taskInfo) + " mSweeperTaskCallback:" + mSweeperTaskCallback); - } + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, + "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " onSweeperFutianCloudTask:" + taskInfo == null ? "null" : printMessage(taskInfo) + " mSweeperTaskCallback:" + mSweeperTaskCallback); if (mSweeperTaskCallback != null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudTask(messageType, taskInfo); @@ -314,8 +313,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM public void onSweeperFutianCloudTaskConfirm(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskConfirm.TaskConfirm taskConfirm) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudTaskConfirm:" + printMessage(taskConfirm)); - if (mSweeperTaskCallback != null&&taskConfirm!=null) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + + "onSweeperFutianCloudTaskConfirm:" + printMessage(taskConfirm)); + if (mSweeperTaskCallback != null && taskConfirm != null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudTaskConfirm(taskConfirm.getTaskId(), taskConfirm.getSubTaskId()); } @@ -324,8 +324,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onSweeperFutianCloudTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskStatus.TaskStatusPush taskStatusPush) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudTaskStatus:" + printMessage(taskStatusPush)); - if (mSweeperTaskCallback != null&&taskStatusPush!=null) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + + "onSweeperFutianCloudTaskStatus:" + printMessage(taskStatusPush)); + if (mSweeperTaskCallback != null && taskStatusPush != null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudTaskStatus(taskStatusPush.getTaskId(), taskStatusPush.getSubTaskId(), taskStatusPush.getTaskStatus()); } @@ -334,18 +335,20 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onSweeperFutianCloudTaskStop(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskStop.StopTaskReq stopTaskReq) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudTaskStop:" + printMessage(stopTaskReq)); - if (mSweeperTaskCallback != null&&stopTaskReq!=null) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + + "onSweeperFutianCloudTaskStop:" + printMessage(stopTaskReq)); + if (mSweeperTaskCallback != null && stopTaskReq != null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudTaskStop(stopTaskReq.getTaskId(), stopTaskReq.getType()); } } @Override - public void onSweeperFutianCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType,String reqNo, long sysTime, + public void onSweeperFutianCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudTaskSuspendResume:" + printMessage(suspendResumeTaskResp)); - if (mSweeperTaskCallback != null&&suspendResumeTaskResp!=null) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + + "onSweeperFutianCloudTaskSuspendResume:" + printMessage(suspendResumeTaskResp)); + if (mSweeperTaskCallback != null && suspendResumeTaskResp != null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudTaskSuspendResume(messageType, suspendResumeTaskResp.getTaskId(), suspendResumeTaskResp.getSubTaskId(), suspendResumeTaskResp.getCode()); @@ -355,8 +358,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onSweeperFutianCloudBootable(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperBootable.IsBootableResp isBootableResp) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudBootable:" + printMessage(isBootableResp)); - if (mSweeperTaskCallback != null&&isBootableResp!=null) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + + "onSweeperFutianCloudBootable:" + printMessage(isBootableResp)); + if (mSweeperTaskCallback != null && isBootableResp != null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudBootable(isBootableResp.getTaskId(), isBootableResp.getSubTaskId(), isBootableResp); } @@ -365,8 +369,9 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onSweeperFutianCloudBigTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, String reqNo, long sysTime, SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: "+messageType.getNumber()+" sysTime:"+sysTime+ "reqNo:"+reqNo+" onSweeperFutianCloudBigTaskStatus:" + printMessage(bigTaskStatusPush)); - if (mSweeperTaskCallback != null&&bigTaskStatusPush!=null) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "messageType: " + messageType.getNumber() + " sysTime:" + sysTime + " reqNo:" + reqNo + " " + + "onSweeperFutianCloudBigTaskStatus:" + printMessage(bigTaskStatusPush)); + if (mSweeperTaskCallback != null && bigTaskStatusPush != null) { msgTypeAndReqNo.put(messageType.getNumber(), reqNo); mSweeperTaskCallback.onSweeperCloudBigTaskStatus(bigTaskStatusPush.getTaskId(), bigTaskStatusPush.getTaskStatus()); } @@ -458,7 +463,8 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setSn(getDriverSn()); String reqNo = SweeperCloudTaskUtils.getRequestId(); SweeperTask.GetTaskReq getTaskReq = builder.build(); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo +" messageType:"+ SweeperCloudTask.MessageType.PadSendGetTaskReq.getNumber()); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, + "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendGetTaskReq.getNumber()); getAutoPilotControlManager().sendSweeperGetTaskReq(reqNo, getTaskReq); // TODO: 2023/5/5 模拟云控获取任务 // UiThreadHandler.postDelayed(() -> { @@ -478,7 +484,8 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM SweeperTask.StartTaskResp startTaskResp = builder.build(); String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTask.getNumber()); getAutoPilotControlManager().sendSweeperStartTaskResp(reqNo, startTaskResp); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo+" messageType:"+ SweeperCloudTask.MessageType.CloudPushTask.getNumber()); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, + "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTask.getNumber()); } /** @@ -492,7 +499,8 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setCode(code); SweeperTaskConfirm.TaskConfirmResp taskConfirmResp = builder.build(); String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo+" messageType:"+ SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, + "sendSweeperTaskConfirmResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp); } @@ -509,7 +517,8 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setCode(code); SweeperTaskStop.StopTaskResp stopTaskResp = builder.build(); String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber()); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo+" messageType:"+ SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber()); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, + "sendSweeperStopTaskResp" + printMessage(stopTaskResp) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.CloudPushTaskStop.getNumber()); getAutoPilotControlManager().sendSweeperStopTaskResp(reqNo, stopTaskResp); } @@ -528,10 +537,11 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM builder.setLineId(lineId); SweeperBootable.IsBootable isBootable = builder.build(); String reqNo = SweeperCloudTaskUtils.getRequestId(); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo+" messageType:"+ SweeperCloudTask.MessageType.PadSendBootable.getNumber()); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, + "sendSweeperAutopilotBootable" + printMessage(isBootable) + " reqNo:" + reqNo + " messageType:" + SweeperCloudTask.MessageType.PadSendBootable.getNumber()); getAutoPilotControlManager().sendSweeperAutopilotBootable(reqNo, isBootable); // TODO: 2023/5/16 - SweeperCloudTaskUtils.mockSendCloudBootable(); + //SweeperCloudTaskUtils.mockSendCloudBootable(); } public CallerAutoPilotControlManager getAutoPilotControlManager() { @@ -577,6 +587,11 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM @Override public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { + if (status == 0x00){//判断工控机重连后,获取当前正在执行的子任务,延时10秒,防止工控机连接上时SN为空 + UiThreadHandler.postDelayed(()->{ + getCurrentTask(); + },10000); + } //CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotIpcConnectStatusChanged status:" + status + " reason:" + reason); } From 0fdd1c24daa21958b191ba7f68f9c34516733351 Mon Sep 17 00:00:00 2001 From: bxb Date: Thu, 18 May 2023 21:01:10 +0800 Subject: [PATCH 6/7] =?UTF-8?q?[sweeper-cloud]=E5=80=92=E8=AE=A1=E6=97=B6?= =?UTF-8?q?=E8=BD=AC=E5=9C=88=E6=96=B9=E5=90=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt index f333e53dc8..3321382705 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt @@ -33,7 +33,7 @@ class SweeperCloudLoadingDialog : BaseFloatDialog, LifecycleObserver { * 开始旋转 */ private fun startRotation() { - objectAnimator = ObjectAnimator.ofFloat(mLoadingView, "rotation", 0f, 720f) + objectAnimator = ObjectAnimator.ofFloat(mLoadingView, "rotation", -720f, 0f) objectAnimator?.let { it.duration = 3000 it.repeatCount = -1 From 08db6490f12c0afadba9d844ed4f518e2b1b42a4 Mon Sep 17 00:00:00 2001 From: bxb Date: Fri, 19 May 2023 20:33:40 +0800 Subject: [PATCH 7/7] =?UTF-8?q?[sweeper-cloud]=E8=81=94=E8=B0=83=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ISweeperControllerStatusCallback.java | 4 +- .../fragment/BaseSweeperTabFragment.java | 16 +---- .../sweepercloud/fragment/SweeperFragment.kt | 14 +++-- .../sweepercloud/model/SweeperTaskModel.java | 5 +- .../presenter/SweeperPresenter.java | 11 ++-- .../util/SweeperCloudTaskUtils.kt | 7 ++- .../view/SweeperTrafficDataView.kt | 59 +++++++++++++----- .../src/main/res/drawable-xhdpi/icon_auto.png | Bin 0 -> 12917 bytes .../main/res/drawable-xhdpi/icon_not_auto.png | Bin 0 -> 12392 bytes .../main/res/layout/sweeper_traffic_data.xml | 26 +++++--- 10 files changed, 86 insertions(+), 56 deletions(-) create mode 100755 OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_auto.png create mode 100755 OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_not_auto.png diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperControllerStatusCallback.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperControllerStatusCallback.java index 1b247f036e..2ad48d1d5b 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperControllerStatusCallback.java +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperControllerStatusCallback.java @@ -12,6 +12,6 @@ public interface ISweeperControllerStatusCallback { void onVRModeChanged(boolean isVRMode); // 自车定位 void onCarLocationChanged(MogoLocation location); - //开始开启自动驾驶 - void startOpenAutopilot(); + //自动驾驶状态 + void onAutopilotState(int state); } diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/BaseSweeperTabFragment.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/BaseSweeperTabFragment.java index 54945e8432..012fde2668 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/BaseSweeperTabFragment.java +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/BaseSweeperTabFragment.java @@ -183,7 +183,9 @@ public abstract class BaseSweeperTabFragment } } + @Override + public void onAutopilotState(int state) { + ThreadUtils.runOnUiThread(() ->mView.setAutoState(state)); + } + /** * 获取自动驾驶状态 * @return @@ -90,12 +95,6 @@ public class SweeperPresenter extends Presenter public int getAutopilotState() { return SweeperTaskModel.getInstance().getAutopilotState(); } - - @Override - public void startOpenAutopilot() { - - } - /** * 清除路线缓存数据 */ diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt index 6d1e0d6bd2..a1895fc2ee 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt @@ -30,9 +30,10 @@ object SweeperCloudTaskUtils { */ @JvmStatic fun mockQueryCurrentTaskInfo() { - UiThreadHandler.getsUiHandler().postDelayed({ - mockSendCloudTaskInfo(MessageType.PadSendGetTaskReq) - },1000) +// UiThreadHandler.getsUiHandler().postDelayed({ +// mockSendCloudTaskInfo(MessageType.PadSendGetTaskReq) +// },1000) + SweeperTaskModel.getInstance().getCurrentTask() } /** diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperTrafficDataView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperTrafficDataView.kt index b8885f7231..6ee2639db7 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperTrafficDataView.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperTrafficDataView.kt @@ -12,10 +12,7 @@ import chassis.Chassis.LightSwitch import chassis.ChassisStatesOuterClass.BMSSystemStates import chassis.ChassisStatesOuterClass.SweeperFuTianTaskSystemStates import com.elegant.utils.UiThreadHandler -import com.mogo.eagle.core.function.api.autopilot.IMoGoBatteryManagementSystemListener -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisGearStateListener -import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLamplightListener -import com.mogo.eagle.core.function.api.autopilot.IMoGoSweeperFutianCleanSystemListener +import com.mogo.eagle.core.function.api.autopilot.* import com.mogo.eagle.core.function.call.autopilot.* import com.mogo.eagle.core.function.hmi.ui.widget.TapPositionView import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d @@ -32,16 +29,15 @@ class SweeperTrafficDataView : ConstraintLayout, IMoGoBatteryManagementSystemListener, IMoGoChassisLamplightListener, IMoGoChassisGearStateListener, - IMoGoSweeperFutianCleanSystemListener -{ + IMoGoSweeperFutianCleanSystemListener { private var tapPositionView //方向盘下方的档位 : TapPositionView? = null private var speedImage //速度图标 : ImageView? = null private var speedTextView //速度值 : TextView? = null - private var sweeperTurnSignal //转向灯 - : TurnSignalView? = null + private var sweeperAutoState //自动驾驶状态 + : TextView? = null private var tvBattery //电量百分比展示 : TextView? = null private var ivBgWaterWarning //水位预警背景图 @@ -72,7 +68,7 @@ class SweeperTrafficDataView : ConstraintLayout, tapPositionView = findViewById(R.id.sweeperTrafficPosition) speedImage = findViewById(R.id.sweeperSpeedImage) speedTextView = findViewById(R.id.sweeperSpeedText) - sweeperTurnSignal = findViewById(R.id.sweeperTurnSignal) + sweeperAutoState = findViewById(R.id.sweeperAutoState) tvBattery = findViewById(R.id.tvBattery) ivBgWaterWarning = findViewById(R.id.sweeperIvBgWaterWarning) ivWater = findViewById(R.id.sweeperIvWater) @@ -92,7 +88,7 @@ class SweeperTrafficDataView : ConstraintLayout, override fun onDetachedFromWindow() { super.onDetachedFromWindow() - CallerBatteryManagementSystemListenerManager.removeListener(TAG ) + CallerBatteryManagementSystemListenerManager.removeListener(TAG) CallerChassisLamplightListenerManager.removeListener(TAG) CallerChassisGearStateListenerManager.removeListener(TAG) CallerSweeperFutianCleanSystemListenerManager.removeListener(TAG) @@ -101,7 +97,7 @@ class SweeperTrafficDataView : ConstraintLayout, override fun onSweeperFutianTaskIndexData(roboSweeperTaskIndex: RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex) {} override fun onSweeperFutianCleanSystemState(cleanSystemState: SweeperFuTianTaskSystemStates) { val current = System.currentTimeMillis() - if (current - mCurrentTimeWaterMillis <=VEHICLE_STATE_INTERVAL_MILLIS) { + if (current - mCurrentTimeWaterMillis <= VEHICLE_STATE_INTERVAL_MILLIS) { return } mCurrentTimeWaterMillis = current @@ -121,23 +117,49 @@ class SweeperTrafficDataView : ConstraintLayout, @SuppressLint("SetTextI18n") override fun onBatteryManagementSystemStates(states: BMSSystemStates) { val current = System.currentTimeMillis() - if (current - mCurrentTimeBatteryMillis <=VEHICLE_STATE_INTERVAL_MILLIS) { + if (current - mCurrentTimeBatteryMillis <= VEHICLE_STATE_INTERVAL_MILLIS) { return } mCurrentTimeBatteryMillis = current d(SceneConstant.M_SWEEPER + TAG, "电量:${states.bmsSoc}") - UiThreadHandler.post{ + UiThreadHandler.post { tvBattery?.text = "${states.bmsSoc.roundToInt()}%" } } + /** * 车辆转向灯 * @param directionLight */ override fun onAutopilotLightSwitchData(lightSwitch: LightSwitch?) { //转向灯状态 0是正常 1是左转 2是右转 - if (lightSwitch != null) { - sweeperTurnSignal?.setTurnLight(lightSwitch) + } + + /** + * 设置自动驾驶状态 + */ + fun setAutoState(state: Int) { + when (state) { + //不可自动驾驶 + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE -> { + sweeperAutoState?.text="自动驾驶" + sweeperAutoState?.setBackgroundResource(R.drawable.icon_not_auto) + } + //人工驾驶 + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE -> { + sweeperAutoState?.text="人工驾驶" + sweeperAutoState?.setBackgroundResource(R.drawable.icon_auto) + } + //自动驾驶中 + IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING -> { + sweeperAutoState?.text="自动驾驶" + sweeperAutoState?.setBackgroundResource(R.drawable.icon_auto) + } + //平行驾驶 + IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING -> { + sweeperAutoState?.text="平行驾驶" + sweeperAutoState?.setBackgroundResource(R.drawable.icon_auto) + } } } @@ -148,6 +170,7 @@ class SweeperTrafficDataView : ConstraintLayout, override fun onAutopilotBrakeLightData(brakeLight: Boolean) { d(TAG, "刹车灯:$brakeLight") } + /** * 方向盘下方的档位 * @param gear @@ -158,9 +181,11 @@ class SweeperTrafficDataView : ConstraintLayout, tapPositionView?.updateWithGear(gear) } } - fun getSpeedImage():ImageView?{ - return speedImage + + fun getSpeedImage(): ImageView? { + return speedImage } + /** * 速度设置 */ diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_auto.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_auto.png new file mode 100755 index 0000000000000000000000000000000000000000..b76ce3dd2b376fe6d7ed42379a1afd1574690731 GIT binary patch literal 12917 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 literal 0 HcmV?d00001 diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_not_auto.png b/OCH/sweeper/sweeper-cloud/src/main/res/drawable-xhdpi/icon_not_auto.png new file mode 100755 index 0000000000000000000000000000000000000000..3cb8679a55129ef2ae9b7102ad76d0f51c1326aa GIT binary patch literal 12392 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 a_x}TznD10!e|9AR0000 - + android:layout_marginTop="@dimen/dp_20" + android:gravity="center" + android:textColor="@color/white" + android:textSize="@dimen/dp_28" + android:text="自动驾驶" + android:background="@drawable/icon_not_auto" + android:layout_marginStart="@dimen/dp_20"/>