package com.flightfeather.uav.socket.decoder.impl
|
|
import com.flightfeather.uav.socket.bean.DataUnit
|
import com.flightfeather.uav.socket.decoder.DataPackageDecoder
|
import com.flightfeather.uav.socket.decoder.DataUnitDecoder
|
import com.flightfeather.uav.socket.eunm.AirCommandUnit
|
import java.util.*
|
|
/**
|
* @author riku
|
* Date: 2019/9/12
|
*/
|
class DataPackageDecoderImpl : DataPackageDecoder {
|
|
private val dataUnitDecoder: DataUnitDecoder = DataUnitDecoderImpl()
|
|
|
override fun getHead(b: List<String>): String? {
|
return if (b.isNotEmpty()) {
|
b[0]
|
} else {
|
null
|
}
|
}
|
|
override fun getCommandUnit(b: List<String>): Int? = if (b.size >= 2) {
|
b[1].toIntOrNull(16)
|
} else {
|
null
|
}
|
|
override fun getDeviceCode(b: List<String>): String? {
|
return null
|
}
|
|
override fun getDataTime(b: List<String>): Date {
|
//fixme 2020/06/11 目前数据流中不包含采样时间,所以采用服务器接收时间作为采样时间
|
return Date()
|
}
|
|
override fun getDataLength(b: List<String>): Int {
|
if (b.size < 5) return 0
|
|
val hexNum = b[2]
|
|
return hexNum.toIntOrNull(16) ?: 0
|
}
|
|
override fun getDataUnit(b: List<String>): List<DataUnit> {
|
if (getDataLength(b) == 0 || b.size < 5) {
|
return emptyList()
|
}
|
|
val unit = mutableListOf<String>()
|
for (i in 3..b.size - 3) {
|
unit.add(b[i])
|
}
|
|
dataUnitDecoder.run {
|
return when (getCommandUnit(b)) {
|
AirCommandUnit.Confirm.value -> getAirConfirmData(unit)
|
AirCommandUnit.AirData.value -> getAirData(unit)
|
else -> emptyList()
|
}
|
}
|
}
|
|
override fun getCheckCode(b: List<String>): Int? {
|
return if (b.size >= 5) {
|
val hexNum = "${b[b.size - 2]}${b[b.size - 1]}"
|
|
hexNum.toIntOrNull(16)
|
} else {
|
null
|
}
|
}
|
|
override fun toStringList(msg: String): List<String> {
|
return msg.split(" ")
|
}
|
|
}
|