From 50f97428177dcf76a096774023768171dcb4b368 Mon Sep 17 00:00:00 2001 From: xiaowusky Date: Mon, 26 Jun 2023 14:09:57 +0800 Subject: [PATCH] =?UTF-8?q?desc:=E8=B0=83=E6=95=B4=E4=B8=B2=E5=8F=A3?= =?UTF-8?q?=E6=A1=86=E6=9E=B6=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../watcher/port/PlatformMultiPortUtils.kt | 12 +++++ .../watcher/port/PlatformSerialPortHelper.kt | 45 ++++++++++++++++++ .../watcher/port/PlatformSinglePortUtils.kt | 15 ++++++ .../common/serialport/ComMultiPortUtils.kt | 13 +++++ .../common/serialport/ComSinglePortUtils.kt | 15 ++++++ .../com/common/serialport/EasySerialPort.kt | 15 +++--- .../com/common/serialport/inter/IHelper.kt | 10 ---- .../serialport/inter/ISerialPortHelper.kt | 15 ++++++ .../inter/NormalSerialPortHelper.kt | 47 +++++++++++++++++++ .../serialport/inter/SerialPortHelper.kt | 29 ------------ .../{CommonPortUtils.kt => MultiPortUtils.kt} | 25 +++++++--- .../serialport/utils/SinglePortUtils.kt | 9 ++-- 12 files changed, 193 insertions(+), 57 deletions(-) create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformMultiPortUtils.kt create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformSerialPortHelper.kt create mode 100644 app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformSinglePortUtils.kt create mode 100644 library-serialPort/src/main/java/com/common/serialport/ComMultiPortUtils.kt create mode 100644 library-serialPort/src/main/java/com/common/serialport/ComSinglePortUtils.kt delete mode 100644 library-serialPort/src/main/java/com/common/serialport/inter/IHelper.kt create mode 100644 library-serialPort/src/main/java/com/common/serialport/inter/ISerialPortHelper.kt create mode 100644 library-serialPort/src/main/java/com/common/serialport/inter/NormalSerialPortHelper.kt delete mode 100644 library-serialPort/src/main/java/com/common/serialport/inter/SerialPortHelper.kt rename library-serialPort/src/main/java/com/common/serialport/utils/{CommonPortUtils.kt => MultiPortUtils.kt} (64%) diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformMultiPortUtils.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformMultiPortUtils.kt new file mode 100644 index 0000000..bdd7107 --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformMultiPortUtils.kt @@ -0,0 +1,12 @@ +package com.yinuo.safetywatcher.watcher.port + +import com.common.serialport.inter.ISerialPortHelper +import com.common.serialport.utils.MultiPortUtils +import com.lztek.toolkit.SerialPort + +object PlatformMultiPortUtils : MultiPortUtils() { + override fun generateHelper(): ISerialPortHelper { + // 每次生成新的helper + return PlatformSerialPortHelper() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformSerialPortHelper.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformSerialPortHelper.kt new file mode 100644 index 0000000..9c0e387 --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformSerialPortHelper.kt @@ -0,0 +1,45 @@ +package com.yinuo.safetywatcher.watcher.port + +import android.util.Log +import com.common.serialport.inter.ISerialPortHelper +import com.lztek.toolkit.SerialPort +import com.yinuo.safetywatcher.watcher.utils.LztekUtil +import java.io.IOException +import java.io.InputStream +import java.io.OutputStream + +/** + * 平台帮助类 + * sdkapi.jar + */ +class PlatformSerialPortHelper : ISerialPortHelper { + + private var mSerialPort: SerialPort? = null + override fun openSerialPort(portPath: String, baudrate: Int): SerialPort? { + try { + mSerialPort = LztekUtil.getLztek()?.openSerialPort(portPath, baudrate) + return mSerialPort + } catch (e: IOException) { + e.printStackTrace() + Log.e("SerialPortHelper", "open port error; " + e.message) + } + return null; + } + + override fun inputStream(): InputStream? { + return mSerialPort?.inputStream + } + + override fun outputStream(): OutputStream? { + return mSerialPort?.outputStream + } + + override fun closePort() { + try { + mSerialPort?.close() + } catch (e: Exception) { + e.printStackTrace() + Log.e("SerialPortHelper", "closePort error; " + e.message) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformSinglePortUtils.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformSinglePortUtils.kt new file mode 100644 index 0000000..f7478fb --- /dev/null +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/PlatformSinglePortUtils.kt @@ -0,0 +1,15 @@ +package com.yinuo.safetywatcher.watcher.port + +import com.common.serialport.inter.ISerialPortHelper +import com.common.serialport.utils.SinglePortUtils +import com.lztek.toolkit.SerialPort + +object PlatformSinglePortUtils : SinglePortUtils() { + + private val helper = PlatformSerialPortHelper() + + override fun generateHelper(): ISerialPortHelper { + // 公用一个helper + return helper + } +} \ No newline at end of file diff --git a/library-serialPort/src/main/java/com/common/serialport/ComMultiPortUtils.kt b/library-serialPort/src/main/java/com/common/serialport/ComMultiPortUtils.kt new file mode 100644 index 0000000..1ae208b --- /dev/null +++ b/library-serialPort/src/main/java/com/common/serialport/ComMultiPortUtils.kt @@ -0,0 +1,13 @@ +package com.common.serialport + +import com.aill.androidserialport.SerialPort +import com.common.serialport.inter.ISerialPortHelper +import com.common.serialport.inter.NormalSerialPortHelper +import com.common.serialport.utils.MultiPortUtils + +object ComMultiPortUtils : MultiPortUtils() { + + override fun generateHelper(): ISerialPortHelper { + return NormalSerialPortHelper() + } +} \ No newline at end of file diff --git a/library-serialPort/src/main/java/com/common/serialport/ComSinglePortUtils.kt b/library-serialPort/src/main/java/com/common/serialport/ComSinglePortUtils.kt new file mode 100644 index 0000000..b299904 --- /dev/null +++ b/library-serialPort/src/main/java/com/common/serialport/ComSinglePortUtils.kt @@ -0,0 +1,15 @@ +package com.common.serialport + +import com.aill.androidserialport.SerialPort +import com.common.serialport.inter.ISerialPortHelper +import com.common.serialport.inter.NormalSerialPortHelper +import com.common.serialport.utils.SinglePortUtils + +object ComSinglePortUtils : SinglePortUtils() { + + private val helper = NormalSerialPortHelper() + + override fun generateHelper(): ISerialPortHelper { + return helper + } +} \ No newline at end of file diff --git a/library-serialPort/src/main/java/com/common/serialport/EasySerialPort.kt b/library-serialPort/src/main/java/com/common/serialport/EasySerialPort.kt index 70f913f..f4cb2da 100644 --- a/library-serialPort/src/main/java/com/common/serialport/EasySerialPort.kt +++ b/library-serialPort/src/main/java/com/common/serialport/EasySerialPort.kt @@ -1,17 +1,16 @@ package com.common.serialport import android.util.Log -import com.aill.androidserialport.SerialPort -import com.common.serialport.inter.SerialPortHelper import com.common.queue.TaskScheduler +import com.common.serialport.inter.ISerialPortHelper import java.io.IOException -class EasySerialPort( +class EasySerialPort( private val portPath: String, private val baudRate: Int, + private val helper: ISerialPortHelper, private val mReceiver: (ByteArray) -> Unit ) : Runnable { - private var mPort: SerialPort? = null private var mStartReceiveMsg = true private var mAutoRetryConnect = false private val mTaskScheduler = TaskScheduler() @@ -21,7 +20,7 @@ class EasySerialPort( } private fun openSerialPort() { - mPort = SerialPortHelper.openSerialPort(portPath, baudRate) + val mPort = helper.openSerialPort(portPath, baudRate) mPort?.let { mStartReceiveMsg = true Thread(this).start() @@ -33,7 +32,7 @@ class EasySerialPort( */ open fun closePort() { mStartReceiveMsg = false - SerialPortHelper.closePort(mPort) + helper.closePort() } /** @@ -42,7 +41,7 @@ class EasySerialPort( override fun run() { while (mStartReceiveMsg) { try { - val ips = mPort?.inputStream + val ips = helper?.inputStream() val readByte = ips?.available()?.let { ByteArray(it) } readByte?.let { val size = ips.read(it) @@ -70,7 +69,7 @@ class EasySerialPort( open fun write(data: ByteArray) { val task = SendMsgTask(data) { try { - val outputStream = mPort?.outputStream + val outputStream = helper?.outputStream() outputStream?.write(it) outputStream?.flush() } catch (e: IOException) { diff --git a/library-serialPort/src/main/java/com/common/serialport/inter/IHelper.kt b/library-serialPort/src/main/java/com/common/serialport/inter/IHelper.kt deleted file mode 100644 index 8f0fbea..0000000 --- a/library-serialPort/src/main/java/com/common/serialport/inter/IHelper.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.common.serialport.inter - -import com.aill.androidserialport.SerialPort - -interface IHelper { - - fun openSerialPort(portPath: String, baudrate: Int): SerialPort?; - - fun closePort(port: SerialPort?); -} \ No newline at end of file diff --git a/library-serialPort/src/main/java/com/common/serialport/inter/ISerialPortHelper.kt b/library-serialPort/src/main/java/com/common/serialport/inter/ISerialPortHelper.kt new file mode 100644 index 0000000..26f76a9 --- /dev/null +++ b/library-serialPort/src/main/java/com/common/serialport/inter/ISerialPortHelper.kt @@ -0,0 +1,15 @@ +package com.common.serialport.inter + +import java.io.InputStream +import java.io.OutputStream + +interface ISerialPortHelper { + + fun openSerialPort(portPath: String, baudrate: Int): T? + + fun closePort() + + fun inputStream(): InputStream? + + fun outputStream(): OutputStream? +} \ No newline at end of file diff --git a/library-serialPort/src/main/java/com/common/serialport/inter/NormalSerialPortHelper.kt b/library-serialPort/src/main/java/com/common/serialport/inter/NormalSerialPortHelper.kt new file mode 100644 index 0000000..36007f6 --- /dev/null +++ b/library-serialPort/src/main/java/com/common/serialport/inter/NormalSerialPortHelper.kt @@ -0,0 +1,47 @@ +package com.common.serialport.inter + +import android.util.Log +import com.aill.androidserialport.SerialPort +import java.io.File +import java.io.IOException +import java.io.InputStream +import java.io.OutputStream + +/** + * 通用帮助类 + * implementation 'com.aill:AndroidSerialPort:1.0.8' + */ +class NormalSerialPortHelper : ISerialPortHelper { + + private var mSerialPort: SerialPort? = null + + override fun openSerialPort(portPath: String, baudrate: Int): SerialPort? { + try { + mSerialPort = SerialPort(File(portPath), baudrate, 0) + return mSerialPort + } catch (e: IOException) { + e.printStackTrace() + Log.e("SerialPortHelper", "open port error; " + e.message) + } + return null; + } + + override fun inputStream(): InputStream? { + return mSerialPort?.inputStream + } + + override fun outputStream(): OutputStream? { + return mSerialPort?.outputStream + } + + override fun closePort() { + try { + mSerialPort?.close() + mSerialPort?.inputStream?.close() + mSerialPort?.outputStream?.close() + } catch (e: Exception) { + e.printStackTrace() + Log.e("SerialPortHelper", "closePort error; " + e.message) + } + } +} \ No newline at end of file diff --git a/library-serialPort/src/main/java/com/common/serialport/inter/SerialPortHelper.kt b/library-serialPort/src/main/java/com/common/serialport/inter/SerialPortHelper.kt deleted file mode 100644 index 8cecf6a..0000000 --- a/library-serialPort/src/main/java/com/common/serialport/inter/SerialPortHelper.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.common.serialport.inter - -import android.util.Log -import com.aill.androidserialport.SerialPort -import java.io.File -import java.io.IOException - -object SerialPortHelper : IHelper { - override fun openSerialPort(portPath: String, baudrate: Int): SerialPort? { - try { - return SerialPort(File(portPath), baudrate, 0); - } catch (e: IOException) { - e.printStackTrace() - Log.e("SerialPortHelper", "open port error; " + e.message) - } - return null; - } - - override fun closePort(port: SerialPort?) { - try { - port?.close() - port?.inputStream?.close() - port?.outputStream?.close() - } catch (e: Exception) { - e.printStackTrace() - Log.e("SerialPortHelper", "closePort error; " + e.message) - } - } -} \ No newline at end of file diff --git a/library-serialPort/src/main/java/com/common/serialport/utils/CommonPortUtils.kt b/library-serialPort/src/main/java/com/common/serialport/utils/MultiPortUtils.kt similarity index 64% rename from library-serialPort/src/main/java/com/common/serialport/utils/CommonPortUtils.kt rename to library-serialPort/src/main/java/com/common/serialport/utils/MultiPortUtils.kt index f308f5a..29046f5 100644 --- a/library-serialPort/src/main/java/com/common/serialport/utils/CommonPortUtils.kt +++ b/library-serialPort/src/main/java/com/common/serialport/utils/MultiPortUtils.kt @@ -1,15 +1,22 @@ package com.common.serialport.utils import com.common.serialport.EasySerialPort +import com.common.serialport.inter.ISerialPortHelper /** * @author xiaowusky * 操作串口工具类 * 可以同时处理多个串口操作 */ -object CommonPortUtils { +abstract class MultiPortUtils { - private val mPortMaps = HashMap() + private val mPortMaps = HashMap?>() + + /** + * 生成ISerialPortHelper对象 + * 又子类重写,决定具体的实现对象 + */ + abstract fun generateHelper(): ISerialPortHelper /** * 打开串口 @@ -25,8 +32,8 @@ object CommonPortUtils { if (mPortMaps.containsKey(portPath)) { return } - val easyPort = EasySerialPort(portPath, baudRate, mReceiver) - mPortMaps.put(portPath, easyPort) + val easyPort = EasySerialPort(portPath, baudRate, generateHelper(), mReceiver) + mPortMaps[portPath] = easyPort } /** @@ -35,7 +42,9 @@ object CommonPortUtils { * @param data 消息byte数组 */ fun sendMsg(portPath: String, data: ByteArray) { - SinglePortUtils.mEasyPort?.write(data) + if (mPortMaps.containsKey(portPath)) { + mPortMaps[portPath]?.write(data) + } } /** @@ -44,7 +53,9 @@ object CommonPortUtils { * @param data String类型消息,内部会toByteArray */ fun sendMsg(portPath: String, data: String) { - SinglePortUtils.mEasyPort?.write(data.toByteArray()) + if (mPortMaps.containsKey(portPath)) { + mPortMaps[portPath]?.write(data.toByteArray()) + } } /** @@ -53,7 +64,7 @@ object CommonPortUtils { */ fun release(portPath: String) { if (mPortMaps.containsKey(portPath)) { - mPortMaps.get(portPath)?.closePort() + mPortMaps[portPath]?.closePort() } mPortMaps.remove(portPath) } diff --git a/library-serialPort/src/main/java/com/common/serialport/utils/SinglePortUtils.kt b/library-serialPort/src/main/java/com/common/serialport/utils/SinglePortUtils.kt index 0fe21b0..6dbbb74 100644 --- a/library-serialPort/src/main/java/com/common/serialport/utils/SinglePortUtils.kt +++ b/library-serialPort/src/main/java/com/common/serialport/utils/SinglePortUtils.kt @@ -2,13 +2,16 @@ package com.common.serialport.utils import com.common.serialport.EasySerialPort +import com.common.serialport.inter.ISerialPortHelper /** * @author xiaowusky * 操作单个串口工具类 */ -object SinglePortUtils { - var mEasyPort: EasySerialPort? = null +abstract class SinglePortUtils { + private var mEasyPort: EasySerialPort? = null + + abstract fun generateHelper(): ISerialPortHelper /** * 初始化参数 @@ -21,7 +24,7 @@ object SinglePortUtils { baudRate: Int, mReceiver: (ByteArray) -> Unit ) { - mEasyPort = EasySerialPort(portPath, baudRate, mReceiver) + mEasyPort = EasySerialPort(portPath, baudRate, generateHelper(), mReceiver) } /**