mirror of
https://github.com/aljazceru/Android-nRF-Toolbox.git
synced 2025-12-25 18:34:21 +01:00
committed by
GitHub
parent
18ad3d97bb
commit
1004a561fd
@@ -50,11 +50,17 @@ dependencies {
|
||||
implementation(project(":lib_ui"))
|
||||
implementation(project(":lib_utils"))
|
||||
|
||||
implementation(libs.nordic.core)
|
||||
implementation(libs.nordic.theme)
|
||||
implementation(libs.nordic.navigation)
|
||||
implementation(libs.nordic.uilogger)
|
||||
|
||||
implementation(libs.nordic.blek.client)
|
||||
implementation(libs.nordic.blek.profile)
|
||||
implementation(libs.nordic.blek.core)
|
||||
implementation(libs.nordic.blek.server)
|
||||
implementation(libs.nordic.blek.advertiser)
|
||||
implementation(libs.nordic.blek.uiscanner)
|
||||
|
||||
implementation(libs.room.runtime)
|
||||
implementation(libs.room.ktx)
|
||||
@@ -63,25 +69,16 @@ dependencies {
|
||||
implementation(libs.accompanist.pager)
|
||||
implementation(libs.accompanist.pagerindicators)
|
||||
|
||||
implementation(libs.nordic.ble.common)
|
||||
implementation(libs.nordic.ble.ktx)
|
||||
|
||||
implementation(libs.nordic.theme)
|
||||
implementation(libs.nordic.navigation)
|
||||
implementation(libs.nordic.uilogger)
|
||||
implementation(libs.nordic.core)
|
||||
implementation(libs.nordic.blek.uiscanner)
|
||||
|
||||
implementation(libs.androidx.dataStore.core)
|
||||
implementation(libs.androidx.dataStore.preferences)
|
||||
|
||||
implementation(libs.androidx.hilt.navigation.compose)
|
||||
implementation(libs.androidx.compose.material3)
|
||||
implementation(libs.androidx.compose.material.iconsExtended)
|
||||
implementation(libs.androidx.core.ktx)
|
||||
implementation(libs.androidx.compose.material3)
|
||||
implementation(libs.androidx.activity.compose)
|
||||
implementation(libs.androidx.lifecycle.service)
|
||||
|
||||
implementation(libs.androidx.hilt.navigation.compose)
|
||||
|
||||
testImplementation(libs.hilt.android.testing)
|
||||
kaptTest(libs.hilt.compiler)
|
||||
testImplementation(libs.androidx.test.rules)
|
||||
|
||||
@@ -36,11 +36,11 @@ class UartServer @Inject constructor(
|
||||
private val scope: CoroutineScope
|
||||
) {
|
||||
|
||||
lateinit var server: ServerBleGatt
|
||||
private lateinit var server: ServerBleGatt
|
||||
|
||||
lateinit var rxCharacteristic: ServerBleGattCharacteristic
|
||||
lateinit var txCharacteristic: ServerBleGattCharacteristic
|
||||
lateinit var batteryLevelCharacteristic: ServerBleGattCharacteristic
|
||||
private lateinit var rxCharacteristic: ServerBleGattCharacteristic
|
||||
private lateinit var txCharacteristic: ServerBleGattCharacteristic
|
||||
private lateinit var batteryLevelCharacteristic: ServerBleGattCharacteristic
|
||||
|
||||
fun start(
|
||||
context: Context,
|
||||
@@ -81,6 +81,7 @@ class UartServer @Inject constructor(
|
||||
|
||||
server = ServerBleGatt.create(
|
||||
context = context,
|
||||
scope = scope,
|
||||
config = arrayOf(uartService, batteryService),
|
||||
mock = device
|
||||
)
|
||||
@@ -105,27 +106,30 @@ class UartServer @Inject constructor(
|
||||
txCharacteristic = glsService.findCharacteristic(UART_TX_CHARACTERISTIC_UUID)!!
|
||||
|
||||
rxCharacteristic.value.onEach {
|
||||
txCharacteristic.setValue(it)
|
||||
send(txCharacteristic, it)
|
||||
}.launchIn(scope)
|
||||
|
||||
val batteryService = connection.services.findService(BATTERY_SERVICE_UUID)!!
|
||||
batteryLevelCharacteristic = batteryService.findCharacteristic(
|
||||
BATTERY_LEVEL_CHARACTERISTIC_UUID
|
||||
)!!
|
||||
batteryLevelCharacteristic = batteryService
|
||||
.findCharacteristic(BATTERY_LEVEL_CHARACTERISTIC_UUID)!!
|
||||
|
||||
startBatteryService(connection)
|
||||
startBatteryService()
|
||||
}
|
||||
|
||||
private fun startBatteryService(connection: ServerBluetoothGattConnection) {
|
||||
private fun startBatteryService() {
|
||||
scope.launch {
|
||||
repeat(100) {
|
||||
batteryLevelCharacteristic.setValue(DataByteArray.from(0x61))
|
||||
send(batteryLevelCharacteristic, DataByteArray.from(0x61))
|
||||
delay(STANDARD_DELAY)
|
||||
batteryLevelCharacteristic.setValue(DataByteArray.from(0x60))
|
||||
send(batteryLevelCharacteristic, DataByteArray.from(0x60))
|
||||
delay(STANDARD_DELAY)
|
||||
batteryLevelCharacteristic.setValue(DataByteArray.from(0x5F))
|
||||
send(batteryLevelCharacteristic, DataByteArray.from(0x5F))
|
||||
delay(STANDARD_DELAY)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun send(characteristics: ServerBleGattCharacteristic, data: DataByteArray) {
|
||||
characteristics.setValueAndNotifyClient(data)
|
||||
}
|
||||
}
|
||||
@@ -39,6 +39,7 @@ import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.flow.catch
|
||||
import kotlinx.coroutines.flow.filterNotNull
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.mapNotNull
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -91,7 +92,7 @@ internal class UARTService : NotificationService() {
|
||||
}
|
||||
|
||||
private fun startGattClient(device: ServerDevice) = lifecycleScope.launch {
|
||||
val client = ClientBleGatt.connect(this@UARTService, device, logger = { p, s -> repository.log(p, s) })
|
||||
val client = ClientBleGatt.connect(this@UARTService, device, lifecycleScope, logger = { p, s -> repository.log(p, s) })
|
||||
this@UARTService.client = client
|
||||
|
||||
if (!client.isConnected) {
|
||||
@@ -133,8 +134,9 @@ internal class UARTService : NotificationService() {
|
||||
?.launchIn(lifecycleScope)
|
||||
|
||||
txCharacteristic.getNotifications()
|
||||
.onEach { repository.onNewMessageReceived(String(it.value)) }
|
||||
.onEach { repository.log(10, "Received: ${String(it.value)}") }
|
||||
.map { String(it.value) }
|
||||
.onEach { repository.onNewMessageReceived(it) }
|
||||
.onEach { repository.log(10, "Received: $it") }
|
||||
.catch { it.printStackTrace() }
|
||||
.launchIn(lifecycleScope)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user