+ * {@link com.mogo.service.adas.MogoADASWarnType} + */ + public int type; + public String value; +} diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java index 5b3257652f..00b528d062 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/IMogoStatusManager.java @@ -10,6 +10,12 @@ import com.alibaba.android.arouter.facade.template.IProvider; */ public interface IMogoStatusManager extends IProvider { + /** + * 是否在vr模式 + * @return true - 在vr模式 false - 不在vr模式 + */ + boolean isVrMode(); + /** * 小智语音 UI 是否在展示 * @@ -110,6 +116,13 @@ public interface IMogoStatusManager extends IProvider { */ boolean isMainPageLaunched(); + /** + * 设置vrMode状态 + * @param tag 业务类型 + * @param vrMode true - 在vr模式 false 不在vr模式 + */ + void setVrMode(String tag, boolean vrMode); + /** * 设置小智语音UI状态 * diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java index 2acf766c45..b937757810 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/statusmanager/StatusDescriptor.java @@ -78,5 +78,9 @@ public enum StatusDescriptor { /** * 是否已经进入过主页 */ - MAIN_PAGE_CREATED; + MAIN_PAGE_CREATED, + /** + * 是否已经进入vr模式 + */ + VR_MODE } diff --git a/services/mogo-service/build.gradle b/services/mogo-service/build.gradle index ce79eb0acb..4486370e37 100644 --- a/services/mogo-service/build.gradle +++ b/services/mogo-service/build.gradle @@ -42,7 +42,7 @@ dependencies { annotationProcessor rootProject.ext.dependencies.aroutercompiler implementation rootProject.ext.dependencies.adasapi implementation rootProject.ext.dependencies.adasconfigapi - implementation "com.zhidao.support.adas:high:1.1.4.4" + implementation "com.zhidao.support.adas:high:1.1.4.6" if (Boolean.valueOf(RELEASE)) { api rootProject.ext.dependencies.mogomap implementation rootProject.ext.dependencies.mogomapapi diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java new file mode 100644 index 0000000000..008b89b892 --- /dev/null +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/AdasObjectUtils.java @@ -0,0 +1,77 @@ +package com.mogo.service.impl.adas; + +import com.mogo.commons.utils.MortonCode; +import com.mogo.service.adas.entity.ADASRecognizedResult; +import com.mogo.service.adas.entity.ADASWarnMessage; +import com.zhidao.support.adas.high.bean.RectInfo; +import com.zhidao.support.adas.high.bean.WarnMessageInfo; + +import java.util.ArrayList; +import java.util.List; + +public +/** + * @author congtaowang + * @since 2020/10/25 + * + * 对象转换类 + */ +class AdasObjectUtils { + + public static ADASWarnMessage fromAdasObject( WarnMessageInfo info ) { + if ( info == null ) { + return null; + } + ADASWarnMessage warnMessage = new ADASWarnMessage(); + warnMessage.content = info.getContent(); + warnMessage.level = info.getLevel(); + try { + warnMessage.type = Integer.valueOf( info.getType() ); + } catch ( NumberFormatException e ) { + return null; + } + warnMessage.value = info.getValue(); + return warnMessage; + } + + public static List< ADASRecognizedResult > fromAdasObject( RectInfo rectInfo ) { + if ( rectInfo == null + || rectInfo.getModels() == null + || rectInfo.getModels().isEmpty() ) { + return null; + } + + List< ADASRecognizedResult > recognizedResults = new ArrayList<>(); + for ( RectInfo.RectBean model : rectInfo.getModels() ) { + try { + ADASRecognizedResult result = fromAdasObject( model ); + if ( result != null ) { + recognizedResults.add( result ); + } + } catch ( Exception e ) { + e.printStackTrace(); + } + } + return recognizedResults; + } + + public static ADASRecognizedResult fromAdasObject( RectInfo.RectBean rectBean ) { + if ( rectBean == null ) { + return null; + } + ADASRecognizedResult result = new ADASRecognizedResult(); + result.uuid = rectBean.getUuid(); + result.lat = rectBean.getLat(); + result.lon = rectBean.getLon(); + result.type = Integer.valueOf( rectBean.getType() ); + result.heading = rectBean.getHeading(); + result.systemTime = Long.valueOf( rectBean.getSystemTime() ); + result.satelliteTime = Long.valueOf( rectBean.getSatelliteTime() ); + result.alt = rectBean.getAlt(); + result.color = rectBean.getColor(); + result.speed = rectBean.getSpeed(); + result.cardId = rectBean.getCarId(); + result.mortonCode = MortonCode.encodeMorton( result.lon, result.lat ); + return result; + } +} diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java index 4cb272b3d3..8ed426c02b 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/adas/MogoADASController.java @@ -13,7 +13,10 @@ import com.mogo.module.common.utils.CarSeries; import com.mogo.service.MogoServicePaths; import com.mogo.service.adas.IMogoADASController; import com.mogo.service.adas.IMogoAdasDataCallback; +import com.mogo.service.adas.IMogoAdasWarnMessageCallback; import com.mogo.service.adas.RemoteControlAutoPilotParameters; +import com.mogo.service.adas.entity.ADASRecognizedResult; +import com.mogo.service.adas.entity.ADASWarnMessage; import com.mogo.service.impl.singleton.SingletonsHolder; import com.mogo.service.statusmanager.IMogoStatusManager; import com.mogo.utils.UiThreadHandler; @@ -36,7 +39,9 @@ import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import static com.mogo.module.common.utils.SPConst.getSpGuide; @@ -65,7 +70,18 @@ public class MogoADASController implements IMogoADASController { private boolean mIsReleased = true; - private List< IMogoAdasDataCallback > mAdasDataCallbackList = new ArrayList<>(); + /** + * 获取adas前车距离 + */ + private List< IMogoAdasDataCallback > mAdasDataCallbackList = new CopyOnWriteArrayList<>(); + + /** + * adas 报警数据回调 + */ + private List< IMogoAdasWarnMessageCallback > mMogoAdasWarnMessageCallbackList = new CopyOnWriteArrayList<>(); + + + private RectInfo mLastFrameData; private OnAdasListener mOnAdasListener = new OnAdasListenerAdapter() { @@ -73,16 +89,35 @@ public class MogoADASController implements IMogoADASController { public void onRectData( RectInfo rectInfo ) { // 物体识别返回 Logger.d( TAG, "onRectData = %s", rectInfo.toString() ); + mLastFrameData = rectInfo; } @Override public void onWarnMessage( WarnMessageInfo warnMessageInfo ) { + if ( warnMessageInfo == null ) { + return; + } // 警告消息 Logger.d( TAG, "onWarnMessage = %s", warnMessageInfo.toString() ); + if ( mMogoAdasWarnMessageCallbackList.isEmpty() ) { + return; + } + final ADASWarnMessage warnMessage = AdasObjectUtils.fromAdasObject( warnMessageInfo ); + if ( warnMessage == null ) { + return; + } + UiThreadHandler.post( () -> { + Iterator< IMogoAdasWarnMessageCallback > iMogoAdasWarnMessageCallbackIterator = mMogoAdasWarnMessageCallbackList.iterator(); + while ( iMogoAdasWarnMessageCallbackIterator.hasNext() ) { + IMogoAdasWarnMessageCallback callback = iMogoAdasWarnMessageCallbackIterator.next(); + if ( callback != null ) { + callback.onReceiveData( warnMessage ); + } + } + } ); } }; - private MyMessageFactory mAdasMessageFactory; private IAutopolitDataCallBack mAutoPilotDataCallBack = new IAutopolitDataCallBack() { @Override @@ -297,11 +332,44 @@ public class MogoADASController implements IMogoADASController { @Override public void addAdasDataCallback( IMogoAdasDataCallback callback ) { - + if ( callback == null ) { + return; + } + if ( !mAdasDataCallbackList.contains( callback ) ) { + mAdasDataCallbackList.add( callback ); + } } @Override public void removeAdasDataCallback( IMogoAdasDataCallback callback ) { + if ( callback == null ) { + return; + } + mAdasDataCallbackList.remove( callback ); + } + @Override + public void addAdasWarnMessageCallback( IMogoAdasWarnMessageCallback callback ) { + if ( callback == null ) { + return; + } + if ( !mMogoAdasWarnMessageCallbackList.contains( callback ) ) { + mMogoAdasWarnMessageCallbackList.add( callback ); + } + } + + @Override + public void removeAdasWarnMessageCallback( IMogoAdasWarnMessageCallback callback ) { + if ( callback == null ) { + return; + } + mMogoAdasWarnMessageCallbackList.remove( callback ); + } + + @Override + public List< ADASRecognizedResult > getLastADASRecognizedResult() { + RectInfo rectInfo = mLastFrameData; + List< ADASRecognizedResult > recognizedResultList = AdasObjectUtils.fromAdasObject( rectInfo ); + return recognizedResultList; } } diff --git a/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java b/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java index 43eb1b4769..a3eb6f93f2 100644 --- a/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java +++ b/services/mogo-service/src/main/java/com/mogo/service/impl/statusmanager/MogoStatusManager.java @@ -49,6 +49,11 @@ public class MogoStatusManager implements IMogoStatusManager { return get_bool_val( StatusDescriptor.VOICE_UI ); } + @Override + public boolean isVrMode() { + return get_bool_val(StatusDescriptor.VR_MODE); + } + @Override public boolean isADASShow() { return get_bool_val( StatusDescriptor.ADAS_UI ); @@ -127,6 +132,11 @@ public class MogoStatusManager implements IMogoStatusManager { return val == null ? false : val; } + @Override + public void setVrMode(String tag, boolean vrMode) { + doSetStatus(tag, StatusDescriptor.VR_MODE, vrMode); + } + @Override public void setVoiceUIShow( String tag, boolean show ) { doSetStatus( tag, StatusDescriptor.VOICE_UI, show );