@mentra/bluetooth-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/README.md +278 -0
  2. package/android/build.gradle +167 -0
  3. package/android/lc3Lib/CMakeLists.txt +6 -0
  4. package/android/lc3Lib/build.gradle +109 -0
  5. package/android/lc3Lib/proguard-rules.pro +33 -0
  6. package/android/lc3Lib/src/main/AndroidManifest.xml +2 -0
  7. package/android/lc3Lib/src/main/cpp/CMakeLists.txt +8 -0
  8. package/android/lc3Lib/src/main/cpp/google_opus_stuff/CMakeLists.txt +30 -0
  9. package/android/lc3Lib/src/main/cpp/google_opus_stuff/jni/CMakeLists.txt +7 -0
  10. package/android/lc3Lib/src/main/cpp/google_opus_stuff/jni/ogg_opus_encoder.cc +96 -0
  11. package/android/lc3Lib/src/main/cpp/google_opus_stuff/jni/ogg_opus_encoder.h +53 -0
  12. package/android/lc3Lib/src/main/cpp/google_opus_stuff/libogg/Makefile.am +6 -0
  13. package/android/lc3Lib/src/main/cpp/google_opus_stuff/libogg/config_types.h +26 -0
  14. package/android/lc3Lib/src/main/cpp/google_opus_stuff/libogg/config_types.h.in +26 -0
  15. package/android/lc3Lib/src/main/cpp/google_opus_stuff/libogg/ogg.h +209 -0
  16. package/android/lc3Lib/src/main/cpp/google_opus_stuff/libogg/os_types.h +158 -0
  17. package/android/lc3Lib/src/main/cpp/google_opus_stuff/libopus/opus.h +981 -0
  18. package/android/lc3Lib/src/main/cpp/google_opus_stuff/libopus/opus_custom.h +342 -0
  19. package/android/lc3Lib/src/main/cpp/google_opus_stuff/libopus/opus_defines.h +799 -0
  20. package/android/lc3Lib/src/main/cpp/google_opus_stuff/libopus/opus_multistream.h +660 -0
  21. package/android/lc3Lib/src/main/cpp/google_opus_stuff/libopus/opus_projection.h +568 -0
  22. package/android/lc3Lib/src/main/cpp/google_opus_stuff/libopus/opus_types.h +166 -0
  23. package/android/lc3Lib/src/main/cpp/google_opus_stuff/ogg_opus_encoder.cc +268 -0
  24. package/android/lc3Lib/src/main/cpp/google_opus_stuff/ogg_opus_encoder.h +115 -0
  25. package/android/lc3Lib/src/main/cpp/google_opus_stuff/opus_tools/opus_header.h +59 -0
  26. package/android/lc3Lib/src/main/cpp/liblc3/CMakeLists.txt +38 -0
  27. package/android/lc3Lib/src/main/cpp/liblc3/include/lc3.h +309 -0
  28. package/android/lc3Lib/src/main/cpp/liblc3/include/lc3_private.h +162 -0
  29. package/android/lc3Lib/src/main/cpp/liblc3/include/rnnoise.h +114 -0
  30. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/CMakeLists.txt +19 -0
  31. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/attdet.c +92 -0
  32. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/attdet.h +44 -0
  33. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/bits.c +375 -0
  34. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/bits.h +315 -0
  35. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/bwdet.c +129 -0
  36. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/bwdet.h +69 -0
  37. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/common.h +148 -0
  38. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/energy.c +70 -0
  39. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/energy.h +43 -0
  40. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/fastmath.h +158 -0
  41. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/lc3.c +702 -0
  42. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/ltpf.c +893 -0
  43. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/ltpf.h +111 -0
  44. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/ltpf_arm.h +506 -0
  45. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/ltpf_neon.h +281 -0
  46. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/makefile.mk +35 -0
  47. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/mdct.c +452 -0
  48. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/mdct.h +57 -0
  49. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/mdct_neon.h +296 -0
  50. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/meson.build +46 -0
  51. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/plc.c +61 -0
  52. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/plc.h +57 -0
  53. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/sns.c +880 -0
  54. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/sns.h +103 -0
  55. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/spec.c +904 -0
  56. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/spec.h +119 -0
  57. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/tables.c +3457 -0
  58. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/tables.h +94 -0
  59. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/tns.c +457 -0
  60. package/android/lc3Lib/src/main/cpp/liblc3/liblc3/tns.h +99 -0
  61. package/android/lc3Lib/src/main/cpp/liblc3/liblc3.cpp +159 -0
  62. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/_kiss_fft_guts.h +182 -0
  63. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/arch.h +261 -0
  64. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/celt_lpc.c +279 -0
  65. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/celt_lpc.h +59 -0
  66. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/common.h +48 -0
  67. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/compile.sh +3 -0
  68. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/denoise.c +646 -0
  69. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/kiss_fft.c +601 -0
  70. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/kiss_fft.h +203 -0
  71. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/opus_types.h +159 -0
  72. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/pitch.c +526 -0
  73. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/pitch.h +149 -0
  74. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/rnn.c +178 -0
  75. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/rnn.h +69 -0
  76. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/rnn_data.c +11051 -0
  77. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/rnn_data.h +34 -0
  78. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/rnn_reader.c +168 -0
  79. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/rnn_train.py +66 -0
  80. package/android/lc3Lib/src/main/cpp/liblc3/rnnoise/tansig_table.h +45 -0
  81. package/android/lc3Lib/src/main/java/com/mentra/lc3Lib/Lc3Cpp.java +38 -0
  82. package/android/lc3Lib/third_party/CMakeLists.txt +23 -0
  83. package/android/lc3Lib/third_party/CMakeLists_libogg.txt +18 -0
  84. package/android/lc3Lib/third_party/CMakeLists_libopus.txt +18 -0
  85. package/android/lc3Lib/third_party/CMakeLists_opus-tools.txt +23 -0
  86. package/android/lc3Lib/third_party/opus_tools/src/AUTHORS +5 -0
  87. package/android/lc3Lib/third_party/opus_tools/src/CMakeLists.txt +4 -0
  88. package/android/lc3Lib/third_party/opus_tools/src/COPYING +371 -0
  89. package/android/lc3Lib/third_party/opus_tools/src/ChangeLog +3 -0
  90. package/android/lc3Lib/third_party/opus_tools/src/Makefile.am +42 -0
  91. package/android/lc3Lib/third_party/opus_tools/src/Makefile.unix +23 -0
  92. package/android/lc3Lib/third_party/opus_tools/src/NEWS +0 -0
  93. package/android/lc3Lib/third_party/opus_tools/src/README +0 -0
  94. package/android/lc3Lib/third_party/opus_tools/src/autogen.sh +115 -0
  95. package/android/lc3Lib/third_party/opus_tools/src/configure.ac +293 -0
  96. package/android/lc3Lib/third_party/opus_tools/src/src/arch.h +239 -0
  97. package/android/lc3Lib/third_party/opus_tools/src/src/audio-in.c +1046 -0
  98. package/android/lc3Lib/third_party/opus_tools/src/src/diag_range.c +245 -0
  99. package/android/lc3Lib/third_party/opus_tools/src/src/diag_range.h +28 -0
  100. package/android/lc3Lib/third_party/opus_tools/src/src/info_opus.c +320 -0
  101. package/android/lc3Lib/third_party/opus_tools/src/src/info_opus.h +51 -0
  102. package/android/lc3Lib/third_party/opus_tools/src/src/lpc.c +157 -0
  103. package/android/lc3Lib/third_party/opus_tools/src/src/lpc.h +27 -0
  104. package/android/lc3Lib/third_party/opus_tools/src/src/opus_header.c +286 -0
  105. package/android/lc3Lib/third_party/opus_tools/src/src/opus_header.h +59 -0
  106. package/android/lc3Lib/third_party/opus_tools/src/src/opusdec.c +884 -0
  107. package/android/lc3Lib/third_party/opus_tools/src/src/opusenc.c +1021 -0
  108. package/android/lc3Lib/third_party/opus_tools/src/src/opusenc.h +101 -0
  109. package/android/lc3Lib/third_party/opus_tools/src/src/opusinfo.c +639 -0
  110. package/android/lc3Lib/third_party/opus_tools/src/src/opusinfo.h +51 -0
  111. package/android/lc3Lib/third_party/opus_tools/src/src/os_support.h +167 -0
  112. package/android/lc3Lib/third_party/opus_tools/src/src/resample.c +1137 -0
  113. package/android/lc3Lib/third_party/opus_tools/src/src/speex_resampler.h +344 -0
  114. package/android/lc3Lib/third_party/opus_tools/src/src/stack_alloc.h +115 -0
  115. package/android/lc3Lib/third_party/opus_tools/src/src/wav_io.c +125 -0
  116. package/android/lc3Lib/third_party/opus_tools/src/src/wav_io.h +62 -0
  117. package/android/lc3Lib/third_party/opus_tools/src/src/wave_out.c +223 -0
  118. package/android/lc3Lib/third_party/opus_tools/src/src/wave_out.h +60 -0
  119. package/android/settings.gradle +1 -0
  120. package/android/src/main/AndroidManifest.xml +40 -0
  121. package/android/src/main/java/com/mentra/bluetoothsdk/BluetoothSdkModule.kt +528 -0
  122. package/android/src/main/java/com/mentra/bluetoothsdk/Bridge.kt +610 -0
  123. package/android/src/main/java/com/mentra/bluetoothsdk/DeviceManager.kt +1616 -0
  124. package/android/src/main/java/com/mentra/bluetoothsdk/DeviceStore.kt +314 -0
  125. package/android/src/main/java/com/mentra/bluetoothsdk/MentraBluetoothModels.kt +1710 -0
  126. package/android/src/main/java/com/mentra/bluetoothsdk/MentraBluetoothSdk.kt +554 -0
  127. package/android/src/main/java/com/mentra/bluetoothsdk/ObservableStore.kt +68 -0
  128. package/android/src/main/java/com/mentra/bluetoothsdk/controllers/ControllerManager.kt +158 -0
  129. package/android/src/main/java/com/mentra/bluetoothsdk/controllers/R1.kt +934 -0
  130. package/android/src/main/java/com/mentra/bluetoothsdk/services/Foreground.kt +175 -0
  131. package/android/src/main/java/com/mentra/bluetoothsdk/services/PhoneMic.kt +1109 -0
  132. package/android/src/main/java/com/mentra/bluetoothsdk/sgcs/G1.java +3974 -0
  133. package/android/src/main/java/com/mentra/bluetoothsdk/sgcs/G2.kt +3551 -0
  134. package/android/src/main/java/com/mentra/bluetoothsdk/sgcs/Mach1.java +1327 -0
  135. package/android/src/main/java/com/mentra/bluetoothsdk/sgcs/MentraLive.java +6959 -0
  136. package/android/src/main/java/com/mentra/bluetoothsdk/sgcs/MentraNex.kt +1655 -0
  137. package/android/src/main/java/com/mentra/bluetoothsdk/sgcs/MentraosBle.java +53675 -0
  138. package/android/src/main/java/com/mentra/bluetoothsdk/sgcs/SGCManager.kt +202 -0
  139. package/android/src/main/java/com/mentra/bluetoothsdk/sgcs/Simulated.kt +224 -0
  140. package/android/src/main/java/com/mentra/bluetoothsdk/stt/STTTools.kt +340 -0
  141. package/android/src/main/java/com/mentra/bluetoothsdk/stt/SherpaOnnxTranscriber.kt +465 -0
  142. package/android/src/main/java/com/mentra/bluetoothsdk/stt/VadGateSpeechPolicy.kt +221 -0
  143. package/android/src/main/java/com/mentra/bluetoothsdk/utils/AES.java +106 -0
  144. package/android/src/main/java/com/mentra/bluetoothsdk/utils/AudioSessionMonitor.kt +189 -0
  145. package/android/src/main/java/com/mentra/bluetoothsdk/utils/BitmapJavaUtils.java +169 -0
  146. package/android/src/main/java/com/mentra/bluetoothsdk/utils/BlePhotoUploadService.java +179 -0
  147. package/android/src/main/java/com/mentra/bluetoothsdk/utils/Constants.kt +44 -0
  148. package/android/src/main/java/com/mentra/bluetoothsdk/utils/G1Text.kt +436 -0
  149. package/android/src/main/java/com/mentra/bluetoothsdk/utils/IncidentLogBleRelayNaming.java +29 -0
  150. package/android/src/main/java/com/mentra/bluetoothsdk/utils/IncidentLogBleUploadService.java +76 -0
  151. package/android/src/main/java/com/mentra/bluetoothsdk/utils/K900ProtocolUtils.java +791 -0
  152. package/android/src/main/java/com/mentra/bluetoothsdk/utils/MessageChunker.java +186 -0
  153. package/android/src/main/java/com/mentra/bluetoothsdk/utils/NexSGCUtils.kt +589 -0
  154. package/android/src/main/java/com/mentra/bluetoothsdk/utils/PhoneAudioMonitor.kt +303 -0
  155. package/android/src/main/java/com/mentra/bluetoothsdk/utils/SmartGlassesConnectionState.java +9 -0
  156. package/android/src/main/java/com/mentra/bluetoothsdk/utils/audio/ByteUtilAudioPlayer.java +655 -0
  157. package/android/src/main/java/com/mentra/bluetoothsdk/utils/audio/Lc3Player.java +441 -0
  158. package/android/src/main/java/com/mentra/bluetoothsdk/utils/audio/PCMAudioPlayer.java +431 -0
  159. package/android/src/main/res/values/strings.xml +4 -0
  160. package/app.plugin.js +1 -0
  161. package/build/BluetoothSdk.types.d.ts +498 -0
  162. package/build/BluetoothSdk.types.d.ts.map +1 -0
  163. package/build/BluetoothSdk.types.js +23 -0
  164. package/build/BluetoothSdk.types.js.map +1 -0
  165. package/build/BluetoothSdkModule.d.ts +71 -0
  166. package/build/BluetoothSdkModule.d.ts.map +1 -0
  167. package/build/BluetoothSdkModule.js +106 -0
  168. package/build/BluetoothSdkModule.js.map +1 -0
  169. package/build/index.d.ts +3 -0
  170. package/build/index.d.ts.map +1 -0
  171. package/build/index.js +5 -0
  172. package/build/index.js.map +1 -0
  173. package/expo-module.config.json +9 -0
  174. package/ios/BluetoothSdkModule.swift +665 -0
  175. package/ios/MentraBluetoothSDK.podspec +77 -0
  176. package/ios/Packages/CoreObjC/CoreObjC.xcodeproj/project.pbxproj +213 -0
  177. package/ios/Packages/CoreObjC/PcmConverter.h +22 -0
  178. package/ios/Packages/CoreObjC/PcmConverter.m +266 -0
  179. package/ios/Packages/CoreObjC/attdet.c +92 -0
  180. package/ios/Packages/CoreObjC/attdet.h +44 -0
  181. package/ios/Packages/CoreObjC/bits.c +375 -0
  182. package/ios/Packages/CoreObjC/bits.h +315 -0
  183. package/ios/Packages/CoreObjC/bwdet.c +129 -0
  184. package/ios/Packages/CoreObjC/bwdet.h +69 -0
  185. package/ios/Packages/CoreObjC/common.h +151 -0
  186. package/ios/Packages/CoreObjC/energy.c +70 -0
  187. package/ios/Packages/CoreObjC/energy.h +43 -0
  188. package/ios/Packages/CoreObjC/fastmath.h +158 -0
  189. package/ios/Packages/CoreObjC/lc3.c +704 -0
  190. package/ios/Packages/CoreObjC/lc3.h +313 -0
  191. package/ios/Packages/CoreObjC/lc3_cpp.h +283 -0
  192. package/ios/Packages/CoreObjC/lc3_private.h +163 -0
  193. package/ios/Packages/CoreObjC/ltpf.c +905 -0
  194. package/ios/Packages/CoreObjC/ltpf.h +111 -0
  195. package/ios/Packages/CoreObjC/ltpf_arm.h +506 -0
  196. package/ios/Packages/CoreObjC/ltpf_neon.h +281 -0
  197. package/ios/Packages/CoreObjC/makefile.mk +35 -0
  198. package/ios/Packages/CoreObjC/mdct.c +469 -0
  199. package/ios/Packages/CoreObjC/mdct.h +57 -0
  200. package/ios/Packages/CoreObjC/mdct_neon.h +296 -0
  201. package/ios/Packages/CoreObjC/meson.build +61 -0
  202. package/ios/Packages/CoreObjC/plc.c +61 -0
  203. package/ios/Packages/CoreObjC/plc.h +57 -0
  204. package/ios/Packages/CoreObjC/rnnoise.h +114 -0
  205. package/ios/Packages/CoreObjC/sns.c +880 -0
  206. package/ios/Packages/CoreObjC/sns.h +103 -0
  207. package/ios/Packages/CoreObjC/spec.c +907 -0
  208. package/ios/Packages/CoreObjC/spec.h +119 -0
  209. package/ios/Packages/CoreObjC/tables.c +3457 -0
  210. package/ios/Packages/CoreObjC/tables.h +94 -0
  211. package/ios/Packages/CoreObjC/tns.c +457 -0
  212. package/ios/Packages/CoreObjC/tns.h +99 -0
  213. package/ios/Packages/SherpaOnnx/Model/joiner.onnx +0 -0
  214. package/ios/Packages/SherpaOnnx/Model/tokens.txt +502 -0
  215. package/ios/Packages/SherpaOnnx/SherpaOnnx.swift +1659 -0
  216. package/ios/Packages/SherpaOnnx/sherpa-onnx.xcframework/Headers/cargs.h +162 -0
  217. package/ios/Packages/SherpaOnnx/sherpa-onnx.xcframework/Headers/sherpa-onnx/c-api/c-api.h +1852 -0
  218. package/ios/Packages/SherpaOnnx/sherpa-onnx.xcframework/Headers/sherpa-onnx/c-api/cxx-api.h +674 -0
  219. package/ios/Packages/SherpaOnnx/sherpa-onnx.xcframework/Info.plist +44 -0
  220. package/ios/Packages/SherpaOnnx/sherpa-onnx.xcframework/ios-arm64/libsherpa-onnx.a +0 -0
  221. package/ios/Packages/SherpaOnnx/sherpa-onnx.xcframework/ios-arm64/sherpa-onnx.a +0 -0
  222. package/ios/Packages/SherpaOnnx/sherpa-onnx.xcframework/ios-arm64_x86_64-simulator/libsherpa-onnx.a +0 -0
  223. package/ios/Packages/SherpaOnnx/sherpa-onnx.xcframework/ios-arm64_x86_64-simulator/sherpa-onnx.a +0 -0
  224. package/ios/Packages/VAD/Common/VAD/VADQuality.swift +41 -0
  225. package/ios/Packages/VAD/Common/VAD/VADState.swift +26 -0
  226. package/ios/Packages/VAD/Common/VAD/VADStrategy.swift +29 -0
  227. package/ios/Packages/VAD/Common/VAD/VADType.swift +14 -0
  228. package/ios/Packages/VAD/Data/Configuration.swift +68 -0
  229. package/ios/Packages/VAD/Data/FrameSize.swift +39 -0
  230. package/ios/Packages/VAD/Data/Record.swift +13 -0
  231. package/ios/Packages/VAD/Data/Result.swift +22 -0
  232. package/ios/Packages/VAD/Data/SampleRate.swift +48 -0
  233. package/ios/Packages/VAD/Silero/Model/silero_vad.onnx +0 -0
  234. package/ios/Packages/VAD/Silero/SileroVAD.swift +284 -0
  235. package/ios/Packages/VAD/Silero/SileroVADStrategy.swift +64 -0
  236. package/ios/Packages/libbz2/module.modulemap +5 -0
  237. package/ios/Packages/libbz2/shim.h +1 -0
  238. package/ios/Source/Bridge.swift +353 -0
  239. package/ios/Source/Bridging-Header.h +16 -0
  240. package/ios/Source/DeviceManager.swift +1478 -0
  241. package/ios/Source/DeviceStore.swift +295 -0
  242. package/ios/Source/MentraBluetoothSDK.swift +2439 -0
  243. package/ios/Source/ObservableStore.swift +88 -0
  244. package/ios/Source/PrivacyInfo.xcprivacy +23 -0
  245. package/ios/Source/controllers/ControllerManager.swift +187 -0
  246. package/ios/Source/controllers/R1.swift +827 -0
  247. package/ios/Source/services/PhoneMic.swift +662 -0
  248. package/ios/Source/sgcs/Frame.swift +651 -0
  249. package/ios/Source/sgcs/G1.swift +2505 -0
  250. package/ios/Source/sgcs/G2.swift +3730 -0
  251. package/ios/Source/sgcs/Mach1.swift +543 -0
  252. package/ios/Source/sgcs/MentraLive.swift +4708 -0
  253. package/ios/Source/sgcs/MentraNex.swift +2479 -0
  254. package/ios/Source/sgcs/SGCManager.swift +243 -0
  255. package/ios/Source/sgcs/Simulated.swift +270 -0
  256. package/ios/Source/sgcs/mentraos_ble.pb.swift +3811 -0
  257. package/ios/Source/stt/STTTools.swift +154 -0
  258. package/ios/Source/stt/SherpaOnnxTranscriber.swift +401 -0
  259. package/ios/Source/utils/AudioSessionMonitor.swift +283 -0
  260. package/ios/Source/utils/Constants.swift +74 -0
  261. package/ios/Source/utils/Enums.swift +95 -0
  262. package/ios/Source/utils/G1Text.swift +2067 -0
  263. package/ios/Source/utils/JSCExperiment.swift +241 -0
  264. package/ios/Source/utils/MemoryMonitor.swift +44 -0
  265. package/ios/Source/utils/MessageChunker.swift +164 -0
  266. package/ios/Source/utils/Models.swift +135 -0
  267. package/ios/Source/utils/PhoneAudioMonitor.swift +226 -0
  268. package/ios/Source/utils/TarBz2Extractor.swift +206 -0
  269. package/package.json +78 -0
  270. package/plugin/build/index.d.ts +6 -0
  271. package/plugin/build/index.js +12 -0
  272. package/plugin/build/withAndroid.d.ts +4 -0
  273. package/plugin/build/withAndroid.js +80 -0
  274. package/plugin/build/withIos.d.ts +4 -0
  275. package/plugin/build/withIos.js +64 -0
  276. package/src/BluetoothSdk.types.ts +581 -0
  277. package/src/BluetoothSdkModule.ts +259 -0
  278. package/src/index.ts +4 -0
@@ -0,0 +1,295 @@
1
+ //
2
+ // DeviceStore.swift
3
+ // BluetoothSDK
4
+ //
5
+ // Centralized observable state store for glasses and Bluetooth SDK settings
6
+ //
7
+
8
+ import Foundation
9
+
10
+ @MainActor
11
+ class DeviceStore {
12
+ static let shared = DeviceStore()
13
+ let store = ObservableStore()
14
+
15
+ private var dashboardHeightDebounceTask: Task<Void, Never>?
16
+ private var dashboardDepthDebounceTask: Task<Void, Never>?
17
+
18
+ private init() {
19
+ // SETTINGS are snake_case
20
+ // CORE STATE is camelCase
21
+
22
+ // GLASSES STATE:
23
+ store.set("glasses", "fullyBooted", false)
24
+ store.set("glasses", "batteryLevel", -1)
25
+ store.set("glasses", "charging", false)
26
+ store.set("glasses", "connected", false)
27
+ store.set("glasses", "connectionState", ConnTypes.DISCONNECTED)
28
+ store.set("glasses", "deviceModel", "")
29
+ store.set("glasses", "firmwareVersion", "")
30
+ store.set("glasses", "micEnabled", false)
31
+ store.set("glasses", "btcConnected", false)
32
+ store.set("glasses", "caseRemoved", true)
33
+ store.set("glasses", "caseOpen", true)
34
+ store.set("glasses", "caseCharging", false)
35
+ store.set("glasses", "caseBatteryLevel", -1)
36
+ store.set("glasses", "headUp", false)
37
+ store.set("glasses", "serialNumber", "")
38
+ store.set("glasses", "style", "")
39
+ store.set("glasses", "color", "")
40
+ store.set("glasses", "wifiSsid", "")
41
+ store.set("glasses", "wifiConnected", false)
42
+ store.set("glasses", "wifiLocalIp", "")
43
+ store.set("glasses", "hotspotEnabled", false)
44
+ store.set("glasses", "hotspotSsid", "")
45
+ store.set("glasses", "hotspotPassword", "")
46
+ store.set("glasses", "hotspotGatewayIp", "")
47
+ store.set("glasses", "bluetoothName", "")
48
+ store.set("glasses", "macAddress", "")
49
+ store.set("glasses", "controllerConnected", false)
50
+ store.set("glasses", "controllerMacAddress", "")
51
+ store.set("glasses", "controllerBatteryLevel", -1)
52
+ store.set("glasses", "controllerSignalStrength", -1)
53
+ store.set("glasses", "signalStrength", -1)
54
+ store.set("glasses", "signalStrengthUpdatedAt", 0)
55
+ store.set("glasses", "ringSignalStrength", -1)
56
+
57
+ // CORE STATE:
58
+ store.set("bluetooth", "systemMicUnavailable", false)
59
+ store.set("bluetooth", "searching", false)
60
+ store.set("bluetooth", "searchingController", false)
61
+ store.set("bluetooth", "micEnabled", false)
62
+ store.set("bluetooth", "currentMic", "")
63
+ store.set("bluetooth", "searchResults", [])
64
+ store.set("bluetooth", "wifiScanResults", [])
65
+ store.set("bluetooth", "micRanking", MicMap.map["auto"]!)
66
+ store.set("bluetooth", "lastLog", [])
67
+ store.set("bluetooth", "otherBtConnected", false)
68
+
69
+ // CORE SETTINGS:
70
+ store.set("bluetooth", "default_wearable", "")
71
+ store.set("bluetooth", "pending_wearable", "")
72
+ store.set("bluetooth", "device_name", "")
73
+ store.set("bluetooth", "device_address", "")
74
+ store.set("bluetooth", "screen_disabled", false)
75
+ store.set("bluetooth", "preferred_mic", "auto")
76
+ store.set("bluetooth", "sensing_enabled", true)
77
+ store.set("bluetooth", "brightness", 50)
78
+ store.set("bluetooth", "auto_brightness", true)
79
+ store.set("bluetooth", "dashboard_height", 4)
80
+ store.set("bluetooth", "dashboard_depth", 2)
81
+ store.set("bluetooth", "head_up_angle", 30)
82
+ store.set("bluetooth", "contextual_dashboard", true)
83
+ store.set("bluetooth", "gallery_mode", true)
84
+ store.set("bluetooth", "screen_disabled", false)
85
+ store.set("bluetooth", "button_photo_size", "medium")
86
+ store.set("bluetooth", "button_camera_led", true)
87
+ store.set("bluetooth", "button_max_recording_time", 10)
88
+ store.set("bluetooth", "camera_fov", ["fov": 118, "roi_position": 0])
89
+ store.set("bluetooth", "button_video_width", 1280)
90
+ store.set("bluetooth", "button_video_height", 720)
91
+ store.set("bluetooth", "button_video_fps", 30)
92
+ store.set("bluetooth", "preferred_mic", "auto")
93
+ store.set("bluetooth", "lc3_frame_size", 60)
94
+ store.set("bluetooth", "auth_email", "")
95
+ store.set("bluetooth", "core_token", "")
96
+ store.set("bluetooth", "should_send_pcm", false)
97
+ store.set("bluetooth", "should_send_lc3", false)
98
+ store.set("bluetooth", "should_send_transcript", false)
99
+ store.set("bluetooth", "bypass_vad", false)
100
+ }
101
+
102
+ func get(_ category: String, _ key: String) -> Any? {
103
+ return store.get(category, key)
104
+ }
105
+
106
+ func set(_ category: String, _ key: String, _ value: Any) {
107
+ store.set(category, key, value)
108
+ }
109
+
110
+ private func scheduleDashboardHeightToGlasses() {
111
+ dashboardHeightDebounceTask?.cancel()
112
+ dashboardHeightDebounceTask = Task { @MainActor in
113
+ try? await Task.yield()
114
+ let h = store.get("bluetooth", "dashboard_height") as? Int ?? 4
115
+ DeviceManager.shared.sgc?.setDashboardHeightOnly(h)
116
+ }
117
+ }
118
+
119
+ private func scheduleDashboardDepthToGlasses() {
120
+ dashboardDepthDebounceTask?.cancel()
121
+ dashboardDepthDebounceTask = Task { @MainActor in
122
+ try? await Task.yield()
123
+ let d = store.get("bluetooth", "dashboard_depth") as? Int ?? 2
124
+ DeviceManager.shared.sgc?.setDashboardDepthOnly(d)
125
+ }
126
+ }
127
+
128
+ /// Apply changes with side effects
129
+ func apply(_ category: String, _ key: String, _ value: Any) {
130
+ let oldValue = store.get(category, key)
131
+ store.set(category, key, value)
132
+
133
+ // Trigger hardware updates based on setting changes
134
+ switch (category, key) {
135
+ case ("glasses", "fullyBooted"):
136
+ Bridge.log("STORE: Glasses fullyBooted changed to \(value)")
137
+ // skip if the value is the same as the old value:
138
+ if let ready = value as? Bool, ready == oldValue as? Bool {
139
+ return
140
+ }
141
+ if let ready = value as? Bool {
142
+ if ready {
143
+ DeviceManager.shared.handleDeviceReady()
144
+ } else {
145
+ DeviceManager.shared.handleDeviceDisconnected()
146
+ }
147
+ // we shouldn't call store.set in this function as this is only intended for side-effects, not driving state updates
148
+ }
149
+
150
+ case ("glasses", "controllerFullyBooted"):
151
+ if let ready = value as? Bool {
152
+ if ready {
153
+ DeviceManager.shared.handleControllerReady()
154
+ } else {
155
+ DeviceManager.shared.handleControllerDisconnected()
156
+ }
157
+ }
158
+
159
+ case ("glasses", "controllerMacAddress"):
160
+ if let mac = value as? String {
161
+ Task {
162
+ // give the glasses some extra time to finish booting:
163
+ try? await Task.sleep(nanoseconds: 1_000_000_000)
164
+ await DeviceManager.shared.sgc?.connectController()
165
+ }
166
+ }
167
+
168
+ case ("glasses", "headUp"):
169
+ if let headUp = value as? Bool {
170
+ DeviceManager.shared.sendCurrentState()
171
+ Bridge.sendHeadUp(headUp)
172
+ }
173
+
174
+ // BLUETOOTH:
175
+
176
+ case ("bluetooth", "brightness"):
177
+ let b = value as? Int ?? 50
178
+ let auto = store.get("bluetooth", "auto_brightness") as? Bool ?? true
179
+ Task {
180
+ DeviceManager.shared.sgc?.setBrightness(b, autoMode: auto)
181
+ DeviceManager.shared.sgc?.sendTextWall("Set brightness to \(b)%")
182
+ try? await Task.sleep(nanoseconds: 800_000_000) // 0.8 seconds
183
+ DeviceManager.shared.sgc?.clearDisplay()
184
+ }
185
+
186
+ case ("bluetooth", "auto_brightness"):
187
+ let b = store.get("bluetooth", "brightness") as? Int ?? 50
188
+ let auto = value as? Bool ?? true
189
+ let autoBrightnessChanged = (oldValue as? Bool) != auto
190
+ Task {
191
+ DeviceManager.shared.sgc?.setBrightness(b, autoMode: auto)
192
+ if autoBrightnessChanged {
193
+ DeviceManager.shared.sgc?.sendTextWall(
194
+ auto ? "Enabled auto brightness" : "Disabled auto brightness"
195
+ )
196
+ try? await Task.sleep(nanoseconds: 800_000_000) // 0.8 seconds
197
+ DeviceManager.shared.sgc?.clearDisplay()
198
+ }
199
+ }
200
+
201
+ case ("bluetooth", "dashboard_height"):
202
+ scheduleDashboardHeightToGlasses()
203
+
204
+ case ("bluetooth", "dashboard_depth"):
205
+ scheduleDashboardDepthToGlasses()
206
+
207
+ case ("bluetooth", "head_up_angle"):
208
+ if let angle = value as? Int {
209
+ DeviceManager.shared.sgc?.setHeadUpAngle(angle)
210
+ }
211
+
212
+ case ("bluetooth", "menu_apps"):
213
+ if let items = value as? [[String: Any]] {
214
+ DeviceManager.shared.sgc?.setDashboardMenu(items)
215
+ }
216
+
217
+ case ("bluetooth", "gallery_mode"):
218
+ DeviceManager.shared.sgc?.sendGalleryMode()
219
+
220
+ case ("bluetooth", "screen_disabled"):
221
+ if let disabled = value as? Bool {
222
+ if disabled {
223
+ DeviceManager.shared.sgc?.exit()
224
+ } else {
225
+ DeviceManager.shared.sgc?.clearDisplay()
226
+ }
227
+ }
228
+
229
+ case ("bluetooth", "button_photo_size"):
230
+ DeviceManager.shared.sgc?.sendButtonPhotoSettings()
231
+
232
+ case ("bluetooth", "button_camera_led"):
233
+ DeviceManager.shared.sgc?.sendButtonCameraLedSetting()
234
+
235
+ case ("bluetooth", "button_max_recording_time"):
236
+ DeviceManager.shared.sgc?.sendButtonMaxRecordingTime()
237
+
238
+ case ("bluetooth", "camera_fov"):
239
+ DeviceManager.shared.sgc?.sendCameraFovSetting()
240
+
241
+ case ("bluetooth", "button_video_width"), ("bluetooth", "button_video_height"),
242
+ ("bluetooth", "button_video_fps"):
243
+ DeviceManager.shared.sgc?.sendButtonVideoRecordingSettings()
244
+
245
+ case ("bluetooth", "preferred_mic"):
246
+ if let mic = value as? String {
247
+ apply("bluetooth", "micRanking", MicMap.map[mic] ?? MicMap.map["auto"]!)
248
+ DeviceManager.shared.setMicState()
249
+ }
250
+
251
+ case ("bluetooth", "offline_captions_running"):
252
+ if let running = value as? Bool {
253
+ DeviceManager.shared.setMicState()
254
+ }
255
+
256
+ case ("bluetooth", "local_stt_fallback_active"):
257
+ if let active = value as? Bool {
258
+ DeviceManager.shared.setMicState()
259
+ }
260
+
261
+ case ("bluetooth", "should_send_pcm"):
262
+ if let pcm = value as? Bool {
263
+ DeviceManager.shared.setMicState()
264
+ }
265
+
266
+ case ("bluetooth", "should_send_lc3"):
267
+ if let lc3 = value as? Bool {
268
+ DeviceManager.shared.setMicState()
269
+ }
270
+
271
+ case ("bluetooth", "should_send_transcript"):
272
+ if let transcript = value as? Bool {
273
+ DeviceManager.shared.setMicState()
274
+ }
275
+
276
+ case ("bluetooth", "default_wearable"):
277
+ if let wearable = value as? String {
278
+ Bridge.saveSetting("default_wearable", wearable)
279
+ if wearable == DeviceTypes.SIMULATED {
280
+ DeviceManager.shared.initSGC(wearable)
281
+ }
282
+ }
283
+
284
+ case ("bluetooth", "device_name"):
285
+ if let name = value as? String {
286
+ DeviceManager.shared.checkCurrentAudioDevice()
287
+ // listen for when the audio device is paired and connected
288
+ // DeviceManager.shared.setupAudioPairing(deviceName: name)
289
+ }
290
+
291
+ default:
292
+ break
293
+ }
294
+ }
295
+ }