From 81758ae33a5d55bc0c345d2ad05c36595679aade Mon Sep 17 00:00:00 2001 From: yangyakun Date: Wed, 20 Nov 2024 16:54:46 +0800 Subject: [PATCH 1/4] =?UTF-8?q?[6.8.0]=20[fea]=20[2d=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E8=B7=AF=E7=BA=BF=E5=B1=95=E7=A4=BA=E4=BC=98=E5=8C=96]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/autopilot/line/LineManager.kt | 14 +++--- .../com/mogo/och/weaknet/model/LineModel.kt | 47 ++++++++++++++++++ .../com/mogo/och/weaknet/model/OrderModel.kt | 2 + .../repository/line/impl/NormalRepository.kt | 1 + .../repository/line/impl/WeaknetRepository.kt | 1 + .../res/drawable-nodpi/bus_station_end.png | Bin 0 -> 5212 bytes .../drawable-nodpi/bus_station_notarrive.png | Bin 0 -> 3121 bytes .../res/drawable-nodpi/bus_station_pass.png | Bin 0 -> 2539 bytes .../res/drawable-nodpi/bus_station_start.png | Bin 0 -> 4332 bytes 9 files changed, 59 insertions(+), 6 deletions(-) create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_station_end.png create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_station_notarrive.png create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_station_pass.png create mode 100644 OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_station_start.png diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt index 95330857d3..536c385f53 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/autopilot/line/LineManager.kt @@ -15,6 +15,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener import com.mogo.eagle.core.function.call.datacenter.CallerDataCenterBizListener import com.mogo.eagle.core.function.call.map.CallerMapGlobalTrajectoryDrawManager import com.mogo.eagle.core.function.call.och.CallerEagleBaseFunctionCall4OchManager +import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.e import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS @@ -79,13 +80,14 @@ object LineManager : CallerBase() { private var autopilotId: String by Delegates.observable("") { _, oldValue, newValue -> if (oldValue != newValue) { CallerEagleBaseFunctionCall4OchManager.setOchAutopilotOrderId(newValue) - val (start, end) = getStations() - if(start!=null&&end!=null){ - CallerDataCenterBizListener.invokeOchInfo(OchInfo(0, mutableListOf(start.toMogoLocation(),end.toMogoLocation()))) - }else{ - CallerDataCenterBizListener.invokeOchInfo(OchInfo(0, mutableListOf())) + if(!AppIdentityModeUtils.isBus(FunctionBuildConfig.appIdentityMode)&&!AppIdentityModeUtils.isShuttle(FunctionBuildConfig.appIdentityMode)){ + val (start, end) = getStations() + if(start!=null&&end!=null){ + CallerDataCenterBizListener.invokeOchInfo(OchInfo(0, mutableListOf(start.toMogoLocation(),end.toMogoLocation()))) + }else{ + CallerDataCenterBizListener.invokeOchInfo(OchInfo(0, mutableListOf())) + } } - } } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/LineModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/LineModel.kt index 635b965e5b..15c40c8764 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/LineModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/LineModel.kt @@ -5,7 +5,11 @@ import android.content.Context import com.mogo.commons.AbsMogoApplication import com.mogo.commons.storage.SharedPrefsMgr import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.data.map.SiteMarkerBean +import com.mogo.eagle.core.data.och.OchInfo +import com.mogo.eagle.core.data.v2x.Point import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager +import com.mogo.eagle.core.function.call.datacenter.CallerDataCenterBizListener import com.mogo.eagle.core.network.utils.digest.DigestUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d @@ -327,6 +331,7 @@ object LineModel { currentTask = null LineManager.setLineInfo(null) LineManager.setStartAndEndStation(null, null) + LineModel.callEyeMap(true) stationList = mutableListOf() startStationIndex = 0 mBusLinesCallbackMap.forEach { @@ -360,6 +365,7 @@ object LineModel { currentTask = null LineManager.setLineInfo(null) LineManager.setStartAndEndStation(null, null) + LineModel.callEyeMap(true) stationList = mutableListOf() startStationIndex = 0 mBusLinesCallbackMap.forEach { @@ -404,4 +410,45 @@ object LineModel { } } + fun callEyeMap(isClear:Boolean){ + if(isClear) { + val ochInfo = OchInfo(1, mutableListOf()) + ochInfo.siteMarkerList = mutableListOf() + CallerDataCenterBizListener.invokeOchInfo(ochInfo) + }else{ + val siteList = mutableListOf() + var temp: SiteMarkerBean?=null + stationList?.let { + it.forEachIndexed { index, busStationBean -> + if(index==0){ + temp =SiteMarkerBean(Point(busStationBean.gcjLon,busStationBean.gcjLat),R.drawable.bus_station_start,0.5f,0.87f) + }else if(index==it.size-1){ + temp =SiteMarkerBean(Point(busStationBean.gcjLon,busStationBean.gcjLat),R.drawable.bus_station_end,0.5f,0.87f) + }else{ + if(busStationBean.drivingStatus==1){ + temp =SiteMarkerBean(Point(busStationBean.gcjLon,busStationBean.gcjLat),R.drawable.bus_station_pass,0.5f,0.478f) + }else if (busStationBean.drivingStatus==3){ + temp =SiteMarkerBean(Point(busStationBean.gcjLon,busStationBean.gcjLat),R.drawable.bus_station_notarrive,0.5f,0.478f) + }else if (busStationBean.drivingStatus==2){ + if(busStationBean.isLeaving){ + temp =SiteMarkerBean(Point(busStationBean.gcjLon,busStationBean.gcjLat),R.drawable.bus_station_pass,0.5f,0.478f) + }else{ + temp =SiteMarkerBean(Point(busStationBean.gcjLon,busStationBean.gcjLat),R.drawable.bus_station_notarrive,0.5f,0.478f) + } + } + } + temp?.let {temp-> + siteList.add(temp) + } + } + } + val (start, end) = LineManager.getStations() + if(start!=null&&end!=null){ + val ochInfo = OchInfo(1, mutableListOf(start.toMogoLocation(),end.toMogoLocation())) + ochInfo.siteMarkerList = siteList + CallerDataCenterBizListener.invokeOchInfo(ochInfo) + } + } + } + } diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt index b78c7fff71..865c646471 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/model/OrderModel.kt @@ -416,6 +416,7 @@ object OrderModel { if(LineModel.startStationIndex +1< it.size){ val endStation = it[LineModel.startStationIndex +1] LineManager.setStartAndEndStation(startStation,endStation) + LineModel.callEyeMap(false) } } LineModel.arrivedStationSuccess() @@ -431,6 +432,7 @@ object OrderModel { if(LineModel.startStationIndex +1< it.size){ val endStation = it[LineModel.startStationIndex +1] LineManager.setStartAndEndStation(startStation,endStation) + LineModel.callEyeMap(false) } } LineModel.arrivedStationSuccess() diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/line/impl/NormalRepository.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/line/impl/NormalRepository.kt index e1120f92e6..79a4836648 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/line/impl/NormalRepository.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/line/impl/NormalRepository.kt @@ -124,6 +124,7 @@ class NormalRepository: ILineRepository { if (LineModel.startStationIndex < stationlist.size-1) { val endStation = stationlist[LineModel.startStationIndex + 1] LineManager.setStartAndEndStation(startStation,endStation) + LineModel.callEyeMap(false) } } return@flatMap Observable.just(true) diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/line/impl/WeaknetRepository.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/line/impl/WeaknetRepository.kt index 933ecf7b70..71c7fc1141 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/line/impl/WeaknetRepository.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/line/impl/WeaknetRepository.kt @@ -100,6 +100,7 @@ class WeaknetRepository : ILineRepository { if (LineModel.startStationIndex < stationlist.size-1) { val endStation = stationlist[LineModel.startStationIndex + 1] LineManager.setStartAndEndStation(startStation,endStation) + LineModel.callEyeMap(false) } } diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_station_end.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_station_end.png new file mode 100644 index 0000000000000000000000000000000000000000..45071228a2caa046d62f249eaa230dc5524ffbd5 GIT binary patch literal 5212 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 LNkvXXu0mjf5=GVs literal 0 HcmV?d00001 diff --git a/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_station_pass.png b/OCH/shuttle/driver_weaknet/src/main/res/drawable-nodpi/bus_station_pass.png new file mode 100644 index 0000000000000000000000000000000000000000..a411050a6e96ca131028cf804c2f9678972de3a3 GIT binary patch literal 2539 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 aC;kUIEOtlAu5|?f0000 Date: Wed, 20 Nov 2024 17:04:08 +0800 Subject: [PATCH 2/4] =?UTF-8?q?[6.8.0]=20[fea]=20[=E7=94=B5=E9=87=8F?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E4=BC=98=E5=8C=96]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/ui/widget/M2StatusBarView.kt | 7 +++++-- .../drawable-nodpi/shuttle_p_m2_electricity.png | Bin 0 -> 424 bytes .../m2/layout/shuttle_p_m2_view_status_bar.xml | 10 ++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 OCH/shuttle/passenger_weaknet/src/main/res/m2/drawable-nodpi/shuttle_p_m2_electricity.png diff --git a/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/widget/M2StatusBarView.kt b/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/widget/M2StatusBarView.kt index 2d4be3d1d2..808ae4f02a 100644 --- a/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/widget/M2StatusBarView.kt +++ b/OCH/shuttle/passenger_weaknet/src/main/java/m2/com/mogo/och/shuttle/weaknet/passenger/ui/widget/M2StatusBarView.kt @@ -19,6 +19,7 @@ import com.mogo.eagle.core.utilcode.kotlin.* import com.mogo.eagle.core.utilcode.util.ClickUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.och.shuttle.weaknet.passenger.R +import kotlinx.android.synthetic.main.shuttle_p_m2_view_status_bar.view.aciv_wait_ele import kotlinx.android.synthetic.main.shuttle_p_m2_view_status_bar.view.progress import kotlinx.android.synthetic.main.shuttle_p_m2_view_status_bar.view.tv_power_cos import kotlinx.coroutines.* @@ -64,10 +65,11 @@ class M2StatusBarView @JvmOverloads constructor( CallerChassisStatesListenerManager.addListener(TAG,this) progress?.also { - it.progress = 50 + it.progress = 0 + aciv_wait_ele.visibility = VISIBLE } tv_power_cos?.also { - it.text = "50%" + it.text = "检测中" } } @@ -104,6 +106,7 @@ class M2StatusBarView @JvmOverloads constructor( progress?.also { it.progress = power } tv_power_cos?.also {it.text = "$power%" } } + aciv_wait_ele.visibility = GONE } } } finally { diff --git a/OCH/shuttle/passenger_weaknet/src/main/res/m2/drawable-nodpi/shuttle_p_m2_electricity.png b/OCH/shuttle/passenger_weaknet/src/main/res/m2/drawable-nodpi/shuttle_p_m2_electricity.png new file mode 100644 index 0000000000000000000000000000000000000000..4a27ff437f00252e124eb300d2d9d9c7c87596b4 GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^JU}eO!3HGrSK5O(jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(&e8s>R#W>V6)V9}iLjw?dO|9?W~ zn+w}qCO^2d-XuQ1(N=5Oyw{m^iwY}^i_dq?RGVcU$Ccc)>s{T`hE>Nts_j@MkS$tj zvzNWq^W1~Hwnmx2#g$L4>3)-W&?NNocg8ezRWXZ)#&Vgx0{j}wgIGkQ*36$0{9=WB z&C=jMEUYns9uxzOWt v + + Date: Wed, 20 Nov 2024 17:23:07 +0800 Subject: [PATCH 3/4] =?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 From 0bcfd98242f537ff9af6339df25e64b6138dd8f4 Mon Sep 17 00:00:00 2001 From: xinfengkun Date: Wed, 20 Nov 2024 18:17:15 +0800 Subject: [PATCH 4/4] =?UTF-8?q?[672][device]=20=E6=B3=A8=E5=86=8C=E7=A1=AC?= =?UTF-8?q?=E4=BB=B6=E6=9C=8D=E5=8A=A1=E7=8A=B6=E6=80=81=E4=B8=8E=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=9B=9E=E8=B0=83=E6=8E=A5=E5=8F=A3=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E4=B8=80=E6=AC=A1=E8=AE=BE=E5=A4=87=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmi/ui/tools/ShowVersionDialog.kt | 3 +- .../com/mogo/support/device/DevicesManager.kt | 44 +++++++++++++++---- 2 files changed, 36 insertions(+), 11 deletions(-) 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 index 22ffafed3d..54baff053f 100644 --- 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 @@ -28,7 +28,7 @@ class ShowVersionDialog(context: Context, val title: String, val msg: String) : setCancelable(true) initView() } - var i=3; + private fun initView() { tvTitle = findViewById(R.id.tv_title) tvMsg = findViewById(R.id.tv_msg) @@ -37,7 +37,6 @@ class ShowVersionDialog(context: Context, val title: String, val msg: String) : tvMsg?.text = msg okView?.setOnClickListener { - DevicesManager.speechCx830seBroadcast("你好${i++}") dismiss() } } 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 82c44f58ba..bcc15a9468 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 @@ -15,12 +15,24 @@ import com.mogo.support.serialport.common.core.Device import com.mogo.support.serialport.common.devices.speech.cx830se.data.SwitchingValueData import java.util.concurrent.ConcurrentHashMap +data class OpenState( + var path: String?, + var deviceType: Byte, + var isOpen: Boolean, + var message: String? +) + object DevicesManager { private const val TAG = "DevicesManager" - private var serviceBindState = -1//-1:未知 + private val serialPortManager: SerialPortManager by lazy { SerialPortManager() // 初始化 SerialPortManager } + private var serviceBindState = -1//-1:未知 + private val verificationOpenState = + OpenState(path = null, deviceType = -1, isOpen = false, message = "未初始化") + private val speechCx830seOpenState = + OpenState(path = null, deviceType = -1, isOpen = false, message = "未初始化") private val bindStateChangeListeners: ConcurrentHashMap = ConcurrentHashMap() @@ -30,7 +42,6 @@ object DevicesManager { ConcurrentHashMap() private val physicalButtonListeners: ConcurrentHashMap = ConcurrentHashMap() - private var writeChainLogListener: IWriteChainLogListener? = null fun init(context: Context, sn: String) { @@ -59,6 +70,7 @@ object DevicesManager { return } bindStateChangeListeners[tag] = listener + listener.onServiceState(serviceBindState)//注册时回调一次当前状态 } /** @@ -78,6 +90,10 @@ object DevicesManager { return } verificationAutoListeners[tag] = listener + listener.onDeviceState( + verificationOpenState.path, verificationOpenState.deviceType, + verificationOpenState.isOpen, verificationOpenState.message + )//注册时回调一次当前状态 if (serviceBindState == SERVICE_STATE.BIND_SUCCEED) { if (!serialPortManager.isOpen(DefaultDevices.VERIFICATION.path)) { serialPortManager.open(DefaultDevices.VERIFICATION, verificationListener) @@ -106,6 +122,11 @@ object DevicesManager { if (speechCx830seListeners.containsKey(tag)) { return } + listener.onOpenState( + speechCx830seOpenState.path ?: "", + speechCx830seOpenState.isOpen, + speechCx830seOpenState.message + )//注册时回调一次当前状态 speechCx830seListeners[tag] = listener if (serviceBindState == SERVICE_STATE.BIND_SUCCEED) { if (!serialPortManager.isOpen(DefaultDevices.SPEECH_CX830SE.path)) { @@ -207,6 +228,10 @@ object DevicesManager { isOpen: Boolean, message: String? ) { + verificationOpenState.path = path + verificationOpenState.deviceType = deviceType + verificationOpenState.isOpen = isOpen + verificationOpenState.message = message if (verificationAutoListeners.isNotEmpty()) { verificationAutoListeners.forEach { it.value.onDeviceState(path, deviceType, isOpen, message) @@ -219,7 +244,6 @@ object DevicesManager { } override fun onReceive(data: VerificationData) { - Log.i(TAG, "核销数据=${data.toString()}") if (verificationAutoListeners.isNotEmpty()) { verificationAutoListeners.forEach { it.value.onReceive(data) @@ -237,6 +261,9 @@ object DevicesManager { isOpen: Boolean, throwableMessage: String? ) { + speechCx830seOpenState.path = path + speechCx830seOpenState.isOpen = isOpen + speechCx830seOpenState.message = throwableMessage if (speechCx830seListeners.isNotEmpty()) { speechCx830seListeners.forEach { it.value.onOpenState(path, isOpen, throwableMessage) @@ -275,7 +302,6 @@ object DevicesManager { else -> "" } writeChainLogListener?.onWriteChainLog("车外语音设备", "播报状态=${msg}") - Log.d(TAG, msg) } override fun onSwitchingValue(path: String, state: Int, data: SwitchingValueData?) { @@ -329,7 +355,10 @@ object DevicesManager { else -> null } if (!msg.isNullOrEmpty()) { - Log.d(TAG, msg) + writeChainLogListener?.onWriteChainLog( + "车外语音设备", + "设备地址读取状态=$msg 设备地址$address" + ) } } @@ -381,10 +410,7 @@ object DevicesManager { /** * 设备是否打开 - * @param device {@link DefaultDevices#SPEECH_CX830SE} - * {@link DefaultDevices#VERIFICATION} - * {@link DefaultDevices#VERIFICATION_SK87R} - * {@link DefaultDevices#VERIFICATION_Q350} + * @param device [DefaultDevices.SPEECH_CX830SE] [DefaultDevices.VERIFICATION] [DefaultDevices.VERIFICATION_SK87R] [DefaultDevices.VERIFICATION_Q350] */ fun isDeviceOpen(device: Device): Boolean { if (DefaultDevices.VERIFICATION.equals(device)) {