Browse Source

新增传感器信号

ccc 2 months ago
parent
commit
aa8019acca
24 changed files with 546 additions and 164 deletions
  1. 2 2
      buildSrc/src/main/kotlin/com/quyunshuo/sbm10/buildsrc/ProjectBuildConfig.kt
  2. 14 0
      lib_base/src/main/java/com/quyunshuo/sbm10/base/addressenum/PlcSensorSignalAddressEnum.kt
  3. 3 0
      lib_base/src/main/res/values-ar/strings.xml
  4. 3 0
      lib_base/src/main/res/values-de/strings.xml
  5. 3 0
      lib_base/src/main/res/values-en/strings.xml
  6. 5 1
      lib_base/src/main/res/values-es/strings.xml
  7. 3 0
      lib_base/src/main/res/values-fr/strings.xml
  8. 3 0
      lib_base/src/main/res/values/strings.xml
  9. 47 0
      module_backstage/src/main/java/com/module/backstage/adapter/DebugSignalAdapter.kt
  10. 4 3
      module_backstage/src/main/java/com/module/backstage/fragment/param/DebugAlarmFragment.kt
  11. 54 1
      module_backstage/src/main/java/com/module/backstage/fragment/param/DebugParamFragment.kt
  12. 1 1
      module_backstage/src/main/java/com/module/backstage/repo/DebugAlarmFragmentRepo.kt
  13. 9 1
      module_backstage/src/main/java/com/module/backstage/repo/DebugParamFragmentRepo.kt
  14. 5 16
      module_backstage/src/main/java/com/module/backstage/vm/DebugAlarmFragmentVM.kt
  15. 31 1
      module_backstage/src/main/java/com/module/backstage/vm/DebugParamFragmentVM.kt
  16. 14 0
      module_backstage/src/main/res/drawable/shape_circle.xml
  17. 21 0
      module_backstage/src/main/res/drawable/shape_circle_oragnge.xml
  18. 15 0
      module_backstage/src/main/res/drawable/shape_line_left.xml
  19. 15 0
      module_backstage/src/main/res/drawable/shape_line_right.xml
  20. 11 5
      module_backstage/src/main/res/layout/backstage_fragment_debug_alarm.xml
  21. 63 5
      module_backstage/src/main/res/layout/backstage_fragment_debug_param.xml
  22. 164 128
      module_backstage/src/main/res/layout/backstage_fragment_debug_product.xml
  23. 54 0
      module_backstage/src/main/res/layout/backstage_item_debug_signal.xml
  24. 2 0
      serialport-api/src/main/java/com/hboxs/serialport/plc/util/AdvacedUtil.java

+ 2 - 2
buildSrc/src/main/kotlin/com/quyunshuo/sbm10/buildsrc/ProjectBuildConfig.kt

@@ -11,8 +11,8 @@ object ProjectBuildConfig {
     const val applicationId = "com.quyunshuo.sbm10"
     const val minSdkVersion = 21
     const val targetSdkVersion = 29
-    const val versionCode = 7
-    const val versionName = "1.0.7"
+    const val versionCode = 8
+    const val versionName = "1.0.8"
     const val isAppMode = false
     /**
      * 项目当前的版本状态

+ 14 - 0
lib_base/src/main/java/com/quyunshuo/sbm10/base/addressenum/PlcSensorSignalAddressEnum.kt

@@ -0,0 +1,14 @@
+package com.quyunshuo.sbm10.base.addressenum
+
+import com.quyunshuo.sbm10.base.R
+
+
+enum class PlcSensorSignalAddressEnum(val address: String, val aName: String, val aNameId:Int) {
+    Signal01("01", "取餐门", R.string.base_plc_debug_12),
+    Signal02("02", "挡片",R.string.base_plc_debug_11),
+    Signal03("03", "玉米爆开",R.string.corn_has_popped),
+    Signal04("04", "落杯",R.string.base_plc_debug_10),
+    Signal05("05", "甜玉米",R.string.sweet_corn),
+    Signal06("06", "咸玉米",R.string.salty_corn),
+
+}

+ 3 - 0
lib_base/src/main/res/values-ar/strings.xml

@@ -290,6 +290,9 @@
     <string name="money">مال</string>
     <string name="out_system">مغادرة النظام</string>
     <string name="out_system_msg">هل ترغب بمغادرة النظام؟ </string>
+    <string name="corn_has_popped">الذرة فَرّقت</string>
+    <string name="sweet_corn">ذرة حلوة</string>
+    <string name="salty_corn">ذرة مملحة</string>
 
 </resources>
 <!--阿拉伯语-->

+ 3 - 0
lib_base/src/main/res/values-de/strings.xml

@@ -289,5 +289,8 @@
     <string name="money">Geld</string>
     <string name="out_system">System verlassen</string>
     <string name="out_system_msg">Möchten Sie das System verlassen?</string>
+    <string name="corn_has_popped">Mais ist gepoppt</string>
+    <string name="sweet_corn">Süßer Mais</string>
+    <string name="salty_corn">Salziger Mais</string>
 
 </resources><!--德语-->

+ 3 - 0
lib_base/src/main/res/values-en/strings.xml

@@ -289,6 +289,9 @@
     <string name="money">Money</string>
     <string name="out_system">Leave the system</string>
     <string name="out_system_msg">Do you want to leave the system? </string>
+    <string name="corn_has_popped">Corn has popped</string>
+    <string name="sweet_corn">Sweet corn</string>
+    <string name="salty_corn">Salty corn</string>
 
 </resources>
     <!--英文-->

+ 5 - 1
lib_base/src/main/res/values-es/strings.xml

@@ -289,4 +289,8 @@
     <string name="money">Importe</string>
     <string name="out_system">Salir del sistema</string>
     <string name="out_system_msg">¿Desea salir del sistema? </string>
-</resources>
+    <string name="corn_has_popped">El maíz ha estallado</string>
+    <string name="sweet_corn">Maíz dulce</string>
+    <string name="salty_corn">Maíz salado</string>
+
+</resources><!--西班牙语-->

+ 3 - 0
lib_base/src/main/res/values-fr/strings.xml

@@ -288,5 +288,8 @@
     <string name="money">Argent</string>
     <string name="out_system">Quitter le système</string>
     <string name="out_system_msg">Voulez-vous quitter le système?</string>
+    <string name="corn_has_popped">Le maïs a éclaté</string>
+    <string name="sweet_corn">Maïs sucré</string>
+    <string name="salty_corn">Maïs salé</string>
 
 </resources><!--法语-->

+ 3 - 0
lib_base/src/main/res/values/strings.xml

@@ -289,6 +289,9 @@
     <string name="money">金额</string>
     <string name="out_system">脱离系统</string>
     <string name="out_system_msg">是否脱离系统?</string>
+    <string name="corn_has_popped">玉米爆开</string>
+    <string name="sweet_corn">甜玉米</string>
+    <string name="salty_corn">咸玉米</string>
 
 </resources>
 <!--中文-->

+ 47 - 0
module_backstage/src/main/java/com/module/backstage/adapter/DebugSignalAdapter.kt

@@ -0,0 +1,47 @@
+package com.module.backstage.adapter
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import com.elvishew.xlog.XLog
+import com.module.backstage.databinding.BackstageItemDebugAlarmBinding
+import com.quyunshuo.sbm10.base.addressenum.PlcDebugAddressEnum
+import com.module.backstage.databinding.BackstageItemDebugParamBinding
+import com.module.backstage.databinding.BackstageItemDebugSignalBinding
+import com.quyunshuo.sbm10.base.addressenum.PlcAlarmAddressEnum
+import com.quyunshuo.sbm10.base.addressenum.PlcSensorSignalAddressEnum
+import com.quyunshuo.sbm10.common.listener.AdapterClickListener
+import com.quyunshuo.sbm10.common.util.UiUtil
+import com.quyunshuo.sbm10.common.util.XLogUtil
+
+class DebugSignalAdapter (var productList:MutableList<PlcSensorSignalAddressEnum>): RecyclerView.Adapter<DebugSignalAdapter.MyViewHolder>() {
+
+    private var paraStateMap: MutableMap<String, String>? = null
+
+    inner class MyViewHolder(binding: BackstageItemDebugSignalBinding): RecyclerView.ViewHolder(binding.root){
+        val mBinding = binding
+        fun bind(plcSensorSignalAddressEnum: PlcSensorSignalAddressEnum) {
+            mBinding.run {
+                tvAddress.text = plcSensorSignalAddressEnum.address
+                tvName.text = UiUtil.getStringRes(plcSensorSignalAddressEnum.aNameId)
+            }
+        }
+
+    }
+
+    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
+        val projectVH = MyViewHolder(
+            BackstageItemDebugSignalBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+        )
+        return projectVH
+    }
+
+    override fun getItemCount(): Int {
+        return productList.size
+    }
+
+    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
+        holder.bind(productList.get(position))
+
+    }
+}

+ 4 - 3
module_backstage/src/main/java/com/module/backstage/fragment/param/DebugAlarmFragment.kt

@@ -11,15 +11,16 @@ import com.hboxs.serialport.plc.DialogClickListener
 import com.hboxs.serialport.sbc.VBoxMessage
 import com.module.backstage.R
 import com.module.backstage.adapter.DebugAlarmAdapter
-import com.module.backstage.adapter.DebugParamAdapter
+import com.module.backstage.adapter.DebugSignalAdapter
 import com.module.backstage.databinding.BackstageFragmentDebugAlarmBinding
 import com.module.backstage.dialog.OKCancelDialog
 import com.module.backstage.vm.DebugAlarmFragmentVM
-import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
+import com.quyunshuo.sbm10.common.listener.AdapterClickListener
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.ToastUtil
+import com.quyunshuo.sbm10.common.util.UiUtil
 import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.zyao89.view.zloading.ZLoadingDialog
 import com.zyao89.view.zloading.Z_TYPE
@@ -63,7 +64,7 @@ class DebugAlarmFragment :
             debugAlarmAdapter = DebugAlarmAdapter(mViewModel.getDebugAlarmData())
             debugAlarmAdapter?.setItemListener(object: AdapterClickListener {
                 override fun onClickListener(view: View?, position: Int, data: String?) {
-                   var checkBox = view as CheckBox
+                    var checkBox = view as CheckBox
                     showOnOffDialog(checkBox.isChecked,position)
 
                 }

+ 54 - 1
module_backstage/src/main/java/com/module/backstage/fragment/param/DebugParamFragment.kt

@@ -12,6 +12,7 @@ import com.hboxs.serialport.sbc.SBCHeartbeat
 import com.hboxs.serialport.sbc.VBoxMessage
 import com.module.backstage.R
 import com.module.backstage.adapter.DebugParamAdapter
+import com.module.backstage.adapter.DebugSignalAdapter
 import com.module.backstage.databinding.BackstageFragmentDebugParamBinding
 import com.module.backstage.dialog.OKCancelDialog
 import com.quyunshuo.sbm10.common.listener.AdapterClickListener
@@ -20,6 +21,7 @@ import com.quyunshuo.sbm10.base.ktx.observeLiveData
 import com.quyunshuo.sbm10.base.utils.RegisterEventBus
 import com.quyunshuo.sbm10.common.ui.BaseFragment
 import com.quyunshuo.sbm10.common.util.ToastUtil
+import com.quyunshuo.sbm10.common.util.UiUtil
 import com.quyunshuo.sbm10.common.util.XLogUtil
 import com.zyao89.view.zloading.ZLoadingDialog
 import com.zyao89.view.zloading.Z_TYPE
@@ -45,6 +47,7 @@ class DebugParamFragment :
     BaseFragment<BackstageFragmentDebugParamBinding, DebugParamFragmentVM>(), LifecycleObserver {
     private val TAG = "DebugParamFragment"
     private var debugParamAdapter: DebugParamAdapter? = null
+    private var debugSignalAdapter: DebugSignalAdapter? = null
     var okCancelDialog: OKCancelDialog? = null
 
     override val mViewModel: DebugParamFragmentVM by viewModels()
@@ -52,6 +55,7 @@ class DebugParamFragment :
 
     override fun onDestroyView() {
         mBinding.debugRvProduct.adapter = null
+        mBinding.debugRvSignal.adapter = null
         closeLoading()
         super.onDestroyView()
     }
@@ -76,7 +80,14 @@ class DebugParamFragment :
             })
             adapter = debugParamAdapter
         }
-
+        with(debugRvSignal){
+            //设置布局排列方式,默认垂直排列
+            val gridLayoutManager: GridLayoutManager =
+                GridLayoutManager(this@DebugParamFragment.context, 1, androidx.recyclerview.widget.GridLayoutManager.VERTICAL, false)
+            layoutManager = gridLayoutManager
+            debugSignalAdapter = DebugSignalAdapter(mViewModel.getDebugSignalData())
+            adapter = debugSignalAdapter
+        }
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN)
@@ -94,12 +105,54 @@ class DebugParamFragment :
         observeLiveData(mViewModel.paramDataList, ::paramDataList)
         observeLiveData(mViewModel.paramDataList1, ::paramDataList1)
         observeLiveData(mViewModel.paramDataList3, ::paramDataList3)
+        observeLiveData(mViewModel.mainCoreDataList,::mainCoreDataList)
+        observeLiveData(mViewModel.secondaryCoreDataList,::secondaryCoreDataList)
         observeLiveData(mViewModel.refreshPage, ::refreshPage)
         observeLiveData(mViewModel.loading, ::setLoading)
         lifecycle.addObserver(this)
+        mBinding.tvLutou.text = SBCHeartbeat.headTemp + "°C"
+    }
+    private fun mainCoreDataList(string: String) {
+        Log.d(TAG, "mainCoreDataList: "+string)
+        var i = 0
+        val len = string.length
+        while (i < len) {
+            when (i) {
+                1->getSignalValue(string,i,1)
+                4->getSignalValue(string,i,2)
+                3->getSignalValue(string,i,3)
+                6->getSignalValue(string,i,4)
+            }
+            i++
+        }
+    }
 
+    private fun secondaryCoreDataList(string: String) {
+        Log.d(TAG, "secondaryCoreDataList: "+string)
+        var i = 0
+        val len = string.length
+        while (i < len) {
+            when (i) {
+                0->getSignalValue(string,i,0)
+                1->getSignalValue(string,i,5)
+            }
+            i++
+        }
     }
 
+    private fun getSignalValue(string: String, index: Int, position: Int) {
+        val view: View = mBinding.debugRvSignal.getChildAt(position)
+        if (null != mBinding.debugRvSignal.getChildViewHolder(view)) {
+            val viewHolder: DebugSignalAdapter.MyViewHolder =
+                mBinding.debugRvSignal.getChildViewHolder(view) as DebugSignalAdapter.MyViewHolder
+            if ('0' ==string[index]) {
+                viewHolder.mBinding.ivState.setImageDrawable(UiUtil.getDrawableRes(R.drawable.shape_circle_oragnge))
+            } else {
+                viewHolder.mBinding.ivState.setImageDrawable(UiUtil.getDrawableRes(R.drawable.shape_circle))
+            }
+        }
+
+    }
     private fun setLoading(b: Boolean?) {
         debugParamAdapter?.setState(mViewModel._paramDataMap)
         if (b == false) {

+ 1 - 1
module_backstage/src/main/java/com/module/backstage/repo/DebugAlarmFragmentRepo.kt

@@ -1,6 +1,7 @@
 package com.module.backstage.repo
 
 import com.quyunshuo.sbm10.base.addressenum.PlcAlarmAddressEnum
+import com.quyunshuo.sbm10.base.addressenum.PlcSensorSignalAddressEnum
 import com.quyunshuo.sbm10.base.mvvm.m.BaseRepository
 import java.util.Arrays
 import javax.inject.Inject
@@ -27,5 +28,4 @@ class DebugAlarmFragmentRepo @Inject constructor() : BaseRepository() {
         PlcAlarmAddressEnum.Alarm08,
     )
 
-
 }

+ 9 - 1
module_backstage/src/main/java/com/module/backstage/repo/DebugParamFragmentRepo.kt

@@ -1,6 +1,7 @@
 package com.module.backstage.repo
 
 import com.quyunshuo.sbm10.base.addressenum.PlcDebugAddressEnum
+import com.quyunshuo.sbm10.base.addressenum.PlcSensorSignalAddressEnum
 import com.quyunshuo.sbm10.base.mvvm.m.BaseRepository
 import java.util.Arrays
 import javax.inject.Inject
@@ -38,6 +39,13 @@ class DebugParamFragmentRepo @Inject constructor() : BaseRepository() {
 //        PlcDebugAddressEnum.IO_SE_19,
 //        PlcDebugAddressEnum.IO_SE_20,
     )
-
+    var arrayListSignal: MutableList<PlcSensorSignalAddressEnum> = Arrays.asList(
+        PlcSensorSignalAddressEnum.Signal01,
+        PlcSensorSignalAddressEnum.Signal02,
+        PlcSensorSignalAddressEnum.Signal03,
+        PlcSensorSignalAddressEnum.Signal04,
+        PlcSensorSignalAddressEnum.Signal05,
+        PlcSensorSignalAddressEnum.Signal06,
+    )
 
 }

+ 5 - 16
module_backstage/src/main/java/com/module/backstage/vm/DebugAlarmFragmentVM.kt

@@ -2,27 +2,14 @@ package com.module.backstage.vm
 
 import android.util.Log
 import androidx.lifecycle.LifecycleObserver
-import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
-import com.hboxs.serialport.plc.frame.ResponseFrame
-import com.hboxs.serialport.plc.message.Message
 import com.hboxs.serialport.plc.thread.ThreadDebugAlarmParam
-import com.hboxs.serialport.plc.thread.ThreadDebugParamParam
-import com.hboxs.serialport.plc.util.AsciiUtils
-import com.hboxs.serialport.plc.util.HexUtils
-import com.hboxs.serialport.plc.util.HexadecimalUtil
-import com.hboxs.serialport.sbc.SBCHeartbeat
 import com.hboxs.serialport.sbc.VBoxMessage
-import com.hboxs.serialport.sbc.frame.VboxCommand
-import com.module.backstage.R
 import com.module.backstage.repo.DebugAlarmFragmentRepo
 import com.quyunshuo.sbm10.base.addressenum.PlcAlarmAddressEnum
-import com.quyunshuo.sbm10.base.addressenum.PlcDebugAddressEnum
+import com.quyunshuo.sbm10.base.addressenum.PlcSensorSignalAddressEnum
 import com.quyunshuo.sbm10.base.mvvm.vm.BaseViewModel
-import com.quyunshuo.sbm10.common.util.ToastUtil
-import com.quyunshuo.sbm10.common.util.UiUtil
 import dagger.hilt.android.lifecycle.HiltViewModel
-import java.util.Arrays
 import javax.inject.Inject
 
 /**
@@ -83,8 +70,10 @@ class DebugAlarmFragmentVM @Inject constructor(private val mRepo: DebugAlarmFrag
 //        }
         val getSign = messageEvent.data.substring(2, 4)//查询参数指令标志
         when (getSign) {
+            "01"->{
+            }
             "02"->{
-                cmdHeartbeat(messageEvent)
+                backstageData(messageEvent)
             }
             "03" -> {
                 val data = messageEvent.data.substring(78,80)
@@ -100,7 +89,7 @@ class DebugAlarmFragmentVM @Inject constructor(private val mRepo: DebugAlarmFrag
         }
     }
 
-    private fun cmdHeartbeat(messageEvent: VBoxMessage) {
+    private fun backstageData(messageEvent: VBoxMessage) {
         //调试页的内容
         val data = messageEvent.data.substring(7,22)
         updateOtherState(data)

+ 31 - 1
module_backstage/src/main/java/com/module/backstage/vm/DebugParamFragmentVM.kt

@@ -17,6 +17,7 @@ import com.module.backstage.R
 import com.module.backstage.fragment.param.DebugParamFragment
 import com.module.backstage.repo.DebugParamFragmentRepo
 import com.quyunshuo.sbm10.base.addressenum.PlcDebugAddressEnum
+import com.quyunshuo.sbm10.base.addressenum.PlcSensorSignalAddressEnum
 import com.quyunshuo.sbm10.base.mvvm.vm.BaseViewModel
 import com.quyunshuo.sbm10.common.util.ToastUtil
 import com.quyunshuo.sbm10.common.util.UiUtil
@@ -90,13 +91,19 @@ class DebugParamFragmentVM @Inject constructor(private val mRepo: DebugParamFrag
     private val _loading = MutableLiveData<Boolean>()
     val loading: MutableLiveData<Boolean> get() = _loading
 
+    private var _secondaryCoreDataList = MutableLiveData<String>()
+    val secondaryCoreDataList: MutableLiveData<String> get() = _secondaryCoreDataList
+    private var _mainCoreDataList = MutableLiveData<String>()
+    val mainCoreDataList: MutableLiveData<String> get() = _mainCoreDataList
     /**
      * 获取文章数据
      */
     fun getArticleData() {
 
     }
-
+    fun getDebugSignalData(): MutableList<PlcSensorSignalAddressEnum> {
+        return mRepo.arrayListSignal
+    }
     fun getDebugParamData(): MutableList<PlcDebugAddressEnum> {
         return mRepo.arrayList
     }
@@ -331,6 +338,11 @@ class DebugParamFragmentVM @Inject constructor(private val mRepo: DebugParamFrag
                 val hexStr2BinStr3 = HexUtils.hexStr2BinStr(data3)
                 val split3 = hexStr2BinStr3.split("")
                 updateOtherState3(split3)
+
+        val secondaryCoreSignalData = messageEvent.data.substring(32,34)
+        updateSecondaryCore(secondaryCoreSignalData)
+        val mainCoreSignalData = messageEvent.data.substring(58,60)
+        updateMainCore(mainCoreSignalData)
     }
 
 
@@ -381,4 +393,22 @@ class DebugParamFragmentVM @Inject constructor(private val mRepo: DebugParamFrag
         val cleanedList = lis.filter { it.isNotEmpty() }
         paramDataList3.value = cleanedList
     }
+
+    fun updateSecondaryCore(string: String) {
+        Log.d(TAG, "updataSencondaryCore:1 "+string)
+        secondaryCoreDataList.value = getBinary(string)
+    }
+
+
+    fun updateMainCore(string: String) {
+        Log.d(TAG, "updataMainCore:1 "+string)
+        mainCoreDataList.value = getBinary(string)
+    }
+    private fun getBinary(string: String): String {
+        val intValue = string.toLong(16)
+        val binaryString = intValue.toString(2)
+
+        val paddedBinaryString = binaryString.padStart(8, '0') // 填充到8位
+        return paddedBinaryString
+    }
 }

+ 14 - 0
module_backstage/src/main/res/drawable/shape_circle.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval"
+    android:useLevel="false" >
+    <solid
+        android:color="@color/white" />
+    <stroke
+        android:width="10dp"
+        android:color="@color/system_text" />
+    <!--这里宽高要一样 -->
+    <size android:width="70dp"
+        android:height="70dp" />
+</shape>

+ 21 - 0
module_backstage/src/main/res/drawable/shape_circle_oragnge.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval"
+    android:useLevel="false" >
+    <solid android:color="@color/colorOrange" />
+    <padding
+        android:left="2dp"
+        android:top="1dp"
+        android:right="2dp"
+        android:bottom="1dp" />
+    <solid
+        android:color="@color/colorOrange" />
+    <stroke
+        android:width="10dp"
+        android:color="@color/system_text" />
+
+    <!--这里宽高要一样 -->
+    <size android:width="70dp"
+        android:height="70dp" />
+</shape>

+ 15 - 0
module_backstage/src/main/res/drawable/shape_line_left.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape>
+            <solid android:color="@color/system_text" />
+        </shape>
+    </item>
+    <!--    想保留哪一边就设置哪一边边框,列如只有下边框:bottom="0.7dp",相应的有上top="",left="",right=""    -->
+    <item android:left="10dp">
+        <shape>
+            <solid android:color="@color/c_white" />//整个框背景颜色
+        </shape>
+    </item>
+
+</layer-list>

+ 15 - 0
module_backstage/src/main/res/drawable/shape_line_right.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape>
+            <solid android:color="@color/system_text" />//边框颜色
+        </shape>
+    </item>
+    <!--    想保留哪一边就设置哪一边边框,列如只有下边框:bottom="0.7dp",相应的有上top="",left="",right=""    -->
+    <item android:right="10dp">
+        <shape>
+            <solid android:color="@color/c_white" />//整个框背景颜色
+        </shape>
+    </item>
+
+</layer-list>

+ 11 - 5
module_backstage/src/main/res/layout/backstage_fragment_debug_alarm.xml

@@ -8,11 +8,17 @@
         android:id="@+id/debug_rv_alarm"
         android:layout_width="match_parent"
         android:maxHeight="2080dp"
-        android:layout_height="match_parent"
+        android:layout_height="400dp"
         android:layout_marginVertical="40dp"
-        android:layout_marginLeft="10dp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_marginLeft="10dp" />
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/debug_rv_signal"
+        android:layout_width="match_parent"
+        android:maxHeight="2080dp"
+        android:layout_height="wrap_content"
+        android:layout_marginVertical="40dp"
+        app:layout_constraintTop_toBottomOf="@id/debug_rv_alarm"
+        android:layout_marginLeft="10dp"/>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 63 - 5
module_backstage/src/main/res/layout/backstage_fragment_debug_param.xml

@@ -1,18 +1,76 @@
 <?xml version="1.0" encoding="utf-8"?>
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
+    android:layout_height="match_parent">
 
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/debug_rv_product"
         android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginVertical="40dp"
+        android:layout_marginLeft="10dp"
         android:maxHeight="2080dp"
-        android:layout_height="match_parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/debug_rv_signal"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
         android:layout_marginVertical="40dp"
         android:layout_marginLeft="10dp"
+        android:maxHeight="2080dp"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
+        app:layout_constraintTop_toBottomOf="@id/debug_rv_product" />
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="15dp"
+        android:layout_marginBottom="360dp"
+        android:background="@drawable/userbottom_bg"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent">
+
+        <RelativeLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true">
+
+            <ImageView
+                android:id="@+id/iv_lutou"
+                android:layout_width="120dp"
+                android:layout_height="120dp"
+                android:src="@drawable/icon_fashengqi" />
+
+            <LinearLayout
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_toRightOf="@id/iv_lutou"
+                android:gravity="center"
+                android:orientation="vertical">
+
+                <TextView
+                    android:id="@+id/tv_lutou"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="40°C"
+                    android:textColor="#966035"
+                    android:textSize="40sp"
+                    android:textStyle="bold" />
+
+                <TextView
+                    android:id="@+id/tv_lutou_content"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/heartbeat_temp"
+                    android:textColor="#966035"
+                    android:textSize="40sp"
+                    android:textStyle="bold" />
+            </LinearLayout>
+        </RelativeLayout>
+
+    </RelativeLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 164 - 128
module_backstage/src/main/res/layout/backstage_fragment_debug_product.xml

@@ -24,103 +24,17 @@
         android:orientation="vertical"
         app:layout_constraintGuide_percent="0.46" />
 
-    <LinearLayout
-        android:id="@+id/ll_userbottom"
-        android:layout_width="match_parent"
+    <RelativeLayout
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginBottom="250dp"
-        android:layout_alignParentBottom="true"
+        android:layout_marginTop="15dp"
         android:background="@drawable/userbottom_bg"
-        android:gravity="center"
-        android:orientation="horizontal"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toStartOf="@+id/home_guideline"
-        app:layout_constraintStart_toStartOf="@+id/home_guideline">
-
-        <RelativeLayout
-            android:layout_width="wrap_content"
-            android:visibility="gone"
-            android:layout_height="wrap_content">
-
-            <ImageView
-                android:id="@+id/iv_wendu"
-                android:layout_width="80dp"
-                android:layout_height="80dp"
-                android:src="@drawable/icon_qxwendu_new" />
-
-            <LinearLayout
-                android:id="@+id/ll_wendu"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_toRightOf="@id/iv_wendu">
-
-                <TextView
-                    android:id="@+id/tv_wendu"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="40°C"
-                    android:textColor="#d4237a"
-                    android:textSize="32sp" />
-
-
-            </LinearLayout>
-
-            <TextView
-                android:id="@+id/tv_wendu_content"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_below="@id/ll_wendu"
-                android:layout_toRightOf="@id/iv_wendu"
-                android:lines="2"
-                android:text="柜外温度"
-                android:textColor="#d4237a"
-                android:textSize="22sp" />
-
-        </RelativeLayout>
-
-        <RelativeLayout
-            android:layout_width="wrap_content"
-            android:visibility="gone"
-            android:layout_height="wrap_content">
-
-            <ImageView
-                android:id="@+id/iv_shidu"
-                android:layout_width="80dp"
-                android:layout_height="80dp"
-                android:src="@drawable/icon_qxshidu_new" />
-
-            <LinearLayout
-                android:id="@+id/ll_shidu"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_toRightOf="@id/iv_shidu">
-
-                <TextView
-                    android:id="@+id/tv_shidu"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="40°C"
-                    android:textColor="#d4237a"
-                    android:textSize="32sp" />
-
-            </LinearLayout>
-
-            <TextView
-                android:id="@+id/tv_shidu_content"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_below="@id/ll_shidu"
-                android:layout_toRightOf="@id/iv_shidu"
-                android:lines="2"
-                android:text="柜外湿度"
-                android:textColor="#d4237a"
-                android:textSize="22sp" />
-
-        </RelativeLayout>
-
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_marginBottom="360dp">
         <RelativeLayout
-            android:layout_marginTop="15dp"
-            android:layout_marginBottom="15dp"
+            android:layout_centerHorizontal="true"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content">
 
@@ -129,11 +43,12 @@
                 android:layout_width="120dp"
                 android:layout_height="120dp"
                 android:src="@drawable/icon_fashengqi" />
+
             <LinearLayout
-                android:gravity="center"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_toRightOf="@id/iv_lutou"
+                android:gravity="center"
                 android:orientation="vertical">
 
                 <TextView
@@ -141,6 +56,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="40°C"
+                    android:textStyle="bold"
                     android:textColor="#966035"
                     android:textSize="40sp" />
 
@@ -149,46 +65,166 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="@string/heartbeat_temp"
+                    android:textStyle="bold"
                     android:textColor="#966035"
                     android:textSize="40sp" />
             </LinearLayout>
         </RelativeLayout>
 
-        <RelativeLayout
-            android:visibility="gone"
-            android:id="@+id/rl_fashengqi"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content">
-
-            <ImageView
-                android:id="@+id/iv_fashengqi"
-                android:layout_width="80dp"
-                android:layout_height="80dp"
-                android:src="@drawable/icon_fsq_new" />
-
-            <TextView
-                android:id="@+id/tv_fashengqi"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_toRightOf="@id/iv_fashengqi"
-                android:text="40°C"
-                android:textColor="#d4237a"
-                android:textSize="32sp" />
-
-            <TextView
-                android:id="@+id/tv_fashengqi_content"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_below="@id/tv_fashengqi"
-                android:layout_toRightOf="@id/iv_fashengqi"
-                android:lines="2"
-                android:text="蒸汽温度"
-                android:textColor="#d4237a"
-                android:textSize="22sp" />
-
-        </RelativeLayout>
+    </RelativeLayout>
+
+
+<!--        <RelativeLayout-->
+<!--            android:layout_width="wrap_content"-->
+<!--            android:visibility="gone"-->
+<!--            android:layout_height="wrap_content">-->
+
+<!--            <ImageView-->
+<!--                android:id="@+id/iv_wendu"-->
+<!--                android:layout_width="80dp"-->
+<!--                android:layout_height="80dp"-->
+<!--                android:src="@drawable/icon_qxwendu_new" />-->
+
+<!--            <LinearLayout-->
+<!--                android:id="@+id/ll_wendu"-->
+<!--                android:layout_width="wrap_content"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:layout_toRightOf="@id/iv_wendu">-->
+
+<!--                <TextView-->
+<!--                    android:id="@+id/tv_wendu"-->
+<!--                    android:layout_width="wrap_content"-->
+<!--                    android:layout_height="wrap_content"-->
+<!--                    android:text="40°C"-->
+<!--                    android:textColor="#d4237a"-->
+<!--                    android:textSize="32sp" />-->
+
+
+<!--            </LinearLayout>-->
+
+<!--            <TextView-->
+<!--                android:id="@+id/tv_wendu_content"-->
+<!--                android:layout_width="wrap_content"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:layout_below="@id/ll_wendu"-->
+<!--                android:layout_toRightOf="@id/iv_wendu"-->
+<!--                android:lines="2"-->
+<!--                android:text="柜外温度"-->
+<!--                android:textColor="#d4237a"-->
+<!--                android:textSize="22sp" />-->
+
+<!--        </RelativeLayout>-->
+
+<!--        <RelativeLayout-->
+<!--            android:layout_width="wrap_content"-->
+<!--            android:visibility="gone"-->
+<!--            android:layout_height="wrap_content">-->
+
+<!--            <ImageView-->
+<!--                android:id="@+id/iv_shidu"-->
+<!--                android:layout_width="80dp"-->
+<!--                android:layout_height="80dp"-->
+<!--                android:src="@drawable/icon_qxshidu_new" />-->
+
+<!--            <LinearLayout-->
+<!--                android:id="@+id/ll_shidu"-->
+<!--                android:layout_width="wrap_content"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:layout_toRightOf="@id/iv_shidu">-->
+
+<!--                <TextView-->
+<!--                    android:id="@+id/tv_shidu"-->
+<!--                    android:layout_width="wrap_content"-->
+<!--                    android:layout_height="wrap_content"-->
+<!--                    android:text="40°C"-->
+<!--                    android:textColor="#d4237a"-->
+<!--                    android:textSize="32sp" />-->
+
+<!--            </LinearLayout>-->
+
+<!--            <TextView-->
+<!--                android:id="@+id/tv_shidu_content"-->
+<!--                android:layout_width="wrap_content"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:layout_below="@id/ll_shidu"-->
+<!--                android:layout_toRightOf="@id/iv_shidu"-->
+<!--                android:lines="2"-->
+<!--                android:text="柜外湿度"-->
+<!--                android:textColor="#d4237a"-->
+<!--                android:textSize="22sp" />-->
+
+<!--        </RelativeLayout>-->
+
+<!--        <RelativeLayout-->
+<!--            android:layout_marginTop="15dp"-->
+<!--            android:layout_marginBottom="15dp"-->
+<!--            android:layout_width="wrap_content"-->
+<!--            android:layout_height="wrap_content">-->
+
+<!--            <ImageView-->
+<!--                android:id="@+id/iv_lutou"-->
+<!--                android:layout_width="120dp"-->
+<!--                android:layout_height="120dp"-->
+<!--                android:src="@drawable/icon_fashengqi" />-->
+<!--            <LinearLayout-->
+<!--                android:gravity="center"-->
+<!--                android:layout_width="wrap_content"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:layout_toRightOf="@id/iv_lutou"-->
+<!--                android:orientation="vertical">-->
+
+<!--                <TextView-->
+<!--                    android:id="@+id/tv_lutou"-->
+<!--                    android:layout_width="wrap_content"-->
+<!--                    android:layout_height="wrap_content"-->
+<!--                    android:text="40°C"-->
+<!--                    android:textColor="#966035"-->
+<!--                    android:textSize="40sp" />-->
+
+<!--                <TextView-->
+<!--                    android:id="@+id/tv_lutou_content"-->
+<!--                    android:layout_width="wrap_content"-->
+<!--                    android:layout_height="wrap_content"-->
+<!--                    android:text="@string/heartbeat_temp"-->
+<!--                    android:textColor="#966035"-->
+<!--                    android:textSize="40sp" />-->
+<!--            </LinearLayout>-->
+<!--        </RelativeLayout>-->
+
+<!--        <RelativeLayout-->
+<!--            android:visibility="gone"-->
+<!--            android:id="@+id/rl_fashengqi"-->
+<!--            android:layout_width="wrap_content"-->
+<!--            android:layout_height="wrap_content">-->
+
+<!--            <ImageView-->
+<!--                android:id="@+id/iv_fashengqi"-->
+<!--                android:layout_width="80dp"-->
+<!--                android:layout_height="80dp"-->
+<!--                android:src="@drawable/icon_fsq_new" />-->
+
+<!--            <TextView-->
+<!--                android:id="@+id/tv_fashengqi"-->
+<!--                android:layout_width="wrap_content"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:layout_toRightOf="@id/iv_fashengqi"-->
+<!--                android:text="40°C"-->
+<!--                android:textColor="#d4237a"-->
+<!--                android:textSize="32sp" />-->
+
+<!--            <TextView-->
+<!--                android:id="@+id/tv_fashengqi_content"-->
+<!--                android:layout_width="wrap_content"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:layout_below="@id/tv_fashengqi"-->
+<!--                android:layout_toRightOf="@id/iv_fashengqi"-->
+<!--                android:lines="2"-->
+<!--                android:text="蒸汽温度"-->
+<!--                android:textColor="#d4237a"-->
+<!--                android:textSize="22sp" />-->
+
+<!--        </RelativeLayout>-->
 
 
-    </LinearLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 54 - 0
module_backstage/src/main/res/layout/backstage_item_debug_signal.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_marginBottom="1dp"
+    android:layout_height="wrap_content">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="100dp"
+        android:background="@color/c_white"
+        android:gravity="center"
+        android:orientation="horizontal"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" >
+
+
+    <TextView
+        android:id="@+id/tv_address"
+        android:layout_width="0dp"
+        android:layout_weight="0.3"
+        android:layout_height="100dp"
+        android:gravity="center"
+        android:paddingLeft="@dimen/dp_4"
+        android:text="00"
+        android:background="@drawable/shape_line_right"
+        android:textColor="@color/colorGray"
+        android:textSize="46sp" />
+
+    <TextView
+        android:id="@+id/tv_name"
+        android:layout_height="100dp"
+        android:layout_width="0dp"
+        android:layout_weight="2"
+        android:gravity="center"
+        android:paddingLeft="@dimen/dp_4"
+        android:text="IO信号"
+        android:textColor="@color/colorGray"
+        android:textSize="46sp" />
+
+    <ImageView
+        android:id="@+id/iv_state"
+        android:scaleType="center"
+        android:layout_width="0dp"
+        android:layout_weight="0.3"
+        android:layout_height="100dp"
+        android:gravity="center"
+        android:layout_gravity="center_horizontal"
+        android:background="@drawable/shape_line_left"
+        android:src="@drawable/shape_circle" />
+    </LinearLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 2 - 0
serialport-api/src/main/java/com/hboxs/serialport/plc/util/AdvacedUtil.java

@@ -329,6 +329,8 @@ public class AdvacedUtil {
 
     }
 
+
+
 }