diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java index c84e8c34bb..11e2ccd221 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/MainActivity.java @@ -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()); diff --git a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java index ff7f719b48..deaaab40ac 100644 --- a/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java +++ b/app_ipc_monitoring/src/main/java/com/zhidao/adas/client/ui/VersionFragment.java @@ -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)); diff --git a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt index bcf11f56ee..ba60215687 100644 --- a/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt +++ b/core/function-impl/mogo-core-function-autopilot/src/main/java/com/mogo/eagle/core/function/autopilot/adapter/MoGoAdasMsgConnectStatusListenerImpl.kt @@ -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 */ diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java index df4a5b7033..8148945723 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasChannel.java @@ -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) { diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java index d790094ac8..f828e86ae6 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/AdasManager.java @@ -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; + } + /** * 解析工控机发送过来的数据 * 多设备时使用 diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java index f1bdc9ab60..45e7eaa5d9 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/IAdasNetCommApi.java @@ -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(); } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java index c2c7a1b4db..76a7478ccb 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasConnectStatusListener.java @@ -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); } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/VersionCompatibility.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/VersionCompatibility.java new file mode 100644 index 0000000000..5d84c29492 --- /dev/null +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/bean/VersionCompatibility.java @@ -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; + } +} diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java index 612fda44a1..02feda38b3 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/common/Define.java @@ -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 { + } }