Add link loss alarm

This commit is contained in:
Sylwester Zielinski
2023-03-23 14:01:55 +01:00
parent 4f0cdc08c9
commit 4522fc71c8
4 changed files with 20 additions and 7 deletions

View File

@@ -14,7 +14,9 @@ data class PRXServiceData(
val deviceName: String? = null
) {
val isLinkLossDisconnected = connectionState?.let {
connectionStatus == BleGattConnectionStatus.LINK_LOSS
val isLinkLossDisconnected = connectionState?.let { connectionState ->
connectionStatus?.let { connectionStatus ->
connectionStatus != BleGattConnectionStatus.SUCCESS && connectionStatus != BleGattConnectionStatus.TERMINATE_PEER_USER
} ?: false
} ?: false
}

View File

@@ -33,7 +33,6 @@ package no.nordicsemi.android.prx.repository
import android.annotation.SuppressLint
import android.content.Intent
import android.util.Log
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.filterNotNull
@@ -42,6 +41,7 @@ import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import no.nordicsemi.android.kotlin.ble.core.ServerDevice
import no.nordicsemi.android.kotlin.ble.core.client.BleGattConnectOptions
import no.nordicsemi.android.kotlin.ble.core.client.BleWriteType
import no.nordicsemi.android.kotlin.ble.core.client.callback.BleGattClient
import no.nordicsemi.android.kotlin.ble.core.client.service.BleGattCharacteristic
@@ -154,7 +154,7 @@ internal class PRXService : NotificationService() {
}
private fun startGattClient(device: ServerDevice) = lifecycleScope.launch {
client = device.connect(this@PRXService)
client = device.connect(this@PRXService, BleGattConnectOptions(autoConnect = true))
client.connectionStateWithStatus
.filterNotNull()

View File

@@ -78,7 +78,7 @@ fun PRXScreen() {
null,
GattConnectionState.STATE_CONNECTING -> DeviceConnectingView { NavigateUpButton(navigateUp) }
GattConnectionState.STATE_DISCONNECTED,
GattConnectionState.STATE_DISCONNECTING -> DeviceDisconnectedView(Reason.UNKNOWN) { NavigateUpButton(navigateUp) }
GattConnectionState.STATE_DISCONNECTING -> DeviceDisconnectedView(getReason(state.isLinkLossDisconnected)) { NavigateUpButton(navigateUp) }
GattConnectionState.STATE_CONNECTED -> ContentView(state) { viewModel.onEvent(it) }
}
}
@@ -86,6 +86,14 @@ fun PRXScreen() {
}
}
private fun getReason(isLinkLoss: Boolean): Reason {
return if (isLinkLoss) {
Reason.LINK_LOSS
} else {
Reason.UNKNOWN
}
}
@Composable
private fun AppBar(state: PRXServiceData, navigateUp: () -> Unit, viewModel: PRXViewModel) {
if (state.deviceName?.isNotBlank() == true) {

View File

@@ -32,7 +32,6 @@
package no.nordicsemi.android.prx.viewmodel
import android.os.ParcelUuid
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -80,7 +79,6 @@ internal class PRXViewModel @Inject constructor(
}
repository.data.onEach {
Log.d("AAATESTAAA", "Data $it")
if (it.isLinkLossDisconnected) {
alarmHandler.playAlarm(it.linkLossAlarmLevel)
}
@@ -127,4 +125,9 @@ internal class PRXViewModel @Inject constructor(
alarmHandler.pauseAlarm()
navigationManager.navigateUp()
}
override fun onCleared() {
super.onCleared()
alarmHandler.pauseAlarm()
}
}