diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt index a470954..4324165 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt @@ -1,6 +1,8 @@ package com.casic.app.safetreecontroller.fragments import android.os.Bundle +import android.os.Handler +import android.os.Message import android.view.LayoutInflater import android.view.ViewGroup import androidx.lifecycle.lifecycleScope @@ -10,26 +12,32 @@ import com.casic.app.safetreecontroller.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch -class VoiceSettingsFragment : KotlinBaseFragment() { +class VoiceSettingsFragment : KotlinBaseFragment(), Handler.Callback { + + companion object { + var weakReferenceHandler: WeakReferenceHandler? = null + } private val kTag = "VoiceSettingsFragment" private val valueToChineseMap = mapOf( - 0.0f to "静音", - 1.0f to "一档", - 2.0f to "二档", - 3.0f to "三档", - 4.0f to "四档", - 5.0f to "五档" + 0 to "静音", + 1 to "一档", + 2 to "二档", + 3 to "三档", + 4 to "四档", + 5 to "五档", + 6 to "最大音量" ) private var isVisibleToUser = false - private var lastSliderValue = 0f + private var isGetVoiceValue = false override fun initOnCreate(savedInstanceState: Bundle?) { - + weakReferenceHandler = WeakReferenceHandler(this) } override fun initViewBinding( @@ -49,50 +57,23 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) this.isVisibleToUser = isVisibleToUser + if (isVisibleToUser) { + lifecycleScope.launch(Dispatchers.IO) { + while (!isGetVoiceValue) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_VOICE_VALUE_CODE) + delay(1200) + } + } + } } override fun initEvent() { - binding.volumeSlider.addOnChangeListener { _, value, _ -> - if (isVisibleToUser) { - val weakReferenceHandler = SocketConnectionService.weakReferenceHandler - ?: return@addOnChangeListener - //判断是增大还是减音量 - if (value > lastSliderValue) { - //还需要判断是一步一步的变大还是突然变大 - if (value - lastSliderValue == 1.0f) { - //一步一步的变大 - weakReferenceHandler.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) - } else { - //突然变大。计算需要一步步变大几次 - val changeTimes = (value - lastSliderValue).toInt() - lifecycleScope.launch(Dispatchers.IO) { - for (i in 0 until changeTimes) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) - delay(500) - } - } - } - } else { - //还需要判断是一步一步的变小还是突然变小 - if (lastSliderValue - value == 1.0f) { - //一步一步的变小 - weakReferenceHandler.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) - } else { - //突然变小。计算需要一步步变小几次 - val changeTimes = (lastSliderValue - value).toInt() - lifecycleScope.launch(Dispatchers.IO) { - for (i in 0 until changeTimes) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) - delay(500) - } - } - } - } - binding.volumeValueView.text = valueToChineseMap[value] - //更新值 - lastSliderValue = value - SaveKeyValues.putValue(LocaleConstant.CURRENT_VOICE_VALUE_KEY, value) - } + binding.reduceVolumeButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) + } + + binding.increaseVolumeButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) } binding.modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> @@ -132,15 +113,18 @@ } } + override fun handleMessage(msg: Message): Boolean { + when (msg.what) { + LocaleConstant.QUERY_VOICE_VALUE_RESPONSE_CODE -> { + isGetVoiceValue = true + binding.volumeValueView.text = valueToChineseMap[msg.obj as Int] + } + } + return true + } + override fun onResume() { super.onResume() - binding.volumeSlider.value = SaveKeyValues.getValue( - LocaleConstant.CURRENT_VOICE_VALUE_KEY, 5.0f - ) as Float - binding.volumeValueView.text = valueToChineseMap[binding.volumeSlider.value] - //记录Slider上一个值 - lastSliderValue = binding.volumeSlider.value - val isLocale = SaveKeyValues.getValue(LocaleConstant.LOCALE_MODE_KEY, true) as Boolean if (isLocale) { binding.localeRadioButton.isChecked = true diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt index a470954..4324165 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt @@ -1,6 +1,8 @@ package com.casic.app.safetreecontroller.fragments import android.os.Bundle +import android.os.Handler +import android.os.Message import android.view.LayoutInflater import android.view.ViewGroup import androidx.lifecycle.lifecycleScope @@ -10,26 +12,32 @@ import com.casic.app.safetreecontroller.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch -class VoiceSettingsFragment : KotlinBaseFragment() { +class VoiceSettingsFragment : KotlinBaseFragment(), Handler.Callback { + + companion object { + var weakReferenceHandler: WeakReferenceHandler? = null + } private val kTag = "VoiceSettingsFragment" private val valueToChineseMap = mapOf( - 0.0f to "静音", - 1.0f to "一档", - 2.0f to "二档", - 3.0f to "三档", - 4.0f to "四档", - 5.0f to "五档" + 0 to "静音", + 1 to "一档", + 2 to "二档", + 3 to "三档", + 4 to "四档", + 5 to "五档", + 6 to "最大音量" ) private var isVisibleToUser = false - private var lastSliderValue = 0f + private var isGetVoiceValue = false override fun initOnCreate(savedInstanceState: Bundle?) { - + weakReferenceHandler = WeakReferenceHandler(this) } override fun initViewBinding( @@ -49,50 +57,23 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) this.isVisibleToUser = isVisibleToUser + if (isVisibleToUser) { + lifecycleScope.launch(Dispatchers.IO) { + while (!isGetVoiceValue) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_VOICE_VALUE_CODE) + delay(1200) + } + } + } } override fun initEvent() { - binding.volumeSlider.addOnChangeListener { _, value, _ -> - if (isVisibleToUser) { - val weakReferenceHandler = SocketConnectionService.weakReferenceHandler - ?: return@addOnChangeListener - //判断是增大还是减音量 - if (value > lastSliderValue) { - //还需要判断是一步一步的变大还是突然变大 - if (value - lastSliderValue == 1.0f) { - //一步一步的变大 - weakReferenceHandler.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) - } else { - //突然变大。计算需要一步步变大几次 - val changeTimes = (value - lastSliderValue).toInt() - lifecycleScope.launch(Dispatchers.IO) { - for (i in 0 until changeTimes) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) - delay(500) - } - } - } - } else { - //还需要判断是一步一步的变小还是突然变小 - if (lastSliderValue - value == 1.0f) { - //一步一步的变小 - weakReferenceHandler.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) - } else { - //突然变小。计算需要一步步变小几次 - val changeTimes = (lastSliderValue - value).toInt() - lifecycleScope.launch(Dispatchers.IO) { - for (i in 0 until changeTimes) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) - delay(500) - } - } - } - } - binding.volumeValueView.text = valueToChineseMap[value] - //更新值 - lastSliderValue = value - SaveKeyValues.putValue(LocaleConstant.CURRENT_VOICE_VALUE_KEY, value) - } + binding.reduceVolumeButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) + } + + binding.increaseVolumeButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) } binding.modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> @@ -132,15 +113,18 @@ } } + override fun handleMessage(msg: Message): Boolean { + when (msg.what) { + LocaleConstant.QUERY_VOICE_VALUE_RESPONSE_CODE -> { + isGetVoiceValue = true + binding.volumeValueView.text = valueToChineseMap[msg.obj as Int] + } + } + return true + } + override fun onResume() { super.onResume() - binding.volumeSlider.value = SaveKeyValues.getValue( - LocaleConstant.CURRENT_VOICE_VALUE_KEY, 5.0f - ) as Float - binding.volumeValueView.text = valueToChineseMap[binding.volumeSlider.value] - //记录Slider上一个值 - lastSliderValue = binding.volumeSlider.value - val isLocale = SaveKeyValues.getValue(LocaleConstant.LOCALE_MODE_KEY, true) as Boolean if (isLocale) { binding.localeRadioButton.isChecked = true 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 9bd50c6..dce2f0f 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 @@ -12,6 +12,7 @@ import com.casic.app.safetreecontroller.extensions.toHex import com.casic.app.safetreecontroller.fragments.BaseSettingsFragment import com.casic.app.safetreecontroller.fragments.MethaneMonitorFragment +import com.casic.app.safetreecontroller.fragments.VoiceSettingsFragment import com.casic.app.safetreecontroller.utils.CommandCreator import com.casic.app.safetreecontroller.utils.LocaleConstant import com.pengxh.kt.lite.utils.SaveKeyValues @@ -52,6 +53,10 @@ tcpClient.sendMessage(CommandCreator.queryCpuTemperature()) } + LocaleConstant.QUERY_VOICE_VALUE_CODE -> { + tcpClient.sendMessage(CommandCreator.queryVoiceValue()) + } + LocaleConstant.INCREASE_VOICE_CODE -> { tcpClient.sendMessage(CommandCreator.increaseVoice()) } @@ -161,9 +166,11 @@ * * 激光温度返回:[7, 32, 0, 1, 0, 1, -52, 1, 0, -106, 1, 96, -8] * - * 音量加返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 1, 0, -102] + * 音量查询返回:[7, 32, 0, 1, 0, 1, -69, 1, 1, -104, 5, 0, -97] * - * 音量减返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 0, 0, -103] + * 音量增加返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 1, 0, -102] + * + * 音量减小返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 0, 0, -103] * * 语音源切换到本地返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -112, 1, 0, -110] * @@ -197,7 +204,7 @@ if (bytes == null) { return } - Log.d(kTag, bytes.contentToString()) +// Log.d(kTag, bytes.contentToString()) //根据帧头判断。不能直接转为ascii,因为有的协议返回的不是ascii,会报错 val dataHeadArray = bytes.copyOfRange(0, 7) @@ -272,8 +279,7 @@ //甲烷浓度 val dataArray = bytes.copyOfRange(7, bytes.size) val concentration = dataArray.handleGasConcentration() - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler - ?: return + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_METHANE_RESPONSE_CODE message.obj = concentration @@ -281,7 +287,6 @@ } "BB" -> { - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return when ((bytes[9].toInt() and 0xFF).toString(16).uppercase()) { "90" -> { //语音源模式 @@ -294,6 +299,8 @@ "91" -> { //激光状态 + val weakReferenceHandler = + MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE message.obj = bytes[10].toInt() @@ -320,10 +327,17 @@ "98" -> { //音量调节 - if (bytes[10].toInt() == 1) { - Log.d(kTag, "onMessageReceived: 增大音量") + if (bytes[8].toInt() == 1) { + val weakReferenceHandler = + VoiceSettingsFragment.weakReferenceHandler ?: return + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.QUERY_VOICE_VALUE_RESPONSE_CODE + message.obj = bytes[10].toInt() + weakReferenceHandler.sendMessage(message) } else { - Log.d(kTag, "onMessageReceived: 减小音量") + //TODO 音量调整之后自动查询一次音量大小 + Thread.sleep(500) + tcpClient.sendMessage(CommandCreator.queryVoiceValue()) } } } @@ -332,8 +346,7 @@ "CC" -> { //激光温度 val dataArray = bytes.copyOfRange(10, bytes.size) - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler - ?: return + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_CPU_TEMPERATURE_RESPONSE_CODE message.obj = dataArray.handleCpuTemperature() diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt index a470954..4324165 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt @@ -1,6 +1,8 @@ package com.casic.app.safetreecontroller.fragments import android.os.Bundle +import android.os.Handler +import android.os.Message import android.view.LayoutInflater import android.view.ViewGroup import androidx.lifecycle.lifecycleScope @@ -10,26 +12,32 @@ import com.casic.app.safetreecontroller.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch -class VoiceSettingsFragment : KotlinBaseFragment() { +class VoiceSettingsFragment : KotlinBaseFragment(), Handler.Callback { + + companion object { + var weakReferenceHandler: WeakReferenceHandler? = null + } private val kTag = "VoiceSettingsFragment" private val valueToChineseMap = mapOf( - 0.0f to "静音", - 1.0f to "一档", - 2.0f to "二档", - 3.0f to "三档", - 4.0f to "四档", - 5.0f to "五档" + 0 to "静音", + 1 to "一档", + 2 to "二档", + 3 to "三档", + 4 to "四档", + 5 to "五档", + 6 to "最大音量" ) private var isVisibleToUser = false - private var lastSliderValue = 0f + private var isGetVoiceValue = false override fun initOnCreate(savedInstanceState: Bundle?) { - + weakReferenceHandler = WeakReferenceHandler(this) } override fun initViewBinding( @@ -49,50 +57,23 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) this.isVisibleToUser = isVisibleToUser + if (isVisibleToUser) { + lifecycleScope.launch(Dispatchers.IO) { + while (!isGetVoiceValue) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_VOICE_VALUE_CODE) + delay(1200) + } + } + } } override fun initEvent() { - binding.volumeSlider.addOnChangeListener { _, value, _ -> - if (isVisibleToUser) { - val weakReferenceHandler = SocketConnectionService.weakReferenceHandler - ?: return@addOnChangeListener - //判断是增大还是减音量 - if (value > lastSliderValue) { - //还需要判断是一步一步的变大还是突然变大 - if (value - lastSliderValue == 1.0f) { - //一步一步的变大 - weakReferenceHandler.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) - } else { - //突然变大。计算需要一步步变大几次 - val changeTimes = (value - lastSliderValue).toInt() - lifecycleScope.launch(Dispatchers.IO) { - for (i in 0 until changeTimes) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) - delay(500) - } - } - } - } else { - //还需要判断是一步一步的变小还是突然变小 - if (lastSliderValue - value == 1.0f) { - //一步一步的变小 - weakReferenceHandler.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) - } else { - //突然变小。计算需要一步步变小几次 - val changeTimes = (lastSliderValue - value).toInt() - lifecycleScope.launch(Dispatchers.IO) { - for (i in 0 until changeTimes) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) - delay(500) - } - } - } - } - binding.volumeValueView.text = valueToChineseMap[value] - //更新值 - lastSliderValue = value - SaveKeyValues.putValue(LocaleConstant.CURRENT_VOICE_VALUE_KEY, value) - } + binding.reduceVolumeButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) + } + + binding.increaseVolumeButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) } binding.modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> @@ -132,15 +113,18 @@ } } + override fun handleMessage(msg: Message): Boolean { + when (msg.what) { + LocaleConstant.QUERY_VOICE_VALUE_RESPONSE_CODE -> { + isGetVoiceValue = true + binding.volumeValueView.text = valueToChineseMap[msg.obj as Int] + } + } + return true + } + override fun onResume() { super.onResume() - binding.volumeSlider.value = SaveKeyValues.getValue( - LocaleConstant.CURRENT_VOICE_VALUE_KEY, 5.0f - ) as Float - binding.volumeValueView.text = valueToChineseMap[binding.volumeSlider.value] - //记录Slider上一个值 - lastSliderValue = binding.volumeSlider.value - val isLocale = SaveKeyValues.getValue(LocaleConstant.LOCALE_MODE_KEY, true) as Boolean if (isLocale) { binding.localeRadioButton.isChecked = true 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 9bd50c6..dce2f0f 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 @@ -12,6 +12,7 @@ import com.casic.app.safetreecontroller.extensions.toHex import com.casic.app.safetreecontroller.fragments.BaseSettingsFragment import com.casic.app.safetreecontroller.fragments.MethaneMonitorFragment +import com.casic.app.safetreecontroller.fragments.VoiceSettingsFragment import com.casic.app.safetreecontroller.utils.CommandCreator import com.casic.app.safetreecontroller.utils.LocaleConstant import com.pengxh.kt.lite.utils.SaveKeyValues @@ -52,6 +53,10 @@ tcpClient.sendMessage(CommandCreator.queryCpuTemperature()) } + LocaleConstant.QUERY_VOICE_VALUE_CODE -> { + tcpClient.sendMessage(CommandCreator.queryVoiceValue()) + } + LocaleConstant.INCREASE_VOICE_CODE -> { tcpClient.sendMessage(CommandCreator.increaseVoice()) } @@ -161,9 +166,11 @@ * * 激光温度返回:[7, 32, 0, 1, 0, 1, -52, 1, 0, -106, 1, 96, -8] * - * 音量加返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 1, 0, -102] + * 音量查询返回:[7, 32, 0, 1, 0, 1, -69, 1, 1, -104, 5, 0, -97] * - * 音量减返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 0, 0, -103] + * 音量增加返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 1, 0, -102] + * + * 音量减小返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 0, 0, -103] * * 语音源切换到本地返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -112, 1, 0, -110] * @@ -197,7 +204,7 @@ if (bytes == null) { return } - Log.d(kTag, bytes.contentToString()) +// Log.d(kTag, bytes.contentToString()) //根据帧头判断。不能直接转为ascii,因为有的协议返回的不是ascii,会报错 val dataHeadArray = bytes.copyOfRange(0, 7) @@ -272,8 +279,7 @@ //甲烷浓度 val dataArray = bytes.copyOfRange(7, bytes.size) val concentration = dataArray.handleGasConcentration() - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler - ?: return + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_METHANE_RESPONSE_CODE message.obj = concentration @@ -281,7 +287,6 @@ } "BB" -> { - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return when ((bytes[9].toInt() and 0xFF).toString(16).uppercase()) { "90" -> { //语音源模式 @@ -294,6 +299,8 @@ "91" -> { //激光状态 + val weakReferenceHandler = + MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE message.obj = bytes[10].toInt() @@ -320,10 +327,17 @@ "98" -> { //音量调节 - if (bytes[10].toInt() == 1) { - Log.d(kTag, "onMessageReceived: 增大音量") + if (bytes[8].toInt() == 1) { + val weakReferenceHandler = + VoiceSettingsFragment.weakReferenceHandler ?: return + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.QUERY_VOICE_VALUE_RESPONSE_CODE + message.obj = bytes[10].toInt() + weakReferenceHandler.sendMessage(message) } else { - Log.d(kTag, "onMessageReceived: 减小音量") + //TODO 音量调整之后自动查询一次音量大小 + Thread.sleep(500) + tcpClient.sendMessage(CommandCreator.queryVoiceValue()) } } } @@ -332,8 +346,7 @@ "CC" -> { //激光温度 val dataArray = bytes.copyOfRange(10, bytes.size) - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler - ?: return + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_CPU_TEMPERATURE_RESPONSE_CODE message.obj = dataArray.handleCpuTemperature() 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 bd7dd78..828883b 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 @@ -109,6 +109,13 @@ } /** + * 查询音量值 + * */ + fun queryVoiceValue(): ByteArray { + return byteArrayOf(0xAA.toByte(), 0x01, 0x01, 0x98.toByte(), 0x00, 0x00, 0x9A.toByte()) + } + + /** * 音量增大指令 * */ fun increaseVoice(): ByteArray { diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt index a470954..4324165 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt @@ -1,6 +1,8 @@ package com.casic.app.safetreecontroller.fragments import android.os.Bundle +import android.os.Handler +import android.os.Message import android.view.LayoutInflater import android.view.ViewGroup import androidx.lifecycle.lifecycleScope @@ -10,26 +12,32 @@ import com.casic.app.safetreecontroller.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch -class VoiceSettingsFragment : KotlinBaseFragment() { +class VoiceSettingsFragment : KotlinBaseFragment(), Handler.Callback { + + companion object { + var weakReferenceHandler: WeakReferenceHandler? = null + } private val kTag = "VoiceSettingsFragment" private val valueToChineseMap = mapOf( - 0.0f to "静音", - 1.0f to "一档", - 2.0f to "二档", - 3.0f to "三档", - 4.0f to "四档", - 5.0f to "五档" + 0 to "静音", + 1 to "一档", + 2 to "二档", + 3 to "三档", + 4 to "四档", + 5 to "五档", + 6 to "最大音量" ) private var isVisibleToUser = false - private var lastSliderValue = 0f + private var isGetVoiceValue = false override fun initOnCreate(savedInstanceState: Bundle?) { - + weakReferenceHandler = WeakReferenceHandler(this) } override fun initViewBinding( @@ -49,50 +57,23 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) this.isVisibleToUser = isVisibleToUser + if (isVisibleToUser) { + lifecycleScope.launch(Dispatchers.IO) { + while (!isGetVoiceValue) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_VOICE_VALUE_CODE) + delay(1200) + } + } + } } override fun initEvent() { - binding.volumeSlider.addOnChangeListener { _, value, _ -> - if (isVisibleToUser) { - val weakReferenceHandler = SocketConnectionService.weakReferenceHandler - ?: return@addOnChangeListener - //判断是增大还是减音量 - if (value > lastSliderValue) { - //还需要判断是一步一步的变大还是突然变大 - if (value - lastSliderValue == 1.0f) { - //一步一步的变大 - weakReferenceHandler.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) - } else { - //突然变大。计算需要一步步变大几次 - val changeTimes = (value - lastSliderValue).toInt() - lifecycleScope.launch(Dispatchers.IO) { - for (i in 0 until changeTimes) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) - delay(500) - } - } - } - } else { - //还需要判断是一步一步的变小还是突然变小 - if (lastSliderValue - value == 1.0f) { - //一步一步的变小 - weakReferenceHandler.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) - } else { - //突然变小。计算需要一步步变小几次 - val changeTimes = (lastSliderValue - value).toInt() - lifecycleScope.launch(Dispatchers.IO) { - for (i in 0 until changeTimes) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) - delay(500) - } - } - } - } - binding.volumeValueView.text = valueToChineseMap[value] - //更新值 - lastSliderValue = value - SaveKeyValues.putValue(LocaleConstant.CURRENT_VOICE_VALUE_KEY, value) - } + binding.reduceVolumeButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) + } + + binding.increaseVolumeButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) } binding.modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> @@ -132,15 +113,18 @@ } } + override fun handleMessage(msg: Message): Boolean { + when (msg.what) { + LocaleConstant.QUERY_VOICE_VALUE_RESPONSE_CODE -> { + isGetVoiceValue = true + binding.volumeValueView.text = valueToChineseMap[msg.obj as Int] + } + } + return true + } + override fun onResume() { super.onResume() - binding.volumeSlider.value = SaveKeyValues.getValue( - LocaleConstant.CURRENT_VOICE_VALUE_KEY, 5.0f - ) as Float - binding.volumeValueView.text = valueToChineseMap[binding.volumeSlider.value] - //记录Slider上一个值 - lastSliderValue = binding.volumeSlider.value - val isLocale = SaveKeyValues.getValue(LocaleConstant.LOCALE_MODE_KEY, true) as Boolean if (isLocale) { binding.localeRadioButton.isChecked = true 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 9bd50c6..dce2f0f 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 @@ -12,6 +12,7 @@ import com.casic.app.safetreecontroller.extensions.toHex import com.casic.app.safetreecontroller.fragments.BaseSettingsFragment import com.casic.app.safetreecontroller.fragments.MethaneMonitorFragment +import com.casic.app.safetreecontroller.fragments.VoiceSettingsFragment import com.casic.app.safetreecontroller.utils.CommandCreator import com.casic.app.safetreecontroller.utils.LocaleConstant import com.pengxh.kt.lite.utils.SaveKeyValues @@ -52,6 +53,10 @@ tcpClient.sendMessage(CommandCreator.queryCpuTemperature()) } + LocaleConstant.QUERY_VOICE_VALUE_CODE -> { + tcpClient.sendMessage(CommandCreator.queryVoiceValue()) + } + LocaleConstant.INCREASE_VOICE_CODE -> { tcpClient.sendMessage(CommandCreator.increaseVoice()) } @@ -161,9 +166,11 @@ * * 激光温度返回:[7, 32, 0, 1, 0, 1, -52, 1, 0, -106, 1, 96, -8] * - * 音量加返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 1, 0, -102] + * 音量查询返回:[7, 32, 0, 1, 0, 1, -69, 1, 1, -104, 5, 0, -97] * - * 音量减返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 0, 0, -103] + * 音量增加返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 1, 0, -102] + * + * 音量减小返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 0, 0, -103] * * 语音源切换到本地返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -112, 1, 0, -110] * @@ -197,7 +204,7 @@ if (bytes == null) { return } - Log.d(kTag, bytes.contentToString()) +// Log.d(kTag, bytes.contentToString()) //根据帧头判断。不能直接转为ascii,因为有的协议返回的不是ascii,会报错 val dataHeadArray = bytes.copyOfRange(0, 7) @@ -272,8 +279,7 @@ //甲烷浓度 val dataArray = bytes.copyOfRange(7, bytes.size) val concentration = dataArray.handleGasConcentration() - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler - ?: return + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_METHANE_RESPONSE_CODE message.obj = concentration @@ -281,7 +287,6 @@ } "BB" -> { - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return when ((bytes[9].toInt() and 0xFF).toString(16).uppercase()) { "90" -> { //语音源模式 @@ -294,6 +299,8 @@ "91" -> { //激光状态 + val weakReferenceHandler = + MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE message.obj = bytes[10].toInt() @@ -320,10 +327,17 @@ "98" -> { //音量调节 - if (bytes[10].toInt() == 1) { - Log.d(kTag, "onMessageReceived: 增大音量") + if (bytes[8].toInt() == 1) { + val weakReferenceHandler = + VoiceSettingsFragment.weakReferenceHandler ?: return + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.QUERY_VOICE_VALUE_RESPONSE_CODE + message.obj = bytes[10].toInt() + weakReferenceHandler.sendMessage(message) } else { - Log.d(kTag, "onMessageReceived: 减小音量") + //TODO 音量调整之后自动查询一次音量大小 + Thread.sleep(500) + tcpClient.sendMessage(CommandCreator.queryVoiceValue()) } } } @@ -332,8 +346,7 @@ "CC" -> { //激光温度 val dataArray = bytes.copyOfRange(10, bytes.size) - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler - ?: return + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_CPU_TEMPERATURE_RESPONSE_CODE message.obj = dataArray.handleCpuTemperature() 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 bd7dd78..828883b 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 @@ -109,6 +109,13 @@ } /** + * 查询音量值 + * */ + fun queryVoiceValue(): ByteArray { + return byteArrayOf(0xAA.toByte(), 0x01, 0x01, 0x98.toByte(), 0x00, 0x00, 0x9A.toByte()) + } + + /** * 音量增大指令 * */ fun increaseVoice(): 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 96ff5ec..94d9a8d 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 @@ -19,19 +19,20 @@ 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 + const val QUERY_VOICE_VALUE_CODE = 20240006 + const val INCREASE_VOICE_CODE = 20240007 + const val REDUCE_VOICE_CODE = 20240008 + const val OPEN_LOCALE_MODE_CODE = 20240009 + const val OPEN_REMOTE_MODE_CODE = 20240010 + const val OPEN_METHANE_ALARM_CODE = 20240011 + const val CLOSE_METHANE_ALARM_CODE = 20240012 + const val OPEN_DEVICE_STATE_TIPS_CODE = 20240013 + const val CLOSE_DEVICE_STATE_TIPS_CODE = 20240014 + const val QUERY_BOARD_CONFIG_CODE = 20240015 + const val QUERY_IS_USE_AI_CODE = 20240016 + const val QUERY_SERVER_CONFIG_CODE = 20240017 + const val SET_BOARD_WIFI_CONFIG_CODE = 20240018 + const val SET_BOARD_SERVER_CONFIG_CODE = 20240019 /** * Handler Response Code @@ -39,12 +40,13 @@ 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 + const val QUERY_VOICE_VALUE_RESPONSE_CODE = 20241004 + const val DEVICE_RESPONSE_CODE = 20241005 + const val BOARD_CONFIG_RESPONSE_CODE = 20241006 + const val QUERY_IS_USE_AI_RESPONSE_CODE = 20241007 + const val SERVER_CONFIG_RESPONSE_CODE = 20241008 + const val SET_BOARD_WIFI_CONFIG_RESPONSE_CODE = 20241009 + const val SET_BOARD_SERVER_CONFIG_RESPONSE_CODE = 20241010 /*** * SP Key diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt index a470954..4324165 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/VoiceSettingsFragment.kt @@ -1,6 +1,8 @@ package com.casic.app.safetreecontroller.fragments import android.os.Bundle +import android.os.Handler +import android.os.Message import android.view.LayoutInflater import android.view.ViewGroup import androidx.lifecycle.lifecycleScope @@ -10,26 +12,32 @@ import com.casic.app.safetreecontroller.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.utils.SaveKeyValues +import com.pengxh.kt.lite.utils.WeakReferenceHandler import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch -class VoiceSettingsFragment : KotlinBaseFragment() { +class VoiceSettingsFragment : KotlinBaseFragment(), Handler.Callback { + + companion object { + var weakReferenceHandler: WeakReferenceHandler? = null + } private val kTag = "VoiceSettingsFragment" private val valueToChineseMap = mapOf( - 0.0f to "静音", - 1.0f to "一档", - 2.0f to "二档", - 3.0f to "三档", - 4.0f to "四档", - 5.0f to "五档" + 0 to "静音", + 1 to "一档", + 2 to "二档", + 3 to "三档", + 4 to "四档", + 5 to "五档", + 6 to "最大音量" ) private var isVisibleToUser = false - private var lastSliderValue = 0f + private var isGetVoiceValue = false override fun initOnCreate(savedInstanceState: Bundle?) { - + weakReferenceHandler = WeakReferenceHandler(this) } override fun initViewBinding( @@ -49,50 +57,23 @@ override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) this.isVisibleToUser = isVisibleToUser + if (isVisibleToUser) { + lifecycleScope.launch(Dispatchers.IO) { + while (!isGetVoiceValue) { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.QUERY_VOICE_VALUE_CODE) + delay(1200) + } + } + } } override fun initEvent() { - binding.volumeSlider.addOnChangeListener { _, value, _ -> - if (isVisibleToUser) { - val weakReferenceHandler = SocketConnectionService.weakReferenceHandler - ?: return@addOnChangeListener - //判断是增大还是减音量 - if (value > lastSliderValue) { - //还需要判断是一步一步的变大还是突然变大 - if (value - lastSliderValue == 1.0f) { - //一步一步的变大 - weakReferenceHandler.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) - } else { - //突然变大。计算需要一步步变大几次 - val changeTimes = (value - lastSliderValue).toInt() - lifecycleScope.launch(Dispatchers.IO) { - for (i in 0 until changeTimes) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) - delay(500) - } - } - } - } else { - //还需要判断是一步一步的变小还是突然变小 - if (lastSliderValue - value == 1.0f) { - //一步一步的变小 - weakReferenceHandler.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) - } else { - //突然变小。计算需要一步步变小几次 - val changeTimes = (lastSliderValue - value).toInt() - lifecycleScope.launch(Dispatchers.IO) { - for (i in 0 until changeTimes) { - weakReferenceHandler.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) - delay(500) - } - } - } - } - binding.volumeValueView.text = valueToChineseMap[value] - //更新值 - lastSliderValue = value - SaveKeyValues.putValue(LocaleConstant.CURRENT_VOICE_VALUE_KEY, value) - } + binding.reduceVolumeButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.REDUCE_VOICE_CODE) + } + + binding.increaseVolumeButton.setOnClickListener { + SocketConnectionService.weakReferenceHandler?.sendEmptyMessage(LocaleConstant.INCREASE_VOICE_CODE) } binding.modeRadioGroup.setOnCheckedChangeListener { _, checkedId -> @@ -132,15 +113,18 @@ } } + override fun handleMessage(msg: Message): Boolean { + when (msg.what) { + LocaleConstant.QUERY_VOICE_VALUE_RESPONSE_CODE -> { + isGetVoiceValue = true + binding.volumeValueView.text = valueToChineseMap[msg.obj as Int] + } + } + return true + } + override fun onResume() { super.onResume() - binding.volumeSlider.value = SaveKeyValues.getValue( - LocaleConstant.CURRENT_VOICE_VALUE_KEY, 5.0f - ) as Float - binding.volumeValueView.text = valueToChineseMap[binding.volumeSlider.value] - //记录Slider上一个值 - lastSliderValue = binding.volumeSlider.value - val isLocale = SaveKeyValues.getValue(LocaleConstant.LOCALE_MODE_KEY, true) as Boolean if (isLocale) { binding.localeRadioButton.isChecked = true 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 9bd50c6..dce2f0f 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 @@ -12,6 +12,7 @@ import com.casic.app.safetreecontroller.extensions.toHex import com.casic.app.safetreecontroller.fragments.BaseSettingsFragment import com.casic.app.safetreecontroller.fragments.MethaneMonitorFragment +import com.casic.app.safetreecontroller.fragments.VoiceSettingsFragment import com.casic.app.safetreecontroller.utils.CommandCreator import com.casic.app.safetreecontroller.utils.LocaleConstant import com.pengxh.kt.lite.utils.SaveKeyValues @@ -52,6 +53,10 @@ tcpClient.sendMessage(CommandCreator.queryCpuTemperature()) } + LocaleConstant.QUERY_VOICE_VALUE_CODE -> { + tcpClient.sendMessage(CommandCreator.queryVoiceValue()) + } + LocaleConstant.INCREASE_VOICE_CODE -> { tcpClient.sendMessage(CommandCreator.increaseVoice()) } @@ -161,9 +166,11 @@ * * 激光温度返回:[7, 32, 0, 1, 0, 1, -52, 1, 0, -106, 1, 96, -8] * - * 音量加返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 1, 0, -102] + * 音量查询返回:[7, 32, 0, 1, 0, 1, -69, 1, 1, -104, 5, 0, -97] * - * 音量减返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 0, 0, -103] + * 音量增加返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 1, 0, -102] + * + * 音量减小返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -104, 0, 0, -103] * * 语音源切换到本地返回:[7, 32, 0, 1, 0, 1, -69, 1, 0, -112, 1, 0, -110] * @@ -197,7 +204,7 @@ if (bytes == null) { return } - Log.d(kTag, bytes.contentToString()) +// Log.d(kTag, bytes.contentToString()) //根据帧头判断。不能直接转为ascii,因为有的协议返回的不是ascii,会报错 val dataHeadArray = bytes.copyOfRange(0, 7) @@ -272,8 +279,7 @@ //甲烷浓度 val dataArray = bytes.copyOfRange(7, bytes.size) val concentration = dataArray.handleGasConcentration() - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler - ?: return + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_METHANE_RESPONSE_CODE message.obj = concentration @@ -281,7 +287,6 @@ } "BB" -> { - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return when ((bytes[9].toInt() and 0xFF).toString(16).uppercase()) { "90" -> { //语音源模式 @@ -294,6 +299,8 @@ "91" -> { //激光状态 + val weakReferenceHandler = + MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_METHANE_STATE_RESPONSE_CODE message.obj = bytes[10].toInt() @@ -320,10 +327,17 @@ "98" -> { //音量调节 - if (bytes[10].toInt() == 1) { - Log.d(kTag, "onMessageReceived: 增大音量") + if (bytes[8].toInt() == 1) { + val weakReferenceHandler = + VoiceSettingsFragment.weakReferenceHandler ?: return + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.QUERY_VOICE_VALUE_RESPONSE_CODE + message.obj = bytes[10].toInt() + weakReferenceHandler.sendMessage(message) } else { - Log.d(kTag, "onMessageReceived: 减小音量") + //TODO 音量调整之后自动查询一次音量大小 + Thread.sleep(500) + tcpClient.sendMessage(CommandCreator.queryVoiceValue()) } } } @@ -332,8 +346,7 @@ "CC" -> { //激光温度 val dataArray = bytes.copyOfRange(10, bytes.size) - val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler - ?: return + val weakReferenceHandler = MethaneMonitorFragment.weakReferenceHandler ?: return val message = weakReferenceHandler.obtainMessage() message.what = LocaleConstant.QUERY_CPU_TEMPERATURE_RESPONSE_CODE message.obj = dataArray.handleCpuTemperature() 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 bd7dd78..828883b 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 @@ -109,6 +109,13 @@ } /** + * 查询音量值 + * */ + fun queryVoiceValue(): ByteArray { + return byteArrayOf(0xAA.toByte(), 0x01, 0x01, 0x98.toByte(), 0x00, 0x00, 0x9A.toByte()) + } + + /** * 音量增大指令 * */ fun increaseVoice(): 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 96ff5ec..94d9a8d 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 @@ -19,19 +19,20 @@ 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 + const val QUERY_VOICE_VALUE_CODE = 20240006 + const val INCREASE_VOICE_CODE = 20240007 + const val REDUCE_VOICE_CODE = 20240008 + const val OPEN_LOCALE_MODE_CODE = 20240009 + const val OPEN_REMOTE_MODE_CODE = 20240010 + const val OPEN_METHANE_ALARM_CODE = 20240011 + const val CLOSE_METHANE_ALARM_CODE = 20240012 + const val OPEN_DEVICE_STATE_TIPS_CODE = 20240013 + const val CLOSE_DEVICE_STATE_TIPS_CODE = 20240014 + const val QUERY_BOARD_CONFIG_CODE = 20240015 + const val QUERY_IS_USE_AI_CODE = 20240016 + const val QUERY_SERVER_CONFIG_CODE = 20240017 + const val SET_BOARD_WIFI_CONFIG_CODE = 20240018 + const val SET_BOARD_SERVER_CONFIG_CODE = 20240019 /** * Handler Response Code @@ -39,12 +40,13 @@ 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 + const val QUERY_VOICE_VALUE_RESPONSE_CODE = 20241004 + const val DEVICE_RESPONSE_CODE = 20241005 + const val BOARD_CONFIG_RESPONSE_CODE = 20241006 + const val QUERY_IS_USE_AI_RESPONSE_CODE = 20241007 + const val SERVER_CONFIG_RESPONSE_CODE = 20241008 + const val SET_BOARD_WIFI_CONFIG_RESPONSE_CODE = 20241009 + const val SET_BOARD_SERVER_CONFIG_RESPONSE_CODE = 20241010 /*** * SP Key diff --git a/app/src/main/res/layout/fragment_voice_settings.xml b/app/src/main/res/layout/fragment_voice_settings.xml index cc0d086..8a58469 100644 --- a/app/src/main/res/layout/fragment_voice_settings.xml +++ b/app/src/main/res/layout/fragment_voice_settings.xml @@ -1,6 +1,5 @@ - + android:text="设备音量" + android:textColor="@color/black" + android:textSize="@dimen/sp_16" /> - - - - - - + android:background="@drawable/bg_solid_layout_blue_10"> - + - + + +