Commit beb1af4a authored by 马乐's avatar 马乐

1.增加串口数据repository

parent db5fb933
...@@ -41,12 +41,12 @@ android { ...@@ -41,12 +41,12 @@ android {
dependencies { dependencies {
implementation 'androidx.core:core-ktx:1.8.0' implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.7.0' implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3' implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3' implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
implementation 'com.squareup.okhttp3:okhttp:4.10.0' implementation 'com.squareup.okhttp3:okhttp:4.10.0'
...@@ -55,11 +55,11 @@ dependencies { ...@@ -55,11 +55,11 @@ dependencies {
implementation 'io.netty:netty-buffer:4.1.87.Final' implementation 'io.netty:netty-buffer:4.1.87.Final'
implementation 'io.github.toggery:jt808-codec:2.0.3' implementation 'io.github.toggery:jt808-codec:2.0.3'
implementation 'com.blankj:utilcodex:1.31.1' implementation 'com.blankj:utilcodex:1.31.1'
implementation 'com.blankj:utilcodex:1.31.1'
implementation 'org.jetbrains.kotlin:kotlin-reflect:1.7.22' implementation 'org.jetbrains.kotlin:kotlin-reflect:1.7.22'
implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2' implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2'
implementation 'androidx.work:work-runtime-ktx:2.7.1' 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' testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.4' androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
} }
\ No newline at end of file
...@@ -18,10 +18,12 @@ class SplashActivity : AppCompatActivity() { ...@@ -18,10 +18,12 @@ class SplashActivity : AppCompatActivity() {
//设置隐藏虚拟按键 //设置隐藏虚拟按键
BarUtils.setNavBarVisibility(this,false); BarUtils.setNavBarVisibility(this,false);
binding = ActivitySplashBinding.inflate(layoutInflater) binding = ActivitySplashBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
"${getString(R.string.text_progress, 57)}%".also { binding.textProgress.text = it } "${getString(R.string.text_progress, 57)}%".also { binding.textProgress.text = it }
binding.loadingProgressBar.progress = 57 binding.loadingProgressBar.progress = 57
binding.loadingProgressBar.show() binding.loadingProgressBar.show()
} }
} }
\ No newline at end of file
package com.waytous.anticollision.serial
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{
fun getCustomProbe(): UsbSerialProber {
val customTable = ProbeTable ()
customTable.addProduct(
0x1234,
0x0001,
FtdiSerialDriver::class.java
) // e.g. device with custom VID+PID
customTable.addProduct(
0x1234,
0x0002,
FtdiSerialDriver::class.java
) // e.g. device with custom VID+PID
return UsbSerialProber(customTable)
}
}
}
\ No newline at end of file
package com.waytous.anticollision.serial
/**
* 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
package com.waytous.anticollision.serial
import android.hardware.usb.UsbManager
import com.hoho.android.usbserial.driver.UsbSerialDriver
import com.hoho.android.usbserial.driver.UsbSerialProber
fun UsbManager.refresh():List<SerialDeviceInfo>{
val usbDefaultProbe = UsbSerialProber.getDefaultProber()
val usbCustomProbe: UsbSerialProber = CustomProbe.getCustomProbe()
val deviceInfos = mutableListOf<SerialDeviceInfo>()
for (device in deviceList.values) {
var driver: UsbSerialDriver? = usbDefaultProbe.probeDevice(device)
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))
// }
}
}
\ No newline at end of file
package com.waytous.anticollision.ui.home
import android.hardware.usb.UsbDevice
import android.hardware.usb.UsbManager
import com.hoho.android.usbserial.driver.UsbSerialPort
import com.hoho.android.usbserial.driver.UsbSerialProber
import com.hoho.android.usbserial.util.SerialInputOutputManager
import com.waytous.anticollision.serial.CustomProbe
class HomeRepository(
private val usbManager: UsbManager,
val withIoManager: Boolean
): SerialInputOutputManager.Listener{
private lateinit var usbIoManager: SerialInputOutputManager
private var usbPermission: UsbPermission = UsbPermission.Unknown
private var connected:Boolean = false
enum class UsbPermission{
Unknown,
Requested,
Granted,
Denied
}
fun connect(deviceId:Int, portNum:Int,baudRate:Int,requestUsbPermissions:()->Unit){
var device : UsbDevice?=
usbManager.deviceList.values.find { it.deviceId == deviceId } ?: return
var driver = UsbSerialProber.getDefaultProber().probeDevice(device)
if (driver == null) {
driver = CustomProbe.getCustomProbe().probeDevice(device)
}
if (driver == null) {
return
}
if (driver.ports.size < portNum) {
return
}
val usbSerialPort = driver.ports[portNum]
val usbConnection = usbManager.openDevice(driver.device)
if (usbConnection == null && usbPermission == UsbPermission.Unknown && !usbManager.hasPermission(
driver.device
)
) {
usbPermission = UsbPermission.Requested
requestUsbPermissions()
return
}
try {
usbSerialPort.open(usbConnection)
usbSerialPort.setParameters(baudRate, 8, 1, UsbSerialPort.PARITY_NONE)
if (withIoManager) {
usbIoManager = SerialInputOutputManager(usbSerialPort, this)
usbIoManager.start()
}
connected = true
} catch (e: Exception) {
disconnect()
}
}
private fun disconnect() {
}
override fun onNewData(data: ByteArray?) {
TODO("Not yet implemented")
}
override fun onRunError(e: java.lang.Exception?) {
TODO("Not yet implemented")
}
}
\ No newline at end of file
...@@ -3,11 +3,22 @@ package com.waytous.anticollision.ui.home ...@@ -3,11 +3,22 @@ package com.waytous.anticollision.ui.home
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.hoho.android.usbserial.util.SerialInputOutputManager
import java.lang.Exception
class HomeViewModel : ViewModel() { class HomeViewModel : ViewModel(), SerialInputOutputManager.Listener{
private val _text = MutableLiveData<String>().apply { private val _text = MutableLiveData<String>().apply {
value = "This is home Fragment" value = "This is home Fragment"
} }
val text: LiveData<String> = _text val text: LiveData<String> = _text
override fun onNewData(data: ByteArray?) {
}
override fun onRunError(e: Exception?) {
}
} }
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:width="103dp" android:height="103dp">
<shape android:shape="rectangle">
<solid android:color="#ffffffff" />
<corners android:topLeftRadius="0dp" android:topRightRadius="0dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp" />
</shape>
</item>
<item android:width="61dp" android:height="66dp" android:top="17dp" android:left="19.5dp">
<shape android:shape="rectangle">
<solid android:color="#ffd8d8d8" />
<corners android:topLeftRadius="0dp" android:topRightRadius="0dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp" />
</shape>
</item>
<item android:width="33dp" android:height="34dp" android:left="33.dp" android:top="1.5dp">
<shape android:shape="rectangle">
<solid android:color="#ffd8d8d8" />
<corners android:topLeftRadius="0dp" android:topRightRadius="0dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp" />
</shape>
</item>
<item android:width="50dp" android:height="42dp" android:left="1.5dp" android:top="1.5dp">
<shape android:shape="rectangle">
<solid android:color="#ffff0000" />
</shape>
</item>
<item android:width="50dp" android:height="42dp" android:left="51.5dp" android:top="1.5dp">
<shape android:shape="rectangle">
<solid android:color="#ffffcb00" />
</shape>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--3个层的顺序即为显示时的叠加顺序-->
<!--背景色-->
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="#fff2f2f2" />
<corners android:radius="5dp" />
<item android:name="android:shadowColor">#17000000</item>
<item android:name="android:shadowDx">0</item>
<item android:name="android:shadowDy">1</item>
</shape>
</item>
<!--一级进度条的颜色,也可以直接替换成图片-->
<item android:id="@android:id/progress">
<clip>
<shape android:shape="rectangle">
<gradient android:type="linear" android:useLevel="true" android:startColor="#ff008aee" android:endColor="#ff0052d8" android:angle="180" />
<corners android:radius="5dp" />
<item android:name="android:shadowColor">#4d000000</item>
<item android:name="android:shadowDx">0</item>
<item android:name="android:shadowDy">1</item>
</shape>
</clip>
</item>
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 0x0403 / 0x60??: FTDI -->
<usb-device vendor-id="1027" product-id="24577" /> <!-- 0x6001: FT232R -->
<usb-device vendor-id="1027" product-id="24592" /> <!-- 0x6010: FT2232H -->
<usb-device vendor-id="1027" product-id="24593" /> <!-- 0x6011: FT4232H -->
<usb-device vendor-id="1027" product-id="24596" /> <!-- 0x6014: FT232H -->
<usb-device vendor-id="1027" product-id="24597" /> <!-- 0x6015: FT230X, FT231X, FT234XD -->
<!-- 0x10C4 / 0xEA??: Silabs CP210x -->
<usb-device vendor-id="4292" product-id="60000" /> <!-- 0xea60: CP2102 and other CP210x single port devices -->
<usb-device vendor-id="4292" product-id="60016" /> <!-- 0xea70: CP2105 -->
<usb-device vendor-id="4292" product-id="60017" /> <!-- 0xea71: CP2108 -->
<!-- 0x067B / 0x23?3: Prolific PL2303x -->
<usb-device vendor-id="1659" product-id="8963" /> <!-- 0x2303: PL2303HX, HXD, TA, ... -->
<usb-device vendor-id="1659" product-id="9123" /> <!-- 0x23a3: PL2303GC -->
<usb-device vendor-id="1659" product-id="9139" /> <!-- 0x23b3: PL2303GB -->
<usb-device vendor-id="1659" product-id="9155" /> <!-- 0x23c3: PL2303GT -->
<usb-device vendor-id="1659" product-id="9171" /> <!-- 0x23d3: PL2303GL -->
<usb-device vendor-id="1659" product-id="9187" /> <!-- 0x23e3: PL2303GE -->
<usb-device vendor-id="1659" product-id="9203" /> <!-- 0x23f3: PL2303GS -->
<!-- 0x1a86 / 0x?523: Qinheng CH34x -->
<usb-device vendor-id="6790" product-id="21795" /> <!-- 0x5523: CH341A -->
<usb-device vendor-id="6790" product-id="29987" /> <!-- 0x7523: CH340 -->
<!-- CDC driver -->
<usb-device vendor-id="9025" /> <!-- 0x2341 / ......: Arduino -->
<usb-device vendor-id="5824" product-id="1155" /> <!-- 0x16C0 / 0x0483: Teensyduino -->
<usb-device vendor-id="1003" product-id="8260" /> <!-- 0x03EB / 0x2044: Atmel Lufa -->
<usb-device vendor-id="7855" product-id="4" /> <!-- 0x1eaf / 0x0004: Leaflabs Maple -->
<usb-device vendor-id="3368" product-id="516" /> <!-- 0x0d28 / 0x0204: ARM mbed -->
<usb-device vendor-id="1155" product-id="22336" /><!-- 0x0483 / 0x5740: ST CDC -->
<usb-device vendor-id="11914" product-id="5" /> <!-- 0x2E8A / 0x0005: Raspberry Pi Pico Micropython -->
<usb-device vendor-id="11914" product-id="10" /> <!-- 0x2E8A / 0x000A: Raspberry Pi Pico SDK -->
<usb-device vendor-id="6790" product-id="21972" /><!-- 0x1A86 / 0x55D4: Qinheng CH9102F -->
</resources>
...@@ -23,6 +23,7 @@ dependencyResolutionManagement { ...@@ -23,6 +23,7 @@ dependencyResolutionManagement {
password = MAPBOX_DOWNLOADS_TOKEN password = MAPBOX_DOWNLOADS_TOKEN
} }
} }
maven { url 'https://jitpack.io' }
} }
} }
rootProject.name = "HTAnticollision" rootProject.name = "HTAnticollision"
......
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