@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION")
|
package uts.sdk.modules.shmilyRs232Serial
|
import android.widget.Toast
|
import android_serialport_api.SerialPortFinder
|
import com.shmily.serialport.SerialHelper
|
import com.shmily.serialport.bean.ComBean
|
import com.shmily.serialport.utils.ByteUtil
|
import io.dcloud.uniapp.*
|
import io.dcloud.uniapp.extapi.*
|
import io.dcloud.unicloud.*
|
import io.dcloud.uts.*
|
import io.dcloud.uts.Map
|
import io.dcloud.uts.Set
|
import io.dcloud.uts.UTSAndroid
|
import java.nio.charset.StandardCharsets
|
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.Deferred
|
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.async
|
open class IConnectOptions (
|
@JsonNotNull
|
open var port: String,
|
@JsonNotNull
|
open var baudRate: Number,
|
@JsonNotNull
|
open var dataBits: Number,
|
@JsonNotNull
|
open var stopBits: Number,
|
@JsonNotNull
|
open var parity: Number,
|
@JsonNotNull
|
open var flowCon: Number,
|
) : UTSObject(), IUTSSourceMap {
|
override fun `__$getOriginalPosition`(): UTSSourceMapPosition? {
|
return UTSSourceMapPosition("IConnectOptions", "uni_modules/shmily-rs232-serial/utssdk/interface.uts", 1, 13)
|
}
|
}
|
typealias IDataType = String
|
open class MySerialHelper : SerialHelper, IUTSSourceMap {
|
override fun `__$getOriginalPosition`(): UTSSourceMapPosition? {
|
return UTSSourceMapPosition("MySerialHelper", "uni_modules/shmily-rs232-serial/utssdk/app-android/index.uts", 8, 7)
|
}
|
private var outerSerial: RS232Serial
|
constructor(opt: IConnectOptions, outerSerial: RS232Serial) : super(opt.port, opt.baudRate.toInt()) {
|
this.setBaudRate(opt.baudRate.toInt())
|
this.setDataBits(opt.dataBits.toInt())
|
this.setStopBits(opt.stopBits.toInt())
|
this.setParity(opt.parity.toInt())
|
this.setFlowCon(opt.flowCon.toInt())
|
this.outerSerial = outerSerial
|
}
|
override fun onDataReceived(comBean: ComBean): Unit {
|
if (this.outerSerial.globalMsgCallback != null) {
|
if (this.outerSerial.mDataType == "ASCII") {
|
this.outerSerial.globalMsgCallback?.invoke(String(comBean.bRec, StandardCharsets.UTF_8))
|
} else {
|
this.outerSerial.globalMsgCallback?.invoke(ByteUtil.Bytes2Hex(comBean.bRec))
|
}
|
}
|
}
|
}
|
fun checkHasIntegration(): Boolean {
|
try {
|
Class.forName("com.shmily.serialport.SerialHelper")
|
return true
|
}
|
catch (e: Exception) {
|
return false
|
}
|
}
|
open class RS232Serial : IUTSSourceMap {
|
override fun `__$getOriginalPosition`(): UTSSourceMapPosition? {
|
return UTSSourceMapPosition("RS232Serial", "uni_modules/shmily-rs232-serial/utssdk/app-android/index.uts", 39, 14)
|
}
|
open var serialHelper: MySerialHelper? = null
|
open var mDataType: IDataType = "ASCII"
|
open var globalMsgCallback: ((data: String) -> Unit)? = null
|
constructor(){}
|
open fun getDeviceList(): UTSArray<String> {
|
val serialPortFinder = SerialPortFinder()
|
try {
|
val ports = serialPortFinder.getAllDevicesPath()
|
if (ports.size > 0) {
|
return UTSArray.fromNative(ports)
|
}
|
return utsArrayOf()
|
}
|
catch (e: Throwable) {
|
Toast.makeText(UTSAndroid.getUniActivity(), e.message, Toast.LENGTH_LONG).show()
|
return utsArrayOf()
|
}
|
}
|
open fun isOpen(): Boolean {
|
if (this.serialHelper == null) {
|
return false
|
}
|
return this.serialHelper!!.isOpen()
|
}
|
open fun open(opt: IConnectOptions): Boolean {
|
try {
|
this.serialHelper = MySerialHelper(opt, this)
|
this.serialHelper!!.open()
|
return true
|
}
|
catch (e: Throwable) {
|
console.error(e, " at uni_modules/shmily-rs232-serial/utssdk/app-android/index.uts:71")
|
return false
|
}
|
}
|
open fun sendHex(hexStr: String): Unit {
|
if (this.serialHelper == null) {
|
console.error("Serial port is not open", " at uni_modules/shmily-rs232-serial/utssdk/app-android/index.uts:77")
|
return
|
}
|
if (this.isOpen()) {
|
val hexPure = hexStr.trim().replace(UTSRegExp("\\s", "g"), "")
|
if (hexPure != "") {
|
this.serialHelper!!.sendHex(hexPure)
|
} else {
|
console.error("Hex is empty or null", " at uni_modules/shmily-rs232-serial/utssdk/app-android/index.uts:86")
|
}
|
} else {
|
console.error("Serial port is not open", " at uni_modules/shmily-rs232-serial/utssdk/app-android/index.uts:90")
|
}
|
}
|
open fun sendText(text: String): Unit {
|
if (this.serialHelper == null) {
|
console.error("Serial port is not open", " at uni_modules/shmily-rs232-serial/utssdk/app-android/index.uts:95")
|
return
|
}
|
if (this.isOpen()) {
|
if (text.trim() != "") {
|
this.serialHelper!!.sendTxt(text)
|
} else {
|
console.error("Text is empty or null", " at uni_modules/shmily-rs232-serial/utssdk/app-android/index.uts:103")
|
}
|
} else {
|
console.error("Serial port is not open", " at uni_modules/shmily-rs232-serial/utssdk/app-android/index.uts:107")
|
}
|
}
|
open fun subscribe(dataType: IDataType, callback: (data: String) -> Unit): Unit {
|
this.mDataType = dataType
|
this.globalMsgCallback = callback
|
}
|
open fun unsubscribe(): Unit {
|
this.globalMsgCallback = null
|
}
|
open fun close(): Boolean {
|
if (!this.isOpen()) {
|
console.error("Serial port is not open", " at uni_modules/shmily-rs232-serial/utssdk/app-android/index.uts:120")
|
return false
|
}
|
this.serialHelper!!.close()
|
return true
|
}
|
}
|
open class IConnectOptionsJSONObject : UTSJSONObject() {
|
open lateinit var port: String
|
open lateinit var baudRate: Number
|
open lateinit var dataBits: Number
|
open lateinit var stopBits: Number
|
open lateinit var parity: Number
|
open lateinit var flowCon: Number
|
}
|
fun checkHasIntegrationByJs(): Boolean {
|
return checkHasIntegration()
|
}
|
open class RS232SerialByJs : RS232Serial {
|
constructor() : super() {}
|
open fun getDeviceListByJs(): UTSArray<String> {
|
return this.getDeviceList()
|
}
|
open fun isOpenByJs(): Boolean {
|
return this.isOpen()
|
}
|
open fun openByJs(opt: IConnectOptionsJSONObject): Boolean {
|
return this.open(IConnectOptions(port = opt.port, baudRate = opt.baudRate, dataBits = opt.dataBits, stopBits = opt.stopBits, parity = opt.parity, flowCon = opt.flowCon))
|
}
|
open fun sendHexByJs(hexStr: String): Unit {
|
return this.sendHex(hexStr)
|
}
|
open fun sendTextByJs(text: String): Unit {
|
return this.sendText(text)
|
}
|
open fun subscribeByJs(dataType: IDataType, callback: UTSCallback): Unit {
|
return this.subscribe(dataType, if (callback.fnJS != null) {
|
callback.fnJS
|
} else {
|
callback.fnJS = fun(data: String){
|
callback(data)
|
}
|
callback.fnJS
|
}
|
as (data: String) -> Unit)
|
}
|
open fun unsubscribeByJs(): Unit {
|
return this.unsubscribe()
|
}
|
open fun closeByJs(): Boolean {
|
return this.close()
|
}
|
}
|