diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MoGoObuProvider.java b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MoGoObuProvider.java index 8b788ea60f..f15be35c0e 100644 --- a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MoGoObuProvider.java +++ b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MoGoObuProvider.java @@ -19,7 +19,8 @@ public class MoGoObuProvider implements IMoGoObuProvider { public void init(Context context) { Logger.d(MogoObuConst.TAG_MOGO_OBU, "初始化蘑菇自研OBU……"); - MogoPrivateObuManager.getInstance().init(context); +// MogoPrivateObuManager.getInstance().init(context); + MogoPrivateObuManager.Companion.getINSTANCE().init(context); } diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoObuConst.java b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoObuConst.java index f687a4de0c..64dcd4da97 100644 --- a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoObuConst.java +++ b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoObuConst.java @@ -16,24 +16,32 @@ public class MogoObuConst { * 前碰撞预警 */ public static final int TYPE_FRONT_COLLISION_WARNING = 101; + public static final String TYPE_FRONT_COLLISION_WARNING_TEXT = "前车碰撞预警"; + public static final String TYPE_FRONT_COLLISION_WARNING_VOICE_TEXT = "前车碰撞预警"; /** * 交叉路口碰撞预警 */ public static final int TYPE_CROSS_COLLISION_WARNING = 102; + public static final String TYPE_CROSS_COLLISION_WARNING_TEXT = "交叉路口碰撞预警"; + public static final String TYPE_CROSS_COLLISION_WARNING_VOICE_TEXT = "注意交叉路口车辆"; /** * 左转辅助 */ public static final int TYPE_TURN_LEFT_WARN = 103; + public static final String TYPE_TURN_LEFT_WARN_TEXT = "左转碰撞预警"; + public static final String TYPE_TURN_LEFT_WARN_VOICE_TEXT = "注意左前车辆"; /** - * 盲区预警 + * 盲区预警 -1 */ public static final int TYPE_BLIND_ASSIST_WARN = 104; + public static final String TYPE_BLIND_ASSIST_WARN_TEXT = "盲区碰撞预警"; + public static final String TYPE_BLIND_ASSIST_WARN_VOICE_TEXT = "注意左后车辆/注意右后车辆"; /** - * 变道预警 + * 变道预警 -2 */ public static final int TYPE_CHANGE_LANES_WARN = 105; @@ -41,62 +49,80 @@ public class MogoObuConst { * 逆向超车预警 */ public static final int TYPE_REVERSE_OVERTAKING_WARN = 106; + public static final String TYPE_REVERSE_OVERTAKING_WARN_TEXT = "逆向超车预警"; + public static final String TYPE_REVERSE_OVERTAKING_WARN_VOICE_TEXT = "注意逆向车道车辆"; /** - * 紧急制动预警 + * 紧急制动预警/前车急刹 */ public static final int TYPE_URGENCY_COLLISION_WARNING = 107; + public static final String TYPE_URGENCY_COLLISION_WARNING_TEXT = "前车急刹车"; + public static final String TYPE_URGENCY_COLLISION_WARNING_VOICE_TEXT = "前车急刹车"; /** - * 异常车辆预警 + * 异常车辆预警 -1 */ public static final int TYPE_UNUSUAL_CAR_WARN = 108; + public static final String TYPE_UNUSUAL_CAR_WARN_TEXT = "前车异常"; + public static final String TYPE_UNUSUAL_CAR_WARN_VOICE_TEXT = "前车异常"; + /** - * 车辆失控预警 + * 车辆失控预警 -1 */ public static final int TYPE_CAR_OUT_OF_CONTROL_WARN = 109; + public static final String TYPE_CAR_OUT_OF_CONTROL_WARN_TEXT = "前车失控预警"; + public static final String TYPE_CAR_OUT_OF_CONTROL_WARN_VOICE_TEXT = "前车失控预警"; /** - * 限速预警 + * 限速预警 -1 ? */ public static final int TYPE_LIMIT_SPEED_WARN = 110; + public static final String TYPE_LIMIT_SPEED_WARN_TEXT = "用户已超速"; + public static final String TYPE_LIMIT_SPEED_WARN_VOICE_TEXT = "前车失控预警"; + /** - * 闯红灯预警 + * 闯红灯预警 ? */ public static final int TYPE_RUSH_RED_LIGHT = 111; /** - * 行人碰撞预警 + * 行人/摩托车 碰撞预警 -1 根据类型判断 */ public static final int TYPE_ROAD_USER_COLLISION_WARNING = 112; + /** - * 绿波车速引导 + * 绿波车速引导 -1? */ public static final int TYPE_OPTIMAL_SPEED_ADVISORY = 113; /** - * 道路危险情况预警 + * 道路危险情况预警 -1 */ public static final int TYPE_UNUSUAL_ROAD_WARN = 114; + public static final String TYPE_UNUSUAL_ROAD_WARN_TEXT = "道路危险情况预警"; + public static final String TYPE_UNUSUAL_ROAD_WARN_VOICE_TEXT = "前方路况危险"; /** - * 交通标牌提示 + * 交通标牌提示 ? */ public static final int TYPE_TRAFFIC_SIGN_INFO = 115; /** - * 前方拥堵提醒 + * 前方拥堵提醒 ? */ public static final int TYPE_BLOCK_WARN = 116; + public static final String TYPE_BLOCK_WARN_TEXT = "前方道路拥堵"; + public static final String TYPE_BLOCK_WARN_VOICE_TEXT = "前方X米道路拥堵,请减速慢行"; /** * 紧急车辆提示预警 */ public static final int TYPE_PRESSING_CAR_WARN = 117; - + public static final String TYPE_PRESSING_CAR_WARN_TEXT = "请避让特种车辆"; + public static final String TYPE_PRESSING_CAR_WARN_VOICE_TEXT = "后方存在特殊车辆,请安排避让"; diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.java b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.java deleted file mode 100644 index e44d10af5c..0000000000 --- a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.java +++ /dev/null @@ -1,292 +0,0 @@ -package com.mogo.module.obu.mogo; - -import android.content.Context; - -import com.mogo.module.common.entity.V2XMessageEntity; -import com.mogo.module.common.entity.V2XObuEventEntity; -import com.mogo.service.adas.entity.ADASRecognizedResult; -import com.mogo.utils.logger.Logger; -import com.zhidao.support.obu.MogoObuManager; -import com.zhidao.support.obu.OnMogoObuListener; -import com.zhidao.support.obu.constants.ObuConstants; -import com.zhidao.support.obu.model.CvxAppInitIndInfo; -import com.zhidao.support.obu.model.CvxHvCarIndInfo; -import com.zhidao.support.obu.model.CvxHvInfoIndInfo; -import com.zhidao.support.obu.model.CvxRvInfoIndInfo; -import com.zhidao.support.obu.model.CvxSetConfigCfmInfo; -import com.zhidao.support.obu.model.CvxV2vThreatIndInfo; - -import java.util.ArrayList; -import java.util.List; - -import static com.mogo.module.obu.mogo.MogoObuConst.TAG_MOGO_OBU; - - -/** - * obu数据管理类封装 - * - * @author lixiaopeng - */ -public class MogoPrivateObuManager { - final String icw_data = "02000114010000000000001effd7892b11a4440af70100142a03000907e506100e2917019000005662010a45000b0000220847162c000037970010000a17f6215c459478b6010347ac045000090a0006012c01f4009600080073007300730073000b000000000000000000000000000000002b000037780000247300003261000000000000426c827f47001200100000000000000000000021220000349a006c0010000a17f63ecb45947ba301030000332c0010000a17f642e945947bea010300004d580010000a17f6435545947e4e0103000054c40010000a17f6413a45947f96010300005c300010000a17f62c2845947d140103000070e40010000a17f5fdb14594786001030000992000060004ffec2710"; - - private List resultList = null; - - private MogoPrivateObuManager() { - } - - private volatile static MogoPrivateObuManager instance = null; - - public static MogoPrivateObuManager getInstance() { - if (instance == null) { - synchronized (MogoPrivateObuManager.class) { - if (instance == null) { - instance = new MogoPrivateObuManager(); - } - } - } - return instance; - } - - public void init(Context context) { - Logger.d(TAG_MOGO_OBU, "obuManager初始化--"); - - //自研obu - MogoObuManager.getInstance().init(context); - MogoObuManager.getInstance().connect("192.168.1.199"); - MogoObuManager.getInstance().registerListener(mogoObuListener); - - //TODO 测试 -// UiThreadHandler.postDelayed( () -> { -//// MogoObuManager.getInstance().test(icw_data); -// MarkerServiceHandler.getApis().getV2XListenerManager().warningChangedForListenerWithDirection(3, MogoReceiver.ACTION_V2X_FRONT_WARNING); -// handleSdkObu(105); -// -// }, 5_000L ); - - } - - private OnMogoObuListener mogoObuListener = new OnMogoObuListener() { - @Override - public void onConnected() { - //OBU连接成功 - Logger.d(TAG_MOGO_OBU, "onConnected ------> "); - } - - @Override - public void onConnectFail(boolean isNeedReconnect) { - Logger.d(TAG_MOGO_OBU, "onConnectFail ------> "); - //OBU连接失败 - } - - @Override - public void onDisconnect() { - Logger.d(TAG_MOGO_OBU, "onDisconnect ------> "); - //OBU断开连接 - } - - @Override - public void onReceiveOriginData(String data) { - super.onReceiveOriginData(data); - Logger.d(TAG_MOGO_OBU, "onReceiveOriginData ------> data = " + data); - //接收到的原始数据 - } - - @Override - public void onSendData(byte[] bytes) { - super.onSendData(bytes); - //发送的数据 - Logger.d(TAG_MOGO_OBU, "onSendData ------> "); - } - - @Override - public void onCvxAppInitIndInfo(CvxAppInitIndInfo info) { - super.onCvxAppInitIndInfo(info); - Logger.d(TAG_MOGO_OBU, "onCvxAppInitIndInfo ------> " + info.toString()); - //CV2X系统信息 - } - - @Override - public void onCvxSetConfigCfm(CvxSetConfigCfmInfo info) { - super.onCvxSetConfigCfm(info); - Logger.d(TAG_MOGO_OBU, "onCvxSetConfigCfm ------> " + info.toString()); - //设置CV2X系统的配置确认 - } - - @Override - public void onCvxHvCarIndInfo(CvxHvCarIndInfo info) { - //主车车辆信息 - Logger.d(TAG_MOGO_OBU, "onCvxHvCarIndInfo ------> " + info.toString()); - } - - @Override - public void onCvxHvInfoIndInfo(CvxHvInfoIndInfo info) { - //主车信息 - } - - @Override - public void onCvxRvInfoIndInfo(CvxRvInfoIndInfo info) { - //远车信息, - Logger.d(TAG_MOGO_OBU, "onCvxRvInfoIndInfo ------> " + info.toString()); - } - - //TODO 他车是否一直出现 - @Override - public void onCvxV2vThreatIndInfo(CvxV2vThreatIndInfo info) { - //预警信息,预警类型 threat_level 3 - if (info != null) { - Logger.e(TAG_MOGO_OBU, "onCvxV2vThreatIndInfo ------> " + info.toString()); - if (info.getThreat_info() != null) { - if (info.getThreat_info().getThreat_level() == 2 || - info.getThreat_info().getThreat_level() == 3) { - //预警方位 - int direction = info.getExt_info().getTarget_classification(); - - //显示警告弹框 TODO -// MarkerServiceHandler.getApis().getV2XListenerManager().warningChangedForListenerWithDirection(getMessage(direction), MogoReceiver.ACTION_V2X_FRONT_WARNING); - - //处理预警类型 - int appId = info.getThreat_info().getApp_id(); - Logger.d(TAG_MOGO_OBU, "direction = " + direction + "----" + getMessage(direction) + "--appId = " + appId); - handleSdkObu(getEventType(appId)); - } - - //预警数据的组装,车辆实时移动和变色 TODO 这里需要obu提供他车列表 暂时不做 -// AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult(getResultList(info)); - - } else { - Logger.e(TAG_MOGO_OBU, "info == null "); - } - } - } - }; - - - private int getMessage(int targetClassification) { - switch (targetClassification) { - case ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_IN_LANE: - case ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_LEFT: - case ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_RIGHT: - case ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_FAR_LEFT: - case ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_FAR_RIGHT: - return 1; - - case ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_IN_LANE: - case ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_LEFT: - case ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_RIGHT: - case ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_FAR_LEFT: - case ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_FAR_RIGHT: - return 2; - - case ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_IN_LANE: - case ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_LEFT: - case ObuConstants.TARGET_CLASSIFICATION.TC_INTERSECTION_LEFT: - case ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_FAR_LEFT: - return 3; - - case ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_RIGHT: - case ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_FAR_RIGHT: - case ObuConstants.TARGET_CLASSIFICATION.TC_INTERSECTION_RIGHT: - return 4; - default: - case ObuConstants.TARGET_CLASSIFICATION.TC_UNCLASSIFIED: - return 1; - } - } - - private int getEventType(int appid) { - if (appid == ObuConstants.USE_CASE_ID.EBW) { //紧急制动 - return MogoObuConst.TYPE_URGENCY_COLLISION_WARNING; - } else if (appid == ObuConstants.USE_CASE_ID.ICW) { //交叉路口碰撞预警 - return MogoObuConst.TYPE_CROSS_COLLISION_WARNING; - } else if (appid == ObuConstants.USE_CASE_ID.LTA) {//左转辅助 - return MogoObuConst.TYPE_TURN_LEFT_WARN; - } else if (appid == ObuConstants.USE_CASE_ID.BSW) { //盲区预警 - return MogoObuConst.TYPE_BLIND_ASSIST_WARN; - } else if (appid == ObuConstants.USE_CASE_ID.LCW) { //变道预警 - return MogoObuConst.TYPE_CHANGE_LANES_WARN; - } else if (appid == ObuConstants.USE_CASE_ID.DNPW) { //逆向超车预警 - return MogoObuConst.TYPE_REVERSE_OVERTAKING_WARN; - } else if (appid == ObuConstants.USE_CASE_ID.FCW) { //前向碰撞预警 - return MogoObuConst.TYPE_FRONT_COLLISION_WARNING; - } else if (appid == ObuConstants.USE_CASE_ID.AVW) { //异常车辆预警 - return MogoObuConst.TYPE_UNUSUAL_CAR_WARN; - } else if (appid == ObuConstants.USE_CASE_ID.CLW) { //车辆失控预警 - return MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN; - } else if (appid == ObuConstants.USE_CASE_ID.SLW) { //限速预警 - return MogoObuConst.TYPE_LIMIT_SPEED_WARN; - } else if (appid == ObuConstants.USE_CASE_ID.LTA) { //闯红灯预警 --- - return MogoObuConst.TYPE_RUSH_RED_LIGHT; - } else if (appid == ObuConstants.USE_CASE_ID.VRUCW) { //行人碰撞预警 --- - return MogoObuConst.TYPE_ROAD_USER_COLLISION_WARNING; - } else if (appid == ObuConstants.USE_CASE_ID.LTA) { //绿波车速引导 --- - return MogoObuConst.TYPE_OPTIMAL_SPEED_ADVISORY; - } else if (appid == ObuConstants.USE_CASE_ID.HLW) { //道路危险情况预警 - return MogoObuConst.TYPE_UNUSUAL_ROAD_WARN; - } else if (appid == ObuConstants.USE_CASE_ID.IVS) { //交通标牌提示 - return MogoObuConst.TYPE_TRAFFIC_SIGN_INFO; - } else if (appid == ObuConstants.USE_CASE_ID.TJW) { //前方拥堵提醒 - return MogoObuConst.TYPE_BLOCK_WARN; - } else if (appid == ObuConstants.USE_CASE_ID.EVW) { //紧急车辆提示预警 - return MogoObuConst.TYPE_PRESSING_CAR_WARN; - } - - return 0; - } - - private List getResultList(CvxV2vThreatIndInfo info) { - if (resultList == null) { - resultList = new ArrayList<>(); - } - - ADASRecognizedResult adasRecognizedResult = new ADASRecognizedResult(); - adasRecognizedResult.uuid = info.getVehicle_id(); - if (info.getBasic_info() != null && info.getBasic_info().getPosition() != null) { - adasRecognizedResult.lat = info.getBasic_info().getPosition().getLatitude(); - adasRecognizedResult.lon = info.getBasic_info().getPosition().getLongitude(); - } - adasRecognizedResult.type = 3; //小轿车 - adasRecognizedResult.heading = info.getBasic_info().getHeading(); - adasRecognizedResult.speed = info.getBasic_info().getSpeed(); - - resultList.add(adasRecognizedResult); - - return resultList; - - } - - public void release() { - MogoObuManager.getInstance().unregisterListener(); - } - - - /** - * 构造对应展示数据和场景 根据obu的场景,add change delete确定是否展示 - * - * @param type TODO - */ - private void handleSdkObu(int type) { - V2XMessageEntity messageEntity = new V2XMessageEntity<>(); - messageEntity.setType(V2XMessageEntity.V2XTypeEnum.ALERT_OBU_EVENT); - - V2XObuEventEntity urgencyEvent = new V2XObuEventEntity(); - if (type == MogoObuConst.TYPE_CROSS_COLLISION_WARNING) { //交叉路口碰撞预警 - urgencyEvent.setType(MogoObuConst.TYPE_CROSS_COLLISION_WARNING); -// urgencyEvent.setDesc(V2XObuEventScenario.URGENCY_CROING_WARN_TEXT); - } else if (type == MogoObuConst.TYPE_URGENCY_COLLISION_WARNING) { // 前车紧急制动预警 - urgencyEvent.setType(MogoObuConst.TYPE_URGENCY_COLLISION_WARNING); -// urgencyEvent.setDesc(V2XObuEventScenario.URGENCY_COLLISION_WARN_TEXT); - } else { //TODO -// urgencyEvent.setType(ObuConstant.TYPE_URGENCY_COLLISION_WARNING); -// urgencyEvent.setDesc(V2XObuEventScenario.URGENCY_COLLISION_WARN_TEXT); - } - -// messageEntity.setContent(urgencyEvent); -// V2XObuEventScenario.getInstance().init(messageEntity); - - - // - } - - -} \ No newline at end of file diff --git a/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt new file mode 100644 index 0000000000..26af29d42e --- /dev/null +++ b/modules/mogo-module-obu-mogo/src/main/java/com/mogo/module/obu/mogo/MogoPrivateObuManager.kt @@ -0,0 +1,242 @@ +package com.mogo.module.obu.mogo + +import android.content.Context +import com.alibaba.android.arouter.launcher.ARouter +import com.mogo.service.IMogoServiceApis +import com.mogo.service.MogoServicePaths +import com.mogo.service.adas.entity.ADASRecognizedResult +import com.mogo.service.warning.IMoGoWaringProvider +import com.mogo.utils.logger.Logger +import com.zhidao.support.obu.MogoObuManager +import com.zhidao.support.obu.OnMogoObuListener +import com.zhidao.support.obu.constants.ObuConstants +import com.zhidao.support.obu.model.* +import java.util.* + +/** + * @description + * + * @author lixiaopeng + * @since 2021/8/8 + */ +class MogoPrivateObuManager private constructor() { + companion object { + val INSTANCE : MogoPrivateObuManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + MogoPrivateObuManager() + } + } + + private var resultList: MutableList? = null + private var mMogoServiceApis: IMogoServiceApis? = null + private var mIMoGoWaringProvider: IMoGoWaringProvider? = null + val icw_data = "02000114010000000000001effd7892b11a4440af70100142a03000907e506100e2917019000005662010a45000b0000220847162c000037970010000a17f6215c459478b6010347ac045000090a0006012c01f4009600080073007300730073000b000000000000000000000000000000002b000037780000247300003261000000000000426c827f47001200100000000000000000000021220000349a006c0010000a17f63ecb45947ba301030000332c0010000a17f642e945947bea010300004d580010000a17f6435545947e4e0103000054c40010000a17f6413a45947f96010300005c300010000a17f62c2845947d140103000070e40010000a17f5fdb14594786001030000992000060004ffec2710" + + + fun init(context: Context?) { + Logger.d(MogoObuConst.TAG_MOGO_OBU, "obuManager初始化--") + mMogoServiceApis = ARouter.getInstance().build(MogoServicePaths.PATH_SERVICE_APIS) + .navigation(context) as IMogoServiceApis + // 获取预警模块的接口 + mIMoGoWaringProvider = mMogoServiceApis!!.waringProviderApi + + //自研obu + MogoObuManager.getInstance().init(context) + MogoObuManager.getInstance().connect("192.168.1.199") + MogoObuManager.getInstance().registerListener(mogoObuListener) + + //TODO 测试 +// UiThreadHandler.postDelayed({ +//// MogoObuManager.getInstance().test(icw_data) +// handleSdkObu(107) +// }, 5000L) + } + + private val mogoObuListener: OnMogoObuListener = object : OnMogoObuListener() { + override fun onConnected() { + //OBU连接成功 + Logger.d(MogoObuConst.TAG_MOGO_OBU, "onConnected ------> ") + } + + override fun onConnectFail(isNeedReconnect: Boolean) { + Logger.d(MogoObuConst.TAG_MOGO_OBU, "onConnectFail ------> ") + //OBU连接失败 + } + + override fun onDisconnect() { + Logger.d(MogoObuConst.TAG_MOGO_OBU, "onDisconnect ------> ") + //OBU断开连接 + } + + override fun onReceiveOriginData(data: String) { + super.onReceiveOriginData(data) + Logger.d(MogoObuConst.TAG_MOGO_OBU, "onReceiveOriginData ------> data = $data") + //接收到的原始数据 + } + + override fun onSendData(bytes: ByteArray) { + super.onSendData(bytes) + //发送的数据 + Logger.d(MogoObuConst.TAG_MOGO_OBU, "onSendData ------> ") + } + + override fun onCvxAppInitIndInfo(info: CvxAppInitIndInfo) { + super.onCvxAppInitIndInfo(info) + Logger.d(MogoObuConst.TAG_MOGO_OBU, "onCvxAppInitIndInfo ------> $info") + //CV2X系统信息 + } + + override fun onCvxSetConfigCfm(info: CvxSetConfigCfmInfo) { + super.onCvxSetConfigCfm(info) + Logger.d(MogoObuConst.TAG_MOGO_OBU, "onCvxSetConfigCfm ------> $info") + //设置CV2X系统的配置确认 + } + + override fun onCvxHvCarIndInfo(info: CvxHvCarIndInfo) { + //主车车辆信息 + Logger.d(MogoObuConst.TAG_MOGO_OBU, "onCvxHvCarIndInfo ------> $info") + } + + override fun onCvxHvInfoIndInfo(info: CvxHvInfoIndInfo) { + //主车信息 + } + + override fun onCvxRvInfoIndInfo(info: CvxRvInfoIndInfo) { + //远车信息, + Logger.d(MogoObuConst.TAG_MOGO_OBU, "onCvxRvInfoIndInfo ------> $info") + } + + //TODO 他车是否一直出现 + override fun onCvxV2vThreatIndInfo(info: CvxV2vThreatIndInfo) { + //预警信息,预警类型 threat_level 3 + if (info != null) { + Logger.e(MogoObuConst.TAG_MOGO_OBU, "onCvxV2vThreatIndInfo ------> $info") + if (info.threat_info != null) { + if (info.threat_info.threat_level == 2 || + info.threat_info.threat_level == 3) { + //预警方位 + val direction = info.ext_info.target_classification + + //显示警告弹框 TODO +// MarkerServiceHandler.getApis().getV2XListenerManager().warningChangedForListenerWithDirection(getMessage(direction), MogoReceiver.ACTION_V2X_FRONT_WARNING); + + //处理预警类型 + val appId = info.threat_info.app_id + Logger.d(MogoObuConst.TAG_MOGO_OBU, "direction = " + direction + "----" + getMessage(direction) + "--appId = " + appId) + handleSdkObu(getEventType(appId)) + } + + //预警数据的组装,车辆实时移动和变色 TODO 这里需要obu提供他车列表 暂时不做 +// AdasRecognizedResultDrawer.getInstance().renderAdasRecognizedResult(getResultList(info)); + } else { + Logger.e(MogoObuConst.TAG_MOGO_OBU, "info == null ") + } + } + } + } + + + private fun getMessage(targetClassification: Int): Int { + return when (targetClassification) { + ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_IN_LANE, ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_LEFT, ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_RIGHT, ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_FAR_LEFT, ObuConstants.TARGET_CLASSIFICATION.TC_AHEAD_FAR_RIGHT -> 1 + ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_IN_LANE, ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_LEFT, ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_RIGHT, ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_FAR_LEFT, ObuConstants.TARGET_CLASSIFICATION.TC_BEHIND_FAR_RIGHT -> 2 + ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_IN_LANE, ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_LEFT, ObuConstants.TARGET_CLASSIFICATION.TC_INTERSECTION_LEFT, ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_FAR_LEFT -> 3 + ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_RIGHT, ObuConstants.TARGET_CLASSIFICATION.TC_ONCOMING_FAR_RIGHT, ObuConstants.TARGET_CLASSIFICATION.TC_INTERSECTION_RIGHT -> 4 + ObuConstants.TARGET_CLASSIFICATION.TC_UNCLASSIFIED -> 1 + else -> 1 + } + } + + private fun getEventType(appid: Int): Int { + if (appid == ObuConstants.USE_CASE_ID.EBW) { //紧急制动 + return MogoObuConst.TYPE_URGENCY_COLLISION_WARNING + } else if (appid == ObuConstants.USE_CASE_ID.ICW) { //交叉路口碰撞预警 + return MogoObuConst.TYPE_CROSS_COLLISION_WARNING + } else if (appid == ObuConstants.USE_CASE_ID.LTA) { //左转辅助 + return MogoObuConst.TYPE_TURN_LEFT_WARN + } else if (appid == ObuConstants.USE_CASE_ID.BSW) { //盲区预警 + return MogoObuConst.TYPE_BLIND_ASSIST_WARN + } else if (appid == ObuConstants.USE_CASE_ID.LCW) { //变道预警 + return MogoObuConst.TYPE_CHANGE_LANES_WARN + } else if (appid == ObuConstants.USE_CASE_ID.DNPW) { //逆向超车预警 + return MogoObuConst.TYPE_REVERSE_OVERTAKING_WARN + } else if (appid == ObuConstants.USE_CASE_ID.FCW) { //前向碰撞预警 + return MogoObuConst.TYPE_FRONT_COLLISION_WARNING + } else if (appid == ObuConstants.USE_CASE_ID.AVW) { //异常车辆预警 + return MogoObuConst.TYPE_UNUSUAL_CAR_WARN + } else if (appid == ObuConstants.USE_CASE_ID.CLW) { //车辆失控预警 + return MogoObuConst.TYPE_CAR_OUT_OF_CONTROL_WARN + } else if (appid == ObuConstants.USE_CASE_ID.SLW) { //限速预警 + return MogoObuConst.TYPE_LIMIT_SPEED_WARN + } else if (appid == ObuConstants.USE_CASE_ID.LTA) { //闯红灯预警 --- + return MogoObuConst.TYPE_RUSH_RED_LIGHT + } else if (appid == ObuConstants.USE_CASE_ID.VRUCW) { //行人碰撞预警 --- + return MogoObuConst.TYPE_ROAD_USER_COLLISION_WARNING + } else if (appid == ObuConstants.USE_CASE_ID.LTA) { //绿波车速引导 --- + return MogoObuConst.TYPE_OPTIMAL_SPEED_ADVISORY + } else if (appid == ObuConstants.USE_CASE_ID.HLW) { //道路危险情况预警 + return MogoObuConst.TYPE_UNUSUAL_ROAD_WARN + } else if (appid == ObuConstants.USE_CASE_ID.IVS) { //交通标牌提示 + return MogoObuConst.TYPE_TRAFFIC_SIGN_INFO + } else if (appid == ObuConstants.USE_CASE_ID.TJW) { //前方拥堵提醒 + return MogoObuConst.TYPE_BLOCK_WARN + } else if (appid == ObuConstants.USE_CASE_ID.EVW) { //紧急车辆提示预警 + return MogoObuConst.TYPE_PRESSING_CAR_WARN + } + return 0 + } + + private fun getResultList(info: CvxV2vThreatIndInfo): List? { + if (resultList == null) { + resultList = ArrayList() + } + val adasRecognizedResult = ADASRecognizedResult() + adasRecognizedResult.uuid = info.vehicle_id + if (info.basic_info != null && info.basic_info.position != null) { + adasRecognizedResult.lat = info.basic_info.position.latitude + adasRecognizedResult.lon = info.basic_info.position.longitude + } + adasRecognizedResult.type = 3 //小轿车 + adasRecognizedResult.heading = info.basic_info.heading + adasRecognizedResult.speed = info.basic_info.speed + + resultList!!.add(adasRecognizedResult) + + return resultList + } + + + fun release() { + MogoObuManager.getInstance().unregisterListener() + } + + + /** + * 构造对应展示数据和场景 根据obu的场景,add change delete确定是否展示 + * + * @param type TODO + */ + private fun handleSdkObu(type: Int) { + var alertContent: String = "" + var ttsContent: String = "" + + if (type == MogoObuConst.TYPE_CROSS_COLLISION_WARNING) { //交叉路口碰撞预警 + alertContent = MogoObuConst.TYPE_CROSS_COLLISION_WARNING_TEXT + ttsContent = MogoObuConst.TYPE_CROSS_COLLISION_WARNING_VOICE_TEXT + } else if (type == MogoObuConst.TYPE_URGENCY_COLLISION_WARNING) { // 前车紧急制动预警 + alertContent = MogoObuConst.TYPE_URGENCY_COLLISION_WARNING_TEXT + ttsContent = MogoObuConst.TYPE_URGENCY_COLLISION_WARNING_VOICE_TEXT + } + + //显示弹框 + mIMoGoWaringProvider!!.showWarningV2X( + type, + alertContent, + ttsContent, + type.toString() + ) + + + } + + +} \ No newline at end of file