From 58a16c3340f92a1ec0362565020f31de56faaf3e Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期四, 19 九月 2019 16:35:48 +0800 Subject: [PATCH] 1. 增加远程查看版本指令逻辑 --- src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt | 86 +++++++++++++++++++++++++++++++++++++++--- 1 files changed, 79 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt b/src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt index e57d960..ba99110 100644 --- a/src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt +++ b/src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt @@ -9,6 +9,7 @@ import com.flightfeather.obd.socket.decoder.VehicleDataDecoder import com.flightfeather.obd.socket.decoder.impl.DataPackageDecoderImpl import com.flightfeather.obd.socket.eunm.ObdCommandUnit +import io.netty.buffer.Unpooled import io.netty.channel.ChannelHandlerContext import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @@ -57,16 +58,23 @@ } fun dealStringMsg(msg: String, ctx: ChannelHandlerContext?) { + //瑙e寘 + val packageData = vehicleDataDecoder.decode(msg) + saveToTxt(msg) - if (bccCheck(msg)) { - //瑙e寘 - val packageData = vehicleDataDecoder.decode(msg) - //淇濆瓨 - DeviceSession.saveDevice(packageData.deviceCode, ctx) - saveToDataBase(packageData, msg) + val isCommand = command(packageData, ctx) + + if (isCommand) { + println("------杩滅▼鎺у埗鎸囦护 [${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())}]") } else { - println("------鏁版嵁BCC鏍¢獙澶辫触锛岃垗寮� [${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())}]") + if (bccCheck(msg)) { + //淇濆瓨 + DeviceSession.saveDevice(packageData.deviceCode, ctx) + saveToDataBase(packageData, msg) + } else { + println("------鏁版嵁BCC鏍¢獙澶辫触锛岃垗寮� [${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())}]") + } } } @@ -130,4 +138,68 @@ //杩斿洖鏍¢獙缁撴灉鏄惁姝g‘ return oldBcc == newBcc } + + /** + * 杩滅▼鎸囦护 + */ + fun command(packageData: ObdPackageData, ctx: ChannelHandlerContext?): Boolean { + if (packageData.commandUnit == ObdCommandUnit.Update.value) { + val channel = DeviceSession.getDevice(packageData.deviceCode) + if (channel != null) { + val s = getDataPackage(packageData.deviceCode) + if (s == null) { + ctx?.writeAndFlush("[${packageData.deviceCode}] 璁惧缂栧彿涓虹┖") + } else { + val bytes = encodeToBytes(s) + channel.writeAndFlush(Unpooled.copiedBuffer(bytes)) + ctx?.writeAndFlush("[${packageData.deviceCode}] 鎸囦护鍙戦�佹垚鍔�") + } + } else { + ctx?.writeAndFlush("[${packageData.deviceCode}] 璁惧鏈繛鎺ユ垨涓嶅瓨鍦�") + } + return true + } else if (packageData.commandUnit != ObdCommandUnit.CarRegister.value + && packageData.commandUnit != ObdCommandUnit.RealTimeData.value + && packageData.commandUnit != ObdCommandUnit.ReplacementData.value + && packageData.commandUnit != ObdCommandUnit.CarLogOut.value + && packageData.commandUnit != ObdCommandUnit.TimeCalibration.value) { + ctx?.writeAndFlush("[${packageData.deviceCode}] 鍛戒护涓嶅瓨鍦�") + + return true + } else { + return false + } + } + + fun encodeToBytes(msg:String): ByteArray { + val list = msg.split(" ") + val bytes = ByteArray(list.size) + for (i in 0 until list.size) { + bytes[i]=list[i].toInt(16).toByte() + } + + return bytes + } + + fun getDataPackage(deviceCode: String?): String? { + if (deviceCode == null) return null + //23 23 7f 31 37 36 39 31 35 33 31 39 30 39 31 32 30 30 31 31 01 01 00 00 39 + val sb = StringBuilder("23 23 10 ") + deviceCode.forEach { + sb.append(it.toInt().toString(16)).append(" ") + } + sb.append("01 01 00 00 00 0A 41 54 2B 56 45 52 53 49 4F 4E") + + val list = sb.split(" ") + + //璁$畻bcc鏍¢獙缁撴灉 + var bcc = 0x00 + list.forEach { + bcc = bcc.xor(it.toInt(16)) + } + + sb.append(" ").append(bcc.toString(16)) + + return sb.toString() + } } \ No newline at end of file -- Gitblit v1.9.3