src/main/kotlin/com/flightfeather/obd/repository/impl/ObdDataDaoImpl.kt
@@ -71,13 +71,13 @@ obdTime = it.time obdProtocol = it.obdProtocol obdMil = it.obdMil obdIdCode = it.obdSoftwareCode obdIdCode = it.obdCrn obdVerificationCode = it.obdCvn obdFaultCodeNum = it.obdFaultCodeNum obdFaultCode = it.obdFaultCode } } is EngineDataFlow -> { is EngineDataStream -> { obdData.apply { obdTime = it.time obdLng = it.obdLong @@ -101,7 +101,7 @@ obdTotalMileage = it.obdTotalMileage } } is SupplementDataFlow -> { is SupplementDataStream -> { obdData.apply { obdTime = it.time obdEngineTorqueMode = it.obdEngineTorqueMode?.toString() src/main/kotlin/com/flightfeather/obd/socket/bean/EngineDataStream.kt
ÎļþÃû´Ó src/main/kotlin/com/flightfeather/obd/socket/bean/EngineDataFlow.kt ÐÞ¸Ä @@ -9,7 +9,7 @@ * 宿¶ä¿¡æ¯[RealTimeData] ä¸çå卿ºæ°æ®æµ * æ°æ®ç±»å @see [ObdDataType.EngineDataFlow] */ class EngineDataFlow( class EngineDataStream( time: Date?, serialNum: Int? ) : RealTimeData(time, serialNum) { src/main/kotlin/com/flightfeather/obd/socket/bean/ObdData.kt
@@ -19,7 +19,7 @@ var diagnosisSupportStatus: String? = null//è¯ææ¯æç¶æ var diagnosisReadyStatus: String? = null//è¯æå°±ç»ªç¶æ var obdVin: String? = null var obdSoftwareCode: String? = null//软件æ å®è¯å«å· var obdCrn: String? = null//软件æ å®è¯å«å· var obdCvn: String? = null//æ å®éªè¯ç var IUPR:String?=null//å®ä¹åè SAE J 1979-DA 表 G11 var obdFaultCodeNum: Int? = null//æ éç æ»æ°: ææå¼èå´ï¼0~253ï¼â0xFEâè¡¨ç¤ºæ æã src/main/kotlin/com/flightfeather/obd/socket/bean/SupplementDataStream.kt
ÎļþÃû´Ó src/main/kotlin/com/flightfeather/obd/socket/bean/SupplementDataFlow.kt ÐÞ¸Ä @@ -45,7 +45,7 @@ * æ°æ®èå´ï¼-273~1734.96875â * â0xFF,0xFFâè¡¨ç¤ºæ æ */ class SupplementDataFlow( class SupplementDataStream( time: Date?, serialNum: Int? ) : RealTimeData(time, serialNum) { src/main/kotlin/com/flightfeather/obd/socket/decoder/RealTimeDataDecoder.kt
@@ -14,9 +14,9 @@ fun getObdData(time: Date?, serialNum: Int, b: List<String>): ObdData? fun getEngineDataFlow(time: Date?, serialNum: Int, b: List<String>): EngineDataFlow? fun getEngineDataStream(time: Date?, serialNum: Int, b: List<String>): EngineDataStream? fun getSupplementDataFlow(time: Date?, serialNum: Int, b: List<String>): SupplementDataFlow? fun getSupplementDataStream(time: Date?, serialNum: Int, b: List<String>): SupplementDataStream? /** * æ ¹æ®ä¼ å ¥çå表ï¼é»è®¤ç¬¬ä¸ä½ä¸º [ObdDataType]ï¼è¿å对åºçæ°æ®å表 src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/DataUnitDecoderImpl.kt
@@ -4,11 +4,8 @@ import com.flightfeather.obd.socket.decoder.DataUnitDecoder import com.flightfeather.obd.socket.decoder.RealTimeDataDecoder import com.flightfeather.obd.socket.eunm.ObdDataType import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component import java.lang.StringBuilder import java.util.* import javax.annotation.PostConstruct /** * @author riku @@ -72,8 +69,8 @@ if (data.isNotEmpty()) { val r = when (data[0].toInt(16)) { ObdDataType.ObdData.value -> realTimeDataDecoder.getObdData(time, serialNum, data) ObdDataType.EngineDataFlow.value -> realTimeDataDecoder.getEngineDataFlow(time, serialNum, data) ObdDataType.SupplementDataFlow.value -> realTimeDataDecoder.getSupplementDataFlow(time, serialNum, data) ObdDataType.EngineDataFlow.value -> realTimeDataDecoder.getEngineDataStream(time, serialNum, data) ObdDataType.SupplementDataFlow.value -> realTimeDataDecoder.getSupplementDataStream(time, serialNum, data) else -> null } src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/RealTimeDataDecoderImpl.kt
@@ -1,11 +1,10 @@ package com.flightfeather.obd.socket.decoder.impl import com.flightfeather.obd.socket.bean.EngineDataFlow import com.flightfeather.obd.socket.bean.EngineDataStream import com.flightfeather.obd.socket.bean.ObdData import com.flightfeather.obd.socket.bean.SupplementDataFlow import com.flightfeather.obd.socket.bean.SupplementDataStream import com.flightfeather.obd.socket.decoder.RealTimeDataDecoder import com.flightfeather.obd.socket.eunm.ObdDataType import org.springframework.stereotype.Component import java.util.* /** @@ -53,7 +52,7 @@ diagnosisSupportStatus = "${dataList[2]}${dataList[3]}".toIntOrNull(16)?.toString(2) diagnosisReadyStatus = "${dataList[4]}${dataList[5]}".toIntOrNull(16)?.toString(2) obdVin = vin.toString() obdSoftwareCode = softwareCode.toString() obdCrn = softwareCode.toString() obdCvn = cvn.toString() this.IUPR = IUPR.toString() obdFaultCodeNum = faultCodeNum @@ -64,7 +63,7 @@ } } override fun getEngineDataFlow(time: Date?, serialNum: Int, b: List<String>): EngineDataFlow? { override fun getEngineDataStream(time: Date?, serialNum: Int, b: List<String>): EngineDataStream? { val dataList = mutableListOf<String>().apply { addAll(b) } if (b.isNotEmpty()) { //å»é¤ ä¿¡æ¯ç±»åæ å¿ @@ -72,7 +71,7 @@ } return if (dataList.size >= 37) { EngineDataFlow(time, serialNum).apply { EngineDataStream(time, serialNum).apply { obdSpeed = "${dataList[0]}${dataList[1]}".toIntOrNull(16)?.toDouble()?.times((1 / 256).toDouble()) obdAirPressure = dataList[2].toIntOrNull(16)?.toDouble()?.times(0.5) obdEngineTorque = dataList[3].toIntOrNull(16)?.minus(125)?.toDouble()?.div(100) @@ -98,7 +97,7 @@ } } override fun getSupplementDataFlow(time: Date?, serialNum: Int, b: List<String>): SupplementDataFlow? { override fun getSupplementDataStream(time: Date?, serialNum: Int, b: List<String>): SupplementDataStream? { val dataList = mutableListOf<String>().apply { addAll(b) } if (b.isNotEmpty()) { //å»é¤ ä¿¡æ¯ç±»åæ å¿ @@ -106,7 +105,7 @@ } return if (dataList.size >= 17) { SupplementDataFlow(time, serialNum).apply { 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) src/main/kotlin/com/flightfeather/obd/socket/eunm/ObdDataType.kt
@@ -8,9 +8,9 @@ * 宿¶ä¿¡æ¯[RealTimeData]åè¡¥åä¿¡æ¯[ReplacementData] ä¸çæ°æ®ç±»å * ç±»åç¼ç 说æ * 0x01 OBD ä¿¡æ¯ @see [com.flightfeather.obd.socket.bean.ObdData] * 0x02 æ°æ®æµä¿¡æ¯ @see[com.flightfeather.obd.socket.bean.EngineDataFlow] * 0x02 æ°æ®æµä¿¡æ¯ @see[com.flightfeather.obd.socket.bean.EngineDataStream] * 0x03-0x7F é¢ç * 0x80 è¡¥å æ°æ®æµ @see[com.flightfeather.obd.socket.bean.SupplementDataFlow] * 0x80 è¡¥å æ°æ®æµ @see[com.flightfeather.obd.socket.bean.SupplementDataStream] * 0x81~0xFE ç¨æ·èªå®ä¹ */ enum class ObdDataType constructor(val value: Int){ src/test/kotlin/com/flightfeather/obd/socket/decoder/VehicleDataDecoderTest.kt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,117 @@ package com.flightfeather.obd.socket.decoder import com.flightfeather.obd.domain.entity.ObdData import com.flightfeather.obd.socket.bean.* import com.flightfeather.obd.socket.eunm.ObdCommandUnit import org.junit.Test /** * @author riku * Date: 2019/9/17 */ class VehicleDataDecoderTest { private val vehicleDataDecoder = VehicleDataDecoder() @Test fun decode() { val msg = "23 23 02 31 37 36 39 31 35 33 31 39 30 39 31 32 30 30 30 36 01 01 00 42 13 09 11 08 3b 36 02 00 3a 00 00 d4 00 00 12 c0 09 5e 00 c8 00 c8 00 15 a9 00 00 00 00 00 00 73 00 00 00 b9 1b c7 00 2e e1 24 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 dc" val msg2 = "23 23 02 31 37 36 39 31 35 33 31 39 30 39 31 32 30 30 30 36 01 01 00 42 13 09 11 08 3b 36 02 00 3b 00 00 d4 00 00 12 c0 09 5e 00 c8 00 c8 00 15 a9 00 00 00 00 00 00 73 00 00 00 b9 1b c7 00 2e e1 25 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 dc" val packageData = vehicleDataDecoder.decode(msg2) val obdData = ObdData().apply { obdVin = packageData.deviceCode } when (packageData.commandUnit) { ObdCommandUnit.CarRegister.value -> { packageData.dataUnit.forEach { when (it) { is CarRegisterData -> { obdData.apply { obdTime = it.time } } } } } ObdCommandUnit.RealTimeData.value, ObdCommandUnit.ReplacementData.value -> { packageData.dataUnit.forEach { when (it) { is com.flightfeather.obd.socket.bean.ObdData -> { obdData.apply { obdTime = it.time obdProtocol = it.obdProtocol obdMil = it.obdMil obdIdCode = it.obdCrn obdVerificationCode = it.obdCvn obdFaultCodeNum = it.obdFaultCodeNum obdFaultCode = it.obdFaultCode } } is EngineDataStream -> { obdData.apply { obdTime = it.time obdLng = it.obdLong obdLat = it.obdLat obdSpeed = it.obdSpeed?.toInt() obdAirPressure = it.obdAirPressure obdEngineTorque = it.obdEngineTorque obdFrictionTorque = it.obdFrictionTorque obdEngineRpm = it.obdEngineRpm?.toInt() obdStartFuelFlow = it.obdEngineFuelFlow obdScrUpstreamNo = it.obdScrUpstreamNo obdScrDownstreamNo = it.obdScrDownstreamNo obdRemainReactant = it.obdRemainReactant obdAirInput = it.obdAirInput obdScrInputTemp = it.obdScrInputTemp obdScrOutputTemp = it.obdScrOutputTemp obdDpf = it.obdDpf obdEngineCoolantTemp = it.obdEngineCoolantTemp obdFuelLevel = it.obdFuelLevel obdLocationStatus = it.obdLocationStatus obdTotalMileage = it.obdTotalMileage } } is SupplementDataStream -> { obdData.apply { obdTime = it.time obdEngineTorqueMode = it.obdEngineTorqueMode?.toString() obdAcceleratorPedal = it.obdAcceleratorPedal obdTotalOilConsumption = it.obdTotalOilConsumption obdUreaBoxTemp = it.obdUreaBoxTemp obdUreaVolume = it.obdUreaVolume?.toInt() obdTotalUreaConsume = it.obdTotalUreaConsume obdDpfTemp = it.obdDpfTemp // obdFirmwareVersion = } } } } } ObdCommandUnit.CarLogOut.value -> { packageData.dataUnit.forEach { when (it) { is CarLogOutData -> { obdData.apply { obdTime = it.time } } } } } ObdCommandUnit.TimeCalibration.value -> { packageData.dataUnit.forEach { when (it) { is TimeCalibrationData -> { obdData.apply { obdTime = it.time } } } } } } } }