diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt index 5d2b760bc0..b8625d133b 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -14,6 +14,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_AD import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_CONFIG import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_LOC import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_COLD_START_STATE +import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_ALL_ERROR import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_FM_MSG import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_FSM_MSG import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_GUARDIAN @@ -119,6 +120,7 @@ import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop +import com.zhjt.mogo.adas.utils.ByteUtil import com.zhjt.service.chain.ChainLog import fault_management.FmInfo import fsm.Fsm2024 @@ -138,6 +140,8 @@ import prediction.Prediction import record_cache.RecordPanelOuterClass import system_master.SsmInfo import system_master.SystemStatusInfo +import java.io.PrintWriter +import java.io.StringWriter import kotlin.math.roundToInt /** @@ -1534,11 +1538,43 @@ class MoGoAdasListenerImpl : OnAdasListener { } /** - * 数据解析失败、数据异常回调 - * @param status 错误原因 - * @param bytes 原始数据 + * ADAS LIB中进行的异常捕获,包括解析异常和数据使用异常(UI层) + * + * @param status 错误原因 + * @param bytes 原始数据 + * @param exception 异常堆栈 status==ProtocolStatus.BUSINESS_DATA_PARSE_FAILED 或 ProtocolStatus.HEADER_DECODE_FAILED 时才存在异常信息 */ - override fun onError(status: ProtocolStatus, bytes: ByteArray) { - CallerLogger.e("$M_D_C$TAG", "status===$status") + override fun onError( + status: ProtocolStatus, + bytes: ByteArray?, + exception: java.lang.Exception? + ) { + val s = status.desc + val b = try { + if (bytes == null || bytes.isEmpty()) "NULL" else ByteUtil.byteArrToHex(bytes, false) + } catch (ex: Exception) { + "转换异常:" + ex.message + } + val e = + if ((status == ProtocolStatus.BUSINESS_DATA_PARSE_FAILED || status == ProtocolStatus.HEADER_DECODE_FAILED) && exception != null) { + val sw = StringWriter() + val pw = PrintWriter(sw) + exception.printStackTrace(pw) + sw.toString().trim() + } else { + "NULL" + } + adasError(s, b, e) + CallerLogger.e("$M_D_C$TAG", "数据错误 协议状态:$s 异常堆栈:$e") + } + + @ChainLog( + linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT, + linkCode = CHAIN_SOURCE_ADAS, + nodeAliasCode = CHAIN_CODE_ADAS_ALL_ERROR, + paramIndexes = [0, 1, 2] + ) + private fun adasError(status: String, bytes: String, error: String) { + } } \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt index 4f1081368b..9f95285af3 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt @@ -78,6 +78,7 @@ class ChainConstant { const val CHAIN_CODE_ADAS_AUTOPILOT_INFO = "CHAIN_CODE_ADAS_AUTOPILOT_INFO" const val CHAIN_CODE_ADAS_COLD_START_STATE = "CHAIN_CODE_ADAS_COLD_START_STATE" const val CHAIN_CODE_ADAS_LOST_FRAME = "CHAIN_CODE_ADAS_LOST_FRAME" + const val CHAIN_CODE_ADAS_ALL_ERROR = "CHAIN_CODE_ADAS_ALL_ERROR"//ADAS LIB中进行的异常捕获,包括解析异常和数据使用异常(UI层) const val CHAIN_CODE_RECORD_NATIVE_LEAK = "CHAIN_CODE_RECORD_NATIVE_LEAK" 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 134c227fe9..8dcdfd175a 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 @@ -533,8 +533,7 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec } } } catch (Exception e) { - callError(ProtocolStatus.HEADER_DECODE_FAILED, byteString.toByteArray()); - CupidLogUtils.e(TAG, "原始数据:" + ByteUtil.byteArrToHex(byteString.toByteArray()), e); + callError(ProtocolStatus.HEADER_DECODE_FAILED, byteString.toByteArray(), e); } } @@ -664,14 +663,17 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec callError(raw.getProtocolStatus(), raw.originalData.toByteArray()); } } catch (Exception e) { - callError(ProtocolStatus.BUSINESS_DATA_PARSE_FAILED, raw.originalData.toByteArray()); - CupidLogUtils.e(TAG, "原始数据:" + ByteUtil.byteArrToHex(raw.originalData.toByteArray()), e); + callError(ProtocolStatus.BUSINESS_DATA_PARSE_FAILED, raw.originalData.toByteArray(), e); } } private void callError(ProtocolStatus status, byte[] bytes) { + callError(status, bytes, null); + } + + private void callError(ProtocolStatus status, byte[] bytes, Exception exception) { if (mAdasListener != null) { - mAdasListener.onError(status, bytes); + mAdasListener.onError(status, bytes, exception); } } diff --git a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java index 2d475249a6..e6bf26e81c 100644 --- a/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java +++ b/libraries/mogo-adas/src/main/java/com/zhidao/support/adas/high/OnAdasListener.java @@ -706,10 +706,11 @@ public interface OnAdasListener { void onAutopilotStatistics(AutopilotStatistics statistics); /** - * 数据错误 + * ADAS LIB中进行的异常捕获,包括解析异常和数据使用异常(UI层) * - * @param status 错误原因 - * @param bytes 原始数据 + * @param status 错误原因 + * @param bytes 原始数据 + * @param exception 异常堆栈 status==ProtocolStatus.BUSINESS_DATA_PARSE_FAILED 或 ProtocolStatus.HEADER_DECODE_FAILED 时才存在异常信息 */ - void onError(ProtocolStatus status, byte[] bytes); + void onError(@NonNull ProtocolStatus status, @Nullable byte[] bytes, @Nullable Exception exception); }