[change]增加版本兼容性主动查询方法 以及回调方法
This commit is contained in:
@@ -73,6 +73,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.IPCUpgradeStateInfo;
|
||||
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;
|
||||
import com.zhidao.support.adas.high.common.ProtocolStatus;
|
||||
@@ -987,6 +988,11 @@ public class MainActivity extends BaseActivity implements OnAdasListener, OnAdas
|
||||
CupidLogUtils.i(TAG, "connectStatus=" + status);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompatibility(VersionCompatibility versionCompatibility) {
|
||||
showToastCenter("所连工控机:\n" + versionCompatibility.toString(), Toast.LENGTH_LONG);
|
||||
}
|
||||
|
||||
private void showLocalIP() {
|
||||
showToastCenter("已刷新本机IP");
|
||||
localIp.setText("本机IP:" + getIpAddressString());
|
||||
|
||||
@@ -22,9 +22,9 @@ import com.zhidao.adas.client.BuildConfig;
|
||||
import com.zhidao.adas.client.R;
|
||||
import com.zhidao.adas.client.adapter.ConfigAdapter;
|
||||
import com.zhidao.adas.client.base.BaseFragment;
|
||||
import com.zhidao.adas.client.bean.CarConfigResp;
|
||||
import com.zhidao.adas.client.bean.Config;
|
||||
import com.zhidao.support.adas.high.AdasManager;
|
||||
import com.zhidao.support.adas.high.bean.VersionCompatibility;
|
||||
import com.zhidao.support.adas.high.common.CupidLogUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -169,6 +169,8 @@ public class VersionFragment extends BaseFragment {
|
||||
list.add(new Config("最大加速度:", adasConfig == null ? null : adasConfig.getMaxAcceleration() + "m/s²"));
|
||||
list.add(new Config("IPC通信协议版本:", adasConfig == null ? null : String.valueOf(adasConfig.getProtocolVersionValue())));
|
||||
list.add(new Config("APP通信协议版本:", String.valueOf(AdasManager.getInstance().getProtocolVersion())));
|
||||
VersionCompatibility versionCompatibility = AdasManager.getInstance().getVersionCompatibility();
|
||||
list.add(new Config("版本兼容性:", versionCompatibility == null ? null : versionCompatibility.toString()));
|
||||
}
|
||||
list.add(new Config("ADAS LIB版本:", AdasManager.getInstance().getAdasVersion()));
|
||||
list.add(new Config("APP构建时间:", BuildConfig.BUILD_TIME));
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.zhidao.support.adas.high.AdasManager
|
||||
import com.zhidao.support.adas.high.OnAdasConnectStatusListener
|
||||
import com.zhidao.support.adas.high.bean.VersionCompatibility
|
||||
import com.zhidao.support.adas.high.common.Constants
|
||||
import io.reactivex.Flowable
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
@@ -78,6 +79,10 @@ class MoGoAdasMsgConnectStatusListenerImpl : OnAdasConnectStatusListener,
|
||||
CallerAutoPilotStatusListenerManager.invokeAutoPilotStatus()
|
||||
}
|
||||
|
||||
override fun onCompatibility(versionCompatibility: VersionCompatibility?) {
|
||||
// 与所连接工控机版本兼容性检查通知
|
||||
}
|
||||
|
||||
/**
|
||||
* 工控机获取SN
|
||||
*/
|
||||
|
||||
@@ -14,6 +14,7 @@ import androidx.annotation.Nullable;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import com.zhidao.support.adas.high.bean.BaseInfo;
|
||||
import com.zhidao.support.adas.high.bean.VersionCompatibility;
|
||||
import com.zhidao.support.adas.high.common.Constants;
|
||||
import com.zhidao.support.adas.high.common.CupidLogUtils;
|
||||
import com.zhidao.support.adas.high.common.Define;
|
||||
@@ -61,6 +62,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
|
||||
private FpgaSocket mSocket;
|
||||
private RawUnpack rawUnpack;//数据拆包
|
||||
private RawPack rawPack;//数据打包
|
||||
private Timer checkCompatibilityTimer;//检查版本兼容性定时器 连接成功后5秒内等待工控机发送配置信息
|
||||
/**
|
||||
* 与工控机链接状态
|
||||
*/
|
||||
@@ -433,6 +435,73 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
|
||||
if (adasConnectStatusListener != null) {
|
||||
adasConnectStatusListener.onConnectionIPCStatus(ipcConnectionStatus.get(), reason);
|
||||
}
|
||||
if (status == Constants.IPC_CONNECTION_STATUS.CONNECTED) {
|
||||
startCheckCompatibility();
|
||||
} else {
|
||||
stopCheckCompatibility();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查兼容性
|
||||
*/
|
||||
private void startCheckCompatibility() {
|
||||
if (checkCompatibilityTimer == null) {
|
||||
checkCompatibilityTimer = new Timer();
|
||||
checkCompatibilityTimer.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (adasConnectStatusListener != null) {
|
||||
adasConnectStatusListener.onCompatibility(getVersionCompatibility());
|
||||
}
|
||||
stopCheckCompatibility();
|
||||
}
|
||||
}, 6 * 1000L);//延时
|
||||
}
|
||||
}
|
||||
|
||||
private void stopCheckCompatibility() {
|
||||
if (checkCompatibilityTimer != null) {
|
||||
checkCompatibilityTimer.cancel();
|
||||
checkCompatibilityTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取与当前连接工控机兼容性
|
||||
* 连接状态=已连接 时正常返回,其他状态全部为null
|
||||
*
|
||||
* @return 兼容性
|
||||
*/
|
||||
@Override
|
||||
public VersionCompatibility getVersionCompatibility() {
|
||||
//判断是否是已连接成功
|
||||
if (ipcConnectionStatus.get() == Constants.IPC_CONNECTION_STATUS.CONNECTED) {
|
||||
MessagePad.CarConfigResp carConfigResp = AdasManager.getInstance().getCarConfig();
|
||||
boolean isCompatibility = false;
|
||||
VersionCompatibility.VersionCompatibilityDegree compatibilityDegree = VersionCompatibility.VersionCompatibilityDegree.INCOMPATIBLE;
|
||||
int appProtocolVersion = AdasManager.getInstance().getProtocolVersion();
|
||||
int ipcProtocolVersion = -1;
|
||||
String msg = "与当前连接工控机不兼容";
|
||||
if (carConfigResp != null) {
|
||||
ipcProtocolVersion = carConfigResp.getProtocolVersionValue();
|
||||
if (ipcProtocolVersion == appProtocolVersion) {
|
||||
isCompatibility = true;
|
||||
compatibilityDegree = VersionCompatibility.VersionCompatibilityDegree.CONGRUENT;
|
||||
msg = "与当前连接工控机完美兼容";
|
||||
} else if (ipcProtocolVersion == 0) {
|
||||
isCompatibility = false;
|
||||
compatibilityDegree = VersionCompatibility.VersionCompatibilityDegree.INCOMPATIBLE;
|
||||
msg = "与当前连接工控机不兼容,工控机协议版本有误";
|
||||
} else {
|
||||
isCompatibility = true;
|
||||
compatibilityDegree = VersionCompatibility.VersionCompatibilityDegree.COMPATIBILITY;
|
||||
msg = "与当前连接工控机兼容,建议使用相同版本协议通讯";
|
||||
}
|
||||
}
|
||||
return new VersionCompatibility(isCompatibility, compatibilityDegree, appProtocolVersion, ipcProtocolVersion, msg);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
void setOnAdasListener(OnAdasListener adasListener) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.content.Context;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.zhidao.support.adas.high.bean.BaseInfo;
|
||||
import com.zhidao.support.adas.high.bean.VersionCompatibility;
|
||||
import com.zhidao.support.adas.high.common.AppPreferenceHelper;
|
||||
import com.zhidao.support.adas.high.common.Constants;
|
||||
|
||||
@@ -182,6 +183,20 @@ public class AdasManager implements IAdasNetCommApi {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取与当前连接工控机兼容性
|
||||
* 连接状态=已连接 时正常返回,其他状态全部为null
|
||||
*
|
||||
* @return 兼容性
|
||||
*/
|
||||
@Override
|
||||
public VersionCompatibility getVersionCompatibility() {
|
||||
if (mChannel != null) {
|
||||
return mChannel.getVersionCompatibility();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析工控机发送过来的数据
|
||||
* 多设备时使用
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.zhidao.support.adas.high;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.zhidao.support.adas.high.bean.BaseInfo;
|
||||
import com.zhidao.support.adas.high.bean.VersionCompatibility;
|
||||
import com.zhidao.support.adas.high.common.Constants;
|
||||
|
||||
import mogo.telematics.pad.MessagePad;
|
||||
@@ -204,5 +205,11 @@ public interface IAdasNetCommApi {
|
||||
*/
|
||||
void setEnableLog(boolean isEnableLog);
|
||||
|
||||
|
||||
/**
|
||||
* 获取与当前连接工控机兼容性
|
||||
* 连接状态=已连接 时正常返回,其他状态全部为null
|
||||
*
|
||||
* @return 兼容性
|
||||
*/
|
||||
VersionCompatibility getVersionCompatibility();
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.zhidao.support.adas.high;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.zhidao.support.adas.high.bean.VersionCompatibility;
|
||||
import com.zhidao.support.adas.high.common.Constants;
|
||||
import com.zhidao.support.adas.high.common.Define;
|
||||
|
||||
@@ -21,4 +22,10 @@ public interface OnAdasConnectStatusListener {
|
||||
*/
|
||||
void onConnectionIPCStatus(@Define.IPCConnectionStatus int ipcConnectionStatus, @Nullable String reason);
|
||||
|
||||
/**
|
||||
* 与工控机版本的兼容性
|
||||
*
|
||||
* @param versionCompatibility 版本兼容对象
|
||||
*/
|
||||
void onCompatibility(VersionCompatibility versionCompatibility);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
package com.zhidao.support.adas.high.bean;
|
||||
|
||||
import com.zhidao.support.adas.high.common.Define;
|
||||
|
||||
/**
|
||||
* 版本兼容性
|
||||
*/
|
||||
public class VersionCompatibility {
|
||||
/**
|
||||
* 兼容程度
|
||||
*/
|
||||
public interface VERSION_COMPATIBILITY_DEGREE {
|
||||
/**
|
||||
* 不兼容
|
||||
*/
|
||||
int INCOMPATIBLE = 0x00;
|
||||
/**
|
||||
* 兼容
|
||||
*/
|
||||
int COMPATIBILITY = 0x01;
|
||||
/**
|
||||
* 完全一致 全等
|
||||
*/
|
||||
int CONGRUENT = 0x02;
|
||||
|
||||
}
|
||||
|
||||
public enum VersionCompatibilityDegree {
|
||||
INCOMPATIBLE(VERSION_COMPATIBILITY_DEGREE.INCOMPATIBLE, "INCOMPATIBLE"),
|
||||
COMPATIBILITY(VERSION_COMPATIBILITY_DEGREE.COMPATIBILITY, "COMPATIBILITY"),
|
||||
CONGRUENT(VERSION_COMPATIBILITY_DEGREE.CONGRUENT, "CONGRUENT");
|
||||
|
||||
@Define.VersionCompatibilityDegree
|
||||
public final int degree;
|
||||
|
||||
public final String desc;
|
||||
|
||||
VersionCompatibilityDegree(int degree, String desc) {
|
||||
this.degree = degree;
|
||||
this.desc = desc;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 是否兼容
|
||||
*/
|
||||
public final boolean isCompatibility;
|
||||
/**
|
||||
* 版本兼容程度
|
||||
*/
|
||||
public final VersionCompatibilityDegree compatibilityDegree;
|
||||
/**
|
||||
* 鹰眼使用的协议版本号
|
||||
*/
|
||||
public final int appProtocolVersion;
|
||||
/**
|
||||
* 工控机使用的协议版本号
|
||||
*/
|
||||
public final int ipcProtocolVersion;
|
||||
/**
|
||||
* 消息 文本描述
|
||||
*/
|
||||
public final String msg;
|
||||
|
||||
public VersionCompatibility(boolean isCompatibility, VersionCompatibilityDegree compatibilityDegree, int appProtocolVersion, int ipcProtocolVersion, String msg) {
|
||||
this.isCompatibility = isCompatibility;
|
||||
this.compatibilityDegree = compatibilityDegree;
|
||||
this.appProtocolVersion = appProtocolVersion;
|
||||
this.ipcProtocolVersion = ipcProtocolVersion;
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "是否兼容:" + isCompatibility
|
||||
+ "\n兼容程度:" + compatibilityDegree.desc
|
||||
+ "\nAPP使用协议版本:" + appProtocolVersion
|
||||
+ "\nIPC使用协议版本:" + (ipcProtocolVersion == -1 ? "未知" : ipcProtocolVersion)
|
||||
+ "\n信息:" + msg;
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@ package com.zhidao.support.adas.high.common;
|
||||
|
||||
import androidx.annotation.IntDef;
|
||||
|
||||
import com.zhidao.support.adas.high.bean.VersionCompatibility;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
@@ -15,4 +17,12 @@ public final class Define {
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface IPCConnectionStatus {
|
||||
}
|
||||
|
||||
|
||||
@IntDef(flag = true, value = {VersionCompatibility.VERSION_COMPATIBILITY_DEGREE.INCOMPATIBLE,
|
||||
VersionCompatibility.VERSION_COMPATIBILITY_DEGREE.COMPATIBILITY,
|
||||
VersionCompatibility.VERSION_COMPATIBILITY_DEGREE.CONGRUENT})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface VersionCompatibilityDegree {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user