From 13755417cc347da789c9723d3748b4ca06804da1 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Wed, 20 Nov 2024 17:23:07 +0800 Subject: [PATCH] =?UTF-8?q?[672][device]=20=E7=A1=AC=E4=BB=B6=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=A8=A1=E5=9D=97=20=E6=B7=BB=E5=8A=A0=E9=93=BE?= =?UTF-8?q?=E8=B7=AF=E6=97=A5=E5=BF=97=E3=80=81=E6=B7=BB=E5=8A=A0=E8=AF=AD?= =?UTF-8?q?=E9=9F=B3=E8=AE=BE=E5=A4=87=E7=89=A9=E7=90=86=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E5=9B=9E=E8=B0=83=E3=80=81=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E7=AA=97=E7=A1=AC=E4=BB=B6=E6=9C=8D=E5=8A=A1=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 2 +- .../eagle/core/function/DataCenterProvider.kt | 5 +- .../function/datacenter/iot/IotInItManager.kt | 28 ---- .../function/datacenter/iot/IotManager.kt | 63 ++++++++ .../hmi/ui/setting/DebugSettingView.kt | 68 ++++---- .../hmi/ui/tools/ShowVersionDialog.kt | 50 ++++++ .../main/res/layout/dialog_show_version.xml | 50 ++++++ .../core/data/deva/chain/ChainConstant.kt | 5 + .../com/mogo/support/device/DevicesManager.kt | 148 ++++++++++++------ .../support/device/IPhysicalButtonListener.kt | 19 +++ .../support/device/ISpeechCx830seListener.kt | 11 -- .../support/device/IWriteChainLogListener.kt | 9 ++ 12 files changed, 330 insertions(+), 128 deletions(-) delete mode 100644 core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/iot/IotInItManager.kt create mode 100644 core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/iot/IotManager.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/ShowVersionDialog.kt create mode 100644 core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_show_version.xml create mode 100644 libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/IPhysicalButtonListener.kt create mode 100644 libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/IWriteChainLogListener.kt diff --git a/config.gradle b/config.gradle index e1ceac5ec3..f34cdaf6b6 100644 --- a/config.gradle +++ b/config.gradle @@ -217,7 +217,7 @@ ext { androidautoSize : 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1', //========================= 串口设备 ====================== - serialport : 'com.mogo.support.device.manager:serial_port:2.2.3', + serialport : 'com.mogo.support.device.manager:serial_port:2.2.4', thread_opt : "com.mogo.thread.opt:lib:10.10.3", diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/DataCenterProvider.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/DataCenterProvider.kt index df37673e6f..ad14f068f1 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/DataCenterProvider.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/DataCenterProvider.kt @@ -9,7 +9,7 @@ import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager import com.mogo.eagle.core.function.datacenter.location.MoGoLocationDispatcher import com.mogo.eagle.core.function.datacenter.v2x.SpeedLimitDispatcher import com.mogo.eagle.core.function.datacenter.v2x.TrafficLightDispatcher -import com.mogo.eagle.core.function.datacenter.iot.IotInItManager +import com.mogo.eagle.core.function.datacenter.iot.IotManager @Route(path = MogoServicePaths.PATH_DATA_CENTER_MODULE) class DataCenterProvider : IDataCenterProvider { @@ -27,12 +27,13 @@ class DataCenterProvider : IDataCenterProvider { CallerMsgBoxManager.queryAllMessages(it) TrafficLightDispatcher.INSTANCE.initServer(it) SpeedLimitDispatcher.INSTANCE.initLimit(it) - IotInItManager.init() + IotManager.init() } } override fun onDestroy() { TrafficLightDispatcher.INSTANCE.destroy() SpeedLimitDispatcher.INSTANCE.destroy() + IotManager.destroy() } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/iot/IotInItManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/iot/IotInItManager.kt deleted file mode 100644 index 33e5b3ff09..0000000000 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/iot/IotInItManager.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.mogo.eagle.core.function.datacenter.iot - -import com.mogo.commons.AbsMogoApplication -import com.mogo.commons.storage.SharedPrefsMgr -import com.mogo.eagle.core.function.api.cloud.IMoGoCloudListener -import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager -import com.mogo.support.device.DevicesManager - -object IotInItManager : IMoGoCloudListener { - private const val TAG = "IotInIt" - - - fun init() { - CallerCloudListenerManager.addListener(TAG, this) - hardwareDeviceBind(SharedPrefsMgr.getInstance().sn) - } - - override fun tokenGot(token: String, sn: String) { - super.tokenGot(token, sn) - hardwareDeviceBind(sn) - } - - private fun hardwareDeviceBind(sn: String) { - if (sn.isNotEmpty()) { - DevicesManager.init(AbsMogoApplication.getApp(), sn) - } - } -} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/iot/IotManager.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/iot/IotManager.kt new file mode 100644 index 0000000000..42c554ff1f --- /dev/null +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/iot/IotManager.kt @@ -0,0 +1,63 @@ +package com.mogo.eagle.core.function.datacenter.iot + +import com.mogo.commons.AbsMogoApplication +import com.mogo.commons.storage.SharedPrefsMgr +import com.mogo.commons.utils.MogoAnalyticUtils +import com.mogo.eagle.core.data.deva.chain.ChainConstant +import com.mogo.eagle.core.function.api.cloud.IMoGoCloudListener +import com.mogo.eagle.core.function.call.cloud.CallerCloudListenerManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i +import com.mogo.support.device.DevicesManager +import com.mogo.support.device.IWriteChainLogListener +import com.zhjt.service.chain.ChainLog +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +object IotManager : IMoGoCloudListener, IWriteChainLogListener { + private val sdf: SimpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS ", Locale.CHINA) + private val TAG = IotManager::class.java.simpleName + private const val EVENT_KEY_HARDWARE_DEVICES = "event_key_hardware_devices" + + fun init() { + CallerCloudListenerManager.addListener(TAG, this) + hardwareDeviceBind(SharedPrefsMgr.getInstance().sn) + DevicesManager.registerWriteChainLogListener(this) + } + + override fun tokenGot(token: String, sn: String) { + super.tokenGot(token, sn) + hardwareDeviceBind(sn) + } + + private fun hardwareDeviceBind(sn: String) { + if (sn.isNotEmpty()) { + DevicesManager.init(AbsMogoApplication.getApp(), sn) + } + } + + fun destroy() { + DevicesManager.destroy() + DevicesManager.unregisterWriteChainLogListener() + } + + @ChainLog( + linkChainLog = ChainConstant.CHAIN_TYPE_STATUS, + linkCode = ChainConstant.CHAIN_SOURCE_INIT, + nodeAliasCode = ChainConstant.CHAIN_CODE_HARDWARE_DEVICES, + paramIndexes = [0, 1] + ) + override fun onWriteChainLog(title: String, info: String) { + try { + i("${TAG}_${EVENT_KEY_HARDWARE_DEVICES}", "${title}_${info}") + val params = HashMap() + params["time"] = sdf.format(Date()) + params["title"] = title + params["info"] = info + MogoAnalyticUtils.track(EVENT_KEY_HARDWARE_DEVICES, params) + + } catch (e: Exception) { + e.printStackTrace() + } + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt index 6dadffc3f0..db4218888f 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/setting/DebugSettingView.kt @@ -9,7 +9,6 @@ import android.content.Intent import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.os.Build -import android.os.Environment import android.os.Environment.* import android.os.Process import android.text.Html @@ -135,9 +134,9 @@ import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_300 import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_CROSS import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_TOP import com.mogo.map.uicontroller.VisualAngleMode.MODE_LONG_SIGHT -import com.mogo.tts.base.IMogoTTSCallback import com.mogo.support.device.DevicesManager import com.mogo.support.device.IBindStateChangeListener +import com.mogo.tts.base.IMogoTTSCallback import com.zhjt.mogo.adas.data.AdasConstants import com.zhjt.service.chain.ChainLog import kotlinx.android.synthetic.main.view_debug_setting.view.appVersionInfoLayout @@ -337,6 +336,7 @@ import kotlin.collections.component4 import kotlin.collections.set import kotlin.math.abs import kotlin.system.exitProcess +import com.mogo.eagle.core.function.hmi.ui.tools.ShowVersionDialog /** @@ -1336,37 +1336,16 @@ internal class DebugSettingView @JvmOverloads constructor( } //硬件服务绑定状态以及版本 + tvHardwareDeviceBindState.text = + getBindDeviceServiceState(DevicesManager.getServiceBindState()) tvHardwareDeviceBindState.setOnClickListener { - val state = when (DevicesManager.getServiceBindState()) { - 0 -> { - "绑定成功" - } - - 1 -> { - "绑定失败:未安装“硬件服务”APP" - } - - 2 -> { - "绑定失败:没有绑定权限或找不到服务" - } - - 3 -> { - "服务被异常销毁" - } - - else -> { - "未知" - } - } - var msg = "客户端SDK版本:${DevicesManager.getSDKVersion() ?: "未知"}\n" + var msg = + "${getBindDeviceServiceState(DevicesManager.getServiceBindState(), false)}\n" + msg += "客户端SDK版本:${DevicesManager.getSDKVersion() ?: "未知"}\n" msg += "客户端SDK AIDL版本:${DevicesManager.getSDKAIDLVersion() ?: "未知"}\n" msg += "硬件服务端APP版本:${DevicesManager.getServerVersion() ?: "未知"}\n" - msg += "硬件服务端APP AIDL版本:${DevicesManager.getServerAIDLVersion() ?: ""}" - AlertDialog.Builder(context) - .setTitle("硬件服务绑定状态: $state") - .setMessage(msg) - .setPositiveButton("确定", null) - .create().show() + msg += "硬件服务端APP AIDL版本:${DevicesManager.getServerAIDLVersion() ?: "未知"}" + ShowVersionDialog(context, "硬件服务绑定", msg).show() } } @@ -2766,29 +2745,42 @@ internal class DebugSettingView @JvmOverloads constructor( } override fun onServiceState(state: Int) { - val stateMsg = when (state) { + UiThreadHandler.post { + tvHardwareDeviceBindState.text = getBindDeviceServiceState(state) + } + } + + private fun getBindDeviceServiceState(state: Int, isUseTitle: Boolean = true): CharSequence { + val msg = when (state) { 0 -> { - "绑定成功" + "绑定成功" } 1 -> { - "绑定失败:未安装“硬件服务”APP" + "绑定失败,未安装“硬件服务”APP" } 2 -> { - "绑定失败:没有绑定权限或找不到服务" + "绑定失败,没有绑定权限或找不到服务" } 3 -> { - "服务被异常销毁" + "绑定失败,服务被异常销毁" } else -> { - "未知" + "未知" } } - UiThreadHandler.post { - tvHardwareDeviceBindState.text = "硬件服务绑定状态: $stateMsg" + val title = if (isUseTitle) { + "硬件服务绑定" + } else { + "" + } + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + Html.fromHtml("${title}状态:${msg}", Html.FROM_HTML_MODE_LEGACY) + } else { + Html.fromHtml("${title}状态:${msg}") } } } \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/ShowVersionDialog.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/ShowVersionDialog.kt new file mode 100644 index 0000000000..22ffafed3d --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/ui/tools/ShowVersionDialog.kt @@ -0,0 +1,50 @@ +package com.mogo.eagle.core.function.hmi.ui.tools + +import android.content.Context +import android.widget.TextView +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.dialog.BaseFloatDialog +import com.mogo.support.device.DevicesManager + + +/** + * 离线地图缓存 + */ +class ShowVersionDialog(context: Context, val title: String, val msg: String) : + BaseFloatDialog(context, TAG) { + + companion object { + private const val TAG = "ShowVersionDialog" + } + + private var tvTitle: TextView? = null + private var tvMsg: TextView? = null + private var okView: TextView? = null + + + init { + setContentView(R.layout.dialog_show_version) + setCanceledOnTouchOutside(true) + setCancelable(true) + initView() + } + var i=3; + private fun initView() { + tvTitle = findViewById(R.id.tv_title) + tvMsg = findViewById(R.id.tv_msg) + okView = findViewById(R.id.tv_ok) + tvTitle?.text = title + tvMsg?.text = msg + + okView?.setOnClickListener { + DevicesManager.speechCx830seBroadcast("你好${i++}") + dismiss() + } + } + + + override fun dismiss() { + super.dismiss() + + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_show_version.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_show_version.xml new file mode 100644 index 0000000000..ba3103c97e --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/dialog_show_version.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt index 60714df309..4f1081368b 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt @@ -152,5 +152,10 @@ class ChainConstant { // Biz const val CHAIN_CODE_MAP_ROAD_CROSS_ERROR = "CHAIN_CODE_MAP_ROAD_CROSS_ERROR" + //硬件设备相关 + const val CHAIN_CODE_HARDWARE_DEVICES = "CHAIN_CODE_HARDWARE_DEVICES" + + // + } } \ No newline at end of file diff --git a/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/DevicesManager.kt b/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/DevicesManager.kt index bd2ec77ccf..82c44f58ba 100644 --- a/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/DevicesManager.kt +++ b/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/DevicesManager.kt @@ -28,11 +28,29 @@ object DevicesManager { ConcurrentHashMap() private val speechCx830seListeners: ConcurrentHashMap = ConcurrentHashMap() + private val physicalButtonListeners: ConcurrentHashMap = + ConcurrentHashMap() + + private var writeChainLogListener: IWriteChainLogListener? = null fun init(context: Context, sn: String) { serialPortManager.bindService(context, sn, bindStateChangeListener) } + fun destroy() { + serialPortManager.close(DefaultDevices.VERIFICATION.path) + serialPortManager.close(DefaultDevices.SPEECH_CX830SE.path) + serialPortManager.unbindService() + } + + fun registerWriteChainLogListener(writeChainLogListener: IWriteChainLogListener) { + this.writeChainLogListener = writeChainLogListener + } + + fun unregisterWriteChainLogListener() { + this.writeChainLogListener = null + } + /** * 注册服务端APP绑定状态 */ @@ -53,15 +71,15 @@ object DevicesManager { } /** - * 注册核销设备回调接口 注册时自动连接核销设备 + * 注册核销设备回调接口 注册时如果未连接将进行自动连接 */ fun addVerificationListener(tag: String, listener: IVerificationAutoListener) { if (verificationAutoListeners.containsKey(tag)) { return } verificationAutoListeners[tag] = listener - if (verificationAutoListeners.isNotEmpty()) { - if (serviceBindState == SERVICE_STATE.BIND_SUCCEED) { + if (serviceBindState == SERVICE_STATE.BIND_SUCCEED) { + if (!serialPortManager.isOpen(DefaultDevices.VERIFICATION.path)) { serialPortManager.open(DefaultDevices.VERIFICATION, verificationListener) } } @@ -75,20 +93,22 @@ object DevicesManager { verificationAutoListeners.remove(tag) } if (verificationAutoListeners.isEmpty()) { - + if (serviceBindState == SERVICE_STATE.BIND_SUCCEED) { + serialPortManager.close(DefaultDevices.VERIFICATION.path) + } } } /** - * 注册语音设备回调接口 注册时自动连接语音设备 + * 注册语音设备回调接口 注册时如果未连接将进行自动连接 */ fun addSpeechCx830seListener(tag: String, listener: ISpeechCx830seListener) { if (speechCx830seListeners.containsKey(tag)) { return } speechCx830seListeners[tag] = listener - if (speechCx830seListeners.isNotEmpty()) { - if (serviceBindState == SERVICE_STATE.BIND_SUCCEED) { + if (serviceBindState == SERVICE_STATE.BIND_SUCCEED) { + if (!serialPortManager.isOpen(DefaultDevices.SPEECH_CX830SE.path)) { serialPortManager.open(DefaultDevices.SPEECH_CX830SE, speechCx830seListener) } } @@ -101,6 +121,41 @@ object DevicesManager { if (speechCx830seListeners.containsKey(tag)) { speechCx830seListeners.remove(tag) } + if (speechCx830seListeners.isEmpty() && physicalButtonListeners.isEmpty()) { + if (serviceBindState == SERVICE_STATE.BIND_SUCCEED) { + serialPortManager.close(DefaultDevices.SPEECH_CX830SE.path) + } + } + } + + + /** + * 注册语音设备物理按键回调接口 注册时如果未连接将进行自动连接 + */ + fun addPhysicalButtonListener(tag: String, listener: IPhysicalButtonListener) { + if (physicalButtonListeners.containsKey(tag)) { + return + } + physicalButtonListeners[tag] = listener + if (serviceBindState == SERVICE_STATE.BIND_SUCCEED) { + if (!serialPortManager.isOpen(DefaultDevices.SPEECH_CX830SE.path)) { + serialPortManager.open(DefaultDevices.SPEECH_CX830SE, speechCx830seListener) + } + } + } + + /** + * 取消注册语音设备回调接口 + */ + fun removePhysicalButtonListener(tag: String) { + if (physicalButtonListeners.containsKey(tag)) { + physicalButtonListeners.remove(tag) + } + if (physicalButtonListeners.isEmpty() && speechCx830seListeners.isEmpty()) { + if (serviceBindState == SERVICE_STATE.BIND_SUCCEED) { + serialPortManager.close(DefaultDevices.SPEECH_CX830SE.path) + } + } } @@ -108,44 +163,39 @@ object DevicesManager { override fun onServiceState(serviceState: Int) { serviceBindState = serviceState - if (bindStateChangeListeners.isNotEmpty()) { - bindStateChangeListeners.forEach { - it.value.onServiceState(serviceState) - } - } - //TODO 链路日志和埋点 -// OchChainLogManager.writeChainLogScanner( -// TAG + "bindStatus", -// "绑定服务结果:serviceState:${serviceState}" -// ) + var msg = "" when (serviceState) { SERVICE_STATE.BIND_SUCCEED -> { - Log.d(TAG, "服务绑定成功") - if (verificationAutoListeners.isNotEmpty()) { + msg = "服务绑定成功" + if (!serialPortManager.isOpen(DefaultDevices.VERIFICATION.path)) { serialPortManager.open(DefaultDevices.VERIFICATION, verificationListener) } - if (speechCx830seListeners.isNotEmpty()) { + if (!serialPortManager.isOpen(DefaultDevices.SPEECH_CX830SE.path)) { serialPortManager.open(DefaultDevices.SPEECH_CX830SE, speechCx830seListener) } } SERVICE_STATE.BIND_FAILURE_UNINSTALLED -> { - Log.d(TAG, "服务绑定失败:未安装串口服务端APP") + msg = "服务绑定失败:未安装串口服务端APP" } SERVICE_STATE.BIND_FAILURE_NO_PERMISSION_NOT_FOUND -> { - Log.d( - TAG, + msg = "服务绑定失败:没有绑定权限或找不到服务(如果是此状态,基本上安装后就可以找到,主要就是权限问题)" - ) } SERVICE_STATE.EXCEPTION -> { - Log.d(TAG, "服务被异常销毁") + msg = "服务被异常销毁" } else -> {} } + if (bindStateChangeListeners.isNotEmpty()) { + bindStateChangeListeners.forEach { + it.value.onServiceState(serviceState) + } + } + writeChainLogListener?.onWriteChainLog("硬件服务", "绑定状态=${msg}") } } @@ -162,14 +212,20 @@ object DevicesManager { it.value.onDeviceState(path, deviceType, isOpen, message) } } + writeChainLogListener?.onWriteChainLog( + "核销设备", + "状态=地址:${path} 设备类型:${deviceType} 是否打开:${isOpen} 消息:${message}" + ) } override fun onReceive(data: VerificationData) { + Log.i(TAG, "核销数据=${data.toString()}") if (verificationAutoListeners.isNotEmpty()) { verificationAutoListeners.forEach { it.value.onReceive(data) } } + writeChainLogListener?.onWriteChainLog("核销设备", "核销数据接收=$data") } } @@ -186,24 +242,10 @@ object DevicesManager { it.value.onOpenState(path, isOpen, throwableMessage) } } - -// if (isOpen) { -// openBtnEnable(!serialPortManager.isOpen(selectDevice.path)) -// updateUi(path, true) -// if (serialPortManager.getDeviceType(path) == DeviceType.SPEECH_CX830SE) { -// val device = serialPortManager.getOpenedSerialPort(path) -// serialPortManager.speechCx830seSendCommand( -// device, -// SpeechCommand.READ_DEVICE_ADDRESS -// ) -// serialPortManager.speechCx830seSendCommand( -// device, -// SpeechCommand.READ_SWITCHING_VALUE_STATE -// ) -// } -// } else { -// showOpenFailed(path) -// } + writeChainLogListener?.onWriteChainLog( + "车外语音设备", + "状态=地址:${path} 是否打开:${isOpen} 消息:${throwableMessage}" + ) } override fun onSpeechState(path: String, state: Int) { @@ -232,13 +274,14 @@ object DevicesManager { else -> "" } + writeChainLogListener?.onWriteChainLog("车外语音设备", "播报状态=${msg}") Log.d(TAG, msg) } override fun onSwitchingValue(path: String, state: Int, data: SwitchingValueData?) { super.onSwitchingValue(path, state, data) - if (speechCx830seListeners.isNotEmpty()) { - speechCx830seListeners.forEach { + if (physicalButtonListeners.isNotEmpty()) { + physicalButtonListeners.forEach { it.value.onSwitchingValue(path, state, data) } } @@ -258,8 +301,11 @@ object DevicesManager { else -> null } - if (!msg.isNullOrEmpty()) { - Log.d(TAG, msg) + if (!msg.isNullOrEmpty() && data != null) { + writeChainLogListener?.onWriteChainLog( + "车外语音设备", + "物理按钮状态=$msg $data" + ) } } @@ -321,10 +367,16 @@ object DevicesManager { */ @Define.Code fun speechCx830seBroadcast(content: String?): Int { - return serialPortManager.speechCx830seBroadcastSpeech( + val code = serialPortManager.speechCx830seBroadcastSpeech( DefaultDevices.SPEECH_CX830SE, content ) + writeChainLogListener?.onWriteChainLog( + "车外语音设备", + "播报内容=${content ?: " 调用结果=${code}"}" + ) + return code + } /** diff --git a/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/IPhysicalButtonListener.kt b/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/IPhysicalButtonListener.kt new file mode 100644 index 0000000000..bf801870f8 --- /dev/null +++ b/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/IPhysicalButtonListener.kt @@ -0,0 +1,19 @@ +package com.mogo.support.device + +import com.mogo.support.serialport.common.core.Define +import com.mogo.support.serialport.common.devices.speech.cx830se.data.SwitchingValueData + +/** + * 语音设备(科星互联 CX-830S-E)物理按钮状态监听 + */ +interface IPhysicalButtonListener { + /** + * 开关量状态 + * 设备主动触发开关量时 state = Code.PASSIVITY_RECEIVE + * + * @param path 串口 + * @param state 状态 查询成功:{@link Code#SUCCESS};查询命令下发失败:{@link Code#FAILED};查询超时:{@link Code#TIMEOUT};设备主动触发开关量:{@link Code#PASSIVITY_RECEIVE}; + * @param data 开关量数据 + */ + fun onSwitchingValue(path: String, @Define.Code state: Int, data: SwitchingValueData?) +} \ No newline at end of file diff --git a/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/ISpeechCx830seListener.kt b/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/ISpeechCx830seListener.kt index 710c4040d1..74ad08eb96 100644 --- a/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/ISpeechCx830seListener.kt +++ b/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/ISpeechCx830seListener.kt @@ -1,7 +1,6 @@ package com.mogo.support.device; import com.mogo.support.serialport.common.core.Define -import com.mogo.support.serialport.common.devices.speech.cx830se.data.SwitchingValueData /** * 语音设备(科星互联 CX-830S-E)监听 @@ -25,16 +24,6 @@ interface ISpeechCx830seListener { */ fun onSpeechState(path: String, @Define.Code state: Int) {} - /** - * 开关量状态 - * 设备主动触发开关量时 state = Code.PASSIVITY_RECEIVE - * - * @param path 串口 - * @param state 状态 查询成功:{@link Code#SUCCESS};查询命令下发失败:{@link Code#FAILED};查询超时:{@link Code#TIMEOUT};设备主动触发开关量:{@link Code#PASSIVITY_RECEIVE}; - * @param data 开关量数据 - */ - fun onSwitchingValue(path: String, @Define.Code state: Int, data: SwitchingValueData?) {} - /** * 设备地址 * diff --git a/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/IWriteChainLogListener.kt b/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/IWriteChainLogListener.kt new file mode 100644 index 0000000000..227dc01b60 --- /dev/null +++ b/libraries/mogo-hardware-devices/src/main/java/com/mogo/support/device/IWriteChainLogListener.kt @@ -0,0 +1,9 @@ +package com.mogo.support.device + +/** + * 日志 + */ +interface IWriteChainLogListener { + + fun onWriteChainLog(title: String, info: String) +} \ No newline at end of file