Commit a2a5b73b authored by 马乐's avatar 马乐

1.串口通信类优化

parent beb1af4a
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
// id 'kotlin-kapt'
}
android {
namespace 'com.waytous.anticollision'
compileSdk 32
compileSdk 33
defaultConfig {
applicationId "com.waytous.anticollision"
minSdk 21
targetSdk 32
targetSdk 33
versionCode 1
versionName "1.0"
......@@ -41,25 +42,26 @@ android {
dependencies {
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0'
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1'
implementation 'androidx.navigation:navigation-ui-ktx:2.4.1'
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
implementation 'com.mapbox.maps:android:10.11.0'
implementation 'com.mapbox.mapboxsdk:mapbox-sdk-geojson:6.9.0'
implementation 'io.netty:netty-buffer:4.1.87.Final'
implementation 'io.github.toggery:jt808-codec:2.0.3'
implementation 'com.blankj:utilcodex:1.31.1'
implementation 'org.jetbrains.kotlin:kotlin-reflect:1.7.22'
implementation 'com.blankj:utilcodex:1.31.1'
implementation 'org.jetbrains.kotlin:kotlin-reflect:1.7.20'
implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2'
implementation 'androidx.work:work-runtime-ktx:2.8.1'
implementation 'com.github.mik3y:usb-serial-for-android:3.5.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
\ No newline at end of file
......@@ -4,7 +4,12 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<!-- 定位权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:name=".MyApp"
......
package com.waytous.anticollision
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import com.blankj.utilcode.util.BarUtils
import com.blankj.utilcode.util.ColorUtils
import com.waytous.anticollision.databinding.ActivitySplashBinding
import com.waytous.anticollision.ui.MainActivity
class SplashActivity : AppCompatActivity() {
......@@ -23,7 +24,9 @@ class SplashActivity : AppCompatActivity() {
"${getString(R.string.text_progress, 57)}%".also { binding.textProgress.text = it }
binding.loadingProgressBar.progress = 57
binding.loadingProgressBar.show()
binding.loadingProgressBar.postDelayed({
startActivity(Intent(this,MainActivity::class.java))
},2000)
}
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import com.hoho.android.usbserial.driver.FtdiSerialDriver
import com.hoho.android.usbserial.driver.ProbeTable
import com.hoho.android.usbserial.driver.UsbSerialProber
class CustomProbe {
companion object{
......
package com.waytous.anticollision.serial
import android.hardware.usb.UsbDevice
import com.hoho.android.usbserial.driver.UsbSerialDriver
/**
* USB串口设备信息
* @param deviceId 设备id
* @param portNum usb port id
* @param baudRate 波特率
* */
data class SerialDeviceInfo(val deviceId:Int,val portNum:Int,val baudRate:Int)
\ No newline at end of file
data class SerialDeviceInfo(
val deviceId: Int,
val portNum: Int,
val baudRate: Int,
val device: UsbDevice,
val driver: UsbSerialDriver?
)
\ No newline at end of file
......@@ -4,6 +4,8 @@ import android.hardware.usb.UsbManager
import com.hoho.android.usbserial.driver.UsbSerialDriver
import com.hoho.android.usbserial.driver.UsbSerialProber
const val BAUD_RATE = 19200
fun UsbManager.refresh():List<SerialDeviceInfo>{
val usbDefaultProbe = UsbSerialProber.getDefaultProber()
val usbCustomProbe: UsbSerialProber = CustomProbe.getCustomProbe()
......@@ -13,12 +15,13 @@ fun UsbManager.refresh():List<SerialDeviceInfo>{
if (driver == null) {
driver = usbCustomProbe.probeDevice(device)
}
// if (driver != null) {
// deviceInfos.add(SerialDeviceInfo(device.deviceId,device.po))
// for (port in driver.ports.indices) listItems.add(ListItem(device, port, driver))
// } else {
// listItems.add(ListItem(device, 0, null))
// }
if (driver != null) {
driver.ports.forEach { serialPort->
deviceInfos.add(SerialDeviceInfo(device.deviceId,serialPort.portNumber,BAUD_RATE,device,driver))
}
} else {
deviceInfos.add(SerialDeviceInfo(device.deviceId,0,BAUD_RATE,device,null))
}
}
return deviceInfos
}
\ No newline at end of file
......@@ -6,8 +6,12 @@ import com.waytous.anticollision.BuildConfig
import com.waytous.anticollision.config.DeviceConfig
import com.waytous.anticollision.config.Settings
import com.waytous.anticollision.listener.SessionListener
import com.waytous.anticollision.utils.*
import io.github.toggery.jt808.codec.*
import com.waytous.anticollision.utils.ConnectStatus
import com.waytous.anticollision.utils.Error
import com.waytous.anticollision.utils.NamedThreadFactory
import com.waytous.anticollision.utils.SignInStatus
import io.github.toggery.jt808.codec.Message
import io.github.toggery.jt808.codec.MessageMetadata
import io.github.toggery.jt808.messagebody.*
import io.netty.buffer.ByteBuf
import io.netty.buffer.UnpooledByteBufAllocator
......@@ -73,7 +77,7 @@ internal class Schedule {
* jt808网络会话管理
* @author male
* */
internal class Session : ConnectListener, SyncMessageListener<AbstractToStringJoiner> {
class Session : ConnectListener, SyncMessageListener<AbstractToStringJoiner> {
/**
* 消息内容解析器
......@@ -287,7 +291,6 @@ internal class Session : ConnectListener, SyncMessageListener<AbstractToStringJo
* 开始心跳
* */
private fun startHeartbeat() {
scheduleFutureTask = scheduler.scheduleAtFixedRate(
::sendPing,
0,
......@@ -323,15 +326,15 @@ internal class Session : ConnectListener, SyncMessageListener<AbstractToStringJo
* 发送心跳
* */
private fun doSendMessage(name: String) = if (buffs.isNotEmpty()) {
val byteArray = ByteArray(buffs[0].readableBytes())
buffs[0].readBytes(byteArray)
if (BuildConfig.DEBUG) {
LogUtils.d("【$name】:${HexUtil.dump(byteArray)}")
} else {
LogUtils.file("【$name】:${HexUtil.dump(byteArray)}")
}
tcpManager.send(byteArray)
synchronized(buffs) {
val byteArray = ByteArray(buffs[0].readableBytes())
buffs[0].readBytes(byteArray)
if (BuildConfig.DEBUG) {
LogUtils.d("【$name】:${HexUtil.dump(byteArray)}")
} else {
LogUtils.file("【$name】:${HexUtil.dump(byteArray)}")
}
tcpManager.send(byteArray)
buffs.removeAt(0)
}
true
......
......@@ -32,6 +32,8 @@ class MainActivity : AppCompatActivity() {
DeviceConfig.HostConfig.host = "47.100.112.218"
DeviceConfig.HostConfig.port = 8808
// DeviceConfig.HostConfig.host = "192.168.9.48"
// DeviceConfig.HostConfig.port = 1022
val session = Session()
thread { session.login() }
}
......
package com.waytous.anticollision.utils
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
/**
* 连接状态
* */
......@@ -29,4 +32,15 @@ enum class Error(val reason:String = "success") {
ServerUnknownError("server unknown error"),
JT808EncodeError("jt808 codec encode error"),
JT808DecodeError("jt808 codec decode error")
}
fun AppCompatActivity.checkSelfPermissionCompat(permission: String) =
ActivityCompat.checkSelfPermission(this, permission)
fun AppCompatActivity.shouldShowRequestPermissionRationaleCompat(permission: String) =
ActivityCompat.shouldShowRequestPermissionRationale(this, permission)
fun AppCompatActivity.requestPermissionsCompat(permissionsArray: Array<String>,
requestCode: Int) {
ActivityCompat.requestPermissions(this, permissionsArray, requestCode)
}
\ No newline at end of file
package com.waytous.anticollision.wm
import android.content.Context
import androidx.work.Worker
import androidx.work.WorkerParameters
class ConnectionWork(appContext: Context, workerParams: WorkerParameters): Worker(appContext,workerParams) {
override fun doWork(): Result {
return Result.retry()
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment