From 14ce5d2ccfae554497763da846ffb9eb39cd6d34 Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期一, 23 九月 2019 12:55:26 +0800 Subject: [PATCH] 1. 修改实时数据各项的转换逻辑 --- src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt | 73 +++++++++++++++++++++++------------- 1 files changed, 46 insertions(+), 27 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt b/src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt index ce920ae..7c401c1 100644 --- a/src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt +++ b/src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt @@ -1,5 +1,6 @@ package com.flightfeather.obd.socket.decoder.impl +import com.flightfeather.obd.common.INVALID_DATA_4_BYTE import com.flightfeather.obd.socket.bean.EngineDataStream import com.flightfeather.obd.socket.bean.ObdInfo import com.flightfeather.obd.socket.bean.SupplementDataStream @@ -72,25 +73,31 @@ return if (dataList.size >= 37) { EngineDataStream(time, serialNum).apply { - obdSpeed = "${dataList[0]}${dataList[1]}".toIntOrNull(16)?.toDouble()?.times((1 / 256).toDouble()) + obdSpeed = "${dataList[0]}${dataList[1]}".toIntOrNull(16)?.toDouble()?.div(256) obdAirPressure = dataList[2].toIntOrNull(16)?.toDouble()?.times(0.5) obdEngineTorque = dataList[3].toIntOrNull(16)?.minus(125)?.toDouble()?.div(100) obdFrictionTorque = dataList[4].toIntOrNull(16)?.minus(125)?.toDouble()?.div(100) obdEngineRpm = "${dataList[5]}${dataList[6]}".toIntOrNull(16)?.toDouble()?.times(0.125) obdEngineFuelFlow = "${dataList[7]}${dataList[8]}".toIntOrNull(16)?.toDouble()?.times(0.05) - obdScrUpstreamNox = "${dataList[9]}${dataList[10]}".toIntOrNull(16)?.minus(200)?.toDouble()?.times(0.05) - obdScrDownstreamNox = "${dataList[11]}${dataList[12]}".toIntOrNull(16)?.minus(200)?.toDouble()?.times(0.05) + obdScrUpstreamNox = "${dataList[9]}${dataList[10]}".toIntOrNull(16)?.times(0.05)?.minus(200) + obdScrDownstreamNox = "${dataList[11]}${dataList[12]}".toIntOrNull(16)?.times(0.05)?.minus(200) obdRemainReactant = dataList[13].toIntOrNull(16)?.toDouble()?.times(0.4)?.div(100) obdAirInput = "${dataList[14]}${dataList[15]}".toIntOrNull(16)?.toDouble()?.times(0.05) - obdScrInputTemp = "${dataList[16]}${dataList[17]}".toIntOrNull(16)?.minus(273)?.toDouble()?.times(0.03125) - obdScrOutputTemp = "${dataList[18]}${dataList[19]}".toIntOrNull(16)?.minus(273)?.toDouble()?.times(0.03125) + obdScrInputTemp = "${dataList[16]}${dataList[17]}".toIntOrNull(16)?.times(0.03125)?.minus(273) + obdScrOutputTemp = "${dataList[18]}${dataList[19]}".toIntOrNull(16)?.times(0.03125)?.minus(273) obdDpf = "${dataList[20]}${dataList[21]}".toIntOrNull(16)?.toDouble()?.times(0.1) obdEngineCoolantTemp = dataList[22].toIntOrNull(16)?.minus(40)?.toDouble() obdFuelLevel = dataList[23].toIntOrNull(16)?.toDouble()?.times(0.4) obdLocationStatus = dataList[24].toIntOrNull(16) - obdLong = "${dataList[25]}${dataList[26]}${dataList[27]}${dataList[28]}".toIntOrNull(16)?.toDouble()?.times(0.000001) - obdLat = "${dataList[29]}${dataList[30]}${dataList[31]}${dataList[32]}".toIntOrNull(16)?.toDouble()?.times(0.000001) - obdTotalMileage = "${dataList[33]}${dataList[34]}${dataList[35]}${dataList[36]}".toIntOrNull(16)?.toDouble()?.times(0.1) + with("${dataList[25]}${dataList[26]}${dataList[27]}${dataList[28]}") { + obdLong = if (toUpperCase() == INVALID_DATA_4_BYTE) { -1.0 } else { toBigIntegerOrNull(16)?.toDouble()?.times(0.000001) } + } + with("${dataList[29]}${dataList[30]}${dataList[31]}${dataList[32]}") { + obdLat = if (toUpperCase() == INVALID_DATA_4_BYTE) { -1.0 } else { toBigIntegerOrNull(16)?.toDouble()?.times(0.000001) } + } + with("${dataList[33]}${dataList[34]}${dataList[35]}${dataList[36]}") { + obdTotalMileage = if (toUpperCase() == INVALID_DATA_4_BYTE) { -1.0 } else { toBigIntegerOrNull(16)?.toDouble()?.times(0.1) } + } } } else { null @@ -108,11 +115,17 @@ SupplementDataStream(time, serialNum).apply { obdEngineTorqueMode = dataList[0].toIntOrNull(16) obdAcceleratorPedal = dataList[1].toIntOrNull(16)?.toDouble()?.times(0.4)?.div(100) - obdTotalOilConsumption = "${dataList[2]}${dataList[3]}${dataList[4]}${dataList[5]}".toIntOrNull(16)?.toDouble()?.times(0.5) + with("${dataList[2]}${dataList[3]}${dataList[4]}${dataList[5]}") { + obdTotalOilConsumption = if (toUpperCase() == INVALID_DATA_4_BYTE) -1.0 else toBigIntegerOrNull(16)?.toDouble()?.times(0.5) + } obdUreaBoxTemp = dataList[6].toIntOrNull(16)?.toDouble()?.minus(40) - obdUreaVolume = "${dataList[7]}${dataList[8]}${dataList[9]}${dataList[10]}".toIntOrNull(16)?.toDouble()?.times(0.01) - obdTotalUreaConsume = "${dataList[11]}${dataList[12]}${dataList[13]}${dataList[14]}".toIntOrNull(16)?.toDouble() - obdDpfTemp = "${dataList[15]}${dataList[16]}".toIntOrNull(16)?.minus(273)?.toDouble()?.times(0.03125) + with("${dataList[7]}${dataList[8]}${dataList[9]}${dataList[10]}") { + obdUreaVolume = if (toUpperCase() == INVALID_DATA_4_BYTE) -1.0 else toBigIntegerOrNull(16)?.toDouble()?.times(0.01) + } + with("${dataList[11]}${dataList[12]}${dataList[13]}${dataList[14]}") { + obdTotalUreaConsume = if (toUpperCase() == INVALID_DATA_4_BYTE) -1.0 else toBigIntegerOrNull(16)?.toDouble() + } + obdDpfTemp = "${dataList[15]}${dataList[16]}".toIntOrNull(16)?.times(0.03125)?.minus(273) } } else { null @@ -131,31 +144,37 @@ when (list[0].toIntOrNull(16)) { ObdDataType.ObdData.value -> { - //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�97涓瓧鑺傜殑鏁版嵁 - for (i in 1..96) { - resultList.add(list[i]) - } - - val faultCodeNum = list[96].toIntOrNull() ?: 0//鏁呴殰鐮佹�绘暟 - //鏍规嵁鏁呴殰鐮佹�绘暟锛屾瘡涓晠闅滅爜4涓瓧鑺傦紝寰楀埌鏁呴殰鐮佹�诲瓧鑺傛暟 - if (faultCodeNum in 0..253) { - for (i in 97..(96 + faultCodeNum * 4)) { + if (list.size >= 97) { + //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�96涓瓧鑺傜殑鏁版嵁 + for (i in 1..96) { resultList.add(list[i]) + } + + val faultCodeNum = list[96].toIntOrNull() ?: 0//鏁呴殰鐮佹�绘暟 + //鏍规嵁鏁呴殰鐮佹�绘暟锛屾瘡涓晠闅滅爜4涓瓧鑺傦紝寰楀埌鏁呴殰鐮佹�诲瓧鑺傛暟 + if (faultCodeNum in 0..253) { + for (i in 97..(96 + faultCodeNum * 4)) { + resultList.add(list[i]) + } } } } ObdDataType.EngineDataFlow.value -> { - //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�37涓瓧鑺傜殑鏁版嵁 - for (i in 1..37) { - resultList.add(list[i]) + if (list.size >= 38) { + //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�37涓瓧鑺傜殑鏁版嵁 + for (i in 1..37) { + resultList.add(list[i]) + } } } ObdDataType.SupplementDataFlow.value -> { - //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�17涓瓧鑺傜殑鏁版嵁 - for (i in 1..17) { - resultList.add(list[i]) + if (list.size>= 18) { + //浠庤捣濮嬪瓧鑺� 1 寮�濮嬶紝鍥哄畾鏈�17涓瓧鑺傜殑鏁版嵁 + for (i in 1..17) { + resultList.add(list[i]) + } } } } -- Gitblit v1.9.3