kotlin ble migration
This commit is contained in:
parent
c0e0aadc28
commit
e19338397d
|
|
@ -13,8 +13,8 @@ android {
|
|||
applicationId "llc.arma.ble"
|
||||
minSdk 26
|
||||
targetSdk 34
|
||||
versionCode 23
|
||||
versionName "1.3.3"
|
||||
versionCode 25
|
||||
versionName "1.3.5"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
vectorDrawables {
|
||||
|
|
@ -86,8 +86,8 @@ dependencies {
|
|||
kapt('com.google.dagger:hilt-android-compiler:2.45')
|
||||
kapt("androidx.hilt:hilt-compiler:1.0.0")
|
||||
|
||||
implementation 'no.nordicsemi.android.kotlin.ble:scanner:1.0.19'
|
||||
implementation 'no.nordicsemi.android.kotlin.ble:client:1.0.19'
|
||||
implementation 'no.nordicsemi.android.kotlin.ble:scanner:1.0.14'
|
||||
implementation 'no.nordicsemi.android.kotlin.ble:client:1.0.14'
|
||||
|
||||
implementation "com.google.accompanist:accompanist-permissions:0.26.3-beta"
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import llc.arma.ble.app.ui.common.ViewEvent
|
|||
import llc.arma.ble.app.ui.common.ViewSideEffect
|
||||
import llc.arma.ble.app.ui.common.ViewState
|
||||
import llc.arma.ble.app.ui.model.BleView
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.RealtimeViewMode
|
||||
import llc.arma.ble.domain.model.Ble
|
||||
import llc.arma.ble.domain.usecase.AccelScale
|
||||
import llc.arma.ble.domain.usecase.AccelViewMode
|
||||
|
|
@ -24,6 +25,8 @@ class AccelerometerContract {
|
|||
object OnShowAccelerometerHistory : Event()
|
||||
object OnHideAccelerometerHistory : Event()
|
||||
|
||||
object OnRealtimeViewModeEdit : Event()
|
||||
|
||||
data class OnAccelViewModeEdit(
|
||||
val next: Next
|
||||
) : Event()
|
||||
|
|
@ -56,6 +59,10 @@ class AccelerometerContract {
|
|||
object OnSaveIntervalEdit : Event()
|
||||
object OnHideHistoryEdit : Event()
|
||||
|
||||
data class OnRealtimeViewModeChanged(
|
||||
val mode: RealtimeViewMode
|
||||
) : Event()
|
||||
|
||||
data class OnBleChanged(
|
||||
val ble: Ble.Accelerometer,
|
||||
): Event()
|
||||
|
|
@ -111,6 +118,7 @@ class AccelerometerContract {
|
|||
val accelerometer: BleView.Accelerometer,
|
||||
val writeState: WriteState?,
|
||||
val accelViewMode: AccelViewMode,
|
||||
val accelRealtimeViewMode: RealtimeViewMode,
|
||||
val accelScale: AccelScale,
|
||||
val fftViewMode: FftViewMode,
|
||||
val fftAxis: FftAxis,
|
||||
|
|
@ -139,6 +147,8 @@ class AccelerometerContract {
|
|||
|
||||
sealed class Effect : ViewSideEffect {
|
||||
|
||||
object ShowRealtimeViewModeEdit : Effect()
|
||||
|
||||
object ShowAccelerometerAccel : Effect()
|
||||
object ShowAccelerometerSpectre : Effect()
|
||||
object ShowAccelerometerHistory : Effect()
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelEdit
|
|||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelFftAxisEdit
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelFftModeEdit
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelFrequencyEdit
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelRealtimeViewEdit
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelScaleEdit
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelSpectreEdit
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelViewEdit
|
||||
|
|
@ -32,11 +33,12 @@ import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.HistoryEdit
|
|||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.IntervalEdit
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.LoadingState
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.PowerEdit
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.RealtimeViewMode
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.Write
|
||||
import llc.arma.ble.domain.model.Ble
|
||||
|
||||
enum class SheetPage {
|
||||
HISTORY, ACCEL_SCALE, SPECTRE_SCALE, HISTORY_MODE_EDIT, HISTORY_SCALE, HISTORY_EDIT, ACCEL_EDIT, ACCEL, POWER, WRITE, SPECTRE, ACCEL_MODE_EDIT, SPECTRE_MODE_EDIT, SPECTRE_EDIT, FREQUENCY_EDIT, AXIS_EDIT, FFT_MODE_EDIT, INTERVAL_EDIT
|
||||
HISTORY, ACCEL_SCALE, SPECTRE_SCALE, HISTORY_MODE_EDIT, HISTORY_SCALE, HISTORY_EDIT, ACCEL_EDIT, ACCEL_REALTIME_EDIT, ACCEL, POWER, WRITE, SPECTRE, ACCEL_MODE_EDIT, SPECTRE_MODE_EDIT, SPECTRE_EDIT, FREQUENCY_EDIT, AXIS_EDIT, FFT_MODE_EDIT, INTERVAL_EDIT
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterialApi::class)
|
||||
|
|
@ -93,15 +95,36 @@ fun AccelerometerScreen(
|
|||
val currentState = viewModel.viewState.value
|
||||
|
||||
if (currentState is AccelerometerContract.State.Display) {
|
||||
|
||||
bottomDialog.show {
|
||||
AccelerometerRealtime(
|
||||
ble = currentState.accelerometer.info,
|
||||
accelMode = currentState.accelViewMode,
|
||||
fftAxis = currentState.fftAxis,
|
||||
fftMode = currentState.fftViewMode,
|
||||
frequency = currentState.fftFrequency,
|
||||
accelScale = currentState.accelScale
|
||||
)
|
||||
|
||||
when(currentState.accelRealtimeViewMode){
|
||||
is RealtimeViewMode.Accel -> {
|
||||
|
||||
AccelerometerRealtime(
|
||||
ble = currentState.accelerometer.info,
|
||||
accelMode = currentState.accelRealtimeViewMode.accelViewMode,
|
||||
fftAxis = currentState.fftAxis,
|
||||
fftMode = currentState.fftViewMode,
|
||||
frequency = currentState.fftFrequency,
|
||||
accelScale = currentState.accelScale
|
||||
)
|
||||
|
||||
}
|
||||
RealtimeViewMode.Spectre -> {
|
||||
|
||||
AccelerometerSpectre(
|
||||
ble = currentState.accelerometer.info,
|
||||
accelMode = currentState.accelViewMode,
|
||||
fftAxis = currentState.fftAxis,
|
||||
fftMode = currentState.fftViewMode,
|
||||
frequency = currentState.fftFrequency,
|
||||
accelScale = currentState.accelScale
|
||||
)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -345,6 +368,21 @@ fun AccelerometerScreen(
|
|||
null -> {
|
||||
bottomDialog.hide()
|
||||
}
|
||||
|
||||
SheetPage.ACCEL_REALTIME_EDIT -> bottomDialog.show {
|
||||
|
||||
val currentState = viewModel.viewState.value
|
||||
|
||||
if(currentState is AccelerometerContract.State.Display) {
|
||||
AccelRealtimeViewEdit(
|
||||
state = currentState,
|
||||
onEvent = {
|
||||
viewModel.setEvent(it)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -456,6 +494,12 @@ fun AccelerometerScreen(
|
|||
sheetPage = null
|
||||
delay(100)
|
||||
}
|
||||
|
||||
AccelerometerContract.Effect.ShowRealtimeViewModeEdit -> {
|
||||
sheetPage = null
|
||||
delay(100)
|
||||
sheetPage = SheetPage.ACCEL_REALTIME_EDIT
|
||||
}
|
||||
}
|
||||
}.launchIn(this)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import llc.arma.ble.app.ui.common.BaseViewModel
|
|||
import llc.arma.ble.app.ui.mapper.BleMapper
|
||||
import llc.arma.ble.app.ui.mapper.BleViewMapper
|
||||
import llc.arma.ble.app.ui.model.BleView
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.RealtimeViewMode
|
||||
import llc.arma.ble.domain.model.Ble
|
||||
import llc.arma.ble.domain.usecase.AccelScale
|
||||
import llc.arma.ble.domain.usecase.AccelViewMode
|
||||
|
|
@ -55,6 +56,8 @@ class AccelerometerViewModel @Inject constructor(
|
|||
is AccelerometerContract.Event.OnAccelScaleChanged -> reduce(viewState.value, event)
|
||||
is AccelerometerContract.Event.OnAccelScaleEdit -> reduce(viewState.value, event)
|
||||
is AccelerometerContract.Event.OnAccelEdit -> reduce(viewState.value, event)
|
||||
is AccelerometerContract.Event.OnRealtimeViewModeEdit -> reduce(viewState.value, event)
|
||||
is AccelerometerContract.Event.OnRealtimeViewModeChanged -> reduce(viewState.value, event)
|
||||
is AccelerometerContract.Event.OnHistoryEdit -> reduce(viewState.value, event)
|
||||
is AccelerometerContract.Event.OnHistoryScaleChanged -> reduce(viewState.value, event)
|
||||
is AccelerometerContract.Event.OnHistoryViewModeChanged -> reduce(viewState.value, event)
|
||||
|
|
@ -314,6 +317,36 @@ class AccelerometerViewModel @Inject constructor(
|
|||
|
||||
}
|
||||
|
||||
private fun reduce(
|
||||
state: AccelerometerContract.State,
|
||||
event: AccelerometerContract.Event.OnRealtimeViewModeEdit
|
||||
) {
|
||||
|
||||
setEffect {
|
||||
AccelerometerContract.Effect.ShowRealtimeViewModeEdit
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun reduce(
|
||||
state: AccelerometerContract.State,
|
||||
event: AccelerometerContract.Event.OnRealtimeViewModeChanged
|
||||
) {
|
||||
|
||||
if(state is AccelerometerContract.State.Display){
|
||||
|
||||
setState {
|
||||
|
||||
state.copy(
|
||||
accelRealtimeViewMode = event.mode
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun reduce(
|
||||
state: AccelerometerContract.State,
|
||||
event: AccelerometerContract.Event.OnSpectreEdit
|
||||
|
|
@ -489,14 +522,18 @@ class AccelerometerViewModel @Inject constructor(
|
|||
|
||||
viewModelScope.launch {
|
||||
|
||||
setEffect {
|
||||
AccelerometerContract.Effect.ShowAccelerometerAccel
|
||||
if(state is AccelerometerContract.State.Display){
|
||||
|
||||
setEffect {
|
||||
|
||||
AccelerometerContract.Effect.ShowAccelerometerAccel
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private fun reduce(
|
||||
|
|
@ -521,6 +558,7 @@ class AccelerometerViewModel @Inject constructor(
|
|||
accelerometer = bleMapper.map(event.ble) as BleView.Accelerometer,
|
||||
writeState = null,
|
||||
accelViewMode = AccelViewMode.ACCELERATION,
|
||||
accelRealtimeViewMode = RealtimeViewMode.Accel(AccelViewMode.ACCELERATION),
|
||||
fftAxis = FftAxis.AUTO,
|
||||
fftFrequency = FftFrequency.F_400,
|
||||
fftViewMode = FftViewMode.SPECTRE,
|
||||
|
|
|
|||
|
|
@ -24,13 +24,15 @@ import llc.arma.ble.domain.usecase.FftAxis
|
|||
import llc.arma.ble.domain.usecase.FftFrequency
|
||||
import llc.arma.ble.domain.usecase.FftViewMode
|
||||
|
||||
|
||||
|
||||
@Composable
|
||||
fun AccelEdit(
|
||||
state: AccelerometerContract.State.Display,
|
||||
onEvent: (AccelerometerContract.Event) -> Unit,
|
||||
){
|
||||
|
||||
val accelMode = state.accelViewMode
|
||||
val accelMode = state.accelRealtimeViewMode
|
||||
val fftMode = state.fftViewMode
|
||||
val fftAxis = state.fftAxis
|
||||
val fftFrequency = state.fftFrequency
|
||||
|
|
@ -42,7 +44,7 @@ fun AccelEdit(
|
|||
|
||||
Text(
|
||||
modifier = Modifier.padding(horizontal = 12.dp),
|
||||
text = "Ускорение",
|
||||
text = "Параметры",
|
||||
style = MaterialTheme.typography.titleLarge
|
||||
)
|
||||
|
||||
|
|
@ -64,11 +66,7 @@ fun AccelEdit(
|
|||
modifier = Modifier
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.clickable {
|
||||
onEvent(
|
||||
AccelerometerContract.Event.OnAccelViewModeEdit(
|
||||
next = AccelerometerContract.Event.Next.ACCEL
|
||||
)
|
||||
)
|
||||
onEvent(AccelerometerContract.Event.OnRealtimeViewModeEdit)
|
||||
}
|
||||
.padding(8.dp)
|
||||
) {
|
||||
|
|
@ -78,7 +76,7 @@ fun AccelEdit(
|
|||
) {
|
||||
|
||||
Text(
|
||||
text = "Accel view mode"
|
||||
text = "Измеряемый параметр"
|
||||
)
|
||||
Text(
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
|
|
@ -97,6 +95,131 @@ fun AccelEdit(
|
|||
|
||||
}
|
||||
|
||||
if(accelMode is RealtimeViewMode.Spectre){
|
||||
|
||||
Box(
|
||||
modifier = Modifier.padding(
|
||||
vertical = 8.dp,
|
||||
horizontal = 8.dp
|
||||
)
|
||||
) {
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.clickable {
|
||||
onEvent(AccelerometerContract.Event.OnFftModeEdit)
|
||||
}
|
||||
.padding(8.dp)
|
||||
) {
|
||||
|
||||
Column(
|
||||
modifier = Modifier.weight(1f)
|
||||
) {
|
||||
|
||||
Text(
|
||||
text = "Режим просмотра"
|
||||
)
|
||||
Text(
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
text = fftMode.localized
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.KeyboardArrowDown,
|
||||
contentDescription = null
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Box(
|
||||
modifier = Modifier.padding(
|
||||
vertical = 8.dp,
|
||||
horizontal = 8.dp
|
||||
)
|
||||
) {
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.clickable { onEvent(AccelerometerContract.Event.OnFftAxisEdit) }
|
||||
.padding(8.dp)
|
||||
) {
|
||||
|
||||
Column(
|
||||
modifier = Modifier.weight(1f)
|
||||
) {
|
||||
|
||||
Text(
|
||||
text = "Ось"
|
||||
)
|
||||
Text(
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
text = fftAxis.localized
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.KeyboardArrowDown,
|
||||
contentDescription = null
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Box(
|
||||
modifier = Modifier.padding(
|
||||
vertical = 8.dp,
|
||||
horizontal = 8.dp
|
||||
)
|
||||
) {
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.clickable {
|
||||
onEvent(AccelerometerContract.Event.OnFftFrequencyEdit)
|
||||
}
|
||||
.padding(8.dp)
|
||||
) {
|
||||
|
||||
Column(
|
||||
modifier = Modifier.weight(1f)
|
||||
) {
|
||||
|
||||
Text(
|
||||
text = "Частота дистретизации"
|
||||
)
|
||||
Text(
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
text = fftFrequency.localized
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.KeyboardArrowDown,
|
||||
contentDescription = null
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Box(
|
||||
modifier = Modifier.padding(
|
||||
vertical = 8.dp,
|
||||
|
|
@ -119,7 +242,7 @@ fun AccelEdit(
|
|||
) {
|
||||
|
||||
Text(
|
||||
text = "Accel scale"
|
||||
text = "Масштаб"
|
||||
)
|
||||
Text(
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ fun AccelFftAxisEdit(
|
|||
shape = CircleShape,
|
||||
color = MaterialTheme.colorScheme.primaryContainer,
|
||||
onClick = {
|
||||
onEvent(AccelerometerContract.Event.OnSpectreEdit)
|
||||
onEvent(AccelerometerContract.Event.OnAccelEdit)
|
||||
}
|
||||
) {
|
||||
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ fun AccelFftModeEdit(
|
|||
shape = CircleShape,
|
||||
color = MaterialTheme.colorScheme.primaryContainer,
|
||||
onClick = {
|
||||
onEvent(AccelerometerContract.Event.OnSpectreEdit)
|
||||
onEvent(AccelerometerContract.Event.OnAccelEdit)
|
||||
}
|
||||
) {
|
||||
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ fun AccelFrequencyEdit(
|
|||
shape = CircleShape,
|
||||
color = MaterialTheme.colorScheme.primaryContainer,
|
||||
onClick = {
|
||||
onEvent(AccelerometerContract.Event.OnSpectreEdit)
|
||||
onEvent(AccelerometerContract.Event.OnAccelEdit)
|
||||
}
|
||||
) {
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,136 @@
|
|||
package llc.arma.ble.app.ui.screen.inspection.accelerometer.view
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.RadioButton
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.unit.dp
|
||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.AccelerometerContract
|
||||
import llc.arma.ble.domain.usecase.AccelViewMode
|
||||
import llc.arma.ble.domain.usecase.AccelViewMode.*
|
||||
|
||||
val RealtimeViewMode.localized: String
|
||||
get() {
|
||||
return when(this){
|
||||
is RealtimeViewMode.Accel -> this.accelViewMode.localized
|
||||
RealtimeViewMode.Spectre -> "Спектр"
|
||||
}
|
||||
}
|
||||
|
||||
sealed class RealtimeViewMode {
|
||||
|
||||
data class Accel(
|
||||
val accelViewMode: AccelViewMode
|
||||
): RealtimeViewMode()
|
||||
|
||||
object Spectre : RealtimeViewMode()
|
||||
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun AccelRealtimeViewEdit(
|
||||
state: AccelerometerContract.State.Display,
|
||||
onEvent: (AccelerometerContract.Event) -> Unit,
|
||||
){
|
||||
|
||||
var value by remember(state.accelRealtimeViewMode) {
|
||||
mutableStateOf(state.accelRealtimeViewMode)
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
) {
|
||||
|
||||
Text(
|
||||
modifier = Modifier.padding(horizontal = 12.dp),
|
||||
text = "Accel view mode",
|
||||
style = MaterialTheme.typography.titleLarge
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
values().forEach {
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.clip(RoundedCornerShape(8.dp))
|
||||
.clickable { value = RealtimeViewMode.Accel(it) }
|
||||
.padding(4.dp)
|
||||
) {
|
||||
|
||||
RadioButton(
|
||||
selected = value is RealtimeViewMode.Accel && it == (value as RealtimeViewMode.Accel).accelViewMode,
|
||||
onClick = {
|
||||
value = RealtimeViewMode.Accel(it)
|
||||
|
||||
}
|
||||
)
|
||||
|
||||
Text(text = it.localized)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.clip(RoundedCornerShape(8.dp))
|
||||
.clickable { value = RealtimeViewMode.Spectre }
|
||||
.padding(4.dp)
|
||||
) {
|
||||
|
||||
RadioButton(
|
||||
selected = value is RealtimeViewMode.Spectre,
|
||||
onClick = {
|
||||
value = RealtimeViewMode.Spectre
|
||||
}
|
||||
)
|
||||
|
||||
Text(text = RealtimeViewMode.Spectre.localized)
|
||||
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
Surface(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(8.dp)
|
||||
.height(50.dp),
|
||||
shape = CircleShape,
|
||||
color = MaterialTheme.colorScheme.primaryContainer,
|
||||
onClick = {
|
||||
onEvent(AccelerometerContract.Event.OnRealtimeViewModeChanged(value))
|
||||
onEvent(AccelerometerContract.Event.OnAccelEdit)
|
||||
|
||||
}
|
||||
) {
|
||||
|
||||
Box(modifier = Modifier.fillMaxSize()) {
|
||||
|
||||
Text(
|
||||
modifier = Modifier.align(Alignment.Center),
|
||||
color = MaterialTheme.colorScheme.background,
|
||||
style = MaterialTheme.typography.labelLarge,
|
||||
text = "Ок"
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -28,10 +28,13 @@ import androidx.compose.material.icons.Icons
|
|||
import androidx.compose.material.icons.rounded.Refresh
|
||||
import androidx.compose.ui.graphics.StrokeCap
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import com.patrykandpatrick.vico.compose.axis.axisGuidelineComponent
|
||||
import com.patrykandpatrick.vico.compose.chart.column.columnChart
|
||||
import com.patrykandpatrick.vico.compose.chart.scroll.rememberChartScrollState
|
||||
import com.patrykandpatrick.vico.compose.component.textComponent
|
||||
import com.patrykandpatrick.vico.core.axis.AxisPosition
|
||||
import com.patrykandpatrick.vico.core.axis.formatter.AxisValueFormatter
|
||||
import com.patrykandpatrick.vico.core.component.marker.MarkerComponent
|
||||
import com.patrykandpatrick.vico.core.entry.ChartEntry
|
||||
import com.patrykandpatrick.vico.core.entry.FloatEntry
|
||||
import kotlinx.coroutines.Job
|
||||
|
|
@ -231,12 +234,24 @@ fun Display(
|
|||
}
|
||||
|
||||
val lineChart = columnChart(
|
||||
spacing = 1.5.dp
|
||||
spacing = 1.5.dp,
|
||||
persistentMarkers = mapOf(producer.getModel().maxX to MarkerComponent(
|
||||
label = textComponent(),
|
||||
indicator = null,
|
||||
guideline = axisGuidelineComponent()
|
||||
)),
|
||||
)
|
||||
|
||||
val scrollState = rememberChartScrollState()
|
||||
|
||||
val marker = MarkerComponent(
|
||||
label = textComponent(),
|
||||
indicator = null,
|
||||
guideline = axisGuidelineComponent()
|
||||
)
|
||||
|
||||
Chart(
|
||||
marker = marker,
|
||||
diffAnimationSpec = tween(0),
|
||||
isZoomEnabled = true,
|
||||
chartScrollState = scrollState,
|
||||
|
|
|
|||
|
|
@ -27,11 +27,14 @@ import androidx.compose.material.icons.rounded.Refresh
|
|||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.graphics.StrokeCap
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import com.patrykandpatrick.vico.compose.axis.axisGuidelineComponent
|
||||
import com.patrykandpatrick.vico.compose.axis.horizontal.bottomAxis
|
||||
import com.patrykandpatrick.vico.compose.chart.line.lineChart
|
||||
import com.patrykandpatrick.vico.compose.chart.scroll.rememberChartScrollSpec
|
||||
import com.patrykandpatrick.vico.compose.component.textComponent
|
||||
import com.patrykandpatrick.vico.core.chart.decoration.ThresholdLine
|
||||
import com.patrykandpatrick.vico.core.chart.scale.AutoScaleUp
|
||||
import com.patrykandpatrick.vico.core.component.marker.MarkerComponent
|
||||
import com.patrykandpatrick.vico.core.entry.FloatEntry
|
||||
import com.patrykandpatrick.vico.core.scroll.AutoScrollCondition
|
||||
import com.patrykandpatrick.vico.core.scroll.InitialScroll
|
||||
|
|
@ -192,12 +195,22 @@ fun Display(
|
|||
ThresholdLine(
|
||||
thresholdValue = 0f
|
||||
)
|
||||
)
|
||||
),
|
||||
persistentMarkers = mapOf(xProducer.getModel().maxX to MarkerComponent(
|
||||
label = textComponent(),
|
||||
indicator = null,
|
||||
guideline = axisGuidelineComponent()
|
||||
)),
|
||||
)
|
||||
|
||||
val marker = MarkerComponent(
|
||||
label = textComponent(),
|
||||
indicator = null,
|
||||
guideline = axisGuidelineComponent()
|
||||
)
|
||||
|
||||
val lastMeasure = state.measureHistory.lastOrNull()
|
||||
|
||||
Log.d("mode", lastMeasure.toString())
|
||||
|
||||
when(lastMeasure){
|
||||
is Ble.Accelerometer.RealtimePoint.Angle -> {
|
||||
|
|
@ -283,6 +296,7 @@ fun Display(
|
|||
|
||||
Text(text = "Ось Z:")
|
||||
Chart(
|
||||
marker = marker,
|
||||
chart = lineChart,
|
||||
chartModelProducer = zProducer,
|
||||
startAxis = startAxis(),
|
||||
|
|
@ -307,6 +321,7 @@ fun Display(
|
|||
Text(text = "Вибрация:")
|
||||
|
||||
Chart(
|
||||
marker = marker,
|
||||
chart = lineChart,
|
||||
chartModelProducer = xProducer,
|
||||
startAxis = startAxis(),
|
||||
|
|
@ -331,6 +346,7 @@ fun Display(
|
|||
Text(text = "Ось X:")
|
||||
|
||||
Chart(
|
||||
marker = marker,
|
||||
chart = lineChart,
|
||||
chartModelProducer = xProducer,
|
||||
startAxis = startAxis(),
|
||||
|
|
@ -349,6 +365,7 @@ fun Display(
|
|||
|
||||
Text(text = "Ось Y:")
|
||||
Chart(
|
||||
marker = marker,
|
||||
chart = lineChart,
|
||||
chartModelProducer = yProducer,
|
||||
startAxis = startAxis(),
|
||||
|
|
@ -367,6 +384,7 @@ fun Display(
|
|||
|
||||
Text(text = "Ось Z:")
|
||||
Chart(
|
||||
marker = marker,
|
||||
chart = lineChart,
|
||||
chartModelProducer = zProducer,
|
||||
startAxis = startAxis(),
|
||||
|
|
|
|||
|
|
@ -27,13 +27,17 @@ import androidx.compose.material.icons.rounded.CloudUpload
|
|||
import androidx.compose.material.icons.rounded.Refresh
|
||||
import androidx.compose.ui.graphics.StrokeCap
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import com.patrykandpatrick.vico.compose.axis.axisGuidelineComponent
|
||||
import com.patrykandpatrick.vico.compose.axis.horizontal.bottomAxis
|
||||
import com.patrykandpatrick.vico.compose.chart.line.lineChart
|
||||
import com.patrykandpatrick.vico.compose.chart.scroll.rememberChartScrollSpec
|
||||
import com.patrykandpatrick.vico.compose.component.textComponent
|
||||
import com.patrykandpatrick.vico.core.axis.AxisPosition
|
||||
import com.patrykandpatrick.vico.core.axis.formatter.AxisValueFormatter
|
||||
import com.patrykandpatrick.vico.core.chart.decoration.ThresholdLine
|
||||
import com.patrykandpatrick.vico.core.chart.scale.AutoScaleUp
|
||||
import com.patrykandpatrick.vico.core.component.marker.MarkerComponent
|
||||
import com.patrykandpatrick.vico.core.component.text.TextComponent
|
||||
import com.patrykandpatrick.vico.core.entry.ChartEntry
|
||||
import com.patrykandpatrick.vico.core.entry.FloatEntry
|
||||
import com.patrykandpatrick.vico.core.scroll.AutoScrollCondition
|
||||
|
|
@ -99,12 +103,12 @@ fun AccelerometerHistory(
|
|||
val title = when(state){
|
||||
is AccelerometerHistoryContract.State.Display -> {
|
||||
when (state.loadingHistoryState) {
|
||||
is ProgressState.Finished -> "График измерений (${state.loadingHistoryState.data.size})"
|
||||
is ProgressState.Indeterminate -> "График измерений"
|
||||
is ProgressState.Progress -> "График измерений"
|
||||
is ProgressState.Finished -> "${accelMode.localized} (${state.loadingHistoryState.data.size})"
|
||||
is ProgressState.Indeterminate -> accelMode.localized
|
||||
is ProgressState.Progress -> accelMode.localized
|
||||
}
|
||||
}
|
||||
AccelerometerHistoryContract.State.Exception -> "График измерений"
|
||||
AccelerometerHistoryContract.State.Exception -> accelMode.localized
|
||||
}
|
||||
|
||||
Text(
|
||||
|
|
@ -258,6 +262,11 @@ fun Display(
|
|||
})
|
||||
|
||||
val lineChart = lineChart(
|
||||
persistentMarkers = mapOf(xProducer.getModel().maxX to MarkerComponent(
|
||||
label = textComponent(),
|
||||
indicator = null,
|
||||
guideline = axisGuidelineComponent()
|
||||
)),
|
||||
decorations = listOf(
|
||||
ThresholdLine(
|
||||
thresholdValue = 0f
|
||||
|
|
@ -267,6 +276,12 @@ fun Display(
|
|||
|
||||
val lastMeasure = state.loadingHistoryState.data.lastOrNull()
|
||||
|
||||
val marker = MarkerComponent(
|
||||
label = textComponent(),
|
||||
indicator = null,
|
||||
guideline = axisGuidelineComponent()
|
||||
)
|
||||
|
||||
when(lastMeasure){
|
||||
is Ble.Accelerometer.HistoryPoint.Acceleration,
|
||||
is Ble.Accelerometer.HistoryPoint.Angle -> {
|
||||
|
|
@ -275,6 +290,7 @@ fun Display(
|
|||
Text(text = "Ось X:")
|
||||
|
||||
Chart(
|
||||
marker = marker,
|
||||
chart = lineChart,
|
||||
chartModelProducer = xProducer,
|
||||
startAxis = startAxis(),
|
||||
|
|
@ -297,6 +313,7 @@ fun Display(
|
|||
|
||||
Text(text = "Ось Y:")
|
||||
Chart(
|
||||
marker = marker,
|
||||
chart = lineChart,
|
||||
chartModelProducer = yProducer,
|
||||
startAxis = startAxis(),
|
||||
|
|
@ -319,6 +336,7 @@ fun Display(
|
|||
|
||||
Text(text = "Ось Z:")
|
||||
Chart(
|
||||
marker = marker,
|
||||
chart = lineChart,
|
||||
chartModelProducer = zProducer,
|
||||
startAxis = startAxis(),
|
||||
|
|
@ -347,6 +365,7 @@ fun Display(
|
|||
Text(text = "Обороты:")
|
||||
|
||||
Chart(
|
||||
marker = marker,
|
||||
chart = lineChart,
|
||||
chartModelProducer = xProducer,
|
||||
startAxis = startAxis(),
|
||||
|
|
@ -375,6 +394,7 @@ fun Display(
|
|||
Text(text = "Вибрация:")
|
||||
|
||||
Chart(
|
||||
marker = marker,
|
||||
chart = lineChart,
|
||||
chartModelProducer = xProducer,
|
||||
startAxis = startAxis(),
|
||||
|
|
|
|||
|
|
@ -142,48 +142,55 @@ fun DisplayState(
|
|||
|
||||
}
|
||||
|
||||
Box(
|
||||
modifier = Modifier.padding(
|
||||
vertical = 8.dp,
|
||||
horizontal = 8.dp
|
||||
)
|
||||
) {
|
||||
if(ble.accelerometerState.saveHistory is Ble.Accelerometer.HistorySettings.Enabled) {
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.clickable {
|
||||
onEvent(AccelerometerContract.Event.OnSaveIntervalEdit)
|
||||
}
|
||||
.padding(8.dp)
|
||||
Box(
|
||||
modifier = Modifier.padding(
|
||||
vertical = 8.dp,
|
||||
horizontal = 8.dp
|
||||
)
|
||||
) {
|
||||
|
||||
Column(
|
||||
modifier = Modifier.weight(1f)
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.clickable {
|
||||
onEvent(AccelerometerContract.Event.OnSaveIntervalEdit)
|
||||
}
|
||||
.padding(8.dp)
|
||||
) {
|
||||
|
||||
Text(
|
||||
text = "Интервал измерений"
|
||||
)
|
||||
Column(
|
||||
modifier = Modifier.weight(1f)
|
||||
) {
|
||||
|
||||
val hours = ble.accelerometerState.historyInterval / millisInHour
|
||||
val minutes = (ble.accelerometerState.historyInterval - (hours * millisInHour)) / millisInMinute
|
||||
val seconds = (ble.accelerometerState.historyInterval - (hours * millisInHour) - (minutes * millisInMinute)) / millisInSecond
|
||||
Text(
|
||||
text = "Интервал измерений"
|
||||
)
|
||||
|
||||
Text(
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
text = "$hours ч. $minutes мин. $seconds сек."
|
||||
val hours =
|
||||
ble.accelerometerState.historyInterval / millisInHour
|
||||
val minutes =
|
||||
(ble.accelerometerState.historyInterval - (hours * millisInHour)) / millisInMinute
|
||||
val seconds =
|
||||
(ble.accelerometerState.historyInterval - (hours * millisInHour) - (minutes * millisInMinute)) / millisInSecond
|
||||
|
||||
Text(
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
text = "$hours ч. $minutes мин. $seconds сек."
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.KeyboardArrowDown,
|
||||
contentDescription = null
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.KeyboardArrowDown,
|
||||
contentDescription = null
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -200,7 +207,13 @@ fun DisplayState(
|
|||
modifier = Modifier
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.clickable {
|
||||
onEvent(AccelerometerContract.Event.OnShowAccelerometerHistory)
|
||||
|
||||
when(origin.accelerometerState.saveHistorySettings){
|
||||
is Ble.Accelerometer.HistorySettings.Disabled ->
|
||||
onEvent(AccelerometerContract.Event.OnAccelEdit)
|
||||
is Ble.Accelerometer.HistorySettings.Enabled ->
|
||||
onEvent(AccelerometerContract.Event.OnShowAccelerometerHistory)
|
||||
}
|
||||
}
|
||||
.padding(8.dp)
|
||||
) {
|
||||
|
|
@ -213,75 +226,14 @@ fun DisplayState(
|
|||
text = "График измерений"
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.KeyboardArrowRight,
|
||||
contentDescription = null
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Box(
|
||||
modifier = Modifier.padding(
|
||||
vertical = 8.dp,
|
||||
horizontal = 8.dp
|
||||
)
|
||||
) {
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.clickable { onEvent(AccelerometerContract.Event.OnAccelEdit) }
|
||||
.padding(8.dp)
|
||||
) {
|
||||
|
||||
Column(
|
||||
modifier = Modifier.weight(1f)
|
||||
) {
|
||||
|
||||
Text(
|
||||
text = "Ускорение"
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.KeyboardArrowRight,
|
||||
contentDescription = null
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Box(
|
||||
modifier = Modifier.padding(
|
||||
vertical = 8.dp,
|
||||
horizontal = 8.dp
|
||||
)
|
||||
) {
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.clickable {
|
||||
onEvent(AccelerometerContract.Event.OnSpectreEdit)
|
||||
}
|
||||
.padding(8.dp)
|
||||
) {
|
||||
|
||||
Column(
|
||||
modifier = Modifier.weight(1f)
|
||||
) {
|
||||
|
||||
Text(
|
||||
text = "Спектр"
|
||||
)
|
||||
/*Text(
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
text = when(origin.accelerometerState.saveHistorySettings){
|
||||
Ble.Accelerometer.HistorySettings.Disabled -> "Текущие измерения"
|
||||
is Ble.Accelerometer.HistorySettings.Enabled -> ""
|
||||
}
|
||||
)*/
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package llc.arma.ble.data
|
|||
|
||||
import android.app.Application
|
||||
import android.os.SystemClock
|
||||
import android.util.Log
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
|
|
@ -30,8 +31,8 @@ import llc.arma.ble.domain.usecase.AccelViewMode
|
|||
import llc.arma.ble.domain.usecase.FftAxis
|
||||
import llc.arma.ble.domain.usecase.FftFrequency
|
||||
import llc.arma.ble.domain.usecase.FftViewMode
|
||||
import no.nordicsemi.android.common.core.DataByteArray
|
||||
import no.nordicsemi.android.kotlin.ble.client.main.callback.ClientBleGatt
|
||||
import no.nordicsemi.android.kotlin.ble.core.data.util.DataByteArray
|
||||
import no.nordicsemi.android.kotlin.ble.core.scanner.BleNumOfMatches
|
||||
import no.nordicsemi.android.kotlin.ble.core.scanner.BleScanMode
|
||||
import no.nordicsemi.android.kotlin.ble.core.scanner.BleScannerCallbackType
|
||||
|
|
@ -154,7 +155,7 @@ class BleRepositoryImpl @Inject constructor(
|
|||
|
||||
Ble.Accelerometer(
|
||||
info = newResult.copy(
|
||||
rssi = if((SystemClock.elapsedRealtimeNanos() - newResult.scanTime) > 15_000_000_000) {
|
||||
rssi = if((SystemClock.elapsedRealtime() - newResult.scanTime) > 15_000) {
|
||||
null
|
||||
} else {
|
||||
newResult.rssi
|
||||
|
|
@ -195,7 +196,7 @@ class BleRepositoryImpl @Inject constructor(
|
|||
|
||||
Ble.Beacon(
|
||||
info = newResult.copy(
|
||||
rssi = if((SystemClock.elapsedRealtimeNanos() - newResult.scanTime) > 15_000_000_000) {
|
||||
rssi = if((SystemClock.elapsedRealtime() - newResult.scanTime) > 15_000) {
|
||||
null
|
||||
} else {
|
||||
newResult.rssi
|
||||
|
|
@ -243,7 +244,7 @@ class BleRepositoryImpl @Inject constructor(
|
|||
|
||||
Ble.Thermometer(
|
||||
info = newResult.copy(
|
||||
rssi = if((SystemClock.elapsedRealtimeNanos() - newResult.scanTime) > 15_000_000_000) {
|
||||
rssi = if((SystemClock.elapsedRealtime() - newResult.scanTime) > 15_000) {
|
||||
null
|
||||
} else {
|
||||
newResult.rssi
|
||||
|
|
@ -495,6 +496,10 @@ class BleRepositoryImpl @Inject constructor(
|
|||
|
||||
}
|
||||
|
||||
service.findCharacteristic(flashWriteUUID)!!.write(
|
||||
DataByteArray.from(9)
|
||||
)
|
||||
|
||||
connection.close()
|
||||
|
||||
Result.success(Unit)
|
||||
|
|
@ -537,6 +542,10 @@ class BleRepositoryImpl @Inject constructor(
|
|||
|
||||
}
|
||||
|
||||
connection.discoverServices().findService(serviceUUID)?.findCharacteristic(flashWriteUUID)!!.write(
|
||||
DataByteArray.from(9)
|
||||
)
|
||||
|
||||
connection.close()
|
||||
|
||||
Result.success(Unit)
|
||||
|
|
@ -582,6 +591,8 @@ class BleRepositoryImpl @Inject constructor(
|
|||
BleException.UnexpectedResponse
|
||||
)
|
||||
|
||||
Log.d("write", request.toString())
|
||||
|
||||
request.tx?.let {
|
||||
service.findCharacteristic(txWriteUUID)!!.write(
|
||||
DataByteArray.from(it.sendData)
|
||||
|
|
@ -618,7 +629,9 @@ class BleRepositoryImpl @Inject constructor(
|
|||
|
||||
}
|
||||
|
||||
connection.close()
|
||||
service.findCharacteristic(flashWriteUUID)!!.write(
|
||||
DataByteArray.from(9)
|
||||
)
|
||||
|
||||
Result.success(Unit)
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ import llc.arma.ble.domain.common.ProgressState
|
|||
import llc.arma.ble.domain.model.Ble
|
||||
import llc.arma.ble.domain.usecase.AccelScale
|
||||
import llc.arma.ble.domain.usecase.AccelViewMode
|
||||
import no.nordicsemi.android.common.core.DataByteArray
|
||||
import no.nordicsemi.android.kotlin.ble.client.main.callback.ClientBleGatt
|
||||
import no.nordicsemi.android.kotlin.ble.core.data.util.DataByteArray
|
||||
|
||||
|
||||
@OptIn(ExperimentalUnsignedTypes::class)
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ import llc.arma.ble.domain.usecase.AccelViewMode.*
|
|||
import llc.arma.ble.domain.usecase.FftAxis
|
||||
import llc.arma.ble.domain.usecase.FftFrequency
|
||||
import llc.arma.ble.domain.usecase.FftViewMode
|
||||
import no.nordicsemi.android.common.core.DataByteArray
|
||||
import no.nordicsemi.android.kotlin.ble.client.main.callback.ClientBleGatt
|
||||
import no.nordicsemi.android.kotlin.ble.core.data.util.DataByteArray
|
||||
|
||||
fun getAccelerometerRealtimeData(
|
||||
app: Application,
|
||||
|
|
|
|||
|
|
@ -25,8 +25,8 @@ import llc.arma.ble.domain.usecase.AccelViewMode
|
|||
import llc.arma.ble.domain.usecase.FftAxis
|
||||
import llc.arma.ble.domain.usecase.FftFrequency
|
||||
import llc.arma.ble.domain.usecase.FftViewMode
|
||||
import no.nordicsemi.android.common.core.DataByteArray
|
||||
import no.nordicsemi.android.kotlin.ble.client.main.callback.ClientBleGatt
|
||||
import no.nordicsemi.android.kotlin.ble.core.data.util.DataByteArray
|
||||
import java.nio.ByteBuffer
|
||||
import java.nio.ByteOrder.LITTLE_ENDIAN
|
||||
import java.util.UUID
|
||||
|
|
@ -78,9 +78,7 @@ fun readAccelerometerSpectre(
|
|||
))
|
||||
)
|
||||
|
||||
val notifications = characteristic.getNotifications()
|
||||
|
||||
notifications.collect {
|
||||
characteristic.getNotifications().collect {
|
||||
|
||||
var initialValue: Long? = null
|
||||
var frequencyInterval: Long? = null
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ import llc.arma.ble.domain.Result
|
|||
import llc.arma.ble.domain.common.BleException
|
||||
import llc.arma.ble.domain.common.ProgressState
|
||||
import llc.arma.ble.domain.model.Ble
|
||||
import no.nordicsemi.android.common.core.DataByteArray
|
||||
import no.nordicsemi.android.kotlin.ble.client.main.callback.ClientBleGatt
|
||||
import no.nordicsemi.android.kotlin.ble.core.data.util.DataByteArray
|
||||
|
||||
@OptIn(ExperimentalUnsignedTypes::class)
|
||||
fun readThermometerHistory(
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ val BleScanResult.info: BleInfo
|
|||
rssi = data?.rssi,
|
||||
type = type,
|
||||
scanTime = (data?.timestampNanos ?: 0) / 1_000_000,
|
||||
tx = data?.txPower ?: 0,
|
||||
tx = data?.scanRecord?.txPowerLevel ?: 0,
|
||||
recordEnabled = timerEnabled
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue