simpleble 0.0.1

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 (341) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +88 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +350 -0
  5. data/ext/simpleble/extconf.rb +57 -0
  6. data/ext/simpleble/simpleble_ruby.c +682 -0
  7. data/lib/simpleble/adapter.rb +10 -0
  8. data/lib/simpleble/characteristic.rb +36 -0
  9. data/lib/simpleble/descriptor.rb +8 -0
  10. data/lib/simpleble/exceptions.rb +25 -0
  11. data/lib/simpleble/peripheral.rb +64 -0
  12. data/lib/simpleble/service.rb +16 -0
  13. data/lib/simpleble/version.rb +3 -0
  14. data/lib/simpleble.rb +40 -0
  15. data/vendor/simpleble/build_simplecble/CMakeFiles/4.0.3/CompilerIdCXX/CMakeCXXCompilerId.cpp +920 -0
  16. data/vendor/simpleble/build_simplecble/CMakeFiles/4.0.3/CompilerIdCXX/apple-sdk.cpp +1 -0
  17. data/vendor/simpleble/build_simplecble/CMakeFiles/4.1.0/CompilerIdCXX/CMakeCXXCompilerId.cpp +949 -0
  18. data/vendor/simpleble/build_simplecble/CMakeFiles/4.1.0/CompilerIdCXX/apple-sdk.cpp +1 -0
  19. data/vendor/simpleble/build_simplecble/export/simplecble/export.h +43 -0
  20. data/vendor/simpleble/build_simplecble/simpleble/export/simpleble/export.h +43 -0
  21. data/vendor/simpleble/dependencies/external/kvn/kvn_bytearray.h +222 -0
  22. data/vendor/simpleble/dependencies/external/kvn/kvn_safe_callback.hpp +66 -0
  23. data/vendor/simpleble/dependencies/external/kvn/logfwd.hpp +35 -0
  24. data/vendor/simpleble/dependencies/internal/fmt/args.h +220 -0
  25. data/vendor/simpleble/dependencies/internal/fmt/base.h +2962 -0
  26. data/vendor/simpleble/dependencies/internal/fmt/chrono.h +2338 -0
  27. data/vendor/simpleble/dependencies/internal/fmt/color.h +610 -0
  28. data/vendor/simpleble/dependencies/internal/fmt/compile.h +539 -0
  29. data/vendor/simpleble/dependencies/internal/fmt/core.h +5 -0
  30. data/vendor/simpleble/dependencies/internal/fmt/format-inl.h +1949 -0
  31. data/vendor/simpleble/dependencies/internal/fmt/format.h +4244 -0
  32. data/vendor/simpleble/dependencies/internal/fmt/os.h +427 -0
  33. data/vendor/simpleble/dependencies/internal/fmt/ostream.h +166 -0
  34. data/vendor/simpleble/dependencies/internal/fmt/printf.h +633 -0
  35. data/vendor/simpleble/dependencies/internal/fmt/ranges.h +850 -0
  36. data/vendor/simpleble/dependencies/internal/fmt/std.h +726 -0
  37. data/vendor/simpleble/dependencies/internal/fmt/xchar.h +373 -0
  38. data/vendor/simpleble/dependencies/internal/simplejni/Common.hpp +579 -0
  39. data/vendor/simpleble/dependencies/internal/simplejni/References.hpp +151 -0
  40. data/vendor/simpleble/dependencies/internal/simplejni/Registry.hpp +183 -0
  41. data/vendor/simpleble/dependencies/internal/simplejni/VM.hpp +88 -0
  42. data/vendor/simpleble/examples/simpleble/src/connect.cpp +67 -0
  43. data/vendor/simpleble/examples/simpleble/src/connect_safe.cpp +91 -0
  44. data/vendor/simpleble/examples/simpleble/src/list_adapters.cpp +22 -0
  45. data/vendor/simpleble/examples/simpleble/src/list_adapters_safe.cpp +33 -0
  46. data/vendor/simpleble/examples/simpleble/src/list_paired.cpp +27 -0
  47. data/vendor/simpleble/examples/simpleble/src/multiconnect.cpp +60 -0
  48. data/vendor/simpleble/examples/simpleble/src/notify.cpp +85 -0
  49. data/vendor/simpleble/examples/simpleble/src/notify_multi.cpp +101 -0
  50. data/vendor/simpleble/examples/simpleble/src/power_cycle.cpp +43 -0
  51. data/vendor/simpleble/examples/simpleble/src/read.cpp +82 -0
  52. data/vendor/simpleble/examples/simpleble/src/scan.cpp +62 -0
  53. data/vendor/simpleble/examples/simpleble/src/utils.cpp +59 -0
  54. data/vendor/simpleble/examples/simpleble/src/utils.hpp +27 -0
  55. data/vendor/simpleble/examples/simpleble/src/write.cpp +81 -0
  56. data/vendor/simpleble/examples/simplebluez/ble_nus/ble_nus.cpp +138 -0
  57. data/vendor/simpleble/examples/simplebluez/connect/connect.cpp +119 -0
  58. data/vendor/simpleble/examples/simplebluez/list_adapters/list_adapters.cpp +44 -0
  59. data/vendor/simpleble/examples/simplebluez/list_paired/list_paired.cpp +48 -0
  60. data/vendor/simpleble/examples/simplebluez/notify/notify.cpp +145 -0
  61. data/vendor/simpleble/examples/simplebluez/pair/pair.cpp +181 -0
  62. data/vendor/simpleble/examples/simplebluez/read/read.cpp +141 -0
  63. data/vendor/simpleble/examples/simplebluez/scan/scan.cpp +85 -0
  64. data/vendor/simpleble/examples/simplecble/c/connect.c +163 -0
  65. data/vendor/simpleble/examples/simplecble/c/notify.c +217 -0
  66. data/vendor/simpleble/examples/simplecble/c/scan.c +164 -0
  67. data/vendor/simpleble/examples/simpledbus/notification.cpp +24 -0
  68. data/vendor/simpleble/hitl/src/test_sanity.cpp +48 -0
  69. data/vendor/simpleble/install_simplecble/include/simpleble/Adapter.h +102 -0
  70. data/vendor/simpleble/install_simplecble/include/simpleble/AdapterSafe.h +58 -0
  71. data/vendor/simpleble/install_simplecble/include/simpleble/Advanced.h +50 -0
  72. data/vendor/simpleble/install_simplecble/include/simpleble/Characteristic.h +39 -0
  73. data/vendor/simpleble/install_simplecble/include/simpleble/Config.h +55 -0
  74. data/vendor/simpleble/install_simplecble/include/simpleble/Descriptor.h +30 -0
  75. data/vendor/simpleble/install_simplecble/include/simpleble/Exceptions.h +72 -0
  76. data/vendor/simpleble/install_simplecble/include/simpleble/Logging.h +73 -0
  77. data/vendor/simpleble/install_simplecble/include/simpleble/Peripheral.h +82 -0
  78. data/vendor/simpleble/install_simplecble/include/simpleble/PeripheralSafe.h +64 -0
  79. data/vendor/simpleble/install_simplecble/include/simpleble/Service.h +34 -0
  80. data/vendor/simpleble/install_simplecble/include/simpleble/SimpleBLE.h +8 -0
  81. data/vendor/simpleble/install_simplecble/include/simpleble/Types.h +49 -0
  82. data/vendor/simpleble/install_simplecble/include/simpleble/Utils.h +13 -0
  83. data/vendor/simpleble/install_simplecble/include/simpleble/export.h +43 -0
  84. data/vendor/simpleble/install_simplecble/include/simpleble/kvn/kvn_bytearray.h +222 -0
  85. data/vendor/simpleble/install_simplecble/include/simplecble/adapter.h +188 -0
  86. data/vendor/simpleble/install_simplecble/include/simplecble/logging.h +37 -0
  87. data/vendor/simpleble/install_simplecble/include/simplecble/peripheral.h +304 -0
  88. data/vendor/simpleble/install_simplecble/include/simplecble/simpleble.h +21 -0
  89. data/vendor/simpleble/install_simplecble/include/simplecble/types.h +73 -0
  90. data/vendor/simpleble/install_simplecble/include/simplecble/utils.h +27 -0
  91. data/vendor/simpleble/simpleble/include/simpleble/Adapter.h +102 -0
  92. data/vendor/simpleble/simpleble/include/simpleble/AdapterSafe.h +58 -0
  93. data/vendor/simpleble/simpleble/include/simpleble/Characteristic.h +39 -0
  94. data/vendor/simpleble/simpleble/include/simpleble/Config.h +55 -0
  95. data/vendor/simpleble/simpleble/include/simpleble/Descriptor.h +30 -0
  96. data/vendor/simpleble/simpleble/include/simpleble/Exceptions.h +72 -0
  97. data/vendor/simpleble/simpleble/include/simpleble/Logging.h +73 -0
  98. data/vendor/simpleble/simpleble/include/simpleble/Peripheral.h +82 -0
  99. data/vendor/simpleble/simpleble/include/simpleble/PeripheralSafe.h +64 -0
  100. data/vendor/simpleble/simpleble/include/simpleble/Service.h +34 -0
  101. data/vendor/simpleble/simpleble/include/simpleble/SimpleBLE.h +8 -0
  102. data/vendor/simpleble/simpleble/include/simpleble/Types.h +49 -0
  103. data/vendor/simpleble/simpleble/include/simpleble/Utils.h +13 -0
  104. data/vendor/simpleble/simpleble/include/simpleble_c/adapter.h +188 -0
  105. data/vendor/simpleble/simpleble/include/simpleble_c/logging.h +37 -0
  106. data/vendor/simpleble/simpleble/include/simpleble_c/peripheral.h +304 -0
  107. data/vendor/simpleble/simpleble/include/simpleble_c/simpleble.h +21 -0
  108. data/vendor/simpleble/simpleble/include/simpleble_c/types.h +73 -0
  109. data/vendor/simpleble/simpleble/include/simpleble_c/utils.h +27 -0
  110. data/vendor/simpleble/simpleble/src/CommonUtils.h +63 -0
  111. data/vendor/simpleble/simpleble/src/Exceptions.cpp +31 -0
  112. data/vendor/simpleble/simpleble/src/Logging.cpp +136 -0
  113. data/vendor/simpleble/simpleble/src/LoggingInternal.h +85 -0
  114. data/vendor/simpleble/simpleble/src/Utils.cpp +24 -0
  115. data/vendor/simpleble/simpleble/src/backends/android/AdapterAndroid.cpp +101 -0
  116. data/vendor/simpleble/simpleble/src/backends/android/AdapterAndroid.h +70 -0
  117. data/vendor/simpleble/simpleble/src/backends/android/BackendAndroid.cpp +40 -0
  118. data/vendor/simpleble/simpleble/src/backends/android/BackendAndroid.h +20 -0
  119. data/vendor/simpleble/simpleble/src/backends/android/PeripheralAndroid.cpp +365 -0
  120. data/vendor/simpleble/simpleble/src/backends/android/PeripheralAndroid.h +90 -0
  121. data/vendor/simpleble/simpleble/src/backends/android/bridge/BluetoothGattCallback.cpp +432 -0
  122. data/vendor/simpleble/simpleble/src/backends/android/bridge/BluetoothGattCallback.h +102 -0
  123. data/vendor/simpleble/simpleble/src/backends/android/bridge/ScanCallback.cpp +142 -0
  124. data/vendor/simpleble/simpleble/src/backends/android/bridge/ScanCallback.h +55 -0
  125. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.cpp +107 -0
  126. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.h +55 -0
  127. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.cpp +68 -0
  128. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.h +54 -0
  129. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.cpp +115 -0
  130. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.h +75 -0
  131. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.cpp +142 -0
  132. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.h +66 -0
  133. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.cpp +67 -0
  134. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.h +46 -0
  135. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.cpp +106 -0
  136. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.h +47 -0
  137. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.cpp +47 -0
  138. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.h +37 -0
  139. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.cpp +69 -0
  140. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.h +41 -0
  141. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.cpp +63 -0
  142. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.h +42 -0
  143. data/vendor/simpleble/simpleble/src/backends/android/types/android/os/ParcelUUID.cpp +32 -0
  144. data/vendor/simpleble/simpleble/src/backends/android/types/android/os/ParcelUUID.h +30 -0
  145. data/vendor/simpleble/simpleble/src/backends/android/types/android/util/SparseArray.cpp +54 -0
  146. data/vendor/simpleble/simpleble/src/backends/android/types/android/util/SparseArray.h +37 -0
  147. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Iterator.cpp +36 -0
  148. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Iterator.h +28 -0
  149. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/List.cpp +29 -0
  150. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/List.h +27 -0
  151. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Set.cpp +33 -0
  152. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Set.h +28 -0
  153. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/UUID.cpp +26 -0
  154. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/UUID.h +29 -0
  155. data/vendor/simpleble/simpleble/src/backends/common/AdapterBase.cpp +53 -0
  156. data/vendor/simpleble/simpleble/src/backends/common/AdapterBase.h +81 -0
  157. data/vendor/simpleble/simpleble/src/backends/common/AdapterBaseTypes.h +22 -0
  158. data/vendor/simpleble/simpleble/src/backends/common/BackendBase.h +20 -0
  159. data/vendor/simpleble/simpleble/src/backends/common/BackendUtils.h +33 -0
  160. data/vendor/simpleble/simpleble/src/backends/common/CharacteristicBase.cpp +28 -0
  161. data/vendor/simpleble/simpleble/src/backends/common/CharacteristicBase.h +38 -0
  162. data/vendor/simpleble/simpleble/src/backends/common/DescriptorBase.cpp +7 -0
  163. data/vendor/simpleble/simpleble/src/backends/common/DescriptorBase.h +19 -0
  164. data/vendor/simpleble/simpleble/src/backends/common/PeripheralBase.h +82 -0
  165. data/vendor/simpleble/simpleble/src/backends/common/ServiceBase.cpp +18 -0
  166. data/vendor/simpleble/simpleble/src/backends/common/ServiceBase.h +28 -0
  167. data/vendor/simpleble/simpleble/src/backends/linux/AdapterLinux.cpp +102 -0
  168. data/vendor/simpleble/simpleble/src/backends/linux/AdapterLinux.h +55 -0
  169. data/vendor/simpleble/simpleble/src/backends/linux/BackendBluez.cpp +87 -0
  170. data/vendor/simpleble/simpleble/src/backends/linux/PeripheralLinux.cpp +376 -0
  171. data/vendor/simpleble/simpleble/src/backends/linux/PeripheralLinux.h +90 -0
  172. data/vendor/simpleble/simpleble/src/backends/macos/AdapterBaseMacOS.h +29 -0
  173. data/vendor/simpleble/simpleble/src/backends/macos/AdapterMac.h +78 -0
  174. data/vendor/simpleble/simpleble/src/backends/macos/PeripheralBaseMacOS.h +49 -0
  175. data/vendor/simpleble/simpleble/src/backends/macos/PeripheralMac.h +81 -0
  176. data/vendor/simpleble/simpleble/src/backends/macos/Utils.h +9 -0
  177. data/vendor/simpleble/simpleble/src/backends/plain/AdapterPlain.cpp +65 -0
  178. data/vendor/simpleble/simpleble/src/backends/plain/AdapterPlain.h +49 -0
  179. data/vendor/simpleble/simpleble/src/backends/plain/BackendPlain.cpp +30 -0
  180. data/vendor/simpleble/simpleble/src/backends/plain/PeripheralPlain.cpp +159 -0
  181. data/vendor/simpleble/simpleble/src/backends/plain/PeripheralPlain.h +72 -0
  182. data/vendor/simpleble/simpleble/src/backends/windows/AdapterWindows.cpp +330 -0
  183. data/vendor/simpleble/simpleble/src/backends/windows/AdapterWindows.h +89 -0
  184. data/vendor/simpleble/simpleble/src/backends/windows/BackendWinRT.cpp +67 -0
  185. data/vendor/simpleble/simpleble/src/backends/windows/BackendWinRT.h +18 -0
  186. data/vendor/simpleble/simpleble/src/backends/windows/MtaManager.cpp +49 -0
  187. data/vendor/simpleble/simpleble/src/backends/windows/MtaManager.h +90 -0
  188. data/vendor/simpleble/simpleble/src/backends/windows/PeripheralWindows.cpp +487 -0
  189. data/vendor/simpleble/simpleble/src/backends/windows/PeripheralWindows.h +129 -0
  190. data/vendor/simpleble/simpleble/src/backends/windows/Utils.cpp +146 -0
  191. data/vendor/simpleble/simpleble/src/backends/windows/Utils.h +47 -0
  192. data/vendor/simpleble/simpleble/src/builders/BuildVec.h +32 -0
  193. data/vendor/simpleble/simpleble/src/builders/BuilderBase.h +87 -0
  194. data/vendor/simpleble/simpleble/src/external/TaskRunner.hpp +99 -0
  195. data/vendor/simpleble/simpleble/src/external/ThreadRunner.h +52 -0
  196. data/vendor/simpleble/simpleble/src/external/kvn_safe_callback.hpp +66 -0
  197. data/vendor/simpleble/simpleble/src/external/kvn_safe_map.hpp +94 -0
  198. data/vendor/simpleble/simpleble/src/external/kvn_threadrunner.hpp +70 -0
  199. data/vendor/simpleble/simpleble/src/external/logfwd.hpp +35 -0
  200. data/vendor/simpleble/simpleble/src/frontends/base/Adapter.cpp +111 -0
  201. data/vendor/simpleble/simpleble/src/frontends/base/Backend.cpp +83 -0
  202. data/vendor/simpleble/simpleble/src/frontends/base/Backend.h +76 -0
  203. data/vendor/simpleble/simpleble/src/frontends/base/Characteristic.cpp +56 -0
  204. data/vendor/simpleble/simpleble/src/frontends/base/Descriptor.cpp +21 -0
  205. data/vendor/simpleble/simpleble/src/frontends/base/Peripheral.cpp +113 -0
  206. data/vendor/simpleble/simpleble/src/frontends/base/Service.cpp +26 -0
  207. data/vendor/simpleble/simpleble/src/frontends/safe/AdapterSafe.cpp +158 -0
  208. data/vendor/simpleble/simpleble/src/frontends/safe/PeripheralSafe.cpp +219 -0
  209. data/vendor/simpleble/simpleble/src_c/adapter.cpp +204 -0
  210. data/vendor/simpleble/simpleble/src_c/logging.cpp +19 -0
  211. data/vendor/simpleble/simpleble/src_c/peripheral.cpp +444 -0
  212. data/vendor/simpleble/simpleble/src_c/simpleble.cpp +5 -0
  213. data/vendor/simpleble/simpleble/src_c/utils.cpp +15 -0
  214. data/vendor/simpleble/simpleble/test/src/main.cpp +8 -0
  215. data/vendor/simpleble/simpleble/test/src/test_bytearray.cpp +246 -0
  216. data/vendor/simpleble/simpleble/test/src/test_utils.cpp +24 -0
  217. data/vendor/simpleble/simplebluez/include/simplebluez/Adapter.h +46 -0
  218. data/vendor/simpleble/simplebluez/include/simplebluez/Agent.h +52 -0
  219. data/vendor/simpleble/simplebluez/include/simplebluez/Bluez.h +37 -0
  220. data/vendor/simpleble/simplebluez/include/simplebluez/BluezOrg.h +22 -0
  221. data/vendor/simpleble/simplebluez/include/simplebluez/BluezOrgBluez.h +26 -0
  222. data/vendor/simpleble/simplebluez/include/simplebluez/BluezRoot.h +32 -0
  223. data/vendor/simpleble/simplebluez/include/simplebluez/Characteristic.h +46 -0
  224. data/vendor/simpleble/simplebluez/include/simplebluez/Descriptor.h +33 -0
  225. data/vendor/simpleble/simplebluez/include/simplebluez/Device.h +64 -0
  226. data/vendor/simpleble/simplebluez/include/simplebluez/Exceptions.h +43 -0
  227. data/vendor/simpleble/simplebluez/include/simplebluez/Service.h +27 -0
  228. data/vendor/simpleble/simplebluez/include/simplebluez/Types.h +9 -0
  229. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Adapter1.h +49 -0
  230. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Agent1.h +100 -0
  231. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/AgentManager1.h +24 -0
  232. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Battery1.h +32 -0
  233. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Device1.h +62 -0
  234. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattCharacteristic1.h +48 -0
  235. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattDescriptor1.h +41 -0
  236. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattService1.h +28 -0
  237. data/vendor/simpleble/simplebluez/src/Adapter.cpp +78 -0
  238. data/vendor/simpleble/simplebluez/src/Agent.cpp +72 -0
  239. data/vendor/simpleble/simplebluez/src/Bluez.cpp +45 -0
  240. data/vendor/simpleble/simplebluez/src/BluezOrg.cpp +20 -0
  241. data/vendor/simpleble/simplebluez/src/BluezOrgBluez.cpp +23 -0
  242. data/vendor/simpleble/simplebluez/src/BluezRoot.cpp +44 -0
  243. data/vendor/simpleble/simplebluez/src/Characteristic.cpp +64 -0
  244. data/vendor/simpleble/simplebluez/src/Descriptor.cpp +27 -0
  245. data/vendor/simpleble/simplebluez/src/Device.cpp +104 -0
  246. data/vendor/simpleble/simplebluez/src/Exceptions.cpp +29 -0
  247. data/vendor/simpleble/simplebluez/src/Logging.cpp +52 -0
  248. data/vendor/simpleble/simplebluez/src/Logging.h +57 -0
  249. data/vendor/simpleble/simplebluez/src/Service.cpp +33 -0
  250. data/vendor/simpleble/simplebluez/src/interfaces/Adapter1.cpp +123 -0
  251. data/vendor/simpleble/simplebluez/src/interfaces/Agent1.cpp +143 -0
  252. data/vendor/simpleble/simplebluez/src/interfaces/AgentManager1.cpp +34 -0
  253. data/vendor/simpleble/simplebluez/src/interfaces/Battery1.cpp +30 -0
  254. data/vendor/simpleble/simplebluez/src/interfaces/Device1.cpp +170 -0
  255. data/vendor/simpleble/simplebluez/src/interfaces/GattCharacteristic1.cpp +118 -0
  256. data/vendor/simpleble/simplebluez/src/interfaces/GattDescriptor1.cpp +78 -0
  257. data/vendor/simpleble/simplebluez/src/interfaces/GattService1.cpp +28 -0
  258. data/vendor/simpleble/simplebluez/test/src/helpers/PythonRunner.cpp +53 -0
  259. data/vendor/simpleble/simplebluez/test/src/helpers/PythonRunner.h +24 -0
  260. data/vendor/simpleble/simplebluez/test/src/main.cpp +16 -0
  261. data/vendor/simpleble/simplecble/include/simplecble/adapter.h +188 -0
  262. data/vendor/simpleble/simplecble/include/simplecble/logging.h +37 -0
  263. data/vendor/simpleble/simplecble/include/simplecble/peripheral.h +304 -0
  264. data/vendor/simpleble/simplecble/include/simplecble/simpleble.h +21 -0
  265. data/vendor/simpleble/simplecble/include/simplecble/types.h +73 -0
  266. data/vendor/simpleble/simplecble/include/simplecble/utils.h +27 -0
  267. data/vendor/simpleble/simplecble/src/adapter.cpp +204 -0
  268. data/vendor/simpleble/simplecble/src/logging.cpp +19 -0
  269. data/vendor/simpleble/simplecble/src/peripheral.cpp +444 -0
  270. data/vendor/simpleble/simplecble/src/simpleble.cpp +5 -0
  271. data/vendor/simpleble/simplecble/src/utils.cpp +15 -0
  272. data/vendor/simpleble/simpledbus/include/simpledbus/advanced/Interface.h +67 -0
  273. data/vendor/simpleble/simpledbus/include/simpledbus/advanced/InterfaceRegistry.h +64 -0
  274. data/vendor/simpleble/simpledbus/include/simpledbus/advanced/Proxy.h +117 -0
  275. data/vendor/simpleble/simpledbus/include/simpledbus/base/Connection.h +50 -0
  276. data/vendor/simpleble/simpledbus/include/simpledbus/base/Exceptions.h +56 -0
  277. data/vendor/simpleble/simpledbus/include/simpledbus/base/Holder.h +147 -0
  278. data/vendor/simpleble/simpledbus/include/simpledbus/base/Logging.h +57 -0
  279. data/vendor/simpleble/simpledbus/include/simpledbus/base/Message.h +89 -0
  280. data/vendor/simpleble/simpledbus/include/simpledbus/base/Path.h +24 -0
  281. data/vendor/simpleble/simpledbus/include/simpledbus/interfaces/ObjectManager.h +26 -0
  282. data/vendor/simpleble/simpledbus/src/advanced/Interface.cpp +155 -0
  283. data/vendor/simpleble/simpledbus/src/advanced/Proxy.cpp +375 -0
  284. data/vendor/simpleble/simpledbus/src/base/Connection.cpp +222 -0
  285. data/vendor/simpleble/simpledbus/src/base/Exceptions.cpp +39 -0
  286. data/vendor/simpleble/simpledbus/src/base/Holder.cpp +739 -0
  287. data/vendor/simpleble/simpledbus/src/base/Logging.cpp +52 -0
  288. data/vendor/simpleble/simpledbus/src/base/Message.cpp +622 -0
  289. data/vendor/simpleble/simpledbus/src/base/Path.cpp +129 -0
  290. data/vendor/simpleble/simpledbus/src/interfaces/ObjectManager.cpp +58 -0
  291. data/vendor/simpleble/simpledbus/test/src/helpers/PythonRunner.cpp +53 -0
  292. data/vendor/simpleble/simpledbus/test/src/helpers/PythonRunner.h +24 -0
  293. data/vendor/simpleble/simpledbus/test/src/main.cpp +16 -0
  294. data/vendor/simpleble/simpledbus/test/src/test_holder.cpp +184 -0
  295. data/vendor/simpleble/simpledbus/test/src/test_message.cpp +397 -0
  296. data/vendor/simpleble/simpledbus/test/src/test_path.cpp +76 -0
  297. data/vendor/simpleble/simpledbus/test/src/test_proxy_children.cpp +109 -0
  298. data/vendor/simpleble/simpledbus/test/src/test_proxy_interfaces.cpp +102 -0
  299. data/vendor/simpleble/simpledbus/test/src/test_proxy_lifetime.cpp +18 -0
  300. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/ThreadRunner.h +89 -0
  301. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/android_utils.cpp +55 -0
  302. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/android_utils.h +18 -0
  303. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/simpleble_android.cpp +813 -0
  304. data/vendor/simpleble/simplejavable/cpp/src/core/AdapterWrapper.cpp +37 -0
  305. data/vendor/simpleble/simplejavable/cpp/src/core/AdapterWrapper.h +23 -0
  306. data/vendor/simpleble/simplejavable/cpp/src/core/Cache.cpp +58 -0
  307. data/vendor/simpleble/simplejavable/cpp/src/core/Cache.h +34 -0
  308. data/vendor/simpleble/simplejavable/cpp/src/core/PeripheralWrapper.cpp +17 -0
  309. data/vendor/simpleble/simplejavable/cpp/src/core/PeripheralWrapper.h +19 -0
  310. data/vendor/simpleble/simplejavable/cpp/src/java/lang/ArrayList.cpp +257 -0
  311. data/vendor/simpleble/simplejavable/cpp/src/java/lang/ArrayList.h +78 -0
  312. data/vendor/simpleble/simplejavable/cpp/src/java/lang/HashMap.cpp +96 -0
  313. data/vendor/simpleble/simplejavable/cpp/src/java/lang/HashMap.h +54 -0
  314. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Integer.cpp +93 -0
  315. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Integer.h +49 -0
  316. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Iterator.cpp +85 -0
  317. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Iterator.h +48 -0
  318. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/AdapterCallback.cpp +91 -0
  319. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/AdapterCallback.h +90 -0
  320. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Characteristic.cpp +35 -0
  321. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Characteristic.h +60 -0
  322. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/DataCallback.cpp +33 -0
  323. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/DataCallback.h +45 -0
  324. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Descriptor.cpp +30 -0
  325. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Descriptor.h +49 -0
  326. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/PeripheralCallback.cpp +41 -0
  327. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/PeripheralCallback.h +51 -0
  328. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Service.cpp +33 -0
  329. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Service.h +54 -0
  330. data/vendor/simpleble/simplejavable/cpp/src/simplejavable.cpp +361 -0
  331. data/vendor/simpleble/simplepyble/src/main.cpp +55 -0
  332. data/vendor/simpleble/simplepyble/src/wrap_adapter.cpp +106 -0
  333. data/vendor/simpleble/simplepyble/src/wrap_characteristic.cpp +56 -0
  334. data/vendor/simpleble/simplepyble/src/wrap_config.cpp +136 -0
  335. data/vendor/simpleble/simplepyble/src/wrap_descriptor.cpp +21 -0
  336. data/vendor/simpleble/simplepyble/src/wrap_peripheral.cpp +217 -0
  337. data/vendor/simpleble/simplepyble/src/wrap_service.cpp +32 -0
  338. data/vendor/simpleble/simplepyble/src/wrap_types.cpp +21 -0
  339. data/vendor/simpleble/simplersble/src/bindings/Bindings.cpp +338 -0
  340. data/vendor/simpleble/simplersble/src/bindings/Bindings.hpp +178 -0
  341. metadata +430 -0
@@ -0,0 +1,55 @@
1
+ #pragma once
2
+
3
+ #include <kvn_safe_callback.hpp>
4
+ #include <map>
5
+ #include "types/android/bluetooth/le/ScanResult.h"
6
+ #include "simplejni/Common.hpp"
7
+ #include "simplejni/Registry.hpp"
8
+
9
+ namespace SimpleBLE {
10
+ namespace Android {
11
+ namespace Bridge {
12
+
13
+ class ScanCallback {
14
+ public:
15
+ ScanCallback();
16
+ virtual ~ScanCallback();
17
+ jobject get() const { return _obj.get(); } // TODO: Remove once nothing uses this
18
+
19
+ void set_callback_onScanResult(std::function<void(Android::ScanResult)> callback);
20
+ void set_callback_onBatchScanResults(std::function<void()> callback);
21
+ void set_callback_onScanFailed(std::function<void()> callback);
22
+
23
+ // Not for public use
24
+ static void jni_onScanResultCallback(SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> thiz, jint callback_type,
25
+ Android::ScanResult scan_result);
26
+ static void jni_onBatchScanResultsCallback(SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> thiz,
27
+ SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> results);
28
+ static void jni_onScanFailedCallback(SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> thiz, jint error_code);
29
+
30
+ private:
31
+ // Underlying JNI object - Use SimpleJNI::Object with GlobalRef
32
+ SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> _obj;
33
+
34
+ // Map for instance tracking - Key should be comparable using JniObjectComparator
35
+ static kvn::safe_map<SimpleJNI::Object<SimpleJNI::GlobalRef, jobject>, ScanCallback*,
36
+ SimpleJNI::ObjectComparator<SimpleJNI::GlobalRef, jobject>>
37
+ _map;
38
+
39
+ // Callbacks
40
+ kvn::safe_callback<void(Android::ScanResult)> _callback_onScanResult;
41
+ kvn::safe_callback<void()> _callback_onBatchScanResults;
42
+ kvn::safe_callback<void()> _callback_onScanFailed;
43
+
44
+ // Static JNI resources managed by Registrar
45
+ static SimpleJNI::GlobalRef<jclass> _cls;
46
+ static jmethodID _constructor;
47
+
48
+ // JNI descriptor for auto-registration
49
+ static const SimpleJNI::JNIDescriptor descriptor;
50
+ static const SimpleJNI::AutoRegister<ScanCallback> registrar;
51
+ };
52
+
53
+ } // namespace Bridge
54
+ } // namespace Android
55
+ } // namespace SimpleBLE
@@ -0,0 +1,107 @@
1
+ #include "BluetoothAdapter.h"
2
+ #include "types/java/util/Set.h"
3
+
4
+ namespace SimpleBLE {
5
+ namespace Android {
6
+
7
+ // Static member initialization
8
+ SimpleJNI::GlobalRef<jclass> BluetoothAdapter::_cls;
9
+ jmethodID BluetoothAdapter::_method_getName = nullptr;
10
+ jmethodID BluetoothAdapter::_method_getAddress = nullptr;
11
+ jmethodID BluetoothAdapter::_method_isEnabled = nullptr;
12
+ jmethodID BluetoothAdapter::_method_getState = nullptr;
13
+ jmethodID BluetoothAdapter::_method_getBluetoothLeScanner = nullptr;
14
+ jmethodID BluetoothAdapter::_method_getBondedDevices = nullptr;
15
+ jmethodID BluetoothAdapter::_method_getDefaultAdapter = nullptr;
16
+
17
+ // JNI descriptors for auto-registration
18
+ const SimpleJNI::JNIDescriptor BluetoothAdapter::instance_descriptor{
19
+ "android/bluetooth/BluetoothAdapter", // Java class name
20
+ &_cls, // Where to store the jclass
21
+ { // Instance methods to preload
22
+ {"getName", "()Ljava/lang/String;", &_method_getName},
23
+ {"getAddress", "()Ljava/lang/String;", &_method_getAddress},
24
+ {"isEnabled", "()Z", &_method_isEnabled},
25
+ {"getState", "()I", &_method_getState},
26
+ {"getBluetoothLeScanner", "()Landroid/bluetooth/le/BluetoothLeScanner;", &_method_getBluetoothLeScanner},
27
+ {"getBondedDevices", "()Ljava/util/Set;", &_method_getBondedDevices}
28
+ }
29
+ };
30
+
31
+ const SimpleJNI::StaticJNIDescriptor BluetoothAdapter::static_descriptor{
32
+ "android/bluetooth/BluetoothAdapter", // Java class name
33
+ &_cls, // Where to store the jclass (shared with instance)
34
+ { // Static methods to preload
35
+ {"getDefaultAdapter", "()Landroid/bluetooth/BluetoothAdapter;", &_method_getDefaultAdapter}
36
+ }
37
+ };
38
+
39
+ // Auto-register both descriptors
40
+ const SimpleJNI::AutoRegister<BluetoothAdapter> BluetoothAdapter::registrar{&instance_descriptor, &static_descriptor};
41
+
42
+ BluetoothAdapter::BluetoothAdapter(SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> obj) : _obj(obj) {
43
+ if (!obj) {
44
+ throw std::runtime_error("BluetoothAdapter object is null");
45
+ }
46
+ }
47
+
48
+ BluetoothAdapter BluetoothAdapter::getDefaultAdapter() {
49
+ if (!_cls.get()) {
50
+ throw std::runtime_error("BluetoothAdapter JNI resources not preloaded. Ensure SimpleJNI::Registrar::preload() is called.");
51
+ }
52
+ SimpleJNI::Env env;
53
+ jobject local_obj = env->CallStaticObjectMethod(_cls.get(), _method_getDefaultAdapter);
54
+ if (local_obj == nullptr) {
55
+ throw std::runtime_error("Failed to get default BluetoothAdapter");
56
+ }
57
+ SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> obj(local_obj);
58
+ env->DeleteLocalRef(local_obj);
59
+ return BluetoothAdapter(obj);
60
+ }
61
+
62
+ std::string BluetoothAdapter::getName() {
63
+ if (!_obj) throw std::runtime_error("BluetoothAdapter is not initialized");
64
+ return _obj.call_string_method(_method_getName);
65
+ }
66
+
67
+ std::string BluetoothAdapter::getAddress() {
68
+ if (!_obj) throw std::runtime_error("BluetoothAdapter is not initialized");
69
+ return _obj.call_string_method(_method_getAddress);
70
+ }
71
+
72
+ bool BluetoothAdapter::isEnabled() {
73
+ if (!_obj) throw std::runtime_error("BluetoothAdapter is not initialized");
74
+ return _obj.call_boolean_method(_method_isEnabled);
75
+ }
76
+
77
+ int BluetoothAdapter::getState() {
78
+ if (!_obj) throw std::runtime_error("BluetoothAdapter is not initialized");
79
+ return _obj.call_int_method(_method_getState);
80
+ }
81
+
82
+ BluetoothScanner BluetoothAdapter::getBluetoothLeScanner() {
83
+ if (!_obj) throw std::runtime_error("BluetoothAdapter is not initialized");
84
+ auto scanner_obj = _obj.call_object_method(_method_getBluetoothLeScanner);
85
+ return BluetoothScanner(scanner_obj);
86
+ }
87
+
88
+ std::vector<BluetoothDevice> BluetoothAdapter::getBondedDevices() {
89
+ if (!_obj) throw std::runtime_error("BluetoothAdapter is not initialized");
90
+
91
+ auto devices_obj = _obj.call_object_method(_method_getBondedDevices);
92
+ if (!devices_obj) throw std::runtime_error("Failed to get bonded devices");
93
+
94
+ std::vector<BluetoothDevice> result;
95
+ Set set(devices_obj.to_global());
96
+ Iterator iterator = set.iterator();
97
+ while (iterator.hasNext()) {
98
+ auto device_obj = iterator.next();
99
+ if (!device_obj) continue;
100
+ result.push_back(BluetoothDevice(device_obj));
101
+ }
102
+
103
+ return result;
104
+ }
105
+
106
+ } // namespace Android
107
+ } // namespace SimpleBLE
@@ -0,0 +1,55 @@
1
+ #pragma once
2
+
3
+ #include "simplejni/Common.hpp"
4
+ #include "simplejni/Registry.hpp"
5
+ #include "types/android/bluetooth/BluetoothDevice.h"
6
+ #include "types/android/bluetooth/le/BluetoothScanner.h"
7
+
8
+ namespace SimpleBLE {
9
+ namespace Android {
10
+
11
+ class BluetoothAdapter {
12
+ public:
13
+ BluetoothAdapter(SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> obj);
14
+ virtual ~BluetoothAdapter() = default;
15
+
16
+ std::string getName();
17
+ std::string getAddress();
18
+ bool isEnabled();
19
+ int getState();
20
+
21
+ BluetoothScanner getBluetoothLeScanner();
22
+ std::vector<BluetoothDevice> getBondedDevices();
23
+
24
+ // NOTE: The correct way to request a BluetoothAdapter is to go though the BluetoothManager,
25
+ // as described in https://developer.android.com/reference/android/bluetooth/BluetoothManager#getAdapter()
26
+ // However, for simplicity, we are using a direct call to BluetoothAdapter.getDefaultAdapter() which is
27
+ // deprecated in API 31 but still works. We'll need to implement a backend bypass to get a Context
28
+ // object and call getSystemService(Context.BLUETOOTH_SERVICE) to get the BluetoothManager.
29
+
30
+ // NOTE: Android BluetoothAdapter and BluetoothScanner classes are singletons, but so is this
31
+ // class, so we don't need to make them static.
32
+ static BluetoothAdapter getDefaultAdapter();
33
+ jobject get() const { return _obj.get(); } // TODO: Remove once nothing uses this
34
+
35
+ private:
36
+ SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> _obj;
37
+
38
+ // Static JNI resources managed by Registrar
39
+ static SimpleJNI::GlobalRef<jclass> _cls;
40
+ static jmethodID _method_getName;
41
+ static jmethodID _method_getAddress;
42
+ static jmethodID _method_isEnabled;
43
+ static jmethodID _method_getState;
44
+ static jmethodID _method_getBluetoothLeScanner;
45
+ static jmethodID _method_getBondedDevices;
46
+ static jmethodID _method_getDefaultAdapter;
47
+
48
+ // JNI descriptors for auto-registration
49
+ static const SimpleJNI::JNIDescriptor instance_descriptor;
50
+ static const SimpleJNI::StaticJNIDescriptor static_descriptor;
51
+ static const SimpleJNI::AutoRegister<BluetoothAdapter> registrar;
52
+ };
53
+
54
+ } // namespace Android
55
+ } // namespace SimpleBLE
@@ -0,0 +1,68 @@
1
+ #include "BluetoothDevice.h"
2
+
3
+ namespace SimpleBLE {
4
+ namespace Android {
5
+
6
+ // Static constants
7
+ const int BluetoothDevice::BOND_NONE;
8
+ const int BluetoothDevice::BOND_BONDING;
9
+ const int BluetoothDevice::BOND_BONDED;
10
+
11
+ const int BluetoothDevice::ADDRESS_TYPE_ANONYMOUS;
12
+ const int BluetoothDevice::ADDRESS_TYPE_PUBLIC;
13
+ const int BluetoothDevice::ADDRESS_TYPE_RANDOM;
14
+
15
+ const int BluetoothDevice::TRANSPORT_AUTO;
16
+ const int BluetoothDevice::TRANSPORT_BREDR;
17
+ const int BluetoothDevice::TRANSPORT_LE;
18
+
19
+ // Static JNI resources
20
+ SimpleJNI::GlobalRef<jclass> BluetoothDevice::_cls;
21
+ jmethodID BluetoothDevice::_method_getAddress;
22
+ jmethodID BluetoothDevice::_method_getName;
23
+ jmethodID BluetoothDevice::_method_getBondState;
24
+ jmethodID BluetoothDevice::_method_connectGatt;
25
+
26
+ // JNI descriptor and registrar
27
+ const SimpleJNI::JNIDescriptor BluetoothDevice::descriptor{
28
+ "android/bluetooth/BluetoothDevice", // Java class name
29
+ &_cls, // Where to store the jclass
30
+ { // Methods to preload
31
+ {"getAddress", "()Ljava/lang/String;", &_method_getAddress},
32
+ {"getName", "()Ljava/lang/String;", &_method_getName},
33
+ {"getBondState", "()I", &_method_getBondState},
34
+ {"connectGatt", "(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;I)Landroid/bluetooth/BluetoothGatt;", &_method_connectGatt}
35
+ }
36
+ };
37
+
38
+ const SimpleJNI::AutoRegister<BluetoothDevice> BluetoothDevice::registrar{&descriptor};
39
+
40
+ BluetoothDevice::BluetoothDevice(SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> obj) : _obj(obj) {
41
+ if (!_cls.get()) {
42
+ throw std::runtime_error("BluetoothDevice JNI resources not preloaded. Ensure SimpleJNI::Registrar::preload() is called.");
43
+ }
44
+ }
45
+
46
+ std::string BluetoothDevice::getAddress() {
47
+ if (!_obj) throw std::runtime_error("BluetoothDevice is not initialized");
48
+ return _obj.call_string_method(_method_getAddress);
49
+ }
50
+
51
+ std::string BluetoothDevice::getName() {
52
+ if (!_obj) throw std::runtime_error("BluetoothDevice is not initialized");
53
+ return _obj.call_string_method(_method_getName);
54
+ }
55
+
56
+ int BluetoothDevice::getBondState() {
57
+ if (!_obj) throw std::runtime_error("BluetoothDevice is not initialized");
58
+ return _obj.call_int_method(_method_getBondState);
59
+ }
60
+
61
+ BluetoothGatt BluetoothDevice::connectGatt(bool autoConnect, Bridge::BluetoothGattCallback& callback) {
62
+ if (!_obj) throw std::runtime_error("BluetoothDevice is not initialized");
63
+ return BluetoothGatt(
64
+ _obj.call_object_method(_method_connectGatt, nullptr, autoConnect, callback.get(), BluetoothDevice::TRANSPORT_LE));
65
+ }
66
+
67
+ } // namespace Android
68
+ } // namespace SimpleBLE
@@ -0,0 +1,54 @@
1
+ #pragma once
2
+
3
+ #include "BluetoothGatt.h"
4
+ #include "bridge/BluetoothGattCallback.h"
5
+ #include "simplejni/Common.hpp"
6
+ #include "simplejni/Registry.hpp"
7
+
8
+ namespace SimpleBLE {
9
+ namespace Android {
10
+
11
+ class BluetoothDevice {
12
+ public:
13
+ BluetoothDevice(SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> obj);
14
+ virtual ~BluetoothDevice() = default;
15
+
16
+ std::string getAddress();
17
+ // int getAddressType();
18
+ std::string getName();
19
+ int getBondState();
20
+ // void removeBond();
21
+
22
+ BluetoothGatt connectGatt(bool autoConnect, Bridge::BluetoothGattCallback& callback);
23
+
24
+ static const int BOND_NONE = 10;
25
+ static const int BOND_BONDING = 11;
26
+ static const int BOND_BONDED = 12;
27
+
28
+ static const int ADDRESS_TYPE_ANONYMOUS = 255;
29
+ static const int ADDRESS_TYPE_PUBLIC = 0;
30
+ static const int ADDRESS_TYPE_RANDOM = 1;
31
+
32
+ static const int TRANSPORT_AUTO = 0;
33
+ static const int TRANSPORT_BREDR = 1;
34
+ static const int TRANSPORT_LE = 2;
35
+
36
+ private:
37
+ SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> _obj;
38
+
39
+ // Static JNI resources managed by Registrar
40
+ static SimpleJNI::GlobalRef<jclass> _cls;
41
+ static jmethodID _method_getAddress;
42
+ // static jmethodID _method_getAddressType;
43
+ static jmethodID _method_getName;
44
+ static jmethodID _method_getBondState;
45
+ static jmethodID _method_removeBond;
46
+ static jmethodID _method_connectGatt;
47
+
48
+ // JNI descriptor for auto-registration
49
+ static const SimpleJNI::JNIDescriptor descriptor;
50
+ static const SimpleJNI::AutoRegister<BluetoothDevice> registrar;
51
+ };
52
+
53
+ } // namespace Android
54
+ } // namespace SimpleBLE
@@ -0,0 +1,115 @@
1
+ #include "BluetoothGatt.h"
2
+ #include <android/log.h>
3
+ #include <fmt/core.h>
4
+
5
+ #include "types/java/util/List.h"
6
+
7
+ namespace SimpleBLE {
8
+ namespace Android {
9
+
10
+ SimpleJNI::GlobalRef<jclass> BluetoothGatt::_cls;
11
+ jmethodID BluetoothGatt::_method_close = nullptr;
12
+ jmethodID BluetoothGatt::_method_connect = nullptr;
13
+ jmethodID BluetoothGatt::_method_disconnect = nullptr;
14
+ jmethodID BluetoothGatt::_method_discoverServices = nullptr;
15
+ jmethodID BluetoothGatt::_method_getServices = nullptr;
16
+ jmethodID BluetoothGatt::_method_readCharacteristic = nullptr;
17
+ jmethodID BluetoothGatt::_method_readDescriptor = nullptr;
18
+ jmethodID BluetoothGatt::_method_setCharacteristicNotification = nullptr;
19
+ jmethodID BluetoothGatt::_method_writeCharacteristic = nullptr;
20
+ jmethodID BluetoothGatt::_method_writeDescriptor = nullptr;
21
+ jmethodID BluetoothGatt::_method_requestConnectionPriority = nullptr;
22
+ // Define the JNI descriptor
23
+ const SimpleJNI::JNIDescriptor BluetoothGatt::descriptor{
24
+ "android/bluetooth/BluetoothGatt", // Java class name
25
+ &_cls, // Where to store the jclass
26
+ { // Methods to preload
27
+ {"close", "()V", &_method_close},
28
+ {"connect", "()Z", &_method_connect},
29
+ {"disconnect", "()V", &_method_disconnect},
30
+ {"discoverServices", "()Z", &_method_discoverServices},
31
+ {"getServices", "()Ljava/util/List;", &_method_getServices},
32
+ {"readCharacteristic", "(Landroid/bluetooth/BluetoothGattCharacteristic;)Z", &_method_readCharacteristic},
33
+ {"readDescriptor", "(Landroid/bluetooth/BluetoothGattDescriptor;)Z", &_method_readDescriptor},
34
+ {"setCharacteristicNotification", "(Landroid/bluetooth/BluetoothGattCharacteristic;Z)Z", &_method_setCharacteristicNotification},
35
+ {"writeCharacteristic", "(Landroid/bluetooth/BluetoothGattCharacteristic;)Z", &_method_writeCharacteristic},
36
+ {"writeDescriptor", "(Landroid/bluetooth/BluetoothGattDescriptor;)Z", &_method_writeDescriptor},
37
+ {"requestConnectionPriority", "(I)Z", &_method_requestConnectionPriority}
38
+ }};
39
+
40
+ const SimpleJNI::AutoRegister<BluetoothGatt> BluetoothGatt::registrar{&descriptor};
41
+
42
+ BluetoothGatt::BluetoothGatt() {}
43
+
44
+ BluetoothGatt::BluetoothGatt(SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> obj) : _obj(obj) {}
45
+
46
+ void BluetoothGatt::close() {
47
+ if (!_obj) throw std::runtime_error("BluetoothGatt is not initialized");
48
+ _obj.call_void_method(_method_close);
49
+ }
50
+
51
+ bool BluetoothGatt::connect() {
52
+ if (!_obj) throw std::runtime_error("BluetoothGatt is not initialized");
53
+ return _obj.call_boolean_method(_method_connect);
54
+ }
55
+
56
+ void BluetoothGatt::disconnect() {
57
+ if (!_obj) throw std::runtime_error("BluetoothGatt is not initialized");
58
+ _obj.call_void_method(_method_disconnect);
59
+ }
60
+
61
+ bool BluetoothGatt::discoverServices() {
62
+ if (!_obj) throw std::runtime_error("BluetoothGatt is not initialized");
63
+ return _obj.call_boolean_method(_method_discoverServices);
64
+ }
65
+
66
+ std::vector<BluetoothGattService> BluetoothGatt::getServices() {
67
+ if (!_obj) throw std::runtime_error("BluetoothGatt is not initialized");
68
+ SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> services_obj = _obj.call_object_method(_method_getServices);
69
+ if (!services_obj) return std::vector<BluetoothGattService>();
70
+
71
+ std::vector<BluetoothGattService> result;
72
+ // Assuming JNI::Types::List and related classes are adapted to SimpleJNI namespace
73
+ // This part might need further adjustment based on how List and Iterator are implemented in SimpleJNI
74
+ List list(services_obj.to_global());
75
+ Iterator iterator = list.iterator();
76
+ while (iterator.hasNext()) {
77
+ SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> service = iterator.next();
78
+ if (!service) continue;
79
+ result.push_back(BluetoothGattService(service));
80
+ }
81
+ return result;
82
+ }
83
+
84
+ bool BluetoothGatt::readCharacteristic(BluetoothGattCharacteristic characteristic) {
85
+ if (!_obj) throw std::runtime_error("BluetoothGatt is not initialized");
86
+ return _obj.call_boolean_method(_method_readCharacteristic, characteristic.getObject().get());
87
+ }
88
+
89
+ bool BluetoothGatt::readDescriptor(BluetoothGattDescriptor descriptor) {
90
+ if (!_obj) throw std::runtime_error("BluetoothGatt is not initialized");
91
+ return _obj.call_boolean_method(_method_readDescriptor, descriptor.getObject().get());
92
+ }
93
+
94
+ bool BluetoothGatt::setCharacteristicNotification(BluetoothGattCharacteristic characteristic, bool enable) {
95
+ if (!_obj) throw std::runtime_error("BluetoothGatt is not initialized");
96
+ return _obj.call_boolean_method(_method_setCharacteristicNotification, characteristic.getObject().get(), enable);
97
+ }
98
+
99
+ bool BluetoothGatt::writeCharacteristic(BluetoothGattCharacteristic characteristic) {
100
+ if (!_obj) throw std::runtime_error("BluetoothGatt is not initialized");
101
+ return _obj.call_boolean_method(_method_writeCharacteristic, characteristic.getObject().get());
102
+ }
103
+
104
+ bool BluetoothGatt::writeDescriptor(BluetoothGattDescriptor descriptor) {
105
+ if (!_obj) throw std::runtime_error("BluetoothGatt is not initialized");
106
+ return _obj.call_boolean_method(_method_writeDescriptor, descriptor.getObject().get());
107
+ }
108
+
109
+ bool BluetoothGatt::requestConnectionPriority(int connectionPriority) {
110
+ if (!_obj) throw std::runtime_error("BluetoothGatt is not initialized");
111
+ return _obj.call_boolean_method(_method_requestConnectionPriority, connectionPriority);
112
+ }
113
+
114
+ } // namespace Android
115
+ } // namespace SimpleBLE
@@ -0,0 +1,75 @@
1
+ #pragma once
2
+
3
+ #include "BluetoothGattService.h"
4
+ #include "simplejni/Common.hpp"
5
+ #include "simplejni/Registry.hpp"
6
+
7
+ #include <cstdint>
8
+ #include <vector>
9
+
10
+ namespace SimpleBLE {
11
+ namespace Android {
12
+
13
+ class BluetoothGatt {
14
+ public:
15
+
16
+ static constexpr int CONNECTION_PRIORITY_BALANCED = 0;
17
+ static constexpr int CONNECTION_PRIORITY_HIGH = 1;
18
+ static constexpr int CONNECTION_PRIORITY_LOW_POWER = 2;
19
+ static constexpr int CONNECTION_PRIORITY_DCK = 3;
20
+
21
+ BluetoothGatt();
22
+ BluetoothGatt(SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> obj);
23
+
24
+ void close();
25
+ bool connect();
26
+ void disconnect();
27
+ bool discoverServices();
28
+ std::vector<BluetoothGattService> getServices();
29
+
30
+ // void abortReliableWrite(BluetoothDevice mDevice);
31
+ // void abortReliableWrite();
32
+ // bool beginReliableWrite();
33
+ // bool executeReliableWrite();
34
+ // std::list<BluetoothDevice> getConnectedDevices();
35
+ // int getConnectionState(BluetoothDevice device);
36
+ // BluetoothDevice getDevice();
37
+ // std::list<BluetoothDevice> getDevicesMatchingConnectionStates(std::vector<int>& states);
38
+ // BluetoothGattService getService(UUID uuid);
39
+ // std::list<BluetoothGattService> getServices();
40
+ bool readCharacteristic(BluetoothGattCharacteristic characteristic);
41
+ bool readDescriptor(BluetoothGattDescriptor descriptor);
42
+ // void readPhy();
43
+ // bool readRemoteRssi();
44
+ bool requestConnectionPriority(int connectionPriority);
45
+ // bool requestMtu(int mtu);
46
+ bool setCharacteristicNotification(BluetoothGattCharacteristic characteristic, bool enable);
47
+ // void setPreferredPhy(int txPhy, int rxPhy, int phyOptions);
48
+ bool writeCharacteristic(BluetoothGattCharacteristic characteristic);
49
+ // int writeCharacteristic(BluetoothGattCharacteristic characteristic, std::vector<byte>& value, int writeType);
50
+ bool writeDescriptor(BluetoothGattDescriptor descriptor);
51
+ // int writeDescriptor(BluetoothGattDescriptor descriptor, std::vector<byte>& value);
52
+
53
+ private:
54
+ SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> _obj;
55
+
56
+ // Static JNI resources managed by Registrar
57
+ static SimpleJNI::GlobalRef<jclass> _cls;
58
+ static jmethodID _method_close;
59
+ static jmethodID _method_connect;
60
+ static jmethodID _method_disconnect;
61
+ static jmethodID _method_discoverServices;
62
+ static jmethodID _method_getServices;
63
+ static jmethodID _method_readCharacteristic;
64
+ static jmethodID _method_readDescriptor;
65
+ static jmethodID _method_setCharacteristicNotification;
66
+ static jmethodID _method_writeCharacteristic;
67
+ static jmethodID _method_writeDescriptor;
68
+ static jmethodID _method_requestConnectionPriority;
69
+ // JNI descriptor for auto-registration
70
+ static const SimpleJNI::JNIDescriptor descriptor;
71
+ static const SimpleJNI::AutoRegister<BluetoothGatt> registrar;
72
+ };
73
+
74
+ } // namespace Android
75
+ } // namespace SimpleBLE
@@ -0,0 +1,142 @@
1
+ //
2
+ // Created by Kevin Dewald on 5/17/24.
3
+ //
4
+
5
+ #include "BluetoothGattCharacteristic.h"
6
+ #include "types/java/util/UUID.h"
7
+ #include "types/java/util/List.h"
8
+
9
+ namespace SimpleBLE {
10
+ namespace Android {
11
+
12
+ // Static JNI resources
13
+ SimpleJNI::GlobalRef<jclass> BluetoothGattCharacteristic::_cls;
14
+ jmethodID BluetoothGattCharacteristic::_method_addDescriptor = nullptr;
15
+ jmethodID BluetoothGattCharacteristic::_method_getDescriptor = nullptr;
16
+ jmethodID BluetoothGattCharacteristic::_method_getDescriptors = nullptr;
17
+ jmethodID BluetoothGattCharacteristic::_method_getInstanceId = nullptr;
18
+ jmethodID BluetoothGattCharacteristic::_method_getPermissions = nullptr;
19
+ jmethodID BluetoothGattCharacteristic::_method_getProperties = nullptr;
20
+ jmethodID BluetoothGattCharacteristic::_method_getService = nullptr;
21
+ jmethodID BluetoothGattCharacteristic::_method_getUuid = nullptr;
22
+ jmethodID BluetoothGattCharacteristic::_method_getWriteType = nullptr;
23
+ jmethodID BluetoothGattCharacteristic::_method_setWriteType = nullptr;
24
+ jmethodID BluetoothGattCharacteristic::_method_setValue = nullptr;
25
+
26
+ // JNI descriptor for auto-registration
27
+ const SimpleJNI::JNIDescriptor BluetoothGattCharacteristic::descriptor{
28
+ "android/bluetooth/BluetoothGattCharacteristic", // Java class name
29
+ &_cls, // Where to store the jclass
30
+ { // Methods to preload
31
+ {"addDescriptor", "(Landroid/bluetooth/BluetoothGattDescriptor;)Z", &_method_addDescriptor},
32
+ {"getDescriptor", "(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattDescriptor;", &_method_getDescriptor},
33
+ {"getDescriptors", "()Ljava/util/List;", &_method_getDescriptors},
34
+ {"getInstanceId", "()I", &_method_getInstanceId},
35
+ {"getPermissions", "()I", &_method_getPermissions},
36
+ {"getProperties", "()I", &_method_getProperties},
37
+ {"getService", "()Landroid/bluetooth/BluetoothGattService;", &_method_getService},
38
+ {"getUuid", "()Ljava/util/UUID;", &_method_getUuid},
39
+ {"getWriteType", "()I", &_method_getWriteType},
40
+ {"setWriteType", "(I)V", &_method_setWriteType},
41
+ {"setValue", "([B)Z", &_method_setValue}
42
+ }};
43
+
44
+ // Auto-register the descriptor
45
+ const SimpleJNI::AutoRegister<BluetoothGattCharacteristic> BluetoothGattCharacteristic::registrar{&descriptor};
46
+
47
+ BluetoothGattCharacteristic::BluetoothGattCharacteristic() : _obj() {
48
+ if (!_cls.get()) {
49
+ throw std::runtime_error("BluetoothGattCharacteristic JNI resources not preloaded. Ensure SimpleJNI::Registrar::preload() is called.");
50
+ }
51
+
52
+ SimpleJNI::Env env;
53
+ jobject local_obj = env->NewObject(_cls.get(), env->GetMethodID(_cls.get(), "<init>", "()V"));
54
+ if (local_obj == nullptr) {
55
+ throw std::runtime_error("Failed to create BluetoothGattCharacteristic Java instance");
56
+ }
57
+
58
+ _obj = SimpleJNI::Object<SimpleJNI::GlobalRef, jobject>(local_obj);
59
+ env->DeleteLocalRef(local_obj);
60
+ }
61
+
62
+ BluetoothGattCharacteristic::BluetoothGattCharacteristic(SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> obj) : _obj(obj) {}
63
+
64
+ // bool BluetoothGattCharacteristic::addDescriptor(BluetoothGattDescriptor descriptor) {
65
+ // return _obj.call_boolean_method(_method_addDescriptor, descriptor.getObject());
66
+ // }
67
+ //
68
+ // BluetoothGattDescriptor BluetoothGattCharacteristic::getDescriptor(std::string uuid) {
69
+ // JNI::Env env;
70
+ // SimpleJNI::Object<SimpleJNI::LocalRef, jobject> descObj = _obj.call_object_method(_method_getDescriptor, env->NewStringUTF(uuid.c_str()));
71
+ // return BluetoothGattDescriptor(descObj);
72
+ // }
73
+ //
74
+ std::vector<BluetoothGattDescriptor> BluetoothGattCharacteristic::getDescriptors() {
75
+ if (!_obj) throw std::runtime_error("BluetoothGattCharacteristic is not initialized");
76
+
77
+ SimpleJNI::Object<SimpleJNI::LocalRef, jobject> descriptors_obj = _obj.call_object_method(_method_getDescriptors);
78
+ if (!descriptors_obj) throw std::runtime_error("Failed to get descriptors");
79
+
80
+ std::vector<BluetoothGattDescriptor> result;
81
+ List list(descriptors_obj.to_global());
82
+ Iterator iterator = list.iterator();
83
+ while (iterator.hasNext()) {
84
+ SimpleJNI::Object<SimpleJNI::GlobalRef, jobject> descriptor = iterator.next();
85
+
86
+ if (!descriptor) continue;
87
+ result.push_back(BluetoothGattDescriptor(descriptor));
88
+ }
89
+
90
+ return result;
91
+ }
92
+
93
+ int BluetoothGattCharacteristic::getInstanceId() {
94
+ if (!_obj) throw std::runtime_error("BluetoothGattCharacteristic is not initialized");
95
+ return _obj.call_int_method(_method_getInstanceId);
96
+ }
97
+
98
+ int BluetoothGattCharacteristic::getPermissions() {
99
+ if (!_obj) throw std::runtime_error("BluetoothGattCharacteristic is not initialized");
100
+ return _obj.call_int_method(_method_getPermissions);
101
+ }
102
+
103
+ int BluetoothGattCharacteristic::getProperties() {
104
+ if (!_obj) throw std::runtime_error("BluetoothGattCharacteristic is not initialized");
105
+ return _obj.call_int_method(_method_getProperties);
106
+ }
107
+
108
+ std::string BluetoothGattCharacteristic::getUuid() {
109
+ if (!_obj) throw std::runtime_error("BluetoothGattCharacteristic is not initialized");
110
+
111
+ SimpleJNI::Object<SimpleJNI::LocalRef, jobject> uuidObj = _obj.call_object_method(_method_getUuid);
112
+ if (!uuidObj) throw std::runtime_error("Failed to get UUID");
113
+
114
+ return UUID(uuidObj.to_global()).toString();
115
+ }
116
+
117
+ int BluetoothGattCharacteristic::getWriteType() {
118
+ if (!_obj) throw std::runtime_error("BluetoothGattCharacteristic is not initialized");
119
+ return _obj.call_int_method(_method_getWriteType);
120
+ }
121
+
122
+ void BluetoothGattCharacteristic::setWriteType(int writeType) {
123
+ if (!_obj) throw std::runtime_error("BluetoothGattCharacteristic is not initialized");
124
+ _obj.call_void_method(_method_setWriteType, writeType);
125
+ }
126
+
127
+ bool BluetoothGattCharacteristic::setValue(const std::vector<uint8_t>& value) {
128
+ if (!_obj) throw std::runtime_error("BluetoothGattCharacteristic is not initialized");
129
+
130
+ SimpleJNI::ByteArray<SimpleJNI::LocalRef> jni_array_wrapper(value);
131
+
132
+ if (!jni_array_wrapper) {
133
+ throw std::runtime_error("Failed to create Java byte array for setValue using SimpleJNI::ByteArray");
134
+ }
135
+
136
+ bool success = _obj.call_boolean_method(_method_setValue, jni_array_wrapper.get());
137
+
138
+ return success;
139
+ }
140
+
141
+ } // namespace Android
142
+ } // namespace SimpleBLE