src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt
@@ -2,7 +2,10 @@ import com.flightfeather.obd.common.utils.FileUtil import com.flightfeather.obd.repository.* import com.flightfeather.obd.socket.bean.EngineDataStream import com.flightfeather.obd.socket.bean.ObdInfo import com.flightfeather.obd.socket.bean.ObdPackageData import com.flightfeather.obd.socket.bean.SupplementDataStream import com.flightfeather.obd.socket.decoder.VehicleDataDecoder import com.flightfeather.obd.socket.decoder.impl.DataPackageDecoderImpl import com.flightfeather.obd.socket.eunm.ObdCommandUnit @@ -84,7 +87,20 @@ when (packageData.commandUnit) { ObdCommandUnit.CarRegister.value -> instance.carLoginRepository.saveCarLogin(packageData) ObdCommandUnit.RealTimeData.value, ObdCommandUnit.ReplacementData.value -> instance.dataStreamRepository.saveDataStream(packageData) ObdCommandUnit.ReplacementData.value -> { var done = false for (i in 0 until packageData.dataUnit.size) { when (packageData.dataUnit[i]) { is ObdInfo -> instance.obdInfoRepository.saveObdInfo(packageData) is EngineDataStream, is SupplementDataStream -> { instance.dataStreamRepository.saveDataStream(packageData) done = true } } if (done) break } } ObdCommandUnit.CarLogOut.value-> instance.carLogoutRepository.saveCarLogout(packageData) } } src/main/kotlin/com/flightfeather/obd/socket/decoder/impl/DataUnitDecoderImpl.kt
@@ -32,10 +32,10 @@ val time = decodeDataTime(b) //国标法: 起始字节为7 开始的2个字节表示 流水号 val serialNum = "${b[7]}${b[8]}".toInt(16) // val serialNum = "${b[7]}${b[8]}".toInt(16) //上海法: 起始字节为6 开始的2个字节表示 流水号 // val serialNum = "${b[6]}${b[7]}".toInt(16) val serialNum = "${b[6]}${b[7]}".toInt(16) val dataList = mutableListOf<String>().apply { addAll(b) } //删去前6位时间 @@ -48,15 +48,15 @@ * 删去流水号,得到信息标志与信息体的组合 * (国标法:去除前6位时间后,起始字节为1 开始的2个字节表示 流水号) */ if (dataList.size >= 2) dataList.removeAt(1) if (dataList.size >= 2) dataList.removeAt(1) // if (dataList.size >= 2) dataList.removeAt(1) // if (dataList.size >= 2) dataList.removeAt(1) /* * 删去流水号,得到信息标志与信息体的组合 * (上海法:去除前6位时间后,起始字节为0 开始的2个字节表示 流水号) */ // if (dataList.isNotEmpty()) dataList.removeAt(0) // if (dataList.isNotEmpty()) dataList.removeAt(0) if (dataList.isNotEmpty()) dataList.removeAt(0) if (dataList.isNotEmpty()) dataList.removeAt(0) val resultList = mutableListOf<RealTimeData>() src/test/kotlin/com/flightfeather/obd/Test.kt
@@ -14,7 +14,8 @@ @Test fun foo1() { val b = ByteArray(20) {8} println(b[18]) val a = 1 println(a.toString(2)) } @Test @@ -127,4 +128,15 @@ println(SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cal.time)) } @Test fun f0012() { ByteArray(3).forEach { println(it) return } println("end") } } src/test/kotlin/com/flightfeather/obd/socket/decoder/VehicleDataDecoderTest.kt
@@ -15,9 +15,9 @@ @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 msg = "23 23 02 31 37 36 39 31 35 33 31 39 30 39 31 32 30 30 30 32 01 01 00 85 13 09 12 15 01 2d 00 08 01 00 01 60 00 00 00 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 07 00 00 04 20 00 00 04 20 00 00 c1 13 00 00 00 73 00 00 30 28 00 00 30 25 00 00 30 56 1d" 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 packageData = vehicleDataDecoder.decode(msg) val obdData = ObdData().apply { obdVin = packageData.deviceCode