Merge branch 'robosweeper-d-app-module_290_0816' of gitlab.zhidaoauto.com:zhjt/AndroidApp/MoGoEagleEye into robosweeper-d-app-module_290_0816

This commit is contained in:
xinfengkun
2022-08-29 14:03:05 +08:00
28 changed files with 1634 additions and 5 deletions

View File

@@ -415,6 +415,12 @@ public abstract class BaseSweeperTabFragment<V extends IView, P extends Presente
*/
public abstract int getStationPanelViewId();
/**
* 获取清扫车操作面板layout id
* @return
*/
public abstract int getSweepOperatePanelViewId();
/**
* 重新开启自动驾驶
*/

View File

@@ -249,6 +249,11 @@ public class SweeperFragment extends BaseSweeperTabFragment<SweeperFragment, Swe
return R.layout.fragment_och_sweeper;
}
@Override
public int getSweepOperatePanelViewId() {
return R.layout.sweeper_operate_panel_view;
}
@Override
public void restartAutopilot() {
if (!isAnimateRunning) {

View File

@@ -0,0 +1,148 @@
package com.mogo.och.sweeper.util;
import chassis.SpecialVehicleTaskCmdOuterClass;
import chassis.VehicleStateOuterClass;
/**
* 清扫车-福田,构建业务命令数据的工具类
*/
public class SweeperFutianCmdUtil {
private static final int CLEAN_WORK_OPEN = 1; //清扫作业-开启
private static final int CLEAN_WORK_CLOSE = 2;//清扫作业-关闭
public static final int CLEAN_MODE_PURE_SWEEP = 1;//作业模式-纯扫
public static final int CLEAN_MODE_WASH_SWEEP = 2;//作业模式-洗扫
public static final int CLEAN_MODE_PURE_WASH = 3;//作业模式-纯洗
public static final int CLEAN_MODE_PURE_DRAW = 4;//作业模式-纯吸
private static final int CLEAN_MODE_CLOSE = 5;//作业模式-关闭
public static final int CLEAN_DIRECTION_BOTH_SIDE = 1;//清扫方向-两侧
public static final int CLEAN_DIRECTION_LEFT_SIDE = 2;//清扫方向-左侧
public static final int CLEAN_DIRECTION_RIGHT_SIDE = 3;//清扫方向-右侧
private static final int CLEAN_DIRECTION_CLOSE = 4;//清扫方向-关闭
public static final int CLEAN_INTENSITY_STRAND = 1;//作业强度-标准
public static final int CLEAN_INTENSITY_STRONG = 2;//作业强度-加强
/**
* 清扫作业:打开
*
* @return
*/
public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanWorkStartCmd() {
return buildCleanWorkCmd(CLEAN_WORK_OPEN);
}
/**
* 清扫作业:关闭
*
* @return
*/
public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanWorkStopCmd() {
return buildCleanWorkCmd(CLEAN_WORK_CLOSE);
}
private static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanWorkCmd(int startOrStop) {
SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
builder.setCleanOpenRequirement(startOrStop);
return buildTaskCmd(builder.build());
}
/**
* 作业模式:传入具体的模式对应的值
*
* @param value
* @return
*/
public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanModeCmd(int value) {
SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
builder.setCleanModeRequirement(value);
return buildTaskCmd(builder.build());
}
/**
* 作业模式:纯吸
*
* @return
*/
public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanModePureDrawCmd() {
SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
builder.setCleanModeRequirement(CLEAN_MODE_PURE_DRAW);
//不用设置作业方向,自动设置作业强度为:标准
builder.setCleanIntensityRequirement(CLEAN_INTENSITY_STRAND);
return buildTaskCmd(builder.build());
}
/**
* 作业模式:关闭作业模式
*
* @return
*/
public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanModeCloseCmd() {
SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
builder.setCleanModeRequirement(CLEAN_MODE_CLOSE);
//关闭清扫方向,待下次在选择
builder.setCleanDirectionRequirement(CLEAN_DIRECTION_CLOSE);
//自动设置作业强度为:标准
builder.setCleanIntensityRequirement(CLEAN_INTENSITY_STRAND);
return buildTaskCmd(builder.build());
}
/**
* 作业方向:根据具体的方向传入具体的值
*
* @param value
* @return
*/
public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanDirectionCmd(int value) {
SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
builder.setCleanDirectionRequirement(value);
builder.setCleanIntensityRequirement(CLEAN_INTENSITY_STRAND);
// 同时作业强度默认:标准
return buildTaskCmd(builder.build());
}
/**
* 作业方向:关闭作业方向
*
* @return
*/
public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanDirectionCloseCmd() {
SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
builder.setCleanDirectionRequirement(CLEAN_DIRECTION_CLOSE);
//重置作业强度为标准
builder.setCleanIntensityRequirement(CLEAN_INTENSITY_STRAND);
return buildTaskCmd(builder.build());
}
/**
* 作业强度:传入具体的值
*
* @param value
* @return
*/
public static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildCleanIntensityCmd(int value) {
SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.Builder builder = SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd.newBuilder();
builder.setCleanIntensityRequirement(value);
return buildTaskCmd(builder.build());
}
private static SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd buildTaskCmd(
SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianCleanCmd fuTianCleanCmd) {
return SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd.newBuilder()
.setRoboSweeperFutianCleanCmd(fuTianCleanCmd).build();
}
/**
* 构建底盘Mock数据
*
* @return
*/
public static VehicleStateOuterClass.SweeperFuTianCleanSystemState buildSweeperFuTionCleanSystemStateMockData() {
VehicleStateOuterClass.SweeperFuTianCleanSystemState.Builder builder = VehicleStateOuterClass.SweeperFuTianCleanSystemState.newBuilder();
builder.setSecuMotWorkSts(true);
builder.setSecuModWashSts(true);
builder.setSecuWorkOnBothsidesSts(true);
builder.setSecuWorkStrongSts(true);
return builder.build();
}
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#00000000"/>
<corners android:radius="@dimen/sweeper_operate_panel_btn_bg_corner"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/sweeper_operate_panel_btn1_bg_close"/>
<corners android:radius="@dimen/sweeper_operate_panel_btn_bg_corner"/>
<stroke android:color="@color/sweeper_operate_panel_btn1_bg_stroke" android:width="1dp"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/sweeper_operate_panel_btn2_bg_default"/>
<corners android:radius="@dimen/sweeper_operate_panel_btn_bg_corner"/>
<stroke android:color="@color/sweeper_operate_panel_btn2_bg_stroke" android:width="1dp"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/sweeper_operate_panel_btn2_bg_disabled"/>
<corners android:radius="@dimen/sweeper_operate_panel_btn_bg_corner"/>
<stroke android:color="@color/sweeper_operate_panel_btn2_bg_stroke" android:width="1dp"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/sweeper_operate_panel_btn1_bg_open"/>
<corners android:radius="@dimen/sweeper_operate_panel_btn_bg_corner"/>
<stroke android:color="@color/sweeper_operate_panel_btn1_bg_stroke" android:width="1dp"/>
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/sweeper_operate_panel_btn2_bg_pressed"/>
<corners android:radius="@dimen/sweeper_operate_panel_btn_bg_corner"/>
<stroke android:color="@color/sweeper_operate_panel_btn2_bg_stroke" android:width="1dp"/>
</shape>

View File

@@ -0,0 +1,4 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_sweeper_operate_panel_btn_close" android:state_checked="true"/>
<item android:drawable="@drawable/bg_sweeper_operate_panel_btn_open" android:state_checked="false"/>
</selector>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_sweeper_operate_panel_btn_disabled" android:state_enabled="false" android:state_checked="false"/>
<item android:drawable="@drawable/bg_sweeper_operate_panel_btn_pressed" android:state_enabled="true" android:state_checked="true"/>
<item android:drawable="@drawable/bg_sweeper_operate_panel_btn_default" android:state_enabled="true" android:state_checked="false"/>
</selector>

View File

@@ -63,6 +63,17 @@
app:layout_goneMarginTop="@dimen/module_mogo_och_station_panel_container_margin_top_no_call"
tools:visibility="visible" />
<com.mogo.och.sweeper.ui.SweeperOperatePanelView
android:id="@+id/module_mogo_och_sweeper_operate_panel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_24"
android:layout_marginStart="@dimen/dp_8"
app:layout_constraintLeft_toRightOf="@id/fl_speed"
app:layout_constraintTop_toTopOf="@id/fl_speed"
tools:background="#f00"
tools:visibility="visible" />
<include
android:id="@+id/module_mogo_och_sweeper_test_bar"
android:layout_width="wrap_content"

View File

@@ -0,0 +1,309 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_32"
android:background="@drawable/bg_sweeper_operate_panel"
android:padding="@dimen/dp_8">
<TextView
android:id="@+id/hint_clean_work"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffffff"
android:gravity="top|center_horizontal"
android:paddingStart="@dimen/dp_8"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_8"
android:paddingBottom="@dimen/dp_12"
android:text="车辆准备"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<CheckedTextView
android:id="@+id/btn_clean_work_open_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_28"
android:background="@drawable/sweeper_operate_panel_btn1_bg_selector"
android:checked="false"
android:gravity="center"
android:paddingStart="@dimen/dp_28"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_28"
android:paddingBottom="@dimen/dp_12"
android:text="open"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toRightOf="@id/hint_clean_work"
app:layout_constraintTop_toTopOf="@id/hint_clean_work" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/clean_work_barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="hint_clean_work, btn_clean_work_open_close" />
<TextView
android:id="@+id/hint_clean_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_28"
android:background="#ffffff"
android:gravity="top|center_horizontal"
android:paddingStart="@dimen/dp_8"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_8"
android:paddingBottom="@dimen/dp_12"
android:text="作业模式"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/clean_work_barrier" />
<CheckedTextView
android:id="@+id/btn_clean_mode_pure_sweep"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_28"
android:background="@drawable/sweeper_operate_panel_btn2_bg_selector"
android:enabled="false"
android:gravity="center"
android:paddingStart="@dimen/dp_32"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_32"
android:paddingBottom="@dimen/dp_12"
android:text="纯扫"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toRightOf="@id/hint_clean_mode"
app:layout_constraintTop_toTopOf="@id/hint_clean_mode" />
<CheckedTextView
android:id="@+id/btn_clean_mode_pure_wash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_28"
android:background="@drawable/sweeper_operate_panel_btn2_bg_selector"
android:enabled="false"
android:gravity="center"
android:paddingStart="@dimen/dp_32"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_32"
android:paddingBottom="@dimen/dp_12"
android:text="纯洗"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toRightOf="@id/btn_clean_mode_pure_sweep"
app:layout_constraintTop_toTopOf="@id/hint_clean_mode" />
<CheckedTextView
android:id="@+id/btn_clean_mode_sweep_wash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_28"
android:background="@drawable/sweeper_operate_panel_btn2_bg_selector"
android:enabled="false"
android:gravity="center"
android:paddingStart="@dimen/dp_32"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_32"
android:paddingBottom="@dimen/dp_12"
android:text="洗扫"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toLeftOf="@id/btn_clean_mode_pure_sweep"
app:layout_constraintTop_toBottomOf="@id/btn_clean_mode_pure_sweep" />
<CheckedTextView
android:id="@+id/btn_clean_mode_pure_absorption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_28"
android:background="@drawable/sweeper_operate_panel_btn2_bg_selector"
android:enabled="false"
android:gravity="center"
android:paddingStart="@dimen/dp_32"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_32"
android:paddingBottom="@dimen/dp_12"
android:text="纯吸"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toRightOf="@id/btn_clean_mode_sweep_wash"
app:layout_constraintTop_toTopOf="@id/btn_clean_mode_sweep_wash" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/clean_mode_barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="hint_clean_mode, btn_clean_mode_pure_sweep, btn_clean_mode_pure_wash, btn_clean_mode_sweep_wash, btn_clean_mode_pure_absorption" />
<TextView
android:id="@+id/hint_clean_direction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_28"
android:background="#ffffff"
android:gravity="top|center_horizontal"
android:paddingStart="@dimen/dp_8"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_8"
android:paddingBottom="@dimen/dp_12"
android:text="清扫方向"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/clean_mode_barrier" />
<CheckedTextView
android:id="@+id/btn_clean_direction_left_side"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_28"
android:background="@drawable/sweeper_operate_panel_btn2_bg_selector"
android:enabled="false"
android:gravity="center"
android:paddingStart="@dimen/dp_32"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_32"
android:paddingBottom="@dimen/dp_12"
android:text="左侧"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toRightOf="@id/hint_clean_direction"
app:layout_constraintTop_toTopOf="@id/hint_clean_direction" />
<CheckedTextView
android:id="@+id/btn_clean_direction_right_side"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_28"
android:background="@drawable/sweeper_operate_panel_btn2_bg_selector"
android:enabled="false"
android:gravity="center"
android:paddingStart="@dimen/dp_32"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_32"
android:paddingBottom="@dimen/dp_12"
android:text="右侧"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toRightOf="@id/btn_clean_direction_left_side"
app:layout_constraintTop_toTopOf="@id/hint_clean_direction" />
<CheckedTextView
android:id="@+id/btn_clean_direction_both_side"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_28"
android:background="@drawable/sweeper_operate_panel_btn2_bg_selector"
android:enabled="false"
android:gravity="center"
android:paddingStart="@dimen/dp_32"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_32"
android:paddingBottom="@dimen/dp_12"
android:text="两侧"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toLeftOf="@id/btn_clean_direction_left_side"
app:layout_constraintTop_toBottomOf="@id/btn_clean_direction_left_side" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/clean_direction_barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="hint_clean_direction, btn_clean_direction_left_side, btn_clean_direction_right_side, btn_clean_direction_both_side" />
<TextView
android:id="@+id/hint_clean_intensity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_28"
android:background="#ffffff"
android:gravity="top|center_horizontal"
android:paddingStart="@dimen/dp_8"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_8"
android:paddingBottom="@dimen/dp_12"
android:text="作业强度"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/clean_direction_barrier" />
<CheckedTextView
android:id="@+id/btn_clean_intensity_standard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_28"
android:background="@drawable/sweeper_operate_panel_btn2_bg_selector"
android:enabled="false"
android:gravity="center"
android:paddingStart="@dimen/dp_32"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_32"
android:paddingBottom="@dimen/dp_12"
android:text="标准"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toRightOf="@id/hint_clean_intensity"
app:layout_constraintTop_toTopOf="@id/hint_clean_intensity" />
<CheckedTextView
android:id="@+id/btn_clean_intensity_strong"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_28"
android:background="@drawable/sweeper_operate_panel_btn2_bg_selector"
android:enabled="false"
android:gravity="center"
android:paddingStart="@dimen/dp_32"
android:paddingTop="@dimen/dp_12"
android:paddingEnd="@dimen/dp_32"
android:paddingBottom="@dimen/dp_12"
android:text="强力"
android:textColor="#000000"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size"
app:layout_constraintLeft_toRightOf="@id/btn_clean_intensity_standard"
app:layout_constraintTop_toTopOf="@id/hint_clean_intensity" />
<LinearLayout
android:id="@+id/loading_hint_container"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#cc000000"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/loading_hint_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="正在执行中,请稍后"
android:textColor="#ffffff"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size" />
<TextView
android:id="@+id/loading_hint_bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_28"
android:text="预计等待30秒"
android:textColor="#ffffff"
android:textSize="@dimen/sweeper_operate_panel_btn_text_size" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -44,4 +44,13 @@
<color name="sweeper_traffic_light_green_color_down">#FF006D43</color>
<color name="sweeper_traffic_light_yellow_color_up">#FFFFE198</color>
<color name="sweeper_traffic_light_yellow_color_down">#FFFF9B00</color>
<color name="sweeper_operate_panel_btn1_bg_open">#7DE261</color>
<color name="sweeper_operate_panel_btn1_bg_close">#f00</color>
<color name="sweeper_operate_panel_btn1_bg_stroke">#BF30334C</color>
<color name="sweeper_operate_panel_btn2_bg_default">#ffffff</color>
<color name="sweeper_operate_panel_btn2_bg_pressed">#1FA7FF</color>
<color name="sweeper_operate_panel_btn2_bg_disabled">#80ffffff</color>
<color name="sweeper_operate_panel_btn2_bg_stroke">#BF30334C</color>
</resources>

View File

@@ -151,4 +151,7 @@
<dimen name="sweeper_traffic_light_icon_size">154px</dimen>
<dimen name="sweeper_traffic_light_time_view_width">130px</dimen>
<dimen name="sweeper_traffic_light_time_size">60px</dimen>
<dimen name="sweeper_operate_panel_btn_bg_corner">16px</dimen>
<dimen name="sweeper_operate_panel_btn_text_size">36px</dimen>
</resources>

View File

@@ -24,4 +24,6 @@
<string name="sweeper_arrive_to_current_tag">当前站点:</string>
<string name="sweeper_arrive_to_next_tag">下一站:</string>
<string name="sweeper_auto_disable_tip">自动驾驶状态为0不可用</string>
<string name="sweeper_operate_panel_cmd_execute_timeout">预计等待%d秒</string>
</resources>

View File

@@ -4,6 +4,7 @@ import android.Manifest.permission
import android.content.Context
import android.util.Log
import androidx.annotation.RequiresPermission
import chassis.SpecialVehicleTaskCmdOuterClass
import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.eagle.core.data.app.AppConfigInfo
@@ -545,4 +546,9 @@ class MoGoAutopilotProvider :
Log.d(TAG, "---- sendStatusQueryReq ----")
AdasManager.getInstance().sendStatusQueryReq()
}
override fun sendSweeperFuTianTaskCmd(fuTianTaskCmd: SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd) {
Log.d(TAG, "---- sendSweeperFuTianTaskCmd ----")
AdasManager.getInstance().sendRoboSweeperFuTianTaskCmd(fuTianTaskCmd)
}
}

View File

@@ -1,6 +1,5 @@
package com.mogo.eagle.core.function.autopilot.adapter
import android.util.*
import chassis.VehicleStateOuterClass
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.config.HdMapBuildConfig
@@ -45,7 +44,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPointCloudList
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager.invokeAutopilotRecordResult
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotVehicleStateListenerManager
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.network.utils.*
import com.zhidao.support.adas.high.AdasManager
import com.zhidao.support.adas.high.OnAdasListener
import com.zhidao.support.adas.high.common.ProtocolStatus
@@ -57,7 +55,6 @@ import mogo_msg.MogoReportMsg
import perception.TrafficLightOuterClass
import prediction.Prediction
import record_cache.RecordPanelOuterClass
import rule_segement.MogoPointCloudOuterClass
import system_master.SystemStatusInfo
/**
@@ -162,7 +159,10 @@ class MoGoAdasListenerImpl : OnAdasListener {
CallerAutopilotVehicleStateListenerManager.invokeAutopilotThrottle(vehicleState.throttle)
//刹车
CallerAutopilotVehicleStateListenerManager.invokeAutopilotBrake(vehicleState.brake)
//清扫车(福田)清扫控制系统状态
vehicleState.sweeperFutianCleanSystemState?.also {
CallerAutopilotVehicleStateListenerManager.invokeSweeperFutianCleanSystemState(it)
}
} else {
CallerAutopilotVehicleStateListenerManager.invokeAutopilotDataException(header.timestamp.toLong())
}

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
@@ -23,6 +24,7 @@ import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr;
import org.jetbrains.annotations.NotNull;
import chassis.Chassis;
import chassis.VehicleStateOuterClass;
import mogo.telematics.pad.MessagePad;
public class MoGoHandAdasMsgManager implements
@@ -166,4 +168,9 @@ public class MoGoHandAdasMsgManager implements
public void onAutopilotBrake(float brake) {
}
@Override
public void onSweeperFutianCleanSystemState(VehicleStateOuterClass.SweeperFuTianCleanSystemState cleanSystemState) {
}
}

View File

@@ -4,6 +4,7 @@ import android.content.*
import android.util.Log
import chassis.Chassis.GearPosition
import chassis.Chassis.LightSwitch
import chassis.VehicleStateOuterClass
import com.mogo.eagle.core.function.api.autopilot.*
import com.mogo.eagle.core.function.call.autopilot.*
import com.mogo.eagle.core.utilcode.kotlin.*
@@ -81,6 +82,11 @@ internal class CanImpl(ctx: Context): IFlow<CanStatus>(ctx), IMoGoAutopilotVehic
timeOutCheck()
}
override fun onSweeperFutianCleanSystemState(cleanSystemState: VehicleStateOuterClass.SweeperFuTianCleanSystemState) {
send(CanStatus(isCanEnabled()))
timeOutCheck()
}
override fun onAutopilotGuardian(guardianInfo: MogoReportMessage?) {
super.onAutopilotGuardian(guardianInfo)
send(CanStatus(isCanEnabled()))

View File

@@ -19,6 +19,7 @@ import androidx.core.content.ContextCompat
import androidx.core.view.*
import androidx.recyclerview.widget.LinearLayoutManager
import chassis.Chassis
import chassis.VehicleStateOuterClass
import com.mogo.cloud.passport.MoGoAiCloudClient
import com.mogo.cloud.passport.MoGoAiCloudClientConfig
import com.mogo.commons.AbsMogoApplication
@@ -1984,6 +1985,13 @@ class DebugSettingView @JvmOverloads constructor(
}
/**
* 清扫车(福田)清扫控制系统状态
*/
override fun onSweeperFutianCleanSystemState(cleanSystemState: VehicleStateOuterClass.SweeperFuTianCleanSystemState) {
}
/**
* 吐司提示
*/

View File

@@ -28,6 +28,7 @@ import com.mogo.eagle.core.utilcode.util.ThreadUtils;
import org.jetbrains.annotations.NotNull;
import chassis.Chassis;
import chassis.VehicleStateOuterClass;
import mogo.telematics.pad.MessagePad;
import mogo_msg.MogoReportMsg;
import system_master.SystemStatusInfo;
@@ -170,6 +171,10 @@ public class SteeringWheelView extends ConstraintLayout {
private final IMoGoAutopilotVehicleStateListener mIMoGoAutopilotVehicleStateListener = new IMoGoAutopilotVehicleStateListener() {
@Override
public void onSweeperFutianCleanSystemState(@NonNull VehicleStateOuterClass.SweeperFuTianCleanSystemState cleanSystemState) {
}
/**
* @param brake 刹车
*/

View File

@@ -24,6 +24,7 @@ import com.mogo.eagle.core.utilcode.util.ThreadUtils;
import org.jetbrains.annotations.NotNull;
import chassis.Chassis;
import chassis.VehicleStateOuterClass;
/**
* @author Jing
@@ -123,6 +124,10 @@ public class TrafficDataView extends ConstraintLayout {
}
private final IMoGoAutopilotVehicleStateListener mIMoGoAutopilotVehicleStateListener = new IMoGoAutopilotVehicleStateListener() {
@Override
public void onSweeperFutianCleanSystemState(@NonNull VehicleStateOuterClass.SweeperFuTianCleanSystemState cleanSystemState) {
}
/**
* 车辆转向灯
* @param lightSwitch

View File

@@ -1,5 +1,6 @@
package com.mogo.eagle.core.function.api.autopilot
import chassis.SpecialVehicleTaskCmdOuterClass
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
import com.mogo.eagle.core.data.trafficlight.TrafficLightResult
import com.mogo.eagle.core.function.api.base.IMoGoFunctionServerProvider
@@ -205,4 +206,9 @@ interface IMoGoAutopilotProvider : IMoGoFunctionServerProvider {
* 主动查询工控机的各topic状态
*/
fun sendStatusQueryReq()
/**
* 福田清扫车业务指令下发
*/
fun sendSweeperFuTianTaskCmd(fuTianTaskCmd: SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd)
}

View File

@@ -1,7 +1,7 @@
package com.mogo.eagle.core.function.api.autopilot
import chassis.Chassis
import mogo.telematics.pad.MessagePad
import chassis.VehicleStateOuterClass
/**
* 车辆底盘 数据 回调监听
@@ -52,4 +52,9 @@ interface IMoGoAutopilotVehicleStateListener {
* 刹车
*/
fun onAutopilotBrake(brake: Float)
/**
* 清扫车(福田)清扫控制系统状态
*/
fun onSweeperFutianCleanSystemState(cleanSystemState: VehicleStateOuterClass.SweeperFuTianCleanSystemState)
}

View File

@@ -1,6 +1,7 @@
package com.mogo.eagle.core.function.call.autopilot
import android.os.SystemClock
import chassis.SpecialVehicleTaskCmdOuterClass
import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters
import com.mogo.eagle.core.data.constants.MogoServicePaths
import com.mogo.eagle.core.data.deva.chain.ChainConstant
@@ -263,4 +264,11 @@ object CallerAutoPilotManager {
fun sendStatusQueryReq() {
providerApi?.sendStatusQueryReq()
}
/**
* 福田清扫车业务指令下发
*/
fun sendSweeperFuTianTaskCmd(fuTianTaskCmd: SpecialVehicleTaskCmdOuterClass.RoboSweeperFuTianTaskCmd) {
providerApi?.sendSweeperFuTianTaskCmd(fuTianTaskCmd)
}
}

View File

@@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.call.autopilot
import androidx.annotation.Nullable
import chassis.Chassis
import chassis.VehicleStateOuterClass
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotVehicleStateListener
import com.mogo.eagle.core.function.call.base.CallerBase
import mogo.telematics.pad.MessagePad
@@ -132,6 +133,16 @@ object CallerAutopilotVehicleStateListenerManager : CallerBase() {
}
}
/**
* clean system state 清扫车(福田)清扫控制系统状态
*/
fun invokeSweeperFutianCleanSystemState(cleanSystemState: VehicleStateOuterClass.SweeperFuTianCleanSystemState){
M_AUTOPILOT_VEHICLE_LISTENERS.forEach{
val listener = it.value
listener.onSweeperFutianCleanSystemState(cleanSystemState)
}
}
/**
* 工控机时间回调