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/DeviceSession.kt | 5 ++
src/main/kotlin/com/flightfeather/obd/socket/eunm/ObdCommandUnit.kt | 4 +
src/main/kotlin/com/flightfeather/obd/socket/MessageManager.kt | 86 +++++++++++++++++++++++++++++++++++++++---
src/main/kotlin/com/flightfeather/obd/socket/ServerHandler.kt | 2
src/main/kotlin/com/flightfeather/obd/socket/SocketServerClient.kt | 3 +
5 files changed, 89 insertions(+), 11 deletions(-)
diff --git a/src/main/kotlin/com/flightfeather/obd/socket/DeviceSession.kt b/src/main/kotlin/com/flightfeather/obd/socket/DeviceSession.kt
index 8cd64a8..b53955e 100644
--- a/src/main/kotlin/com/flightfeather/obd/socket/DeviceSession.kt
+++ b/src/main/kotlin/com/flightfeather/obd/socket/DeviceSession.kt
@@ -20,7 +20,10 @@
}
fun getDevice(deviceCode: String?): ChannelHandlerContext? {
- return if (deviceMap.contains(deviceCode)) deviceMap[deviceCode] else null
+ return if (deviceMap.containsKey(deviceCode))
+ deviceMap[deviceCode]
+ else
+ null
}
}
}
\ No newline at end of file
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
diff --git a/src/main/kotlin/com/flightfeather/obd/socket/ServerHandler.kt b/src/main/kotlin/com/flightfeather/obd/socket/ServerHandler.kt
index 475a87b..018a932 100644
--- a/src/main/kotlin/com/flightfeather/obd/socket/ServerHandler.kt
+++ b/src/main/kotlin/com/flightfeather/obd/socket/ServerHandler.kt
@@ -40,7 +40,7 @@
} else {
a.toString(16)
}
- print(s)
+ print("$s ")
sb.append(s).append(" ")
}
sb.deleteCharAt(sb.length - 1)
diff --git a/src/main/kotlin/com/flightfeather/obd/socket/SocketServerClient.kt b/src/main/kotlin/com/flightfeather/obd/socket/SocketServerClient.kt
index 80904b7..5ee34b1 100644
--- a/src/main/kotlin/com/flightfeather/obd/socket/SocketServerClient.kt
+++ b/src/main/kotlin/com/flightfeather/obd/socket/SocketServerClient.kt
@@ -13,6 +13,7 @@
import io.netty.handler.codec.bytes.ByteArrayEncoder
import io.netty.handler.codec.string.StringDecoder
import io.netty.handler.codec.string.StringEncoder
+import java.nio.charset.Charset
/**
* socket闀胯繛鎺ユ湇鍔$
@@ -46,8 +47,8 @@
override fun initChannel(p0: NioSocketChannel?) {
p0?.pipeline()
// ?.addLast("decoder", StringDecoder())
-// ?.addLast("encoder", StringEncoder())
?.addLast(ObdByteDataDecoder())
+ ?.addLast("encoder", StringEncoder(Charset.forName("UTF-8")))
?.addLast(ServerHandler())
}
})
diff --git a/src/main/kotlin/com/flightfeather/obd/socket/eunm/ObdCommandUnit.kt b/src/main/kotlin/com/flightfeather/obd/socket/eunm/ObdCommandUnit.kt
index 83956ca..5ef15c2 100644
--- a/src/main/kotlin/com/flightfeather/obd/socket/eunm/ObdCommandUnit.kt
+++ b/src/main/kotlin/com/flightfeather/obd/socket/eunm/ObdCommandUnit.kt
@@ -15,11 +15,13 @@
* 0x04 杞﹁締鐧诲嚭 涓婅 @see [CarLogOutData]
* 0x05 缁堢鏍℃椂 涓婅 @see [TimeCalibrationData]
* 0x06~0x7F 涓婅鏁版嵁绯荤粺棰勭暀 涓婅
+ * 0x7F 鍥轰欢杩滅▼鏇存柊
*/
enum class ObdCommandUnit constructor(val value: Int) {
CarRegister(1),
RealTimeData(2),
ReplacementData(3),
CarLogOut(4),
- TimeCalibration(5)
+ TimeCalibration(5),
+ Update(127)
}
\ No newline at end of file
--
Gitblit v1.9.3