diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt index 7a71206..40d670b 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt @@ -46,7 +46,7 @@ //趋势线起点X坐标 private var i = 0 - private var isVisibleToUser = false + private var isGetMethaneState = false private var isGetTemperature = false override fun initOnCreate(savedInstanceState: Bundle?) { @@ -84,28 +84,28 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) - this.isVisibleToUser = isVisibleToUser if (isVisibleToUser) { lifecycleScope.launch(Dispatchers.IO) { + while (!isGetMethaneState) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_STATE_CODE) + delay(1000) + } + while (!isGetTemperature) { SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_CPU_TEMPERATURE_CODE) - delay(1000) + delay(1100) } } } } override fun initEvent() { - binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> - if (isVisibleToUser) { - val weakReferenceHandler = SocketConnectionService.weakReferenceHandler - ?: return@setOnCheckedChangeListener - if (checkedId == R.id.openRadioButton) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.OPEN_METHANE_CODE) - } else if (checkedId == R.id.closeRadioButton) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.CLOSE_METHANE_CODE) - } - } + binding.openRadioButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.OPEN_METHANE_CODE) + } + + binding.closeRadioButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.CLOSE_METHANE_CODE) } binding.updateThresholdButton.setOnClickListener { @@ -134,6 +134,15 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { + LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE -> { + isGetMethaneState = true + if ((msg.obj as Int) == 1) { + binding.openRadioButton.isChecked = true + } else { + binding.closeRadioButton.isChecked = true + } + } + LocaleConstant.QUERY_CPU_TEMPERATURE_RESPONSE_CODE -> { isGetTemperature = true val cpuTemperature = msg.obj as Float @@ -196,13 +205,6 @@ override fun onResume() { super.onResume() - val checked = SaveKeyValues.getValue(LocaleConstant.OPEN_METHANE_KEY, true) as Boolean - if (checked) { - binding.openRadioButton.isChecked = true - } else { - binding.closeRadioButton.isChecked = true - } - //回显甲烷默认阈值 val threshold = SaveKeyValues.getValue( LocaleConstant.METHANE_DEFAULT_VALUE_KEY, 0.1f diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt index 7a71206..40d670b 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt @@ -46,7 +46,7 @@ //趋势线起点X坐标 private var i = 0 - private var isVisibleToUser = false + private var isGetMethaneState = false private var isGetTemperature = false override fun initOnCreate(savedInstanceState: Bundle?) { @@ -84,28 +84,28 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) - this.isVisibleToUser = isVisibleToUser if (isVisibleToUser) { lifecycleScope.launch(Dispatchers.IO) { + while (!isGetMethaneState) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_STATE_CODE) + delay(1000) + } + while (!isGetTemperature) { SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_CPU_TEMPERATURE_CODE) - delay(1000) + delay(1100) } } } } override fun initEvent() { - binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> - if (isVisibleToUser) { - val weakReferenceHandler = SocketConnectionService.weakReferenceHandler - ?: return@setOnCheckedChangeListener - if (checkedId == R.id.openRadioButton) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.OPEN_METHANE_CODE) - } else if (checkedId == R.id.closeRadioButton) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.CLOSE_METHANE_CODE) - } - } + binding.openRadioButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.OPEN_METHANE_CODE) + } + + binding.closeRadioButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.CLOSE_METHANE_CODE) } binding.updateThresholdButton.setOnClickListener { @@ -134,6 +134,15 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { + LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE -> { + isGetMethaneState = true + if ((msg.obj as Int) == 1) { + binding.openRadioButton.isChecked = true + } else { + binding.closeRadioButton.isChecked = true + } + } + LocaleConstant.QUERY_CPU_TEMPERATURE_RESPONSE_CODE -> { isGetTemperature = true val cpuTemperature = msg.obj as Float @@ -196,13 +205,6 @@ override fun onResume() { super.onResume() - val checked = SaveKeyValues.getValue(LocaleConstant.OPEN_METHANE_KEY, true) as Boolean - if (checked) { - binding.openRadioButton.isChecked = true - } else { - binding.closeRadioButton.isChecked = true - } - //回显甲烷默认阈值 val threshold = SaveKeyValues.getValue( LocaleConstant.METHANE_DEFAULT_VALUE_KEY, 0.1f diff --git a/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt b/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt index aa1d4d7..9bd50c6 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt @@ -30,6 +30,10 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { + LocaleConstant.QUERY_METHANE_STATE_CODE -> { + tcpClient.sendMessage(CommandCreator.queryMethaneState()) + } + LocaleConstant.OPEN_METHANE_CODE -> { tcpClient.sendMessage(CommandCreator.openLaser()) } @@ -116,7 +120,7 @@ override fun run() { tcpClient.sendMessage(CommandCreator.queryMethane()) // 每3s重复一次 - weakReferenceHandler?.postDelayed(this, 3 * 1000L) +// weakReferenceHandler?.postDelayed(this, 3 * 1000L) } } @@ -147,6 +151,8 @@ } /** + * 激光状态返回:[7, 32, 0, 1, 0, 1, -69, 1, 1, -111, 1, 0, -108] + * * 激光开返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -111, 1, 0, -109] * * 激光关返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -111, 0, 0, -110] @@ -191,6 +197,8 @@ if (bytes == null) { return } + Log.d(kTag, bytes.contentToString()) + //根据帧头判断。不能直接转为ascii,因为有的协议返回的不是ascii,会报错 val dataHeadArray = bytes.copyOfRange(0, 7) if (dataHeadArray.contentEquals(byteArrayOf(71, 101, 116, 68, 97, 116, 97))) { @@ -245,7 +253,6 @@ } } else { if (bytes.size != 13) { - Log.d(kTag, "数据异常 => ${bytes.contentToString()}") return } @@ -274,6 +281,7 @@ } "BB" -> { + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return when ((bytes[9].toInt() and 0xFF).toString(16).uppercase()) { "90" -> { //语音源模式 @@ -286,11 +294,10 @@ "91" -> { //激光状态 - if (bytes[10].toInt() == 1) { - SaveKeyValues.putValue(LocaleConstant.OPEN_METHANE_KEY, true) - } else { - SaveKeyValues.putValue(LocaleConstant.OPEN_METHANE_KEY, false) - } + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE + message.obj = bytes[10].toInt() + weakReferenceHandler.sendMessage(message) } "92" -> { diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt index 7a71206..40d670b 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt @@ -46,7 +46,7 @@ //趋势线起点X坐标 private var i = 0 - private var isVisibleToUser = false + private var isGetMethaneState = false private var isGetTemperature = false override fun initOnCreate(savedInstanceState: Bundle?) { @@ -84,28 +84,28 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) - this.isVisibleToUser = isVisibleToUser if (isVisibleToUser) { lifecycleScope.launch(Dispatchers.IO) { + while (!isGetMethaneState) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_STATE_CODE) + delay(1000) + } + while (!isGetTemperature) { SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_CPU_TEMPERATURE_CODE) - delay(1000) + delay(1100) } } } } override fun initEvent() { - binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> - if (isVisibleToUser) { - val weakReferenceHandler = SocketConnectionService.weakReferenceHandler - ?: return@setOnCheckedChangeListener - if (checkedId == R.id.openRadioButton) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.OPEN_METHANE_CODE) - } else if (checkedId == R.id.closeRadioButton) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.CLOSE_METHANE_CODE) - } - } + binding.openRadioButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.OPEN_METHANE_CODE) + } + + binding.closeRadioButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.CLOSE_METHANE_CODE) } binding.updateThresholdButton.setOnClickListener { @@ -134,6 +134,15 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { + LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE -> { + isGetMethaneState = true + if ((msg.obj as Int) == 1) { + binding.openRadioButton.isChecked = true + } else { + binding.closeRadioButton.isChecked = true + } + } + LocaleConstant.QUERY_CPU_TEMPERATURE_RESPONSE_CODE -> { isGetTemperature = true val cpuTemperature = msg.obj as Float @@ -196,13 +205,6 @@ override fun onResume() { super.onResume() - val checked = SaveKeyValues.getValue(LocaleConstant.OPEN_METHANE_KEY, true) as Boolean - if (checked) { - binding.openRadioButton.isChecked = true - } else { - binding.closeRadioButton.isChecked = true - } - //回显甲烷默认阈值 val threshold = SaveKeyValues.getValue( LocaleConstant.METHANE_DEFAULT_VALUE_KEY, 0.1f diff --git a/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt b/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt index aa1d4d7..9bd50c6 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt @@ -30,6 +30,10 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { + LocaleConstant.QUERY_METHANE_STATE_CODE -> { + tcpClient.sendMessage(CommandCreator.queryMethaneState()) + } + LocaleConstant.OPEN_METHANE_CODE -> { tcpClient.sendMessage(CommandCreator.openLaser()) } @@ -116,7 +120,7 @@ override fun run() { tcpClient.sendMessage(CommandCreator.queryMethane()) // 每3s重复一次 - weakReferenceHandler?.postDelayed(this, 3 * 1000L) +// weakReferenceHandler?.postDelayed(this, 3 * 1000L) } } @@ -147,6 +151,8 @@ } /** + * 激光状态返回:[7, 32, 0, 1, 0, 1, -69, 1, 1, -111, 1, 0, -108] + * * 激光开返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -111, 1, 0, -109] * * 激光关返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -111, 0, 0, -110] @@ -191,6 +197,8 @@ if (bytes == null) { return } + Log.d(kTag, bytes.contentToString()) + //根据帧头判断。不能直接转为ascii,因为有的协议返回的不是ascii,会报错 val dataHeadArray = bytes.copyOfRange(0, 7) if (dataHeadArray.contentEquals(byteArrayOf(71, 101, 116, 68, 97, 116, 97))) { @@ -245,7 +253,6 @@ } } else { if (bytes.size != 13) { - Log.d(kTag, "数据异常 => ${bytes.contentToString()}") return } @@ -274,6 +281,7 @@ } "BB" -> { + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return when ((bytes[9].toInt() and 0xFF).toString(16).uppercase()) { "90" -> { //语音源模式 @@ -286,11 +294,10 @@ "91" -> { //激光状态 - if (bytes[10].toInt() == 1) { - SaveKeyValues.putValue(LocaleConstant.OPEN_METHANE_KEY, true) - } else { - SaveKeyValues.putValue(LocaleConstant.OPEN_METHANE_KEY, false) - } + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE + message.obj = bytes[10].toInt() + weakReferenceHandler.sendMessage(message) } "92" -> { diff --git a/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt b/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt index 496a7f3..bd7dd78 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt @@ -2,6 +2,13 @@ object CommandCreator { /** + * 查询激光状态 + * */ + fun queryMethaneState(): ByteArray { + return byteArrayOf(0xAA.toByte(), 0x01, 0x01, 0x91.toByte(), 0x00, 0x00, 0x93.toByte()) + } + + /** * 打开激光指令 */ fun openLaser(): ByteArray { diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt index 7a71206..40d670b 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt @@ -46,7 +46,7 @@ //趋势线起点X坐标 private var i = 0 - private var isVisibleToUser = false + private var isGetMethaneState = false private var isGetTemperature = false override fun initOnCreate(savedInstanceState: Bundle?) { @@ -84,28 +84,28 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) - this.isVisibleToUser = isVisibleToUser if (isVisibleToUser) { lifecycleScope.launch(Dispatchers.IO) { + while (!isGetMethaneState) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_STATE_CODE) + delay(1000) + } + while (!isGetTemperature) { SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_CPU_TEMPERATURE_CODE) - delay(1000) + delay(1100) } } } } override fun initEvent() { - binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> - if (isVisibleToUser) { - val weakReferenceHandler = SocketConnectionService.weakReferenceHandler - ?: return@setOnCheckedChangeListener - if (checkedId == R.id.openRadioButton) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.OPEN_METHANE_CODE) - } else if (checkedId == R.id.closeRadioButton) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.CLOSE_METHANE_CODE) - } - } + binding.openRadioButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.OPEN_METHANE_CODE) + } + + binding.closeRadioButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.CLOSE_METHANE_CODE) } binding.updateThresholdButton.setOnClickListener { @@ -134,6 +134,15 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { + LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE -> { + isGetMethaneState = true + if ((msg.obj as Int) == 1) { + binding.openRadioButton.isChecked = true + } else { + binding.closeRadioButton.isChecked = true + } + } + LocaleConstant.QUERY_CPU_TEMPERATURE_RESPONSE_CODE -> { isGetTemperature = true val cpuTemperature = msg.obj as Float @@ -196,13 +205,6 @@ override fun onResume() { super.onResume() - val checked = SaveKeyValues.getValue(LocaleConstant.OPEN_METHANE_KEY, true) as Boolean - if (checked) { - binding.openRadioButton.isChecked = true - } else { - binding.closeRadioButton.isChecked = true - } - //回显甲烷默认阈值 val threshold = SaveKeyValues.getValue( LocaleConstant.METHANE_DEFAULT_VALUE_KEY, 0.1f diff --git a/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt b/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt index aa1d4d7..9bd50c6 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt @@ -30,6 +30,10 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { + LocaleConstant.QUERY_METHANE_STATE_CODE -> { + tcpClient.sendMessage(CommandCreator.queryMethaneState()) + } + LocaleConstant.OPEN_METHANE_CODE -> { tcpClient.sendMessage(CommandCreator.openLaser()) } @@ -116,7 +120,7 @@ override fun run() { tcpClient.sendMessage(CommandCreator.queryMethane()) // 每3s重复一次 - weakReferenceHandler?.postDelayed(this, 3 * 1000L) +// weakReferenceHandler?.postDelayed(this, 3 * 1000L) } } @@ -147,6 +151,8 @@ } /** + * 激光状态返回:[7, 32, 0, 1, 0, 1, -69, 1, 1, -111, 1, 0, -108] + * * 激光开返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -111, 1, 0, -109] * * 激光关返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -111, 0, 0, -110] @@ -191,6 +197,8 @@ if (bytes == null) { return } + Log.d(kTag, bytes.contentToString()) + //根据帧头判断。不能直接转为ascii,因为有的协议返回的不是ascii,会报错 val dataHeadArray = bytes.copyOfRange(0, 7) if (dataHeadArray.contentEquals(byteArrayOf(71, 101, 116, 68, 97, 116, 97))) { @@ -245,7 +253,6 @@ } } else { if (bytes.size != 13) { - Log.d(kTag, "数据异常 => ${bytes.contentToString()}") return } @@ -274,6 +281,7 @@ } "BB" -> { + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return when ((bytes[9].toInt() and 0xFF).toString(16).uppercase()) { "90" -> { //语音源模式 @@ -286,11 +294,10 @@ "91" -> { //激光状态 - if (bytes[10].toInt() == 1) { - SaveKeyValues.putValue(LocaleConstant.OPEN_METHANE_KEY, true) - } else { - SaveKeyValues.putValue(LocaleConstant.OPEN_METHANE_KEY, false) - } + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE + message.obj = bytes[10].toInt() + weakReferenceHandler.sendMessage(message) } "92" -> { diff --git a/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt b/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt index 496a7f3..bd7dd78 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt @@ -2,6 +2,13 @@ object CommandCreator { /** + * 查询激光状态 + * */ + fun queryMethaneState(): ByteArray { + return byteArrayOf(0xAA.toByte(), 0x01, 0x01, 0x91.toByte(), 0x00, 0x00, 0x93.toByte()) + } + + /** * 打开激光指令 */ fun openLaser(): ByteArray { diff --git a/app/src/main/java/com/casic/app/safetreecontroller/utils/LocaleConstant.kt b/app/src/main/java/com/casic/app/safetreecontroller/utils/LocaleConstant.kt index e22082b..96ff5ec 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/utils/LocaleConstant.kt @@ -14,41 +14,42 @@ /** * Handler Request Code * */ - const val OPEN_METHANE_CODE = 20240001 - const val CLOSE_METHANE_CODE = 20240002 - const val UPDATE_GAS_THRESHOLD_CODE = 20240003 - const val QUERY_CPU_TEMPERATURE_CODE = 20240004 - const val INCREASE_VOICE_CODE = 20240005 - const val REDUCE_VOICE_CODE = 20240006 - const val OPEN_LOCALE_MODE_CODE = 20240007 - const val OPEN_REMOTE_MODE_CODE = 20240008 - const val OPEN_METHANE_ALARM_CODE = 20240009 - const val CLOSE_METHANE_ALARM_CODE = 20240010 - const val OPEN_DEVICE_STATE_TIPS_CODE = 20240011 - const val CLOSE_DEVICE_STATE_TIPS_CODE = 20240012 - const val QUERY_BOARD_CONFIG_CODE = 20240013 - const val QUERY_IS_USE_AI_CODE = 20240014 - const val QUERY_SERVER_CONFIG_CODE = 20240015 - const val SET_BOARD_WIFI_CONFIG_CODE = 20240016 - const val SET_BOARD_SERVER_CONFIG_CODE = 20240017 + const val QUERY_METHANE_STATE_CODE = 20240001 + const val OPEN_METHANE_CODE = 20240002 + const val CLOSE_METHANE_CODE = 20240003 + const val UPDATE_GAS_THRESHOLD_CODE = 20240004 + const val QUERY_CPU_TEMPERATURE_CODE = 20240005 + const val INCREASE_VOICE_CODE = 20240006 + const val REDUCE_VOICE_CODE = 20240007 + const val OPEN_LOCALE_MODE_CODE = 20240008 + const val OPEN_REMOTE_MODE_CODE = 20240009 + const val OPEN_METHANE_ALARM_CODE = 20240010 + const val CLOSE_METHANE_ALARM_CODE = 20240011 + const val OPEN_DEVICE_STATE_TIPS_CODE = 20240012 + const val CLOSE_DEVICE_STATE_TIPS_CODE = 20240013 + const val QUERY_BOARD_CONFIG_CODE = 20240014 + const val QUERY_IS_USE_AI_CODE = 20240015 + const val QUERY_SERVER_CONFIG_CODE = 20240016 + const val SET_BOARD_WIFI_CONFIG_CODE = 20240017 + const val SET_BOARD_SERVER_CONFIG_CODE = 20240018 /** * Handler Response Code * */ - const val QUERY_CPU_TEMPERATURE_RESPONSE_CODE = 20241001 - const val QUERY_METHANE_RESPONSE_CODE = 20241002 - const val DEVICE_RESPONSE_CODE = 20241003 - const val BOARD_CONFIG_RESPONSE_CODE = 20241004 - const val QUERY_IS_USE_AI_RESPONSE_CODE = 20241005 - const val SERVER_CONFIG_RESPONSE_CODE = 20241006 - const val SET_BOARD_WIFI_CONFIG_RESPONSE_CODE = 20241007 - const val SET_BOARD_SERVER_CONFIG_RESPONSE_CODE = 20241008 + const val QUERY_METHANE_STATE_RESPONSE_CODE = 20241001 + const val QUERY_CPU_TEMPERATURE_RESPONSE_CODE = 20241002 + const val QUERY_METHANE_RESPONSE_CODE = 20241003 + const val DEVICE_RESPONSE_CODE = 20241004 + const val BOARD_CONFIG_RESPONSE_CODE = 20241005 + const val QUERY_IS_USE_AI_RESPONSE_CODE = 20241006 + const val SERVER_CONFIG_RESPONSE_CODE = 20241007 + const val SET_BOARD_WIFI_CONFIG_RESPONSE_CODE = 20241008 + const val SET_BOARD_SERVER_CONFIG_RESPONSE_CODE = 20241009 /*** * SP Key * */ const val DEVICE_CONTROL_SERVER_CONFIG_KEY = "Key_1" - const val OPEN_METHANE_KEY = "Key_2" const val LOCALE_MODE_KEY = "Key_4" const val OPEN_ALARM_KEY = "Key_5" const val OPEN_VOICE_KEY = "Key_6" diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt index 7a71206..40d670b 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/MethaneMonitorFragment.kt @@ -46,7 +46,7 @@ //趋势线起点X坐标 private var i = 0 - private var isVisibleToUser = false + private var isGetMethaneState = false private var isGetTemperature = false override fun initOnCreate(savedInstanceState: Bundle?) { @@ -84,28 +84,28 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) - this.isVisibleToUser = isVisibleToUser if (isVisibleToUser) { lifecycleScope.launch(Dispatchers.IO) { + while (!isGetMethaneState) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_METHANE_STATE_CODE) + delay(1000) + } + while (!isGetTemperature) { SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_CPU_TEMPERATURE_CODE) - delay(1000) + delay(1100) } } } } override fun initEvent() { - binding.radioGroup.setOnCheckedChangeListener { _, checkedId -> - if (isVisibleToUser) { - val weakReferenceHandler = SocketConnectionService.weakReferenceHandler - ?: return@setOnCheckedChangeListener - if (checkedId == R.id.openRadioButton) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.OPEN_METHANE_CODE) - } else if (checkedId == R.id.closeRadioButton) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.CLOSE_METHANE_CODE) - } - } + binding.openRadioButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.OPEN_METHANE_CODE) + } + + binding.closeRadioButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.CLOSE_METHANE_CODE) } binding.updateThresholdButton.setOnClickListener { @@ -134,6 +134,15 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { + LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE -> { + isGetMethaneState = true + if ((msg.obj as Int) == 1) { + binding.openRadioButton.isChecked = true + } else { + binding.closeRadioButton.isChecked = true + } + } + LocaleConstant.QUERY_CPU_TEMPERATURE_RESPONSE_CODE -> { isGetTemperature = true val cpuTemperature = msg.obj as Float @@ -196,13 +205,6 @@ override fun onResume() { super.onResume() - val checked = SaveKeyValues.getValue(LocaleConstant.OPEN_METHANE_KEY, true) as Boolean - if (checked) { - binding.openRadioButton.isChecked = true - } else { - binding.closeRadioButton.isChecked = true - } - //回显甲烷默认阈值 val threshold = SaveKeyValues.getValue( LocaleConstant.METHANE_DEFAULT_VALUE_KEY, 0.1f diff --git a/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt b/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt index aa1d4d7..9bd50c6 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/service/SocketConnectionService.kt @@ -30,6 +30,10 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { + LocaleConstant.QUERY_METHANE_STATE_CODE -> { + tcpClient.sendMessage(CommandCreator.queryMethaneState()) + } + LocaleConstant.OPEN_METHANE_CODE -> { tcpClient.sendMessage(CommandCreator.openLaser()) } @@ -116,7 +120,7 @@ override fun run() { tcpClient.sendMessage(CommandCreator.queryMethane()) // 每3s重复一次 - weakReferenceHandler?.postDelayed(this, 3 * 1000L) +// weakReferenceHandler?.postDelayed(this, 3 * 1000L) } } @@ -147,6 +151,8 @@ } /** + * 激光状态返回:[7, 32, 0, 1, 0, 1, -69, 1, 1, -111, 1, 0, -108] + * * 激光开返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -111, 1, 0, -109] * * 激光关返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -111, 0, 0, -110] @@ -191,6 +197,8 @@ if (bytes == null) { return } + Log.d(kTag, bytes.contentToString()) + //根据帧头判断。不能直接转为ascii,因为有的协议返回的不是ascii,会报错 val dataHeadArray = bytes.copyOfRange(0, 7) if (dataHeadArray.contentEquals(byteArrayOf(71, 101, 116, 68, 97, 116, 97))) { @@ -245,7 +253,6 @@ } } else { if (bytes.size != 13) { - Log.d(kTag, "数据异常 => ${bytes.contentToString()}") return } @@ -274,6 +281,7 @@ } "BB" -> { + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return when ((bytes[9].toInt() and 0xFF).toString(16).uppercase()) { "90" -> { //语音源模式 @@ -286,11 +294,10 @@ "91" -> { //激光状态 - if (bytes[10].toInt() == 1) { - SaveKeyValues.putValue(LocaleConstant.OPEN_METHANE_KEY, true) - } else { - SaveKeyValues.putValue(LocaleConstant.OPEN_METHANE_KEY, false) - } + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE + message.obj = bytes[10].toInt() + weakReferenceHandler.sendMessage(message) } "92" -> { diff --git a/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt b/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt index 496a7f3..bd7dd78 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/utils/CommandCreator.kt @@ -2,6 +2,13 @@ object CommandCreator { /** + * 查询激光状态 + * */ + fun queryMethaneState(): ByteArray { + return byteArrayOf(0xAA.toByte(), 0x01, 0x01, 0x91.toByte(), 0x00, 0x00, 0x93.toByte()) + } + + /** * 打开激光指令 */ fun openLaser(): ByteArray { diff --git a/app/src/main/java/com/casic/app/safetreecontroller/utils/LocaleConstant.kt b/app/src/main/java/com/casic/app/safetreecontroller/utils/LocaleConstant.kt index e22082b..96ff5ec 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/utils/LocaleConstant.kt @@ -14,41 +14,42 @@ /** * Handler Request Code * */ - const val OPEN_METHANE_CODE = 20240001 - const val CLOSE_METHANE_CODE = 20240002 - const val UPDATE_GAS_THRESHOLD_CODE = 20240003 - const val QUERY_CPU_TEMPERATURE_CODE = 20240004 - const val INCREASE_VOICE_CODE = 20240005 - const val REDUCE_VOICE_CODE = 20240006 - const val OPEN_LOCALE_MODE_CODE = 20240007 - const val OPEN_REMOTE_MODE_CODE = 20240008 - const val OPEN_METHANE_ALARM_CODE = 20240009 - const val CLOSE_METHANE_ALARM_CODE = 20240010 - const val OPEN_DEVICE_STATE_TIPS_CODE = 20240011 - const val CLOSE_DEVICE_STATE_TIPS_CODE = 20240012 - const val QUERY_BOARD_CONFIG_CODE = 20240013 - const val QUERY_IS_USE_AI_CODE = 20240014 - const val QUERY_SERVER_CONFIG_CODE = 20240015 - const val SET_BOARD_WIFI_CONFIG_CODE = 20240016 - const val SET_BOARD_SERVER_CONFIG_CODE = 20240017 + const val QUERY_METHANE_STATE_CODE = 20240001 + const val OPEN_METHANE_CODE = 20240002 + const val CLOSE_METHANE_CODE = 20240003 + const val UPDATE_GAS_THRESHOLD_CODE = 20240004 + const val QUERY_CPU_TEMPERATURE_CODE = 20240005 + const val INCREASE_VOICE_CODE = 20240006 + const val REDUCE_VOICE_CODE = 20240007 + const val OPEN_LOCALE_MODE_CODE = 20240008 + const val OPEN_REMOTE_MODE_CODE = 20240009 + const val OPEN_METHANE_ALARM_CODE = 20240010 + const val CLOSE_METHANE_ALARM_CODE = 20240011 + const val OPEN_DEVICE_STATE_TIPS_CODE = 20240012 + const val CLOSE_DEVICE_STATE_TIPS_CODE = 20240013 + const val QUERY_BOARD_CONFIG_CODE = 20240014 + const val QUERY_IS_USE_AI_CODE = 20240015 + const val QUERY_SERVER_CONFIG_CODE = 20240016 + const val SET_BOARD_WIFI_CONFIG_CODE = 20240017 + const val SET_BOARD_SERVER_CONFIG_CODE = 20240018 /** * Handler Response Code * */ - const val QUERY_CPU_TEMPERATURE_RESPONSE_CODE = 20241001 - const val QUERY_METHANE_RESPONSE_CODE = 20241002 - const val DEVICE_RESPONSE_CODE = 20241003 - const val BOARD_CONFIG_RESPONSE_CODE = 20241004 - const val QUERY_IS_USE_AI_RESPONSE_CODE = 20241005 - const val SERVER_CONFIG_RESPONSE_CODE = 20241006 - const val SET_BOARD_WIFI_CONFIG_RESPONSE_CODE = 20241007 - const val SET_BOARD_SERVER_CONFIG_RESPONSE_CODE = 20241008 + const val QUERY_METHANE_STATE_RESPONSE_CODE = 20241001 + const val QUERY_CPU_TEMPERATURE_RESPONSE_CODE = 20241002 + const val QUERY_METHANE_RESPONSE_CODE = 20241003 + const val DEVICE_RESPONSE_CODE = 20241004 + const val BOARD_CONFIG_RESPONSE_CODE = 20241005 + const val QUERY_IS_USE_AI_RESPONSE_CODE = 20241006 + const val SERVER_CONFIG_RESPONSE_CODE = 20241007 + const val SET_BOARD_WIFI_CONFIG_RESPONSE_CODE = 20241008 + const val SET_BOARD_SERVER_CONFIG_RESPONSE_CODE = 20241009 /*** * SP Key * */ const val DEVICE_CONTROL_SERVER_CONFIG_KEY = "Key_1" - const val OPEN_METHANE_KEY = "Key_2" const val LOCALE_MODE_KEY = "Key_4" const val OPEN_ALARM_KEY = "Key_5" const val OPEN_VOICE_KEY = "Key_6" diff --git a/app/src/main/res/layout/fragment_methane_monitor.xml b/app/src/main/res/layout/fragment_methane_monitor.xml index 376f43c..fd6d578 100644 --- a/app/src/main/res/layout/fragment_methane_monitor.xml +++ b/app/src/main/res/layout/fragment_methane_monitor.xml @@ -22,7 +22,6 @@ android:textSize="@dimen/sp_16" />