| | |
| | | class DataPackageDecoderImpl : DataPackageDecoder { |
| | | |
| | | companion object { |
| | | // 数据头 |
| | | const val HEAD_BYTES = 1 |
| | | // 监测参数确认指令位 |
| | | const val COMMAND_UNIT_BYTES = 1 |
| | | const val DEVICE_CODE_BYTES = 1 |
| | | // 设备类型 |
| | | const val DEVICE_CODE_BYTES = 6 |
| | | // 本次监测的空气因子数量 |
| | | const val DATA_LENGTH = 1 |
| | | // 校验 |
| | | const val BCC_BYTES = 2 |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | override fun getDeviceCode(b: List<String>): String? = if (b.size >= (HEAD_BYTES + COMMAND_UNIT_BYTES + DEVICE_CODE_BYTES)) { |
| | | //2021/1/7 '0A'代表车载设备,'0B'代表无人机设备 |
| | | //2021/1/7 '0A'代表车载设备,'0B'代表无人机设备,'0C'为网格化监测 |
| | | val s = StringBuilder() |
| | | repeat(DEVICE_CODE_BYTES) { |
| | | s.append(b[HEAD_BYTES + COMMAND_UNIT_BYTES + it]) |
| | |
| | | } |
| | | |
| | | override fun getCheckCode(b: List<String>): Int? { |
| | | return if (b.size >= 5) { |
| | | return if (b.size >= HEAD_BYTES + COMMAND_UNIT_BYTES + DEVICE_CODE_BYTES + BCC_BYTES) { |
| | | val hexNum = "${b[b.size - 2]}${b[b.size - 1]}" |
| | | |
| | | hexNum.toIntOrNull(16) |