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
|
import org.slf4j.LoggerFactory
|
|
/**
|
* @author riku
|
* Date: 2019/9/15
|
*/
|
class DataUnitDecoderImpl : DataUnitDecoder {
|
|
private val logger = LoggerFactory.getLogger(javaClass.name)
|
|
private val types = mutableListOf<AirTypeData>()
|
|
override fun getAirConfirmData(b: List<String>): List<AirTypeData> {
|
val resultList = mutableListOf<AirTypeData>()
|
b.forEach {
|
FactorType.getByIndex(it.toInt(16))?.let { f->
|
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
|
types.forEach {
|
if (i > b.size - it.factorType.byteLength) {
|
return@forEach
|
}
|
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
|
}
|
}
|