Button list USB devices, show ports

master
gnssuser 6 days ago
parent 1da4e0c0ae
commit cb52da6ad2

@ -1,29 +1,47 @@
package com.unicod.uarttest package com.unicod.uarttest
import android.annotation.SuppressLint
import android.app.Application
import android.content.Context
import android.os.Bundle import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.Button
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.AndroidViewModel
import com.hoho.android.usbserial.driver.UsbSerialDriver
import com.hoho.android.usbserial.driver.UsbSerialProber
import com.unicod.uarttest.ui.theme.UartTestTheme import com.unicod.uarttest.ui.theme.UartTestTheme
import android.hardware.usb.UsbManager
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Card
import androidx.compose.ui.unit.dp
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
private val viewModel: UsbViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enableEdgeToEdge() enableEdgeToEdge()
setContent { setContent {
UartTestTheme { UartTestTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
Greeting( UsbDeviceList(viewModel)
name = "Android",
modifier = Modifier.padding(innerPadding)
)
} }
} }
} }
@ -45,3 +63,52 @@ fun GreetingPreview() {
Greeting("Android") Greeting("Android")
} }
} }
fun findUsbSerialDevices(context: Context): List<UsbSerialDriver> {
val usbManager = context.getSystemService(Context.USB_SERVICE) as UsbManager
return UsbSerialProber.getDefaultProber().findAllDrivers(usbManager)
}
class UsbViewModel(application: Application) : AndroidViewModel(application) {
private val _devices = mutableStateListOf<UsbSerialDriver>()
val devices: List<UsbSerialDriver> get() = _devices
fun scanUsbDevices() {
val found = findUsbSerialDevices(getApplication())
_devices.clear()
_devices.addAll(found)
}
}
@Composable
fun UsbDeviceList(viewModel: UsbViewModel) {
val devices = viewModel.devices
Column (
modifier = Modifier
.fillMaxSize()
.padding(WindowInsets.statusBars.asPaddingValues())
) {
Button(onClick = { viewModel.scanUsbDevices() }) {
Text("Scan USB Devices")
}
LazyColumn {
items(viewModel.devices) { driver ->
Card() {
Column(modifier = Modifier.padding(8.dp)) {
Text("Device: ${driver.device.deviceName}")
Text("Vendor ID: ${driver.device.vendorId}, Product ID: ${driver.device.productId}")
Text("Ports: ${driver.ports.size}")
driver.ports.forEachIndexed { index, port ->
Text("↳ Port #$index", modifier = Modifier.padding(start = 16.dp))
}
}
}
}
}
}
}

Loading…
Cancel
Save