diff --git a/app/src/main/assets/BluetoothData.txt b/app/src/main/assets/BluetoothData.txt new file mode 100644 index 0000000..23111ac --- /dev/null +++ b/app/src/main/assets/BluetoothData.txt @@ -0,0 +1,25 @@ +激光开启: +[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 13, 10] + +正式探测:--->测量值=900±50,最大值=1000±50 +收到数据:[-86, 0, 0, 3, -90, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -113, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -88, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -73, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -73, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -72, 1, 0, 100, 0, 0, 10, 89, 13, 10] +收到数据:[-86, 0, 0, 3, -75, 1, 0, 100, 0, 0, 9, -127, 13, 10] +收到数据:[-86, 0, 0, 3, -57, 1, 0, 100, 0, 0, 8, -95, 13, 10] +收到数据:[-86, 0, 0, 3, -50, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -87, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -75, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -97, 1, 0, 100, 0, 0, 5, -5, 13, 10] + +测试空地:--->测量值=最大值=0 +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] \ No newline at end of file diff --git a/app/src/main/assets/BluetoothData.txt b/app/src/main/assets/BluetoothData.txt new file mode 100644 index 0000000..23111ac --- /dev/null +++ b/app/src/main/assets/BluetoothData.txt @@ -0,0 +1,25 @@ +激光开启: +[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 13, 10] + +正式探测:--->测量值=900±50,最大值=1000±50 +收到数据:[-86, 0, 0, 3, -90, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -113, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -88, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -73, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -73, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -72, 1, 0, 100, 0, 0, 10, 89, 13, 10] +收到数据:[-86, 0, 0, 3, -75, 1, 0, 100, 0, 0, 9, -127, 13, 10] +收到数据:[-86, 0, 0, 3, -57, 1, 0, 100, 0, 0, 8, -95, 13, 10] +收到数据:[-86, 0, 0, 3, -50, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -87, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -75, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -97, 1, 0, 100, 0, 0, 5, -5, 13, 10] + +测试空地:--->测量值=最大值=0 +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt index e547591..7b51273 100644 --- a/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt +++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt @@ -1,8 +1,6 @@ package com.casic.birmm.inspect.extensions import java.util.* -import kotlin.collections.ArrayList -import kotlin.math.abs /** * ByteArray扩展方法 @@ -30,46 +28,4 @@ builder.append(this[index].toInt().toChar()) } return builder.toString() -} - -//ByteArray转Char字符串 -fun ByteArray.toCharString(): String { - val builder = StringBuilder() - this.forEach { - builder.append(it.toInt().toChar()) - } - return builder.toString() -} - -//ByteArray转十进制字符串集合 -fun ByteArray.toDecStringList(): ArrayList { - val data: ArrayList = ArrayList() - /** - * 170,0,0,0,100,1,0,100,0,0,0,100,13,10 - * - * 170是数据标头AA - * 13,10是数据结束位 - * */ - //AA 00 00 00 64 01 00 64 00 00 00 64 0D 0A - //浓度:4字节 0-99999 - var potencyValue = 0 - for (index in 1..4) { - potencyValue += abs(this[index].toString(10).toInt()) - } - data.add(potencyValue.toString()) - //报警标志:1字节 0:未报警 1:报警 - data.add(this[5].toString(10)) - //报警值:2字节 0-65535 - var alarmValue = 0 - for (index in 6..7) { - alarmValue += abs(this[index].toString(10).toInt()) - } - data.add(alarmValue.toString()) - //5s内最大值: 4字节 0-99999 - var maxPotencyValue = 0 - for (index in 8..11) { - maxPotencyValue += abs(this[index].toString(10).toInt()) - } - data.add(maxPotencyValue.toString()) - return data } \ No newline at end of file diff --git a/app/src/main/assets/BluetoothData.txt b/app/src/main/assets/BluetoothData.txt new file mode 100644 index 0000000..23111ac --- /dev/null +++ b/app/src/main/assets/BluetoothData.txt @@ -0,0 +1,25 @@ +激光开启: +[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 13, 10] + +正式探测:--->测量值=900±50,最大值=1000±50 +收到数据:[-86, 0, 0, 3, -90, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -113, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -88, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -73, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -73, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -72, 1, 0, 100, 0, 0, 10, 89, 13, 10] +收到数据:[-86, 0, 0, 3, -75, 1, 0, 100, 0, 0, 9, -127, 13, 10] +收到数据:[-86, 0, 0, 3, -57, 1, 0, 100, 0, 0, 8, -95, 13, 10] +收到数据:[-86, 0, 0, 3, -50, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -87, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -75, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -97, 1, 0, 100, 0, 0, 5, -5, 13, 10] + +测试空地:--->测量值=最大值=0 +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt index e547591..7b51273 100644 --- a/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt +++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt @@ -1,8 +1,6 @@ package com.casic.birmm.inspect.extensions import java.util.* -import kotlin.collections.ArrayList -import kotlin.math.abs /** * ByteArray扩展方法 @@ -30,46 +28,4 @@ builder.append(this[index].toInt().toChar()) } return builder.toString() -} - -//ByteArray转Char字符串 -fun ByteArray.toCharString(): String { - val builder = StringBuilder() - this.forEach { - builder.append(it.toInt().toChar()) - } - return builder.toString() -} - -//ByteArray转十进制字符串集合 -fun ByteArray.toDecStringList(): ArrayList { - val data: ArrayList = ArrayList() - /** - * 170,0,0,0,100,1,0,100,0,0,0,100,13,10 - * - * 170是数据标头AA - * 13,10是数据结束位 - * */ - //AA 00 00 00 64 01 00 64 00 00 00 64 0D 0A - //浓度:4字节 0-99999 - var potencyValue = 0 - for (index in 1..4) { - potencyValue += abs(this[index].toString(10).toInt()) - } - data.add(potencyValue.toString()) - //报警标志:1字节 0:未报警 1:报警 - data.add(this[5].toString(10)) - //报警值:2字节 0-65535 - var alarmValue = 0 - for (index in 6..7) { - alarmValue += abs(this[index].toString(10).toInt()) - } - data.add(alarmValue.toString()) - //5s内最大值: 4字节 0-99999 - var maxPotencyValue = 0 - for (index in 8..11) { - maxPotencyValue += abs(this[index].toString(10).toInt()) - } - data.add(maxPotencyValue.toString()) - return data } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt index d193439..3c04e90 100644 --- a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt +++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt @@ -6,11 +6,13 @@ import android.widget.TextView import android.widget.Toast import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.DeviceDataModel import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.qmuiteam.qmui.util.QMUIDisplayHelper import java.util.* import java.util.regex.Pattern +import kotlin.math.abs /** * String扩展方法 @@ -105,4 +107,45 @@ } else { Pattern.compile(regExp).matcher(this).matches() } +} + +//蓝牙数据解析 +fun String.toDataModel(): DeviceDataModel { + val deviceData = DeviceDataModel(0, 0, 0, 0) + if (this.isEmpty()) return deviceData + val hexArray = this.trim().split(" ") + //[AA, 00, 00, 00, 00, 00, 00, 64, 00, 00, 00, 00, 0D, 0A] + //数据头[AA, + //浓度值 00, 00, 00, 00, + //标志位 00, + //报警值 00, 64, + //最大值 00, 00, 00, 00, + //结束位 0D, 0A] + val intData: ArrayList = ArrayList() + hexArray.forEach { + intData.add(Integer.parseInt(it, 16)) + } + //[170, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 13, 10] + //数据头[170, + //浓度值 0, 0, 0, 0, + //标志位 0, + //报警值 0, 100, + //最大值 0, 0, 0, 0, + //结束位 13, 10] + + //浓度 + deviceData.potency = intData[1] * 256 * 3 + + intData[2] * 256 * 2 + + intData[3] * 256 * 1 + + intData[4] + //报警标志 + deviceData.flag = intData[5] + //报警值 + deviceData.alarmValue = intData[6] * 256 * 1 + intData[7] + //5s内最大值 + deviceData.maxPotency = intData[8] * 256 * 3 + + intData[9] * 256 * 2 + + intData[10] * 256 * 1 + + intData[11] + return deviceData } \ No newline at end of file diff --git a/app/src/main/assets/BluetoothData.txt b/app/src/main/assets/BluetoothData.txt new file mode 100644 index 0000000..23111ac --- /dev/null +++ b/app/src/main/assets/BluetoothData.txt @@ -0,0 +1,25 @@ +激光开启: +[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 13, 10] + +正式探测:--->测量值=900±50,最大值=1000±50 +收到数据:[-86, 0, 0, 3, -90, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -113, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -88, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -73, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -73, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -72, 1, 0, 100, 0, 0, 10, 89, 13, 10] +收到数据:[-86, 0, 0, 3, -75, 1, 0, 100, 0, 0, 9, -127, 13, 10] +收到数据:[-86, 0, 0, 3, -57, 1, 0, 100, 0, 0, 8, -95, 13, 10] +收到数据:[-86, 0, 0, 3, -50, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -87, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -75, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -97, 1, 0, 100, 0, 0, 5, -5, 13, 10] + +测试空地:--->测量值=最大值=0 +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt index e547591..7b51273 100644 --- a/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt +++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt @@ -1,8 +1,6 @@ package com.casic.birmm.inspect.extensions import java.util.* -import kotlin.collections.ArrayList -import kotlin.math.abs /** * ByteArray扩展方法 @@ -30,46 +28,4 @@ builder.append(this[index].toInt().toChar()) } return builder.toString() -} - -//ByteArray转Char字符串 -fun ByteArray.toCharString(): String { - val builder = StringBuilder() - this.forEach { - builder.append(it.toInt().toChar()) - } - return builder.toString() -} - -//ByteArray转十进制字符串集合 -fun ByteArray.toDecStringList(): ArrayList { - val data: ArrayList = ArrayList() - /** - * 170,0,0,0,100,1,0,100,0,0,0,100,13,10 - * - * 170是数据标头AA - * 13,10是数据结束位 - * */ - //AA 00 00 00 64 01 00 64 00 00 00 64 0D 0A - //浓度:4字节 0-99999 - var potencyValue = 0 - for (index in 1..4) { - potencyValue += abs(this[index].toString(10).toInt()) - } - data.add(potencyValue.toString()) - //报警标志:1字节 0:未报警 1:报警 - data.add(this[5].toString(10)) - //报警值:2字节 0-65535 - var alarmValue = 0 - for (index in 6..7) { - alarmValue += abs(this[index].toString(10).toInt()) - } - data.add(alarmValue.toString()) - //5s内最大值: 4字节 0-99999 - var maxPotencyValue = 0 - for (index in 8..11) { - maxPotencyValue += abs(this[index].toString(10).toInt()) - } - data.add(maxPotencyValue.toString()) - return data } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt index d193439..3c04e90 100644 --- a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt +++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt @@ -6,11 +6,13 @@ import android.widget.TextView import android.widget.Toast import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.DeviceDataModel import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.qmuiteam.qmui.util.QMUIDisplayHelper import java.util.* import java.util.regex.Pattern +import kotlin.math.abs /** * String扩展方法 @@ -105,4 +107,45 @@ } else { Pattern.compile(regExp).matcher(this).matches() } +} + +//蓝牙数据解析 +fun String.toDataModel(): DeviceDataModel { + val deviceData = DeviceDataModel(0, 0, 0, 0) + if (this.isEmpty()) return deviceData + val hexArray = this.trim().split(" ") + //[AA, 00, 00, 00, 00, 00, 00, 64, 00, 00, 00, 00, 0D, 0A] + //数据头[AA, + //浓度值 00, 00, 00, 00, + //标志位 00, + //报警值 00, 64, + //最大值 00, 00, 00, 00, + //结束位 0D, 0A] + val intData: ArrayList = ArrayList() + hexArray.forEach { + intData.add(Integer.parseInt(it, 16)) + } + //[170, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 13, 10] + //数据头[170, + //浓度值 0, 0, 0, 0, + //标志位 0, + //报警值 0, 100, + //最大值 0, 0, 0, 0, + //结束位 13, 10] + + //浓度 + deviceData.potency = intData[1] * 256 * 3 + + intData[2] * 256 * 2 + + intData[3] * 256 * 1 + + intData[4] + //报警标志 + deviceData.flag = intData[5] + //报警值 + deviceData.alarmValue = intData[6] * 256 * 1 + intData[7] + //5s内最大值 + deviceData.maxPotency = intData[8] * 256 * 3 + + intData[9] * 256 * 2 + + intData[10] * 256 * 1 + + intData[11] + return deviceData } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/DeviceDataModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/DeviceDataModel.kt new file mode 100644 index 0000000..79afb8d --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/DeviceDataModel.kt @@ -0,0 +1,8 @@ +package com.casic.birmm.inspect.model + +data class DeviceDataModel( + var potency: Int, + var flag: Int, + var alarmValue: Int, + var maxPotency: Int +) diff --git a/app/src/main/assets/BluetoothData.txt b/app/src/main/assets/BluetoothData.txt new file mode 100644 index 0000000..23111ac --- /dev/null +++ b/app/src/main/assets/BluetoothData.txt @@ -0,0 +1,25 @@ +激光开启: +[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 13, 10] + +正式探测:--->测量值=900±50,最大值=1000±50 +收到数据:[-86, 0, 0, 3, -90, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -113, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -88, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -73, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -73, 1, 0, 100, 0, 0, 10, -64, 13, 10] +收到数据:[-86, 0, 0, 3, -72, 1, 0, 100, 0, 0, 10, 89, 13, 10] +收到数据:[-86, 0, 0, 3, -75, 1, 0, 100, 0, 0, 9, -127, 13, 10] +收到数据:[-86, 0, 0, 3, -57, 1, 0, 100, 0, 0, 8, -95, 13, 10] +收到数据:[-86, 0, 0, 3, -50, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -87, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -75, 1, 0, 100, 0, 0, 6, 119, 13, 10] +收到数据:[-86, 0, 0, 3, -97, 1, 0, 100, 0, 0, 5, -5, 13, 10] + +测试空地:--->测量值=最大值=0 +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] +收到数据:[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 54, 83, 13, 10] \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt index e547591..7b51273 100644 --- a/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt +++ b/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt @@ -1,8 +1,6 @@ package com.casic.birmm.inspect.extensions import java.util.* -import kotlin.collections.ArrayList -import kotlin.math.abs /** * ByteArray扩展方法 @@ -30,46 +28,4 @@ builder.append(this[index].toInt().toChar()) } return builder.toString() -} - -//ByteArray转Char字符串 -fun ByteArray.toCharString(): String { - val builder = StringBuilder() - this.forEach { - builder.append(it.toInt().toChar()) - } - return builder.toString() -} - -//ByteArray转十进制字符串集合 -fun ByteArray.toDecStringList(): ArrayList { - val data: ArrayList = ArrayList() - /** - * 170,0,0,0,100,1,0,100,0,0,0,100,13,10 - * - * 170是数据标头AA - * 13,10是数据结束位 - * */ - //AA 00 00 00 64 01 00 64 00 00 00 64 0D 0A - //浓度:4字节 0-99999 - var potencyValue = 0 - for (index in 1..4) { - potencyValue += abs(this[index].toString(10).toInt()) - } - data.add(potencyValue.toString()) - //报警标志:1字节 0:未报警 1:报警 - data.add(this[5].toString(10)) - //报警值:2字节 0-65535 - var alarmValue = 0 - for (index in 6..7) { - alarmValue += abs(this[index].toString(10).toInt()) - } - data.add(alarmValue.toString()) - //5s内最大值: 4字节 0-99999 - var maxPotencyValue = 0 - for (index in 8..11) { - maxPotencyValue += abs(this[index].toString(10).toInt()) - } - data.add(maxPotencyValue.toString()) - return data } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt index d193439..3c04e90 100644 --- a/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt +++ b/app/src/main/java/com/casic/birmm/inspect/extensions/String.kt @@ -6,11 +6,13 @@ import android.widget.TextView import android.widget.Toast import com.casic.birmm.inspect.R +import com.casic.birmm.inspect.model.DeviceDataModel import com.casic.birmm.inspect.utils.Constant import com.casic.birmm.inspect.utils.SaveKeyValues import com.qmuiteam.qmui.util.QMUIDisplayHelper import java.util.* import java.util.regex.Pattern +import kotlin.math.abs /** * String扩展方法 @@ -105,4 +107,45 @@ } else { Pattern.compile(regExp).matcher(this).matches() } +} + +//蓝牙数据解析 +fun String.toDataModel(): DeviceDataModel { + val deviceData = DeviceDataModel(0, 0, 0, 0) + if (this.isEmpty()) return deviceData + val hexArray = this.trim().split(" ") + //[AA, 00, 00, 00, 00, 00, 00, 64, 00, 00, 00, 00, 0D, 0A] + //数据头[AA, + //浓度值 00, 00, 00, 00, + //标志位 00, + //报警值 00, 64, + //最大值 00, 00, 00, 00, + //结束位 0D, 0A] + val intData: ArrayList = ArrayList() + hexArray.forEach { + intData.add(Integer.parseInt(it, 16)) + } + //[170, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 13, 10] + //数据头[170, + //浓度值 0, 0, 0, 0, + //标志位 0, + //报警值 0, 100, + //最大值 0, 0, 0, 0, + //结束位 13, 10] + + //浓度 + deviceData.potency = intData[1] * 256 * 3 + + intData[2] * 256 * 2 + + intData[3] * 256 * 1 + + intData[4] + //报警标志 + deviceData.flag = intData[5] + //报警值 + deviceData.alarmValue = intData[6] * 256 * 1 + intData[7] + //5s内最大值 + deviceData.maxPotency = intData[8] * 256 * 3 + + intData[9] * 256 * 2 + + intData[10] * 256 * 1 + + intData[11] + return deviceData } \ No newline at end of file diff --git a/app/src/main/java/com/casic/birmm/inspect/model/DeviceDataModel.kt b/app/src/main/java/com/casic/birmm/inspect/model/DeviceDataModel.kt new file mode 100644 index 0000000..79afb8d --- /dev/null +++ b/app/src/main/java/com/casic/birmm/inspect/model/DeviceDataModel.kt @@ -0,0 +1,8 @@ +package com.casic.birmm.inspect.model + +data class DeviceDataModel( + var potency: Int, + var flag: Int, + var alarmValue: Int, + var maxPotency: Int +) diff --git a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt index b98e223..eb53d30 100644 --- a/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt +++ b/app/src/main/java/com/casic/birmm/inspect/view/MapActivity.kt @@ -171,17 +171,18 @@ val firstByte = receiveByteArray[0] if (firstByte == 0xAA.toByte()) { //解析测量数据 +// Log.d(Tag, "实际数据: ${receiveByteArray.toList()}") if (receiveByteArray.size == 14) { - val dataList = receiveByteArray.toDecStringList() - /** - * [100, 1, 100, 100] - * */ - mapActivity.currentValueView.text = dataList[0] - mapActivity.settingsValueView.text = dataList[2] - mapActivity.maxValueView.text = dataList[3] + val dataHexString = receiveByteArray.toHexString() +// Log.d(Tag, "十六进制: $dataHexString") + val dataModel = dataHexString.toDataModel() +// Log.d(Tag, "数据模型: ${Gson().toJson(dataModel)}") + mapActivity.currentValueView.text = dataModel.potency.toString() + mapActivity.settingsValueView.text = dataModel.alarmValue.toString() + mapActivity.maxValueView.text = dataModel.maxPotency.toString() //判断是否需要报警 if (mapActivity.isOpenWarning) { - if (dataList[0].toInt() >= dataList[2].toInt()) { + if (dataModel.potency >= dataModel.alarmValue) { //当前值大于设置值,需要报警 OtherUtils.playSound(mapActivity, R.raw.alarm) mapActivity.vibrator.vibrate(1000) @@ -189,7 +190,7 @@ //如果连续超过10个报警,自动生成报警事件 mapActivity.alarmCount++ if (mapActivity.alarmCount >= 10) { - mapActivity.generateAlarmTask(dataList[3]) + mapActivity.generateAlarmTask(dataModel.maxPotency) } } } else { @@ -228,7 +229,7 @@ } //生成报警事件 - private fun generateAlarmTask(maxValue: String) { + private fun generateAlarmTask(maxValue: Int) { if (isGeneratingTask) return isGeneratingTask = true LocationHelper.obtainCurrentLocation(this, object : ILocationListener {