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