fix connnecting quality counter
This commit is contained in:
parent
d5ae4cabf2
commit
3a9213992b
4 changed files with 36 additions and 15 deletions
|
@ -235,7 +235,6 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
override fun connect(reason: String) {
|
override fun connect(reason: String) {
|
||||||
aapsLogger.info(LTag.PUMP, "connect reason=$reason")
|
aapsLogger.info(LTag.PUMP, "connect reason=$reason")
|
||||||
podStateManager.bluetoothConnectionState = OmnipodDashPodStateManager.BluetoothConnectionState.CONNECTING
|
podStateManager.bluetoothConnectionState = OmnipodDashPodStateManager.BluetoothConnectionState.CONNECTING
|
||||||
|
|
||||||
synchronized(this) {
|
synchronized(this) {
|
||||||
stopConnecting?.let {
|
stopConnecting?.let {
|
||||||
aapsLogger.warn(LTag.PUMP, "Already connecting: $stopConnecting")
|
aapsLogger.warn(LTag.PUMP, "Already connecting: $stopConnecting")
|
||||||
|
@ -244,7 +243,7 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
val stop = CountDownLatch(1)
|
val stop = CountDownLatch(1)
|
||||||
stopConnecting = stop
|
stopConnecting = stop
|
||||||
}
|
}
|
||||||
|
podStateManager.incrementConnectionAttemptsWithRetries()
|
||||||
thread(
|
thread(
|
||||||
start = true,
|
start = true,
|
||||||
name = "ConnectionThread",
|
name = "ConnectionThread",
|
||||||
|
@ -270,6 +269,7 @@ class OmnipodDashPumpPlugin @Inject constructor(
|
||||||
|
|
||||||
override fun stopConnecting() {
|
override fun stopConnecting() {
|
||||||
aapsLogger.info(LTag.PUMP, "stopConnecting")
|
aapsLogger.info(LTag.PUMP, "stopConnecting")
|
||||||
|
podStateManager.incrementFailedConnectionsAfterRetries()
|
||||||
stopConnecting?.countDown()
|
stopConnecting?.countDown()
|
||||||
omnipodManager.disconnect(true)
|
omnipodManager.disconnect(true)
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@ interface OmnipodDashPodStateManager {
|
||||||
var bluetoothConnectionState: BluetoothConnectionState
|
var bluetoothConnectionState: BluetoothConnectionState
|
||||||
var connectionAttempts: Int
|
var connectionAttempts: Int
|
||||||
var successfulConnections: Int
|
var successfulConnections: Int
|
||||||
|
val connectionAttemptsWithRetries: Int
|
||||||
|
val failedConnectionsAfterRetries: Int
|
||||||
|
|
||||||
var timeZone: TimeZone
|
var timeZone: TimeZone
|
||||||
val sameTimeZone: Boolean // The TimeZone is the same on the phone and on the pod
|
val sameTimeZone: Boolean // The TimeZone is the same on the phone and on the pod
|
||||||
|
@ -85,6 +87,8 @@ interface OmnipodDashPodStateManager {
|
||||||
fun updateFromPairing(uniqueId: Id, pairResult: PairResult)
|
fun updateFromPairing(uniqueId: Id, pairResult: PairResult)
|
||||||
fun reset()
|
fun reset()
|
||||||
fun connectionSuccessRatio(): Float
|
fun connectionSuccessRatio(): Float
|
||||||
|
fun incrementConnectionAttemptsWithRetries()
|
||||||
|
fun incrementFailedConnectionsAfterRetries()
|
||||||
|
|
||||||
fun createActiveCommand(
|
fun createActiveCommand(
|
||||||
historyId: String,
|
historyId: String,
|
||||||
|
|
|
@ -114,6 +114,23 @@ class OmnipodDashPodStateManagerImpl @Inject constructor(
|
||||||
podState.successfulConnections = value
|
podState.successfulConnections = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val connectionAttemptsWithRetries: Int
|
||||||
|
@Synchronized
|
||||||
|
get() = podState.connectionAttemptsWithRetries
|
||||||
|
|
||||||
|
@Synchronized
|
||||||
|
override fun incrementConnectionAttemptsWithRetries() {
|
||||||
|
podState.connectionAttemptsWithRetries++
|
||||||
|
}
|
||||||
|
|
||||||
|
override val failedConnectionsAfterRetries: Int
|
||||||
|
@Synchronized
|
||||||
|
get() = podState.failedConnectionsAfterRetries
|
||||||
|
|
||||||
|
override fun incrementFailedConnectionsAfterRetries() {
|
||||||
|
podState.failedConnectionsAfterRetries++
|
||||||
|
}
|
||||||
|
|
||||||
override var timeZone: TimeZone
|
override var timeZone: TimeZone
|
||||||
get() = TimeZone.getTimeZone(podState.timeZone)
|
get() = TimeZone.getTimeZone(podState.timeZone)
|
||||||
set(tz) {
|
set(tz) {
|
||||||
|
@ -129,10 +146,12 @@ class OmnipodDashPodStateManagerImpl @Inject constructor(
|
||||||
val podOffset = timeZone.getOffset(now)
|
val podOffset = timeZone.getOffset(now)
|
||||||
logger.debug(
|
logger.debug(
|
||||||
LTag.PUMPCOMM,
|
LTag.PUMPCOMM,
|
||||||
"sameTimeZone currentTimezone=${currentTimezone.getDisplayName(
|
"sameTimeZone currentTimezone=${
|
||||||
|
currentTimezone.getDisplayName(
|
||||||
true,
|
true,
|
||||||
TimeZone.SHORT
|
TimeZone.SHORT
|
||||||
)} " +
|
)
|
||||||
|
} " +
|
||||||
"currentOffset=$currentOffset " +
|
"currentOffset=$currentOffset " +
|
||||||
"podOffset=$podOffset"
|
"podOffset=$podOffset"
|
||||||
)
|
)
|
||||||
|
@ -627,13 +646,10 @@ class OmnipodDashPodStateManagerImpl @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun connectionSuccessRatio(): Float {
|
override fun connectionSuccessRatio(): Float {
|
||||||
if (connectionAttempts == 0) {
|
if (connectionAttemptsWithRetries == 0) {
|
||||||
return 0.0F
|
return 0.0F
|
||||||
} else if (connectionAttempts <= successfulConnections) {
|
|
||||||
// Prevent bogus quality > 1 during initialisation
|
|
||||||
return 1.0F
|
|
||||||
}
|
}
|
||||||
return successfulConnections.toFloat() / connectionAttempts.toFloat()
|
return 1 - (failedConnectionsAfterRetries.toFloat() / connectionAttemptsWithRetries)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun reset() {
|
override fun reset() {
|
||||||
|
@ -675,6 +691,8 @@ class OmnipodDashPodStateManagerImpl @Inject constructor(
|
||||||
OmnipodDashPodStateManager.BluetoothConnectionState.DISCONNECTED
|
OmnipodDashPodStateManager.BluetoothConnectionState.DISCONNECTED
|
||||||
var connectionAttempts = 0
|
var connectionAttempts = 0
|
||||||
var successfulConnections = 0
|
var successfulConnections = 0
|
||||||
|
var connectionAttemptsWithRetries = 0
|
||||||
|
var failedConnectionsAfterRetries = 0
|
||||||
var messageSequenceNumber: Short = 0
|
var messageSequenceNumber: Short = 0
|
||||||
var sequenceNumberOfLastProgrammingCommand: Short? = null
|
var sequenceNumberOfLastProgrammingCommand: Short? = null
|
||||||
var activationTime: Long? = null
|
var activationTime: Long? = null
|
||||||
|
@ -682,7 +700,6 @@ class OmnipodDashPodStateManagerImpl @Inject constructor(
|
||||||
var bluetoothAddress: String? = null
|
var bluetoothAddress: String? = null
|
||||||
var ltk: ByteArray? = null
|
var ltk: ByteArray? = null
|
||||||
var eapAkaSequenceNumber: Long = 1
|
var eapAkaSequenceNumber: Long = 1
|
||||||
var bolusPulsesRemaining: Short = 0
|
|
||||||
var timeZone: String = "" // TimeZone ID (e.g. "Europe/Amsterdam")
|
var timeZone: String = "" // TimeZone ID (e.g. "Europe/Amsterdam")
|
||||||
var alarmSynced: Boolean = false
|
var alarmSynced: Boolean = false
|
||||||
|
|
||||||
|
|
|
@ -256,15 +256,15 @@ class OmnipodDashOverviewFragment : DaggerFragment() {
|
||||||
val connectionSuccessPercentage = podStateManager.connectionSuccessRatio() * 100
|
val connectionSuccessPercentage = podStateManager.connectionSuccessRatio() * 100
|
||||||
val successPercentageString = String.format("%.2f %%", connectionSuccessPercentage)
|
val successPercentageString = String.format("%.2f %%", connectionSuccessPercentage)
|
||||||
val quality =
|
val quality =
|
||||||
"${podStateManager.successfulConnections}/${podStateManager.connectionAttempts} :: $successPercentageString"
|
"${podStateManager.connectionAttemptsWithRetries - podStateManager.failedConnectionsAfterRetries}/${podStateManager.connectionAttemptsWithRetries} :: $successPercentageString"
|
||||||
bluetoothStatusBinding.omnipodDashBluetoothConnectionQuality.text = quality
|
bluetoothStatusBinding.omnipodDashBluetoothConnectionQuality.text = quality
|
||||||
val connectionStatsColor = when {
|
val connectionStatsColor = when {
|
||||||
connectionSuccessPercentage > 90 ->
|
connectionSuccessPercentage < 70 && podStateManager.connectionAttemptsWithRetries > 50 ->
|
||||||
Color.WHITE
|
Color.RED
|
||||||
connectionSuccessPercentage > 60 ->
|
connectionSuccessPercentage < 90 && podStateManager.connectionAttemptsWithRetries > 50 ->
|
||||||
Color.YELLOW
|
Color.YELLOW
|
||||||
else ->
|
else ->
|
||||||
Color.RED
|
Color.WHITE
|
||||||
}
|
}
|
||||||
bluetoothStatusBinding.omnipodDashBluetoothConnectionQuality.setTextColor(connectionStatsColor)
|
bluetoothStatusBinding.omnipodDashBluetoothConnectionQuality.setTextColor(connectionStatsColor)
|
||||||
bluetoothStatusBinding.omnipodDashDeliveryStatus.text = podStateManager.deliveryStatus?.let {
|
bluetoothStatusBinding.omnipodDashDeliveryStatus.text = podStateManager.deliveryStatus?.let {
|
||||||
|
|
Loading…
Reference in a new issue