diff --git a/README.md b/README.md index f47f320..84be9ec 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Module for creating the BlueST-SDK library ## For using it -Code compiled using gradle 8.2.1 and JDK jbr-17 +Code compiled using gradle 8.2.1 and JDK 17.0.7 set on Gradle properties the Github Login name and SSO authentication Example: diff --git a/app/build.gradle b/app/build.gradle index 13be67e..25f545f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,9 +20,9 @@ android { defaultConfig { applicationId "com.st.demo" minSdk rootProject.minSdk - targetSdkVersion targetSdk - versionCode 2 - versionName "5.0.0" + targetSdkVersion rootProject.targetSdk + versionCode 3 + versionName "5.2.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/com/st/demo/device_list/BleDeviceList.kt b/app/src/main/java/com/st/demo/device_list/BleDeviceList.kt index 0ad0757..3e4f5a7 100644 --- a/app/src/main/java/com/st/demo/device_list/BleDeviceList.kt +++ b/app/src/main/java/com/st/demo/device_list/BleDeviceList.kt @@ -31,7 +31,6 @@ import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.navigation.NavHostController @@ -50,8 +49,6 @@ fun BleDeviceList( viewModel: BleDeviceListViewModel, navController: NavHostController ) { - val context = LocalContext.current - var doNotShowRationale by rememberSaveable { mutableStateOf(false) } diff --git a/build.gradle b/build.gradle index 56e025c..e943878 100644 --- a/build.gradle +++ b/build.gradle @@ -16,29 +16,29 @@ buildscript { compose_bom_date = '2023.10.01' - accompanist_version = '0.30.1' - activity_compose_version = '1.8.0' + accompanist_version = '0.32.0' + activity_compose_version = '1.8.2' appcompat_version = '1.6.1' compose_compiler_version = '1.5.3' core_ktx_version = '1.12.0' espresso_core_version = '3.5.1' - google_material_version = '1.10.0' - gradle_version = '8.1.2' - hilt_version = '2.48.1' - hilt_compose_version = '1.0.0' - hilt_navigation_fragment_version = '1.0.0' + google_material_version = '1.11.0' + gradle_version = '8.2.2' + hilt_version = '2.50' + hilt_compose_version = '1.1.0' + hilt_navigation_fragment_version = '1.1.0' junit_version = '4.13.2' junit_ui_version = '1.1.5' kotlin_version = '1.9.10' - kotlinx_serialization_version = '1.6.0' + kotlinx_serialization_version = '1.6.2' kotlinx_retrofit_version = '1.0.0' ktlint_version = '11.3.1' - lifecycle_version = '2.6.2' - logging_version = '5.0.0-alpha.11' + lifecycle_version = '2.7.0' + logging_version = '5.0.0-alpha.12' nav_version = '2.6.0' - navigation_compose_version = '2.7.4' + navigation_compose_version = '2.7.6' retrofit_version = '2.9.0' - room_version = '2.6.0' + room_version = '2.6.1' } repositories { diff --git a/st_blue_sdk/publish.gradle b/st_blue_sdk/publish.gradle index 5442e25..27e03ca 100644 --- a/st_blue_sdk/publish.gradle +++ b/st_blue_sdk/publish.gradle @@ -10,7 +10,7 @@ apply plugin: 'maven-publish' def LIB_GROUP_ID = 'com.st.blue.sdk' def LIB_ARTIFACT_ID = 'st-blue-sdk' -def LIB_VERSION = '1.1.0' +def LIB_VERSION = '1.1.3' afterEvaluate { publishing { diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/BlueManager.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/BlueManager.kt index b20913c..3e86549 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/BlueManager.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/BlueManager.kt @@ -9,6 +9,7 @@ package com.st.blue_sdk import android.content.ContentResolver import android.net.Uri +import com.st.blue_sdk.board_catalog.models.BleCharacteristic import com.st.blue_sdk.board_catalog.models.BoardDescription import com.st.blue_sdk.board_catalog.models.BoardFirmware import com.st.blue_sdk.board_catalog.models.DtmiModel @@ -50,7 +51,11 @@ interface BlueManager { fun getRssi(nodeId: String) - fun connectToNode(nodeId: String, maxPayloadSize: Int = 248, enableServer: Boolean = true): Flow + fun connectToNode( + nodeId: String, + maxPayloadSize: Int = 248, + enableServer: Boolean = true + ): Flow fun getNode(nodeId: String): Node? @@ -66,7 +71,10 @@ interface BlueManager { suspend fun getNodeWithFirmwareInfo(nodeId: String): Node - suspend fun enableFeatures(nodeId: String, features: List>): Boolean + suspend fun enableFeatures( + nodeId: String, features: List>, + onFeaturesEnabled: CoroutineScope.() -> Unit = { /** NOOP **/ } + ): Boolean suspend fun disableFeatures(nodeId: String, features: List>): Boolean @@ -103,9 +111,9 @@ interface BlueManager { suspend fun getBoardsDescription(): List - suspend fun reset(url: String?=null) + suspend fun reset(url: String? = null) - suspend fun getDtmiModel(nodeId: String,isBeta: Boolean): DtmiModel? + suspend fun getDtmiModel(nodeId: String, isBeta: Boolean): DtmiModel? suspend fun setBoardCatalog(fileUri: Uri, contentResolver: ContentResolver): List @@ -119,6 +127,8 @@ interface BlueManager { suspend fun getSensorAdapter(uniqueId: Int): Sensor? + suspend fun getBleCharacteristics(): List + suspend fun upgradeFw(nodeId: String): FwConsole? fun getFwUpdateStrategy(nodeId: String): UpgradeStrategy diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/BlueManagerImpl.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/BlueManagerImpl.kt index 32af3bd..d8c6f99 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/BlueManagerImpl.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/BlueManagerImpl.kt @@ -17,6 +17,7 @@ import android.content.Context import android.net.Uri import android.util.Log import com.st.blue_sdk.board_catalog.BoardCatalogRepo +import com.st.blue_sdk.board_catalog.models.BleCharacteristic import com.st.blue_sdk.board_catalog.models.BoardDescription import com.st.blue_sdk.board_catalog.models.BoardFirmware import com.st.blue_sdk.board_catalog.models.DtmiModel @@ -234,10 +235,21 @@ class BlueManagerImpl @Inject constructor( .filter { it.fota.bootloaderType == catalogInfo.fota.bootloaderType } .filter { !it.fota.fwUrl.isNullOrEmpty() }.sortedBy { it.fwName } - val fwUpdate = catalog.getFw( + //List of fws update ordered by fw version + val listOfFwUpdate = catalog.getFw( deviceId = catalogInfo.bleDevId, fwName = catalogInfo.fwName - ).filter { it.fota.fwUrl != null }.filter { it.fwVersion > catalogInfo.fwVersion } - .minByOrNull { it.fwVersion } + ).filter { it.fota.fwUrl != null }.filter { it.fwVersion > catalogInfo.fwVersion }.sortedBy { it.fwVersion } + + //Search if there is a mandatory update + val fwMandatory = listOfFwUpdate.firstOrNull { it.fota.mandatory==true } + + //the update will be the mandatory one, or the latest available + val fwUpdate = fwMandatory ?: listOfFwUpdate.maxByOrNull { it.fwVersion } + +// val fwUpdate = catalog.getFw( +// deviceId = catalogInfo.bleDevId, fwName = catalogInfo.fwName +// ).filter { it.fota.fwUrl != null }.filter { it.fwVersion > catalogInfo.fwVersion } +// .minByOrNull { it.fwVersion } node.copy( catalogInfo = catalogInfo, fwUpdate = fwUpdate, fwCompatibleList = fwCompatibleList @@ -354,12 +366,13 @@ class BlueManagerImpl @Inject constructor( } override suspend fun enableFeatures( - nodeId: String, features: List> + nodeId: String, features: List>, + onFeaturesEnabled: CoroutineScope.() -> Unit ): Boolean { val service = nodeServiceConsumer.getNodeService(nodeId) ?: throw IllegalStateException("Unable to find NodeService for $nodeId") - return service.setFeaturesNotifications(features = features, true) + return service.setFeaturesNotifications(features = features, true,onFeaturesEnabled) } override suspend fun disableFeatures( @@ -489,6 +502,10 @@ class BlueManagerImpl @Inject constructor( return catalog.getSensorAdapter(uniqueId=uniqueId) } + override suspend fun getBleCharacteristics() : List { + return catalog.getBleCharacteristics() + } + override suspend fun upgradeFw(nodeId: String): FwConsole? { return otaService.updateFirmware(nodeId) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/LoggableUnit.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/LoggableUnit.kt index badfa29..795f1ee 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/LoggableUnit.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/LoggableUnit.kt @@ -18,4 +18,5 @@ class LoggableUnit : Loggable { override fun toString(): String = "No Data" + override val logDoubleValues: List = listOf() } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/NodeService.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/NodeService.kt index 0fb9a36..9e88f3d 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/NodeService.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/NodeService.kt @@ -123,7 +123,8 @@ class NodeService( suspend fun setFeaturesNotifications( features: List>, - enabled: Boolean + enabled: Boolean, + onFeaturesEnabled: CoroutineScope.() -> Unit = { /** NOOP **/ } ): Boolean { var result = true @@ -135,17 +136,39 @@ class NodeService( }.toSet() characteristicsWithFeatures.forEach { - val operationResult = bleHal.setCharacteristicNotification( - serviceUid = it.characteristic.service.uuid.toString(), - characteristicUid = it.characteristic.uuid.toString(), - enabled = enabled - ) - - if (operationResult) { - it.hasEnabledNotifications = enabled + if(enabled) { + it.numberEnables++ + } else { + it.numberEnables-- } + //For Avoiding to do this operation when it's not necessary + if(it.hasEnabledNotifications!=enabled) { + //For avoiding to remove the notification on Aggregate Features + if((!enabled && (it.numberEnables==0)) || enabled) { + val operationResult = bleHal.setCharacteristicNotification( + serviceUid = it.characteristic.service.uuid.toString(), + characteristicUid = it.characteristic.uuid.toString(), + enabled = enabled + ) + + if (operationResult) { + it.hasEnabledNotifications = enabled + if(enabled) { + coroutineScope.launch { + onFeaturesEnabled.invoke(this) + } + } + } - result = result && operationResult + result = result && operationResult + } + } else { + if(enabled) { + coroutineScope.launch { + onFeaturesEnabled.invoke(this) + } + } + } } return result @@ -455,5 +478,6 @@ class NodeService( data class CharacteristicWithFeatures( val characteristic: BluetoothGattCharacteristic, var hasEnabledNotifications: Boolean = false, + var numberEnables: Int = 0, val features: List> = emptyList() ) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/BoardCatalogRepo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/BoardCatalogRepo.kt index f309882..0e51197 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/BoardCatalogRepo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/BoardCatalogRepo.kt @@ -9,6 +9,7 @@ package com.st.blue_sdk.board_catalog import android.content.ContentResolver import android.net.Uri +import com.st.blue_sdk.board_catalog.models.BleCharacteristic import com.st.blue_sdk.board_catalog.models.BoardDescription import com.st.blue_sdk.board_catalog.models.BoardFirmware import com.st.blue_sdk.board_catalog.models.DtmiModel @@ -23,6 +24,8 @@ interface BoardCatalogRepo { suspend fun getSensorAdapters(): List + suspend fun getBleCharacteristics(): List + suspend fun getSensorAdapter(uniqueId: Int): Sensor? suspend fun getFwDetailsNode(deviceId: String, bleFwId: String): BoardFirmware? diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/BoardCatalogRepoImpl.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/BoardCatalogRepoImpl.kt index f1f4308..02d782f 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/BoardCatalogRepoImpl.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/BoardCatalogRepoImpl.kt @@ -21,6 +21,7 @@ import com.st.blue_sdk.board_catalog.api.BoardCatalogApi import com.st.blue_sdk.board_catalog.api.di.StAppVersion import com.st.blue_sdk.board_catalog.db.BoardCatalogDao import com.st.blue_sdk.board_catalog.di.Preferences +import com.st.blue_sdk.board_catalog.models.BleCharacteristic import com.st.blue_sdk.board_catalog.models.BoardCatalog import com.st.blue_sdk.board_catalog.models.BoardDescription import com.st.blue_sdk.board_catalog.models.BoardFirmware @@ -58,6 +59,7 @@ class BoardCatalogRepoImpl @Inject constructor( private var cache: MutableSet = mutableSetOf() private var cacheBoardsDescription: MutableList = mutableListOf() private var cacheSensorAdapters: MutableList = mutableListOf() + private var cacheBleCharacteristics: MutableList = mutableListOf() private val mutex = Mutex() @@ -98,7 +100,7 @@ class BoardCatalogRepoImpl @Inject constructor( private suspend fun needSync(): Boolean { mutex.withLock { - if(catalogRequestOnGoing) { + if (catalogRequestOnGoing) { // Log.i("DB","Catalog catalogRequestOnGoing==$catalogRequestOnGoing, skip update") return false } @@ -152,7 +154,7 @@ class BoardCatalogRepoImpl @Inject constructor( } private suspend fun sync(url: String? = null) { - Log.i("DB","sync()") + Log.i("DB", "sync()") catalogRequestOnGoing = true mutex.withLock { try { @@ -161,6 +163,7 @@ class BoardCatalogRepoImpl @Inject constructor( cache.clear() cacheBoardsDescription.clear() cacheSensorAdapters.clear() + cacheBleCharacteristics.clear() val firmwares = if (url != null) api.getFirmwaresFromUrl(url + "catalog.json") else @@ -176,31 +179,36 @@ class BoardCatalogRepoImpl @Inject constructor( db.add(it) } - firmwares.boards?.let{ + firmwares.boards?.let { db.addDesc(it) cacheBoardsDescription.addAll(it) } - + firmwares.sensorAdapters?.let { db.addSensors(it) cacheSensorAdapters.addAll(it) } + firmwares.characteristics?.let { + db.addBleCharacteristics(it) + cacheBleCharacteristics.addAll(it) + } + val savedBoardsModelString = pref.getString(CUSTOM_BOARDS_MODEL, null) savedBoardsModelString?.let { val result = json.decodeFromString(savedBoardsModelString) - ?.let { boardCatalog -> - boardCatalog.bleListBoardFirmwareV1?.let { - db.add(it) - cache.addAll(it) - //it.forEach { it2 -> cache.add(it2) } + .let { boardCatalog -> + boardCatalog.bleListBoardFirmwareV1?.let { + db.add(it) + cache.addAll(it) + //it.forEach { it2 -> cache.add(it2) } + } + boardCatalog.bleListBoardFirmwareV2?.let { + db.add(it) + cache.addAll(it) + //it.forEach { it2 -> cache.add(it2) } + } } - boardCatalog.bleListBoardFirmwareV2?.let { - db.add(it) - cache.addAll(it) - //it.forEach { it2 -> cache.add(it2) } - } - } } val remoteChecksum = if (url != null) { @@ -219,7 +227,7 @@ class BoardCatalogRepoImpl @Inject constructor( override suspend fun reset(url: String?) { - Log.i("DB","reset()") + Log.i("DB", "reset()") sync(url) } @@ -245,14 +253,13 @@ class BoardCatalogRepoImpl @Inject constructor( cache.addAll(db.getDeviceFirmwares()) cacheBoardsDescription.clear() cacheSensorAdapters.clear() + cacheBleCharacteristics.clear() val descr = db.getBoardsDescription() - if(descr!=null) { - cacheBoardsDescription.addAll(descr) - } + cacheBoardsDescription.addAll(descr) val sensors = db.getSensorsDescription() - if(sensors!=null) { - cacheSensorAdapters.addAll(sensors) - } + cacheSensorAdapters.addAll(sensors) + val bleChars = db.getBleCharacteristics() + cacheBleCharacteristics.addAll(bleChars) // Log.i("DB","caches2 ${cache.size} ${cacheBoardsDescription.size}") } @@ -262,10 +269,7 @@ class BoardCatalogRepoImpl @Inject constructor( if (cacheBoardsDescription.isEmpty()) { // Log.i("DB","cacheBoardsDescription.isEmpty()") val retrievedBoardsDesc = db.getBoardsDescription() - if(retrievedBoardsDesc!=null) { -// Log.i("DB","retrievedBoardsDesc.size=${retrievedBoardsDesc.size}") - cacheBoardsDescription.addAll(retrievedBoardsDesc) - } + cacheBoardsDescription.addAll(retrievedBoardsDesc) } if (needSync()) { @@ -282,9 +286,7 @@ class BoardCatalogRepoImpl @Inject constructor( withContext(Dispatchers.IO) { if (cacheSensorAdapters.isEmpty()) { val retrieveSensorAdaptersDesc = db.getSensorsDescription() - if(retrieveSensorAdaptersDesc!=null) { - cacheSensorAdapters.addAll(retrieveSensorAdaptersDesc) - } + cacheSensorAdapters.addAll(retrieveSensorAdaptersDesc) } if (needSync()) { @@ -295,11 +297,30 @@ class BoardCatalogRepoImpl @Inject constructor( return cacheSensorAdapters } + + override suspend fun getBleCharacteristics(): List { +// Log.i("DB","getBoardsDescription()") + withContext(Dispatchers.IO) { + if (cacheBleCharacteristics.isEmpty()) { + val retrieveBleCharacteristics= db.getBleCharacteristics() + cacheBleCharacteristics.addAll(retrieveBleCharacteristics) + } + + if (needSync()) { + sync() + } + } + + return cacheBleCharacteristics + } + + + override suspend fun getSensorAdapter(uniqueId: Int): Sensor? { if (needSync()) { sync() } - return cacheSensorAdapters.firstOrNull{uniqueId==it.unique_id} + return cacheSensorAdapters.firstOrNull { uniqueId == it.unique_id } } override suspend fun getFwCompatible(deviceId: String): List { @@ -442,18 +463,20 @@ class BoardCatalogRepoImpl @Inject constructor( inStream.close() val result = json.decodeFromString(text).let { boardCatalog -> cache.clear() - boardCatalog.bleListBoardFirmwareV1?.let { - it.forEach { it2 -> - if (it2.bleFwId == "0xFF") it2.maturity = FirmwareMaturity.CUSTOM + boardCatalog.bleListBoardFirmwareV1?.let { listFw -> + listFw.forEach { firmware -> + if (firmware.bleFwId == "0xFF") firmware.maturity = + FirmwareMaturity.CUSTOM } - db.add(it) + db.add(listFw) //it.forEach { it2 -> cache.add(it2) } } - boardCatalog.bleListBoardFirmwareV2?.let { - it.forEach { it2 -> - if (it2.bleFwId == "0xFF") it2.maturity = FirmwareMaturity.CUSTOM + boardCatalog.bleListBoardFirmwareV2?.let { listFw -> + listFw.forEach { firmware -> + if (firmware.bleFwId == "0xFF") + firmware.maturity = FirmwareMaturity.CUSTOM } - db.add(it) + db.add(listFw) //it.forEach { it2 -> cache.add(it2) } } cache.addAll(db.getDeviceFirmwares()) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/db/BoardCatalogDB.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/db/BoardCatalogDB.kt index fb969cc..9b40de9 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/db/BoardCatalogDB.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/db/BoardCatalogDB.kt @@ -11,6 +11,7 @@ import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.TypeConverters import com.st.blue_sdk.board_catalog.db.converters.BleCharacteristicDataConverter +import com.st.blue_sdk.board_catalog.db.converters.BleCharacteristicFormatDataConverter import com.st.blue_sdk.board_catalog.db.converters.Board_compatibilityDataConverter import com.st.blue_sdk.board_catalog.db.converters.CloudAppDataConverter import com.st.blue_sdk.board_catalog.db.converters.CompatibleSensorAdapterDataConverter @@ -20,17 +21,19 @@ import com.st.blue_sdk.board_catalog.db.converters.FotaDetailsConverter import com.st.blue_sdk.board_catalog.db.converters.OptionByteDataConverter import com.st.blue_sdk.board_catalog.db.converters.PowerModeDataConverter import com.st.blue_sdk.board_catalog.db.converters.SensorConfigurationConverter +import com.st.blue_sdk.board_catalog.models.BleCharacteristic import com.st.blue_sdk.board_catalog.models.BoardDescription import com.st.blue_sdk.board_catalog.models.BoardFirmware import com.st.blue_sdk.board_catalog.models.Sensor @Database( - version = 15, + version = 19, exportSchema = true, entities = [ BoardFirmware::class, BoardDescription::class, - Sensor::class + Sensor::class, + BleCharacteristic::class ] ) @TypeConverters( @@ -43,7 +46,8 @@ import com.st.blue_sdk.board_catalog.models.Sensor PowerModeDataConverter::class, Board_compatibilityDataConverter::class, SensorConfigurationConverter::class, - DemoDecoratorDataConverter::class + DemoDecoratorDataConverter::class, + BleCharacteristicFormatDataConverter::class ) abstract class BoardCatalogDB : RoomDatabase() { abstract fun boardCatalogDao(): BoardCatalogDao diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/db/BoardCatalogDao.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/db/BoardCatalogDao.kt index 82a85d9..1e94b0d 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/db/BoardCatalogDao.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/db/BoardCatalogDao.kt @@ -11,6 +11,7 @@ import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query +import com.st.blue_sdk.board_catalog.models.BleCharacteristic import com.st.blue_sdk.board_catalog.models.BoardDescription import com.st.blue_sdk.board_catalog.models.BoardFirmware import com.st.blue_sdk.board_catalog.models.Sensor @@ -20,10 +21,13 @@ interface BoardCatalogDao { @Query("SELECT * FROM board_firmware ORDER BY ble_dev_id DESC") suspend fun getDeviceFirmwares(): List @Query("SELECT * FROM board_description ORDER BY ble_dev_id DESC") - suspend fun getBoardsDescription(): List? + suspend fun getBoardsDescription(): List @Query("SELECT * FROM sensor_adapters ORDER BY unique_id DESC") - suspend fun getSensorsDescription(): List? + suspend fun getSensorsDescription(): List + + @Query("SELECT * FROM BleCharacteristic ORDER BY uuid DESC") + suspend fun getBleCharacteristics(): List @Query("DELETE FROM board_firmware") suspend fun deleteAllEntries() @@ -39,4 +43,8 @@ interface BoardCatalogDao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun addSensors(sensorDescr: List) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun addBleCharacteristics(bleCharacteristics: List) + } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/db/converters/BleCharacteristicFormatDataConverter.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/db/converters/BleCharacteristicFormatDataConverter.kt new file mode 100644 index 0000000..f2d639e --- /dev/null +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/db/converters/BleCharacteristicFormatDataConverter.kt @@ -0,0 +1,20 @@ +package com.st.blue_sdk.board_catalog.db.converters + +import androidx.room.TypeConverter +import com.st.blue_sdk.board_catalog.models.BleCharacteristicFormat +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json + +class BleCharacteristicFormatDataConverter { + @TypeConverter + fun fromBleCharacteristicFormat(value: List): String { + if (value.isEmpty()) return "" + return Json.encodeToString(value) + } + + @TypeConverter + fun toBleCharacteristicFormat(value: String): List { + if (value.isEmpty()) return emptyList() + return Json.decodeFromString(value) + } +} \ No newline at end of file diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/BleCharacteristic.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/BleCharacteristic.kt index e67339e..382dbfa 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/BleCharacteristic.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/BleCharacteristic.kt @@ -7,9 +7,15 @@ */ package com.st.blue_sdk.board_catalog.models +import androidx.room.Entity import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +@Entity( + primaryKeys = ["uuid"], + tableName = "bleCharacteristic" +) + @Serializable data class BleCharacteristic( @SerialName(value = "name") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/BoardFirmware.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/BoardFirmware.kt index 0667b05..145d5b7 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/BoardFirmware.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/BoardFirmware.kt @@ -67,7 +67,7 @@ data class BoardFirmware( @SerialName("demo_decorator") var demoDecorator: DemoDecorator?=null, @SerialName("maturity") - var maturity: FirmwareMaturity?=null + var maturity: FirmwareMaturity = FirmwareMaturity.RELEASE ) { fun friendlyName(): String = @@ -118,7 +118,7 @@ data class BoardFirmware( result = 31 * result + fota.hashCode() result = 31 * result + (compatibleSensorAdapters?.hashCode() ?: 0) result = 31 * result + (demoDecorator?.hashCode() ?: 0) - result = 31 * result + (maturity?.hashCode() ?: 0) + result = 31 * result + maturity.hashCode() return result } } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/CloudApp.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/CloudApp.kt index b936c08..1066b03 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/CloudApp.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/CloudApp.kt @@ -20,6 +20,8 @@ data class CloudApp( var shareableLink: String? = null, @SerialName(value = "url") var url: String? = null, + @SerialName(value = "dtmi_type") + var dtmiType: String? = null, @SerialName(value = "description") val description: String? = null ) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/FirmwareMaturity.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/FirmwareMaturity.kt index 42d9665..58159dc 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/FirmwareMaturity.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/FirmwareMaturity.kt @@ -1,9 +1,10 @@ package com.st.blue_sdk.board_catalog.models enum class FirmwareMaturity { - DRAFT, - BETA, - RELEASE, - DEMO, - CUSTOM + DRAFT, //Entry added to catalog + BETA, // Release Candidate + RELEASE, // Release + DEMO, // Internal code + CUSTOM, // fwId == 0xFF + SPECIAL // Default } \ No newline at end of file diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/FotaDetails.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/FotaDetails.kt index b21eb7c..430e0e9 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/FotaDetails.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/board_catalog/models/FotaDetails.kt @@ -23,4 +23,6 @@ data class FotaDetails( val fwUrl: String? = null, @SerialName("bootloader_type") val bootloaderType: BootLoaderType? = BootLoaderType.NONE, + @SerialName("mandatory") + val mandatory: Boolean? = false ) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/bt/gatt/CallbackGattBridge.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/bt/gatt/CallbackGattBridge.kt index d8ca2bf..8837a02 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/bt/gatt/CallbackGattBridge.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/bt/gatt/CallbackGattBridge.kt @@ -135,8 +135,8 @@ class CallbackGattBridge : BluetoothGattCallback(), GattBridge { } override fun onCharacteristicChanged( - gatt: BluetoothGatt?, - characteristic: BluetoothGattCharacteristic? + gatt: BluetoothGatt, + characteristic: BluetoothGattCharacteristic ) { notificationListener?.invoke(characteristic) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/bt/gatt/FlowGattBridge.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/bt/gatt/FlowGattBridge.kt index 2a7956f..f4f230c 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/bt/gatt/FlowGattBridge.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/bt/gatt/FlowGattBridge.kt @@ -7,8 +7,14 @@ */ package com.st.blue_sdk.bt.gatt -import android.bluetooth.* +import android.bluetooth.BluetoothGatt +import android.bluetooth.BluetoothGattCallback +import android.bluetooth.BluetoothGattCharacteristic +import android.bluetooth.BluetoothGattDescriptor +import android.bluetooth.BluetoothGattService +import android.bluetooth.BluetoothProfile import android.util.Log +import com.st.blue_sdk.bt.hal.BleHal import com.st.blue_sdk.models.BleNotification import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow @@ -142,8 +148,7 @@ class GattBridgeFlow : BluetoothGattCallback(), GattBridge { override fun onCharacteristicChanged( gatt: BluetoothGatt?, - characteristic: BluetoothGattCharacteristic? - ) { + characteristic: BluetoothGattCharacteristic?) { characteristic?.let { Log.d( TAG, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/Feature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/Feature.kt index 39111f2..c356843 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/Feature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/Feature.kt @@ -114,7 +114,7 @@ abstract class Feature( companion object { fun fromSuffix(suffix: String): Type { - return values().firstOrNull { + return entries.firstOrNull { suffix.equals(other = it.suffix, ignoreCase = true) } ?: throw IllegalArgumentException("Type for suffix $suffix not found!") } @@ -151,8 +151,13 @@ abstract class Feature( val uuid: UUID? get() = when (type) { - STANDARD -> null - else -> UUID.fromString(String.format("%08X${type.suffix}", identifier)) + STANDARD -> { + null + } + GENERAL_PURPOSE -> + UUID.fromString(String.format("%04X${type.suffix}", identifier)) + else -> + UUID.fromString(String.format("%08X${type.suffix}", identifier)) } val mask: Int? @@ -200,7 +205,8 @@ abstract class Feature( 0x10000000 -> MemsNorm( isEnabled = isEnabled, - identifier = identifier + identifier = identifier, + name = "Mems Norm Legacy" ) 0x08000000 -> AudioADPCMFeature( diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/FeatureField.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/FeatureField.kt index 9476178..87cc9f0 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/FeatureField.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/FeatureField.kt @@ -26,4 +26,6 @@ data class FeatureField( } override val logValue: String = "$value" + + override val logDoubleValues: List = listOf() } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/FeatureUpdate.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/FeatureUpdate.kt index 0dd7537..a64002b 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/FeatureUpdate.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/FeatureUpdate.kt @@ -21,7 +21,8 @@ data class FeatureUpdate( val timeStamp: Long, val notificationTime: Date = Date(), val data: T, - val rawData: ByteArray + val rawData: ByteArray, + val featureName: String ) : Loggable where T : Loggable { override val logHeader: String = "notificationTime, timeStamp, RawData, ${data.logHeader.replace("%", "%%")}" @@ -31,6 +32,8 @@ data class FeatureUpdate( override val logValue: String = "$notificationTime, $timeStamp, $rawDataString, ${data.logValue}" + override val logDoubleValues: List = listOf() + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -41,9 +44,7 @@ data class FeatureUpdate( if (timeStamp != other.timeStamp) return false - if (data != other.data) return false - - return true + return data == other.data } override fun hashCode(): Int { diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/RawAudio.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/RawAudio.kt index b812057..eb7eadd 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/RawAudio.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/RawAudio.kt @@ -16,4 +16,5 @@ data class RawAudio( ) : Loggable { override val logHeader = data.logHeader override val logValue = data.logValue + override val logDoubleValues: List = listOf() } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration/Acceleration.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration/Acceleration.kt index 5df7509..e08a0a5 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration/Acceleration.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration/Acceleration.kt @@ -24,7 +24,7 @@ class Acceleration( companion object { const val DATA_MAX = 16000f const val NUMBER_BYTES = 6 - const val NAME = "Acceleration" + const val NAME = "Accelerometer" } override fun extractData( @@ -59,6 +59,7 @@ class Acceleration( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration/AccelerationInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration/AccelerationInfo.kt index f931a37..78071c2 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration/AccelerationInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration/AccelerationInfo.kt @@ -21,6 +21,9 @@ data class AccelerationInfo( override val logValue: String = "${x.logValue}, ${y.logValue}, ${z.logValue}" + override val logDoubleValues: List = + listOf(x.value.toDouble(), y.value.toDouble(), z.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${x.name} = ${x.value} ${x.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration_event/AccelerationEvent.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration_event/AccelerationEvent.kt index ab87712..9800bf2 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration_event/AccelerationEvent.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration_event/AccelerationEvent.kt @@ -84,6 +84,7 @@ class AccelerationEvent( ) } return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = numBytes, data = accEvent ) } @@ -117,37 +118,6 @@ class AccelerationEvent( return accEventList.toList() } - private fun retAccelerationTypeCode(accEvent: AccelerationType) = when (accEvent) { - AccelerationType.OrientationTopRight -> 1 - AccelerationType.OrientationBottomRight -> 2 - AccelerationType.OrientationBottomLeft -> 3 - AccelerationType.OrientationTopLeft -> 4 - AccelerationType.OrientationUp -> 5 - AccelerationType.OrientationDown -> 6 - AccelerationType.Tilt -> 1.shl(3) - AccelerationType.FreeFall -> 1.shl(4) - AccelerationType.SingleTap -> 1.shl(5) - AccelerationType.DoubleTap -> 1.shl(6) - AccelerationType.WakeUp -> 1.shl(7) - AccelerationType.Pedometer -> 1.shl(8) - else -> 0 - } - - private fun getAccelerationType(accCode: Int) = when (accCode) { - 1 -> AccelerationType.OrientationTopRight - 2 -> AccelerationType.OrientationBottomRight - 3 -> AccelerationType.OrientationBottomLeft - 4 -> AccelerationType.OrientationTopLeft - 5 -> AccelerationType.OrientationUp - 6 -> AccelerationType.OrientationDown - 1.shl(3) -> AccelerationType.Tilt - 1.shl(4) -> AccelerationType.FreeFall - 1.shl(5) -> AccelerationType.SingleTap - 1.shl(6) -> AccelerationType.DoubleTap - 1.shl(7) -> AccelerationType.WakeUp - 1.shl(8) -> AccelerationType.Pedometer - else -> AccelerationType.NoEvent - } override fun packCommandData(featureBit: Int?, command: FeatureCommand): ByteArray? { if (command is EnableDetectionAccelerationEvent) { @@ -208,7 +178,7 @@ enum class DetectableEventType(val byte: Byte) { companion object { fun create(byte: Byte): DetectableEventType = try { - values().first { it.byte == byte } + entries.first { it.byte == byte } } catch (e: Exception) { Log.d("Acceleration Event", e.stackTraceToString()) None diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration_event/AccelerationEventInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration_event/AccelerationEventInfo.kt index fc20008..b1d2d04 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration_event/AccelerationEventInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/acceleration_event/AccelerationEventInfo.kt @@ -22,6 +22,9 @@ data class AccelerationEventInfo( override val logValue: String = (listOf(numSteps) + accEvent).joinToString(separator = ", ") { it.logValue } + override val logDoubleValues: List = + accEvent.map { retAccelerationTypeCode(it.value).toDouble() } + override fun toString(): String { val sampleValue = StringBuilder() accEvent.forEach { sampleValue.append("\t${it.name} = ${it.value}\n") } @@ -45,3 +48,35 @@ enum class AccelerationType { WakeUp, Pedometer } + +fun retAccelerationTypeCode(accEvent: AccelerationType) = when (accEvent) { + AccelerationType.OrientationTopRight -> 1 + AccelerationType.OrientationBottomRight -> 2 + AccelerationType.OrientationBottomLeft -> 3 + AccelerationType.OrientationTopLeft -> 4 + AccelerationType.OrientationUp -> 5 + AccelerationType.OrientationDown -> 6 + AccelerationType.Tilt -> 1.shl(3) + AccelerationType.FreeFall -> 1.shl(4) + AccelerationType.SingleTap -> 1.shl(5) + AccelerationType.DoubleTap -> 1.shl(6) + AccelerationType.WakeUp -> 1.shl(7) + AccelerationType.Pedometer -> 1.shl(8) + else -> 0 +} + +fun getAccelerationType(accCode: Int) = when (accCode) { + 1 -> AccelerationType.OrientationTopRight + 2 -> AccelerationType.OrientationBottomRight + 3 -> AccelerationType.OrientationBottomLeft + 4 -> AccelerationType.OrientationTopLeft + 5 -> AccelerationType.OrientationUp + 6 -> AccelerationType.OrientationDown + 1.shl(3) -> AccelerationType.Tilt + 1.shl(4) -> AccelerationType.FreeFall + 1.shl(5) -> AccelerationType.SingleTap + 1.shl(6) -> AccelerationType.DoubleTap + 1.shl(7) -> AccelerationType.WakeUp + 1.shl(8) -> AccelerationType.Pedometer + else -> AccelerationType.NoEvent +} \ No newline at end of file diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/activity/Activity.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/activity/Activity.kt index 0b7948f..78c0efb 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/activity/Activity.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/activity/Activity.kt @@ -10,7 +10,6 @@ package com.st.blue_sdk.features.activity import com.st.blue_sdk.features.* import com.st.blue_sdk.utils.NumberConversion import java.util.* -import kotlin.experimental.and class Activity( name: String = NAME, @@ -28,19 +27,6 @@ class Activity( const val NAME = "Activity Recognition" } - private fun getActivityType(activity: Short) = when ((activity and 0x0F).toInt()) { - 0x00 -> ActivityType.NoActivity - 0x01 -> ActivityType.Stationary - 0x02 -> ActivityType.Walking - 0x03 -> ActivityType.FastWalking - 0x04 -> ActivityType.Jogging - 0x05 -> ActivityType.Biking - 0x06 -> ActivityType.Driving - 0x07 -> ActivityType.Stairs - 0x08 -> ActivityType.AdultInCar - else -> ActivityType.Error - } - override fun extractData( timeStamp: Long, data: ByteArray, @@ -93,6 +79,7 @@ class Activity( } return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = numberOfBytes, data = activityInfo ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/activity/ActivityInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/activity/ActivityInfo.kt index 40b355c..c56595b 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/activity/ActivityInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/activity/ActivityInfo.kt @@ -14,6 +14,7 @@ import com.st.blue_sdk.logger.Loggable import kotlinx.serialization.Serializable import kotlinx.serialization.UseSerializers import java.util.* +import kotlin.experimental.and @Serializable data class ActivityInfo( @@ -26,6 +27,8 @@ data class ActivityInfo( override val logValue: String = "${activity.logValue}, ${algorithm.logValue}, ${date.logValue}" + override val logDoubleValues: List = listOf(getActivityCode(activity.value).toDouble()) + companion object { const val ALGORITHM_NOT_DEFINED: Short = 0xFF } @@ -52,4 +55,30 @@ enum class ActivityType { Stairs, AdultInCar, Error +} + +fun getActivityType(activity: Short) = when ((activity and 0x0F).toInt()) { + 0x00 -> ActivityType.NoActivity + 0x01 -> ActivityType.Stationary + 0x02 -> ActivityType.Walking + 0x03 -> ActivityType.FastWalking + 0x04 -> ActivityType.Jogging + 0x05 -> ActivityType.Biking + 0x06 -> ActivityType.Driving + 0x07 -> ActivityType.Stairs + 0x08 -> ActivityType.AdultInCar + else -> ActivityType.Error +} + +fun getActivityCode(activity: ActivityType): Short = when (activity) { + ActivityType.NoActivity -> 0x00 + ActivityType.Stationary -> 0x01 + ActivityType.Walking -> 0x02 + ActivityType.FastWalking -> 0x03 + ActivityType.Jogging -> 0x04 + ActivityType.Biking -> 0x05 + ActivityType.Driving -> 0x06 + ActivityType.Stairs -> 0x07 + ActivityType.AdultInCar -> 0x08 + ActivityType.Error -> 0x0F } \ No newline at end of file diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMFeature.kt index af4bb8f..38ea402 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMFeature.kt @@ -35,6 +35,7 @@ class AudioADPCMFeature( require(data.size - dataOffset >= NUMBER_BYTES) { "There are no $NUMBER_BYTES bytes available to read for $name feature" } return FeatureUpdate( + featureName = name, rawData = data, readByte = NUMBER_BYTES, timeStamp = timeStamp, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMSync.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMSync.kt index 7bd9c53..ea2d5c8 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMSync.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMSync.kt @@ -18,4 +18,5 @@ data class AudioADPCMSync( ) : Loggable { override val logHeader = "${index.logHeader}, ${predSample.logHeader}" override val logValue = "${index.logValue}, ${predSample.logValue}" + override val logDoubleValues: List = listOf() } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMSyncFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMSyncFeature.kt index 0d20559..2ce90ac 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMSyncFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/audio/adpcm/AudioADPCMSyncFeature.kt @@ -43,6 +43,7 @@ class AudioADPCMSyncFeature( preSample = preSample or (((data[5].toInt()) shl 24) and 0xFF000000.toInt()) return FeatureUpdate( + featureName = name, rawData = data, readByte = NUMBER_BYTES, timeStamp = timeStamp, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/battery/Battery.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/battery/Battery.kt index e36babd..a16b591 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/battery/Battery.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/battery/Battery.kt @@ -73,6 +73,7 @@ class Battery( ) return FeatureUpdate( + featureName = name, rawData = data, readByte = NUMBER_BYTES, timeStamp = timeStamp, @@ -80,15 +81,6 @@ class Battery( ) } - private fun getBatteryStatus(status: Short) = when ((status and 0x7F).toInt()) { - 0x00 -> BatteryStatus.LowBattery - 0x01 -> BatteryStatus.Discharging - 0x02 -> BatteryStatus.PluggedNotCharging - 0x03 -> BatteryStatus.Charging - 0x04 -> BatteryStatus.Unknown - else -> BatteryStatus.Error - } - private fun extractPercentage(rawPercentage: Short): Float { val percentage = rawPercentage / 10.0f return max(0.0f, min(100.0f, percentage)) @@ -115,11 +107,13 @@ class Battery( COMMAND_GET_BATTERY_CAPACITY, byteArrayOf() ) + is GetBatteryMaxAbsorbedCurrent -> packCommandRequest( featureBit, COMMAND_GET_MAX_ABSORBED_CURRENT, byteArrayOf() ) + else -> null } } @@ -137,6 +131,7 @@ class Battery( capacity = capacity ) } + COMMAND_GET_MAX_ABSORBED_CURRENT -> { val current = NumberConversion.LittleEndian.bytesToInt16(data) / 10.0f BatteryAbsorbedCurrentResponse( @@ -145,6 +140,7 @@ class Battery( current = current ) } + else -> null } } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/battery/BatteryInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/battery/BatteryInfo.kt index b8192b8..ebf7ba6 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/battery/BatteryInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/battery/BatteryInfo.kt @@ -10,6 +10,7 @@ package com.st.blue_sdk.features.battery import com.st.blue_sdk.features.FeatureField import com.st.blue_sdk.logger.Loggable import kotlinx.serialization.Serializable +import kotlin.experimental.and @Serializable data class BatteryInfo( @@ -23,6 +24,12 @@ data class BatteryInfo( override val logValue: String = "${status.logValue}, ${percentage.logValue}, ${voltage.logValue}, ${current.logValue}" + override val logDoubleValues: List = listOf( + percentage.value.toDouble(), + voltage.value.toDouble(), + current.value.toDouble(), + getBatteryCode(status.value).toDouble() + ) override fun toString(): String { val sampleValue = StringBuilder() @@ -46,3 +53,21 @@ enum class BatteryStatus { Unknown, Error } + +fun getBatteryStatus(status: Short) = when ((status and 0x7F).toInt()) { + 0x00 -> BatteryStatus.LowBattery + 0x01 -> BatteryStatus.Discharging + 0x02 -> BatteryStatus.PluggedNotCharging + 0x03 -> BatteryStatus.Charging + 0x04 -> BatteryStatus.Unknown + else -> BatteryStatus.Error +} + +fun getBatteryCode(status: BatteryStatus) = when (status) { + BatteryStatus.LowBattery -> 0x00 + BatteryStatus.Discharging -> 0x01 + BatteryStatus.PluggedNotCharging -> 0x02 + BatteryStatus.Charging -> 0x03 + BatteryStatus.Unknown -> 0x04 + BatteryStatus.Error -> 0x0F +} diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/beam_forming/BeamForming.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/beam_forming/BeamForming.kt index d04b54f..99b8685 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/beam_forming/BeamForming.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/beam_forming/BeamForming.kt @@ -72,6 +72,7 @@ class BeamForming( ) ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = 1, data = beamDirection ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/beam_forming/BeamFormingInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/beam_forming/BeamFormingInfo.kt index c3866da..0d064dc 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/beam_forming/BeamFormingInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/beam_forming/BeamFormingInfo.kt @@ -8,6 +8,7 @@ package com.st.blue_sdk.features.beam_forming import com.st.blue_sdk.features.FeatureField +import com.st.blue_sdk.features.beam_forming.BeamForming.Companion.getBeamDirectionCode import com.st.blue_sdk.logger.Loggable import kotlinx.serialization.Serializable @@ -18,6 +19,8 @@ class BeamFormingInfo( override val logHeader: String = beamDirection.logHeader override val logValue: String = beamDirection.logValue + override val logDoubleValues: List = + listOf(getBeamDirectionCode(beamDirection.value).toDouble()) override fun toString(): String { val sampleValue = StringBuilder() diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/carry_position/CarryPosition.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/carry_position/CarryPosition.kt index d6f9e58..b330c44 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/carry_position/CarryPosition.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/carry_position/CarryPosition.kt @@ -9,7 +9,6 @@ package com.st.blue_sdk.features.carry_position import com.st.blue_sdk.features.* import com.st.blue_sdk.utils.NumberConversion -import kotlin.experimental.and class CarryPosition( name: String = NAME, @@ -42,6 +41,7 @@ class CarryPosition( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = 1, @@ -49,17 +49,6 @@ class CarryPosition( ) } - private fun getCarryPosition(position: Short) = when ((position and 0x0F).toInt()) { - 0x00 -> CarryPositionType.Unknown - 0x01 -> CarryPositionType.OnDesk - 0x02 -> CarryPositionType.InHand - 0x03 -> CarryPositionType.NearHead - 0x04 -> CarryPositionType.ShirtPocket - 0x05 -> CarryPositionType.TrousersPocket - 0x06 -> CarryPositionType.ArmSwing - else -> CarryPositionType.Error - } - override fun packCommandData(featureBit: Int?, command: FeatureCommand): ByteArray? = null override fun parseCommandResponse(data: ByteArray): FeatureResponse? = null diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/carry_position/CarryPositionInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/carry_position/CarryPositionInfo.kt index 8685dda..f9349be 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/carry_position/CarryPositionInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/carry_position/CarryPositionInfo.kt @@ -10,6 +10,7 @@ package com.st.blue_sdk.features.carry_position import com.st.blue_sdk.features.FeatureField import com.st.blue_sdk.logger.Loggable import kotlinx.serialization.Serializable +import kotlin.experimental.and @Serializable data class CarryPositionInfo( @@ -18,6 +19,8 @@ data class CarryPositionInfo( override val logHeader: String = position.logHeader override val logValue: String = position.logValue + override val logDoubleValues: List = + listOf(getCarryPositionCode(position.value).toDouble()) override fun toString(): String { val sampleValue = StringBuilder() @@ -36,3 +39,25 @@ enum class CarryPositionType { ArmSwing, Error } + +fun getCarryPosition(position: Short) = when ((position and 0x0F).toInt()) { + 0x00 -> CarryPositionType.Unknown + 0x01 -> CarryPositionType.OnDesk + 0x02 -> CarryPositionType.InHand + 0x03 -> CarryPositionType.NearHead + 0x04 -> CarryPositionType.ShirtPocket + 0x05 -> CarryPositionType.TrousersPocket + 0x06 -> CarryPositionType.ArmSwing + else -> CarryPositionType.Error +} + +fun getCarryPositionCode(position: CarryPositionType) = when (position) { + CarryPositionType.Unknown -> 0x00 + CarryPositionType.OnDesk -> 0x01 + CarryPositionType.InHand -> 0x02 + CarryPositionType.NearHead -> 0x03 + CarryPositionType.ShirtPocket -> 0x04 + CarryPositionType.TrousersPocket -> 0x05 + CarryPositionType.ArmSwing -> 0x06 + CarryPositionType.Error -> 0x0F +} diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/co_sensor/COSensor.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/co_sensor/COSensor.kt index e1a2b8c..083ef86 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/co_sensor/COSensor.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/co_sensor/COSensor.kt @@ -43,6 +43,7 @@ class COSensor( ) return FeatureUpdate( + featureName = name, rawData = data, readByte = NUMBER_BYTES, data = COSensorInfo(coSensor), diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/co_sensor/COSensorInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/co_sensor/COSensorInfo.kt index 7e70bbc..24509ab 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/co_sensor/COSensorInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/co_sensor/COSensorInfo.kt @@ -18,6 +18,7 @@ data class COSensorInfo( override val logHeader: String = concentration.logHeader override val logValue: String = concentration.logValue + override val logDoubleValues: List = listOf(concentration.value.toDouble()) override fun toString(): String { val sampleValue = StringBuilder() diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/compass/Compass.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/compass/Compass.kt index 8d04210..4a073b9 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/compass/Compass.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/compass/Compass.kt @@ -42,6 +42,7 @@ class Compass( ) return FeatureUpdate( + featureName = name, rawData = data, readByte = NUMBER_BYTES, data = CompassInfo(compass), diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/compass/CompassInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/compass/CompassInfo.kt index 61c2230..ce7338d 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/compass/CompassInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/compass/CompassInfo.kt @@ -18,6 +18,7 @@ data class CompassInfo( override val logHeader: String = angle.logHeader override val logValue: String = angle.logValue + override val logDoubleValues: List = listOf(angle.value.toDouble()) override fun toString(): String { val sampleValue = StringBuilder() diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/direction_of_arrival/DirectionOfArrival.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/direction_of_arrival/DirectionOfArrival.kt index a4ea07b..e3abb6c 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/direction_of_arrival/DirectionOfArrival.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/direction_of_arrival/DirectionOfArrival.kt @@ -52,6 +52,7 @@ class DirectionOfArrival( ) ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, data = direction ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/direction_of_arrival/DirectionOfArrivalInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/direction_of_arrival/DirectionOfArrivalInfo.kt index 9c48d76..017643d 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/direction_of_arrival/DirectionOfArrivalInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/direction_of_arrival/DirectionOfArrivalInfo.kt @@ -18,6 +18,7 @@ data class DirectionOfArrivalInfo( override val logHeader: String = angle.logHeader override val logValue: String = angle.logValue + override val logDoubleValues: List = listOf(angle.value.toDouble()) override fun toString(): String { diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/event_counter/EventCounter.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/event_counter/EventCounter.kt index 24d30e6..7de935e 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/event_counter/EventCounter.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/event_counter/EventCounter.kt @@ -39,6 +39,7 @@ class EventCounter( ) return FeatureUpdate( + featureName = name, rawData = data, readByte = NUMBER_BYTES, data = EventCounterInfo(eventCounter), diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/event_counter/EventCounterInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/event_counter/EventCounterInfo.kt index 67cd179..2041fe1 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/event_counter/EventCounterInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/event_counter/EventCounterInfo.kt @@ -18,6 +18,7 @@ data class EventCounterInfo( override val logHeader: String = count.logHeader override val logValue: String = count.logValue + override val logDoubleValues: List = listOf(count.value.toDouble()) override fun toString(): String { val sampleValue = StringBuilder() diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/AiLogging.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/AiLogging.kt index a0189a4..e2f27bd 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/AiLogging.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/AiLogging.kt @@ -8,9 +8,9 @@ package com.st.blue_sdk.features.extended.ai_logging import com.st.blue_sdk.features.* -import com.st.blue_sdk.features.extended.ai_logging.requst.StartLogging -import com.st.blue_sdk.features.extended.ai_logging.requst.StopLogging -import com.st.blue_sdk.features.extended.ai_logging.requst.UpdateAnnotation +import com.st.blue_sdk.features.extended.ai_logging.request.StartLogging +import com.st.blue_sdk.features.extended.ai_logging.request.StopLogging +import com.st.blue_sdk.features.extended.ai_logging.request.UpdateAnnotation import com.st.blue_sdk.utils.NumberConversion import java.nio.charset.StandardCharsets import kotlin.math.roundToInt @@ -46,6 +46,7 @@ class AiLogging( require(data.size - dataOffset >= NUMBER_BYTES) { "There are no $NUMBER_BYTES bytes available to read for $name feature" } return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/AiLoggingInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/AiLoggingInfo.kt index f4f8d6b..811af42 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/AiLoggingInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/AiLoggingInfo.kt @@ -18,6 +18,7 @@ class AiLoggingInfo( override val logHeader: String = isLogging.logHeader override val logValue: String = isLogging.logValue + override val logDoubleValues: List = listOf() override fun toString(): String { val sampleValue = StringBuilder() diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/requst/StartLogging.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/request/StartLogging.kt similarity index 90% rename from st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/requst/StartLogging.kt rename to st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/request/StartLogging.kt index 8394af5..d4c5d3e 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/requst/StartLogging.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/request/StartLogging.kt @@ -5,7 +5,7 @@ * the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. */ -package com.st.blue_sdk.features.extended.ai_logging.requst +package com.st.blue_sdk.features.extended.ai_logging.request import com.st.blue_sdk.features.FeatureCommand import com.st.blue_sdk.features.extended.ai_logging.AiLogging diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/requst/StopLogging.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/request/StopLogging.kt similarity index 88% rename from st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/requst/StopLogging.kt rename to st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/request/StopLogging.kt index 5ad1157..0c9573e 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/requst/StopLogging.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/request/StopLogging.kt @@ -5,7 +5,7 @@ * the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. */ -package com.st.blue_sdk.features.extended.ai_logging.requst +package com.st.blue_sdk.features.extended.ai_logging.request import com.st.blue_sdk.features.FeatureCommand import com.st.blue_sdk.features.extended.ai_logging.AiLogging diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/requst/UpdateAnnotation.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/request/UpdateAnnotation.kt similarity index 89% rename from st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/requst/UpdateAnnotation.kt rename to st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/request/UpdateAnnotation.kt index c682e2c..9634d5b 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/requst/UpdateAnnotation.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ai_logging/request/UpdateAnnotation.kt @@ -5,7 +5,7 @@ * the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. */ -package com.st.blue_sdk.features.extended.ai_logging.requst +package com.st.blue_sdk.features.extended.ai_logging.request import com.st.blue_sdk.features.FeatureCommand import com.st.blue_sdk.features.extended.ai_logging.AiLogging diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusConf.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusConf.kt index 71c0624..ad764bf 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusConf.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusConf.kt @@ -26,6 +26,8 @@ data class AudioOpusConf( override val logValue = "${cmd.logValue}, ${frameSize.logValue}, ${samplingFreq.logValue}, ${channels.logValue}, ${onOff.logValue}" + override val logDoubleValues: List = listOf() + fun isConfCommand() = when (cmd.value) { BV_OPUS_CONF_CMD -> false BV_OPUS_CONTROL -> true diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusConfFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusConfFeature.kt index 130f257..0eaedf9 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusConfFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusConfFeature.kt @@ -108,6 +108,7 @@ class AudioOpusConfFeature( return when { data[OPUS_CONF_CMD_ID_INDEX] == BV_OPUS_CONF_CMD -> { FeatureUpdate( + featureName = name, rawData = data, readByte = 4, timeStamp = timeStamp, @@ -124,6 +125,7 @@ class AudioOpusConfFeature( } data[OPUS_CONF_CMD_ID_INDEX] == BV_OPUS_CONTROL -> { FeatureUpdate( + featureName = name, rawData = data, readByte = 2, timeStamp = timeStamp, @@ -138,6 +140,7 @@ class AudioOpusConfFeature( ) } else -> FeatureUpdate( + featureName = name, rawData = data, readByte = 0, timeStamp = timeStamp, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusFeature.kt index 0526cc7..b4cbbe4 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio/opus/AudioOpusFeature.kt @@ -33,6 +33,7 @@ class AudioOpusFeature( ): FeatureUpdate { return FeatureUpdate( + featureName = name, rawData = data, readByte = data.size, timeStamp = timeStamp, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio_classification/AudioClassification.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio_classification/AudioClassification.kt index 0a769bd..16e0b15 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio_classification/AudioClassification.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio_classification/AudioClassification.kt @@ -62,6 +62,7 @@ class AudioClassification( } return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = numberOfBytes, @@ -70,18 +71,6 @@ class AudioClassification( } - private fun getAudioClassification(audioClassification: Short) = - when (audioClassification.toInt()) { - -1 -> AudioClassType.Unknown - 0x00 -> AudioClassType.Indoor - 0x01 -> AudioClassType.Outdoor - 0x02 -> AudioClassType.InVehicle - 0x03 -> AudioClassType.BabyIsCrying - -16 -> AudioClassType.AscOff - -15 -> AudioClassType.AscOn - else -> AudioClassType.Error - } - override fun packCommandData(featureBit: Int?, command: FeatureCommand): ByteArray? = null override fun parseCommandResponse(data: ByteArray): FeatureResponse? = null diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio_classification/AudioClassificationInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio_classification/AudioClassificationInfo.kt index 69ab63d..91f605f 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio_classification/AudioClassificationInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/audio_classification/AudioClassificationInfo.kt @@ -20,6 +20,9 @@ data class AudioClassificationInfo( override val logValue: String = "${classification.logValue}, ${algorithm.logValue}" + override val logDoubleValues: List = + listOf(getAudioClassificationCode(classification.value).toDouble()) + companion object { const val ALGORITHM_NOT_DEFINED: Short = 0xFF } @@ -44,3 +47,26 @@ enum class AudioClassType { AscOn, Error } + +fun getAudioClassification(audioClassification: Short) = + when (audioClassification.toInt()) { + -1 -> AudioClassType.Unknown + 0x00 -> AudioClassType.Indoor + 0x01 -> AudioClassType.Outdoor + 0x02 -> AudioClassType.InVehicle + 0x03 -> AudioClassType.BabyIsCrying + -16 -> AudioClassType.AscOff + -15 -> AudioClassType.AscOn + else -> AudioClassType.Error + } + +fun getAudioClassificationCode(classification: AudioClassType) = when (classification) { + AudioClassType.Unknown -> -1 + AudioClassType.Indoor -> 0x00 + AudioClassType.Outdoor -> 0x01 + AudioClassType.InVehicle -> 0x02 + AudioClassType.BabyIsCrying -> 0x03 + AudioClassType.AscOff -> -16 + AudioClassType.AscOn -> -15 + AudioClassType.Error -> -32 +} \ No newline at end of file diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/binary_content/BinaryContent.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/binary_content/BinaryContent.kt index 22abc6f..a3d939e 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/binary_content/BinaryContent.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/binary_content/BinaryContent.kt @@ -34,6 +34,7 @@ class BinaryContent( val binaryContent = stl2TransportProtocol.decapsulate(data) return FeatureUpdate( + featureName = name, readByte = data.size, timeStamp = timeStamp, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/binary_content/RawData.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/binary_content/RawData.kt index 3102bfd..27bff95 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/binary_content/RawData.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/binary_content/RawData.kt @@ -12,4 +12,6 @@ data class RawData( ) : Loggable { override val logHeader = data.logHeader override val logValue = data.logValue + + override val logDoubleValues: List = listOf() } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/color_ambient_light/ColorAmbientLight.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/color_ambient_light/ColorAmbientLight.kt index 1cffb3b..2c222cc 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/color_ambient_light/ColorAmbientLight.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/color_ambient_light/ColorAmbientLight.kt @@ -56,6 +56,7 @@ class ColorAmbientLight( ) ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/color_ambient_light/ColorAmbientLightInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/color_ambient_light/ColorAmbientLightInfo.kt index c389b0b..1db3100 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/color_ambient_light/ColorAmbientLightInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/color_ambient_light/ColorAmbientLightInfo.kt @@ -21,6 +21,8 @@ data class ColorAmbientLightInfo( override val logValue: String = "${lux.logValue}, ${cct.logValue}, ${uvIndex.logValue}" + override val logDoubleValues: List = listOf(lux.value.toDouble(),cct.value.toDouble(),uvIndex.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${lux.name} = ${lux.value} ${lux.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/euler_angle/EulerAngle.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/euler_angle/EulerAngle.kt index b094133..0412b90 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/euler_angle/EulerAngle.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/euler_angle/EulerAngle.kt @@ -58,6 +58,7 @@ class EulerAngle( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, data = eulerAngle ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/euler_angle/EulerAngleInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/euler_angle/EulerAngleInfo.kt index 53c1216..9f4f63b 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/euler_angle/EulerAngleInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/euler_angle/EulerAngleInfo.kt @@ -21,6 +21,8 @@ data class EulerAngleInfo( override val logValue: String = "${yaw.logValue}, ${pitch.logValue}, ${roll.logValue}" + override val logDoubleValues: List = listOf(yaw.value.toDouble(),pitch.value.toDouble(),roll.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${yaw.name} = ${yaw.value} ${yaw.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ext_configuration/BanksStatus.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ext_configuration/BanksStatus.kt index 3e0addb..95f8038 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ext_configuration/BanksStatus.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ext_configuration/BanksStatus.kt @@ -14,4 +14,4 @@ data class BanksStatus( val currentBank: Int, val fwId1: String, val fwId2: String -) \ No newline at end of file +):java.io.Serializable \ No newline at end of file diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ext_configuration/ExtConfiguration.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ext_configuration/ExtConfiguration.kt index 1cebd02..1356760 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ext_configuration/ExtConfiguration.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/ext_configuration/ExtConfiguration.kt @@ -50,6 +50,7 @@ class ExtConfiguration( dataOffset: Int ): FeatureUpdate { return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = 0, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/fitness_activity/FitnessActivity.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/fitness_activity/FitnessActivity.kt index 4c62a93..373b057 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/fitness_activity/FitnessActivity.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/fitness_activity/FitnessActivity.kt @@ -10,7 +10,6 @@ package com.st.blue_sdk.features.extended.fitness_activity import com.st.blue_sdk.features.* import com.st.blue_sdk.features.extended.fitness_activity.request.EnableActivityDetection import com.st.blue_sdk.utils.NumberConversion -import kotlin.experimental.and class FitnessActivity( name: String = NAME, @@ -37,7 +36,7 @@ class FitnessActivity( val fitnessActivity = FitnessActivityInfo( activity = FeatureField( - value = getActivityType(NumberConversion.byteToUInt8(data, dataOffset)), + value = getFitnessActivityType(NumberConversion.byteToUInt8(data, dataOffset)), name = "Activity" ), count = FeatureField( @@ -47,33 +46,20 @@ class FitnessActivity( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, data = fitnessActivity ) } - private fun getActivityType(activity: Short) = when ((activity and 0x0F).toInt()) { - 0x00 -> FitnessActivityType.NoActivity - 0x01 -> FitnessActivityType.BicepCurl - 0x02 -> FitnessActivityType.Squat - 0x03 -> FitnessActivityType.PushUp - else -> FitnessActivityType.Error - } - - private fun getActivityCode(activity: FitnessActivityType) = when (activity) { - FitnessActivityType.BicepCurl -> 0x01.toByte() - FitnessActivityType.Squat -> 0x02.toByte() - FitnessActivityType.PushUp -> 0x03.toByte() - else -> 0x00.toByte() // NoActivity and Error case... - } - override fun packCommandData( featureBit: Int?, command: FeatureCommand ): ByteArray? { return when (command) { is EnableActivityDetection -> { - byteArrayOf(getActivityCode(command.activityType)) + byteArrayOf(getFitnessActivityCode(command.activityType)) } + else -> null } } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/fitness_activity/FitnessActivityInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/fitness_activity/FitnessActivityInfo.kt index 39a1183..8de339e 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/fitness_activity/FitnessActivityInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/fitness_activity/FitnessActivityInfo.kt @@ -10,6 +10,7 @@ package com.st.blue_sdk.features.extended.fitness_activity import com.st.blue_sdk.features.FeatureField import com.st.blue_sdk.logger.Loggable import kotlinx.serialization.Serializable +import kotlin.experimental.and @Serializable data class FitnessActivityInfo( @@ -20,6 +21,9 @@ data class FitnessActivityInfo( override val logValue: String = "${activity.logValue}, ${count.logValue}" + override val logDoubleValues: List = + listOf(getFitnessActivityCode(activity.value).toDouble(), count.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${activity.name} = ${activity.value}\n") @@ -34,4 +38,20 @@ enum class FitnessActivityType { Squat, PushUp, Error +} + +fun getFitnessActivityType(activity: Short) = when ((activity and 0x0F).toInt()) { + 0x00 -> FitnessActivityType.NoActivity + 0x01 -> FitnessActivityType.BicepCurl + 0x02 -> FitnessActivityType.Squat + 0x03 -> FitnessActivityType.PushUp + else -> FitnessActivityType.Error +} + +fun getFitnessActivityCode(activity: FitnessActivityType) = when (activity) { + FitnessActivityType.BicepCurl -> 0x01.toByte() + FitnessActivityType.Squat -> 0x02.toByte() + FitnessActivityType.PushUp -> 0x03.toByte() + FitnessActivityType.NoActivity -> 0x00.toByte() + FitnessActivityType.Error -> 0x0F.toByte() } \ No newline at end of file diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gesture_navigation/GestureNavigation.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gesture_navigation/GestureNavigation.kt index 11a185b..43fbabd 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gesture_navigation/GestureNavigation.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gesture_navigation/GestureNavigation.kt @@ -43,6 +43,7 @@ class GestureNavigation( ) ) return FeatureUpdate( + featureName = name, rawData = data, readByte = NUMBER_BYTES, timeStamp = timeStamp, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gesture_navigation/GestureNavigationInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gesture_navigation/GestureNavigationInfo.kt index fd6d719..3716712 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gesture_navigation/GestureNavigationInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gesture_navigation/GestureNavigationInfo.kt @@ -13,6 +13,9 @@ data class GestureNavigationInfo( override val logValue: String = "${gesture.value}, ${button.value}" + override val logDoubleValues: List = + listOf(gesture.value.value.toDouble(), button.value.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${gesture.name} = ${gesture.value}\n") @@ -34,7 +37,7 @@ enum class GestureNavigationGestureType(val value: Short) { Error(9); companion object { - fun fromShort(value: Short) = values().first { it.value == value } + fun fromShort(value: Short) = entries.first { it.value == value } } } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gnss/GNSS.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gnss/GNSS.kt index e265f89..85299d5 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gnss/GNSS.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gnss/GNSS.kt @@ -67,6 +67,7 @@ class GNSS( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gnss/GNSSInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gnss/GNSSInfo.kt index a507ff6..11fe028 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gnss/GNSSInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/gnss/GNSSInfo.kt @@ -25,6 +25,14 @@ data class GNSSInfo( override val logValue: String = "${latitude.logValue}, ${longitude.logValue}, ${altitude.logValue}, ${numSatellites.logValue}, ${signalQuality.logValue}" + override val logDoubleValues: List = listOf( + latitude.value.toDouble(), + longitude.value.toDouble(), + altitude.value.toDouble(), + numSatellites.value.toDouble(), + signalQuality.value.toDouble() + ) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${latitude.name} = ${latitude.value} ${latitude.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/hs_datalog_config/HSDataLogConfig.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/hs_datalog_config/HSDataLogConfig.kt index a5e1072..ed2aa23 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/hs_datalog_config/HSDataLogConfig.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/hs_datalog_config/HSDataLogConfig.kt @@ -68,6 +68,7 @@ class HSDataLogConfig( } return FeatureUpdate( + featureName = name, readByte = data.size, timeStamp = timeStamp, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/hs_datalog_config/LogConfig.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/hs_datalog_config/LogConfig.kt index bf459f5..b5180a7 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/hs_datalog_config/LogConfig.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/hs_datalog_config/LogConfig.kt @@ -21,4 +21,6 @@ data class LogConfig( override val logHeader: String = "${device.logHeader}, ${deviceStatus.logHeader}" override val logValue: String = "${device.logValue}, ${deviceStatus.logValue}" + + override val logDoubleValues: List = listOf() } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/json_nfc/JsonNFC.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/json_nfc/JsonNFC.kt index 785b072..9ef6d48 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/json_nfc/JsonNFC.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/json_nfc/JsonNFC.kt @@ -55,6 +55,7 @@ class JsonNFC( } return FeatureUpdate( + featureName = name, readByte = data.size, timeStamp = timeStamp, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/json_nfc/answer/JsonNFCResponse.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/json_nfc/answer/JsonNFCResponse.kt index 13407ac..63bde15 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/json_nfc/answer/JsonNFCResponse.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/json_nfc/answer/JsonNFCResponse.kt @@ -11,4 +11,6 @@ data class JsonNFCResponse( override val logHeader = supportedModes.logHeader override val logValue: String = supportedModes.logValue + + override val logDoubleValues: List = listOf() } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motion_algorithm/MotionAlgorithm.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motion_algorithm/MotionAlgorithm.kt index 5e43951..b07e182 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motion_algorithm/MotionAlgorithm.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motion_algorithm/MotionAlgorithm.kt @@ -81,6 +81,7 @@ class MotionAlgorithm( } return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, data = motionAlgorithm ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motion_algorithm/MotionAlgorithmInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motion_algorithm/MotionAlgorithmInfo.kt index 515464e..813bdc4 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motion_algorithm/MotionAlgorithmInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motion_algorithm/MotionAlgorithmInfo.kt @@ -21,6 +21,15 @@ data class MotionAlgorithmInfo( override val logValue: String = "${algorithmType.logValue}, ${statusType.logValue}" + override val logDoubleValues: List = when (algorithmType.value) { + AlgorithmType.Unknown -> listOf() + AlgorithmType.PoseEstimation, AlgorithmType.DesktopTypeDetection, + AlgorithmType.VerticalContext -> listOf( + AlgorithmType.getAlgorithmCode(algorithmType.value).toDouble(), + statusType.value.toDouble() + ) + } + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${algorithmType.name} = ${algorithmType.value}\n") @@ -32,6 +41,7 @@ data class MotionAlgorithmInfo( ) }\n" ) + AlgorithmType.DesktopTypeDetection -> sampleValue.append( "\t${statusType.name} = ${ DesktopType.getDesktopType( @@ -39,6 +49,7 @@ data class MotionAlgorithmInfo( ) }\n" ) + AlgorithmType.VerticalContext -> sampleValue.append( "\t${statusType.name} = ${ VerticalContextType.getVerticalContextType( @@ -87,7 +98,7 @@ enum class AlgorithmType { PoseEstimation -> 0x01.toByte() DesktopTypeDetection -> 0x02.toByte() VerticalContext -> 0x03.toByte() - else -> 0x00.toByte() + Unknown -> 0x00.toByte() } } } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motor_time_param/MotorTimeParameter.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motor_time_param/MotorTimeParameter.kt index 2d936fe..e1f930d 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motor_time_param/MotorTimeParameter.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motor_time_param/MotorTimeParameter.kt @@ -34,6 +34,7 @@ class MotorTimeParameter( require(data.size - dataOffset >= NUMBER_BYTES) { "There are no $NUMBER_BYTES bytes available to read for $name feature" } return FeatureUpdate( + featureName = name, timeStamp = timeStamp, readByte = NUMBER_BYTES, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motor_time_param/MotorTimeParameterInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motor_time_param/MotorTimeParameterInfo.kt index 4a50cdd..cca86d9 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motor_time_param/MotorTimeParameterInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/motor_time_param/MotorTimeParameterInfo.kt @@ -13,12 +13,12 @@ import kotlinx.serialization.Serializable @Serializable class MotorTimeParameterInfo( - val accPeakX: FeatureField, - val accPeakY: FeatureField, - val accPeakZ: FeatureField, - val rmsSpeedX: FeatureField, - val rmsSpeedY: FeatureField, - val rmsSpeedZ: FeatureField + val accPeakX: FeatureField, + val accPeakY: FeatureField, + val accPeakZ: FeatureField, + val rmsSpeedX: FeatureField, + val rmsSpeedY: FeatureField, + val rmsSpeedZ: FeatureField ) : Loggable { override val logHeader: String = "${accPeakX.logHeader}, ${accPeakY.logHeader}, ${accPeakZ.logHeader}, ${rmsSpeedX.logHeader}, ${rmsSpeedY.logHeader}, ${rmsSpeedZ.logHeader}" @@ -26,6 +26,11 @@ class MotorTimeParameterInfo( override val logValue: String = "${accPeakX.logValue}, ${accPeakY.logValue}, ${accPeakZ.logValue}, ${rmsSpeedX.logValue}, ${rmsSpeedY.logValue}, ${rmsSpeedZ.logValue}" + override val logDoubleValues: List = listOf( + accPeakX.value.toDouble(), accPeakY.value.toDouble(), accPeakZ.value.toDouble(), + rmsSpeedX.value.toDouble(), rmsSpeedY.value.toDouble(), rmsSpeedZ.value.toDouble() + ) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${accPeakX.name} = ${accPeakX.value} ${accPeakX.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_anomaly_detection/NeaiAnomalyDetection.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_anomaly_detection/NeaiAnomalyDetection.kt index fda1af1..7bd2fb9 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_anomaly_detection/NeaiAnomalyDetection.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_anomaly_detection/NeaiAnomalyDetection.kt @@ -22,32 +22,58 @@ class NeaiAnomalyDetection( companion object { const val NAME = "NEAI AD" const val NUMBER_BYTES = 7 - } - private fun getPhaseValue(phase: Short) = when ((phase and 0xFF).toInt()) { - 0x00 -> PhaseType.Idle - 0x01 -> PhaseType.Learning - 0x02 -> PhaseType.Detection - 0x03 -> PhaseType.Idle_Trained - 0x04 -> PhaseType.Busy - else -> PhaseType.Null - } + fun getPhaseValue(phase: Short) = when ((phase and 0xFF).toInt()) { + 0x00 -> PhaseType.Idle + 0x01 -> PhaseType.Learning + 0x02 -> PhaseType.Detection + 0x03 -> PhaseType.Idle_Trained + 0x04 -> PhaseType.Busy + else -> PhaseType.Null + } - private fun getStateValue(state: Short) = when ((state and 0xFF).toInt()) { - 0x00 -> StateType.Ok - 0x7B -> StateType.Init_Not_Called - 0x7C -> StateType.Board_Error - 0x7D -> StateType.Knowledge_Error - 0x7E -> StateType.Not_Enough_Learning - 0x7F -> StateType.Minimal_Learning_done - 0x80 -> StateType.Unknown_Error - else -> StateType.Null - } + fun getPhaseCode(phase: PhaseType) = when (phase) { + PhaseType.Idle -> 0x00 + PhaseType.Learning -> 0x01 + PhaseType.Detection -> 0x02 + PhaseType.Idle_Trained -> 0x03 + PhaseType.Busy -> 0x04 + PhaseType.Null -> 0xFF + } + + fun getStateValue(state: Short) = when ((state and 0xFF).toInt()) { + 0x00 -> StateType.Ok + 0x7B -> StateType.Init_Not_Called + 0x7C -> StateType.Board_Error + 0x7D -> StateType.Knowledge_Error + 0x7E -> StateType.Not_Enough_Learning + 0x7F -> StateType.Minimal_Learning_done + 0x80 -> StateType.Unknown_Error + else -> StateType.Null + } + + fun getStateValueCode(state: StateType) = when (state) { + StateType.Ok -> 0x00 + StateType.Init_Not_Called -> 0x7B + StateType.Board_Error -> 0x7C + StateType.Knowledge_Error -> 0x7D + StateType.Not_Enough_Learning -> 0x7F + StateType.Minimal_Learning_done -> TODO() + StateType.Unknown_Error -> 0x80 + StateType.Null -> 0xFF + } + + fun getStatusValue(status: Short) = when ((status and 0xFF).toInt()) { + 0x00 -> StatusType.Normal + 0x01 -> StatusType.Anomaly + else -> StatusType.Null + } - private fun getStatusValue(status: Short) = when ((status and 0xFF).toInt()) { - 0x00 -> StatusType.Normal - 0x01 -> StatusType.Anomaly - else -> StatusType.Null + fun getStatusValueCode(status: StatusType) = when (status) { + StatusType.Normal -> 0x00 + StatusType.Anomaly -> 0x01 + StatusType.Null -> 0xFF + } } override fun extractData( @@ -95,6 +121,7 @@ class NeaiAnomalyDetection( ) return FeatureUpdate( + featureName = name, rawData = data, readByte = NUMBER_BYTES, timeStamp = timeStamp, @@ -109,21 +136,25 @@ class NeaiAnomalyDetection( WriteStopCommand.STOP_COMMAND, byteArrayOf() ) + is WriteResetKnowledgeCommand -> packCommandRequest( featureBit, WriteResetKnowledgeCommand.RESET_KNOWLEDGE_COMMAND, byteArrayOf() ) + is WriteLearningCommand -> packCommandRequest( featureBit, WriteLearningCommand.LEARNING_COMMAND, byteArrayOf() ) + is WriteDetectionCommand -> packCommandRequest( featureBit, WriteDetectionCommand.DETECTION_COMMAND, byteArrayOf() ) + else -> null } } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_anomaly_detection/NeaiAnomalyDetectionInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_anomaly_detection/NeaiAnomalyDetectionInfo.kt index ce3c425..4a70f64 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_anomaly_detection/NeaiAnomalyDetectionInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_anomaly_detection/NeaiAnomalyDetectionInfo.kt @@ -2,6 +2,7 @@ package com.st.blue_sdk.features.extended.neai_anomaly_detection import com.st.blue_sdk.features.FeatureField import com.st.blue_sdk.logger.Loggable +import com.st.blue_sdk.utils.NumberConversion data class NeaiAnomalyDetectionInfo( val phase: FeatureField, @@ -18,6 +19,14 @@ data class NeaiAnomalyDetectionInfo( "${phase.value}, ${state.value}, ${phaseProgress.value}," + "${status.value}, ${similarity.value}" + override val logDoubleValues: List = listOf( + NeaiAnomalyDetection.getPhaseCode(phase.value).toDouble(), + NeaiAnomalyDetection.getStateValueCode(state.value).toDouble(), + phaseProgress.value.toDouble(), + NeaiAnomalyDetection.getStatusValueCode(status.value).toDouble(), + similarity.value.toDouble() + ) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${phase.name} = ${phase.value}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_class_classification/NeaiClassClassification.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_class_classification/NeaiClassClassification.kt index 736d3e4..e8df0f0 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_class_classification/NeaiClassClassification.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_class_classification/NeaiClassClassification.kt @@ -25,30 +25,54 @@ class NeaiClassClassification( const val N_CLASS_COMMON_NUMBER_BYTES = 6 const val N_MAX_CLASS_NUMBER = 8 const val CLASS_PROB_ESCAPE_CODE: Int = 0xFF - } - private fun getPhaseValue(phase: Short) = when ((phase and 0x0F).toInt()) { - 0x00 -> PhaseType.Idle - 0x01 -> PhaseType.Classification - 0x02 -> PhaseType.Busy - else -> PhaseType.Null - } + fun getPhaseValue(phase: Short) = when ((phase and 0x0F).toInt()) { + 0x00 -> PhaseType.Idle + 0x01 -> PhaseType.Classification + 0x02 -> PhaseType.Busy + else -> PhaseType.Null + } - private fun getStateValue(state: Short) = when ((state and 0xFF).toInt()) { - 0x00 -> StateType.Ok - 0x7B -> StateType.Init_Not_Called - 0x7C -> StateType.Board_Error - 0x7D -> StateType.Knowledge_Error - 0x7E -> StateType.Not_Enough_Learning - 0x7F -> StateType.Minimal_Learning_done - 0x80 -> StateType.Unknown_Error - else -> StateType.Null - } + fun getPhaseCode(phaseType: PhaseType) = when (phaseType) { + PhaseType.Idle -> 0x00 + PhaseType.Classification -> 0x01 + PhaseType.Busy -> 0x02 + PhaseType.Null -> 0x0F + } + + fun getStateValue(state: Short) = when ((state and 0xFF).toInt()) { + 0x00 -> StateType.Ok + 0x7B -> StateType.Init_Not_Called + 0x7C -> StateType.Board_Error + 0x7D -> StateType.Knowledge_Error + 0x7E -> StateType.Not_Enough_Learning + 0x7F -> StateType.Minimal_Learning_done + 0x80 -> StateType.Unknown_Error + else -> StateType.Null + } + + fun getStateCode(stateType: StateType) = when (stateType) { + StateType.Ok -> 0x00 + StateType.Init_Not_Called -> 0x7B + StateType.Board_Error -> 0x7C + StateType.Knowledge_Error -> 0x7D + StateType.Not_Enough_Learning -> 0x7E + StateType.Minimal_Learning_done -> 0x7F + StateType.Unknown_Error -> 0x80 + StateType.Null -> 0xFF + } + + fun getModeValue(status: Short) = when ((status and 0x0F).toInt()) { + 0x01 -> ModeType.One_Class + 0x02 -> ModeType.N_Class + else -> ModeType.Null + } - private fun getModeValue(status: Short) = when ((status and 0x0F).toInt()) { - 0x01 -> ModeType.One_Class - 0x02 -> ModeType.N_Class - else -> ModeType.Null + fun getModeCode(mode: ModeType) = when (mode) { + ModeType.One_Class -> 0x01 + ModeType.N_Class -> 0x02 + ModeType.Null -> 0xFF + } } override fun extractData( @@ -120,6 +144,7 @@ class NeaiClassClassification( ) bytesUsed = ONE_CLASS_NUMBER_BYTES } + ModeType.N_Class -> { //N Class if (data.size - dataOffset == N_CLASS_UNKNOWN_CLASS_NUMBER_BYTES) { @@ -207,6 +232,7 @@ class NeaiClassClassification( bytesUsed = N_CLASS_COMMON_NUMBER_BYTES + numClasses } } + else -> { throw IllegalArgumentException("NEAI Classification mode type not recognized") } @@ -214,6 +240,7 @@ class NeaiClassClassification( } return FeatureUpdate( + featureName = name, rawData = data, readByte = bytesUsed, timeStamp = timeStamp, @@ -228,11 +255,13 @@ class NeaiClassClassification( WriteStopClassificationCommand.STOP_CLASSIFICATION_COMMAND, byteArrayOf() ) + is WriteStarClassificationCommand -> packCommandRequest( featureBit, WriteStarClassificationCommand.START_CLASSIFICATION_COMMAND, byteArrayOf() ) + else -> null } } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_class_classification/NeaiClassClassificationInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_class_classification/NeaiClassClassificationInfo.kt index b49b45f..8ad7f1a 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_class_classification/NeaiClassClassificationInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/neai_class_classification/NeaiClassClassificationInfo.kt @@ -32,6 +32,11 @@ data class NeaiClassClassificationInfo( classProb.joinToString(separator = ", ") { it.value.toString() } } + override val logDoubleValues: List = listOf( + NeaiClassClassification.getModeCode(mode.value).toDouble(), + NeaiClassClassification.getPhaseCode(phase.value).toDouble() + ) + override fun toString(): String { val sampleValue = StringBuilder() diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/piano/Piano.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/piano/Piano.kt index 42c0cca..c469198 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/piano/Piano.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/piano/Piano.kt @@ -63,6 +63,7 @@ class Piano( } return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = numberBytes, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/piano/PianoInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/piano/PianoInfo.kt index 9c2cfa2..7204951 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/piano/PianoInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/piano/PianoInfo.kt @@ -22,6 +22,8 @@ data class PianoInfo( override val logValue: String = "${keyNote.logValue}, ${command.logValue}" + override val logDoubleValues: List = listOf() + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${command.name} = ${command.value}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/pnpl/PnPL.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/pnpl/PnPL.kt index e0cc188..d9933ce 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/pnpl/PnPL.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/pnpl/PnPL.kt @@ -63,6 +63,7 @@ class PnPL( } return FeatureUpdate( + featureName = name, readByte = data.size, timeStamp = timeStamp, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/pnpl/PnPLConfig.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/pnpl/PnPLConfig.kt index 7eef32b..f33d924 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/pnpl/PnPLConfig.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/pnpl/PnPLConfig.kt @@ -12,4 +12,6 @@ data class PnPLConfig( override val logHeader = deviceStatus.logHeader override val logValue: String = deviceStatus.logValue + + override val logDoubleValues: List = listOf() } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveAccelerationStatus.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveAccelerationStatus.kt index 109c3af..9b859eb 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveAccelerationStatus.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveAccelerationStatus.kt @@ -20,7 +20,7 @@ class PredictiveAccelerationStatus( type = type, isEnabled = isEnabled, identifier = identifier, - isDataNotifyFeature = false + isDataNotifyFeature = true ) { companion object { const val NAME = "PredictiveAccelerationStatus" @@ -37,27 +37,25 @@ class PredictiveAccelerationStatus( val timeStatus = NumberConversion.byteToUInt8(data, dataOffset + 0) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, readByte = NUMBER_BYTES, rawData = data, data = PredictiveAccelerationStatusInfo( statusX = FeatureField( name = "StatusAcc_X", - unit = "m/s^2", min = Status.GOOD, max = Status.BAD, value = Status.extractXStatus(timeStatus) ), statusY = FeatureField( name = "StatusAcc_Y", - unit = "m/s^2", min = Status.GOOD, max = Status.BAD, value = Status.extractYStatus(timeStatus) ), statusZ = FeatureField( name = "StatusAcc_Z", - unit = "m/s^2", min = Status.GOOD, max = Status.BAD, value = Status.extractZStatus(timeStatus) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveAccelerationStatusInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveAccelerationStatusInfo.kt index bbe5400..9dff97e 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveAccelerationStatusInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveAccelerationStatusInfo.kt @@ -16,9 +16,9 @@ class PredictiveAccelerationStatusInfo( val statusX: FeatureField, val statusY: FeatureField, val statusZ: FeatureField, - val accX: FeatureField, - val accY: FeatureField, - val accZ: FeatureField + val accX: FeatureField, + val accY: FeatureField, + val accZ: FeatureField ) : Loggable { override val logHeader: String = "${statusX.logHeader}, ${statusY.logHeader}, ${statusZ.logHeader}, ${accX.logHeader}, ${accY.logHeader}, ${accZ.logHeader}" @@ -26,11 +26,20 @@ class PredictiveAccelerationStatusInfo( override val logValue: String = "${statusX.logValue}, ${statusY.logValue}, ${statusZ.logValue}, ${accX.logValue}, ${accY.logValue}, ${accZ.logValue}" + override val logDoubleValues: List = listOf( + Status.statusToByte(statusX.value).toDouble(), + Status.statusToByte(statusY.value).toDouble(), + Status.statusToByte(statusZ.value).toDouble(), + accX.value.toDouble(), + accY.value.toDouble(), + accZ.value.toDouble() + ) + override fun toString(): String { val sampleValue = StringBuilder() - sampleValue.append("\t${statusX.name} = ${statusX.value} ${statusX.unit}\n") - sampleValue.append("\t${statusY.name} = ${statusY.value} ${statusY.unit}\n") - sampleValue.append("\t${statusZ.name} = ${statusZ.value} ${statusZ.unit}\n") + sampleValue.append("\t${statusX.name} = ${statusX.value}\n") + sampleValue.append("\t${statusY.name} = ${statusY.value}\n") + sampleValue.append("\t${statusZ.name} = ${statusZ.value}\n") sampleValue.append("\t${accX.name} = ${accX.value} ${accX.unit}\n") sampleValue.append("\t${accY.name} = ${accY.value} ${accY.unit}\n") sampleValue.append("\t${accZ.name} = ${accZ.value} ${accZ.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveFrequencyStatus.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveFrequencyStatus.kt index ea3d54a..c6b0ea3 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveFrequencyStatus.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveFrequencyStatus.kt @@ -20,10 +20,10 @@ class PredictiveFrequencyStatus( type = type, isEnabled = isEnabled, identifier = identifier, - isDataNotifyFeature = false + isDataNotifyFeature = true ) { companion object { - const val NAME = "PredictiveFrequencyStatus" + const val NAME = "PredictiveFrequencyDomainStatus" const val NUMBER_BYTES = 13 } @@ -36,27 +36,25 @@ class PredictiveFrequencyStatus( val timeStatus = NumberConversion.byteToUInt8(data, dataOffset + 0) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, readByte = NUMBER_BYTES, rawData = data, data = PredictiveFrequencyStatusInfo( statusX = FeatureField( name = "StatusAcc_X", - unit = "m/s^2", min = Status.GOOD, max = Status.BAD, value = Status.extractXStatus(timeStatus) ), statusY = FeatureField( name = "StatusAcc_Y", - unit = "m/s^2", min = Status.GOOD, max = Status.BAD, value = Status.extractYStatus(timeStatus) ), statusZ = FeatureField( name = "StatusAcc_Z", - unit = "m/s^2", min = Status.GOOD, max = Status.BAD, value = Status.extractZStatus(timeStatus) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveFrequencyStatusInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveFrequencyStatusInfo.kt index 78cf77d..455be32 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveFrequencyStatusInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveFrequencyStatusInfo.kt @@ -16,12 +16,12 @@ class PredictiveFrequencyStatusInfo( val statusX: FeatureField, val statusY: FeatureField, val statusZ: FeatureField, - val worstXFreq: FeatureField, - val worstYFreq: FeatureField, - val worstZFreq: FeatureField, - val worstXValue: FeatureField, - val worstYValue: FeatureField, - val worstZValue: FeatureField + val worstXFreq: FeatureField, + val worstYFreq: FeatureField, + val worstZFreq: FeatureField, + val worstXValue: FeatureField, + val worstYValue: FeatureField, + val worstZValue: FeatureField ) : Loggable { override val logHeader: String = "${statusX.logHeader}, ${statusY.logHeader}, ${statusZ.logHeader}, ${worstXFreq.logHeader}, ${worstYFreq.logHeader}, ${worstZFreq.logHeader}, ${worstXValue.logHeader}, ${worstYValue.logHeader}, ${worstZValue.logHeader}" @@ -29,11 +29,24 @@ class PredictiveFrequencyStatusInfo( override val logValue: String = "${statusX.logValue}, ${statusY.logValue}, ${statusZ.logValue}, ${worstXFreq.logValue}, ${worstYFreq.logValue}, ${worstZFreq.logValue}, ${worstXValue.logValue}, ${worstYValue.logValue}, ${worstZValue.logValue}" + + override val logDoubleValues: List = listOf( + Status.statusToByte(statusX.value).toDouble(), + Status.statusToByte(statusY.value).toDouble(), + Status.statusToByte(statusZ.value).toDouble(), + worstXFreq.value.toDouble(), + worstYFreq.value.toDouble(), + worstZFreq.value.toDouble(), + worstXValue.value.toDouble(), + worstYValue.value.toDouble(), + worstZValue.value.toDouble() + ) + override fun toString(): String { val sampleValue = StringBuilder() - sampleValue.append("\t${statusX.name} = ${statusX.value} ${statusX.unit}\n") - sampleValue.append("\t${statusY.name} = ${statusY.value} ${statusY.unit}\n") - sampleValue.append("\t${statusZ.name} = ${statusZ.value} ${statusZ.unit}\n") + sampleValue.append("\t${statusX.name} = ${statusX.value}\n") + sampleValue.append("\t${statusY.name} = ${statusY.value} \n") + sampleValue.append("\t${statusZ.name} = ${statusZ.value}\n") sampleValue.append("\t${worstXFreq.name} = ${worstXFreq.value} ${worstXFreq.unit}\n") sampleValue.append("\t${worstYFreq.name} = ${worstYFreq.value} ${worstYFreq.unit}\n") sampleValue.append("\t${worstZFreq.name} = ${worstZFreq.value} ${worstZFreq.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveSpeedStatus.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveSpeedStatus.kt index 29a76ca..ada9d76 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveSpeedStatus.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveSpeedStatus.kt @@ -20,7 +20,7 @@ class PredictiveSpeedStatus( type = type, isEnabled = isEnabled, identifier = identifier, - isDataNotifyFeature = false + isDataNotifyFeature = true ) { companion object { const val NAME = "PredictiveSpeedStatus" @@ -37,27 +37,25 @@ class PredictiveSpeedStatus( val timeStatus = NumberConversion.byteToUInt8(data, dataOffset + 0) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, readByte = NUMBER_BYTES, rawData = data, data = PredictiveSpeedStatusInfo( statusX = FeatureField( name = "StatusSpeed_X", - unit = "mm/s", min = Status.GOOD, max = Status.BAD, value = Status.extractXStatus(timeStatus) ), statusY = FeatureField( name = "StatusSpeed_Y", - unit = "mm/s", min = Status.GOOD, max = Status.BAD, value = Status.extractYStatus(timeStatus) ), statusZ = FeatureField( name = "StatusSpeed_Z", - unit = "mm/s", min = Status.GOOD, max = Status.BAD, value = Status.extractZStatus(timeStatus) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveSpeedStatusInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveSpeedStatusInfo.kt index d5f7d8c..de49cb5 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveSpeedStatusInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/PredictiveSpeedStatusInfo.kt @@ -16,21 +16,29 @@ class PredictiveSpeedStatusInfo( val statusX: FeatureField, val statusY: FeatureField, val statusZ: FeatureField, - val speedX: FeatureField, - val speedY: FeatureField, - val speedZ: FeatureField + val speedX: FeatureField, + val speedY: FeatureField, + val speedZ: FeatureField ) : Loggable { override val logHeader: String = "${statusX.logHeader}, ${statusY.logHeader}, ${statusZ.logHeader}, ${speedX.logHeader}, ${speedY.logHeader}, ${speedZ.logHeader}" override val logValue: String = "${statusX.logValue}, ${statusY.logValue}, ${statusZ.logValue}, ${speedX.logValue}, ${speedY.logValue}, ${speedZ.logValue}" + override val logDoubleValues: List = listOf( + Status.statusToByte(statusX.value).toDouble(), + Status.statusToByte(statusY.value).toDouble(), + Status.statusToByte(statusZ.value).toDouble(), + speedX.value.toDouble(), + speedY.value.toDouble(), + speedZ.value.toDouble() + ) override fun toString(): String { val sampleValue = StringBuilder() - sampleValue.append("\t${statusX.name} = ${statusX.value} ${statusX.unit}\n") - sampleValue.append("\t${statusY.name} = ${statusY.value} ${statusY.unit}\n") - sampleValue.append("\t${statusZ.name} = ${statusZ.value} ${statusZ.unit}\n") + sampleValue.append("\t${statusX.name} = ${statusX.value}\n") + sampleValue.append("\t${statusY.name} = ${statusY.value}\n") + sampleValue.append("\t${statusZ.name} = ${statusZ.value}\n") sampleValue.append("\t${speedX.name} = ${speedX.value} ${speedX.unit}\n") sampleValue.append("\t${speedY.name} = ${speedY.value} ${speedY.unit}\n") sampleValue.append("\t${speedZ.name} = ${speedZ.value} ${speedZ.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/Status.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/Status.kt index fbbb213..42eafe8 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/Status.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/predictive/Status.kt @@ -21,6 +21,13 @@ enum class Status { else -> UNKNOWN } + fun statusToByte(status: Status) = when (status) { + GOOD -> 0x00 + WARNING -> 0x01 + BAD -> 0x02 + UNKNOWN -> 0xFF + } + fun extractXStatus(value: Short) = statusFromByte((value.toInt() shr 4 and 0x03).toByte()) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/qvar/QVAR.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/qvar/QVAR.kt index fd37cb6..1175783 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/qvar/QVAR.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/qvar/QVAR.kt @@ -34,7 +34,7 @@ class QVAR( require(data.size - dataOffset >= 4) { "There are no 4 bytes available to read for $name feature" } var numBytes = 4 - val qvar: FeatureField = FeatureField( + val qvar: FeatureField = FeatureField( value = NumberConversion.LittleEndian.bytesToInt32(data, dataOffset).toLong(), max = Long.MAX_VALUE, min = Long.MIN_VALUE, @@ -89,6 +89,7 @@ class QVAR( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = numBytes, data = qvarInfo ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/qvar/QVARInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/qvar/QVARInfo.kt index 793d2bb..4f3b355 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/qvar/QVARInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/qvar/QVARInfo.kt @@ -13,7 +13,7 @@ import kotlinx.serialization.Serializable @Serializable data class QVARInfo( - val qvar: FeatureField, + val qvar: FeatureField, val flag: FeatureField, val dqvar: FeatureField, val param: FeatureField, @@ -24,6 +24,8 @@ data class QVARInfo( override val logValue: String = "${qvar.logValue}, ${flag.logValue}, ${dqvar.logValue}, ${param.logValue}" + override val logDoubleValues: List = listOf(qvar.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${qvar.name} = ${qvar.value}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/RawPnPLControlled.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/RawPnPLControlled.kt index e3e89cb..533ab8b 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/RawPnPLControlled.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/RawPnPLControlled.kt @@ -10,6 +10,8 @@ package com.st.blue_sdk.features.extended.raw_pnpl_controlled import android.util.Log import com.st.blue_sdk.board_catalog.models.DtmiContent import com.st.blue_sdk.features.* +import com.st.blue_sdk.features.extended.raw_pnpl_controlled.model.RawPnPLCustom +import com.st.blue_sdk.features.extended.raw_pnpl_controlled.model.RawPnPLCustomEntry import com.st.blue_sdk.features.extended.raw_pnpl_controlled.model.RawPnPLEntry import com.st.blue_sdk.features.extended.raw_pnpl_controlled.model.RawPnPLEntryFormat import com.st.blue_sdk.features.extended.raw_pnpl_controlled.model.RawPnPLStreamIdEntry @@ -35,7 +37,7 @@ class RawPnPLControlled( companion object { const val NAME = "Raw PnPL Controlled" const val PROPERTY_NAME_ST_BLE_STREAM = "st_ble_stream" - val HIDE_PROPERTIES_NAME = arrayOf("min", "max", "unit", "format") + val HIDE_PROPERTIES_NAME = arrayOf("min", "max", "unit", "format", "elements", "output") const val STREAM_ID_NOT_FOUND: Int = 0xFF } @@ -59,6 +61,7 @@ class RawPnPLControlled( data = rawValues ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = data.size - dataOffset, @@ -125,11 +128,25 @@ fun readRawPnPLFormat( val componentName = entry.key var streamId = 0 val formats = mutableListOf() + var customFormat: RawPnPLCustom? = null configuration.entries.forEach { singleEntry -> if (singleEntry.value is JsonPrimitive) { - streamId = - (singleEntry.value as JsonPrimitive).content.toInt() + if (singleEntry.key == "id") { + streamId = + (singleEntry.value as JsonPrimitive).content.toInt() + } else { + val customString = + (singleEntry.value as JsonPrimitive).content + val jsonDec = Json { encodeDefaults = true } + customFormat = + try { + jsonDec.decodeFromString(customString) + } catch (e: Exception) { + Log.d("readRawPnPLFormat", e.stackTraceToString()) + null + } + } } else if (singleEntry.value is JsonObject) { val name = singleEntry.key @@ -158,7 +175,8 @@ fun readRawPnPLFormat( RawPnPLStreamIdEntry( componentName = componentName, streamId = streamId, - formats = formats + formats = formats, + customFormat = customFormat ) ) } @@ -287,6 +305,106 @@ fun decodeRawPnPLData( } } } + foundStream.customFormat?.let { customFormat -> + customFormat.output.forEach { output -> + output.values.clear() + when (output.type) { + RawPnPLCustomEntry.RawPnPLCustomEntryFormat.uint8_t -> { + for (index in 0 until output.elements) { + if (rawData.size > counter) { + output.values.add(rawData[counter]) + counter++ + } + } + } + + RawPnPLCustomEntry.RawPnPLCustomEntryFormat.char, + RawPnPLCustomEntry.RawPnPLCustomEntryFormat.int8_t -> { + for (index in 0 until output.elements) { + if (rawData.size >= counter) { + output.values.add( + NumberConversion.byteToUInt8( + rawData, + counter + ).toInt() + ) + counter++ + } + } + } + + RawPnPLCustomEntry.RawPnPLCustomEntryFormat.uint16_t -> { + for (index in 0 until output.elements) { + if (rawData.size >= (counter + 2)) { + output.values.add( + NumberConversion.LittleEndian.bytesToUInt16( + rawData, + counter + ) + ) + counter += 2 + } + } + } + + RawPnPLCustomEntry.RawPnPLCustomEntryFormat.int16_t -> { + for (index in 0 until output.elements) { + if (rawData.size >= (counter + 2)) { + output.values.add( + NumberConversion.LittleEndian.bytesToInt16( + rawData, + counter + ) + ) + counter += 2 + } + } + } + + RawPnPLCustomEntry.RawPnPLCustomEntryFormat.uint32_t -> { + for (index in 0 until output.elements) { + if (rawData.size >= (counter + 4)) { + output.values.add( + NumberConversion.LittleEndian.bytesToUInt32( + rawData, + counter + ) + ) + counter += 4 + } + } + } + + RawPnPLCustomEntry.RawPnPLCustomEntryFormat.int32_t -> { + for (index in 0 until output.elements) { + if (rawData.size >= (counter + 4)) { + output.values.add( + NumberConversion.LittleEndian.bytesToInt32( + rawData, + counter + ) + ) + counter += 4 + } + } + } + + RawPnPLCustomEntry.RawPnPLCustomEntryFormat.float -> { + for (index in 0 until output.elements) { + if (rawData.size >= (counter + 4)) { + output.values.add( + NumberConversion.LittleEndian.bytesToFloat( + rawData, + counter + ) + ) + counter += 4 + } + } + } + } + } + } } } return streamId diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/RawPnPLControlledInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/RawPnPLControlledInfo.kt index 1958c4e..13e78ab 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/RawPnPLControlledInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/RawPnPLControlledInfo.kt @@ -19,6 +19,8 @@ data class RawPnPLControlledInfo( override val logValue: String = data.joinToString(separator = ", ") { it.logValue } + override val logDoubleValues: List = listOf() + override fun toString(): String { val sampleValue = StringBuilder() data.forEach { sampleValue.append("\t${it.name} = ${it.value}\n") } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/model/RawPnPLCustom.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/model/RawPnPLCustom.kt new file mode 100644 index 0000000..965b8cb --- /dev/null +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/model/RawPnPLCustom.kt @@ -0,0 +1,10 @@ +package com.st.blue_sdk.features.extended.raw_pnpl_controlled.model + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class RawPnPLCustom( + @SerialName(value = "output") + val output: List +) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/model/RawPnPLCustomEntry.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/model/RawPnPLCustomEntry.kt new file mode 100644 index 0000000..93d3b26 --- /dev/null +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/model/RawPnPLCustomEntry.kt @@ -0,0 +1,29 @@ +package com.st.blue_sdk.features.extended.raw_pnpl_controlled.model + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class RawPnPLCustomEntry( + @SerialName(value = "name") + val name: String, + @SerialName(value = "type") + val type:RawPnPLCustomEntryFormat, + @SerialName(value = "size") + val elements: Int=1 + +) { + @kotlinx.serialization.Transient + var values: MutableList = mutableListOf() + + enum class RawPnPLCustomEntryFormat { + uint8_t, + char, + int8_t, + uint16_t, + int16_t, + uint32_t, + int32_t, + float + } +} diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/model/RawPnPLStreamIdEntry.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/model/RawPnPLStreamIdEntry.kt index 7649177..623180c 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/model/RawPnPLStreamIdEntry.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/raw_pnpl_controlled/model/RawPnPLStreamIdEntry.kt @@ -10,5 +10,6 @@ package com.st.blue_sdk.features.extended.raw_pnpl_controlled.model data class RawPnPLStreamIdEntry( val componentName: String, val streamId: Int, - val formats: List + val formats: List, + val customFormat: RawPnPLCustom?=null ) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/registers_feature/RegistersFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/registers_feature/RegistersFeature.kt index 1df53ec..3b1f3fc 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/registers_feature/RegistersFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/registers_feature/RegistersFeature.kt @@ -82,6 +82,7 @@ class RegistersFeature( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = numberOfBytes, data = mlcInfo ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/registers_feature/RegistersFeatureInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/registers_feature/RegistersFeatureInfo.kt index b2af094..608cb56 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/registers_feature/RegistersFeatureInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/registers_feature/RegistersFeatureInfo.kt @@ -22,6 +22,8 @@ data class RegistersFeatureInfo( override val logValue: String = (registers + statusPages).joinToString(separator = ", ") { it.logValue } + override val logDoubleValues: List = registers.map { it.value.toDouble() } + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\tRegisters:\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/tof_multi_object/ToFMultiObject.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/tof_multi_object/ToFMultiObject.kt index a2f3f37..b97ccba 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/tof_multi_object/ToFMultiObject.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/tof_multi_object/ToFMultiObject.kt @@ -74,6 +74,7 @@ class ToFMultiObject( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = data.size - dataOffset, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/tof_multi_object/ToFMultiObjectInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/tof_multi_object/ToFMultiObjectInfo.kt index 718612f..78863b2 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/tof_multi_object/ToFMultiObjectInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/extended/tof_multi_object/ToFMultiObjectInfo.kt @@ -23,6 +23,8 @@ data class ToFMultiObjectInfo( override val logValue: String = (listOf(nObjsFound) + distanceObjs + listOf(presenceFound)).joinToString(separator = ", ") { it.logValue } + override val logDoubleValues: List = listOf(nObjsFound.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\tFound ${nObjsFound.value} ${nObjsFound.name}:\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/BodySensorLocation.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/BodySensorLocation.kt index f93ec4d..a5741f3 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/BodySensorLocation.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/BodySensorLocation.kt @@ -37,6 +37,7 @@ class BodySensorLocation( offset++ return FeatureUpdate( + featureName = name, readByte = offset - dataOffset, rawData = data, timeStamp = timeStamp, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/BodySensorLocationInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/BodySensorLocationInfo.kt index f5c80bc..8b7729a 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/BodySensorLocationInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/BodySensorLocationInfo.kt @@ -15,6 +15,8 @@ data class BodySensorLocationInfo( override val logValue: String = bodySensorLocation.logValue + override val logDoubleValues: List = listOf() + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${bodySensorLocation.name} = ${bodySensorLocation.value}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/HeartRate.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/HeartRate.kt index fd3ac98..c8b320e 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/HeartRate.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/HeartRate.kt @@ -71,6 +71,7 @@ class HeartRate( } return FeatureUpdate( + featureName = name, readByte = offset-dataOffset, rawData = data, timeStamp = timeStamp, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/HeartRateInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/HeartRateInfo.kt index 7576f2c..fc34215 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/HeartRateInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/std/HeartRateInfo.kt @@ -26,6 +26,8 @@ data class HeartRateInfo( override val logValue: String = "${heartRate.logValue}, ${energyExpended.logValue}, ${rrInterval.logValue}" + override val logDoubleValues: List = listOf() + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${heartRate.name} = ${heartRate.value} ${heartRate.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/P2PConfiguration.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/P2PConfiguration.kt index 40e0f6a..17d842a 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/P2PConfiguration.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/P2PConfiguration.kt @@ -14,7 +14,6 @@ import com.st.blue_sdk.models.Boards // TODO: move this item in P2P demo package object P2PConfiguration { private const val WB_ROUTER_NODE_ID = 0x85 - sealed class DeviceId(val id: Byte) { object Device1 : DeviceId(id = 0x01) object Device2 : DeviceId(id = 0x02) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/led_and_reboot/ControlLedAndReboot.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/led_and_reboot/ControlLedAndReboot.kt index 9473f50..afb8f43 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/led_and_reboot/ControlLedAndReboot.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/led_and_reboot/ControlLedAndReboot.kt @@ -43,6 +43,7 @@ class ControlLedAndReboot( ): FeatureUpdate { return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = byteArrayOf(), readByte = 0, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/network_status/NetworkStatus.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/network_status/NetworkStatus.kt index cbfd8e0..98663de 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/network_status/NetworkStatus.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/network_status/NetworkStatus.kt @@ -46,6 +46,7 @@ class NetworkStatus( } return FeatureUpdate( + featureName = name, readByte = data.size, timeStamp = timeStamp, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/network_status/NetworkStatusInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/network_status/NetworkStatusInfo.kt index 6d3df02..51fdc74 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/network_status/NetworkStatusInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/network_status/NetworkStatusInfo.kt @@ -21,6 +21,8 @@ class NetworkStatusInfo(val connectionStatus: FeatureField = listOf() + override fun toString(): String { val builder = StringBuilder() diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/switch_status/SwitchInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/switch_status/SwitchInfo.kt index e355340..ac28b3a 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/switch_status/SwitchInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/switch_status/SwitchInfo.kt @@ -21,6 +21,8 @@ class SwitchInfo( override val logValue: String = "${deviceId.logValue}, ${isSwitchPressed.logValue}" + override val logDoubleValues: List = listOf() + override fun toString(): String { return "Device Id is: ${deviceId.value}, " + "switchStatus is: ${if (isSwitchPressed.value) "PRESSED" else "NOT PRESSED"}" diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/switch_status/SwitchStatus.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/switch_status/SwitchStatus.kt index 273e06e..ac24d5d 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/switch_status/SwitchStatus.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/external/stm32/switch_status/SwitchStatus.kt @@ -52,8 +52,9 @@ class SwitchStatus( ) return FeatureUpdate( - 2, - timeStamp, + featureName = name, + readByte = 2, + timeStamp = timeStamp, rawData = data, data = SwitchInfo(deviceId, isSwitchPressed) ) diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/fft/FFTAmplitudeFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/fft/FFTAmplitudeFeature.kt index 1d61b64..0ce03a4 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/fft/FFTAmplitudeFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/fft/FFTAmplitudeFeature.kt @@ -21,7 +21,8 @@ class FFTAmplitudeFeature( type = type, identifier = identifier, name = name, - hasTimeStamp = hasTimeStamp + hasTimeStamp = hasTimeStamp, + isDataNotifyFeature = false ) { private var previousData: FFTData? = null @@ -80,6 +81,7 @@ class FFTAmplitudeFeature( } return FeatureUpdate( + featureName = name, readByte = data.size, timeStamp = timeStamp, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/fft/FFTData.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/fft/FFTData.kt index 1fbe30e..8a04379 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/fft/FFTData.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/fft/FFTData.kt @@ -26,6 +26,8 @@ class FFTData( override val logValue: String = "${sampleCount.logValue}, ${components.logValue}, ${freqStep.logValue}" + override val logDoubleValues: List = listOf() + private var rawData = ByteArray(size = sampleCount.value * components.value * 4) // components * 4 byte each float diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/free_fall/FreeFall.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/free_fall/FreeFall.kt index 08a6505..4d60a93 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/free_fall/FreeFall.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/free_fall/FreeFall.kt @@ -42,6 +42,7 @@ class FreeFall( ) ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, data = freeFallInfo ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/free_fall/FreeFallInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/free_fall/FreeFallInfo.kt index d7b84ff..ab31747 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/free_fall/FreeFallInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/free_fall/FreeFallInfo.kt @@ -19,6 +19,8 @@ data class FreeFallInfo( override val logValue: String = freeFall.logValue + override val logDoubleValues: List = listOf(freeFall.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${freeFall.name} = ${freeFall.value}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/general_purpose/GeneralPurpose.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/general_purpose/GeneralPurpose.kt index 99946d6..ac20789 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/general_purpose/GeneralPurpose.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/general_purpose/GeneralPurpose.kt @@ -40,6 +40,7 @@ class GeneralPurpose( data = rawValues ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = data.size - dataOffset, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/general_purpose/GeneralPurposeInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/general_purpose/GeneralPurposeInfo.kt index e223798..5b11daf 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/general_purpose/GeneralPurposeInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/general_purpose/GeneralPurposeInfo.kt @@ -19,6 +19,8 @@ data class GeneralPurposeInfo( override val logValue: String = data.joinToString(separator = ", ") { it.logValue } + override val logDoubleValues: List = listOf() + override fun toString(): String { val sampleValue = StringBuilder() data.forEach { sampleValue.append("\t${it.name} = ${it.value}\n") } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/gyroscope/Gyroscope.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/gyroscope/Gyroscope.kt index b6eeacb..02465a3 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/gyroscope/Gyroscope.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/gyroscope/Gyroscope.kt @@ -60,6 +60,7 @@ class Gyroscope( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, data = gyroscope ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/gyroscope/GyroscopeInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/gyroscope/GyroscopeInfo.kt index 413e63a..c198b25 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/gyroscope/GyroscopeInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/gyroscope/GyroscopeInfo.kt @@ -20,6 +20,10 @@ data class GyroscopeInfo( override val logHeader: String = "${x.logHeader}, ${y.logHeader}, ${z.logHeader}" override val logValue: String = "${x.logValue}, ${y.logValue}, ${z.logValue}" + + override val logDoubleValues: List = + listOf(x.value.toDouble(), y.value.toDouble(), z.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${x.name} = ${x.value} ${x.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/humidity/Humidity.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/humidity/Humidity.kt index 684b3b5..7fe1eef 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/humidity/Humidity.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/humidity/Humidity.kt @@ -43,6 +43,7 @@ class Humidity( ) return FeatureUpdate( + featureName = name, rawData = data, readByte = NUMBER_BYTES, data = HumidityInfo(humidity), diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/humidity/HumidityInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/humidity/HumidityInfo.kt index fe497f6..f59b921 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/humidity/HumidityInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/humidity/HumidityInfo.kt @@ -19,6 +19,8 @@ data class HumidityInfo( override val logValue: String = humidity.logValue + override val logDoubleValues: List = listOf(humidity.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${humidity.name} = ${humidity.value} ${humidity.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/logging/sd/SDLoggingFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/logging/sd/SDLoggingFeature.kt index 0800c19..9cf6267 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/logging/sd/SDLoggingFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/logging/sd/SDLoggingFeature.kt @@ -111,6 +111,7 @@ class SDLoggingFeature( ) return FeatureUpdate( + featureName = name, readByte = 9, timeStamp = timeStamp, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/logging/sd/SDLoggingInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/logging/sd/SDLoggingInfo.kt index f6f37dc..64e09eb 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/logging/sd/SDLoggingInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/logging/sd/SDLoggingInfo.kt @@ -23,6 +23,8 @@ class SDLoggingInfo( override val logValue: String = "${loggingStatus.logHeader} ,${featureIds.logValue}, ${logInterval.logValue}" + + override val logDoubleValues: List = listOf() } enum class LoggingStatus { diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/luminosity/Luminosity.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/luminosity/Luminosity.kt index b4532f9..fd0580f 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/luminosity/Luminosity.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/luminosity/Luminosity.kt @@ -42,6 +42,7 @@ class Luminosity( ) return FeatureUpdate( + featureName = name, rawData = data, readByte = 2, data = LuminosityInfo(luminosity), diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/luminosity/LuminosityInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/luminosity/LuminosityInfo.kt index 7d62b28..f753f9a 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/luminosity/LuminosityInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/luminosity/LuminosityInfo.kt @@ -18,6 +18,8 @@ data class LuminosityInfo( override val logHeader: String = luminosity.logHeader override val logValue: String = luminosity.logValue + override val logDoubleValues: List = listOf(luminosity.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${luminosity.name} = ${luminosity.value} ${luminosity.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/magnetometer/Magnetometer.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/magnetometer/Magnetometer.kt index 4a41e96..f49ef36 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/magnetometer/Magnetometer.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/magnetometer/Magnetometer.kt @@ -59,6 +59,7 @@ class Magnetometer( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, data = magneto ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/magnetometer/MagnetometerInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/magnetometer/MagnetometerInfo.kt index 125e0d1..d26d923 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/magnetometer/MagnetometerInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/magnetometer/MagnetometerInfo.kt @@ -20,6 +20,10 @@ data class MagnetometerInfo( override val logHeader: String = "${x.logHeader}, ${y.logHeader}, ${z.logHeader}" override val logValue: String = "${x.logValue}, ${y.logValue}, ${z.logValue}" + + override val logDoubleValues: List = + listOf(x.value.toDouble(), y.value.toDouble(), z.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${x.name} = ${x.value} ${x.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_gesture/MemsGesture.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_gesture/MemsGesture.kt index 0dd39ef..3303617 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_gesture/MemsGesture.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_gesture/MemsGesture.kt @@ -25,6 +25,22 @@ class MemsGesture( companion object { const val NAME = "MEMS Gesture" + + fun getGestureType(gesture: Short) = when ((gesture and 0x0F).toInt()) { + 0x00 -> MemsGestureType.Unknown + 0x01 -> MemsGestureType.PickUp + 0x02 -> MemsGestureType.Glance + 0x03 -> MemsGestureType.WakeUp + else -> MemsGestureType.Error + } + + fun getGestureTypeCode(gesture: MemsGestureType) = when (gesture) { + MemsGestureType.Unknown -> 0x00 + MemsGestureType.PickUp -> 0x01 + MemsGestureType.Glance -> 0x02 + MemsGestureType.WakeUp -> 0x03 + MemsGestureType.Error -> 0x0F + } } override fun extractData( @@ -43,18 +59,11 @@ class MemsGesture( ) ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = 1, data = gesture ) } - private fun getGestureType(gesture: Short) = when ((gesture and 0x0F).toInt()) { - 0x00 -> MemsGestureType.Unknown - 0x01 -> MemsGestureType.PickUp - 0x02 -> MemsGestureType.Glance - 0x03 -> MemsGestureType.WakeUp - else -> MemsGestureType.Error - } - override fun packCommandData(featureBit: Int?, command: FeatureCommand): ByteArray? = null override fun parseCommandResponse(data: ByteArray): FeatureResponse? = null diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_gesture/MemsGestureInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_gesture/MemsGestureInfo.kt index 2aace1f..9edf976 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_gesture/MemsGestureInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_gesture/MemsGestureInfo.kt @@ -19,6 +19,10 @@ data class MemsGestureInfo( override val logValue: String = gesture.logValue + + override val logDoubleValues: List = + listOf(MemsGesture.getGestureTypeCode(gesture.value).toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${gesture.name} = ${gesture.value}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_norm/MemsNorm.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_norm/MemsNorm.kt index 6b6bfa9..de6b6d7 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_norm/MemsNorm.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_norm/MemsNorm.kt @@ -40,6 +40,7 @@ class MemsNorm( ) ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, data = memsNorm ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_norm/MemsNormInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_norm/MemsNormInfo.kt index bee1c0c..7ab227f 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_norm/MemsNormInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mems_norm/MemsNormInfo.kt @@ -19,6 +19,8 @@ data class MemsNormInfo( override val logValue: String = norm.logValue + override val logDoubleValues: List = listOf(norm.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${norm.name} = ${norm.value}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mic_level/MicLevel.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mic_level/MicLevel.kt index 606fd69..4706dcf 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mic_level/MicLevel.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mic_level/MicLevel.kt @@ -58,6 +58,7 @@ class MicLevel( val micLevelInfo = MicLevelInfo(micsLevel = levels) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = numberOfBytes, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mic_level/MicLevelInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mic_level/MicLevelInfo.kt index 0b92dc5..265c535 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mic_level/MicLevelInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/mic_level/MicLevelInfo.kt @@ -19,6 +19,8 @@ data class MicLevelInfo( override val logValue: String = micsLevel.joinToString(separator = ", ") { it.logValue } + override val logDoubleValues: List = micsLevel.map { it.value.toDouble() } + override fun toString(): String { val sampleValue = StringBuilder() for (element in micsLevel) { diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/motion_intensity/MotionIntensity.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/motion_intensity/MotionIntensity.kt index fd64200..44ea74e 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/motion_intensity/MotionIntensity.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/motion_intensity/MotionIntensity.kt @@ -41,6 +41,7 @@ class MotionIntensity( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/motion_intensity/MotionIntensityInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/motion_intensity/MotionIntensityInfo.kt index 2cfa1e5..0e1be8e 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/motion_intensity/MotionIntensityInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/motion_intensity/MotionIntensityInfo.kt @@ -19,6 +19,8 @@ data class MotionIntensityInfo( override val logValue: String = intensity.logValue + override val logDoubleValues: List = listOf(intensity.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${intensity.name} = ${intensity.value}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/ImageFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/ImageFeature.kt index d8e4150..edaf190 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/ImageFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/ImageFeature.kt @@ -84,6 +84,7 @@ class ImageFeature( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = readData, data = imageInfo ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/ImageInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/ImageInfo.kt index a182631..62bdbfe 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/ImageInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/ImageInfo.kt @@ -24,4 +24,6 @@ data class ImageInfo( override val logValue: String = "${flashLB.logValue}, ${flashUB.logValue}, ${protocolVersionMajor.logValue}, ${protocolVersionMinor.logValue}" + override val logDoubleValues: List = listOf() + } \ No newline at end of file diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/ExpectedImageTUSeqNumberFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/ExpectedImageTUSeqNumberFeature.kt index cf6bdd5..77cb643 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/ExpectedImageTUSeqNumberFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/ExpectedImageTUSeqNumberFeature.kt @@ -55,6 +55,7 @@ class ExpectedImageTUSeqNumberFeature( ) return FeatureUpdate( + featureName = name, readByte = numByte, timeStamp = timeStamp, data = ExpectedImageSeqNumber(nextExpectedCharBlock, errorAck), diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/NewImageFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/NewImageFeature.kt index 92decae..9e42245 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/NewImageFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/NewImageFeature.kt @@ -67,6 +67,7 @@ class NewImageFeature( ) return FeatureUpdate( + featureName = name, readByte = 9, timeStamp = timeStamp, data = NewImageInfo(otaAckEvery, imageSize, baseAddress), diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/NewImageTUContentFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/NewImageTUContentFeature.kt index 174b56f..49ee4db 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/NewImageTUContentFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/NewImageTUContentFeature.kt @@ -43,6 +43,7 @@ class NewImageTUContentFeature( val numByte = 1 require(data.size - dataOffset >= numByte) { "There are byte available to read" } return FeatureUpdate( + featureName = name, readByte = numByte, timeStamp = timeStamp, data = ImageTUContentInfo( diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/ExpectedImageSeqNumber.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/ExpectedImageSeqNumber.kt index 889850b..e3d4a74 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/ExpectedImageSeqNumber.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/ExpectedImageSeqNumber.kt @@ -22,6 +22,8 @@ class ExpectedImageSeqNumber( override val logValue: String get() = "${nextExpectedCharBlock.logHeader}, ${errorAck.logHeader}" + override val logDoubleValues: List = listOf() + enum class ErrorCode { FLASH_WRITE_FAILED, FLASH_VERIFY_FAILED, CHECK_SUM_ERROR, SEQUENCE_ERROR, NO_ERROR, UNKNOWN_ERROR; diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/ImageTUContentInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/ImageTUContentInfo.kt index 062dca9..cac4e14 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/ImageTUContentInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/ImageTUContentInfo.kt @@ -21,4 +21,6 @@ class ImageTUContentInfo( override val logValue: String get() = expectedWriteLength.logValue + + override val logDoubleValues: List = listOf() } \ No newline at end of file diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/NewImageInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/NewImageInfo.kt index 8ce4224..9bcf678 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/NewImageInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/nrg/response/NewImageInfo.kt @@ -23,4 +23,6 @@ data class NewImageInfo( override val logValue: String = "${otaAckEvery.logValue}, ${imageSize.logValue}, ${baseAddress.logValue}" + + override val logDoubleValues: List = listOf() } \ No newline at end of file diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAControl.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAControl.kt index 1f22634..0815723 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAControl.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAControl.kt @@ -64,6 +64,7 @@ class OTAControl( data: ByteArray, dataOffset: Int ): FeatureUpdate = FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = byteArrayOf(), readByte = 0, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAFileUpload.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAFileUpload.kt index 2a16147..9a0b7c0 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAFileUpload.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAFileUpload.kt @@ -39,6 +39,7 @@ class OTAFileUpload( dataOffset: Int ): FeatureUpdate { return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = byteArrayOf(), readByte = 0, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAReboot.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAReboot.kt index 510f11b..5f6fcc9 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAReboot.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAReboot.kt @@ -38,6 +38,7 @@ class OTAReboot( dataOffset: Int ): FeatureUpdate { return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = byteArrayOf(), readByte = 0, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAWillReboot.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAWillReboot.kt index e9781d6..bf9f9d1 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAWillReboot.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/OTAWillReboot.kt @@ -46,6 +46,7 @@ class OTAWillReboot( else -> WillRebootInfoType.OTHER } return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = 1, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/response/WillRebootInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/response/WillRebootInfo.kt index b43eb4e..b155a60 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/response/WillRebootInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/ota/stm32wb/response/WillRebootInfo.kt @@ -17,6 +17,8 @@ class WillRebootInfo(feature: Feature<*>, commandId: Byte, val infoType: WillReb override val logHeader: String = "" override val logValue: String = "" + + override val logDoubleValues: List = listOf() } enum class WillRebootInfoType { diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pedometer/Pedometer.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pedometer/Pedometer.kt index f250a6d..9a5bcf2 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pedometer/Pedometer.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pedometer/Pedometer.kt @@ -50,6 +50,7 @@ class Pedometer( ) ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, data = pedometer ) } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pedometer/PedometerInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pedometer/PedometerInfo.kt index fc13daa..2adaacf 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pedometer/PedometerInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pedometer/PedometerInfo.kt @@ -20,6 +20,9 @@ data class PedometerInfo( override val logValue: String = "${steps.logValue}, ${frequency.logValue}" + override val logDoubleValues: List = + listOf(steps.value.toDouble(), frequency.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${steps.name} = ${steps.value}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pressure/Pressure.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pressure/Pressure.kt index 5716993..dbb8254 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pressure/Pressure.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pressure/Pressure.kt @@ -43,6 +43,7 @@ class Pressure( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pressure/PressureInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pressure/PressureInfo.kt index 44e3583..8a9b07d 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pressure/PressureInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/pressure/PressureInfo.kt @@ -19,6 +19,8 @@ data class PressureInfo( override val logValue: String = pressure.logValue + override val logDoubleValues: List = listOf(pressure.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${pressure.name} = ${pressure.value} ${pressure.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity/Proximity.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity/Proximity.kt index 0728716..d54b566 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity/Proximity.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity/Proximity.kt @@ -45,6 +45,7 @@ class Proximity( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity/ProximityInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity/ProximityInfo.kt index 288b99d..8bb95b9 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity/ProximityInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity/ProximityInfo.kt @@ -19,6 +19,8 @@ data class ProximityInfo( override val logValue: String = proximity.logValue + override val logDoubleValues: List = listOf(proximity.value.toDouble()) + companion object { /** * the sensor return this value when the object is out of range diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity_gesture/ProximityGesture.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity_gesture/ProximityGesture.kt index c19182d..43fe25f 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity_gesture/ProximityGesture.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity_gesture/ProximityGesture.kt @@ -25,6 +25,22 @@ class ProximityGesture( companion object { const val NAME = "Proximity Gesture" + + fun getGestureType(gesture: Short) = when ((gesture and 0x0F).toInt()) { + 0x00 -> ProximityGestureType.Unknown + 0x01 -> ProximityGestureType.Tap + 0x02 -> ProximityGestureType.Left + 0x03 -> ProximityGestureType.Right + else -> ProximityGestureType.Error + } + + fun getGestureTypeCode(gesture: ProximityGestureType) = when (gesture) { + ProximityGestureType.Unknown -> 0x00 + ProximityGestureType.Tap -> 0x01 + ProximityGestureType.Left -> 0x02 + ProximityGestureType.Right -> 0x03 + ProximityGestureType.Error -> 0x0F + } } override fun extractData( @@ -43,18 +59,11 @@ class ProximityGesture( ) ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = 1, data = gesture ) } - private fun getGestureType(gesture: Short) = when ((gesture and 0x0F).toInt()) { - 0x00 -> ProximityGestureType.Unknown - 0x01 -> ProximityGestureType.Tap - 0x02 -> ProximityGestureType.Left - 0x03 -> ProximityGestureType.Right - else -> ProximityGestureType.Error - } - override fun packCommandData(featureBit: Int?, command: FeatureCommand): ByteArray? = null override fun parseCommandResponse(data: ByteArray): FeatureResponse? = null diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity_gesture/ProximityGestureInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity_gesture/ProximityGestureInfo.kt index 5187d4e..c178ac0 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity_gesture/ProximityGestureInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/proximity_gesture/ProximityGestureInfo.kt @@ -20,6 +20,9 @@ data class ProximityGestureInfo( override val logValue: String = gesture.logValue + override val logDoubleValues: List = + listOf(ProximityGesture.getGestureTypeCode(gesture.value).toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${gesture.name} = ${gesture.value}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/humidity/RemoteHumidity.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/humidity/RemoteHumidity.kt index dac578b..94d912a 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/humidity/RemoteHumidity.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/humidity/RemoteHumidity.kt @@ -48,6 +48,7 @@ class RemoteHumidity( val humidity = NumberConversion.LittleEndian.bytesToUInt16(data, dataOffset + 2) / 10.0f return FeatureUpdate( + featureName = name, readByte = data.size, timeStamp = timeStamp, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/humidity/RemoteHumidityInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/humidity/RemoteHumidityInfo.kt index f2f2d2d..fbb3577 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/humidity/RemoteHumidityInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/humidity/RemoteHumidityInfo.kt @@ -24,6 +24,8 @@ class RemoteHumidityInfo( override val logValue: String = "${remoteNodeId.logValue}, ${remoteTimestamp.logValue}, ${humidity.logValue}" + override val logDoubleValues: List = listOf(humidity.value.toDouble()) + override fun toString(): String { return "Remote node with ID: $remoteNodeId collected humidity value: $humidity" } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/pressure/RemotePressure.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/pressure/RemotePressure.kt index cd63683..f2b4f4b 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/pressure/RemotePressure.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/pressure/RemotePressure.kt @@ -22,15 +22,14 @@ class RemotePressure( type: Type = Type.STANDARD, identifier: Int, name: String = NAME, - hasTimeStamp: Boolean = true, - isDataNotifyFeature: Boolean = true + hasTimeStamp: Boolean = true ) : Feature( isEnabled = isEnabled, type = type, identifier = identifier, name = name, hasTimeStamp = hasTimeStamp, - isDataNotifyFeature = isDataNotifyFeature + isDataNotifyFeature = true ) { companion object { @@ -60,6 +59,7 @@ class RemotePressure( val pressure = NumberConversion.LittleEndian.bytesToInt32(data, dataOffset + 2) / 100.0f return FeatureUpdate( + featureName = name, readByte = data.size, timeStamp = timeStamp, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/pressure/RemotePressureInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/pressure/RemotePressureInfo.kt index 311824b..771752f 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/pressure/RemotePressureInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/pressure/RemotePressureInfo.kt @@ -24,6 +24,8 @@ class RemotePressureInfo( override val logValue: String = "${remoteNodeId.logValue}, ${remoteTimestamp.logValue}, ${pressure.logValue}" + override val logDoubleValues: List = listOf(pressure.value.toDouble()) + override fun toString(): String { return "Remote node with ID: $remoteNodeId collected pressure value: $pressure" } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/switch/RemoteFeatureSwitchInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/switch/RemoteFeatureSwitchInfo.kt index acfe220..9328187 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/switch/RemoteFeatureSwitchInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/switch/RemoteFeatureSwitchInfo.kt @@ -24,6 +24,8 @@ class RemoteFeatureSwitchInfo( override val logValue: String = "${remoteNodeId.logValue}, ${remoteTimestamp.logValue}, ${switchStatus.logValue}" + override val logDoubleValues: List = listOf() + override fun toString(): String { return "Remote node with ID: $remoteNodeId, switch value: $switchStatus" } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/switch/RemoteSwitch.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/switch/RemoteSwitch.kt index 18ff2eb..ce70814 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/switch/RemoteSwitch.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/switch/RemoteSwitch.kt @@ -22,15 +22,14 @@ class RemoteSwitch( type: Type = Type.STANDARD, identifier: Int, name: String = NAME, - hasTimeStamp: Boolean = true, - isDataNotifyFeature: Boolean = true + hasTimeStamp: Boolean = true ) : Feature( isEnabled = isEnabled, type = type, identifier = identifier, name = name, hasTimeStamp = hasTimeStamp, - isDataNotifyFeature = isDataNotifyFeature + isDataNotifyFeature = false ) { companion object { @@ -63,6 +62,7 @@ class RemoteSwitch( val switchStatus = data[dataOffset + 2] return FeatureUpdate( + featureName = name, readByte = data.size, timeStamp = timeStamp, rawData = data, @@ -88,6 +88,7 @@ class RemoteSwitch( NumberConversion.BigEndian.uint16ToBytes(command.nodeId) ) } + else -> null } } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/temperature/RemoteTemperature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/temperature/RemoteTemperature.kt index 3f15f35..8604b05 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/temperature/RemoteTemperature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/temperature/RemoteTemperature.kt @@ -16,15 +16,14 @@ class RemoteTemperature( type: Type = Type.STANDARD, identifier: Int, name: String = NAME, - hasTimeStamp: Boolean = true, - isDataNotifyFeature: Boolean = true + hasTimeStamp: Boolean = true ) : Feature( isEnabled = isEnabled, type = type, identifier = identifier, name = name, hasTimeStamp = hasTimeStamp, - isDataNotifyFeature = isDataNotifyFeature + isDataNotifyFeature = true ) { companion object { @@ -51,6 +50,7 @@ class RemoteTemperature( val temperature = NumberConversion.LittleEndian.bytesToInt16(data, dataOffset + 2) / 10.0f return FeatureUpdate( + featureName = name, readByte = data.size, timeStamp = timeStamp, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/temperature/RemoteTemperatureInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/temperature/RemoteTemperatureInfo.kt index bf251e3..41232fc 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/temperature/RemoteTemperatureInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/remote/temperature/RemoteTemperatureInfo.kt @@ -24,6 +24,8 @@ class RemoteTemperatureInfo( override val logValue: String = "${remoteNodeId.logValue}, ${remoteTimestamp.logValue}, ${temperature.logValue}" + override val logDoubleValues: List = listOf(temperature.value.toDouble()) + override fun toString(): String { return "Remote node with ID: $remoteNodeId collected temperature value: $temperature" } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusion.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusion.kt index 1a75445..71f2b5a 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusion.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusion.kt @@ -51,6 +51,7 @@ class MemsSensorFusion( FeatureField(value = Quaternion(timeStamp, qi, qj, qk, qs), name = "quaternion") return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = numBytes, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusionCompat.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusionCompat.kt index 95a977c..54bca5d 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusionCompat.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusionCompat.kt @@ -59,6 +59,7 @@ class MemsSensorFusionCompat( } return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = nQuat * NUMBER_BYTES, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusionInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusionInfo.kt index 71b61ef..2584c74 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusionInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/sensor_fusion/MemsSensorFusionInfo.kt @@ -21,6 +21,8 @@ data class MemsSensorFusionInfo( override val logValue: String = quaternions.joinToString(separator = ", ") { it.logValue } + override val logDoubleValues: List = listOf() + override fun toString(): String { val sampleValue = StringBuilder() quaternions.forEach { sampleValue.append("\t${it.name} = ${it.value} ${it.unit ?: ""}\n") } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/stepper_motor/StepperMotor.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/stepper_motor/StepperMotor.kt index 8249c9e..62e0b6e 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/stepper_motor/StepperMotor.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/stepper_motor/StepperMotor.kt @@ -37,8 +37,9 @@ class StepperMotor( ): FeatureUpdate { val statusIndex = NumberConversion.byteToUInt8(data, dataOffset).toInt() - val motorStatus = StepperMotorInfo.StepperMotorState.values()[statusIndex] + val motorStatus = StepperMotorInfo.StepperMotorState.entries[statusIndex] return FeatureUpdate( + featureName = name, readByte = 1, timeStamp = timeStamp, rawData = data, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/stepper_motor/StepperMotorInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/stepper_motor/StepperMotorInfo.kt index ab9eb7c..c85270b 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/stepper_motor/StepperMotorInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/stepper_motor/StepperMotorInfo.kt @@ -25,6 +25,8 @@ class StepperMotorInfo( override val logValue: String = motorStatus.logValue + override val logDoubleValues: List = listOf() + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${motorStatus.name} = ${motorStatus.value} ${motorStatus.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/switchfeature/SwitchFeature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/switchfeature/SwitchFeature.kt index d4e55cc..c5c90c8 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/switchfeature/SwitchFeature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/switchfeature/SwitchFeature.kt @@ -29,6 +29,18 @@ class SwitchFeature( const val NAME = "Switch" const val COMMAND_SWITCH_ON: Byte = 0x01 const val COMMAND_SWITCH_OFF: Byte = 0x00 + + fun getStatusType(status: Short) = when (status.toInt()) { + 0x00 -> SwitchStatusType.Off + 0x01 -> SwitchStatusType.On + else -> SwitchStatusType.Error + } + + fun getStatusTypeCode(status: SwitchStatusType) = when (status) { + SwitchStatusType.Off -> 0x00 + SwitchStatusType.On -> 0x01 + SwitchStatusType.Error -> 0xFF + } } override fun extractData( @@ -45,15 +57,11 @@ class SwitchFeature( ) ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = 1, data = switch ) } - private fun getStatusType(status: Short) = when (status.toInt()) { - 0x00 -> SwitchStatusType.Off - 0x01 -> SwitchStatusType.On - else -> SwitchStatusType.Error - } override fun packCommandData( featureBit: Int?, @@ -65,11 +73,13 @@ class SwitchFeature( COMMAND_SWITCH_ON, byteArrayOf() ) + is SwitchOff -> packCommandRequest( featureBit, COMMAND_SWITCH_OFF, byteArrayOf() ) + else -> null } } diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/switchfeature/SwitchFeatureInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/switchfeature/SwitchFeatureInfo.kt index 3a76bdd..f20b1e4 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/switchfeature/SwitchFeatureInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/switchfeature/SwitchFeatureInfo.kt @@ -19,6 +19,9 @@ data class SwitchFeatureInfo( override val logValue: String = status.logValue + override val logDoubleValues: List = + listOf(SwitchFeature.getStatusTypeCode(status.value).toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/temperature/Temperature.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/temperature/Temperature.kt index 2e30665..4f28713 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/temperature/Temperature.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/temperature/Temperature.kt @@ -46,6 +46,7 @@ class Temperature( ) return FeatureUpdate( + featureName = name, timeStamp = timeStamp, rawData = data, readByte = NUMBER_BYTES, diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/temperature/TemperatureInfo.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/temperature/TemperatureInfo.kt index 3f52985..fbbba84 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/features/temperature/TemperatureInfo.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/features/temperature/TemperatureInfo.kt @@ -22,6 +22,8 @@ data class TemperatureInfo( override val logHeader: String = "${temperature.logHeader}, ${featureId.logHeader}" + override val logDoubleValues: List = listOf(temperature.value.toDouble()) + override fun toString(): String { val sampleValue = StringBuilder() sampleValue.append("\t${temperature.name} = ${temperature.value} ${temperature.unit}\n") diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/logger/Loggable.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/logger/Loggable.kt index 23ad5de..b41eb1b 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/logger/Loggable.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/logger/Loggable.kt @@ -11,4 +11,6 @@ interface Loggable { val logHeader: String val logValue: String + + val logDoubleValues: List } \ No newline at end of file diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/models/Boards.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/models/Boards.kt index 6ecb8e7..f17da78 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/models/Boards.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/models/Boards.kt @@ -80,7 +80,7 @@ object Boards { NUCLEO_WB09KE, /** NUCLEO boards */ - NUCLEO, NUCLEO_F401RE, NUCLEO_L476RG, NUCLEO_L053R8, NUCLEO_F446RE + NUCLEO, NUCLEO_F401RE, NUCLEO_L476RG, NUCLEO_L053R8, NUCLEO_F446RE,NUCLEO_U575ZIQ,NUCLEO_U5A5ZJQ } //Type enum class Family { @@ -123,7 +123,9 @@ object Boards { Model.NUCLEO_F401RE, Model.NUCLEO_L476RG, Model.NUCLEO_L053R8, - Model.NUCLEO_F446RE -> Family.NUCLEO_FAMILY + Model.NUCLEO_F446RE, + Model.NUCLEO_U575ZIQ, + Model.NUCLEO_U5A5ZJQ-> Family.NUCLEO_FAMILY Model.WB55_NUCLEO_BOARD, Model.WB5M_DISCOVERY_BOARD, @@ -171,6 +173,8 @@ object Boards { 0x7E -> Model.NUCLEO_L476RG 0x7D -> Model.NUCLEO_L053R8 0x7C -> Model.NUCLEO_F446RE + 0x7B -> Model.NUCLEO_U575ZIQ + 0x7A -> Model.NUCLEO_U5A5ZJQ 0x8D -> Model.NUCLEO_WB09KE else -> { if (temp in 0x81..0x8A) { @@ -209,6 +213,8 @@ object Boards { 0x7E -> Model.NUCLEO_L476RG 0x7D -> Model.NUCLEO_L053R8 0x7C -> Model.NUCLEO_F446RE + 0x7B -> Model.NUCLEO_U575ZIQ + 0x7A -> Model.NUCLEO_U5A5ZJQ 0x81 -> Model.WB55_NUCLEO_BOARD diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/models/Node.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/models/Node.kt index 725831c..5c88588 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/models/Node.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/models/Node.kt @@ -111,15 +111,12 @@ data class Node( ) } - val fwMaturity = if(catalogInfo!=null) { - if(catalogInfo.maturity!=null) { - catalogInfo.maturity + val fwMaturity = catalogInfo?.maturity + ?: if(isCustomFw) { + FirmwareMaturity.CUSTOM } else { FirmwareMaturity.RELEASE } - } else { - FirmwareMaturity.RELEASE - } //FixLP var maxPayloadSize = mtu - BLE_PACKET_HEADER_LEN diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/services/ota/characteristic/CharacteristicFwUpgrade.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/services/ota/characteristic/CharacteristicFwUpgrade.kt index 7dc3aae..651d23d 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/services/ota/characteristic/CharacteristicFwUpgrade.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/services/ota/characteristic/CharacteristicFwUpgrade.kt @@ -84,14 +84,14 @@ class CharacteristicFwUpgrade( ) } - val address = java.lang.Long.decode(address) //WbOTAUtils.getMemoryAddress(boardType) + val address2 = java.lang.Long.decode(address) //WbOTAUtils.getMemoryAddress(boardType) - val firstSectorToDelete = WbOTAUtils.getFirstSectorToDelete(boardType, address) + val firstSectorToDelete = WbOTAUtils.getFirstSectorToDelete(boardType, address2) return FwUpgradeParams.Stm32WbParams( offset = firstSectorToDelete.toLong(), sectorCount = sectorCount.toByte(), - address = address + address = address2 ) } } @@ -317,7 +317,7 @@ class CharacteristicFwUpgrade( val writeDataFile: suspend CoroutineScope.() -> Unit = { val maxPacketLength: Int if(isWBAProtocol) { - val maxPayloadSize = otaNodeService.getNode().maxPayloadSize + val maxPayloadSize = otaNodeService.getNode().maxPayloadSize maxPacketLength = maxPayloadSize - (maxPayloadSize % 16) } else { maxPacketLength = 244 diff --git a/st_blue_sdk/src/main/java/com/st/blue_sdk/utils/STL2TransportProtocol.kt b/st_blue_sdk/src/main/java/com/st/blue_sdk/utils/STL2TransportProtocol.kt index bffa179..e0dcca8 100644 --- a/st_blue_sdk/src/main/java/com/st/blue_sdk/utils/STL2TransportProtocol.kt +++ b/st_blue_sdk/src/main/java/com/st/blue_sdk/utils/STL2TransportProtocol.kt @@ -7,7 +7,6 @@ */ package com.st.blue_sdk.utils -import android.util.Log import java.io.ByteArrayOutputStream import java.nio.charset.StandardCharsets import kotlin.math.min @@ -66,10 +65,19 @@ class STL2TransportProtocol(private var maxPayloadSize: Int = 20) { fun getNumberPackets() = numberPackets fun getBytesReceived() = bytesRec - private fun toBytes(s: Short): ByteArray { + private fun Int.to2Bytes(): ByteArray { return byteArrayOf( - (s.toInt() and 0x00FF).toByte(), - ((s.toInt() and 0xFF00) shr (8)).toByte() + (this and 0x00FF).toByte(), + ((this and 0xFF00) shr (8)).toByte() + ) + } + + private fun Int.to4Bytes(): ByteArray { + return byteArrayOf( + (this and 0xFF).toByte(), + ((this shr 8) and 0xFF).toByte(), + ((this shr 16) and 0xFF).toByte(), + ((this shr 24) and 0xFF).toByte() ) } @@ -87,7 +95,11 @@ class STL2TransportProtocol(private var maxPayloadSize: Int = 20) { if (codedDataLength - cnt <= mtuSize - 3) { TP_START_END_PACKET } else { - TP_START_PACKET + if(codedDataLength { /*First part of a packet*/baos.write(head.toInt()) - baos.write(toBytes(codedDataLength.toShort()).reversedArray()) + baos.write(codedDataLength.to2Bytes().reversedArray()) baos.write(byteCommand, 0, mtuSize - 3) size = mtuSize - 3 head = TP_MIDDLE_PACKET } + TP_START_LONG_PACKET -> { + //Log.i("STL2TransportProtocol","TP_START_LONG_PACKET") + /*First part of a packet*/baos.write(head.toInt()) + baos.write(codedDataLength.to4Bytes().reversedArray()) + baos.write(byteCommand, 0, mtuSize - 5) + size = mtuSize - 5 + head = TP_MIDDLE_PACKET + } TP_START_END_PACKET -> { /*First and last part of a packet*/baos.write(head.toInt()) - baos.write(toBytes(codedDataLength.toShort()).reversedArray()) + baos.write(codedDataLength.to2Bytes().reversedArray()) baos.write(byteCommand, 0, codedDataLength) size = codedDataLength head = TP_START_PACKET @@ -141,7 +161,11 @@ class STL2TransportProtocol(private var maxPayloadSize: Int = 20) { if (codedDataLength - cnt <= mtuSize - 3) { TP_START_END_PACKET } else { - TP_START_PACKET + if(codedDataLength { //Log.i("STL2TransportProtocol","TP_START_PACKET") /*First part of a packet*/baos.write(head.toInt()) - baos.write(toBytes(codedDataLength.toShort()).reversedArray()) + baos.write(codedDataLength.to2Bytes().reversedArray()) baos.write(byteCommand, 0, mtuSize - 3) size = mtuSize - 3 head = TP_MIDDLE_PACKET } + TP_START_LONG_PACKET -> { + //Log.i("STL2TransportProtocol","TP_START_LONG_PACKET") + /*First part of a packet*/baos.write(head.toInt()) + baos.write(codedDataLength.to4Bytes().reversedArray()) + baos.write(byteCommand, 0, mtuSize - 5) + size = mtuSize - 5 + head = TP_MIDDLE_PACKET + } TP_START_END_PACKET -> { //Log.i("STL2TransportProtocol","TP_START_END_PACKET") /*First and last part of a packet*/baos.write(head.toInt()) - baos.write(toBytes(codedDataLength.toShort()).reversedArray()) + baos.write(codedDataLength.to2Bytes().reversedArray()) baos.write(byteCommand, 0, codedDataLength) size = codedDataLength head = TP_START_PACKET @@ -189,6 +221,8 @@ class STL2TransportProtocol(private var maxPayloadSize: Int = 20) { private const val TP_START_END_PACKET = 0x20.toByte() private const val TP_MIDDLE_PACKET = 0x40.toByte() private const val TP_END_PACKET = 0x80.toByte() + private const val MAX_LONG_PACKET = (1 shl 16)-1 + private const val TP_START_LONG_PACKET = 0x10.toByte() private val CHARSET = StandardCharsets.ISO_8859_1 } } \ No newline at end of file