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,60 @@
1
+ #include <chrono>
2
+ #include <iostream>
3
+ #include <thread>
4
+ #include <vector>
5
+
6
+ #include "utils.hpp"
7
+
8
+ #include "simpleble/SimpleBLE.h"
9
+
10
+ using namespace std::chrono_literals;
11
+
12
+ int main() {
13
+ auto adapter_optional = Utils::getAdapter();
14
+
15
+ if (!adapter_optional.has_value()) {
16
+ return EXIT_FAILURE;
17
+ }
18
+
19
+ auto adapter = adapter_optional.value();
20
+
21
+ std::vector<SimpleBLE::Peripheral> peripherals;
22
+
23
+ adapter.set_callback_on_scan_found([&](SimpleBLE::Peripheral peripheral) { peripherals.push_back(peripheral); });
24
+
25
+ // Scan for 5 seconds and return.
26
+ adapter.scan_for(5000);
27
+
28
+ std::cout << "The following devices were found:" << std::endl;
29
+ for (size_t i = 0; i < peripherals.size(); i++) {
30
+ std::cout << "[" << i << "] " << peripherals[i].identifier() << " [" << peripherals[i].address() << "]"
31
+ << std::endl;
32
+ }
33
+
34
+ auto selection = Utils::getUserInputInt("Please select a device to connect to", peripherals.size() - 1);
35
+ if (!selection.has_value()) {
36
+ return EXIT_FAILURE;
37
+ }
38
+
39
+ auto peripheral = peripherals[selection.value()];
40
+ peripheral.set_callback_on_connected([]() { std::cout << "Connected callback triggered" << std::endl; });
41
+ peripheral.set_callback_on_disconnected([]() { std::cout << "Disconnected callback triggered" << std::endl; });
42
+
43
+ std::cout << "Connecting to " << peripheral.identifier() << " [" << peripheral.address() << "]" << std::endl;
44
+
45
+ for (size_t i = 0; i < 5; i++) {
46
+ try {
47
+ peripheral.connect();
48
+ std::cout << "Successfully connected." << std::endl;
49
+ std::this_thread::sleep_for(2s);
50
+
51
+ peripheral.disconnect();
52
+ std::cout << "Successfully disconnected." << std::endl;
53
+ } catch (const std::exception& ex) {
54
+ std::cout << "Failed at " << i << " with: " << ex.what() << std::endl;
55
+ throw;
56
+ }
57
+ }
58
+
59
+ return EXIT_SUCCESS;
60
+ }
@@ -0,0 +1,85 @@
1
+ #include <chrono>
2
+ #include <iomanip>
3
+ #include <iostream>
4
+ #include <thread>
5
+ #include <vector>
6
+
7
+ #include "utils.hpp"
8
+
9
+ #include "simpleble/SimpleBLE.h"
10
+
11
+ using namespace std::chrono_literals;
12
+
13
+ int main() {
14
+ auto adapter_optional = Utils::getAdapter();
15
+
16
+ if (!adapter_optional.has_value()) {
17
+ return EXIT_FAILURE;
18
+ }
19
+
20
+ auto adapter = adapter_optional.value();
21
+
22
+ std::vector<SimpleBLE::Peripheral> peripherals;
23
+
24
+ adapter.set_callback_on_scan_found([&](SimpleBLE::Peripheral peripheral) {
25
+ std::cout << "Found device: " << peripheral.identifier() << " [" << peripheral.address() << "]" << std::endl;
26
+ if (peripheral.is_connectable()) {
27
+ peripherals.push_back(peripheral);
28
+ }
29
+ });
30
+
31
+ adapter.set_callback_on_scan_start([]() { std::cout << "Scan started." << std::endl; });
32
+ adapter.set_callback_on_scan_stop([]() { std::cout << "Scan stopped." << std::endl; });
33
+ // Scan for 5 seconds and return.
34
+ adapter.scan_for(5000);
35
+
36
+ std::cout << "The following devices were found:" << std::endl;
37
+ for (size_t i = 0; i < peripherals.size(); i++) {
38
+ std::cout << "[" << i << "] " << peripherals[i].identifier() << " [" << peripherals[i].address() << "]"
39
+ << std::endl;
40
+ }
41
+
42
+ auto selection = Utils::getUserInputInt("Please select a device to connect to", peripherals.size() - 1);
43
+ if (!selection.has_value()) {
44
+ return EXIT_FAILURE;
45
+ }
46
+
47
+ auto peripheral = peripherals[selection.value()];
48
+ std::cout << "Connecting to " << peripheral.identifier() << " [" << peripheral.address() << "]" << std::endl;
49
+ peripheral.connect();
50
+
51
+ std::cout << "Successfully connected, printing services and characteristics.." << std::endl;
52
+
53
+ // Store all service and characteristic uuids in a vector.
54
+ std::vector<std::pair<SimpleBLE::BluetoothUUID, SimpleBLE::BluetoothUUID>> uuids;
55
+ for (auto service : peripheral.services()) {
56
+ for (auto characteristic : service.characteristics()) {
57
+ if (characteristic.can_notify()) {
58
+ uuids.push_back(std::make_pair(service.uuid(), characteristic.uuid()));
59
+ }
60
+ }
61
+ }
62
+
63
+ std::cout << "The following services and characteristics were found:" << std::endl;
64
+ for (size_t i = 0; i < uuids.size(); i++) {
65
+ std::cout << "[" << i << "] " << uuids[i].first << " " << uuids[i].second << std::endl;
66
+ }
67
+
68
+ selection = Utils::getUserInputInt("Please select a characteristic to notify", uuids.size() - 1);
69
+
70
+ if (!selection.has_value()) {
71
+ return EXIT_FAILURE;
72
+ }
73
+
74
+ // Subscribe to the characteristic.
75
+ peripheral.notify(uuids[selection.value()].first, uuids[selection.value()].second,
76
+ [&](SimpleBLE::ByteArray bytes) { std::cout << "Received: " << bytes << std::endl; });
77
+
78
+ std::this_thread::sleep_for(5s);
79
+
80
+ peripheral.unsubscribe(uuids[selection.value()].first, uuids[selection.value()].second);
81
+
82
+ peripheral.disconnect();
83
+
84
+ return EXIT_SUCCESS;
85
+ }
@@ -0,0 +1,101 @@
1
+ #include <atomic>
2
+ #include <chrono>
3
+ #include <iomanip>
4
+ #include <iostream>
5
+ #include <thread>
6
+ #include <vector>
7
+
8
+ #include "utils.hpp"
9
+
10
+ #include "simpleble/SimpleBLE.h"
11
+
12
+ using namespace std::chrono_literals;
13
+
14
+ int main() {
15
+ std::vector<SimpleBLE::Peripheral> aux_p; // Helper vector to hold scan results.
16
+
17
+ // Fetch the adapter object that will be used for this test.
18
+ auto adapter_optional = Utils::getAdapter();
19
+ if (!adapter_optional.has_value()) {
20
+ return EXIT_FAILURE;
21
+ }
22
+ auto adapter = adapter_optional.value();
23
+
24
+ // Configure adapter callbacks.
25
+ adapter.set_callback_on_scan_found([&](SimpleBLE::Peripheral peripheral) {
26
+ std::cout << "Found device: " << peripheral.identifier() << " [" << peripheral.address() << "]" << std::endl;
27
+ aux_p.push_back(peripheral);
28
+ });
29
+ adapter.set_callback_on_scan_start([]() { std::cout << "Scan started." << std::endl; });
30
+ adapter.set_callback_on_scan_stop([]() { std::cout << "Scan stopped." << std::endl; });
31
+
32
+ // Create two uninitialized peripherals that will hold our connections for this example.
33
+ SimpleBLE::Peripheral peripherals[2];
34
+
35
+ // Variable that enables printing per peripheral.
36
+ std::atomic_bool print_allowed{false};
37
+
38
+ for (size_t iter = 0; iter < 2; iter++) {
39
+ aux_p.clear();
40
+
41
+ adapter.scan_for(5000);
42
+
43
+ std::cout << "The following devices were found:" << std::endl;
44
+ for (size_t i = 0; i < aux_p.size(); i++) {
45
+ std::cout << "[" << i << "] " << aux_p[i].identifier() << " [" << aux_p[i].address() << "]" << std::endl;
46
+ }
47
+
48
+ auto selection = Utils::getUserInputInt("Please select a device to connect to", aux_p.size() - 1);
49
+ if (!selection.has_value()) {
50
+ return EXIT_FAILURE;
51
+ }
52
+
53
+ peripherals[iter] = aux_p[selection.value()];
54
+
55
+ std::cout << "Connecting to " << peripherals[iter].identifier() << " [" << peripherals[iter].address() << "]"
56
+ << std::endl;
57
+ peripherals[iter].connect();
58
+
59
+ std::cout << "Successfully connected, printing services and characteristics.." << std::endl;
60
+
61
+ // Store all service and characteristic uuids in a vector.
62
+ std::vector<std::pair<SimpleBLE::BluetoothUUID, SimpleBLE::BluetoothUUID>> uuids;
63
+ for (auto service : peripherals[iter].services()) {
64
+ for (auto characteristic : service.characteristics()) {
65
+ uuids.push_back(std::make_pair(service.uuid(), characteristic.uuid()));
66
+ }
67
+ }
68
+
69
+ std::cout << "The following services and characteristics were found:" << std::endl;
70
+ for (size_t i = 0; i < uuids.size(); i++) {
71
+ std::cout << "[" << i << "] " << uuids[i].first << " " << uuids[i].second << std::endl;
72
+ }
73
+
74
+ selection = Utils::getUserInputInt("Please select a characteristic to read", uuids.size() - 1);
75
+
76
+ if (!selection.has_value()) {
77
+ return EXIT_FAILURE;
78
+ }
79
+
80
+ // Subscribe to the characteristic.
81
+ peripherals[iter].notify(uuids[selection.value()].first, uuids[selection.value()].second,
82
+ [&, iter](SimpleBLE::ByteArray bytes) {
83
+ if (print_allowed) {
84
+ std::cout << "Peripheral " << iter << " received: " << bytes << std::endl;
85
+ }
86
+ });
87
+ }
88
+
89
+ // Once both devices are connected and streaming, enable printing for 5 seconds, then disconnect from both.
90
+ print_allowed = true;
91
+
92
+ std::this_thread::sleep_for(5s);
93
+
94
+ peripherals[1].disconnect();
95
+
96
+ std::this_thread::sleep_for(3s);
97
+
98
+ peripherals[0].disconnect();
99
+
100
+ return EXIT_SUCCESS;
101
+ }
@@ -0,0 +1,43 @@
1
+ #include <iostream>
2
+ #include <thread>
3
+
4
+ #include "simpleble/Adapter.h"
5
+ #include "simpleble/Utils.h"
6
+
7
+ int main() {
8
+ std::cout << "Using SimpleBLE version: " << SimpleBLE::get_simpleble_version() << std::endl;
9
+ std::cout << "Bluetooth enabled: " << SimpleBLE::Adapter::bluetooth_enabled() << std::endl;
10
+
11
+ auto adapter_list = SimpleBLE::Adapter::get_adapters();
12
+
13
+ if (adapter_list.empty()) {
14
+ std::cout << "No adapter found" << std::endl;
15
+ return EXIT_FAILURE;
16
+ }
17
+
18
+ for (auto& adapter : adapter_list) {
19
+ std::cout << "Adapter: " << adapter.identifier() << " [" << adapter.address() << "]" << std::endl;
20
+
21
+ adapter.set_callback_on_power_on([&]() {
22
+ std::cout << "Adapter powered on" << std::endl;
23
+ });
24
+
25
+ adapter.set_callback_on_power_off([&]() {
26
+ std::cout << "Adapter powered off" << std::endl;
27
+ });
28
+
29
+ std::cout << "Adapter powered: " << adapter.is_powered() << std::endl;
30
+
31
+ std::cout << "Powering off adapter" << std::endl;
32
+ adapter.power_off();
33
+ std::cout << "Adapter powered: " << adapter.is_powered() << std::endl;
34
+
35
+ std::this_thread::sleep_for(std::chrono::seconds(5));
36
+
37
+ std::cout << "Powering on adapter" << std::endl;
38
+ adapter.power_on();
39
+ std::cout << "Adapter powered: " << adapter.is_powered() << std::endl;
40
+ }
41
+
42
+ return EXIT_SUCCESS;
43
+ }
@@ -0,0 +1,82 @@
1
+ #include <chrono>
2
+ #include <iostream>
3
+ #include <thread>
4
+ #include <vector>
5
+
6
+ #include "utils.hpp"
7
+
8
+ #include "simpleble/SimpleBLE.h"
9
+
10
+ using namespace std::chrono_literals;
11
+
12
+ int main() {
13
+ auto adapter_optional = Utils::getAdapter();
14
+
15
+ if (!adapter_optional.has_value()) {
16
+ return EXIT_FAILURE;
17
+ }
18
+
19
+ auto adapter = adapter_optional.value();
20
+
21
+ std::vector<SimpleBLE::Peripheral> peripherals;
22
+
23
+ adapter.set_callback_on_scan_found([&](SimpleBLE::Peripheral peripheral) {
24
+ std::cout << "Found device: " << peripheral.identifier() << " [" << peripheral.address() << "]" << std::endl;
25
+ if (peripheral.is_connectable()) {
26
+ peripherals.push_back(peripheral);
27
+ }
28
+ });
29
+
30
+ adapter.set_callback_on_scan_start([]() { std::cout << "Scan started." << std::endl; });
31
+ adapter.set_callback_on_scan_stop([]() { std::cout << "Scan stopped." << std::endl; });
32
+ // Scan for 5 seconds and return.
33
+ adapter.scan_for(5000);
34
+
35
+ std::cout << "The following devices were found:" << std::endl;
36
+ for (size_t i = 0; i < peripherals.size(); i++) {
37
+ std::cout << "[" << i << "] " << peripherals[i].identifier() << " [" << peripherals[i].address() << "]"
38
+ << std::endl;
39
+ }
40
+
41
+ auto selection = Utils::getUserInputInt("Please select a device to connect to", peripherals.size() - 1);
42
+
43
+ if (!selection.has_value()) {
44
+ return EXIT_FAILURE;
45
+ }
46
+
47
+ auto peripheral = peripherals[selection.value()];
48
+ std::cout << "Connecting to " << peripheral.identifier() << " [" << peripheral.address() << "]" << std::endl;
49
+ peripheral.connect();
50
+
51
+ std::cout << "Successfully connected, printing services and characteristics.." << std::endl;
52
+
53
+ // Store all service and characteristic uuids in a vector.
54
+ std::vector<std::pair<SimpleBLE::BluetoothUUID, SimpleBLE::BluetoothUUID>> uuids;
55
+ for (auto service : peripheral.services()) {
56
+ for (auto characteristic : service.characteristics()) {
57
+ uuids.push_back(std::make_pair(service.uuid(), characteristic.uuid()));
58
+ }
59
+ }
60
+
61
+ std::cout << "The following services and characteristics were found:" << std::endl;
62
+ for (size_t i = 0; i < uuids.size(); i++) {
63
+ std::cout << "[" << i << "] " << uuids[i].first << " " << uuids[i].second << std::endl;
64
+ }
65
+
66
+ selection = Utils::getUserInputInt("Select a characteristic to read", uuids.size() - 1);
67
+
68
+ if (!selection.has_value()) {
69
+ return EXIT_FAILURE;
70
+ }
71
+
72
+ // Attempt to read the characteristic 5 times in 5 seconds.
73
+ for (size_t i = 0; i < 5; i++) {
74
+ SimpleBLE::ByteArray rx_data = peripheral.read(uuids[selection.value()].first, uuids[selection.value()].second);
75
+ std::cout << "Characteristic content is: " << rx_data << std::endl;
76
+ std::this_thread::sleep_for(1s);
77
+ }
78
+
79
+ peripheral.disconnect();
80
+
81
+ return EXIT_SUCCESS;
82
+ }
@@ -0,0 +1,62 @@
1
+ #include <iomanip>
2
+ #include <iostream>
3
+ #include <sstream>
4
+
5
+ #include "utils.hpp"
6
+
7
+ #include "simpleble/Adapter.h"
8
+
9
+ int main() {
10
+ auto adapter_optional = Utils::getAdapter();
11
+
12
+ if (!adapter_optional.has_value()) {
13
+ return EXIT_FAILURE;
14
+ }
15
+
16
+ auto adapter = adapter_optional.value();
17
+
18
+ adapter.set_callback_on_scan_found([](SimpleBLE::Peripheral peripheral) {
19
+ std::cout << "Found device: " << peripheral.identifier() << " [" << peripheral.address() << "] "
20
+ << peripheral.rssi() << " dBm" << std::endl;
21
+ });
22
+
23
+ adapter.set_callback_on_scan_updated([](SimpleBLE::Peripheral peripheral) {
24
+ std::cout << "Updated device: " << peripheral.identifier() << " [" << peripheral.address() << "] "
25
+ << peripheral.rssi() << " dBm" << std::endl;
26
+ });
27
+
28
+ adapter.set_callback_on_scan_start([]() { std::cout << "Scan started." << std::endl; });
29
+
30
+ adapter.set_callback_on_scan_stop([]() { std::cout << "Scan stopped." << std::endl; });
31
+
32
+ // Scan for 5 seconds.
33
+ adapter.scan_for(5000);
34
+
35
+ std::cout << "Scan complete." << std::endl;
36
+
37
+ std::vector<SimpleBLE::Peripheral> peripherals = adapter.scan_get_results();
38
+ std::cout << "The following devices were found:" << std::endl;
39
+ for (size_t i = 0; i < peripherals.size(); i++) {
40
+ std::string connectable_string = peripherals[i].is_connectable() ? "Connectable" : "Non-Connectable";
41
+ std::string peripheral_string = peripherals[i].identifier() + " [" + peripherals[i].address() + "] " +
42
+ std::to_string(peripherals[i].rssi()) + " dBm";
43
+
44
+ std::cout << "[" << i << "] " << peripheral_string << " " << connectable_string << std::endl;
45
+
46
+ std::cout << " Tx Power: " << std::dec << peripherals[i].tx_power() << " dBm" << std::endl;
47
+ std::cout << " Address Type: " << peripherals[i].address_type() << std::endl;
48
+
49
+ std::vector<SimpleBLE::Service> services = peripherals[i].services();
50
+ for (auto& service : services) {
51
+ std::cout << " Service UUID: " << service.uuid() << std::endl;
52
+ std::cout << " Service data: " << service.data() << std::endl;
53
+ }
54
+
55
+ std::map<uint16_t, SimpleBLE::ByteArray> manufacturer_data = peripherals[i].manufacturer_data();
56
+ for (auto& [manufacturer_id, data] : manufacturer_data) {
57
+ std::cout << " Manufacturer ID: " << manufacturer_id << std::endl;
58
+ std::cout << " Manufacturer data: " << data << std::endl;
59
+ }
60
+ }
61
+ return EXIT_SUCCESS;
62
+ }
@@ -0,0 +1,59 @@
1
+ #include "utils.hpp"
2
+
3
+ #include <iomanip>
4
+ #include <iostream>
5
+
6
+ std::optional<std::size_t> Utils::getUserInputInt(const std::string& line, std::size_t max) {
7
+ std::size_t ret;
8
+
9
+ while (!std::cin.eof()) {
10
+ std::cout << line << " (0-" << max << "): ";
11
+ std::cin >> ret;
12
+
13
+ if (!std::cin) {
14
+ return {};
15
+ }
16
+
17
+ if (ret <= max) {
18
+ return ret;
19
+ }
20
+ }
21
+ return {};
22
+ }
23
+
24
+ std::optional<SimpleBLE::Adapter> Utils::getAdapter() {
25
+ if (!SimpleBLE::Adapter::bluetooth_enabled()) {
26
+ std::cout << "Bluetooth is not enabled!" << std::endl;
27
+ return {};
28
+ }
29
+
30
+ auto adapter_list = SimpleBLE::Adapter::get_adapters();
31
+
32
+ // no adapter found
33
+ if (adapter_list.empty()) {
34
+ std::cerr << "No adapter was found." << std::endl;
35
+ return {};
36
+ }
37
+
38
+ // only one found, returning directly
39
+ if (adapter_list.size() == 1) {
40
+ auto adapter = adapter_list.at(0);
41
+ std::cout << "Using adapter: " << adapter.identifier() << " [" << adapter.address() << "]" << std::endl;
42
+ return adapter;
43
+ }
44
+
45
+ // multiple adapters found, ask user to select one
46
+ std::cout << "Available adapters:" << std::endl;
47
+ int i = 0;
48
+ for (auto& adapter : adapter_list) {
49
+ std::cout << "[" << i++ << "] " << adapter.identifier() << " [" << adapter.address() << "]" << std::endl;
50
+ }
51
+
52
+ auto adapter_selection = Utils::getUserInputInt("Select an adapter", adapter_list.size() - 1);
53
+
54
+ if (!adapter_selection.has_value()) {
55
+ return {};
56
+ }
57
+
58
+ return adapter_list[adapter_selection.value()];
59
+ }
@@ -0,0 +1,27 @@
1
+ #ifndef UTILS_HPP
2
+ #define UTILS_HPP
3
+
4
+ #include <optional>
5
+ #include "simpleble/SimpleBLE.h"
6
+
7
+ namespace Utils {
8
+ /**
9
+ * @brief Function to retrieve the adapter easily
10
+ *
11
+ * @return the adapter or an empty optional
12
+ */
13
+ std::optional<SimpleBLE::Adapter> getAdapter();
14
+
15
+ /**
16
+ * @brief Function to get a user input as size_t, it's used in all examples to select an index
17
+ *
18
+ * @param line the text asking for something to the user
19
+ * @param max the maximum value that can be written
20
+ *
21
+ * @return the value or empty optional
22
+ */
23
+ std::optional<std::size_t> getUserInputInt(const std::string& line, std::size_t max);
24
+
25
+ } // namespace Utils
26
+
27
+ #endif
@@ -0,0 +1,81 @@
1
+ #include <iomanip>
2
+ #include <iostream>
3
+ #include <vector>
4
+
5
+ #include "utils.hpp"
6
+
7
+ #include "simpleble/SimpleBLE.h"
8
+
9
+ int main() {
10
+ auto adapter_optional = Utils::getAdapter();
11
+
12
+ if (!adapter_optional.has_value()) {
13
+ return EXIT_FAILURE;
14
+ }
15
+
16
+ auto adapter = adapter_optional.value();
17
+
18
+ std::vector<SimpleBLE::Peripheral> peripherals;
19
+
20
+ adapter.set_callback_on_scan_found([&](SimpleBLE::Peripheral peripheral) {
21
+ std::cout << "Found device: " << peripheral.identifier() << " [" << peripheral.address() << "]" << std::endl;
22
+ if (peripheral.is_connectable()) {
23
+ peripherals.push_back(peripheral);
24
+ }
25
+ });
26
+
27
+ adapter.set_callback_on_scan_start([]() { std::cout << "Scan started." << std::endl; });
28
+ adapter.set_callback_on_scan_stop([]() { std::cout << "Scan stopped." << std::endl; });
29
+ // Scan for 5 seconds and return.
30
+ adapter.scan_for(5000);
31
+
32
+ std::cout << "The following devices were found:" << std::endl;
33
+ for (size_t i = 0; i < peripherals.size(); i++) {
34
+ std::cout << "[" << i << "] " << peripherals[i].identifier() << " [" << peripherals[i].address() << "]"
35
+ << std::endl;
36
+ }
37
+
38
+ auto selection = Utils::getUserInputInt("Please select a device to connect to: ", peripherals.size() - 1);
39
+
40
+ if (!selection.has_value()) {
41
+ return EXIT_FAILURE;
42
+ }
43
+ auto peripheral = peripherals[selection.value()];
44
+ std::cout << "Connecting to " << peripheral.identifier() << " [" << peripheral.address() << "]" << std::endl;
45
+ peripheral.connect();
46
+
47
+ std::cout << "Successfully connected, printing services and characteristics.." << std::endl;
48
+
49
+ // Store all service and characteristic uuids in a vector.
50
+ std::vector<std::pair<SimpleBLE::BluetoothUUID, SimpleBLE::BluetoothUUID>> uuids;
51
+ for (auto service : peripheral.services()) {
52
+ for (auto characteristic : service.characteristics()) {
53
+ uuids.push_back(std::make_pair(service.uuid(), characteristic.uuid()));
54
+ }
55
+ }
56
+
57
+ std::cout << "The following services and characteristics were found:" << std::endl;
58
+ for (size_t i = 0; i < uuids.size(); i++) {
59
+ std::cout << "[" << i << "] " << uuids[i].first << " " << uuids[i].second << std::endl;
60
+ }
61
+
62
+ selection = Utils::getUserInputInt("Please select a characteristic to write into: ", uuids.size() - 1);
63
+
64
+ std::string contents;
65
+ std::cout << "Please write the contents to be sent: ";
66
+ std::cin >> contents;
67
+
68
+ if (!selection.has_value()) {
69
+ return EXIT_FAILURE;
70
+ }
71
+
72
+ SimpleBLE::ByteArray bytes = SimpleBLE::ByteArray::fromHex(contents);
73
+
74
+ // NOTE: Alternatively, `write_command` can be used to write to a characteristic too.
75
+ // `write_request` is for unacknowledged writes.
76
+ // `write_command` is for acknowledged writes.
77
+ peripheral.write_request(uuids[selection.value()].first, uuids[selection.value()].second, bytes);
78
+
79
+ peripheral.disconnect();
80
+ return EXIT_SUCCESS;
81
+ }