[3.0][OBU数据融合] 新增OBU数据接口,将OBU SDK数据转换成与域控相同的PB数据
This commit is contained in:
@@ -19,7 +19,6 @@ import com.zhidao.adas.client.bean.ObuMap;
|
||||
import com.zhidao.adas.client.bean.ObuRsi;
|
||||
import com.zhidao.adas.client.bean.ObuRsm;
|
||||
import com.zhidao.adas.client.bean.ObuSpat;
|
||||
import com.zhidao.adas.client.bean.ObuWarningData;
|
||||
import com.zhidao.adas.client.bean.OriginalPointCloudData;
|
||||
import com.zhidao.adas.client.bean.PerceptionTrafficLight;
|
||||
import com.zhidao.adas.client.bean.PlanningDecisionState;
|
||||
@@ -131,7 +130,6 @@ public class DataDistribution {
|
||||
public final List<DataShow> listFSMFunctionStates = new ArrayList<>();
|
||||
public final List<DataShow> listRoboSweeperTaskIndex = new ArrayList<>();
|
||||
public final List<DataShow> listBagManagerCmd = new ArrayList<>();
|
||||
public final List<DataShow> listObuWarningData = new ArrayList<>();
|
||||
public final List<DataShow> listObuSpat = new ArrayList<>();
|
||||
public final List<DataShow> listObuRsi = new ArrayList<>();
|
||||
public final List<DataShow> listObuRsm = new ArrayList<>();
|
||||
@@ -159,7 +157,6 @@ public class DataDistribution {
|
||||
private long listFSMFunctionStatesSize = 0;
|
||||
private long listRoboSweeperTaskIndexSize = 0;
|
||||
private long listBagManagerCmdSize = 0;
|
||||
private long listObuWarningDataSize = 0;
|
||||
private long listObuSpatSize = 0;
|
||||
private long listObuRsiSize = 0;
|
||||
private long listObuRsmSize = 0;
|
||||
@@ -189,7 +186,6 @@ public class DataDistribution {
|
||||
listFSMFunctionStatesSize = 1;
|
||||
listRoboSweeperTaskIndexSize = 1;
|
||||
listBagManagerCmdSize = 1;
|
||||
listObuWarningDataSize = 1;
|
||||
listObuSpatSize = 1;
|
||||
listObuRsiSize = 1;
|
||||
listObuRsmSize = 1;
|
||||
@@ -246,14 +242,6 @@ public class DataDistribution {
|
||||
if (listener != null && Constants.TITLE.RECEIVE_PLANNING_DECISION_STATE.equals(listener.first)) {
|
||||
listener.second.onRefresh();
|
||||
}
|
||||
} else if (data instanceof ObuWarningData) {
|
||||
listObuWarningData.add(0, new DataShow(listObuWarningDataSize++, time + str));
|
||||
if (listObuWarningData.size() > LIST_SIZE) {
|
||||
listObuWarningData.remove(listObuWarningData.size() - 1);
|
||||
}
|
||||
if (listener != null && Constants.TITLE.RECEIVE_OBU_WARNING_DATA.equals(listener.first)) {
|
||||
listener.second.onRefresh();
|
||||
}
|
||||
} else if (data instanceof ObuSpat) {
|
||||
listObuSpat.add(0, new DataShow(listObuSpatSize++, time + str));
|
||||
if (listObuSpat.size() > LIST_SIZE) {
|
||||
|
||||
@@ -134,8 +134,6 @@ public class InfoFragment extends BaseFragment {
|
||||
adapter.setData(DataDistribution.getInstance().listArrivalNotification);
|
||||
} else if (Constants.TITLE.RECEIVE_STATUS_QUERY_RESP.equals(title)) {
|
||||
adapter.setData(DataDistribution.getInstance().listStatusInfo);
|
||||
} else if (Constants.TITLE.RECEIVE_OBU_WARNING_DATA.equals(title)) {
|
||||
adapter.setData(DataDistribution.getInstance().listObuWarningData);
|
||||
} else if (Constants.TITLE.RECEIVE_OBU_SPAT.equals(title)) {
|
||||
adapter.setData(DataDistribution.getInstance().listObuSpat);
|
||||
} else if (Constants.TITLE.RECEIVE_OBU_RSI.equals(title)) {
|
||||
|
||||
@@ -73,7 +73,6 @@ import com.zhidao.adas.client.bean.ObuMap;
|
||||
import com.zhidao.adas.client.bean.ObuRsi;
|
||||
import com.zhidao.adas.client.bean.ObuRsm;
|
||||
import com.zhidao.adas.client.bean.ObuSpat;
|
||||
import com.zhidao.adas.client.bean.ObuWarningData;
|
||||
import com.zhidao.adas.client.bean.OriginalPointCloudData;
|
||||
import com.zhidao.adas.client.bean.PerceptionTrafficLight;
|
||||
import com.zhidao.adas.client.bean.PlanningDecisionState;
|
||||
@@ -128,7 +127,6 @@ import chassis.VehicleStateOuterClass;
|
||||
import function_state_management.FunctionStates;
|
||||
import io.netty.channel.Channel;
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
import mogo.v2x.ObuWarningEvent;
|
||||
import mogo_msg.MogoReportMsg;
|
||||
import perception.TrafficLightOuterClass;
|
||||
import planning.RoboSweeperTaskIndexOuterClass;
|
||||
@@ -668,7 +666,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
|
||||
titleFragmentData.add(Constants.TITLE.RECEIVE_GLOBAL_PATH_RESP);
|
||||
titleFragmentData.add(Constants.TITLE.RECEIVE_ARRIVAL_NOTIFICATION);
|
||||
titleFragmentData.add(Constants.TITLE.RECEIVE_STATUS_QUERY_RESP);
|
||||
titleFragmentData.add(Constants.TITLE.RECEIVE_OBU_WARNING_DATA);
|
||||
titleFragmentData.add(Constants.TITLE.RECEIVE_OBU_SPAT);
|
||||
titleFragmentData.add(Constants.TITLE.RECEIVE_OBU_RSI);
|
||||
titleFragmentData.add(Constants.TITLE.RECEIVE_OBU_RSM);
|
||||
@@ -1038,11 +1035,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
|
||||
DataDistribution.getInstance().addData(base);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onObuWarningData(MessagePad.Header header, ObuWarningEvent.ObuWarningData obuWarningData) {
|
||||
ObuWarningData base = new ObuWarningData(header, obuWarningData, sdf);
|
||||
DataDistribution.getInstance().addData(base);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onObuSpatWarning(MessagePad.Header header, ObuScene.SpatWarningData spatWarningData) {
|
||||
|
||||
@@ -172,7 +172,6 @@ public class Constants {
|
||||
String RECEIVE_WARN = MessageType.TYPE_RECEIVE_WARN.desc;
|
||||
String RECEIVE_ARRIVAL_NOTIFICATION = MessageType.TYPE_RECEIVE_ARRIVAL_NOTIFICATION.desc;
|
||||
String RECEIVE_STATUS_QUERY_RESP = MessageType.TYPE_RECEIVE_STATUS_QUERY_RESP.desc;
|
||||
String RECEIVE_OBU_WARNING_DATA = MessageType.TYPE_RECEIVE_OBU_WARNING_DATA.desc;
|
||||
String RECEIVE_OBU_SPAT = "OBU SPAT信息";
|
||||
String RECEIVE_OBU_RSI = "OBU RSI信息";
|
||||
String RECEIVE_OBU_RSM = "OBU RSM信息";
|
||||
|
||||
@@ -69,7 +69,6 @@ import chassis.ChassisStatesOuterClass;
|
||||
import chassis.VehicleStateOuterClass;
|
||||
import function_state_management.FunctionStates;
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
import mogo.v2x.ObuWarningEvent;
|
||||
import mogo_msg.MogoReportMsg;
|
||||
import perception.TrafficLightOuterClass;
|
||||
import planning.RoboSweeperTaskIndexOuterClass;
|
||||
@@ -546,10 +545,6 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onObuWarningData(MessagePad.Header header, ObuWarningEvent.ObuWarningData obuWarningData) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onObuSpatWarning(MessagePad.Header header, ObuScene.SpatWarningData spatWarningData) {
|
||||
|
||||
@@ -93,7 +93,7 @@ ext {
|
||||
|
||||
// obu sdk
|
||||
obusdk : "com.zhidao.enterprise.smartv2x:smartv2x:1.0.0.3",
|
||||
mogoobu : 'com.mogo.support.obu:mogo-obu:1.1.0_beta0',
|
||||
mogoobu : 'com.mogo.support.obu:mogo-obu:1.1.0_beta1',
|
||||
|
||||
// google
|
||||
googlezxing : "com.google.zxing:core:3.3.3",
|
||||
|
||||
@@ -135,6 +135,8 @@ message TrackedObject
|
||||
repeated Location polygon = 15;
|
||||
geometry.Point center = 16;
|
||||
AdditionalAttribute add_attribute = 17; // 事件类型
|
||||
reserved 18 to 100;
|
||||
string strUuid = 101;//String类型车辆ID
|
||||
}
|
||||
|
||||
message TrackedObjects
|
||||
@@ -188,7 +190,7 @@ message AutopilotState
|
||||
message PlanningObject
|
||||
{
|
||||
uint32 uuid = 1;
|
||||
uint32 type = 2; //影响自车决策的类型, 和感知的障碍物类型不是一回事
|
||||
uint32 type = 2; //影响自车决策的类型, 和感知的障碍物类型不是一回事 0是leading障碍物,1是避障和择机的障碍物
|
||||
}
|
||||
|
||||
message PlanningObjects
|
||||
|
||||
@@ -130,7 +130,7 @@ message WarningData{
|
||||
//弱势交通参与者预警信息
|
||||
message V2xWarning{
|
||||
int32 unitMask = 1; /* 描述所属字段有效性 */
|
||||
repeated WarningData warningData = 2;
|
||||
repeated WarningData warningData = 2; /*预警数据*/
|
||||
DateTime warningTime = 3; /* 预警触发时间 */
|
||||
double distance = 4; /* 预警触发时与自车之间的距离,单位(m) */
|
||||
}
|
||||
@@ -165,3 +165,26 @@ message RsiWarning {
|
||||
int32 targetPosition = 10; /* 目标方位,参考mg_rti_target_position_t */
|
||||
double distance = 11; /* 预警触发时与自车之间的距离,单位(0.01m) */
|
||||
}
|
||||
|
||||
message VehicleControl{
|
||||
int32 unitMask = 1; /* 描述所属字段有效性 */
|
||||
int32 brakePedalStatus = 2; /* 刹车踏板状态,0:未装备/未知/不可用,1:刹车踏板未踩下,2:刹车踏板已踩下 */
|
||||
int32 transmissionStatus = 3; /* 车辆档位状态,0:空挡,1:停止档,2:前进挡,3:倒挡,7:无效值 */
|
||||
int32 exteriorLights = 4; /* 车灯状态,0:近光灯,1:远光灯,2:左转信号灯,3:右转信号灯,4:危险信号灯,5:自动大灯,6:日间行车灯,7:雾灯,8:停车灯 */
|
||||
}
|
||||
|
||||
message VehicleBasics{
|
||||
int32 unitMask = 1; /* 描述所属字段有效性 */
|
||||
string id = 2; /* OBU ID */
|
||||
int64 secMark = 3; /* UTC时间,单位(ms) */
|
||||
double latitude = 4; /* 维度,单位(°) */
|
||||
double longitude = 5; /* 经度,单位(°) */
|
||||
double elevation = 6; /* 海拔,单位(m) */
|
||||
double speed = 7; /* 速度,单位(m/s) */
|
||||
double heading = 8; /* 航向角,单位(°) */
|
||||
AccFourAxes accFourAxes = 9; /* 四轴加速度 */
|
||||
VehicleSize vehSize = 10; /* 车辆尺寸 */
|
||||
int32 vehClass = 11; /* 车辆类型,参考《OBU软件SDK使用文档》附录A中的表1 */
|
||||
VehicleControl vehControlMsg = 12; /* 车辆系统控制信息 */
|
||||
int32 targetPosition = 13; /* 目标方位,参考mg_veh_target_position_t */
|
||||
}
|
||||
@@ -2,12 +2,11 @@ syntax = "proto3";
|
||||
package com.mogo.support.obu;
|
||||
|
||||
import "personal/obu_base.proto";
|
||||
//场景PB 目前只有V2I(Rsi、Rsm、Spat、Map)相关场景,后期会添加V2V相关场景
|
||||
//场景PB:包括 RV HV(V2V) V2I(Rsi、Rsm、Spat、Map)相关场景
|
||||
|
||||
//预警事件 RSI Warning event
|
||||
message RsiWarningData {
|
||||
int32 status = 1; /* 状态信息,0:更新,1:添加,2:删除 */
|
||||
//int32 warning_num = 2; /* 预警信息数量 */
|
||||
repeated RsiWarning warningMsg = 2; /* 预警信息集合 */
|
||||
}
|
||||
|
||||
@@ -34,3 +33,16 @@ message MapMatchData{
|
||||
double speedMaxLimit = 6; /* 建议最大车速,单位(m/s) */
|
||||
double speedMinLimit = 7; /* 建议最小车速,单位(m/s) */
|
||||
}
|
||||
|
||||
//自车信息
|
||||
message HvBasicsData{
|
||||
int32 status = 1; /* 状态信息,0:更新,1:添加,2:删除 */
|
||||
VehicleBasics vehBasicsMsg = 2; /* 自车基础运行信息 */
|
||||
}
|
||||
|
||||
//他车数据包括 V2V预警信息
|
||||
message RvWarningData{
|
||||
int32 status = 1; /* 状态信息,0:更新,1:添加,2:删除 */
|
||||
VehicleBasics vehBasicsMsg = 2; /* 临车基础运行信息 */
|
||||
V2xWarning warningMsg = 3; /* V2V预警信息 */
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
plugins {
|
||||
id 'com.android.library'
|
||||
id 'com.google.protobuf'
|
||||
}
|
||||
|
||||
android {
|
||||
@@ -21,31 +20,6 @@ android {
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
sourceSets {
|
||||
main {
|
||||
proto {
|
||||
srcDir 'src/main/proto'
|
||||
include '**/*.proto'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protobuf {
|
||||
protoc {
|
||||
artifact = rootProject.ext.dependencies.protoc
|
||||
}
|
||||
|
||||
generateProtoTasks {
|
||||
all().each { task ->
|
||||
task.builtins {
|
||||
remove java
|
||||
}
|
||||
task.builtins {
|
||||
java {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
@@ -54,8 +28,7 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
api project(':libraries:mogo-adas-data')
|
||||
api rootProject.ext.dependencies.protobuf_java
|
||||
api rootProject.ext.dependencies.protobuf_java_util
|
||||
implementation project(':libraries:mogo-adas-data')
|
||||
implementation rootProject.ext.dependencies.androidxappcompat
|
||||
api rootProject.ext.dependencies.mogoobu
|
||||
}
|
||||
|
||||
@@ -0,0 +1,825 @@
|
||||
package com.zhidao.support.obu;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.mogo.support.obu.MogoObuManager;
|
||||
import com.mogo.support.obu.ObuBase;
|
||||
import com.mogo.support.obu.ObuScene;
|
||||
import com.mogo.support.obu.OnMogoObuListener;
|
||||
import com.mogo.support.obu.constants.MogoObuConstants;
|
||||
import com.mogo.support.obu.constants.MogoObuTopicId;
|
||||
import com.mogo.support.obu.model.MogoObuHvBasicsData;
|
||||
import com.mogo.support.obu.model.MogoObuMapMathData;
|
||||
import com.mogo.support.obu.model.MogoObuRsiWarningData;
|
||||
import com.mogo.support.obu.model.MogoObuRsmWarningData;
|
||||
import com.mogo.support.obu.model.MogoObuRvWarningData;
|
||||
import com.mogo.support.obu.model.MogoObuSpatWarningData;
|
||||
import com.mogo.support.obu.model.advance.AccFourAxes;
|
||||
import com.mogo.support.obu.model.advance.DateTime;
|
||||
import com.mogo.support.obu.model.advance.NodeId;
|
||||
import com.mogo.support.obu.model.advance.Participant;
|
||||
import com.mogo.support.obu.model.advance.PositionLLV;
|
||||
import com.mogo.support.obu.model.advance.RsiWarning;
|
||||
import com.mogo.support.obu.model.advance.SpatLight;
|
||||
import com.mogo.support.obu.model.advance.V2xWarning;
|
||||
import com.mogo.support.obu.model.advance.VehBasics;
|
||||
import com.mogo.support.obu.model.advance.VehControl;
|
||||
import com.mogo.support.obu.model.advance.VehSize;
|
||||
import com.mogo.support.obu.model.advance.VerticalLLV;
|
||||
import com.mogo.support.obu.model.advance.WarningData;
|
||||
import com.mogo.support.obu.option.MogoObuLog;
|
||||
import com.mogo.support.obu.option.MogoObuOptions;
|
||||
import com.mogo.support.obu.upgrade.OnUpgradeListener;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
|
||||
public class ObuManager {
|
||||
private static final String TAG = ObuManager.class.getSimpleName();
|
||||
private static volatile ObuManager INSTANCE;
|
||||
private OnObuListener listener;
|
||||
|
||||
public static ObuManager getInstance() {
|
||||
if (INSTANCE == null) {
|
||||
synchronized (ObuManager.class) {
|
||||
if (INSTANCE == null) {
|
||||
INSTANCE = new ObuManager();
|
||||
}
|
||||
}
|
||||
}
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前连接状态
|
||||
*
|
||||
* @return 连接状态
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public int getConnectStatus() {
|
||||
return MogoObuManager.getInstance().getConnectStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取已连接的OBU IP 断开连接会置null
|
||||
*
|
||||
* @return IP
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public String getConnectedIp() {
|
||||
return MogoObuManager.getInstance().getConnectedIp();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取已连接的OBU 端口 断开连接会置null
|
||||
*
|
||||
* @return 端口
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public int getConnectedPort() {
|
||||
return MogoObuManager.getInstance().getConnectedPort();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前SDK版本
|
||||
*
|
||||
* @return 版本
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public String getVersion() {
|
||||
return MogoObuManager.getInstance().getVersion();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前SO版本号
|
||||
*
|
||||
* @return 版本 未连接为null
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public String getSoVersion() {
|
||||
return MogoObuManager.getInstance().getSoVersion();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前OBU软件版本
|
||||
* 需主动调用获取{@link MogoObuManager#getObuVersion(Context, String, OnUpgradeListener)}
|
||||
*
|
||||
* @return 版本 null表示 无法连接OBU;无法获取版本;
|
||||
* @since 1.1.0
|
||||
*/
|
||||
@Nullable
|
||||
public String getObuVersion() {
|
||||
return MogoObuManager.getInstance().getObuVersion();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取已注册的 Topic ID
|
||||
*
|
||||
* @return Topic ID
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public List<MogoObuTopicId> getRegisteredTopicId() {
|
||||
return MogoObuManager.getInstance().getRegisteredTopicId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取未注册的 Topic ID
|
||||
*
|
||||
* @return Topic ID
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public List<MogoObuTopicId> getUnregisteredTopicId() {
|
||||
return MogoObuManager.getInstance().getUnregisteredTopicId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册回调 包括连接状态以及数据回调
|
||||
*
|
||||
* @param obuListener 数据回调接口
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public void registerObuListener(OnObuListener obuListener) {
|
||||
this.listener = obuListener;
|
||||
MogoObuManager.getInstance().registerMogoObuListener(mogoObuListener);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消注册
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public void unregisterObuListener() {
|
||||
MogoObuManager.getInstance().unregisterMogoObuListener();
|
||||
listener = null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 连接
|
||||
* 调用结果异步返回 listener.onMogoObuCallResult(BaseResult result)
|
||||
* 异步结果回调回调顺序 每次一种类型
|
||||
* 1.result.function == MogoObuConstants.CALL_FUNCTION.CONFIG onMogoObuCallResult(MogoObuCallConfigResult result) 连接配置或日志配置(如果有配置)
|
||||
* 2.result.function == MogoObuConstants.CALL_FUNCTION.INIT onMogoObuCallResult(MogoObuCallResult result) 初始化,进行连接操作
|
||||
* 3.result.function == MogoObuConstants.CALL_FUNCTION.TOPIC_REGIST onMogoObuCallResult(MogoObuCallRegisterResult result) 注册Topic ID(如果有配置)
|
||||
*
|
||||
* @param options 参数
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public void connect(MogoObuOptions options) {
|
||||
MogoObuManager.getInstance().connect(options);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 断开连接
|
||||
* 调用结果异步返回 listener.onMogoObuCallResult(BaseResult result)
|
||||
*
|
||||
* @since 1.0.1
|
||||
*/
|
||||
public void disconnect() {
|
||||
MogoObuManager.getInstance().disconnect();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 注册Topic
|
||||
* 调用结果异步返回 listener.onMogoObuCallResult(BaseResult result)
|
||||
* result.function == MogoObuConstants.CALL_FUNCTION.TOPIC_REGIST onMogoObuCallResult(MogoObuCallRegisterResult result)
|
||||
* 此版本支持的Topic ID
|
||||
* MogoObuTopicId.HV_BASIC
|
||||
* MogoObuTopicId.RV_WARNING
|
||||
* MogoObuTopicId.SPAT_WARNING
|
||||
* MogoObuTopicId.RSI_WARNING
|
||||
* MogoObuTopicId.RSM_WARNING
|
||||
* MogoObuTopicId.MAP_MATCH
|
||||
*
|
||||
* @param topicId id
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public void registerTopic(MogoObuTopicId topicId) {
|
||||
MogoObuManager.getInstance().registerTopic(topicId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册多个Topic
|
||||
* 调用结果异步返回 listener.onMogoObuCallResult(BaseResult result)
|
||||
* result.function == MogoObuConstants.CALL_FUNCTION.TOPIC_REGIST onMogoObuCallResult(MogoObuCallRegisterResult result)
|
||||
* 此版本支持的Topic ID
|
||||
* MogoObuTopicId.HV_BASIC
|
||||
* MogoObuTopicId.RV_WARNING
|
||||
* MogoObuTopicId.SPAT_WARNING
|
||||
* MogoObuTopicId.RSI_WARNING
|
||||
* MogoObuTopicId.RSM_WARNING
|
||||
* MogoObuTopicId.MAP_MATCH
|
||||
*
|
||||
* @param topicIds ids
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public void registerTopic(Set<MogoObuTopicId> topicIds) {
|
||||
MogoObuManager.getInstance().registerTopic(topicIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消注册Topic
|
||||
* 调用结果异步返回 listener.onMogoObuCallResult(BaseResult result)
|
||||
*
|
||||
* @param topicId id
|
||||
* @since @since 1.0.1
|
||||
*/
|
||||
public void unregisterTopic(MogoObuTopicId topicId) {
|
||||
MogoObuManager.getInstance().unregisterTopic(topicId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消注册多个Topic
|
||||
* 调用结果异步返回 listener.onMogoObuCallResult(BaseResult result)
|
||||
*
|
||||
* @param topicIds ids
|
||||
* @since 1.0.1
|
||||
*/
|
||||
public void unregisterTopic(Set<MogoObuTopicId> topicIds) {
|
||||
MogoObuManager.getInstance().unregisterTopic(topicIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* OBU SDK 日志配置
|
||||
* 支持日志输出至LogCat和写入文件
|
||||
* 调用结果异步返回 listener.onMogoObuCallResult(BaseResult result)
|
||||
* result.function == MogoObuConstants.CALL_FUNCTION.CONFIG onMogoObuCallResult(MogoObuCallConfigResult result) 日志配置
|
||||
*
|
||||
* @param log 日志配置
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public void logConfig(MogoObuLog log) {
|
||||
MogoObuManager.getInstance().logConfig(log);
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置Android日志
|
||||
*
|
||||
* @param isEnableLog 是否开启日志输出
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public void setEnableLog(boolean isEnableLog) {
|
||||
MogoObuManager.getInstance().setEnableLog(isEnableLog);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检查更新
|
||||
*
|
||||
* @param obuIp OBU IP
|
||||
* @param listener 升级回调
|
||||
* @since 1.1.0
|
||||
*/
|
||||
public boolean checkObuUpgrade(@NonNull Context context, @NonNull String obuIp, OnUpgradeListener listener) {
|
||||
return MogoObuManager.getInstance().checkObuUpgrade(context, obuIp, listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查更新
|
||||
*
|
||||
* @param context 上下文
|
||||
* @param obuIp OBU IP
|
||||
* @param isUpgradeNow 是否立即升级
|
||||
* false:OBU设备下次上电时执行升级程序
|
||||
* ture: OBU设备立即执行升级程序 TODO 警告:执行立即升级时请确保车辆是静止状态。车辆在运行过程中升级设备可能会影响驾驶,严重时可能造成安全隐患!!!
|
||||
* @param listener 升级回调
|
||||
* @return 是否调用成功
|
||||
* @since 1.1.0
|
||||
*/
|
||||
public boolean checkObuUpgrade(@NonNull Context context, @NonNull String obuIp, boolean isUpgradeNow, OnUpgradeListener listener) {
|
||||
return MogoObuManager.getInstance().checkObuUpgrade(context, obuIp, isUpgradeNow, listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前连接OBU的版本号
|
||||
* 如果调用 {@link MogoObuManager#checkObuUpgrade(Context, String, OnUpgradeListener)}方法可以不用调用此方法,检查更新会获取版本号
|
||||
*
|
||||
* @param context 上下文
|
||||
* @param obuIp OBU IP
|
||||
* @param listener 升级回调
|
||||
* @return 是否调用成功
|
||||
* @since 1.1.0
|
||||
*/
|
||||
public boolean getObuVersion(@NonNull Context context, @NonNull String obuIp, OnUpgradeListener listener) {
|
||||
return MogoObuManager.getInstance().getObuVersion(context, obuIp, listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* 传入升级包版本
|
||||
*
|
||||
* @param newVersion 升级包版本
|
||||
* @since 1.1.0
|
||||
*/
|
||||
public void setObuUpgradePackageVersion(@NonNull String newVersion) {
|
||||
MogoObuManager.getInstance().setObuUpgradePackageVersion(newVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
* 传入升级包
|
||||
*
|
||||
* @param newUpgradePackage 升级包文件绝对路径 只能包含 升级包MD5文件和升级包文件
|
||||
* @since 1.1.0
|
||||
*/
|
||||
public void setObuUpgradePackage(@NonNull String[] newUpgradePackage) {
|
||||
MogoObuManager.getInstance().setObuUpgradePackage(newUpgradePackage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止升级或停止版本查询
|
||||
*
|
||||
* @since 1.1.0
|
||||
*/
|
||||
public void stopObuUpgrade() {
|
||||
MogoObuManager.getInstance().stopObuUpgrade();
|
||||
}
|
||||
|
||||
private final OnMogoObuListener mogoObuListener = new OnMogoObuListener() {
|
||||
@Override
|
||||
public void onConnectStatus(int connectStatus) {
|
||||
if (listener != null) {
|
||||
listener.onConnectStatus(connectStatus);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMogoObuHvBasics(MogoObuHvBasicsData data) {
|
||||
if (listener != null) {
|
||||
// ObuScene.HvBasicsData.Builder builder = ObuScene.HvBasicsData.newBuilder();
|
||||
// builder.setStatus(data.getStatus());
|
||||
VehBasics vehBasics = data.getVehBasicsMsg();
|
||||
// if (vehBasics != null) {
|
||||
// builder.setVehBasicsMsg(getVehBasics(vehBasics));
|
||||
// }
|
||||
// listener.onObuHvBasics(builder.build());
|
||||
|
||||
|
||||
//转工控机PB 赋值的包括 satelliteTime systemTime latitude longitude altitude heading gnssSpeed acceleration vehicleSpeed 未赋值:yawRate
|
||||
if (vehBasics != null) {
|
||||
MessagePad.GnssInfo.Builder gnssInfoBuilder = MessagePad.GnssInfo.newBuilder();
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.SEC_MARK)) {
|
||||
double time = vehBasics.getSecMark() / 1000.0D;
|
||||
gnssInfoBuilder.setSatelliteTime(time);
|
||||
gnssInfoBuilder.setSystemTime(time);
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.LATITUDE)) {
|
||||
gnssInfoBuilder.setLatitude(vehBasics.getLatitude());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.LONGITUDE)) {
|
||||
gnssInfoBuilder.setLongitude(vehBasics.getLongitude());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ELEVATION)) {
|
||||
gnssInfoBuilder.setAltitude(vehBasics.getElevation());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.SPEED)) {
|
||||
gnssInfoBuilder.setGnssSpeed(vehBasics.getSpeed());
|
||||
gnssInfoBuilder.setVehicleSpeed(vehBasics.getSpeed());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.HEADING)) {
|
||||
gnssInfoBuilder.setHeading(vehBasics.getHeading());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ACC_FOUR_AXES)) {
|
||||
AccFourAxes accFourAxes = vehBasics.getAccFourAxes();
|
||||
if (accFourAxes != null) {
|
||||
gnssInfoBuilder.setAcceleration(accFourAxes.getAccLng());
|
||||
}
|
||||
}
|
||||
listener.onGnssInfo(gnssInfoBuilder.build());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMogoObuRvWarning(MogoObuRvWarningData data) {
|
||||
super.onMogoObuRvWarning(data);
|
||||
if (listener != null) {
|
||||
ObuScene.RvWarningData.Builder builder = ObuScene.RvWarningData.newBuilder();
|
||||
builder.setStatus(data.getStatus());
|
||||
VehBasics vehBasics = data.getVehBasicsMsg();
|
||||
if (vehBasics != null) {
|
||||
builder.setVehBasicsMsg(getVehBasics(vehBasics));
|
||||
}
|
||||
V2xWarning v2xWarning = data.getWarningMsg();
|
||||
if (v2xWarning != null) {
|
||||
builder.setWarningMsg(getV2xWarning(v2xWarning));
|
||||
}
|
||||
listener.onObuRvWarning(builder.build());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMogoObuSpatWarning(MogoObuSpatWarningData data) {
|
||||
super.onMogoObuSpatWarning(data);
|
||||
if (listener != null) {
|
||||
ObuScene.SpatWarningData.Builder builder = ObuScene.SpatWarningData.newBuilder();
|
||||
builder.setStatus(data.getStatus()).setWarningType(data.getWarningType());
|
||||
List<SpatLight> lights = data.getLights();
|
||||
if (lights != null && !lights.isEmpty()) {
|
||||
for (SpatLight light : lights) {
|
||||
builder.addLights(ObuBase.SpatLight.newBuilder()
|
||||
.setPhaseID(light.getPhaseId())
|
||||
.setManeuvers(light.getManeuvers())
|
||||
.setLight(light.getLight())
|
||||
.setCountDown(light.getCountDown())
|
||||
.setSuggestMaxSpeed(light.getSuggestMaxSpeed())
|
||||
.setSuggestMinSpeed(light.getSuggestMinSpeed()));
|
||||
}
|
||||
}
|
||||
listener.onObuSpatWarning(builder.build());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMogoObuRsiWarning(MogoObuRsiWarningData data) {
|
||||
super.onMogoObuRsiWarning(data);
|
||||
if (listener != null) {
|
||||
ObuScene.RsiWarningData.Builder builder = ObuScene.RsiWarningData.newBuilder();
|
||||
builder.setStatus(data.getStatus());
|
||||
List<RsiWarning> list = data.getWarningMsg();
|
||||
if (list != null && !list.isEmpty()) {
|
||||
for (RsiWarning warning : list) {
|
||||
ObuBase.RsiWarning.Builder rsiBuilder = ObuBase.RsiWarning.newBuilder();
|
||||
rsiBuilder.setUnitMask(warning.getUnitMask());
|
||||
if (warning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.SCENE_TYPE)) {
|
||||
rsiBuilder.setSceneType(warning.getSceneType());
|
||||
}
|
||||
if (warning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.POSITION)) {
|
||||
PositionLLV positionLLV = warning.getPosition();
|
||||
int present = positionLLV.getPresent();//由于OBU数据没有给偏移量默认使用的是7
|
||||
double longitude = positionLLV.getLongitude();
|
||||
double latitude = positionLLV.getLatitude();
|
||||
ObuBase.PositionOffset.Builder positionOffsetBuilder = ObuBase.PositionOffset.newBuilder();
|
||||
if (present == 1) {
|
||||
positionOffsetBuilder.setPositionLL1(ObuBase.PositionLL1.newBuilder()
|
||||
.setLongitude(longitude)
|
||||
.setLatitude(latitude));
|
||||
} else if (present == 2) {
|
||||
positionOffsetBuilder.setPositionLL2(ObuBase.PositionLL2.newBuilder()
|
||||
.setLongitude(longitude)
|
||||
.setLatitude(latitude));
|
||||
} else if (present == 3) {
|
||||
positionOffsetBuilder.setPositionLL3(ObuBase.PositionLL3.newBuilder()
|
||||
.setLongitude(longitude)
|
||||
.setLatitude(latitude));
|
||||
} else if (present == 4) {
|
||||
positionOffsetBuilder.setPositionLL4(ObuBase.PositionLL4.newBuilder()
|
||||
.setLongitude(longitude)
|
||||
.setLatitude(latitude));
|
||||
} else if (present == 5) {
|
||||
positionOffsetBuilder.setPositionLL5(ObuBase.PositionLL5.newBuilder()
|
||||
.setLongitude(longitude)
|
||||
.setLatitude(latitude));
|
||||
} else if (present == 6) {
|
||||
positionOffsetBuilder.setPositionLL6(ObuBase.PositionLL6.newBuilder()
|
||||
.setLongitude(longitude)
|
||||
.setLatitude(latitude));
|
||||
} else {
|
||||
positionOffsetBuilder.setPositionLatLon(ObuBase.PositionLatLon.newBuilder()
|
||||
.setLongitude(longitude)
|
||||
.setLatitude(latitude));
|
||||
}
|
||||
VerticalLLV verticalLLV = positionLLV.getVertical();
|
||||
present = verticalLLV.getPresent();//由于OBU数据没有给偏移量默认使用的是7
|
||||
double elevation = verticalLLV.getElevation();
|
||||
ObuBase.VerticalLLV.Builder verticalLLVBuilder = ObuBase.VerticalLLV.newBuilder();
|
||||
if (present == 1) {
|
||||
verticalLLVBuilder.setOffset1(elevation);
|
||||
} else if (present == 2) {
|
||||
verticalLLVBuilder.setOffset2(elevation);
|
||||
} else if (present == 3) {
|
||||
verticalLLVBuilder.setOffset3(elevation);
|
||||
} else if (present == 4) {
|
||||
verticalLLVBuilder.setOffset4(elevation);
|
||||
} else if (present == 5) {
|
||||
verticalLLVBuilder.setOffset5(elevation);
|
||||
} else if (present == 6) {
|
||||
verticalLLVBuilder.setOffset6(elevation);
|
||||
} else {
|
||||
verticalLLVBuilder.setElevation(elevation);
|
||||
}
|
||||
rsiBuilder.setPosition(ObuBase.PositionLLV.newBuilder()
|
||||
.setPosition(positionOffsetBuilder)
|
||||
.setVertical(verticalLLVBuilder));
|
||||
}
|
||||
if (warning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.SIGN_SERIAL_NUM)) {
|
||||
rsiBuilder.setSignSerialNum(warning.getSignSerialNum());
|
||||
}
|
||||
if (warning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.EVENT_SERIAL_NUM)) {
|
||||
rsiBuilder.setEventSerialNum(warning.getEventSerialNum());
|
||||
}
|
||||
if (warning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.SPEED_MAX_LIMIT)) {
|
||||
rsiBuilder.setSpeedMaxLimit(warning.getSpeedMaxLimit());
|
||||
}
|
||||
if (warning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.SPEED_MIN_LIMIT)) {
|
||||
rsiBuilder.setSpeedMinLimit(warning.getSpeedMinLimit());
|
||||
}
|
||||
if (warning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.EVENT_RADIUS)) {
|
||||
rsiBuilder.setEventRadius(warning.getEventRadius());
|
||||
}
|
||||
if (warning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.WARNING_LEVEL)) {
|
||||
rsiBuilder.setWarningLevel(warning.getWarningLevel());
|
||||
}
|
||||
if (warning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.TARGET_POSITION)) {
|
||||
rsiBuilder.setTargetPosition(warning.getTargetPosition());
|
||||
}
|
||||
if (warning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_RSI_WARNING.DISTANCE)) {
|
||||
rsiBuilder.setDistance(warning.getDistance());
|
||||
}
|
||||
builder.addWarningMsg(rsiBuilder);
|
||||
}
|
||||
}
|
||||
listener.onObuRsiWarning(builder.build());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMogoObuRsmWarning(MogoObuRsmWarningData data) {
|
||||
super.onMogoObuRsmWarning(data);
|
||||
if (listener != null) {
|
||||
ObuScene.RsmWarningData.Builder builder = ObuScene.RsmWarningData.newBuilder();
|
||||
builder.setStatus(data.getStatus());
|
||||
Participant participant = data.getParticipant();
|
||||
if (participant != null) {
|
||||
ObuBase.Participant.Builder participantBuilder = ObuBase.Participant.newBuilder();
|
||||
participantBuilder.setPtcType(participant.getPtcType())
|
||||
.setPtcId(participant.getPtcId())
|
||||
.setSource(participant.getSource())
|
||||
.setSecMark(participant.getSecMark())
|
||||
.setLatitude(participant.getLatitude())
|
||||
.setLongitude(participant.getLongitude())
|
||||
.setSpeed(participant.getSpeed())
|
||||
.setHeading(participant.getHeading());
|
||||
AccFourAxes accFourAxes = participant.getAccFourAxes();
|
||||
if (accFourAxes != null) {
|
||||
participantBuilder.setAccFourAxes(getAccFourAxes(accFourAxes));
|
||||
}
|
||||
VehSize vehicleSize = participant.getPtcSize();
|
||||
if (vehicleSize != null) {
|
||||
participantBuilder.setPtcSize(getVehSize(vehicleSize));
|
||||
}
|
||||
participantBuilder.setVehicleClass(participant.getVehicleClass())
|
||||
.setTargetPosition(participant.getTargetPosition());
|
||||
builder.setParticipant(participantBuilder);
|
||||
}
|
||||
V2xWarning v2xWarning = data.getWarningMsg();
|
||||
if (v2xWarning != null) {
|
||||
builder.setWarningMsg(getV2xWarning(v2xWarning));
|
||||
}
|
||||
listener.onObuRsmWarning(builder.build());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMogoObuMapMath(MogoObuMapMathData data) {
|
||||
super.onMogoObuMapMath(data);
|
||||
if (listener != null) {
|
||||
ObuScene.MapMatchData.Builder builder = ObuScene.MapMatchData.newBuilder();
|
||||
builder.setStatus(data.getStatus()).setUnitMask(data.getUnitMask());
|
||||
if (data.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_MAP_MATH.CURRENT_NODE_ID)) {
|
||||
NodeId nodeId = data.getCurrentNodeId();
|
||||
if (nodeId != null) {
|
||||
builder.setCurrentNodeID(ObuBase.NodeId.newBuilder()
|
||||
.setRegion(nodeId.getRegion())
|
||||
.setId(nodeId.getId()));
|
||||
}
|
||||
}
|
||||
if (data.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_MAP_MATH.UPSTREAM_NODE_ID)) {
|
||||
NodeId nodeId = data.getUpstreamNodeId();
|
||||
if (nodeId != null) {
|
||||
builder.setUpstreamNodeID(ObuBase.NodeId.newBuilder()
|
||||
.setRegion(nodeId.getRegion())
|
||||
.setId(nodeId.getId()));
|
||||
}
|
||||
}
|
||||
if (data.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_MAP_MATH.MATCHING_LANE_ID)) {
|
||||
builder.setMatchingLaneID(data.getMatchingLaneId());
|
||||
}
|
||||
if (data.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_MAP_MATH.SPEED_MAX_LIMIT)) {
|
||||
builder.setSpeedMaxLimit(data.getSpeedMaxLimit());
|
||||
}
|
||||
if (data.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_MAP_MATH.SPEED_MIN_LIMIT)) {
|
||||
builder.setSpeedMinLimit(data.getSpeedMinLimit());
|
||||
}
|
||||
listener.onObuMapMath(builder.build());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private ObuBase.AccFourAxes.Builder getAccFourAxes(AccFourAxes accFourAxes) {
|
||||
return ObuBase.AccFourAxes.newBuilder()
|
||||
.setAccLng(accFourAxes.getAccLng())
|
||||
.setAccLat(accFourAxes.getAccLat())
|
||||
.setAccVert(accFourAxes.getAccVert())
|
||||
.setAccYaw(accFourAxes.getAccYaw());
|
||||
}
|
||||
|
||||
private ObuBase.VehicleSize.Builder getVehSize(VehSize vehSize) {
|
||||
return ObuBase.VehicleSize.newBuilder()
|
||||
.setWidth(vehSize.getWidth())
|
||||
.setLength(vehSize.getLength())
|
||||
.setHeight(vehSize.getHeight());
|
||||
}
|
||||
|
||||
private ObuBase.VehicleBasics.Builder getVehBasics(VehBasics vehBasics) {
|
||||
ObuBase.VehicleBasics.Builder builder = ObuBase.VehicleBasics.newBuilder();
|
||||
builder.setUnitMask(vehBasics.getUnitMask());
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ID)) {
|
||||
builder.setId(vehBasics.getId());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.SEC_MARK)) {
|
||||
builder.setSecMark(vehBasics.getSecMark());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.LATITUDE)) {
|
||||
builder.setLatitude(vehBasics.getLatitude());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.LONGITUDE)) {
|
||||
builder.setLongitude(vehBasics.getLongitude());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ELEVATION)) {
|
||||
builder.setElevation(vehBasics.getElevation());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.SPEED)) {
|
||||
builder.setSpeed(vehBasics.getSpeed());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.HEADING)) {
|
||||
builder.setHeading(vehBasics.getHeading());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.ACC_FOUR_AXES)) {
|
||||
AccFourAxes accFourAxes = vehBasics.getAccFourAxes();
|
||||
if (accFourAxes != null) {
|
||||
builder.setAccFourAxes(getAccFourAxes(accFourAxes));
|
||||
}
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_SIZE)) {
|
||||
VehSize vehicleSize = vehBasics.getVehSize();
|
||||
if (vehicleSize != null) {
|
||||
builder.setVehSize(getVehSize(vehicleSize));
|
||||
}
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_CLASS)) {
|
||||
builder.setVehClass(vehBasics.getVehClass());
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.VEH_CONTROL_MSG)) {
|
||||
VehControl vehControl = vehBasics.getVehControlMsg();
|
||||
if (vehControl != null) {
|
||||
ObuBase.VehicleControl.Builder vehicleControlBuilder = ObuBase.VehicleControl.newBuilder();
|
||||
vehicleControlBuilder.setUnitMask(vehControl.getUnitMask());
|
||||
if (vehControl.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.BRAKE_PEDAL_STATUS)) {
|
||||
vehicleControlBuilder.setBrakePedalStatus(vehControl.getBrakePedalStatus());
|
||||
}
|
||||
if (vehControl.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.TRANSMISSION_STATUS)) {
|
||||
vehicleControlBuilder.setTransmissionStatus(vehControl.getTransmissionStatus());
|
||||
}
|
||||
if (vehControl.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_CONTROL.EXTERIOR_LIGHTS)) {
|
||||
vehicleControlBuilder.setExteriorLights(vehControl.getExteriorLights());
|
||||
}
|
||||
builder.setVehControlMsg(vehicleControlBuilder);
|
||||
}
|
||||
if (vehBasics.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_VEH_BASICS.TARGET_POSITION)) {
|
||||
builder.setTargetPosition(vehBasics.getTargetPosition());
|
||||
}
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
|
||||
private ObuBase.V2xWarning.Builder getV2xWarning(V2xWarning v2xWarning) {
|
||||
ObuBase.V2xWarning.Builder builder = ObuBase.V2xWarning.newBuilder();
|
||||
builder.setUnitMask(v2xWarning.getUnitMask());
|
||||
if (v2xWarning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING.WARNING_DATA)) {
|
||||
List<WarningData> list = v2xWarning.getWarningData();
|
||||
if (list != null && !list.isEmpty()) {
|
||||
for (WarningData warningData : list) {
|
||||
ObuBase.WarningData.Builder warningDataBuilder = ObuBase.WarningData.newBuilder();
|
||||
warningDataBuilder.setUnitMask(warningData.getUnitMask());
|
||||
if (warningData.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.STATUS)) {
|
||||
warningDataBuilder.setStatus(warningData.getStatus());
|
||||
}
|
||||
if (warningData.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.WARNING_TYPE)) {
|
||||
warningDataBuilder.setWarningType(warningData.getWarningType());
|
||||
}
|
||||
if (warningData.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.WARNING_LEVEL)) {
|
||||
warningDataBuilder.setWarningLevel(warningData.getWarningLevel());
|
||||
}
|
||||
if (warningData.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING_DATA.WARNING_PRIORITY)) {
|
||||
warningDataBuilder.setWarningPriority(warningData.getWarningPriority());
|
||||
}
|
||||
builder.addWarningData(warningDataBuilder);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (v2xWarning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING.WARNING_TIME)) {
|
||||
DateTime dateTime = v2xWarning.getWarningTime();
|
||||
if (dateTime != null) {
|
||||
builder.setWarningTime(ObuBase.DateTime.newBuilder()
|
||||
.setYear(dateTime.getYear())
|
||||
.setMonth(dateTime.getMonth())
|
||||
.setDay(dateTime.getDay())
|
||||
.setHour(dateTime.getHour())
|
||||
.setMinute(dateTime.getMinute())
|
||||
.setMillisecond(dateTime.getMillisecond())
|
||||
.setOffset(dateTime.getOffset())
|
||||
);
|
||||
}
|
||||
}
|
||||
if (v2xWarning.has(MogoObuConstants.UNIT_MASK.MOGO_OBU_V2X_WARNING.DISTANCE)) {
|
||||
builder.setDistance(v2xWarning.getDistance());
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
|
||||
/**
|
||||
* RV数据转换为转工控机障碍物数据
|
||||
* 赋值的包括:uuid strUuid systemTime satelliteTime latitude longitude altitude speed heading tracked_source.source type
|
||||
*
|
||||
* @param rvWarningData OBU RV数据
|
||||
* @return 工控机障碍物数据
|
||||
*/
|
||||
public MessagePad.TrackedObject obuRvToTrackedObject(ObuScene.RvWarningData rvWarningData) {
|
||||
if (rvWarningData != null && rvWarningData.hasVehBasicsMsg()) {
|
||||
ObuBase.VehicleBasics vehBasics = rvWarningData.getVehBasicsMsg();
|
||||
MessagePad.TrackedObject.Builder trackedObjectBuilder = MessagePad.TrackedObject.newBuilder();
|
||||
trackedObjectBuilder.setUuid(vehBasics.getId().hashCode());
|
||||
trackedObjectBuilder.setStrUuid(vehBasics.getId());
|
||||
double time = vehBasics.getSecMark() / 1000.0D;
|
||||
trackedObjectBuilder.setSatelliteTime(time);
|
||||
trackedObjectBuilder.setSystemTime(time);
|
||||
trackedObjectBuilder.setLatitude(vehBasics.getLatitude());
|
||||
trackedObjectBuilder.setLongitude(vehBasics.getLongitude());
|
||||
trackedObjectBuilder.setAltitude(vehBasics.getElevation());
|
||||
trackedObjectBuilder.setSpeed(vehBasics.getSpeed());
|
||||
trackedObjectBuilder.setHeading(vehBasics.getHeading());
|
||||
trackedObjectBuilder.addTrackedSource(MessagePad.TrackedSource.newBuilder().setSource(2));
|
||||
/**
|
||||
* 0 未知车辆
|
||||
* 1 特殊用途车辆
|
||||
* 10 乘用车类型(default type)
|
||||
* 20 轻卡(default type)
|
||||
* 25 卡车(default type)
|
||||
* 27 卡车(Two axle, six tire single units)
|
||||
* 28 卡车( Three axle, single units)
|
||||
* 29 卡车( Four or more axle, single unit)
|
||||
* 30 拖挂车(Four or less axle, single trailer)
|
||||
* 31 拖挂车(Four or less axle, single trailer)
|
||||
* 32 拖挂车(Six or more axle, single trailer)
|
||||
* 33 多轴拖挂车( Five or less axle, multi-trailer)
|
||||
* 34 多轴拖挂车( Six axle, multi-trailer)
|
||||
* 35 多轴拖挂车(Seven or more axle, multi-trailer)
|
||||
* 40 摩托车(default type)
|
||||
* 42 摩托车(motorcycle-Cruiser-Standard)
|
||||
* 43 摩托车(motorcycle - Sport Unclad)
|
||||
* 44 摩托车(motorcycle - Sport Touring)
|
||||
* 45 摩托车(motorcycle - Super Sport)
|
||||
* 46 摩托车(motorcycle-Touring)
|
||||
* 47 摩托车(motorcycle-Trike)
|
||||
* 48 摩托车(motorcycle - w Passengers)
|
||||
* 50 公交车( default type)
|
||||
* 52 公交车(transit-BRT)
|
||||
* 53 公交车(transit-ExpressBus)
|
||||
* 54 公交车(transit-LocalBus)
|
||||
* 55 公交车(transit-SchoolBus)
|
||||
* 56 公交车(transit-FixedGuideway)
|
||||
* 57 公交车(transit-Paratransit)
|
||||
* 58 公交车(transit-Paratransit-Ambulance)
|
||||
* 60 紧急车辆(default type)
|
||||
* 62 紧急车辆(emergency-Fire-Light)
|
||||
* 63 紧急车辆(emergency-Fire-Heavy)
|
||||
* 64 紧急车辆(emergency-Fire-Paramedic)
|
||||
* 65 紧急车辆(emergency-Fire-Ambulance)
|
||||
* 66 紧急车辆(emergency-Police-Light)
|
||||
* 67 紧急车辆(emergency-Police-Heavy)
|
||||
* 68 紧急车辆(emergency-Other-Responder)
|
||||
* 69 紧急车辆(emergency-Other-Ambulance)
|
||||
* 80 其他配备 V2X 的道路参与者(default type)
|
||||
* 82 其他配备 V2X 的道路参与者(otherTraveler-Pedestrian)
|
||||
* 83 其他配备 V2X 的道路参与者(otherTraveler-Visually-Disabled)
|
||||
* 84 其他配备 V2X 的道路参与者(otherTraveler-Physically-Disabled)
|
||||
* 85 其他配备 V2X 的道路参与者(otherTraveler-Bicycle)
|
||||
* 86 其他配备 V2X 的道路参与者(otherTraveler-Vulnerable-Roadworker)
|
||||
*/
|
||||
int vehClass = vehBasics.getVehClass();
|
||||
if (vehClass >= 20 && vehClass < 30) {//卡车 20 25 27 28 29
|
||||
vehClass = 8;
|
||||
} else if (vehClass >= 40 && vehClass < 50) {//摩托车 40 42 43 44 45 46 47 48
|
||||
vehClass = 4;
|
||||
} else if (vehClass >= 50 && vehClass < 60) {//公交车 50 52 53 54 55 56 57 58
|
||||
vehClass = 6;
|
||||
} else if (vehClass == 82) {//其他配备 V2X 的道路参与者(otherTraveler-Pedestrian)
|
||||
vehClass = 1;
|
||||
} else if (vehClass == 85) {//其他配备 V2X 的道路参与者(otherTraveler-Bicycle)
|
||||
vehClass = 2;
|
||||
} else {
|
||||
vehClass = 3;
|
||||
}
|
||||
trackedObjectBuilder.setType(vehClass);
|
||||
return trackedObjectBuilder.build();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.zhidao.support.obu;
|
||||
|
||||
import com.mogo.support.obu.ObuScene;
|
||||
import com.mogo.support.obu.constants.Define;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
|
||||
|
||||
public interface OnObuListener {
|
||||
|
||||
/**
|
||||
* 连接状态
|
||||
*
|
||||
* @param connectStatus 连接状态
|
||||
*/
|
||||
void onConnectStatus(@Define.ConnectStatus int connectStatus);
|
||||
|
||||
|
||||
/**
|
||||
* HV车辆基础信息
|
||||
*
|
||||
* @param hvBasicsData 数据
|
||||
*/
|
||||
// void onObuHvBasics(ObuScene.HvBasicsData hvBasicsData);
|
||||
|
||||
/**
|
||||
* HV车辆基础信息转工控机自车数据格式
|
||||
*
|
||||
* @param gnssInfo 数据
|
||||
*/
|
||||
void onGnssInfo(MessagePad.GnssInfo gnssInfo);
|
||||
|
||||
/**
|
||||
* V2V预警信息
|
||||
* OBU RV数据转工控机障碍物数据:{@link ObuManager#obuRvToTrackedObject(ObuScene.RvWarningData)}
|
||||
*
|
||||
* @param rvWarningData 数据
|
||||
*/
|
||||
void onObuRvWarning(ObuScene.RvWarningData rvWarningData);
|
||||
|
||||
/**
|
||||
* OBU 红绿灯预警信息
|
||||
*
|
||||
* @param spatWarningData 数据
|
||||
*/
|
||||
void onObuSpatWarning(ObuScene.SpatWarningData spatWarningData);
|
||||
|
||||
/**
|
||||
* OBU RSI预警信息
|
||||
*
|
||||
* @param rsiWarningData 数据
|
||||
*/
|
||||
void onObuRsiWarning(ObuScene.RsiWarningData rsiWarningData);
|
||||
|
||||
/**
|
||||
* OBU RSM预警信息
|
||||
*
|
||||
* @param rsmWarningData 数据
|
||||
*/
|
||||
void onObuRsmWarning(ObuScene.RsmWarningData rsmWarningData);
|
||||
|
||||
/**
|
||||
* OBU 地图匹配结果
|
||||
*
|
||||
* @param mapMatchData 数据
|
||||
*/
|
||||
void onObuMapMath(ObuScene.MapMatchData mapMatchData);
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user