[change]增加版本兼容性主动查询方法 以及回调方法

This commit is contained in:
xinfengkun
2022-05-12 10:58:35 +08:00
parent c72d86c48f
commit 00e4414216
9 changed files with 205 additions and 2 deletions

View File

@@ -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());

View File

@@ -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));

View File

@@ -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
*/

View File

@@ -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) {

View File

@@ -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;
}
/**
* 解析工控机发送过来的数据
* 多设备时使用

View File

@@ -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();
}

View File

@@ -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);
}

View File

@@ -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;
}
}

View File

@@ -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 {
}
}