From 713a246635c3e553b79d1fc420753bfaa919337f Mon Sep 17 00:00:00 2001 From: himalia416 Date: Tue, 30 Sep 2025 18:03:54 +0200 Subject: [PATCH] Added DFU service --- .../toolbox/profile/data/DFUServiceData.kt | 8 +++++++ .../toolbox/profile/manager/DFUManager.kt | 17 +++++++++++++- .../manager/repository/DFURepository.kt | 23 +++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 profile_data/src/main/java/no/nordicsemi/android/toolbox/profile/data/DFUServiceData.kt create mode 100644 profile_manager/src/main/java/no/nordicsemi/android/toolbox/profile/manager/repository/DFURepository.kt diff --git a/profile_data/src/main/java/no/nordicsemi/android/toolbox/profile/data/DFUServiceData.kt b/profile_data/src/main/java/no/nordicsemi/android/toolbox/profile/data/DFUServiceData.kt new file mode 100644 index 00000000..ebc1512d --- /dev/null +++ b/profile_data/src/main/java/no/nordicsemi/android/toolbox/profile/data/DFUServiceData.kt @@ -0,0 +1,8 @@ +package no.nordicsemi.android.toolbox.profile.data + +import no.nordicsemi.android.toolbox.lib.utils.Profile + +data class DFUServiceData( + override val profile: Profile = Profile.DFU, + val dfuAppName : String? = null, +): ProfileServiceData() \ No newline at end of file diff --git a/profile_manager/src/main/java/no/nordicsemi/android/toolbox/profile/manager/DFUManager.kt b/profile_manager/src/main/java/no/nordicsemi/android/toolbox/profile/manager/DFUManager.kt index 0cdb283e..fa972f5e 100644 --- a/profile_manager/src/main/java/no/nordicsemi/android/toolbox/profile/manager/DFUManager.kt +++ b/profile_manager/src/main/java/no/nordicsemi/android/toolbox/profile/manager/DFUManager.kt @@ -2,18 +2,33 @@ package no.nordicsemi.android.toolbox.profile.manager import kotlinx.coroutines.CoroutineScope import no.nordicsemi.android.toolbox.lib.utils.Profile +import no.nordicsemi.android.toolbox.lib.utils.spec.DFU_SERVICE_UUID +import no.nordicsemi.android.toolbox.lib.utils.spec.EXPERIMENTAL_BUTTONLESS_DFU_SERVICE_UUID +import no.nordicsemi.android.toolbox.lib.utils.spec.LEGACY_DFU_SERVICE_UUID +import no.nordicsemi.android.toolbox.lib.utils.spec.SMP_SERVICE_UUID import no.nordicsemi.kotlin.ble.client.RemoteService +import kotlin.uuid.ExperimentalUuidApi +import kotlin.uuid.toKotlinUuid internal class DFUManager :ServiceManager{ override val profile: Profile get() = Profile.DFU + @OptIn(ExperimentalUuidApi::class) override suspend fun observeServiceInteractions( deviceId: String, remoteService: RemoteService, scope: CoroutineScope ) { - // No interactions to observe for DFU profile + when (remoteService.uuid) { + DFU_SERVICE_UUID.toKotlinUuid(), + SMP_SERVICE_UUID.toKotlinUuid(), + LEGACY_DFU_SERVICE_UUID.toKotlinUuid(), + EXPERIMENTAL_BUTTONLESS_DFU_SERVICE_UUID.toKotlinUuid() -> this + + else -> null + + } } } \ No newline at end of file diff --git a/profile_manager/src/main/java/no/nordicsemi/android/toolbox/profile/manager/repository/DFURepository.kt b/profile_manager/src/main/java/no/nordicsemi/android/toolbox/profile/manager/repository/DFURepository.kt new file mode 100644 index 00000000..36057f67 --- /dev/null +++ b/profile_manager/src/main/java/no/nordicsemi/android/toolbox/profile/manager/repository/DFURepository.kt @@ -0,0 +1,23 @@ +package no.nordicsemi.android.toolbox.profile.manager.repository + +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.update +import no.nordicsemi.android.toolbox.profile.data.DFUServiceData + +object DFURepository { + private val _dataMap = mutableMapOf>() + + fun getData(deviceId: String): Flow { + return _dataMap.getOrPut(deviceId) { MutableStateFlow(DFUServiceData()) } + } + + fun updateAppName(deviceId: String, appName: String) { + _dataMap[deviceId]?.update { it.copy(dfuAppName = appName) } + } + + fun clear(deviceId: String) { + _dataMap.remove(deviceId) + } + +} \ No newline at end of file