| | |
| | | package com.flightfeather.uav.socket.decoder.impl |
| | | |
| | | import com.flightfeather.uav.socket.bean.AirData |
| | | import com.flightfeather.uav.socket.bean.AirDataPackage |
| | | import com.flightfeather.uav.socket.bean.AirTypeData |
| | | import com.flightfeather.uav.socket.decoder.DataUnitDecoder |
| | | import com.flightfeather.uav.socket.eunm.FactorType |
| | |
| | | |
| | | private val logger = LoggerFactory.getLogger(javaClass.name) |
| | | |
| | | private val types = mutableListOf<AirTypeData>() |
| | | |
| | | override fun getAirConfirmData(b: List<String>): List<AirTypeData> { |
| | | val resultList = mutableListOf<AirTypeData>() |
| | |
| | | resultList.add(AirTypeData(f)) |
| | | } |
| | | } |
| | | types.clear() |
| | | types.addAll(resultList) |
| | | |
| | | return resultList |
| | | } |
| | | |
| | | override fun getAirData(b: List<String>): List<AirData> { |
| | | val resultList = mutableListOf<AirData>() |
| | | |
| | | var i = 0 |
| | | while (i < b.size - 3) { |
| | | val a = "${b[i]}${b[i + 1]}".toInt(16) |
| | | var b1 = b[i + 2].toInt(16).toDouble() |
| | | while (b1 >= 1) { |
| | | b1 /= 10 |
| | | types.forEach { |
| | | if (i > b.size - it.factorType.byteLength) { |
| | | return@forEach |
| | | } |
| | | val data = a + b1 |
| | | resultList.add(AirData().apply { |
| | | factorData = data |
| | | }) |
| | | i += 3 |
| | | when (it.factorType.byteLength) { |
| | | AirDataPackage.FACTOR_BIT_LENGTH_2 -> { |
| | | val a1 = "${b[i]}${b[i + 1]}".toInt(16) |
| | | var b1 = b[i + 2].toInt(16).toDouble() |
| | | while (b1 >= 1) { |
| | | b1 /= 10 |
| | | } |
| | | val data1 = a1 + b1 |
| | | |
| | | resultList.add(AirData().apply { |
| | | factorId = it.factorType.value?.toString() |
| | | factorName = it.factorType.des |
| | | factorData = data1 |
| | | }) |
| | | } |
| | | AirDataPackage.FACTOR_BIT_LENGTH_1 -> { |
| | | //数据实际值(3位字节表示) |
| | | val a1 = "${b[i]}${b[i + 1]}".toInt(16) |
| | | var b1 = b[i + 2].toInt(16).toDouble() |
| | | while (b1 >= 1) { |
| | | b1 /= 10 |
| | | } |
| | | val data1 = a1 + b1 |
| | | |
| | | //数据物理量(3位字节表示) |
| | | val a2 = "${b[i]}${b[i + 1]}".toInt(16) |
| | | var b2 = b[i + 2].toInt(16).toDouble() |
| | | while (b2 >= 1) { |
| | | b2 /= 10 |
| | | } |
| | | val data2 = a2 + b2 |
| | | |
| | | resultList.add(AirData().apply { |
| | | factorId = it.factorType.value?.toString() |
| | | factorName = it.factorType.des |
| | | factorData = data1 |
| | | physicalQuantity = data2 |
| | | }) |
| | | } |
| | | } |
| | | i += it.factorType.byteLength |
| | | } |
| | | |
| | | return resultList |