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 d0e8904..b1e9b4b 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,16 +1,10 @@ package com.casic.birmm.inspect.extensions -import java.util.* +import com.casic.birmm.inspect.model.DeviceDataModel /** * ByteArray扩展方法 */ -fun ByteArray.toHexString(hasSpace: Boolean = true) = this.joinToString("") { - (it.toInt() and 0xFF) - .toString(16) - .padStart(2, '0') - .uppercase(Locale.ROOT) + if (hasSpace) " " else "" -} //ByteArray转设备编号 fun ByteArray.toDeviceCode(): String { @@ -26,4 +20,32 @@ builder.append(this[index].toInt().toChar()) } return builder.toString() +} + +//蓝牙数据解析 +fun ByteArray.toDataModel(): DeviceDataModel { + val deviceData = DeviceDataModel(0, 0, 0, 0) + //[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 4, 33, 13, 10] + //数据头[-86, + //浓度值 00, 00, 00, 00, + //标志位 00, + //报警值 00, 100, + //最大值 00, 00, 4, 33, + //结束位 13, 10] + + //浓度 + deviceData.potency = (this[1].toInt() and 0xFF shl 24) + + (this[2].toInt() and 0xFF shl 16) + + (this[3].toInt() and 0xFF shl 8) + + (this[4].toInt() and 0xFF) + //报警标志 + deviceData.flag = this[5].toInt() and 0xFF + //报警阈值 + deviceData.alarmValue = (this[6].toInt() and 0xFF shl 8) + (this[7].toInt() and 0xFF) + //5s内最大值 + deviceData.maxPotency = (this[8].toInt() and 0xFF shl 24) + + (this[9].toInt() and 0xFF shl 16) + + (this[10].toInt() and 0xFF shl 8) + + (this[11].toInt() and 0xFF) + return deviceData } \ 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 d0e8904..b1e9b4b 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,16 +1,10 @@ package com.casic.birmm.inspect.extensions -import java.util.* +import com.casic.birmm.inspect.model.DeviceDataModel /** * ByteArray扩展方法 */ -fun ByteArray.toHexString(hasSpace: Boolean = true) = this.joinToString("") { - (it.toInt() and 0xFF) - .toString(16) - .padStart(2, '0') - .uppercase(Locale.ROOT) + if (hasSpace) " " else "" -} //ByteArray转设备编号 fun ByteArray.toDeviceCode(): String { @@ -26,4 +20,32 @@ builder.append(this[index].toInt().toChar()) } return builder.toString() +} + +//蓝牙数据解析 +fun ByteArray.toDataModel(): DeviceDataModel { + val deviceData = DeviceDataModel(0, 0, 0, 0) + //[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 4, 33, 13, 10] + //数据头[-86, + //浓度值 00, 00, 00, 00, + //标志位 00, + //报警值 00, 100, + //最大值 00, 00, 4, 33, + //结束位 13, 10] + + //浓度 + deviceData.potency = (this[1].toInt() and 0xFF shl 24) + + (this[2].toInt() and 0xFF shl 16) + + (this[3].toInt() and 0xFF shl 8) + + (this[4].toInt() and 0xFF) + //报警标志 + deviceData.flag = this[5].toInt() and 0xFF + //报警阈值 + deviceData.alarmValue = (this[6].toInt() and 0xFF shl 8) + (this[7].toInt() and 0xFF) + //5s内最大值 + deviceData.maxPotency = (this[8].toInt() and 0xFF shl 24) + + (this[9].toInt() and 0xFF shl 16) + + (this[10].toInt() and 0xFF shl 8) + + (this[11].toInt() and 0xFF) + return deviceData } \ 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 6913186..ff7b996 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 @@ -2,7 +2,6 @@ import android.content.Context import com.casic.birmm.inspect.callback.OnImageCompressListener -import com.casic.birmm.inspect.model.DeviceDataModel import com.casic.birmm.inspect.model.ErrorMessageModel import com.casic.birmm.inspect.utils.LocaleConstant import com.google.gson.Gson @@ -70,45 +69,4 @@ listener.onError(e) } }).launch() -} - -//蓝牙数据解析 -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/extensions/ByteArray.kt b/app/src/main/java/com/casic/birmm/inspect/extensions/ByteArray.kt index d0e8904..b1e9b4b 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,16 +1,10 @@ package com.casic.birmm.inspect.extensions -import java.util.* +import com.casic.birmm.inspect.model.DeviceDataModel /** * ByteArray扩展方法 */ -fun ByteArray.toHexString(hasSpace: Boolean = true) = this.joinToString("") { - (it.toInt() and 0xFF) - .toString(16) - .padStart(2, '0') - .uppercase(Locale.ROOT) + if (hasSpace) " " else "" -} //ByteArray转设备编号 fun ByteArray.toDeviceCode(): String { @@ -26,4 +20,32 @@ builder.append(this[index].toInt().toChar()) } return builder.toString() +} + +//蓝牙数据解析 +fun ByteArray.toDataModel(): DeviceDataModel { + val deviceData = DeviceDataModel(0, 0, 0, 0) + //[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 4, 33, 13, 10] + //数据头[-86, + //浓度值 00, 00, 00, 00, + //标志位 00, + //报警值 00, 100, + //最大值 00, 00, 4, 33, + //结束位 13, 10] + + //浓度 + deviceData.potency = (this[1].toInt() and 0xFF shl 24) + + (this[2].toInt() and 0xFF shl 16) + + (this[3].toInt() and 0xFF shl 8) + + (this[4].toInt() and 0xFF) + //报警标志 + deviceData.flag = this[5].toInt() and 0xFF + //报警阈值 + deviceData.alarmValue = (this[6].toInt() and 0xFF shl 8) + (this[7].toInt() and 0xFF) + //5s内最大值 + deviceData.maxPotency = (this[8].toInt() and 0xFF shl 24) + + (this[9].toInt() and 0xFF shl 16) + + (this[10].toInt() and 0xFF shl 8) + + (this[11].toInt() and 0xFF) + return deviceData } \ 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 6913186..ff7b996 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 @@ -2,7 +2,6 @@ import android.content.Context import com.casic.birmm.inspect.callback.OnImageCompressListener -import com.casic.birmm.inspect.model.DeviceDataModel import com.casic.birmm.inspect.model.ErrorMessageModel import com.casic.birmm.inspect.utils.LocaleConstant import com.google.gson.Gson @@ -70,45 +69,4 @@ listener.onError(e) } }).launch() -} - -//蓝牙数据解析 -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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt index 52579df..0f3ff16 100644 --- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt @@ -23,7 +23,10 @@ import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.MyLocationStyle import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.extensions.* +import com.casic.birmm.inspect.extensions.addAll +import com.casic.birmm.inspect.extensions.id +import com.casic.birmm.inspect.extensions.toDataModel +import com.casic.birmm.inspect.extensions.toDeviceCode import com.casic.birmm.inspect.model.NewInspectionModel import com.casic.birmm.inspect.model.RoutePointModel import com.casic.birmm.inspect.model.UserInfoModel @@ -231,11 +234,6 @@ LoadingDialogHub.show(requireActivity(), "设备搜索中...") BLEManager.startDiscoverDevice(object : OnDeviceDiscoveredListener { override fun onDeviceFound(blueToothBean: BlueToothBean?) { - Log.d( - "Casic", - "MapInspectActivity => onDeviceFound: ${blueToothBean?.bluetoothDevice?.name}" - ) - val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.DISCOVERY_DEVICE message.obj = blueToothBean @@ -361,77 +359,18 @@ curConnectState = true BLEManager.sendCommand(LocaleConstant.ASK_DEV_CODE_COMMAND) } - LocaleConstant.CONNECT_FAILURE -> { - curConnectState = false - } - LocaleConstant.SEND_SUCCESS -> { - val sendSuccess = msg.obj as ByteArray - Log.d(kTag, "发送成功->sendSuccessBuffer: ${sendSuccess.toList()}") - } - LocaleConstant.SEND_FAILURE -> { - val sendFail = msg.obj as ByteArray - Log.d(kTag, "发送失败->sendFailBuffer: ${sendFail.toList()}") - } - LocaleConstant.RECEIVE_SUCCESS -> { - //TODO 接收成功 - val receiveByteArray = msg.obj as ByteArray - //根据返回值标头判断是设备编号还是数据值 - val firstByte = receiveByteArray[0] - if (firstByte == 0xAA.toByte()) { - //解析测量数据 -// Log.d(kTag, "实际数据: ${receiveByteArray.toList()}") - if (receiveByteArray.size == 14) { - val dataHexString = receiveByteArray.toHexString() -// Log.d(kTag, "十六进制: $dataHexString") - val dataModel = dataHexString.toDataModel() -// Log.d(kTag, "数据模型: ${Gson().toJson(dataModel)}") - homeView.currentValueView.text = dataModel.potency.toString() - homeView.settingsValueView.text = dataModel.alarmValue.toString() - homeView.maxValueView.text = dataModel.maxPotency.toString() - //判断是否需要报警 - if (isOpenWarning) { - if (dataModel.potency >= dataModel.alarmValue) { - //当前值大于设置值,需要报警 - SoundPoolHelper.playSound(requireContext(), R.raw.alarm) - vibrator.vibrate(1000) - if (isAutoRecord) { - //如果连续超过10个报警,自动生成报警事件 - alarmCount++ - if (alarmCount >= 10) { - generateAlarmTask(dataModel.maxPotency) - } - } - } else { - //当测量值小于设置值,报警还未结束,需要停止响铃 - SoundPoolHelper.playSound(requireContext(), 0) - } - } else { - Log.d(kTag, "报警开关未打开,不处理") - } - } else { - Log.d(kTag, "设备返回值长度异常,无法解析") - } - } else if (firstByte == 51.toByte()) { - //解析deviceCode - //51, 51, 50, 48, 50, 49, 48, 49, 48, 48, 48, 51, 13, 10, -86, 0, 0, 0, 0, 0 - if (receiveByteArray.size >= 12) { - homeView.deviceStatusView.text = - "设备编号: ${receiveByteArray.toDeviceCode()}" - BLEManager.sendCommand(LocaleConstant.OPEN_TRANSFER_COMMAND) - } else { - Log.d(kTag, "设备返回值长度异常,无法解析") - } - } else { - Log.d(kTag, "未知返回值,无法解析") - } - } - LocaleConstant.RECEIVE_FAILURE -> { - val receiveString = msg.obj as String - Log.d(kTag, "接收失败->receiveString: $receiveString") - } - LocaleConstant.DISCONNECT_SUCCESS -> { - curConnectState = false - } + LocaleConstant.CONNECT_FAILURE -> curConnectState = false + LocaleConstant.SEND_SUCCESS -> Log.d( + kTag, "发送成功->sendSuccessBuffer: ${(msg.obj as ByteArray).toList()}" + ) + LocaleConstant.SEND_FAILURE -> Log.d( + kTag, "发送失败->sendFailBuffer: ${(msg.obj as ByteArray).toList()}" + ) + LocaleConstant.RECEIVE_SUCCESS -> parseMethaneData(msg.obj as ByteArray) + LocaleConstant.RECEIVE_FAILURE -> Log.d( + kTag, "接收失败->receiveString: ${msg.obj as String}" + ) + LocaleConstant.DISCONNECT_SUCCESS -> curConnectState = false } true } @@ -569,6 +508,51 @@ } } + /** + * 解析甲烷数据 + * 1、设备编号 + * [51, 51, 50, 48, 48, 48, 48, 49, 48, 48, 48, 50, 13, 10, -86, 1, 32, -39, -105, 1] + * + * 2、甲烷浓度(长度:14字节) + * [-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 4, 33, 13, 10] + * + * */ + private fun parseMethaneData(bytes: ByteArray) { + if ((bytes[0].toInt() and 0xFF) == 51 && bytes.size == 14) { + //解析deviceCode + //[51, 51, 50, 48, 48, 48, 48, 49, 48, 48, 48, 50, 13, 10] + homeView.deviceStatusView.text = "设备编号: ${bytes.toDeviceCode()}" + BLEManager.sendCommand(LocaleConstant.OPEN_TRANSFER_COMMAND) + } else if (bytes.size == 14) { + val dataModel = bytes.toDataModel() + homeView.currentValueView.text = dataModel.potency.toString() + homeView.settingsValueView.text = dataModel.alarmValue.toString() + homeView.maxValueView.text = dataModel.maxPotency.toString() + //判断是否需要报警 + if (isOpenWarning) { + if (dataModel.potency >= dataModel.alarmValue) { + //当前值大于设置值,需要报警 + SoundPoolHelper.playSound(requireContext(), R.raw.alarm) + vibrator.vibrate(1000) + if (isAutoRecord) { + //如果连续超过10个报警,自动生成报警事件 + alarmCount++ + if (alarmCount >= 10) { + generateAlarmTask(dataModel.maxPotency) + } + } + } else { + //当测量值小于设置值,报警还未结束,需要停止响铃 + SoundPoolHelper.playSound(requireContext(), 0) + } + } else { + Log.d(kTag, "报警开关未打开,不处理") + } + } else { + Log.d(kTag, "未知返回值,无法解析") + } + } + //生成报警事件 private fun generateAlarmTask(maxValue: Int) { if (isGeneratingTask) { 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 d0e8904..b1e9b4b 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,16 +1,10 @@ package com.casic.birmm.inspect.extensions -import java.util.* +import com.casic.birmm.inspect.model.DeviceDataModel /** * ByteArray扩展方法 */ -fun ByteArray.toHexString(hasSpace: Boolean = true) = this.joinToString("") { - (it.toInt() and 0xFF) - .toString(16) - .padStart(2, '0') - .uppercase(Locale.ROOT) + if (hasSpace) " " else "" -} //ByteArray转设备编号 fun ByteArray.toDeviceCode(): String { @@ -26,4 +20,32 @@ builder.append(this[index].toInt().toChar()) } return builder.toString() +} + +//蓝牙数据解析 +fun ByteArray.toDataModel(): DeviceDataModel { + val deviceData = DeviceDataModel(0, 0, 0, 0) + //[-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 4, 33, 13, 10] + //数据头[-86, + //浓度值 00, 00, 00, 00, + //标志位 00, + //报警值 00, 100, + //最大值 00, 00, 4, 33, + //结束位 13, 10] + + //浓度 + deviceData.potency = (this[1].toInt() and 0xFF shl 24) + + (this[2].toInt() and 0xFF shl 16) + + (this[3].toInt() and 0xFF shl 8) + + (this[4].toInt() and 0xFF) + //报警标志 + deviceData.flag = this[5].toInt() and 0xFF + //报警阈值 + deviceData.alarmValue = (this[6].toInt() and 0xFF shl 8) + (this[7].toInt() and 0xFF) + //5s内最大值 + deviceData.maxPotency = (this[8].toInt() and 0xFF shl 24) + + (this[9].toInt() and 0xFF shl 16) + + (this[10].toInt() and 0xFF shl 8) + + (this[11].toInt() and 0xFF) + return deviceData } \ 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 6913186..ff7b996 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 @@ -2,7 +2,6 @@ import android.content.Context import com.casic.birmm.inspect.callback.OnImageCompressListener -import com.casic.birmm.inspect.model.DeviceDataModel import com.casic.birmm.inspect.model.ErrorMessageModel import com.casic.birmm.inspect.utils.LocaleConstant import com.google.gson.Gson @@ -70,45 +69,4 @@ listener.onError(e) } }).launch() -} - -//蓝牙数据解析 -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/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt index 52579df..0f3ff16 100644 --- a/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/birmm/inspect/fragment/HomePageFragment.kt @@ -23,7 +23,10 @@ import com.amap.api.maps.model.LatLng import com.amap.api.maps.model.MyLocationStyle import com.casic.birmm.inspect.R -import com.casic.birmm.inspect.extensions.* +import com.casic.birmm.inspect.extensions.addAll +import com.casic.birmm.inspect.extensions.id +import com.casic.birmm.inspect.extensions.toDataModel +import com.casic.birmm.inspect.extensions.toDeviceCode import com.casic.birmm.inspect.model.NewInspectionModel import com.casic.birmm.inspect.model.RoutePointModel import com.casic.birmm.inspect.model.UserInfoModel @@ -231,11 +234,6 @@ LoadingDialogHub.show(requireActivity(), "设备搜索中...") BLEManager.startDiscoverDevice(object : OnDeviceDiscoveredListener { override fun onDeviceFound(blueToothBean: BlueToothBean?) { - Log.d( - "Casic", - "MapInspectActivity => onDeviceFound: ${blueToothBean?.bluetoothDevice?.name}" - ) - val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.DISCOVERY_DEVICE message.obj = blueToothBean @@ -361,77 +359,18 @@ curConnectState = true BLEManager.sendCommand(LocaleConstant.ASK_DEV_CODE_COMMAND) } - LocaleConstant.CONNECT_FAILURE -> { - curConnectState = false - } - LocaleConstant.SEND_SUCCESS -> { - val sendSuccess = msg.obj as ByteArray - Log.d(kTag, "发送成功->sendSuccessBuffer: ${sendSuccess.toList()}") - } - LocaleConstant.SEND_FAILURE -> { - val sendFail = msg.obj as ByteArray - Log.d(kTag, "发送失败->sendFailBuffer: ${sendFail.toList()}") - } - LocaleConstant.RECEIVE_SUCCESS -> { - //TODO 接收成功 - val receiveByteArray = msg.obj as ByteArray - //根据返回值标头判断是设备编号还是数据值 - val firstByte = receiveByteArray[0] - if (firstByte == 0xAA.toByte()) { - //解析测量数据 -// Log.d(kTag, "实际数据: ${receiveByteArray.toList()}") - if (receiveByteArray.size == 14) { - val dataHexString = receiveByteArray.toHexString() -// Log.d(kTag, "十六进制: $dataHexString") - val dataModel = dataHexString.toDataModel() -// Log.d(kTag, "数据模型: ${Gson().toJson(dataModel)}") - homeView.currentValueView.text = dataModel.potency.toString() - homeView.settingsValueView.text = dataModel.alarmValue.toString() - homeView.maxValueView.text = dataModel.maxPotency.toString() - //判断是否需要报警 - if (isOpenWarning) { - if (dataModel.potency >= dataModel.alarmValue) { - //当前值大于设置值,需要报警 - SoundPoolHelper.playSound(requireContext(), R.raw.alarm) - vibrator.vibrate(1000) - if (isAutoRecord) { - //如果连续超过10个报警,自动生成报警事件 - alarmCount++ - if (alarmCount >= 10) { - generateAlarmTask(dataModel.maxPotency) - } - } - } else { - //当测量值小于设置值,报警还未结束,需要停止响铃 - SoundPoolHelper.playSound(requireContext(), 0) - } - } else { - Log.d(kTag, "报警开关未打开,不处理") - } - } else { - Log.d(kTag, "设备返回值长度异常,无法解析") - } - } else if (firstByte == 51.toByte()) { - //解析deviceCode - //51, 51, 50, 48, 50, 49, 48, 49, 48, 48, 48, 51, 13, 10, -86, 0, 0, 0, 0, 0 - if (receiveByteArray.size >= 12) { - homeView.deviceStatusView.text = - "设备编号: ${receiveByteArray.toDeviceCode()}" - BLEManager.sendCommand(LocaleConstant.OPEN_TRANSFER_COMMAND) - } else { - Log.d(kTag, "设备返回值长度异常,无法解析") - } - } else { - Log.d(kTag, "未知返回值,无法解析") - } - } - LocaleConstant.RECEIVE_FAILURE -> { - val receiveString = msg.obj as String - Log.d(kTag, "接收失败->receiveString: $receiveString") - } - LocaleConstant.DISCONNECT_SUCCESS -> { - curConnectState = false - } + LocaleConstant.CONNECT_FAILURE -> curConnectState = false + LocaleConstant.SEND_SUCCESS -> Log.d( + kTag, "发送成功->sendSuccessBuffer: ${(msg.obj as ByteArray).toList()}" + ) + LocaleConstant.SEND_FAILURE -> Log.d( + kTag, "发送失败->sendFailBuffer: ${(msg.obj as ByteArray).toList()}" + ) + LocaleConstant.RECEIVE_SUCCESS -> parseMethaneData(msg.obj as ByteArray) + LocaleConstant.RECEIVE_FAILURE -> Log.d( + kTag, "接收失败->receiveString: ${msg.obj as String}" + ) + LocaleConstant.DISCONNECT_SUCCESS -> curConnectState = false } true } @@ -569,6 +508,51 @@ } } + /** + * 解析甲烷数据 + * 1、设备编号 + * [51, 51, 50, 48, 48, 48, 48, 49, 48, 48, 48, 50, 13, 10, -86, 1, 32, -39, -105, 1] + * + * 2、甲烷浓度(长度:14字节) + * [-86, 0, 0, 0, 0, 0, 0, 100, 0, 0, 4, 33, 13, 10] + * + * */ + private fun parseMethaneData(bytes: ByteArray) { + if ((bytes[0].toInt() and 0xFF) == 51 && bytes.size == 14) { + //解析deviceCode + //[51, 51, 50, 48, 48, 48, 48, 49, 48, 48, 48, 50, 13, 10] + homeView.deviceStatusView.text = "设备编号: ${bytes.toDeviceCode()}" + BLEManager.sendCommand(LocaleConstant.OPEN_TRANSFER_COMMAND) + } else if (bytes.size == 14) { + val dataModel = bytes.toDataModel() + homeView.currentValueView.text = dataModel.potency.toString() + homeView.settingsValueView.text = dataModel.alarmValue.toString() + homeView.maxValueView.text = dataModel.maxPotency.toString() + //判断是否需要报警 + if (isOpenWarning) { + if (dataModel.potency >= dataModel.alarmValue) { + //当前值大于设置值,需要报警 + SoundPoolHelper.playSound(requireContext(), R.raw.alarm) + vibrator.vibrate(1000) + if (isAutoRecord) { + //如果连续超过10个报警,自动生成报警事件 + alarmCount++ + if (alarmCount >= 10) { + generateAlarmTask(dataModel.maxPotency) + } + } + } else { + //当测量值小于设置值,报警还未结束,需要停止响铃 + SoundPoolHelper.playSound(requireContext(), 0) + } + } else { + Log.d(kTag, "报警开关未打开,不处理") + } + } else { + Log.d(kTag, "未知返回值,无法解析") + } + } + //生成报警事件 private fun generateAlarmTask(maxValue: Int) { if (isGeneratingTask) { diff --git a/app/src/main/res/layout/fragment_map_inspect.xml b/app/src/main/res/layout/fragment_map_inspect.xml index 568e19e..ce2b604 100644 --- a/app/src/main/res/layout/fragment_map_inspect.xml +++ b/app/src/main/res/layout/fragment_map_inspect.xml @@ -47,12 +47,11 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="5dp" - android:fontFamily="sans-serif-medium" + android:hint="巡检记录" android:paddingVertical="3dp" android:singleLine="true" - android:text="@string/app_name" android:textColor="@color/black" - android:textSize="@dimen/sp_16" + android:textSize="@dimen/sp_14" app:layout_constraintEnd_toStartOf="@id/inspectTimeView" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/deviceStatusView" /> @@ -62,11 +61,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="5dp" - android:fontFamily="sans-serif-medium" android:paddingVertical="3dp" - android:text="yyyy-MM-dd HH:mm:ss" + android:hint="yyyy-MM-dd HH:mm:ss" android:textColor="@color/black" - android:textSize="@dimen/sp_16" + android:textSize="@dimen/sp_14" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/inspectNameView" app:layout_constraintTop_toBottomOf="@id/deviceStatusView" />