From f1c86762e5ae75849db3837910f0f0850ebde2e8 Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Sat, 2 Mar 2024 18:02:28 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E4=BF=AE=E6=94=B9=E9=87=8F=E7=A8=8B?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=B0=8F=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../watcher/port/GasPortUtils.kt | 6 ++--- .../safetywatcher/watcher/port/ParseHelper.kt | 10 +++---- .../safetywatcher/watcher/port/cmd/CMD.kt | 27 +++++++++++++++---- .../watcher/ui/SensorSettingActivity.kt | 12 +++------ .../res/layout/activity_sensor_setting.xml | 2 +- .../com/common/serialport/EasySerialPort.kt | 2 +- 6 files changed, 36 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasPortUtils.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasPortUtils.kt index ef9bf88..0345b2a 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasPortUtils.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasPortUtils.kt @@ -4,7 +4,7 @@ import android.os.Process import com.common.commonlib.db.DBUtils import com.common.serialport.ComMultiPortUtils import com.yinuo.safetywatcher.watcher.port.cmd.CMD -import com.yinuo.safetywatcher.watcher.port.cmd.CMD.Companion.buildSensorRangeCmd +import com.yinuo.safetywatcher.watcher.port.cmd.CMD.Companion.buildSensorRangeDecimalCmd import com.yinuo.safetywatcher.watcher.port.cmd.CMD.Companion.buildSwitchSensorCmd import com.yinuo.safetywatcher.watcher.port.cmd.CalibrationCmd import org.easydarwin.TxtOverlay @@ -64,7 +64,7 @@ object GasPortUtils { } private fun isSensorGasData(array: ByteArray) = - array[0].toInt() == 0x01 && array[1].toInt() == 0x03 && array[2].toInt() == 0x14 + array[0].toInt() == 0x01 && array[1].toInt() == 0x03 && array[2].toInt() == 0x1A /** * 读取气体浓度 @@ -142,7 +142,7 @@ object GasPortUtils { fun setSensorMaxRange(index: Int, value: Int) { synchronized(toDoCmdList) { - toDoCmdList.add(buildSensorRangeCmd(index, value)) + toDoCmdList.add(buildSensorRangeDecimalCmd(index, value)) } } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt index 686fc2b..f058d96 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt @@ -34,7 +34,7 @@ object ParseHelper { private val devicesApi by lazy { DevicesApi() } - private val gasRangeMaxMap = hashMapOf() + private val gasRangeMaxMap = hashMapOf() private val unConvertValueMap = hashMapOf() private var mWarnListener: ((String, Warning?) -> Unit)? = null; fun setWarnChangeListener(onChange: (String, Warning?) -> Unit) { @@ -121,9 +121,9 @@ object ParseHelper { value = 0f } // 量程 - val rangHex: String = HexUtils.byteArrToHex(it, 11, 11 + 2) + val rangHex: String = HexUtils.byteArrToHex(it, 27, 27 + 2) val rangHexLong: Long = HexUtils.hexToLong(rangHex) - gasRangeMaxMap[type.desc] = rangHexLong + gasRangeMaxMap[type.desc] = rangHexLong / 100f // // 温度 // val temperatureHex: String = HexUtils.byteArrToHex(it, 17, 17 + 2) // val temperature: Long = HexUtils.hexToLong(temperatureHex) @@ -377,7 +377,7 @@ object ParseHelper { return 0f } - fun getGasRangeMax(type: String): Long { - return gasRangeMaxMap[type] ?: getGasTypeEnumByDesc(type).rangMax.toLong() + fun getGasRangeMax(type: String): Float { + return gasRangeMaxMap[type] ?: getGasTypeEnumByDesc(type).rangMax.toFloat() } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/cmd/CMD.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/cmd/CMD.kt index 4a54bd4..bdce867 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/cmd/CMD.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/cmd/CMD.kt @@ -12,11 +12,11 @@ class CMD { return byteArrayOf(0x01, 0x06, 0x05, 0x00, 0x00, legalSpeed.toByte()).crc16() } - val SENSOR_1 = byteArrayOf(0x01, 0x03, 0x00, 0x00, 0x00, 0x0A).crc16() - val SENSOR_2 = byteArrayOf(0x01, 0x03, 0x01, 0x00, 0x00, 0x0A).crc16() - val SENSOR_3 = byteArrayOf(0x01, 0x03, 0x02, 0x00, 0x00, 0x0A).crc16() - val SENSOR_4 = byteArrayOf(0x01, 0x03, 0x03, 0x00, 0x00, 0x0A).crc16() - val SENSOR_5 = byteArrayOf(0x01, 0x03, 0x04, 0x00, 0x00, 0x0A).crc16() + val SENSOR_1 = byteArrayOf(0x01, 0x03, 0x00, 0x00, 0x00, 0x0d).crc16() + val SENSOR_2 = byteArrayOf(0x01, 0x03, 0x01, 0x00, 0x00, 0x0d).crc16() + val SENSOR_3 = byteArrayOf(0x01, 0x03, 0x02, 0x00, 0x00, 0x0d).crc16() + val SENSOR_4 = byteArrayOf(0x01, 0x03, 0x03, 0x00, 0x00, 0x0d).crc16() + val SENSOR_5 = byteArrayOf(0x01, 0x03, 0x04, 0x00, 0x00, 0x0d).crc16() fun buildSwitchSensorCmd(index: Int, open: Boolean): ByteArray { var byteOpen: Byte = 0x00 @@ -35,5 +35,22 @@ class CMD { } return byteArrayOf(0x01, 0x06, index.toByte(), 0x04, highBit, lowBit).crc16() } + + fun buildSensorRangeDecimalCmd(index: Int, rangeMax: Int): ByteArray { + var high64Bit: Byte = 0x00 + var high32Bit: Byte = 0x00 + var high16Bit: Byte = 0x00 + var low8Bit: Byte = 0x00 + if (rangeMax != 0) { + high64Bit = (rangeMax shr 24 and FF).toByte() + high32Bit = (rangeMax shr 16 and FF).toByte() + high16Bit = (rangeMax shr 8 and FF).toByte() + low8Bit = (rangeMax and FF).toByte() + } + return byteArrayOf( + 0x01, 0x10, index.toByte(), 0x0B, 0x00, 0x02, 0x04, + high64Bit, high32Bit, high16Bit, low8Bit + ).crc16() + } } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt index c1b27b0..9f5dea1 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/SensorSettingActivity.kt @@ -5,7 +5,6 @@ import android.view.KeyEvent import android.view.View import androidx.lifecycle.lifecycleScope import com.common.commonlib.CommonApplication -import com.common.commonlib.db.DBUtils import com.common.commonlib.utils.MMKVUtils import com.common.commonlib.utils.getGasShowName import com.common.commonlib.utils.saveGasNickName @@ -19,10 +18,7 @@ import com.yinuo.safetywatcher.watcher.port.UNIT_LEL import com.yinuo.safetywatcher.watcher.port.UNIT_MGM3 import com.yinuo.safetywatcher.watcher.port.UNIT_PPM import com.yinuo.safetywatcher.watcher.port.UNIT_VOL -import com.yinuo.safetywatcher.watcher.port.cmd.CH4_H2 import com.yinuo.safetywatcher.watcher.port.cmd.GasPortStatus -import com.yinuo.safetywatcher.watcher.port.cmd.O2 -import com.yinuo.safetywatcher.watcher.port.cmd.VOCS import com.yinuo.safetywatcher.watcher.port.getLocalGasUnit import com.yinuo.safetywatcher.watcher.port.getSensorNickName import com.yinuo.safetywatcher.watcher.port.getShowStatus @@ -32,7 +28,6 @@ import com.yinuo.safetywatcher.watcher.utils.hideIme import com.yinuo.safetywatcher.watcher.utils.showIme import com.yinuo.safetywatcher.watcher.utils.showToast import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch class SensorSettingActivity : NoOptionsActivity() { @@ -274,11 +269,12 @@ class SensorSettingActivity : NoOptionsActivity() { val rangeStr = mBinding.etStep.text.toString() if (rangeStr.isNotEmpty()) { - val toInt = rangeStr.toInt() - if (toInt <= 0) { + val toFloat = rangeStr.toFloat() + if (toFloat <= 0) { showToast("量程必须大于0!") } else { - GasPortUtils.setSensorMaxRange(sensorIndex, toInt) + // 输入的可能存在小数,*100,底层处理会自动处理 + GasPortUtils.setSensorMaxRange(sensorIndex, (toFloat * 100).toInt()) } } // if (gasName != O2 && gasName != CH4_H2) { diff --git a/app/src/main/res/layout/activity_sensor_setting.xml b/app/src/main/res/layout/activity_sensor_setting.xml index ceea9e7..f38bdd7 100644 --- a/app/src/main/res/layout/activity_sensor_setting.xml +++ b/app/src/main/res/layout/activity_sensor_setting.xml @@ -75,9 +75,9 @@ android:background="@drawable/cloud_sync_btn_bg" android:gravity="center_vertical" android:focusable="true" + android:inputType="number|numberDecimal" android:hint="@string/sensor_step_txt" android:paddingStart="@dimen/_30dp" - android:inputType="number" android:nextFocusDown="@id/et_step" android:textColor="@color/white" android:textColorHint="@color/white" diff --git a/library-serialPort/src/main/java/com/common/serialport/EasySerialPort.kt b/library-serialPort/src/main/java/com/common/serialport/EasySerialPort.kt index 3dc71b7..2c3509b 100644 --- a/library-serialPort/src/main/java/com/common/serialport/EasySerialPort.kt +++ b/library-serialPort/src/main/java/com/common/serialport/EasySerialPort.kt @@ -15,7 +15,7 @@ class EasySerialPort( private var mAutoRetryConnect = false private val mReadBytes by lazy { - ByteArray(25) + ByteArray(31) } init {