Fix advertising mock servers

This commit is contained in:
Sylwester Zieliński
2023-12-27 08:37:35 +01:00
parent 54e5088b43
commit c922e69efa
4 changed files with 30 additions and 9 deletions

View File

@@ -35,6 +35,7 @@ import android.app.Application
import dagger.hilt.android.HiltAndroidApp
import no.nordicsemi.android.analytics.AppAnalytics
import no.nordicsemi.android.analytics.AppOpenEvent
import no.nordicsemi.android.gls.GlsServer
import no.nordicsemi.android.uart.UartServer
import javax.inject.Inject
@@ -47,11 +48,15 @@ class NrfToolboxApplication : Application() {
@Inject
lateinit var uartServer: UartServer
@Inject
lateinit var glsServer: GlsServer
override fun onCreate() {
super.onCreate()
analytics.logEvent(AppOpenEvent)
uartServer.start(this)
glsServer.start(this)
}
}

View File

@@ -2,6 +2,7 @@ package no.nordicsemi.android.gls
import android.annotation.SuppressLint
import android.content.Context
import android.os.ParcelUuid
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
@@ -21,6 +22,7 @@ import no.nordicsemi.android.gls.main.viewmodel.RACP_CHARACTERISTIC
import no.nordicsemi.android.kotlin.ble.advertiser.BleAdvertiser
import no.nordicsemi.android.kotlin.ble.core.MockServerDevice
import no.nordicsemi.android.kotlin.ble.core.advertiser.BleAdvertisingConfig
import no.nordicsemi.android.kotlin.ble.core.advertiser.BleAdvertisingData
import no.nordicsemi.android.kotlin.ble.core.data.BleGattPermission
import no.nordicsemi.android.kotlin.ble.core.data.BleGattProperty
import no.nordicsemi.android.kotlin.ble.profile.gls.RecordAccessControlPointInputParser
@@ -41,7 +43,7 @@ class GlsServer @Inject constructor(
private val scope: CoroutineScope,
@ApplicationContext
private val context: Context,
private val logger: BleLogger = DefaultConsoleLogger(context)
private val logger: BleLogger = DefaultConsoleLogger(context),
) {
private lateinit var server: ServerBleGatt
@@ -150,7 +152,7 @@ class GlsServer @Inject constructor(
context: Context,
device: MockServerDevice = MockServerDevice(
name = "GLS Server",
address = "55:44:33:22:11"
address = "11:22:33:44:55:66"
),
) = scope.launch {
val gmCharacteristic = ServerBleGattCharacteristicConfig(
@@ -198,7 +200,10 @@ class GlsServer @Inject constructor(
)
val advertiser = BleAdvertiser.create(context)
advertiser.advertise(config = BleAdvertisingConfig(), mock = device).launchIn(scope)
advertiser.advertise(
config = BleAdvertisingConfig(advertiseData = BleAdvertisingData(serviceUuid = ParcelUuid(GLS_SERVICE_UUID))),
mock = device
).launchIn(scope)
launch {
server.connections
@@ -231,6 +236,7 @@ class GlsServer @Inject constructor(
private fun startGlsService() {
racpCharacteristic.value
.onEach { lastRequest = it }
.onEach { continueWithResponse() } //comment to make tests working
.launchIn(scope)
}
@@ -247,10 +253,12 @@ class GlsServer @Inject constructor(
}
racpCharacteristic.setValueAndNotifyClient(SUCCESS)
}
RecordAccessControlPointInputParser.reportLastStoredRecord() -> {
send(glsCharacteristic, records.last())
send(racpCharacteristic, SUCCESS)
}
RecordAccessControlPointInputParser.reportFirstStoredRecord() -> {
send(glsCharacteristic, records.first())
send(racpCharacteristic, SUCCESS)

View File

@@ -2,6 +2,7 @@ package no.nordicsemi.android.uart
import android.annotation.SuppressLint
import android.content.Context
import android.os.ParcelUuid
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.launchIn
@@ -12,6 +13,7 @@ import no.nordicsemi.android.common.core.DataByteArray
import no.nordicsemi.android.kotlin.ble.advertiser.BleAdvertiser
import no.nordicsemi.android.kotlin.ble.core.MockServerDevice
import no.nordicsemi.android.kotlin.ble.core.advertiser.BleAdvertisingConfig
import no.nordicsemi.android.kotlin.ble.core.advertiser.BleAdvertisingData
import no.nordicsemi.android.kotlin.ble.core.data.BleGattPermission
import no.nordicsemi.android.kotlin.ble.core.data.BleGattProperty
import no.nordicsemi.android.kotlin.ble.server.main.ServerBleGatt
@@ -33,7 +35,7 @@ private const val STANDARD_DELAY = 1000L
@SuppressLint("MissingPermission")
@Singleton
class UartServer @Inject constructor(
private val scope: CoroutineScope
private val scope: CoroutineScope,
) {
private lateinit var server: ServerBleGatt
@@ -46,7 +48,7 @@ class UartServer @Inject constructor(
context: Context,
device: MockServerDevice = MockServerDevice(
name = "UART Server",
address = "55:44:33:22:11"
address = "66:55:44:33:22:11"
),
) = scope.launch {
val rxCharacteristic = ServerBleGattCharacteristicConfig(
@@ -87,7 +89,13 @@ class UartServer @Inject constructor(
)
val advertiser = BleAdvertiser.create(context)
advertiser.advertise(config = BleAdvertisingConfig(), mock = device).launchIn(scope)
advertiser.advertise(
config = BleAdvertisingConfig(
advertiseData = BleAdvertisingData(
serviceUuid = ParcelUuid(UART_SERVICE_UUID)
)
), mock = device
).launchIn(scope)
launch {
server.connections

View File

@@ -79,6 +79,6 @@ include(":lib_utils")
// includeBuild("../Android-Common-Libraries")
//}
//
//if (file("../Kotlin-BLE-Library").exists()) {
// includeBuild("../Kotlin-BLE-Library")
//}
if (file("../Kotlin-BLE-Library").exists()) {
includeBuild("../Kotlin-BLE-Library")
}