From 070005ffba3ce5cb80e27448bca668aa25edee62 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 11 六月 2021 17:02:51 +0800
Subject: [PATCH] 1. 新增走航任务增删改查相关功能 2. 新增无人船数据excel导入功能 3. 优化多参数接收逻辑,解决单个数据头导致数据包结构判断错误问题
---
src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataPackageDecoderImpl.kt | 56 +++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 43 insertions(+), 13 deletions(-)
diff --git a/src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataPackageDecoderImpl.kt b/src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataPackageDecoderImpl.kt
index 66ade0c..e79b6c0 100644
--- a/src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataPackageDecoderImpl.kt
+++ b/src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataPackageDecoderImpl.kt
@@ -5,6 +5,7 @@
import com.flightfeather.uav.socket.decoder.DataUnitDecoder
import com.flightfeather.uav.socket.eunm.AirCommandUnit
import java.util.*
+import kotlin.text.StringBuilder
/**
* @author riku
@@ -12,61 +13,90 @@
*/
class DataPackageDecoderImpl : DataPackageDecoder {
+ companion object {
+// 鏁版嵁澶�
+ const val HEAD_BYTES = 1
+// 鐩戞祴鍙傛暟纭鎸囦护浣�
+ const val COMMAND_UNIT_BYTES = 1
+// 璁惧绫诲瀷
+ const val DEVICE_CODE_BYTES = 6
+// 鏈鐩戞祴鐨勭┖姘斿洜瀛愭暟閲�
+ const val DATA_LENGTH = 1
+// 鏍¢獙
+ const val BCC_BYTES = 2
+ }
+
private val dataUnitDecoder: DataUnitDecoder = DataUnitDecoderImpl()
override fun getHead(b: List<String>): String? {
return if (b.isNotEmpty()) {
- b[0]
+ val s = StringBuilder()
+ repeat(HEAD_BYTES) {
+ s.append(b[it])
+ }
+ s.toString()
} else {
null
}
}
- override fun getCommandUnit(b: List<String>): Int? = if (b.size >= 2) {
- b[1].toIntOrNull(16)
+ override fun getCommandUnit(b: List<String>): Int? = if (b.size >= (HEAD_BYTES + COMMAND_UNIT_BYTES)) {
+ val s = StringBuilder()
+ repeat(COMMAND_UNIT_BYTES) {
+ s.append(b[HEAD_BYTES + it])
+ }
+ s.toString().toIntOrNull(16)
} else {
null
}
- override fun getDeviceCode(b: List<String>): String? {
- return null
+ override fun getDeviceCode(b: List<String>): String? = if (b.size >= (HEAD_BYTES + COMMAND_UNIT_BYTES + DEVICE_CODE_BYTES)) {
+ //2021/1/7 '0A'浠h〃杞﹁浇璁惧锛�'0B'浠h〃鏃犱汉鏈鸿澶囷紝'0C'涓虹綉鏍煎寲鐩戞祴
+ val s = StringBuilder()
+ repeat(DEVICE_CODE_BYTES) {
+ s.append(b[HEAD_BYTES + COMMAND_UNIT_BYTES + it])
+ }
+ s.toString()
+ } else {
+ null
}
override fun getDataTime(b: List<String>): Date {
- //fixme 2020/06/11 鐩墠鏁版嵁娴佷腑涓嶅寘鍚噰鏍锋椂闂达紝鎵�浠ラ噰鐢ㄦ湇鍔″櫒鎺ユ敹鏃堕棿浣滀负閲囨牱鏃堕棿
+ // FIXME: 2021/1/7 閲囨牱鏃堕棿鍜岀洃娴嬪洜瀛愪竴鍚屾斁鍦ㄤ簡鏁版嵁閮ㄥ垎锛屾澶勪笉鍐嶅仛瑙f瀽
return Date()
}
override fun getDataLength(b: List<String>): Int {
- if (b.size < 5) return 0
+ if (b.size <= HEAD_BYTES + COMMAND_UNIT_BYTES + DEVICE_CODE_BYTES + DATA_LENGTH) return 0
- val hexNum = b[2]
+ val hexNum = b[HEAD_BYTES + COMMAND_UNIT_BYTES + DEVICE_CODE_BYTES]
return hexNum.toIntOrNull(16) ?: 0
}
override fun getDataUnit(b: List<String>): List<DataUnit> {
- if (getDataLength(b) == 0 || b.size < 5) {
+ if (getDataLength(b) == 0 || b.size <= HEAD_BYTES + COMMAND_UNIT_BYTES + DEVICE_CODE_BYTES + DATA_LENGTH) {
return emptyList()
}
val unit = mutableListOf<String>()
- for (i in 3..b.size - 3) {
+ val start = HEAD_BYTES + COMMAND_UNIT_BYTES + DEVICE_CODE_BYTES + DATA_LENGTH
+ for (i in start..b.size - 1 - BCC_BYTES) {
unit.add(b[i])
}
dataUnitDecoder.run {
return when (getCommandUnit(b)) {
- AirCommandUnit.Confirm.value -> getAirConfirmData(unit)
- AirCommandUnit.AirData.value -> getAirData(unit)
+ AirCommandUnit.Confirm.value -> getAirConfirmData(unit, getDeviceCode(b))
+ AirCommandUnit.AirData.value -> getAirData(unit, getDeviceCode(b))
else -> emptyList()
}
}
}
override fun getCheckCode(b: List<String>): Int? {
- return if (b.size >= 5) {
+ return if (b.size >= HEAD_BYTES + COMMAND_UNIT_BYTES + DEVICE_CODE_BYTES + BCC_BYTES) {
val hexNum = "${b[b.size - 2]}${b[b.size - 1]}"
hexNum.toIntOrNull(16)
--
Gitblit v1.9.3