问题描述
我在Android上的2种不同活动中未能成功打开串行端口。在主要活动上打开一个串行端口,一切正常。我关闭它,然后在新活动中将其重新打开,它下载约370个字节并停止。我正在使用Mik3y库,并且在两个活动中都使用完全相同的连接和接收代码。在第二个活动中我缺少什么吗?这是这两个活动的代码。
val mListener: SerialInputOutputManager.Listener =
object : SerialInputOutputManager.Listener {
override fun onNewData(data: ByteArray) {
// LED.setTextColor(Color.parseColor("#FFFF00"))
// mainLooper.post(() -> {
for (i in 0 until data.size) rsdash[len + i] = data[i]
len = len + data.size
Air2.setText(len.toString())
if (len >= 387){ // && (efitable==0 || efitable==2)) {
_serial.setRTS(false)
len=0
chksum = 0
for (i in 0 until 384) chksum = chksum + (rsdash[i].toInt() and 0xFF)
chksum = (chksum and 0xFFFF)
chktst= (rsdash[385].toInt() and 0xFF shl 8 or (rsdash[384].toInt() and 0xFF)).toInt()
if (chksum == chktst) {
_serial.write("R".toByteArray(),4) //82
if(exit>1) {
if (con == true) {
_serial.setRTS(false)
_serial.close()
_connected = false
con = false
}
}
display(rsdash)
// Thread.sleep(51)
_serial.setRTS(true)
}
} else {
_serial.purgeHwBuffers(true,true)
_serial.write("R".toByteArray(),4)
// ++cnt
// Air2.setText(cnt.toString())
// Thread.sleep(200)
_serial.setRTS(true)
// display(rsdash)
//LED.setTextColor(Color.parseColor("#00FFFF"))
// _serial.purgeHwBuffers(true,true)
}
}
override fun onRunError(e: Exception) {
_serial.setRTS(false)
len=0
_serial.purgeHwBuffers(true,true)
// Thread.sleep(200)
_serial.setRTS(true)
}
}
fun connect(): Boolean {
val drivers = UsbSerialProber.getDefaultProber().findAllDrivers(_usbManager)
if (drivers.isEmpty()) {
return false
}
// LED.setTextColor(Color.parseColor("#3F3F3F"))
val driver = drivers[0]
val _connection = _usbManager.openDevice(driver.device)
if (_connection == null) {
_connected = false
return false
}
// LED.setTextColor(Color.parseColor("#FFFFFF"))
val port = driver.ports[0]
if (port == null) {
_connected = false
return false
}
// LED.setTextColor(Color.parseColor("#0000FF"))
try {
port.open(_connection)
port.setParameters(
115200,8,UsbSerialPort.STOPBITS_1,UsbSerialPort.PARITY_NONE
)
port.purgeHwBuffers(true,true)
_serial = port
_connected = true
// if (withIoManager) {
// usbIoManager = SerialInputOutputManager(usbSerialPort)
// Executors.newSingleThreadExecutor().submit(usbIoManager)
// }
//usbIoManager = SerialInputOutputManager(_serial,this)
usbIoManager = SerialInputOutputManager(_serial,mListener)
Executors.newSingleThreadExecutor().submit(usbIoManager)
// val submit = Executors.newSingleThreadExecutor().submit(usbIoManager)
// Executors.newSingleThreadExecutor().asCoroutinedispatcher(usbIoManager)
_serial.setRTS(true)
return true
} catch (e: IOException) {
//e.printstacktrace()
if(_connected==true){port.close()}
_connected = false
return false
}
}
// mainLooper = Handler(Looper.getMainLooper())
broadcastReceiver = object : broadcastReceiver() {
override fun onReceive(context: Context,intent: Intent) {
if (intent.action == INTENT_ACTION_GRANT_USB) {
usbPermission = if (intent.getBooleanExtra(
UsbManager.EXTRA_PERMISSION_GRANTED,false
)
) UsbPermission.Granted else UsbPermission.Denied
con=connect()
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)