Merge branch 'dev_robotaxi-d-app-module_2120_221017_2.12.0' into 'test_robotaxi-d-app-module_2120_221017_2.12.0.1'
Dev robotaxi d app module 2120 221017 2.12.0 See merge request zhjt/AndroidApp/MoGoEagleEye!352
This commit is contained in:
@@ -36,4 +36,14 @@ object VoiceNotice {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 中断当前在播语音
|
||||
*/
|
||||
@JvmStatic
|
||||
fun stopCurrentTts(){
|
||||
UiThreadHandler.post {
|
||||
AIAssist.getInstance(AbsMogoApplication.getApp()).stopTts()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr;
|
||||
import com.mogo.eagle.core.utilcode.util.NetworkUtils;
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils;
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
import com.mogo.map.navi.IMogoCarLocationChangedListener2;
|
||||
import com.mogo.module.common.MogoApisHandler;
|
||||
import com.mogo.och.common.module.biz.constant.LoginStatusManager;
|
||||
@@ -1585,10 +1586,15 @@ public class TaxiModel {
|
||||
if (mOrderStatusCallback != null){
|
||||
mOrderStatusCallback.onNaviToEnd(false,isVoicePlay);
|
||||
}
|
||||
}else {//使用高德导航
|
||||
if (mOrderStatusCallback != null){
|
||||
mOrderStatusCallback.onNaviToEnd(true,isVoicePlay);
|
||||
}
|
||||
}else {//2s后若无轨迹数据使用高德导航
|
||||
UiThreadHandler.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (mRoutePoints.size() == 0 && mOrderStatusCallback != null){
|
||||
mOrderStatusCallback.onNaviToEnd(true,isVoicePlay);
|
||||
}
|
||||
}
|
||||
},2000l);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,6 +78,7 @@ public class TaxiGrabOrderFragment extends BaseTaxiUIFragment implements View.On
|
||||
if (null != countDownTimer){
|
||||
countDownTimer.cancel();
|
||||
}
|
||||
VoiceNotice.stopCurrentTts();//中断当前在播语音
|
||||
getOchTaxiFragment().cancelNewBookingOrder();
|
||||
}else if (v.getId() == R.id.grab_order_tv){
|
||||
if (!mOrderGrabBt.getText().toString().equals("抢单中...")){
|
||||
|
||||
@@ -129,6 +129,14 @@ public class AutoPilotModeDialog extends Dialog {
|
||||
getContext().startActivity(new Intent(getContext(), AutopilotConfigActivity.class));
|
||||
}
|
||||
});
|
||||
findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
MessagePad.RouteInfo.Builder builder = MessagePad.RouteInfo.newBuilder();
|
||||
AdasManager.getInstance().sendAutoPilotModeReq(0, 0, builder.build());
|
||||
AutoPilotModeDialog.this.dismiss();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.recyclerview.widget.SimpleItemAnimator;
|
||||
|
||||
import com.google.protobuf.TextFormat;
|
||||
import com.mogo.telematic.MogoProtocolMsg;
|
||||
import com.mogo.telematic.NSDNettyManager;
|
||||
import com.mogo.telematic.client.listener.NettyClientListener;
|
||||
@@ -85,6 +86,7 @@ import com.zhidao.support.adas.high.OnAdasConnectStatusListener;
|
||||
import com.zhidao.support.adas.high.OnAdasListener;
|
||||
import com.zhidao.support.adas.high.OnMultiDeviceListener;
|
||||
import com.zhidao.support.adas.high.bean.AutopilotAbility;
|
||||
import com.zhidao.support.adas.high.bean.AutopilotStatistics;
|
||||
import com.zhidao.support.adas.high.bean.VersionCompatibility;
|
||||
import com.zhidao.support.adas.high.common.ByteUtil;
|
||||
import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS;
|
||||
@@ -403,7 +405,7 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
|
||||
|
||||
//初始化fragment
|
||||
manager = getSupportFragmentManager();
|
||||
|
||||
cb_print.setChecked(CupidLogUtils.isEnableLog());
|
||||
cb_print.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
@@ -839,13 +841,23 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
|
||||
for (SystemStatusInfo.HealthInfo healthInfo : ability.statusInfo.getHealthInfoList()) {
|
||||
if (healthInfo.getState() == SystemStatusInfo.HealthState.FAULT) {
|
||||
isAutopilotAbility = false;
|
||||
autopilotAbilityReason = healthInfo.getName() + " Topic异常";
|
||||
autopilotAbilityReason = healthInfo.getName() + " 节点异常";
|
||||
break;
|
||||
}
|
||||
}
|
||||
Log.i(TAG, "是否可以启动自动驾驶=" + isAutopilotAbility + " 原因=" + autopilotAbilityReason);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartAutopilotFailed(MogoReportMsg.MogoReportMessage message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotStatistics(AutopilotStatistics statistics) {
|
||||
Log.i(TAG, "启动自动驾驶状态=" + statistics.status + " 用时=" + statistics.usedTime + " SetAutopilotModeReq=" + TextFormat.printer().escapingNonAscii(false).printToString(statistics.req) + " failedMessage=" + (statistics.failedMessage == null ? null : TextFormat.printer().escapingNonAscii(false).printToString(statistics.failedMessage)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTrajectory(MessagePad.Header header, MessagePad.Trajectory trajectory) {
|
||||
Trajectory base = new Trajectory(header, trajectory, sdf);
|
||||
|
||||
@@ -4,7 +4,20 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/bg_adas_dialog">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatButton
|
||||
android:id="@+id/cancel"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:layout_toEndOf="@+id/title"
|
||||
android:background="@drawable/btn_bg"
|
||||
android:text="取消"
|
||||
android:textColor="@color/colorWhile"
|
||||
android:textSize="16dp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/title"
|
||||
app:layout_constraintEnd_toStartOf="@+id/title"
|
||||
app:layout_constraintTop_toTopOf="@+id/title" />
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
@@ -46,6 +46,7 @@ import com.zhidao.support.adas.high.AdasOptions;
|
||||
import com.zhidao.support.adas.high.OnAdasConnectStatusListener;
|
||||
import com.zhidao.support.adas.high.OnAdasListener;
|
||||
import com.zhidao.support.adas.high.bean.AutopilotAbility;
|
||||
import com.zhidao.support.adas.high.bean.AutopilotStatistics;
|
||||
import com.zhidao.support.adas.high.bean.VersionCompatibility;
|
||||
import com.zhidao.support.adas.high.common.Constants.IPC_CONNECTION_STATUS;
|
||||
import com.zhidao.support.adas.high.common.CupidLogUtils;
|
||||
@@ -810,4 +811,14 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
|
||||
public void onAutopilotAbility(AutopilotAbility ability) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartAutopilotFailed(MogoReportMsg.MogoReportMessage message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAutopilotStatistics(AutopilotStatistics statistics) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,11 +49,13 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPointCloudList
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager.invokeAutopilotRecordConfig
|
||||
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.autopilot.CallerStartAutopilotFailedListenerManager.invokeStartAutopilotFailed
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.zhidao.support.adas.high.AdasManager
|
||||
import com.zhidao.support.adas.high.OnAdasListener
|
||||
import com.zhidao.support.adas.high.bean.AutopilotAbility
|
||||
import com.zhidao.support.adas.high.bean.AutopilotStatistics
|
||||
import com.zhidao.support.adas.high.common.ProtocolStatus
|
||||
import com.zhjt.service.chain.ChainLog
|
||||
import com.zhjt.service.chain.TracingConstants.Endpoint.Companion.PAD
|
||||
@@ -436,9 +438,6 @@ class MoGoAdasListenerImpl : OnAdasListener {
|
||||
}
|
||||
|
||||
|
||||
override fun onError(status: ProtocolStatus, bytes: ByteArray) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否可以启动自动驾驶
|
||||
@@ -447,4 +446,36 @@ class MoGoAdasListenerImpl : OnAdasListener {
|
||||
override fun onAutopilotAbility(ability: AutopilotAbility?) {
|
||||
invokeAutopilotAbility(ability)
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动自动驾驶失败回调
|
||||
* 根据MAP 系统监控状态返回过滤
|
||||
* message.getMsg() 获取详细错误说明
|
||||
* message.getCode() 可用于判断属于什么类型
|
||||
*
|
||||
* @param message 数据
|
||||
*/
|
||||
override fun onStartAutopilotFailed(message: MogoReportMsg.MogoReportMessage?) {
|
||||
invokeStartAutopilotFailed(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动自动驾驶状态统计
|
||||
* 触发机制:下发启动自动驾驶命令,根据MAP返回状态判断成功或失败
|
||||
* 统计四种状态:成功 失败 取消 超时
|
||||
*
|
||||
* @param statistics 统计数据
|
||||
*/
|
||||
override fun onAutopilotStatistics(statistics: AutopilotStatistics?) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据解析失败、数据异常回调
|
||||
* @param status 错误原因
|
||||
* @param bytes 原始数据
|
||||
*/
|
||||
override fun onError(status: ProtocolStatus, bytes: ByteArray) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import com.mogo.eagle.core.data.map.MogoLatLng;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningListener;
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener;
|
||||
import com.mogo.eagle.core.function.api.map.smp.IMogoSmallMapProvider;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotManager;
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPlanningListenerManager;
|
||||
import com.mogo.eagle.core.function.map.R;
|
||||
import com.mogo.eagle.core.utilcode.util.UiThreadHandler;
|
||||
@@ -38,6 +39,7 @@ public class SmallMapFragment extends BaseFragment
|
||||
IMoGoAutopilotStatusListener {
|
||||
private final String TAG = "SmallMapFragment";
|
||||
protected SmallMapDirectionView mSmallMapDirectionView;
|
||||
private int autoPilotStatus = 0;
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
@@ -139,9 +141,13 @@ public class SmallMapFragment extends BaseFragment
|
||||
|
||||
@Override
|
||||
public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autoPilotStatusInfo) {
|
||||
if (autoPilotStatusInfo.getPilotmode() != 1) {
|
||||
int tempStatus = autoPilotStatusInfo.getPilotmode();
|
||||
if (tempStatus != 1) {
|
||||
clearPolyline();
|
||||
}else if (tempStatus == 0 && autoPilotStatus == 1){
|
||||
CallerAutoPilotManager.INSTANCE.getGlobalPath();
|
||||
}
|
||||
autoPilotStatus = tempStatus;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -172,7 +178,7 @@ public class SmallMapFragment extends BaseFragment
|
||||
for (MessagePad.Location routeModel : globalPathResp.getWayPointsList()) {
|
||||
latLngList.add(new MogoLatLng(routeModel.getLatitude(), routeModel.getLongitude()));
|
||||
}
|
||||
if (latLngList.size() > 0) {
|
||||
if (latLngList.size() > 0 && autoPilotStatus ==1) {
|
||||
drawablePolyline(latLngList);
|
||||
} else {
|
||||
clearPolyline();
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.mogo.eagle.core.function.api.autopilot
|
||||
|
||||
import com.zhidao.support.adas.high.bean.AutopilotAbility
|
||||
import mogo_msg.MogoReportMsg
|
||||
|
||||
|
||||
interface IMoGoStartAutopilotFailedListener {
|
||||
|
||||
/**
|
||||
* 启动自动驾驶失败回调
|
||||
* 根据MAP 系统监控状态返回过滤
|
||||
* message.getMsg() 获取详细错误说明
|
||||
* message.getCode() 可用于判断属于什么类型
|
||||
*
|
||||
* @param message 数据
|
||||
*/
|
||||
fun onStartAutopilotFailed(message: MogoReportMsg.MogoReportMessage?)
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.mogo.eagle.core.function.call.autopilot
|
||||
|
||||
import androidx.annotation.Nullable
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoStartAutopilotFailedListener
|
||||
import com.mogo.eagle.core.function.call.base.CallerBase
|
||||
import mogo_msg.MogoReportMsg
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
/**
|
||||
* 启动自动驾驶失败监听
|
||||
* 注册/取消注册
|
||||
*/
|
||||
object CallerStartAutopilotFailedListenerManager : CallerBase() {
|
||||
|
||||
private val M_START_AUTOPILOT_FAILED_LISTENER: ConcurrentHashMap<String, IMoGoStartAutopilotFailedListener> =
|
||||
ConcurrentHashMap()
|
||||
|
||||
/**
|
||||
* 添加监听
|
||||
* @param tag 标记,用来注销监听使用
|
||||
* @param listener 监听回调
|
||||
*/
|
||||
fun addListener(
|
||||
@Nullable tag: String,
|
||||
@Nullable listener: IMoGoStartAutopilotFailedListener
|
||||
) {
|
||||
if (M_START_AUTOPILOT_FAILED_LISTENER.containsKey(tag)) {
|
||||
return
|
||||
}
|
||||
M_START_AUTOPILOT_FAILED_LISTENER[tag] = listener
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除监听
|
||||
* @param tag 标记,用来注销监听使用
|
||||
*/
|
||||
fun removeListener(@Nullable tag: String) {
|
||||
if (!M_START_AUTOPILOT_FAILED_LISTENER.containsKey(tag)) {
|
||||
return
|
||||
}
|
||||
M_START_AUTOPILOT_FAILED_LISTENER.remove(tag)
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除监听
|
||||
* @param listener 要删除的监听对象
|
||||
*/
|
||||
fun removeListener(@Nullable listener: IMoGoStartAutopilotFailedListener) {
|
||||
M_START_AUTOPILOT_FAILED_LISTENER.forEach {
|
||||
if (it.value == listener) {
|
||||
M_START_AUTOPILOT_FAILED_LISTENER.remove(it.key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun invokeStartAutopilotFailed(message: MogoReportMsg.MogoReportMessage?) {
|
||||
M_START_AUTOPILOT_FAILED_LISTENER.forEach {
|
||||
val listener = it.value
|
||||
listener.onStartAutopilotFailed(message)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -85,7 +85,7 @@ MOGO_LOCATION_VERSION=1.4.3.26
|
||||
MOGO_TELEMATIC_VERSION=1.4.3.26
|
||||
######## MogoAiCloudSDK Version ########
|
||||
# 自研地图
|
||||
MAP_SDK_VERSION=2.7.0.9
|
||||
MAP_SDK_VERSION=2.7.0.10
|
||||
MAP_SDK_OPERATION_VERSION=1.1.3.5
|
||||
# websocket
|
||||
WEBSOCKET_VERSION=1.1.7
|
||||
|
||||
@@ -19,8 +19,10 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import com.zhidao.support.adas.high.bean.AutopilotStatistics;
|
||||
import com.zhidao.support.adas.high.bean.VersionCompatibility;
|
||||
import com.zhidao.support.adas.high.common.AutopilotAbilityManager;
|
||||
import com.zhidao.support.adas.high.common.AutopilotReview;
|
||||
import com.zhidao.support.adas.high.common.ByteUtil;
|
||||
import com.zhidao.support.adas.high.common.Constants;
|
||||
import com.zhidao.support.adas.high.common.CupidLogUtils;
|
||||
@@ -92,6 +94,10 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
|
||||
* 消息工厂
|
||||
*/
|
||||
private MyMessageFactory myMessageFactory;
|
||||
/**
|
||||
* 自动驾驶统计
|
||||
*/
|
||||
private AutopilotReview autopilotReview;
|
||||
/**
|
||||
* 工控机连接配置
|
||||
*/
|
||||
@@ -164,13 +170,26 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
|
||||
//原始数据解析类
|
||||
rawUnpack = new RawUnpack();
|
||||
rawPack = new RawPack();
|
||||
autopilotReview = new AutopilotReview(onAutopilotReviewListener);
|
||||
//消息工厂
|
||||
myMessageFactory = new MyMessageFactory();
|
||||
myMessageFactory = new MyMessageFactory(autopilotReview);
|
||||
//启用线程分发
|
||||
defaultDispatchHandler = new DispatchHandler(MessagePad.MessageType.MsgTypeDefault, this);//默认分发线程 不要添加到Map中
|
||||
initOtherDispatchHandler();
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动自动驾驶状态统计回调
|
||||
*/
|
||||
private final AutopilotReview.OnAutopilotReviewListener onAutopilotReviewListener = new AutopilotReview.OnAutopilotReviewListener() {
|
||||
@Override
|
||||
public void onReview(AutopilotStatistics statistics) {
|
||||
if (mAdasListener != null) {
|
||||
mAdasListener.onAutopilotStatistics(statistics);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 初始化其他分发线程
|
||||
*/
|
||||
@@ -757,6 +776,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
|
||||
if (routeInfo != null)
|
||||
builder.setRouteInfo(routeInfo);
|
||||
MessagePad.SetAutopilotModeReq req = builder.build();
|
||||
if (autopilotReview != null) autopilotReview.onAutopilotCommandTrigger(req);
|
||||
return sendPBMessage(MessageType.TYPE_SEND_SET_AUTOPILOT_MODE_REQ.typeCode, req.toByteArray());
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.zhidao.support.adas.high;
|
||||
|
||||
import com.zhidao.support.adas.high.bean.AutopilotAbility;
|
||||
import com.zhidao.support.adas.high.bean.AutopilotStatistics;
|
||||
import com.zhidao.support.adas.high.common.ProtocolStatus;
|
||||
|
||||
import chassis.VehicleStateOuterClass;
|
||||
@@ -179,13 +180,6 @@ public interface OnAdasListener {
|
||||
*/
|
||||
void onPlanningActionMsg(MessagePad.Header header, MessagePad.PlanningActionMsg planningActionMsg);
|
||||
|
||||
/**
|
||||
* 数据错误
|
||||
*
|
||||
* @param status 错误原因
|
||||
* @param bytes 原始数据
|
||||
*/
|
||||
void onError(ProtocolStatus status, byte[] bytes);
|
||||
|
||||
/**
|
||||
* 是否有能力启动自动驾驶
|
||||
@@ -193,4 +187,31 @@ public interface OnAdasListener {
|
||||
* @param ability 是否可以启动自动驾驶
|
||||
*/
|
||||
void onAutopilotAbility(AutopilotAbility ability);
|
||||
|
||||
/**
|
||||
* 启动自动驾驶失败回调
|
||||
* 根据MAP 系统监控状态返回过滤
|
||||
* message.getMsg() 获取详细错误说明
|
||||
* message.getCode() 可用于判断属于什么类型
|
||||
*
|
||||
* @param message 数据
|
||||
*/
|
||||
void onStartAutopilotFailed(MogoReportMsg.MogoReportMessage message);
|
||||
|
||||
/**
|
||||
* 启动自动驾驶状态统计
|
||||
* 触发机制:下发启动自动驾驶命令,根据MAP返回状态判断成功或失败
|
||||
* 统计四种状态:成功 失败 取消 超时
|
||||
*
|
||||
* @param statistics 统计数据
|
||||
*/
|
||||
void onAutopilotStatistics(AutopilotStatistics statistics);
|
||||
|
||||
/**
|
||||
* 数据错误
|
||||
*
|
||||
* @param status 错误原因
|
||||
* @param bytes 原始数据
|
||||
*/
|
||||
void onError(ProtocolStatus status, byte[] bytes);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.zhidao.support.adas.high.bean;
|
||||
|
||||
import com.zhidao.support.adas.high.common.Define;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
import mogo_msg.MogoReportMsg;
|
||||
|
||||
/**
|
||||
* 自动驾驶启动统计
|
||||
*/
|
||||
public class AutopilotStatistics {
|
||||
|
||||
/**
|
||||
* 启动自动驾驶后状态
|
||||
* 0 成功
|
||||
* 1 失败
|
||||
* 2 取消
|
||||
* 3 超时
|
||||
* {@link com.zhidao.support.adas.high.common.Constants.AUTOPILOT_START_STATUS}
|
||||
*/
|
||||
@Define.AutopilotStartStatus
|
||||
public final int status;
|
||||
|
||||
/**
|
||||
* 用时
|
||||
* 单位:ms
|
||||
*/
|
||||
public final long usedTime;
|
||||
|
||||
/**
|
||||
* 下发的启动自动驾驶命令
|
||||
*/
|
||||
public final MessagePad.SetAutopilotModeReq req;
|
||||
|
||||
/**
|
||||
* 失败的消息
|
||||
*/
|
||||
public final MogoReportMsg.MogoReportMessage failedMessage;
|
||||
|
||||
public AutopilotStatistics(@Define.AutopilotStartStatus int status, long usedTime, MessagePad.SetAutopilotModeReq req, MogoReportMsg.MogoReportMessage failedMessage) {
|
||||
this.status = status;
|
||||
this.usedTime = usedTime;
|
||||
this.req = req;
|
||||
this.failedMessage = failedMessage;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
package com.zhidao.support.adas.high.common;
|
||||
|
||||
import android.os.SystemClock;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.zhidao.support.adas.high.bean.AutopilotStatistics;
|
||||
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
import mogo_msg.MogoReportMsg;
|
||||
|
||||
/**
|
||||
* 自动驾驶状态检查/统计
|
||||
*/
|
||||
public class AutopilotReview {
|
||||
/**
|
||||
* 默认启动自驾超时时间
|
||||
*/
|
||||
private static final long DEFAULT_TIMEOUT = 15 * 1000L;
|
||||
|
||||
|
||||
private Timer timer;
|
||||
/**
|
||||
* 下发的启动自动驾驶命令
|
||||
*/
|
||||
public MessagePad.SetAutopilotModeReq startReq;
|
||||
private long startTime;//自动驾驶命令下发启动时间
|
||||
|
||||
/**
|
||||
* 失败的消息
|
||||
*/
|
||||
public MogoReportMsg.MogoReportMessage failedMessage;
|
||||
|
||||
private final OnAutopilotReviewListener listener;
|
||||
|
||||
public AutopilotReview(@NonNull OnAutopilotReviewListener listener) {
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
public interface OnAutopilotReviewListener {
|
||||
void onReview(AutopilotStatistics statistics);
|
||||
}
|
||||
|
||||
private void onCallback(@Define.AutopilotStartStatus int status) {
|
||||
stopTimer();
|
||||
long usedTime = SystemClock.elapsedRealtime() - startTime;
|
||||
if (listener != null) {
|
||||
listener.onReview(new AutopilotStatistics(status, usedTime, startReq, failedMessage));
|
||||
}
|
||||
startTime = 0;
|
||||
startReq = null;
|
||||
failedMessage = null;
|
||||
}
|
||||
|
||||
|
||||
private void startTimer() {
|
||||
if (timer == null) {
|
||||
timer = new Timer();
|
||||
timer.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
//超时
|
||||
onCallback(Constants.AUTOPILOT_START_STATUS.TIMEOUT);
|
||||
}
|
||||
}, DEFAULT_TIMEOUT);
|
||||
}
|
||||
}
|
||||
|
||||
private void stopTimer() {
|
||||
if (timer != null) {
|
||||
timer.cancel();
|
||||
timer = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 自动驾命令
|
||||
*
|
||||
* @param req 启动或停止
|
||||
*/
|
||||
public void onAutopilotCommandTrigger(MessagePad.SetAutopilotModeReq req) {
|
||||
if (req.getMode() == 1) {
|
||||
//启动自动驾驶
|
||||
startReq = req;
|
||||
startTime = SystemClock.elapsedRealtime();
|
||||
startTimer();
|
||||
} else {
|
||||
onCallback(Constants.AUTOPILOT_START_STATUS.CANCEL);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 监控报告状态 目前只用于自动驾驶失败结果
|
||||
*
|
||||
* @param message
|
||||
*/
|
||||
public void onReportResult(MogoReportMsg.MogoReportMessage message) {
|
||||
if (startReq != null && message != null) {
|
||||
failedMessage = message;
|
||||
onCallback(Constants.AUTOPILOT_START_STATUS.FAILED);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 自动驾驶状态 目前只用于自动驾驶成功结果
|
||||
*
|
||||
* @param state
|
||||
*/
|
||||
public void onAutopilotResult(MessagePad.AutopilotState state) {
|
||||
if (startReq != null && state != null && state.getState() == 2) {
|
||||
onCallback(Constants.AUTOPILOT_START_STATUS.SUCCESSFUL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -110,4 +110,26 @@ public class Constants {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动自动驾驶后的状态
|
||||
*/
|
||||
public interface AUTOPILOT_START_STATUS {
|
||||
/**
|
||||
* 成功
|
||||
*/
|
||||
int SUCCESSFUL = 0;
|
||||
/**
|
||||
* 失败
|
||||
*/
|
||||
int FAILED = 1;
|
||||
/**
|
||||
* 取消
|
||||
*/
|
||||
int CANCEL = 2;
|
||||
/**
|
||||
* 超时
|
||||
*/
|
||||
int TIMEOUT = 3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -46,4 +46,12 @@ public final class Define {
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface SubscribeType {
|
||||
}
|
||||
|
||||
@IntDef(flag = true, value = {Constants.AUTOPILOT_START_STATUS.SUCCESSFUL,
|
||||
Constants.AUTOPILOT_START_STATUS.FAILED,
|
||||
Constants.AUTOPILOT_START_STATUS.CANCEL,
|
||||
Constants.AUTOPILOT_START_STATUS.TIMEOUT})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface AutopilotStartStatus {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,12 +5,12 @@ package com.zhidao.support.adas.high.common;
|
||||
* 根据290消息定义编写
|
||||
*/
|
||||
public class MogoReport {
|
||||
private static final String RESULT_AUTOPILOT_SYSTEM_UNSTARTED = "RESULT_AUTOPILOT_SYSTEM_UNSTARTED";
|
||||
private static final String RESULT_AUTOPILOT_DISABLE = "RESULT_AUTOPILOT_DISABLE";
|
||||
private static final String RESULT_AUTOPILOT_INFERIOR = "RESULT_AUTOPILOT_INFERIOR";
|
||||
private static final String RESULT_REMOTEPILOT_DISABLE = "RESULT_REMOTEPILOT_DISABLE";
|
||||
private static final String RESULT_REMOTEPILOT_INFERIOR = "RESULT_REMOTEPILOT_INFERIOR";
|
||||
private static final String RESULT_SHOW_WARNING = "RESULT_SHOW_WARNING";
|
||||
public static final String RESULT_AUTOPILOT_SYSTEM_UNSTARTED = "RESULT_AUTOPILOT_SYSTEM_UNSTARTED";
|
||||
public static final String RESULT_AUTOPILOT_DISABLE = "RESULT_AUTOPILOT_DISABLE";
|
||||
public static final String RESULT_AUTOPILOT_INFERIOR = "RESULT_AUTOPILOT_INFERIOR";
|
||||
public static final String RESULT_REMOTEPILOT_DISABLE = "RESULT_REMOTEPILOT_DISABLE";
|
||||
public static final String RESULT_REMOTEPILOT_INFERIOR = "RESULT_REMOTEPILOT_INFERIOR";
|
||||
public static final String RESULT_SHOW_WARNING = "RESULT_SHOW_WARNING";
|
||||
|
||||
// private static final String RESULT_DISCONNECTED_WITH_PAD = "RESULT_DISCONNECTED_WITH_PAD";
|
||||
// private static final String RESULT_PAD_CANNOT_CONNECT_TELEMATICS = "RESULT_PAD_CANNOT_CONNECT_TELEMATICS";
|
||||
@@ -96,14 +96,14 @@ public class MogoReport {
|
||||
|
||||
}
|
||||
|
||||
private static final String ACTION_CONTACT_TECH_SUPPORT = "ACTION_CONTACT_TECH_SUPPORT";
|
||||
private static final String ACTION_CONTACT_MAINTENANCE = "ACTION_CONTACT_MAINTENANCE";
|
||||
private static final String ACTION_CONTACT_HARDWARE_ENGINEER = "ACTION_CONTACT_HARDWARE_ENGINEER";
|
||||
private static final String ACTION_REBOOT_PAD = "ACTION_REBOOT_PAD";
|
||||
private static final String ACTION_REBOOT_VEHICLE = "ACTION_REBOOT_VEHICLE";
|
||||
private static final String ACTION_CHECK_GEAR = "ACTION_CHECK_GEAR";
|
||||
private static final String ACTION_CHECK_NETWORK = "ACTION_CHECK_NETWORK";
|
||||
private static final String ACTION_TRY_AGAIN_LATER = "ACTION_TRY_AGAIN_LATER";
|
||||
public static final String ACTION_CONTACT_TECH_SUPPORT = "ACTION_CONTACT_TECH_SUPPORT";
|
||||
public static final String ACTION_CONTACT_MAINTENANCE = "ACTION_CONTACT_MAINTENANCE";
|
||||
public static final String ACTION_CONTACT_HARDWARE_ENGINEER = "ACTION_CONTACT_HARDWARE_ENGINEER";
|
||||
public static final String ACTION_REBOOT_PAD = "ACTION_REBOOT_PAD";
|
||||
public static final String ACTION_REBOOT_VEHICLE = "ACTION_REBOOT_VEHICLE";
|
||||
public static final String ACTION_CHECK_GEAR = "ACTION_CHECK_GEAR";
|
||||
public static final String ACTION_CHECK_NETWORK = "ACTION_CHECK_NETWORK";
|
||||
public static final String ACTION_TRY_AGAIN_LATER = "ACTION_TRY_AGAIN_LATER";
|
||||
|
||||
public enum Action {
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.os.SystemClock;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import com.zhidao.support.adas.high.AdasChannel;
|
||||
import com.zhidao.support.adas.high.OnAdasListener;
|
||||
import com.zhidao.support.adas.high.common.AutopilotReview;
|
||||
import com.zhidao.support.adas.high.common.CupidLogUtils;
|
||||
import com.zhidao.support.adas.high.protocol.RawData;
|
||||
|
||||
@@ -14,6 +15,11 @@ import mogo.telematics.pad.MessagePad;
|
||||
* 自动驾驶状态
|
||||
*/
|
||||
public class AutopilotStateMessage extends MyAbstractMessageHandler {
|
||||
private final AutopilotReview autopilotReview;
|
||||
|
||||
public AutopilotStateMessage(AutopilotReview autopilotReview) {
|
||||
this.autopilotReview = autopilotReview;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException {
|
||||
@@ -25,6 +31,9 @@ public class AutopilotStateMessage extends MyAbstractMessageHandler {
|
||||
if (adasListener != null) {
|
||||
adasListener.onAutopilotState(raw.getHeader(), autopilotState);
|
||||
}
|
||||
if (autopilotReview != null) {
|
||||
autopilotReview.onAutopilotResult(autopilotState);
|
||||
}
|
||||
AdasChannel.calculateTimeConsumingBusiness("自动驾驶状态", nowTime);
|
||||
// CupidLogUtils.e("自动驾驶状态--->" + autopilotState.toString());
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.zhidao.support.adas.high.msg;
|
||||
|
||||
import com.zhidao.support.adas.high.common.AutopilotReview;
|
||||
import com.zhidao.support.adas.high.common.MessageType;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
@@ -31,6 +32,11 @@ public class MyMessageFactory implements IMyMessageFactory {
|
||||
private IMsg recordDataConfigRespMessage;//数据采集配置应答
|
||||
private IMsg planningDecisionStateMessage;//planning决策状态
|
||||
|
||||
private final AutopilotReview autopilotReview;
|
||||
|
||||
public MyMessageFactory(AutopilotReview autopilotReview) {
|
||||
this.autopilotReview = autopilotReview;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMsg createMessage(MessagePad.MessageType messageType) {
|
||||
@@ -61,13 +67,13 @@ public class MyMessageFactory implements IMyMessageFactory {
|
||||
} else if (messageType == MessageType.TYPE_RECEIVE_AUTOPILOT_STATE.typeCode) {
|
||||
//自动驾驶状态
|
||||
if (autopilotStateMessage == null) {
|
||||
autopilotStateMessage = new AutopilotStateMessage();
|
||||
autopilotStateMessage = new AutopilotStateMessage(autopilotReview);
|
||||
}
|
||||
return autopilotStateMessage;
|
||||
} else if (messageType == MessageType.TYPE_RECEIVE_REPORT_MESSAGE.typeCode) {
|
||||
//监控事件报告
|
||||
if (reportMessage == null) {
|
||||
reportMessage = new ReportMessage();
|
||||
reportMessage = new ReportMessage(autopilotReview);
|
||||
}
|
||||
return reportMessage;
|
||||
} else if (messageType == MessageType.TYPE_RECEIVE_PERCEPTION_TRAFFIC_LIGHT.typeCode) {
|
||||
|
||||
@@ -5,15 +5,24 @@ import android.os.SystemClock;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import com.zhidao.support.adas.high.AdasChannel;
|
||||
import com.zhidao.support.adas.high.OnAdasListener;
|
||||
import com.zhidao.support.adas.high.common.AutopilotReview;
|
||||
import com.zhidao.support.adas.high.common.CupidLogUtils;
|
||||
import com.zhidao.support.adas.high.common.MogoReport;
|
||||
import com.zhidao.support.adas.high.protocol.RawData;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import mogo_msg.MogoReportMsg;
|
||||
|
||||
/**
|
||||
* 监控事件报告
|
||||
* 监控事件报告回调
|
||||
*/
|
||||
public class ReportMessage extends MyAbstractMessageHandler {
|
||||
private final AutopilotReview autopilotReview;
|
||||
|
||||
public ReportMessage(AutopilotReview autopilotReview) {
|
||||
this.autopilotReview = autopilotReview;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handlerMsg(RawData raw, OnAdasListener adasListener) throws InvalidProtocolBufferException {
|
||||
@@ -23,8 +32,18 @@ public class ReportMessage extends MyAbstractMessageHandler {
|
||||
if (CupidLogUtils.isEnableLog())
|
||||
nowTime = SystemClock.elapsedRealtime();
|
||||
if (adasListener != null) {
|
||||
adasListener.onReportMessage(raw.getHeader(), mogoReportMessage);
|
||||
adasListener.onReportMessage(raw.getHeader(), mogoReportMessage);//监控报告回调
|
||||
}
|
||||
AdasChannel.calculateTimeConsumingBusiness("监控事件报告", nowTime);
|
||||
//分发自动驾驶启动失败相关回调
|
||||
List<String> results = mogoReportMessage.getResultList();
|
||||
if (!results.isEmpty() && results.contains(MogoReport.RESULT_AUTOPILOT_DISABLE)) {
|
||||
if (adasListener != null) {
|
||||
adasListener.onStartAutopilotFailed(mogoReportMessage);//启动自动驾驶失败回调
|
||||
}
|
||||
if (autopilotReview != null) {
|
||||
autopilotReview.onReportResult(mogoReportMessage);//统计启动自动驾驶失败原因
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user