From 585fb9b67dc81f9e14f2cbf59f1c3a02eb4fe98f Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期四, 11 六月 2020 10:58:23 +0800 Subject: [PATCH] 1.添加无人机多参数的数据接收解析函数 2.添加参数存储函数 --- src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt | 28 +++++++++++++++------------- 1 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/kotlin/com/flightfeather/uav/socket/ObdByteDataDecoder.kt b/src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt similarity index 78% rename from src/main/kotlin/com/flightfeather/uav/socket/ObdByteDataDecoder.kt rename to src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt index 8810240..bb88cb1 100644 --- a/src/main/kotlin/com/flightfeather/uav/socket/ObdByteDataDecoder.kt +++ b/src/main/kotlin/com/flightfeather/uav/socket/UAVByteDataDecoder.kt @@ -7,14 +7,18 @@ /** * @author riku - * Date: 2019/9/16 + * Date: 2020/06/02 * 鏁版嵁绮樺寘鍒嗗寘瑙g爜鍣� */ -class ObdByteDataDecoder : ByteToMessageDecoder() { +class UAVByteDataDecoder : ByteToMessageDecoder() { companion object { - const val BASE_LENGTH = 2 + 1 + 17 + 1 + 1 + 2 + 0 + 1 - const val HEAD = 0x23.toByte() + private const val HEAD_BYTES = 2//鏁版嵁澶存墍鍗犻暱搴� + private const val LENGTH_BYTES = 1//鏁版嵁浣嶆暟鎵�鍗犻暱搴� + private const val BCC_BYTES = 2//鏍¢獙鐮侀暱搴� + const val BASE_LENGTH = HEAD_BYTES + LENGTH_BYTES + BCC_BYTES + const val HEAD1 = 0x01.toByte() + const val HEAD2 = 0x05.toByte() } override fun decode(p0: ChannelHandlerContext?, p1: ByteBuf?, p2: MutableList<Any>?) { @@ -40,7 +44,7 @@ // 璇诲埌浜嗗崗璁殑寮�濮嬫爣蹇楋紝缁撴潫while寰幆 val b = ByteArray(2) it.readBytes(b) - if (b[0] == HEAD && b[1] == HEAD) { + if (b[0] == HEAD1 && b[1] == HEAD2) { dataList.add(b[0]) dataList.add(b[1]) break @@ -57,7 +61,7 @@ } } - ByteArray(1 + 17 + 1 + 1).apply { + ByteArray(1).apply { it.readBytes(this) }.forEach {b -> dataList.add(b) @@ -65,15 +69,15 @@ //鏁版嵁鍗曞厓鐨勯暱搴� val length = getDataUnitLength(it, dataList) - // 鍒ゆ柇璇锋眰鏁版嵁鍗曞厓鏁版嵁鍙�1涓瓧鑺傜殑鏍¢獙鐮佹槸鍚﹀埌榻� - if (it.readableBytes() < length + 1) { + // 鍒ゆ柇璇锋眰鏁版嵁鍗曞厓鏁版嵁鍙奫LENGTH_BYTES]涓瓧鑺傜殑鏍¢獙鐮佹槸鍚﹀埌榻� + if (it.readableBytes() < length + BCC_BYTES) { // 杩樺師璇绘寚閽� it.readerIndex(beginReader) return } //璇诲彇鏁版嵁鍗曞厓鍜屾牎楠岀爜鏁版嵁 - ByteArray(length + 1).apply { + ByteArray(length + BCC_BYTES).apply { it.readBytes(this) }.forEach {b -> dataList.add(b) @@ -91,11 +95,10 @@ private fun getDataUnitLength(p1: ByteBuf, dataList: MutableList<Byte>): Int { val sb = StringBuilder() - ByteArray(2).apply { + ByteArray(1).apply { p1.readBytes(this) }.forEach { b -> - var a = 0 - a = if (b < 0) { + val a: Int = if (b < 0) { b + 256 } else { b.toInt() @@ -108,5 +111,4 @@ return sb.toString().toInt(16) } - } \ No newline at end of file -- Gitblit v1.9.3