diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt index 2a9abe4..7403f5e 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt @@ -120,19 +120,31 @@ } override fun initEvent() { - //TODO binding.configurationButton.setOnClickListener { -// val weakReferenceHandler = SocketConnectionService.weakReferenceHandler -// ?: return@setOnClickListener -// lifecycleScope.launch(Dispatchers.IO) { -// -// } -// val message = weakReferenceHandler.obtainMessage() -// message.what = LocaleConstant.SET_BOARD_WIFI_CONFIG_CODE -// message.obj = CommandCreator.createWiFiConfigCommand( -// binding.wifiNameView.text.toString(), binding.passwordView.text.toString() -// ) -// weakReferenceHandler.sendMessage(message) + val weakReferenceHandler = SocketConnectionService.weakReferenceHandler + ?: return@setOnClickListener + lifecycleScope.launch(Dispatchers.IO) { + if (isUseWithAI) { + //需要设置远程服务器IP、端口号、WiFi + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.SET_BOARD_SERVER_CONFIG_CODE + message.obj = arrayOf( + binding.serverHostView.text.toString(), + binding.serverPortView.text.toString() + ) + weakReferenceHandler.sendMessage(message) + delay(1000) + } + + //不管什么模式,WiFi都可以设置 + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.SET_BOARD_WIFI_CONFIG_CODE + message.obj = arrayOf( + binding.wifiNameView.text.toString(), + binding.passwordView.text.toString() + ) + weakReferenceHandler.sendMessage(message) + } } } @@ -172,6 +184,14 @@ binding.serverHostView.setText(list[0]) binding.serverPortView.setText(list[1]) } + + LocaleConstant.SET_BOARD_WIFI_CONFIG_RESPONSE_CODE -> { + "安全树WiFi配置更新成功,请稍后".show(requireContext()) + } + + LocaleConstant.SET_BOARD_SERVER_CONFIG_RESPONSE_CODE -> { + "安全树数据服务配置更新成功".show(requireContext()) + } } return true } diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt index 2a9abe4..7403f5e 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt @@ -120,19 +120,31 @@ } override fun initEvent() { - //TODO binding.configurationButton.setOnClickListener { -// val weakReferenceHandler = SocketConnectionService.weakReferenceHandler -// ?: return@setOnClickListener -// lifecycleScope.launch(Dispatchers.IO) { -// -// } -// val message = weakReferenceHandler.obtainMessage() -// message.what = LocaleConstant.SET_BOARD_WIFI_CONFIG_CODE -// message.obj = CommandCreator.createWiFiConfigCommand( -// binding.wifiNameView.text.toString(), binding.passwordView.text.toString() -// ) -// weakReferenceHandler.sendMessage(message) + val weakReferenceHandler = SocketConnectionService.weakReferenceHandler + ?: return@setOnClickListener + lifecycleScope.launch(Dispatchers.IO) { + if (isUseWithAI) { + //需要设置远程服务器IP、端口号、WiFi + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.SET_BOARD_SERVER_CONFIG_CODE + message.obj = arrayOf( + binding.serverHostView.text.toString(), + binding.serverPortView.text.toString() + ) + weakReferenceHandler.sendMessage(message) + delay(1000) + } + + //不管什么模式,WiFi都可以设置 + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.SET_BOARD_WIFI_CONFIG_CODE + message.obj = arrayOf( + binding.wifiNameView.text.toString(), + binding.passwordView.text.toString() + ) + weakReferenceHandler.sendMessage(message) + } } } @@ -172,6 +184,14 @@ binding.serverHostView.setText(list[0]) binding.serverPortView.setText(list[1]) } + + LocaleConstant.SET_BOARD_WIFI_CONFIG_RESPONSE_CODE -> { + "安全树WiFi配置更新成功,请稍后".show(requireContext()) + } + + LocaleConstant.SET_BOARD_SERVER_CONFIG_RESPONSE_CODE -> { + "安全树数据服务配置更新成功".show(requireContext()) + } } return 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 75f26b2..5f5e3a8 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,70 +30,79 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.OPEN_METHANE_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenLightCommand()) + tcpClient.sendMessage(CommandCreator.openLaser()) } LocaleConstant.CLOSE_METHANE_CODE -> { - tcpClient.sendMessage(CommandCreator.createCloseLightCommand()) + tcpClient.sendMessage(CommandCreator.closeLaser()) } LocaleConstant.UPDATE_GAS_THRESHOLD_CODE -> { val threshold = msg.obj as Int - val thresholdCommand = CommandCreator.createThresholdCommand(threshold) + val thresholdCommand = CommandCreator.setThreshold(threshold) tcpClient.sendMessage(thresholdCommand) } LocaleConstant.QUERY_CPU_TEMPERATURE_CODE -> { - tcpClient.sendMessage(CommandCreator.createCpuTemperatureCommand()) + tcpClient.sendMessage(CommandCreator.queryCpuTemperature()) } LocaleConstant.INCREASE_VOICE_CODE -> { - tcpClient.sendMessage(CommandCreator.createIncreaseVoiceCommand()) + tcpClient.sendMessage(CommandCreator.increaseVoice()) } LocaleConstant.REDUCE_VOICE_CODE -> { - tcpClient.sendMessage(CommandCreator.createReduceVoiceCommand()) + tcpClient.sendMessage(CommandCreator.reduceVoice()) } LocaleConstant.OPEN_LOCALE_MODE_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenLocaleModeCommand()) + tcpClient.sendMessage(CommandCreator.openLocaleMode()) } LocaleConstant.OPEN_REMOTE_MODE_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenRemoteModeCommand()) + tcpClient.sendMessage(CommandCreator.openRemoteMode()) } LocaleConstant.OPEN_METHANE_ALARM_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenAlarmCommand()) + tcpClient.sendMessage(CommandCreator.openMethaneAlarm()) } LocaleConstant.CLOSE_METHANE_ALARM_CODE -> { - tcpClient.sendMessage(CommandCreator.createCloseAlarmCommand()) + tcpClient.sendMessage(CommandCreator.closeMethaneAlarm()) } LocaleConstant.OPEN_DEVICE_STATE_TIPS_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenVoiceTipsCommand()) + tcpClient.sendMessage(CommandCreator.openVoiceTips()) } LocaleConstant.CLOSE_DEVICE_STATE_TIPS_CODE -> { - tcpClient.sendMessage(CommandCreator.createCloseVoiceTipsCommand()) + tcpClient.sendMessage(CommandCreator.closeVoiceTips()) } LocaleConstant.QUERY_BOARD_CONFIG_CODE -> { - tcpClient.sendMessage(CommandCreator.createControlBoardConfigCommand()) + tcpClient.sendMessage(CommandCreator.queryControlBoardConfig()) } LocaleConstant.QUERY_IS_USE_AI_CODE -> { - tcpClient.sendMessage(CommandCreator.createIsUseAICommand()) + tcpClient.sendMessage(CommandCreator.queryIsUseAI()) } LocaleConstant.QUERY_SERVER_CONFIG_CODE -> { - tcpClient.sendMessage(CommandCreator.createServerConfigCommand()) + tcpClient.sendMessage(CommandCreator.queryServerConfig()) } LocaleConstant.SET_BOARD_WIFI_CONFIG_CODE -> { - val command = msg.obj as ByteArray - tcpClient.sendMessage(command) + val params = msg.obj as Array<*> + tcpClient.sendMessage( + CommandCreator.setWiFiConfig(params[0].toString(), params[1].toString()) + ) + } + + LocaleConstant.SET_BOARD_SERVER_CONFIG_CODE -> { + val params = msg.obj as Array<*> + tcpClient.sendMessage( + CommandCreator.setServerConfig(params[0].toString(), params[1].toString()) + ) } } return true @@ -104,7 +113,7 @@ * */ private val methaneRunnable = object : Runnable { override fun run() { - tcpClient.sendMessage(CommandCreator.createMethaneCommand()) + tcpClient.sendMessage(CommandCreator.queryMethane()) // 每3s重复一次 weakReferenceHandler?.postDelayed(this, 3 * 1000L) } @@ -114,7 +123,6 @@ super.onCreate() weakReferenceHandler = WeakReferenceHandler(this) tcpClient.start("192.168.10.51", 333) - Log.d(kTag, "onCreate: SocketConnectionService") } override fun onConnected() { @@ -165,6 +173,14 @@ * 安全树主控板要连接的远程服务器IP、端口号指令返回: * * [71, 101, 116, 68, 97, 116, 97, 58, 53, 44, 51, 49, 50, 56, 52, 54, 52, 106, 115, 108, 101, 55, 46, 118, 105, 99, 112, 46, 102, 117, 110, 44, 51, 55, 57, 53, 53, 13, 10] + * + * 设置WiFi返回: + * + * [83, 101, 116, 68, 97, 116, 97, 58, 50, 44, 111, 107, 13, 10] + * + * 设置服务器返回: + * + * [83, 101, 116, 68, 97, 116, 97, 58, 53, 44, 111, 107, 13, 10] * */ override fun onMessageReceived(bytes: ByteArray?) { if (bytes == null) { @@ -202,18 +218,29 @@ weakReferenceHandler.sendMessage(message) } } - } else if (dataHeadArray.contentEquals(byteArrayOf())) { - //SetData TODO - Log.d(kTag, bytes.toAsciiCode().trim()) + } else if (dataHeadArray.contentEquals(byteArrayOf(83, 101, 116, 68, 97, 116, 97))) { + //SetData + val dataArray = bytes.copyOfRange(10, bytes.size) + val data = dataArray.toAsciiCode().trim() - when (Char(bytes[10].toInt())) { + val weakReferenceHandler = BaseSettingsFragment.weakReferenceHandler ?: return + + when (Char(bytes[8].toInt())) { '2' -> { - Log.d(kTag, "onMessageReceived: ${bytes.toAsciiCode()}") + if (data == "ok") { + weakReferenceHandler.sendEmptyMessage(LocaleConstant.SET_BOARD_WIFI_CONFIG_RESPONSE_CODE) + } + } + + '5' -> { + if (data == "ok") { + weakReferenceHandler.sendEmptyMessage(LocaleConstant.SET_BOARD_SERVER_CONFIG_RESPONSE_CODE) + } } } } else { if (bytes.size != 13) { - Log.d(kTag, "onMessageReceived: 数据长度异常") + Log.d(kTag, "数据异常 => ${bytes.contentToString()}") return } @@ -282,9 +309,9 @@ "98" -> { //音量调节 if (bytes[10].toInt() == 1) { - Log.d(kTag, "onMessageReceived: 增大音量成功") + Log.d(kTag, "onMessageReceived: 增大音量") } else { - Log.d(kTag, "onMessageReceived: 减小音量成功") + Log.d(kTag, "onMessageReceived: 减小音量") } } } diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt index 2a9abe4..7403f5e 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt @@ -120,19 +120,31 @@ } override fun initEvent() { - //TODO binding.configurationButton.setOnClickListener { -// val weakReferenceHandler = SocketConnectionService.weakReferenceHandler -// ?: return@setOnClickListener -// lifecycleScope.launch(Dispatchers.IO) { -// -// } -// val message = weakReferenceHandler.obtainMessage() -// message.what = LocaleConstant.SET_BOARD_WIFI_CONFIG_CODE -// message.obj = CommandCreator.createWiFiConfigCommand( -// binding.wifiNameView.text.toString(), binding.passwordView.text.toString() -// ) -// weakReferenceHandler.sendMessage(message) + val weakReferenceHandler = SocketConnectionService.weakReferenceHandler + ?: return@setOnClickListener + lifecycleScope.launch(Dispatchers.IO) { + if (isUseWithAI) { + //需要设置远程服务器IP、端口号、WiFi + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.SET_BOARD_SERVER_CONFIG_CODE + message.obj = arrayOf( + binding.serverHostView.text.toString(), + binding.serverPortView.text.toString() + ) + weakReferenceHandler.sendMessage(message) + delay(1000) + } + + //不管什么模式,WiFi都可以设置 + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.SET_BOARD_WIFI_CONFIG_CODE + message.obj = arrayOf( + binding.wifiNameView.text.toString(), + binding.passwordView.text.toString() + ) + weakReferenceHandler.sendMessage(message) + } } } @@ -172,6 +184,14 @@ binding.serverHostView.setText(list[0]) binding.serverPortView.setText(list[1]) } + + LocaleConstant.SET_BOARD_WIFI_CONFIG_RESPONSE_CODE -> { + "安全树WiFi配置更新成功,请稍后".show(requireContext()) + } + + LocaleConstant.SET_BOARD_SERVER_CONFIG_RESPONSE_CODE -> { + "安全树数据服务配置更新成功".show(requireContext()) + } } return 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 75f26b2..5f5e3a8 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,70 +30,79 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.OPEN_METHANE_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenLightCommand()) + tcpClient.sendMessage(CommandCreator.openLaser()) } LocaleConstant.CLOSE_METHANE_CODE -> { - tcpClient.sendMessage(CommandCreator.createCloseLightCommand()) + tcpClient.sendMessage(CommandCreator.closeLaser()) } LocaleConstant.UPDATE_GAS_THRESHOLD_CODE -> { val threshold = msg.obj as Int - val thresholdCommand = CommandCreator.createThresholdCommand(threshold) + val thresholdCommand = CommandCreator.setThreshold(threshold) tcpClient.sendMessage(thresholdCommand) } LocaleConstant.QUERY_CPU_TEMPERATURE_CODE -> { - tcpClient.sendMessage(CommandCreator.createCpuTemperatureCommand()) + tcpClient.sendMessage(CommandCreator.queryCpuTemperature()) } LocaleConstant.INCREASE_VOICE_CODE -> { - tcpClient.sendMessage(CommandCreator.createIncreaseVoiceCommand()) + tcpClient.sendMessage(CommandCreator.increaseVoice()) } LocaleConstant.REDUCE_VOICE_CODE -> { - tcpClient.sendMessage(CommandCreator.createReduceVoiceCommand()) + tcpClient.sendMessage(CommandCreator.reduceVoice()) } LocaleConstant.OPEN_LOCALE_MODE_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenLocaleModeCommand()) + tcpClient.sendMessage(CommandCreator.openLocaleMode()) } LocaleConstant.OPEN_REMOTE_MODE_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenRemoteModeCommand()) + tcpClient.sendMessage(CommandCreator.openRemoteMode()) } LocaleConstant.OPEN_METHANE_ALARM_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenAlarmCommand()) + tcpClient.sendMessage(CommandCreator.openMethaneAlarm()) } LocaleConstant.CLOSE_METHANE_ALARM_CODE -> { - tcpClient.sendMessage(CommandCreator.createCloseAlarmCommand()) + tcpClient.sendMessage(CommandCreator.closeMethaneAlarm()) } LocaleConstant.OPEN_DEVICE_STATE_TIPS_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenVoiceTipsCommand()) + tcpClient.sendMessage(CommandCreator.openVoiceTips()) } LocaleConstant.CLOSE_DEVICE_STATE_TIPS_CODE -> { - tcpClient.sendMessage(CommandCreator.createCloseVoiceTipsCommand()) + tcpClient.sendMessage(CommandCreator.closeVoiceTips()) } LocaleConstant.QUERY_BOARD_CONFIG_CODE -> { - tcpClient.sendMessage(CommandCreator.createControlBoardConfigCommand()) + tcpClient.sendMessage(CommandCreator.queryControlBoardConfig()) } LocaleConstant.QUERY_IS_USE_AI_CODE -> { - tcpClient.sendMessage(CommandCreator.createIsUseAICommand()) + tcpClient.sendMessage(CommandCreator.queryIsUseAI()) } LocaleConstant.QUERY_SERVER_CONFIG_CODE -> { - tcpClient.sendMessage(CommandCreator.createServerConfigCommand()) + tcpClient.sendMessage(CommandCreator.queryServerConfig()) } LocaleConstant.SET_BOARD_WIFI_CONFIG_CODE -> { - val command = msg.obj as ByteArray - tcpClient.sendMessage(command) + val params = msg.obj as Array<*> + tcpClient.sendMessage( + CommandCreator.setWiFiConfig(params[0].toString(), params[1].toString()) + ) + } + + LocaleConstant.SET_BOARD_SERVER_CONFIG_CODE -> { + val params = msg.obj as Array<*> + tcpClient.sendMessage( + CommandCreator.setServerConfig(params[0].toString(), params[1].toString()) + ) } } return true @@ -104,7 +113,7 @@ * */ private val methaneRunnable = object : Runnable { override fun run() { - tcpClient.sendMessage(CommandCreator.createMethaneCommand()) + tcpClient.sendMessage(CommandCreator.queryMethane()) // 每3s重复一次 weakReferenceHandler?.postDelayed(this, 3 * 1000L) } @@ -114,7 +123,6 @@ super.onCreate() weakReferenceHandler = WeakReferenceHandler(this) tcpClient.start("192.168.10.51", 333) - Log.d(kTag, "onCreate: SocketConnectionService") } override fun onConnected() { @@ -165,6 +173,14 @@ * 安全树主控板要连接的远程服务器IP、端口号指令返回: * * [71, 101, 116, 68, 97, 116, 97, 58, 53, 44, 51, 49, 50, 56, 52, 54, 52, 106, 115, 108, 101, 55, 46, 118, 105, 99, 112, 46, 102, 117, 110, 44, 51, 55, 57, 53, 53, 13, 10] + * + * 设置WiFi返回: + * + * [83, 101, 116, 68, 97, 116, 97, 58, 50, 44, 111, 107, 13, 10] + * + * 设置服务器返回: + * + * [83, 101, 116, 68, 97, 116, 97, 58, 53, 44, 111, 107, 13, 10] * */ override fun onMessageReceived(bytes: ByteArray?) { if (bytes == null) { @@ -202,18 +218,29 @@ weakReferenceHandler.sendMessage(message) } } - } else if (dataHeadArray.contentEquals(byteArrayOf())) { - //SetData TODO - Log.d(kTag, bytes.toAsciiCode().trim()) + } else if (dataHeadArray.contentEquals(byteArrayOf(83, 101, 116, 68, 97, 116, 97))) { + //SetData + val dataArray = bytes.copyOfRange(10, bytes.size) + val data = dataArray.toAsciiCode().trim() - when (Char(bytes[10].toInt())) { + val weakReferenceHandler = BaseSettingsFragment.weakReferenceHandler ?: return + + when (Char(bytes[8].toInt())) { '2' -> { - Log.d(kTag, "onMessageReceived: ${bytes.toAsciiCode()}") + if (data == "ok") { + weakReferenceHandler.sendEmptyMessage(LocaleConstant.SET_BOARD_WIFI_CONFIG_RESPONSE_CODE) + } + } + + '5' -> { + if (data == "ok") { + weakReferenceHandler.sendEmptyMessage(LocaleConstant.SET_BOARD_SERVER_CONFIG_RESPONSE_CODE) + } } } } else { if (bytes.size != 13) { - Log.d(kTag, "onMessageReceived: 数据长度异常") + Log.d(kTag, "数据异常 => ${bytes.contentToString()}") return } @@ -282,9 +309,9 @@ "98" -> { //音量调节 if (bytes[10].toInt() == 1) { - Log.d(kTag, "onMessageReceived: 增大音量成功") + Log.d(kTag, "onMessageReceived: 增大音量") } else { - Log.d(kTag, "onMessageReceived: 减小音量成功") + Log.d(kTag, "onMessageReceived: 减小音量") } } } 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 fb39a38..496a7f3 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 @@ -4,28 +4,28 @@ /** * 打开激光指令 */ - fun createOpenLightCommand(): ByteArray { + fun openLaser(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte()) } /** * 关闭激光指令 */ - fun createCloseLightCommand(): ByteArray { + fun closeLaser(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x00, 0x00, 0x92.toByte()) } /** * 查询甲烷浓度指令 */ - fun createMethaneCommand(): ByteArray { + fun queryMethane(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x95.toByte(), 0x00, 0x00, 0x96.toByte()) } /** * 设置甲烷阈值指令 */ - fun createThresholdCommand(threshold: Int): ByteArray { + fun setThreshold(threshold: Int): ByteArray { //数据位和校验位先都设置0x00占位 val bytes = byteArrayOf( 0xAA.toByte(), @@ -62,91 +62,98 @@ /** * 查询甲烷芯片温度指令 * */ - fun createCpuTemperatureCommand(): ByteArray { + fun queryCpuTemperature(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x96.toByte(), 0x00, 0x00, 0x97.toByte()) } /** * 查询主控板主控板IP、子网掩码、网关IP指令 * */ - fun createControlBoardConfigCommand(): ByteArray { + fun queryControlBoardConfig(): ByteArray { return "GetData:1\r\n".toByteArray() } /** * 查询是否和一体机一起使用指令 * */ - fun createIsUseAICommand(): ByteArray { + fun queryIsUseAI(): ByteArray { return "GetData:4\r\n".toByteArray() } /** * 安全树主控板要连接的远程服务器IP、端口号指令 * */ - fun createServerConfigCommand(): ByteArray { + fun queryServerConfig(): ByteArray { return "GetData:5\r\n".toByteArray() } /** * 设置主控板WiFi指令 * */ - fun createWiFiConfigCommand(wifiName: String, password: String): ByteArray { + fun setWiFiConfig(wifiName: String, password: String): ByteArray { return "SetData:2,${wifiName},${password}\r\n".toByteArray() } /** + * 设置主控板服务地址指令 + * */ + fun setServerConfig(host: String, port: String): ByteArray { + return "SetData:5,${host},${port}\r\n".toByteArray() + } + + /** * 音量增大指令 * */ - fun createIncreaseVoiceCommand(): ByteArray { + fun increaseVoice(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x98.toByte(), 0x01, 0x00, 0x9A.toByte()) } /** * 音量减小指令 * */ - fun createReduceVoiceCommand(): ByteArray { + fun reduceVoice(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x98.toByte(), 0x00, 0x00, 0x99.toByte()) } /** * 切换本地音源指令 * */ - fun createOpenLocaleModeCommand(): ByteArray { + fun openLocaleMode(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x90.toByte(), 0x00, 0x00, 0x91.toByte()) } /** * 切换远程音源指令 * */ - fun createOpenRemoteModeCommand(): ByteArray { + fun openRemoteMode(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x90.toByte(), 0x01, 0x00, 0x92.toByte()) } /** * 打开燃气报警指令 */ - fun createOpenAlarmCommand(): ByteArray { + fun openMethaneAlarm(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x92.toByte(), 0x01, 0x00, 0x94.toByte()) } /** * 关闭燃气报警指令 */ - fun createCloseAlarmCommand(): ByteArray { + fun closeMethaneAlarm(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x92.toByte(), 0x00, 0x00, 0x93.toByte()) } /** * 打开设备语音提示指令 */ - fun createOpenVoiceTipsCommand(): ByteArray { + fun openVoiceTips(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x97.toByte(), 0x01, 0x00, 0x99.toByte()) } /** * 关闭设备语音提示指令 */ - fun createCloseVoiceTipsCommand(): ByteArray { + fun closeVoiceTips(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x97.toByte(), 0x00, 0x00, 0x98.toByte()) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt b/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt index 2a9abe4..7403f5e 100644 --- a/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt +++ b/app/src/main/java/com/casic/app/safetreecontroller/fragments/BaseSettingsFragment.kt @@ -120,19 +120,31 @@ } override fun initEvent() { - //TODO binding.configurationButton.setOnClickListener { -// val weakReferenceHandler = SocketConnectionService.weakReferenceHandler -// ?: return@setOnClickListener -// lifecycleScope.launch(Dispatchers.IO) { -// -// } -// val message = weakReferenceHandler.obtainMessage() -// message.what = LocaleConstant.SET_BOARD_WIFI_CONFIG_CODE -// message.obj = CommandCreator.createWiFiConfigCommand( -// binding.wifiNameView.text.toString(), binding.passwordView.text.toString() -// ) -// weakReferenceHandler.sendMessage(message) + val weakReferenceHandler = SocketConnectionService.weakReferenceHandler + ?: return@setOnClickListener + lifecycleScope.launch(Dispatchers.IO) { + if (isUseWithAI) { + //需要设置远程服务器IP、端口号、WiFi + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.SET_BOARD_SERVER_CONFIG_CODE + message.obj = arrayOf( + binding.serverHostView.text.toString(), + binding.serverPortView.text.toString() + ) + weakReferenceHandler.sendMessage(message) + delay(1000) + } + + //不管什么模式,WiFi都可以设置 + val message = weakReferenceHandler.obtainMessage() + message.what = LocaleConstant.SET_BOARD_WIFI_CONFIG_CODE + message.obj = arrayOf( + binding.wifiNameView.text.toString(), + binding.passwordView.text.toString() + ) + weakReferenceHandler.sendMessage(message) + } } } @@ -172,6 +184,14 @@ binding.serverHostView.setText(list[0]) binding.serverPortView.setText(list[1]) } + + LocaleConstant.SET_BOARD_WIFI_CONFIG_RESPONSE_CODE -> { + "安全树WiFi配置更新成功,请稍后".show(requireContext()) + } + + LocaleConstant.SET_BOARD_SERVER_CONFIG_RESPONSE_CODE -> { + "安全树数据服务配置更新成功".show(requireContext()) + } } return 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 75f26b2..5f5e3a8 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,70 +30,79 @@ override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.OPEN_METHANE_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenLightCommand()) + tcpClient.sendMessage(CommandCreator.openLaser()) } LocaleConstant.CLOSE_METHANE_CODE -> { - tcpClient.sendMessage(CommandCreator.createCloseLightCommand()) + tcpClient.sendMessage(CommandCreator.closeLaser()) } LocaleConstant.UPDATE_GAS_THRESHOLD_CODE -> { val threshold = msg.obj as Int - val thresholdCommand = CommandCreator.createThresholdCommand(threshold) + val thresholdCommand = CommandCreator.setThreshold(threshold) tcpClient.sendMessage(thresholdCommand) } LocaleConstant.QUERY_CPU_TEMPERATURE_CODE -> { - tcpClient.sendMessage(CommandCreator.createCpuTemperatureCommand()) + tcpClient.sendMessage(CommandCreator.queryCpuTemperature()) } LocaleConstant.INCREASE_VOICE_CODE -> { - tcpClient.sendMessage(CommandCreator.createIncreaseVoiceCommand()) + tcpClient.sendMessage(CommandCreator.increaseVoice()) } LocaleConstant.REDUCE_VOICE_CODE -> { - tcpClient.sendMessage(CommandCreator.createReduceVoiceCommand()) + tcpClient.sendMessage(CommandCreator.reduceVoice()) } LocaleConstant.OPEN_LOCALE_MODE_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenLocaleModeCommand()) + tcpClient.sendMessage(CommandCreator.openLocaleMode()) } LocaleConstant.OPEN_REMOTE_MODE_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenRemoteModeCommand()) + tcpClient.sendMessage(CommandCreator.openRemoteMode()) } LocaleConstant.OPEN_METHANE_ALARM_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenAlarmCommand()) + tcpClient.sendMessage(CommandCreator.openMethaneAlarm()) } LocaleConstant.CLOSE_METHANE_ALARM_CODE -> { - tcpClient.sendMessage(CommandCreator.createCloseAlarmCommand()) + tcpClient.sendMessage(CommandCreator.closeMethaneAlarm()) } LocaleConstant.OPEN_DEVICE_STATE_TIPS_CODE -> { - tcpClient.sendMessage(CommandCreator.createOpenVoiceTipsCommand()) + tcpClient.sendMessage(CommandCreator.openVoiceTips()) } LocaleConstant.CLOSE_DEVICE_STATE_TIPS_CODE -> { - tcpClient.sendMessage(CommandCreator.createCloseVoiceTipsCommand()) + tcpClient.sendMessage(CommandCreator.closeVoiceTips()) } LocaleConstant.QUERY_BOARD_CONFIG_CODE -> { - tcpClient.sendMessage(CommandCreator.createControlBoardConfigCommand()) + tcpClient.sendMessage(CommandCreator.queryControlBoardConfig()) } LocaleConstant.QUERY_IS_USE_AI_CODE -> { - tcpClient.sendMessage(CommandCreator.createIsUseAICommand()) + tcpClient.sendMessage(CommandCreator.queryIsUseAI()) } LocaleConstant.QUERY_SERVER_CONFIG_CODE -> { - tcpClient.sendMessage(CommandCreator.createServerConfigCommand()) + tcpClient.sendMessage(CommandCreator.queryServerConfig()) } LocaleConstant.SET_BOARD_WIFI_CONFIG_CODE -> { - val command = msg.obj as ByteArray - tcpClient.sendMessage(command) + val params = msg.obj as Array<*> + tcpClient.sendMessage( + CommandCreator.setWiFiConfig(params[0].toString(), params[1].toString()) + ) + } + + LocaleConstant.SET_BOARD_SERVER_CONFIG_CODE -> { + val params = msg.obj as Array<*> + tcpClient.sendMessage( + CommandCreator.setServerConfig(params[0].toString(), params[1].toString()) + ) } } return true @@ -104,7 +113,7 @@ * */ private val methaneRunnable = object : Runnable { override fun run() { - tcpClient.sendMessage(CommandCreator.createMethaneCommand()) + tcpClient.sendMessage(CommandCreator.queryMethane()) // 每3s重复一次 weakReferenceHandler?.postDelayed(this, 3 * 1000L) } @@ -114,7 +123,6 @@ super.onCreate() weakReferenceHandler = WeakReferenceHandler(this) tcpClient.start("192.168.10.51", 333) - Log.d(kTag, "onCreate: SocketConnectionService") } override fun onConnected() { @@ -165,6 +173,14 @@ * 安全树主控板要连接的远程服务器IP、端口号指令返回: * * [71, 101, 116, 68, 97, 116, 97, 58, 53, 44, 51, 49, 50, 56, 52, 54, 52, 106, 115, 108, 101, 55, 46, 118, 105, 99, 112, 46, 102, 117, 110, 44, 51, 55, 57, 53, 53, 13, 10] + * + * 设置WiFi返回: + * + * [83, 101, 116, 68, 97, 116, 97, 58, 50, 44, 111, 107, 13, 10] + * + * 设置服务器返回: + * + * [83, 101, 116, 68, 97, 116, 97, 58, 53, 44, 111, 107, 13, 10] * */ override fun onMessageReceived(bytes: ByteArray?) { if (bytes == null) { @@ -202,18 +218,29 @@ weakReferenceHandler.sendMessage(message) } } - } else if (dataHeadArray.contentEquals(byteArrayOf())) { - //SetData TODO - Log.d(kTag, bytes.toAsciiCode().trim()) + } else if (dataHeadArray.contentEquals(byteArrayOf(83, 101, 116, 68, 97, 116, 97))) { + //SetData + val dataArray = bytes.copyOfRange(10, bytes.size) + val data = dataArray.toAsciiCode().trim() - when (Char(bytes[10].toInt())) { + val weakReferenceHandler = BaseSettingsFragment.weakReferenceHandler ?: return + + when (Char(bytes[8].toInt())) { '2' -> { - Log.d(kTag, "onMessageReceived: ${bytes.toAsciiCode()}") + if (data == "ok") { + weakReferenceHandler.sendEmptyMessage(LocaleConstant.SET_BOARD_WIFI_CONFIG_RESPONSE_CODE) + } + } + + '5' -> { + if (data == "ok") { + weakReferenceHandler.sendEmptyMessage(LocaleConstant.SET_BOARD_SERVER_CONFIG_RESPONSE_CODE) + } } } } else { if (bytes.size != 13) { - Log.d(kTag, "onMessageReceived: 数据长度异常") + Log.d(kTag, "数据异常 => ${bytes.contentToString()}") return } @@ -282,9 +309,9 @@ "98" -> { //音量调节 if (bytes[10].toInt() == 1) { - Log.d(kTag, "onMessageReceived: 增大音量成功") + Log.d(kTag, "onMessageReceived: 增大音量") } else { - Log.d(kTag, "onMessageReceived: 减小音量成功") + Log.d(kTag, "onMessageReceived: 减小音量") } } } 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 fb39a38..496a7f3 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 @@ -4,28 +4,28 @@ /** * 打开激光指令 */ - fun createOpenLightCommand(): ByteArray { + fun openLaser(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x01, 0x00, 0x93.toByte()) } /** * 关闭激光指令 */ - fun createCloseLightCommand(): ByteArray { + fun closeLaser(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x91.toByte(), 0x00, 0x00, 0x92.toByte()) } /** * 查询甲烷浓度指令 */ - fun createMethaneCommand(): ByteArray { + fun queryMethane(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x95.toByte(), 0x00, 0x00, 0x96.toByte()) } /** * 设置甲烷阈值指令 */ - fun createThresholdCommand(threshold: Int): ByteArray { + fun setThreshold(threshold: Int): ByteArray { //数据位和校验位先都设置0x00占位 val bytes = byteArrayOf( 0xAA.toByte(), @@ -62,91 +62,98 @@ /** * 查询甲烷芯片温度指令 * */ - fun createCpuTemperatureCommand(): ByteArray { + fun queryCpuTemperature(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x96.toByte(), 0x00, 0x00, 0x97.toByte()) } /** * 查询主控板主控板IP、子网掩码、网关IP指令 * */ - fun createControlBoardConfigCommand(): ByteArray { + fun queryControlBoardConfig(): ByteArray { return "GetData:1\r\n".toByteArray() } /** * 查询是否和一体机一起使用指令 * */ - fun createIsUseAICommand(): ByteArray { + fun queryIsUseAI(): ByteArray { return "GetData:4\r\n".toByteArray() } /** * 安全树主控板要连接的远程服务器IP、端口号指令 * */ - fun createServerConfigCommand(): ByteArray { + fun queryServerConfig(): ByteArray { return "GetData:5\r\n".toByteArray() } /** * 设置主控板WiFi指令 * */ - fun createWiFiConfigCommand(wifiName: String, password: String): ByteArray { + fun setWiFiConfig(wifiName: String, password: String): ByteArray { return "SetData:2,${wifiName},${password}\r\n".toByteArray() } /** + * 设置主控板服务地址指令 + * */ + fun setServerConfig(host: String, port: String): ByteArray { + return "SetData:5,${host},${port}\r\n".toByteArray() + } + + /** * 音量增大指令 * */ - fun createIncreaseVoiceCommand(): ByteArray { + fun increaseVoice(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x98.toByte(), 0x01, 0x00, 0x9A.toByte()) } /** * 音量减小指令 * */ - fun createReduceVoiceCommand(): ByteArray { + fun reduceVoice(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x98.toByte(), 0x00, 0x00, 0x99.toByte()) } /** * 切换本地音源指令 * */ - fun createOpenLocaleModeCommand(): ByteArray { + fun openLocaleMode(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x90.toByte(), 0x00, 0x00, 0x91.toByte()) } /** * 切换远程音源指令 * */ - fun createOpenRemoteModeCommand(): ByteArray { + fun openRemoteMode(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x90.toByte(), 0x01, 0x00, 0x92.toByte()) } /** * 打开燃气报警指令 */ - fun createOpenAlarmCommand(): ByteArray { + fun openMethaneAlarm(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x92.toByte(), 0x01, 0x00, 0x94.toByte()) } /** * 关闭燃气报警指令 */ - fun createCloseAlarmCommand(): ByteArray { + fun closeMethaneAlarm(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x92.toByte(), 0x00, 0x00, 0x93.toByte()) } /** * 打开设备语音提示指令 */ - fun createOpenVoiceTipsCommand(): ByteArray { + fun openVoiceTips(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x97.toByte(), 0x01, 0x00, 0x99.toByte()) } /** * 关闭设备语音提示指令 */ - fun createCloseVoiceTipsCommand(): ByteArray { + fun closeVoiceTips(): ByteArray { return byteArrayOf(0xAA.toByte(), 0x01, 0x00, 0x97.toByte(), 0x00, 0x00, 0x98.toByte()) } } \ No newline at end of file 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 31d9663..5ae40fb 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 @@ -30,6 +30,7 @@ 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 /** * Handler Response Code @@ -39,7 +40,9 @@ 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 = 20240016 + 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 /*** * SP Key