UUID.fromString(SERVICE_UUID) name = SERVICE_NAME characteristic { uuid = UUID.fromString(CHARACTERISTIC_UUID_PRESETS) name = CHARACTERISTIC_NAME_PRESETS writeAccess = AccessType.Write { presetByteArray -> val presetIndex = presetByteArray.first().toInt() // 00-A, 01-B, 02-C, 03-D, XX-A presetStateFlow.value = initialPresets.getOrNull(presetIndex) ?: initialPresets.first() } readAccess = AccessType.Read notifyAccess = AccessType.Notify valueChangingAction { action -> CoroutineScope(Dispatchers.IO).launch { presetStateFlow.collectLatest { action(it.toCharacteristicValue()) } } } } } }