├── .gitignore ├── BlueST-SDK.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── License.html ├── README.md ├── README_HowToUseInternal.md ├── SECURITY.md ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ └── open_source_licenses.html │ ├── java │ └── com │ │ └── st │ │ └── demo │ │ ├── MainActivity.kt │ │ ├── SampleApp.kt │ │ ├── audio │ │ ├── AudioScreen.kt │ │ └── AudioScreenViewModel.kt │ │ ├── device_detail │ │ ├── BleDeviceDetail.kt │ │ └── BleDeviceDetailViewModel.kt │ │ ├── device_list │ │ ├── BleDeviceList.kt │ │ └── BleDeviceListViewModel.kt │ │ ├── feature_detail │ │ ├── FeatureDetail.kt │ │ └── FeatureDetailViewModel.kt │ │ └── ui │ │ └── theme │ │ ├── Color.kt │ │ ├── Theme.kt │ │ └── Type.kt │ └── res │ ├── drawable-v24 │ └── ic_launcher_foreground.xml │ ├── drawable │ └── ic_launcher_background.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-mdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ └── values │ ├── strings.xml │ └── themes.xml ├── build.gradle.kts ├── gradle.properties ├── gradle ├── libs.versions.toml ├── wrapper.zip └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── opus └── .cxx │ └── Debug │ └── 60i1sxs5 │ ├── arm64-v8a │ ├── .cmake │ │ └── api │ │ │ └── v1 │ │ │ ├── query │ │ │ └── client-agp │ │ │ │ ├── cache-v2 │ │ │ │ ├── cmakeFiles-v1 │ │ │ │ └── codemodel-v2 │ │ │ └── reply │ │ │ ├── cache-v2-470b76ed65c6bcacf11f.json │ │ │ ├── cmakeFiles-v1-c473922abf63b24a5243.json │ │ │ ├── codemodel-v2-b0da4d64702370b86109.json │ │ │ ├── index-2022-04-07T12-36-37-0072.json │ │ │ └── target-st_opus-Debug-7803562493eeca685c75.json │ ├── .ninja_deps │ ├── .ninja_log │ ├── CMakeCache.txt │ ├── CMakeFiles │ │ ├── 3.18.1-g262b901 │ │ │ ├── CMakeCCompiler.cmake │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ └── CMakeSystem.cmake │ │ ├── TargetDirectories.txt │ │ ├── cmake.check_cache │ │ ├── rules.ninja │ │ └── st_opus.dir │ │ │ ├── codec │ │ │ └── CodecOpus.cpp.o │ │ │ ├── st_opus.cpp.o │ │ │ └── utils │ │ │ └── SamplesConverter.cpp.o │ ├── android_gradle_build.json │ ├── android_gradle_build_command_st_opus_arm64-v8a.txt │ ├── android_gradle_build_stderr_st_opus_arm64-v8a.txt │ ├── android_gradle_build_stdout_st_opus_arm64-v8a.txt │ ├── build.ninja │ ├── cmake_install.cmake │ ├── compile_commands.json │ ├── compile_commands.json.bin │ ├── metadata_generation_command.txt │ └── prefab_config.json │ ├── armeabi-v7a │ ├── .cmake │ │ └── api │ │ │ └── v1 │ │ │ ├── query │ │ │ └── client-agp │ │ │ │ ├── cache-v2 │ │ │ │ ├── cmakeFiles-v1 │ │ │ │ └── codemodel-v2 │ │ │ └── reply │ │ │ ├── cache-v2-a43ac74063f31375eca7.json │ │ │ ├── cmakeFiles-v1-65ce27dfcd8d6afc7ff9.json │ │ │ ├── codemodel-v2-427cf1034632ed3a3c2c.json │ │ │ ├── index-2022-04-07T13-04-27-0816.json │ │ │ └── target-st_opus-Debug-e65b20daaace4f2811b2.json │ ├── .ninja_deps │ ├── .ninja_log │ ├── CMakeCache.txt │ ├── CMakeFiles │ │ ├── 3.18.1-g262b901 │ │ │ ├── CMakeCCompiler.cmake │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ └── CMakeSystem.cmake │ │ ├── TargetDirectories.txt │ │ ├── cmake.check_cache │ │ ├── rules.ninja │ │ └── st_opus.dir │ │ │ ├── codec │ │ │ └── CodecOpus.cpp.o │ │ │ ├── st_opus.cpp.o │ │ │ └── utils │ │ │ └── SamplesConverter.cpp.o │ ├── android_gradle_build.json │ ├── android_gradle_build_command_st_opus_armeabi-v7a.txt │ ├── android_gradle_build_stderr_st_opus_armeabi-v7a.txt │ ├── android_gradle_build_stdout_st_opus_armeabi-v7a.txt │ ├── build.ninja │ ├── cmake_install.cmake │ ├── compile_commands.json │ ├── compile_commands.json.bin │ ├── metadata_generation_command.txt │ └── prefab_config.json │ ├── x86 │ ├── .cmake │ │ └── api │ │ │ └── v1 │ │ │ ├── query │ │ │ └── client-agp │ │ │ │ ├── cache-v2 │ │ │ │ ├── cmakeFiles-v1 │ │ │ │ └── codemodel-v2 │ │ │ └── reply │ │ │ ├── cache-v2-06ac4101ded16eeddaa8.json │ │ │ ├── cmakeFiles-v1-250cae608ad21ad265e1.json │ │ │ ├── codemodel-v2-3edd81916ebf2d9af4b0.json │ │ │ ├── index-2022-04-07T13-04-28-0793.json │ │ │ └── target-st_opus-Debug-9e85e9be6f79b707d944.json │ ├── .ninja_deps │ ├── .ninja_log │ ├── CMakeCache.txt │ ├── CMakeFiles │ │ ├── 3.18.1-g262b901 │ │ │ ├── CMakeCCompiler.cmake │ │ │ ├── CMakeCXXCompiler.cmake │ │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ │ └── CMakeSystem.cmake │ │ ├── TargetDirectories.txt │ │ ├── cmake.check_cache │ │ ├── rules.ninja │ │ └── st_opus.dir │ │ │ ├── codec │ │ │ └── CodecOpus.cpp.o │ │ │ ├── st_opus.cpp.o │ │ │ └── utils │ │ │ └── SamplesConverter.cpp.o │ ├── android_gradle_build.json │ ├── android_gradle_build_command_st_opus_x86.txt │ ├── android_gradle_build_stderr_st_opus_x86.txt │ ├── android_gradle_build_stdout_st_opus_x86.txt │ ├── build.ninja │ ├── cmake_install.cmake │ ├── compile_commands.json │ ├── compile_commands.json.bin │ ├── metadata_generation_command.txt │ └── prefab_config.json │ └── x86_64 │ ├── .cmake │ └── api │ │ └── v1 │ │ ├── query │ │ └── client-agp │ │ │ ├── cache-v2 │ │ │ ├── cmakeFiles-v1 │ │ │ └── codemodel-v2 │ │ └── reply │ │ ├── cache-v2-f57c31c95d694710e420.json │ │ ├── cmakeFiles-v1-1bc271e0334b4ec9f457.json │ │ ├── codemodel-v2-00c5fcd4a236ec12b135.json │ │ ├── index-2022-04-07T13-04-29-0714.json │ │ └── target-st_opus-Debug-1a73028a134208863219.json │ ├── .ninja_deps │ ├── .ninja_log │ ├── CMakeCache.txt │ ├── CMakeFiles │ ├── 3.18.1-g262b901 │ │ ├── CMakeCCompiler.cmake │ │ ├── CMakeCXXCompiler.cmake │ │ ├── CMakeDetermineCompilerABI_C.bin │ │ ├── CMakeDetermineCompilerABI_CXX.bin │ │ └── CMakeSystem.cmake │ ├── TargetDirectories.txt │ ├── cmake.check_cache │ ├── rules.ninja │ └── st_opus.dir │ │ ├── codec │ │ └── CodecOpus.cpp.o │ │ ├── st_opus.cpp.o │ │ └── utils │ │ └── SamplesConverter.cpp.o │ ├── android_gradle_build.json │ ├── android_gradle_build_command_st_opus_x86_64.txt │ ├── android_gradle_build_stderr_st_opus_x86_64.txt │ ├── android_gradle_build_stdout_st_opus_x86_64.txt │ ├── build.ninja │ ├── cmake_install.cmake │ ├── compile_commands.json │ ├── compile_commands.json.bin │ ├── metadata_generation_command.txt │ └── prefab_config.json ├── settings.gradle.kts ├── st_blue_sdk ├── .gitignore ├── License.md ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro ├── publish.gradle └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── st │ │ └── blue_sdk │ │ ├── BlueManager.kt │ │ ├── BlueManagerImpl.kt │ │ ├── LoggableUnit.kt │ │ ├── NodeService.kt │ │ ├── board_catalog │ │ ├── BoardCatalogRepo.kt │ │ ├── BoardCatalogRepoImpl.kt │ │ ├── api │ │ │ ├── BoardCatalogApi.kt │ │ │ ├── di │ │ │ │ ├── ApiModule.kt │ │ │ │ └── Qualifier.kt │ │ │ └── serializers │ │ │ │ ├── BoardFotaTypeSerializer.kt │ │ │ │ ├── BoardStatusTypeSerializer.kt │ │ │ │ ├── BootLoaderTypeSerializer.kt │ │ │ │ ├── DateSerializer.kt │ │ │ │ └── FirmwareMaturityTypeSerializer.kt │ │ ├── db │ │ │ ├── BoardCatalogDB.kt │ │ │ ├── BoardCatalogDao.kt │ │ │ └── converters │ │ │ │ ├── BleCharacteristicDataConverter.kt │ │ │ │ ├── BleCharacteristicFormatDataConverter.kt │ │ │ │ ├── Board_compatibilityDataConverter.kt │ │ │ │ ├── CloudAppDataConverter.kt │ │ │ │ ├── CompatibleSensorAdapterDataConverter.kt │ │ │ │ ├── ComponentsDataConverter.kt │ │ │ │ ├── DemoDecoratorDataConverter.kt │ │ │ │ ├── ExtraExamplesFlowConverter.kt │ │ │ │ ├── FotaDetailsConverter.kt │ │ │ │ ├── OptionByteDataConverter.kt │ │ │ │ ├── PowerModeDataConverter.kt │ │ │ │ ├── SensorConfigurationConverter.kt │ │ │ │ └── di │ │ │ │ └── DbModule.kt │ │ ├── di │ │ │ ├── BoardCatalogModule.kt │ │ │ └── Qualifier.kt │ │ └── models │ │ │ ├── BleCharStringValue.kt │ │ │ ├── BleCharacteristic.kt │ │ │ ├── BleCharacteristicFormat.kt │ │ │ ├── BleCharacteristicProperty.kt │ │ │ ├── BoardCatalog.kt │ │ │ ├── BoardCatalogStatus.kt │ │ │ ├── BoardDescription.kt │ │ │ ├── BoardFirmware.kt │ │ │ ├── BoardFotaType.kt │ │ │ ├── BoardStatus.kt │ │ │ ├── BootLoaderType.kt │ │ │ ├── CloudApp.kt │ │ │ ├── CutOff.kt │ │ │ ├── DemoDecorator.kt │ │ │ ├── DtmiContent.kt │ │ │ ├── DtmiModel.kt │ │ │ ├── ExtraExampleFlow.kt │ │ │ ├── Field.kt │ │ │ ├── FilterConfiguration.kt │ │ │ ├── FirmwareMaturity.kt │ │ │ ├── FotaDetails.kt │ │ │ ├── OptionByte.kt │ │ │ ├── OptionByteEnumType.kt │ │ │ ├── PowerMode.kt │ │ │ ├── Sensor.kt │ │ │ ├── SensorConfiguration.kt │ │ │ └── SensorType.kt │ │ ├── bt │ │ ├── BleBondingBroadcastReceiver.kt │ │ ├── BleOperationQueue.kt │ │ ├── advertise │ │ │ ├── AdvertiseExtension.kt │ │ │ ├── AdvertiseFilter.kt │ │ │ ├── AdvertiseParser.kt │ │ │ ├── BleAdvertiseInfo.kt │ │ │ ├── BlueNRGAdvertiseFilter.kt │ │ │ ├── BlueNRGAdvertiseInfo.kt │ │ │ ├── BlueSTSDKAdvertiseFilter.kt │ │ │ └── BlueStSdkAdvertiseInfo.kt │ │ ├── gatt │ │ │ ├── CallbackGattBridge.kt │ │ │ ├── FlowGattBridge.kt │ │ │ └── GattBridge.kt │ │ ├── hal │ │ │ ├── BleHal.kt │ │ │ ├── CallbackBleHAL.kt │ │ │ └── FlowBleHal.kt │ │ └── server │ │ │ ├── NodeEvents.kt │ │ │ └── NodeServer.kt │ │ ├── common │ │ └── Resource.kt │ │ ├── di │ │ ├── BlueSdkModule.kt │ │ └── Qualifiers.kt │ │ ├── features │ │ ├── CalibrationStatus.kt │ │ ├── Feature.kt │ │ ├── FeatureCommand.kt │ │ ├── FeatureField.kt │ │ ├── FeatureResponse.kt │ │ ├── FeatureUpdate.kt │ │ ├── GetCalibration.kt │ │ ├── RawAudio.kt │ │ ├── RawCommandResponse.kt │ │ ├── StartCalibration.kt │ │ ├── StopCalibration.kt │ │ ├── acceleration │ │ │ ├── Acceleration.kt │ │ │ └── AccelerationInfo.kt │ │ ├── acceleration_event │ │ │ ├── AccelerationEvent.kt │ │ │ ├── AccelerationEventInfo.kt │ │ │ ├── request │ │ │ │ └── EnableDetectionAccelerationEvent.kt │ │ │ └── response │ │ │ │ └── EnableAccelerationEventResponse.kt │ │ ├── activity │ │ │ ├── Activity.kt │ │ │ └── ActivityInfo.kt │ │ ├── audio │ │ │ └── adpcm │ │ │ │ ├── AudioADPCMFeature.kt │ │ │ │ ├── AudioADPCMSync.kt │ │ │ │ └── AudioADPCMSyncFeature.kt │ │ ├── battery │ │ │ ├── Battery.kt │ │ │ ├── BatteryInfo.kt │ │ │ ├── request │ │ │ │ ├── GetBatteryCapacity.kt │ │ │ │ └── GetBatteryMaxAbsorbedCurrent.kt │ │ │ └── response │ │ │ │ ├── BatteryAbsorbedCurrentResponse.kt │ │ │ │ └── BatteryCapacityResponse.kt │ │ ├── beam_forming │ │ │ ├── BeamForming.kt │ │ │ ├── BeamFormingInfo.kt │ │ │ └── request │ │ │ │ ├── ChangeBeamFormingDirection.kt │ │ │ │ ├── EnableDisableBeamForming.kt │ │ │ │ └── UseStrongBeamFormingAlgorithm.kt │ │ ├── carry_position │ │ │ ├── CarryPosition.kt │ │ │ └── CarryPositionInfo.kt │ │ ├── co_sensor │ │ │ ├── COSensor.kt │ │ │ └── COSensorInfo.kt │ │ ├── compass │ │ │ ├── Compass.kt │ │ │ └── CompassInfo.kt │ │ ├── direction_of_arrival │ │ │ ├── DirectionOfArrival.kt │ │ │ ├── DirectionOfArrivalInfo.kt │ │ │ └── request │ │ │ │ ├── SetSensitivityHigh.kt │ │ │ │ └── SetSensitivityLow.kt │ │ ├── event_counter │ │ │ ├── EventCounter.kt │ │ │ └── EventCounterInfo.kt │ │ ├── exported │ │ │ ├── ExportedAudioOpusConfFeature.kt │ │ │ ├── ExportedAudioOpusMusicFeature.kt │ │ │ ├── ExportedAudioOpusVoiceFeature.kt │ │ │ └── ExportedFeature.kt │ │ ├── extended │ │ │ ├── ai_logging │ │ │ │ ├── AiLogging.kt │ │ │ │ ├── AiLoggingInfo.kt │ │ │ │ └── request │ │ │ │ │ ├── StartLogging.kt │ │ │ │ │ ├── StopLogging.kt │ │ │ │ │ └── UpdateAnnotation.kt │ │ │ ├── audio │ │ │ │ └── opus │ │ │ │ │ ├── AudioOpusConf.kt │ │ │ │ │ ├── AudioOpusConfFeature.kt │ │ │ │ │ ├── AudioOpusConst.kt │ │ │ │ │ └── AudioOpusFeature.kt │ │ │ ├── audio_classification │ │ │ │ ├── AudioClassification.kt │ │ │ │ └── AudioClassificationInfo.kt │ │ │ ├── binary_content │ │ │ │ ├── BinaryContent.kt │ │ │ │ ├── BinaryContentCommand.kt │ │ │ │ └── RawData.kt │ │ │ ├── color_ambient_light │ │ │ │ ├── ColorAmbientLight.kt │ │ │ │ └── ColorAmbientLightInfo.kt │ │ │ ├── euler_angle │ │ │ │ ├── EulerAngle.kt │ │ │ │ └── EulerAngleInfo.kt │ │ │ ├── ext_configuration │ │ │ │ ├── BanksStatus.kt │ │ │ │ ├── CustomCommand.kt │ │ │ │ ├── ExtConfigCommandAnswers.kt │ │ │ │ ├── ExtConfigParser.kt │ │ │ │ ├── ExtConfiguration.kt │ │ │ │ ├── ExtendedFeatureResponse.kt │ │ │ │ ├── FeatureExtConfiguration.kt │ │ │ │ ├── request │ │ │ │ │ ├── ExtConfigCommands.kt │ │ │ │ │ └── ExtendedFeatureCommand.kt │ │ │ │ └── response │ │ │ │ │ └── ExtCommandResponse.kt │ │ │ ├── fitness_activity │ │ │ │ ├── FitnessActivity.kt │ │ │ │ ├── FitnessActivityInfo.kt │ │ │ │ └── request │ │ │ │ │ └── EnableActivityDetection.kt │ │ │ ├── gesture_navigation │ │ │ │ ├── GestureNavigation.kt │ │ │ │ └── GestureNavigationInfo.kt │ │ │ ├── gnss │ │ │ │ ├── GNSS.kt │ │ │ │ └── GNSSInfo.kt │ │ │ ├── hs_datalog_config │ │ │ │ ├── HSDataLogConfig.kt │ │ │ │ ├── LogConfig.kt │ │ │ │ ├── model │ │ │ │ │ ├── Device.kt │ │ │ │ │ ├── DeviceInfo.kt │ │ │ │ │ ├── DeviceStatus.kt │ │ │ │ │ ├── Response.kt │ │ │ │ │ ├── SamplesPerTs.kt │ │ │ │ │ ├── Sensor.kt │ │ │ │ │ ├── SensorCoordinate.kt │ │ │ │ │ ├── SensorDescriptor.kt │ │ │ │ │ ├── SensorStatus.kt │ │ │ │ │ ├── SensorStatusWId.kt │ │ │ │ │ ├── SubSensorDescriptor.kt │ │ │ │ │ ├── SubSensorStatus.kt │ │ │ │ │ ├── Tag.kt │ │ │ │ │ ├── TagConfig.kt │ │ │ │ │ └── TagHW.kt │ │ │ │ └── request │ │ │ │ │ ├── HSDControlCmd.kt │ │ │ │ │ └── HSDataLogCommand.kt │ │ │ ├── ispu_control │ │ │ │ ├── ISPUControlFeature.kt │ │ │ │ ├── ISPUControlSendJSONCommand.kt │ │ │ │ ├── ISPUControlSendUCFCommand.kt │ │ │ │ └── ISPURawData.kt │ │ │ ├── json_nfc │ │ │ │ ├── JsonNFC.kt │ │ │ │ ├── answer │ │ │ │ │ ├── JsonNFCResponse.kt │ │ │ │ │ └── JsonReadModesResult.kt │ │ │ │ └── request │ │ │ │ │ ├── JsonCommand.kt │ │ │ │ │ ├── JsonNFCFeatureWriteCommand.kt │ │ │ │ │ ├── JsonVCard.kt │ │ │ │ │ └── JsonWIFI.kt │ │ │ ├── medical_signal │ │ │ │ ├── MedicalInfo.kt │ │ │ │ ├── MedicalSignal16BitFeature.kt │ │ │ │ ├── MedicalSignal24BitFeature.kt │ │ │ │ └── MedicalSignalType.kt │ │ │ ├── motion_algorithm │ │ │ │ ├── MotionAlgorithm.kt │ │ │ │ ├── MotionAlgorithmInfo.kt │ │ │ │ └── request │ │ │ │ │ └── EnableMotionAlgorithm.kt │ │ │ ├── motor_time_param │ │ │ │ ├── MotorTimeParameter.kt │ │ │ │ └── MotorTimeParameterInfo.kt │ │ │ ├── navigation_control │ │ │ │ ├── NavigationControl.kt │ │ │ │ └── NavigationControlInfo.kt │ │ │ ├── neai_anomaly_detection │ │ │ │ ├── NeaiAnomalyDetection.kt │ │ │ │ ├── NeaiAnomalyDetectionInfo.kt │ │ │ │ └── request │ │ │ │ │ ├── WriteDetectionCommand.kt │ │ │ │ │ ├── WriteLearningCommand.kt │ │ │ │ │ ├── WriteResetKnowledgeCommand.kt │ │ │ │ │ └── WriteStopCommand.kt │ │ │ ├── neai_class_classification │ │ │ │ ├── NeaiClassClassification.kt │ │ │ │ ├── NeaiClassClassificationInfo.kt │ │ │ │ └── request │ │ │ │ │ ├── WriteStartClassificationCommand.kt │ │ │ │ │ └── WriteStopClassificationCommand.kt │ │ │ ├── neai_extrapolation │ │ │ │ ├── NeaiExtrapolation.kt │ │ │ │ ├── NeaiExtrapolationInfo.kt │ │ │ │ ├── model │ │ │ │ │ └── NeaiExtrapolationData.kt │ │ │ │ └── request │ │ │ │ │ ├── WriteStartExtrapolationCommand.kt │ │ │ │ │ └── WriteStopExtrapolationCommand.kt │ │ │ ├── piano │ │ │ │ ├── Piano.kt │ │ │ │ ├── PianoInfo.kt │ │ │ │ └── request │ │ │ │ │ └── CommandPianoSound.kt │ │ │ ├── pnpl │ │ │ │ ├── PnPL.kt │ │ │ │ ├── PnPLConfig.kt │ │ │ │ ├── model │ │ │ │ │ ├── PnPLResponse.kt │ │ │ │ │ └── PnPLSetCommandResponse.kt │ │ │ │ └── request │ │ │ │ │ └── PnPLCommand.kt │ │ │ ├── predictive │ │ │ │ ├── PredictiveAccelerationStatus.kt │ │ │ │ ├── PredictiveAccelerationStatusInfo.kt │ │ │ │ ├── PredictiveFrequencyStatus.kt │ │ │ │ ├── PredictiveFrequencyStatusInfo.kt │ │ │ │ ├── PredictiveSpeedStatus.kt │ │ │ │ ├── PredictiveSpeedStatusInfo.kt │ │ │ │ └── Status.kt │ │ │ ├── qvar │ │ │ │ ├── QVAR.kt │ │ │ │ └── QVARInfo.kt │ │ │ ├── raw_controlled │ │ │ │ ├── RawControlled.kt │ │ │ │ ├── RawControlledInfo.kt │ │ │ │ └── model │ │ │ │ │ ├── RawCustom.kt │ │ │ │ │ ├── RawCustomEntry.kt │ │ │ │ │ ├── RawPnPLEntry.kt │ │ │ │ │ ├── RawPnPLEntryEnumLabel.kt │ │ │ │ │ ├── RawPnPLEntryFormat.kt │ │ │ │ │ └── RawStreamIdEntry.kt │ │ │ ├── registers_feature │ │ │ │ ├── RegistersFeature.kt │ │ │ │ └── RegistersFeatureInfo.kt │ │ │ ├── scene_description │ │ │ │ ├── SceneDescription.kt │ │ │ │ └── SceneDescriptionInfo.kt │ │ │ └── tof_multi_object │ │ │ │ ├── ToFMultiObject.kt │ │ │ │ ├── ToFMultiObjectInfo.kt │ │ │ │ └── request │ │ │ │ └── CommandPresenceRecognition.kt │ │ ├── external │ │ │ ├── std │ │ │ │ ├── BodySensorLocation.kt │ │ │ │ ├── BodySensorLocationInfo.kt │ │ │ │ ├── HeartRate.kt │ │ │ │ └── HeartRateInfo.kt │ │ │ └── stm32 │ │ │ │ ├── P2PConfiguration.kt │ │ │ │ ├── led_and_reboot │ │ │ │ ├── ControlLedAndReboot.kt │ │ │ │ ├── ControlLedCommand.kt │ │ │ │ └── RebootCommand.kt │ │ │ │ ├── network_status │ │ │ │ ├── NetworkStatus.kt │ │ │ │ └── NetworkStatusInfo.kt │ │ │ │ └── switch_status │ │ │ │ ├── SwitchInfo.kt │ │ │ │ └── SwitchStatus.kt │ │ ├── fft │ │ │ ├── FFTAmplitudeFeature.kt │ │ │ └── FFTData.kt │ │ ├── free_fall │ │ │ ├── FreeFall.kt │ │ │ └── FreeFallInfo.kt │ │ ├── general_purpose │ │ │ ├── GeneralPurpose.kt │ │ │ └── GeneralPurposeInfo.kt │ │ ├── gyroscope │ │ │ ├── Gyroscope.kt │ │ │ └── GyroscopeInfo.kt │ │ ├── humidity │ │ │ ├── Humidity.kt │ │ │ └── HumidityInfo.kt │ │ ├── logging │ │ │ └── sd │ │ │ │ ├── SDLoggingFeature.kt │ │ │ │ ├── SDLoggingInfo.kt │ │ │ │ └── commands │ │ │ │ ├── StartLogging.kt │ │ │ │ └── StopLogging.kt │ │ ├── luminosity │ │ │ ├── Luminosity.kt │ │ │ └── LuminosityInfo.kt │ │ ├── magnetometer │ │ │ ├── Magnetometer.kt │ │ │ └── MagnetometerInfo.kt │ │ ├── mems_gesture │ │ │ ├── MemsGesture.kt │ │ │ └── MemsGestureInfo.kt │ │ ├── mems_norm │ │ │ ├── MemsNorm.kt │ │ │ └── MemsNormInfo.kt │ │ ├── mic_level │ │ │ ├── MicLevel.kt │ │ │ └── MicLevelInfo.kt │ │ ├── motion_intensity │ │ │ ├── MotionIntensity.kt │ │ │ └── MotionIntensityInfo.kt │ │ ├── ota │ │ │ ├── ImageFeature.kt │ │ │ ├── ImageInfo.kt │ │ │ ├── nrg │ │ │ │ ├── ExpectedImageTUSeqNumberFeature.kt │ │ │ │ ├── NewImageFeature.kt │ │ │ │ ├── NewImageTUContentFeature.kt │ │ │ │ ├── request │ │ │ │ │ ├── ImageTUUpload.kt │ │ │ │ │ └── WriteNewImageParameter.kt │ │ │ │ └── response │ │ │ │ │ ├── ExpectedImageSeqNumber.kt │ │ │ │ │ ├── ImageTUContentInfo.kt │ │ │ │ │ └── NewImageInfo.kt │ │ │ └── stm32wb │ │ │ │ ├── OTAControl.kt │ │ │ │ ├── OTAFileUpload.kt │ │ │ │ ├── OTAReboot.kt │ │ │ │ ├── OTAWillReboot.kt │ │ │ │ ├── requests │ │ │ │ ├── CancelUpload.kt │ │ │ │ ├── FinishUpload.kt │ │ │ │ ├── RebootToOTAMode.kt │ │ │ │ ├── StartUpload.kt │ │ │ │ ├── StopUpload.kt │ │ │ │ └── UploadOTAData.kt │ │ │ │ └── response │ │ │ │ └── WillRebootInfo.kt │ │ ├── pedometer │ │ │ ├── Pedometer.kt │ │ │ └── PedometerInfo.kt │ │ ├── pressure │ │ │ ├── Pressure.kt │ │ │ └── PressureInfo.kt │ │ ├── proximity │ │ │ ├── Proximity.kt │ │ │ └── ProximityInfo.kt │ │ ├── proximity_gesture │ │ │ ├── ProximityGesture.kt │ │ │ └── ProximityGestureInfo.kt │ │ ├── remote │ │ │ ├── humidity │ │ │ │ ├── RemoteHumidity.kt │ │ │ │ └── RemoteHumidityInfo.kt │ │ │ ├── pressure │ │ │ │ ├── RemotePressure.kt │ │ │ │ └── RemotePressureInfo.kt │ │ │ ├── switch │ │ │ │ ├── ChangeRemoteSwitchStatusCommand.kt │ │ │ │ ├── RemoteFeatureSwitchInfo.kt │ │ │ │ └── RemoteSwitch.kt │ │ │ └── temperature │ │ │ │ ├── RemoteTemperature.kt │ │ │ │ └── RemoteTemperatureInfo.kt │ │ ├── sensor_fusion │ │ │ ├── MemsSensorFusion.kt │ │ │ ├── MemsSensorFusionCompat.kt │ │ │ ├── MemsSensorFusionInfo.kt │ │ │ └── Quaternion.kt │ │ ├── stepper_motor │ │ │ ├── StepperMotor.kt │ │ │ ├── StepperMotorCommand.kt │ │ │ └── StepperMotorInfo.kt │ │ ├── switchfeature │ │ │ ├── SwitchFeature.kt │ │ │ ├── SwitchFeatureInfo.kt │ │ │ ├── request │ │ │ │ ├── SwitchOff.kt │ │ │ │ └── SwitchOn.kt │ │ │ └── response │ │ │ │ └── SwitchOnOffResponse.kt │ │ └── temperature │ │ │ ├── Temperature.kt │ │ │ └── TemperatureInfo.kt │ │ ├── logger │ │ ├── CsvFileLogger.kt │ │ ├── LogCatLogger.kt │ │ ├── Loggable.kt │ │ ├── Logger.kt │ │ └── db_logger │ │ │ ├── DbLogger.kt │ │ │ └── db │ │ │ ├── LoggerDB.kt │ │ │ ├── LoggerDao.kt │ │ │ ├── converters │ │ │ └── DateConverter.kt │ │ │ ├── di │ │ │ └── DbModule.kt │ │ │ └── model │ │ │ ├── FeatureLog.kt │ │ │ ├── FeatureLogWithUpdates.kt │ │ │ └── FeatureUpdateLog.kt │ │ ├── models │ │ ├── BleNotification.kt │ │ ├── Boards.kt │ │ ├── ChunkProgress.kt │ │ ├── Field.kt │ │ ├── JsonMLCFormat.kt │ │ ├── Node.kt │ │ ├── NodeState.kt │ │ ├── OTAMemoryAddress.kt │ │ ├── OTAMemoryLayout.kt │ │ ├── Sample.kt │ │ ├── Sensor.kt │ │ ├── SensorDescriptor.kt │ │ ├── SensorStatus.kt │ │ ├── SubSensorDescriptor.kt │ │ ├── SubSensorStatus.kt │ │ └── wesu │ │ │ ├── Register.kt │ │ │ └── RegisterCommand.kt │ │ ├── services │ │ ├── NodeServerConsumer.kt │ │ ├── NodeServerProducer.kt │ │ ├── NodeServerStore.kt │ │ ├── NodeServiceConsumer.kt │ │ ├── NodeServiceProducer.kt │ │ ├── NodeServiceStore.kt │ │ ├── audio │ │ │ ├── AudioExtensions.kt │ │ │ ├── AudioService.kt │ │ │ ├── AudioServiceImpl.kt │ │ │ └── codec │ │ │ │ ├── AudioCodecManager.kt │ │ │ │ ├── CodecType.kt │ │ │ │ ├── DecodeParams.kt │ │ │ │ ├── EncodeParams.kt │ │ │ │ ├── adpcm │ │ │ │ ├── ADPCMManager.kt │ │ │ │ └── ADPCMParams.kt │ │ │ │ ├── factory │ │ │ │ ├── AudioCodecManagerProvider.kt │ │ │ │ └── AudioCodecManagerProviderImpl.kt │ │ │ │ └── opus │ │ │ │ ├── OpusManager.kt │ │ │ │ ├── OpusParams.kt │ │ │ │ ├── OpusParamsFullBand.kt │ │ │ │ └── OpusParamsFullDuplex.kt │ │ ├── calibration │ │ │ ├── CalibrationService.kt │ │ │ └── CalibrationServiceImpl.kt │ │ ├── config │ │ │ ├── ConfigControlService.kt │ │ │ └── ConfigControlServiceImpl.kt │ │ ├── debug │ │ │ ├── DebugMessage.kt │ │ │ ├── DebugService.kt │ │ │ └── DebugServiceImpl.kt │ │ ├── fw_version │ │ │ ├── FwVersion.kt │ │ │ └── FwVersionBoard.kt │ │ └── ota │ │ │ ├── FirmwareType.kt │ │ │ ├── FwConsole.kt │ │ │ ├── FwFileDescriptor.kt │ │ │ ├── FwUpdateListener.kt │ │ │ ├── FwUpgradeParams.kt │ │ │ ├── ImgFileInputStream.kt │ │ │ ├── OtaService.kt │ │ │ ├── OtaServiceImpl.kt │ │ │ ├── UpgradeStrategy.kt │ │ │ ├── characteristic │ │ │ ├── CharacteristicFwUpgrade.kt │ │ │ └── CharacteristicWithACKFwUpgrade.kt │ │ │ └── debug │ │ │ ├── DebugFwUpgrade.kt │ │ │ ├── DebugFwUpgradeWithResume.kt │ │ │ ├── FwUpgradeConfiguration.kt │ │ │ └── STM32Crc32.kt │ │ └── utils │ │ ├── BlueVoiceOpusTransportProtocol.kt │ │ ├── BluetoothExt.kt │ │ ├── ContextExt.kt │ │ ├── JsonUtils.kt │ │ ├── NumberConversion.java │ │ ├── STL2TransportProtocol.kt │ │ ├── UnwrapTimestamp.kt │ │ └── WbOTAUtils.kt │ └── res │ └── values │ └── strings.xml ├── st_opus ├── .gitignore ├── License.md ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro ├── publish.gradle └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── st │ │ └── BlueSTSDK │ │ └── Features │ │ └── Audio │ │ └── Opus │ │ └── OpusManager.kt │ └── jniLibs │ ├── arm64-v8a │ └── libopusUser.so │ ├── armeabi-v7a │ └── libopusUser.so │ ├── x86 │ └── libopusUser.so │ └── x86_64 │ └── libopusUser.so └── wrapper ├── gradle-wrapper.jar └── gradle-wrapper.properties /README.md: -------------------------------------------------------------------------------- 1 | # Android_Module_BlueSTSDK 2 | 3 | Module for creating the BlueST-SDK library 4 | 5 | ## For using it 6 | 7 | Code compiled using gradle 8.11.1 8 | 9 | set on Gradle properties the Github Login name and SSO authentication 10 | Example: 11 | 12 | GPR_USER=PezzoniL 13 | GPR_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXX 14 | 15 | ## Sample app 16 | 17 | This package provides a sample application with some basic functionalities: 18 | - boards discovery and connection 19 | - subscribe to each exported bluetooth SDK features and display the sensors' values in textual way 20 | 21 | 22 | ## st-blue-sdk and st-opus libraries 23 | 24 | This package provides 2 libraries that could be included on the other STMicroelectronics' applications 25 | 26 | For compiling these 2 libraries is necessary to enable all the gradle tasks 27 | So: 28 | 1) Android Studio -> Settings -> Experimental 29 | and uncheck 30 | "Only include test tasks in Gradle task list generated during Gradle Sync" 31 | 32 | 2) Then open the Gradle tab on left and run: 33 | st_blue_sdk/build/assemble 34 | st_blue_sdk/publishing/publishToMavenLocal 35 | 36 | st_opus/build/assemble 37 | st_opus/publishing/publishToMavenLocal -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle.kts. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/main/java/com/st/demo/SampleApp.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022(-0001) STMicroelectronics. 3 | * All rights reserved. 4 | * This software is licensed under terms that can be found in the LICENSE file in 5 | * the root directory of this software component. 6 | * If no LICENSE file comes with this software, it is provided AS-IS. 7 | */ 8 | package com.st.demo 9 | 10 | import android.app.Application 11 | import dagger.hilt.android.HiltAndroidApp 12 | 13 | @HiltAndroidApp 14 | class SampleApp : Application() -------------------------------------------------------------------------------- /app/src/main/java/com/st/demo/ui/theme/Color.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022(-0001) STMicroelectronics. 3 | * All rights reserved. 4 | * This software is licensed under terms that can be found in the LICENSE file in 5 | * the root directory of this software component. 6 | * If no LICENSE file comes with this software, it is provided AS-IS. 7 | */ 8 | package com.st.demo.ui.theme 9 | 10 | import androidx.compose.ui.graphics.Color 11 | 12 | val Scooter = Color(0xFF39a9dc) 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/st/demo/ui/theme/Type.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2022(-0001) STMicroelectronics. 3 | * All rights reserved. 4 | * This software is licensed under terms that can be found in the LICENSE file in 5 | * the root directory of this software component. 6 | * If no LICENSE file comes with this software, it is provided AS-IS. 7 | */ 8 | package com.st.demo.ui.theme 9 | 10 | import androidx.compose.material3.Typography 11 | import androidx.compose.ui.text.TextStyle 12 | import androidx.compose.ui.text.font.FontFamily 13 | import androidx.compose.ui.text.font.FontWeight 14 | import androidx.compose.ui.unit.sp 15 | 16 | val Typography = Typography( 17 | bodyLarge = TextStyle( 18 | fontFamily = FontFamily.Default, 19 | fontWeight = FontWeight.Normal, 20 | fontSize = 16.sp, 21 | lineHeight = 24.sp, 22 | letterSpacing = 0.5.sp 23 | ) 24 | ) 25 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/BlueSTSDK_Android/c3826b3544614c239299454e1ac8683358a80e09/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/BlueSTSDK_Android/c3826b3544614c239299454e1ac8683358a80e09/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/BlueSTSDK_Android/c3826b3544614c239299454e1ac8683358a80e09/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/BlueSTSDK_Android/c3826b3544614c239299454e1ac8683358a80e09/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/BlueSTSDK_Android/c3826b3544614c239299454e1ac8683358a80e09/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/BlueSTSDK_Android/c3826b3544614c239299454e1ac8683358a80e09/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/BlueSTSDK_Android/c3826b3544614c239299454e1ac8683358a80e09/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/BlueSTSDK_Android/c3826b3544614c239299454e1ac8683358a80e09/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/BlueSTSDK_Android/c3826b3544614c239299454e1ac8683358a80e09/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/BlueSTSDK_Android/c3826b3544614c239299454e1ac8683358a80e09/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | STBleSDK 10 | 11 | Ble Device List: 12 | 13 | Audio Screen 14 | Test\nAudio 15 | 16 | Updates: 17 | Name: %1$s 18 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 16 | 17 |