Migration to latest BLEK (#132)

* Migration to latest BLEK

* Clean up
This commit is contained in:
Aleksander Nowakowski
2023-12-21 22:55:47 +01:00
committed by GitHub
parent 18ad3d97bb
commit 1004a561fd
28 changed files with 163 additions and 183 deletions

View File

@@ -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)

View File

@@ -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)
}
}

View File

@@ -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)