Merge branch 'dev_sweeper-d_230423_3.1.0' of gitlab.zhidaoauto.com:SCA/L4HA/AndroidApp/MoGoEagleEye into dev_sweeper-d_230423_3.1.0

This commit is contained in:
xinfengkun
2023-05-20 20:08:02 +08:00
17 changed files with 178 additions and 125 deletions

View File

@@ -12,6 +12,6 @@ public interface ISweeperControllerStatusCallback {
void onVRModeChanged(boolean isVRMode);
// 自车定位
void onCarLocationChanged(MogoLocation location);
//开始开启自动驾驶
void startOpenAutopilot();
//自动驾驶状态
void onAutopilotState(int state);
}

View File

@@ -249,7 +249,9 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
mapBizView.onCreate(savedInstanceState);
mMapWeltView.onCreateView(savedInstanceState);
}
public void setAutoState(int state){
mTrafficDataView.setAutoState(state);
}
/**
* 消息盒子
*/
@@ -549,18 +551,6 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
public void setTaskDataToFragmentCallback(ISweeperTaskDataToFragmentCallback mTaskDataToFragmentCallback) {
this.mTaskDataToFragmentCallback = mTaskDataToFragmentCallback;
}
/**
* 模拟pad获取正在执行的任务
*/
public void mockCloudTaskInfo() {
SweeperCloudTaskUtils.mockSendCloudTaskInfo(SweeperCloudTask.MessageType.CloudPushTask);
}
/**
* 模拟云端发送任务信息
*/
public void mockSendCloudTaskInfo() {
SweeperCloudTaskUtils.mockSendCloudTaskInfo(SweeperCloudTask.MessageType.CloudPushTask);
}
/**
* 结束子任务
*/

View File

@@ -53,7 +53,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
private var mSubTaskType: TaskModel = TaskModel.DEFAULT_MODEL //1:自动驾驶子任务 2人工驾驶子任务 -1:未知任务类型
private var mCurrentSubTaskInfo: SubTaskInfo? = null//当前正在执行的子任务
private val mLoadingDialog: SweeperCloudLoadingDialog by lazy { SweeperCloudLoadingDialog(requireContext()) }
private var mDialog:SweeperCloudDialog?=null
private var mDialog: SweeperCloudDialog? = null
override fun getTagName(): String {
return "SweepersFragment"
@@ -111,7 +111,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
getCurrentView().getAutoBtn().setOnClickListener {
//前置条件 (1)必须处于人工驾驶状态 2必须有正在执行的子任务且子任务类型为自动驾驶子任务 才能请求云端进入自驾
mCurrentSubTaskInfo?.let {
if (mPresenter?.autopilotState == STATUS_AUTOPILOT_ENABLE&&it.taskModel==TaskModel.AUTO) {
if (mPresenter?.autopilotState == STATUS_AUTOPILOT_ENABLE && it.taskModel == TaskModel.AUTO) {
mLoadingDialog.showLoading()
mPresenter?.sendSweeperAutopilotBootable(mTaskInfo?.taskId, it.subTaskId, it.lineId.toLong())
}
@@ -243,7 +243,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
val timeout: String = getTimeSpent(it.taskEndTime)
//数据重复导致连续弹窗
if (mDialog!=null&& mDialog!!.isShowing){
if (mDialog != null && mDialog!!.isShowing) {
return
}
if (stopTaskType == SweeperTaskStop.StopTaskType.NORMAL) {
@@ -253,19 +253,19 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
override fun onConfirm() {
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_CONFIRM)
mLoadingDialog.showLoading()
ToastUtils.showLong("确认")
//ToastUtils.showLong("确认")
}
override fun onRefuseOrEnd() {
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_REFUSE)
mLoadingDialog.showLoading()
ToastUtils.showLong("拒绝")
//ToastUtils.showLong("拒绝")
}
override fun onCountDownStop() {
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.OVER_TIME)
mLoadingDialog.showLoading()
ToastUtils.showLong("倒计时")
//ToastUtils.showLong("倒计时")
}
override fun onNext() {
@@ -315,19 +315,14 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
if (it.taskId != taskId) {
return
}
//大任务正常结束
if (subTaskStatus == SweeperBigTaskStatus.BigTaskStatus.FINISHED) {
//大任务处于取消状态 异常状态pad端都显示无任务列表
if (subTaskStatus == SweeperBigTaskStatus.BigTaskStatus.CANCLE || subTaskStatus == SweeperBigTaskStatus.BigTaskStatus.ABNORMAL || subTaskStatus == SweeperBigTaskStatus.BigTaskStatus.FINISHED) {
//数据重复导致连续弹窗
if (mDialog!=null&& mDialog!!.isShowing){
if (mDialog != null && mDialog!!.isShowing) {
return
}
mDialog=sweeperCloudTaskNormalEndDialog()
mDialog = sweeperCloudTaskNormalEndDialog()
mDialog?.show()
return
}
//大任务处于取消状态 异常状态pad端都显示无任务列表
if (subTaskStatus == SweeperBigTaskStatus.BigTaskStatus.CANCLE || subTaskStatus == SweeperBigTaskStatus.BigTaskStatus.ABNORMAL) {
resetTaskInfoPanel()
}
}
}
@@ -337,10 +332,16 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
*/
fun onSweeperCloudAutopilotBootable(taskId: String, subTaskId: String, isBootableResp: SweeperBootable.IsBootableResp) {
mLoadingDialog.hideLoading()
if (isBootableResp.code == SweeperCommon.Code.SUCCEED) {
ToastUtils.showLong("请求成功")
} else {
ToastUtils.showLong("请求失败")
//如果云端要更新的任务和本地缓存任务不是同一个,在无法进行任务列表状态更新
mTaskInfo?.let {
if (it.taskId != taskId) {
return
}
if (isBootableResp.code == SweeperCommon.Code.SUCCEED) {
ToastUtils.showLong("上报云控成功")
} else {
ToastUtils.showLong("上报云控失败")
}
}
}
@@ -432,30 +433,30 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
val subInfo = bySubTaskIdFindSubTaskInfo(subTaskId)
subInfo?.let {
//数据重复导致连续弹窗
if (mDialog!=null&& mDialog!!.isShowing){
if (mDialog != null && mDialog!!.isShowing) {
return
}
mDialog = createConfirmStartSubTaskDialog(context, object : SweeperCloudDialogClickListener {
override fun onConfirm() {
ToastUtils.showLong("确认")
//ToastUtils.showLong("确认")
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
mLoadingDialog.showLoading()
}
override fun onRefuseOrEnd() {
ToastUtils.showLong("结束")
//ToastUtils.showLong("结束")
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_REFUSE_ALL)
mLoadingDialog.showLoading()
}
override fun onCountDownStop() {
ToastUtils.showLong("倒计时结束")
//ToastUtils.showLong("倒计时结束")
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.OVER_TIME)
mLoadingDialog.showLoading()
}
override fun onNext() {
ToastUtils.showLong("下一个")
//ToastUtils.showLong("下一个")
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_REFUSE_SINGLE)
mLoadingDialog.showLoading()
}
@@ -472,7 +473,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
mTaskInfo?.let {
mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.RECEIVED)
//数据重复导致连续弹窗
if (mDialog!=null&& mDialog!!.isShowing){
if (mDialog != null && mDialog!!.isShowing) {
return
}
mDialog = createReceivedTaskInfoDialog(context, object : SweeperCloudDialogClickListener {
@@ -487,14 +488,14 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
override fun onRefuseOrEnd() {
//ToastUtils.showLong("拒绝")
setShowCurrentTaskPanelView(false)
mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.MANUAL_REFUSE)
mLoadingDialog.showLoading()
resetTaskInfoPanel()
}
override fun onCountDownStop() {
//ToastUtils.showLong("倒计时结束")
setShowCurrentTaskPanelView(false)
resetTaskInfoPanel()
mPresenter?.sendSweeperStartTaskResp(it.taskId, SweeperTask.StartTaskCode.OVER_TIME)
mLoadingDialog.showLoading()
}

View File

@@ -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+" 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+" 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+" 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+" 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+" 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+" 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+" 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() {
@@ -544,8 +554,11 @@ 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();
if (mControllerStatusCallback!=null){
mControllerStatusCallback.onAutopilotState(autoPilotStatusInfo.getState());
}
switch (autoPilotStatusInfo.getState()) {
case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶
break;
@@ -577,6 +590,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);
}

View File

@@ -83,6 +83,11 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
}
}
@Override
public void onAutopilotState(int state) {
ThreadUtils.runOnUiThread(() ->mView.setAutoState(state));
}
/**
* 获取自动驾驶状态
* @return
@@ -90,12 +95,6 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
public int getAutopilotState() {
return SweeperTaskModel.getInstance().getAutopilotState();
}
@Override
public void startOpenAutopilot() {
}
/**
* 清除路线缓存数据
*/

View File

@@ -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

View File

@@ -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()
}
/**
@@ -202,7 +203,7 @@ object SweeperCloudTaskUtils {
val builder = SweeperBigTaskStatus.BigTaskStatusPush.newBuilder()
builder.sn = getDriverSn()
builder.taskId = "10"
builder.taskStatus = BigTaskStatus.RUNNING
builder.taskStatus = BigTaskStatus.FINISHED
builder.systemTime = System.currentTimeMillis()
SweeperTaskModel.getInstance().onSweeperFutianCloudBigTaskStatus(
MessageType.CloudPushBigTaskStatus, "${System.currentTimeMillis()}",

View File

@@ -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
}
/**
* 速度设置
*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient android:startColor="#2A537F" android:endColor="#263A5B" android:angle="315"/>
<corners android:radius="@dimen/dp_45"/>
</shape>

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="16"
android:useLevel="false">
<gradient
android:endColor="#6020AAFF"
android:centerColor="#102F6EFF"
android:startColor="#6020AAFF"
android:type="sweep" />
</shape>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/sweeper_cloud_rotation_background"/>
<item android:drawable="@drawable/sweeper_cloud_rotation"/>
</layer-list>

View File

@@ -12,18 +12,20 @@
app:shadow_position="outer"
app:xOffset="0dp"
app:yOffset="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
<com.mogo.och.common.module.wigets.OCHRoundConstraintLayout
android:layout_width="@dimen/dp_800"
android:layout_height="@dimen/dp_560"
android:layout_gravity="center"
android:background="@drawable/bg_shape_dialog_cloud_view">
android:background="@drawable/bg_shape_dialog_cloud_view"
app:roundLayoutRadius="@dimen/dp_45"
>
<ImageView
android:id="@+id/sweeper_cloud_imageview"
android:layout_width="@dimen/dp_84"
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" />
@@ -67,8 +69,8 @@
android:id="@+id/sweeper_cloud_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_30"
android:layout_marginEnd="@dimen/dp_30"
android:layout_marginStart="@dimen/dp_60"
android:layout_marginEnd="@dimen/dp_60"
android:gravity="center"
android:textColor="#FFFFFFFF"
android:textSize="@dimen/dp_50"
@@ -78,9 +80,9 @@
android:id="@+id/sweeper_cloud_tip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_30"
android:layout_marginStart="@dimen/dp_60"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_30"
android:layout_marginEnd="@dimen/dp_60"
android:gravity="center"
android:textColor="#A6CEFF"
android:textSize="@dimen/dp_40"
@@ -129,5 +131,5 @@
android:textSize="@dimen/dp_50"
tools:text="拒绝" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.mogo.och.common.module.wigets.OCHRoundConstraintLayout>
</com.mogo.och.common.module.wigets.OCHBorderShadowLayout>

View File

@@ -68,21 +68,27 @@
app:layout_constraintBottom_toBottomOf="@+id/sweeperTrafficPosition"
android:layout_marginStart="@dimen/dp_34"
/>
<com.mogo.och.sweepercloud.view.TurnSignalView
android:id="@+id/sweeperTurnSignal"
android:layout_width="@dimen/dp_200"
android:layout_height="wrap_content"
<TextView
android:id="@+id/sweeperAutoState"
android:layout_width="@dimen/dp_168"
android:layout_height="@dimen/dp_58"
app:layout_constraintTop_toBottomOf="@+id/sweeperTrafficPosition"
app:layout_constraintLeft_toRightOf="@+id/sweeperSpeedImage"
android:layout_marginTop="@dimen/dp_10"/>
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"/>
<View
android:id="@+id/line2"
android:layout_width="@dimen/dp_1"
android:layout_height="@dimen/dp_34"
app:layout_constraintStart_toEndOf="@+id/sweeperTurnSignal"
app:layout_constraintTop_toTopOf="@+id/sweeperTurnSignal"
app:layout_constraintBottom_toBottomOf="@+id/sweeperTurnSignal"
android:layout_marginStart="@dimen/dp_12"
app:layout_constraintStart_toEndOf="@+id/sweeperAutoState"
app:layout_constraintTop_toTopOf="@+id/sweeperAutoState"
app:layout_constraintBottom_toBottomOf="@+id/sweeperAutoState"
android:layout_marginStart="@dimen/dp_26"
android:background="#414869"/>
<com.mogo.och.sweepercloud.view.SweeperTrafficLightView
android:id="@+id/sweeperTrafficLight"
@@ -136,7 +142,7 @@
android:layout_gravity="center"
android:gravity="center"
android:layout_marginEnd="@dimen/dp_36"
app:layout_constraintTop_toBottomOf="@+id/sweeperTurnSignal"
app:layout_constraintTop_toBottomOf="@+id/sweeperAutoState"
>
<ImageView
android:id="@+id/sweeperIvBgWaterWarning"

View File

@@ -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确认type100002-> 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、云端下发任务状态到padtype100003-> 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结束任务type100004-> 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请求挂起任务type100005-> 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);
}
}