Procházet zdrojové kódy

项目整体适配端口配置功能

Frankensteinly před 9 měsíci
rodič
revize
7f83f87b23

+ 3 - 0
app/src/main/java/com/grkj/iscs/modbus/ModBusController.kt

@@ -112,6 +112,9 @@ object ModBusController {
         modBusManager?.stop()
     }
 
+    fun isRunning(): Boolean? {
+        return modBusManager?.isRunning()
+    }
 
     /*****************************************************************************************/
 

+ 44 - 4
app/src/main/java/com/grkj/iscs/modbus/PortManager.kt

@@ -4,6 +4,8 @@ import android.content.Context
 import androidx.annotation.WorkerThread
 import com.epton.sdk.SerialPort
 import com.grkj.iscs.util.Executor
+import com.grkj.iscs.util.SPUtils
+import com.grkj.iscs.util.ToastUtils
 import com.grkj.iscs.util.log.LogUtil
 import java.io.File
 import java.io.IOException
@@ -116,6 +118,38 @@ class PortManager private constructor(
             }
         }
 
+        /**
+         * 打开串口
+         * @param port 串口号,从 0 开始
+         * @param bps 波特率,正整数
+         */
+        @WorkerThread
+        fun open(port: String?, bps: Int) : PortManager? {
+            var blocked = true
+            val thread = Thread.currentThread()
+            Executor.delayOnMain(500) {
+                // 如果线程被阻塞达到 1 秒,则打断唤醒
+                if (blocked) {
+                    LogUtil.w("超 0.5 秒未打开串口,打断唤醒")
+                    thread.interrupt()
+                }
+            }
+            try {
+                val file = File(port)
+                LogUtil.i("连接 port file")
+                SerialPort(file, bps, 0).run {
+                    blocked = false
+                    LogUtil.i("建立 SerialPort")
+                    return PortManager(inputStream, outputStream)
+                }
+            } catch (e: Exception) {
+                blocked = false
+                LogUtil.e("异常 : ${e.message}")
+                ToastUtils.tip("串口[${port}, ${bps}]打开失败[${e.javaClass.simpleName}]${e.message}")
+                return null
+            }
+        }
+
 
         /**
          * 打开主控板
@@ -123,11 +157,17 @@ class PortManager private constructor(
         @WorkerThread
         fun openCtrlBord(ctx: Context) : PortManager? {
             // TODO 端口号待定:大屏调试设备-1,小屏调试设备-0
-            val port = 1
+//            val port = 4
+//            val bps = 115200
+//            val usb = true
+//            LogUtil.i("主控板 port = ${port}, bps = ${bps}, usb = $usb")
+//            return open(port, bps, usb)
+
+
+            val port = SPUtils.getPortConfig(ctx)
             val bps = 115200
-            val usb = false
-            LogUtil.i("主控板 port = ${port}, bps = ${bps}, usb = $usb")
-            return open(port, bps, usb)
+            LogUtil.i("主控板 port = $port, bps = $bps")
+            return open(port, bps)
         }
     }
 

+ 7 - 4
app/src/main/java/com/grkj/iscs/view/activity/LoginActivity.kt

@@ -46,11 +46,11 @@ class LoginActivity : BaseMvpActivity<ILoginView, LoginPresenter, ActivityLoginB
             }
 
         // TODO 只适配armeabi-v7a
-        handleLoading(true, resources.getString(R.string.device_is_initializing))
+//        handleLoading(true, resources.getString(R.string.device_is_initializing))
         BusinessManager.connectDock(true)
-        Executor.delayOnMain(50000) {
-            handleLoading(false)
-        }
+//        Executor.delayOnMain(2000) {
+//            handleLoading(false)
+//        }
     }
 
     /**
@@ -73,6 +73,9 @@ class LoginActivity : BaseMvpActivity<ILoginView, LoginPresenter, ActivityLoginB
 
     override fun onResume() {
         super.onResume()
+        if (ModBusController.isRunning() != true) {
+            BusinessManager.connectDock(true)
+        }
         presenter?.registerListener()
     }
 

+ 3 - 0
app/src/main/java/com/grkj/iscs/view/presenter/SystemSettingPresenter.kt

@@ -2,7 +2,9 @@ package com.grkj.iscs.view.presenter
 
 import com.google.gson.Gson
 import com.google.gson.reflect.TypeToken
+import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.R
+import com.grkj.iscs.modbus.ModBusController
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_COLLECT
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_ELEC_LOCK_BOARD
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_KEY
@@ -93,6 +95,7 @@ class SystemSettingPresenter : BasePresenter<ISystemSettingView>() {
             return
         }
         ToastUtils.tip(R.string.save_success)
+        BusinessManager.disconnectDock()
         SPUtils.savePortConfig(mContext!!, port)
     }
 }