From 09f411e381f885619b32e05fc89cad26bb20824d Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期一, 01 三月 2021 14:27:56 +0800 Subject: [PATCH] Merge remote-tracking branch 'obdserver2/master' --- src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataPackageDecoderImpl.kt | 49 +++++++++++++++++++++++++++++++++++++------------ 1 files changed, 37 insertions(+), 12 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..deadf89 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,54 +13,78 @@ */ class DataPackageDecoderImpl : DataPackageDecoder { + companion object { + const val HEAD_BYTES = 1 + const val COMMAND_UNIT_BYTES = 1 + const val DEVICE_CODE_BYTES = 1 + 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〃鏃犱汉鏈鸿澶� + 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() } } -- Gitblit v1.9.3