riku
2020-07-15 25d0f31f22f77a914a50bbc088902e00e28c4889
src/main/kotlin/com/flightfeather/uav/socket/decoder/impl/DataUnitDecoderImpl.kt
@@ -1,6 +1,7 @@
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
@@ -14,6 +15,7 @@
    private val logger = LoggerFactory.getLogger(javaClass.name)
    private val types = mutableListOf<AirTypeData>()
    override fun getAirConfirmData(b: List<String>): List<AirTypeData> {
        val resultList = mutableListOf<AirTypeData>()
@@ -22,23 +24,61 @@
                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