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,141 @@
1
+ #include <simplebluez/Bluez.h>
2
+ #include <simplebluez/Exceptions.h>
3
+
4
+ #include <atomic>
5
+ #include <chrono>
6
+ #include <cstdlib>
7
+ #include <iomanip>
8
+ #include <iostream>
9
+ #include <thread>
10
+
11
+ SimpleBluez::Bluez bluez;
12
+
13
+ std::atomic_bool async_thread_active = true;
14
+ void async_thread_function() {
15
+ while (async_thread_active) {
16
+ bluez.run_async();
17
+ std::this_thread::sleep_for(std::chrono::microseconds(100));
18
+ }
19
+ }
20
+
21
+ void millisecond_delay(int ms) {
22
+ for (int i = 0; i < ms; i++) {
23
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
24
+ }
25
+ }
26
+
27
+ void print_byte_array(SimpleBluez::ByteArray& bytes) {
28
+ for (auto byte : bytes) {
29
+ std::cout << std::hex << std::setfill('0') << (uint32_t)((uint8_t)byte) << " ";
30
+ break;
31
+ }
32
+ std::cout << std::endl;
33
+ }
34
+
35
+ std::vector<std::shared_ptr<SimpleBluez::Device>> peripherals;
36
+
37
+ int main(int argc, char* argv[]) {
38
+ int selection = -1;
39
+
40
+ bluez.init();
41
+ std::thread* async_thread = new std::thread(async_thread_function);
42
+
43
+ auto adapters = bluez.get_adapters();
44
+ std::cout << "Available adapters:" << std::endl;
45
+ for (int i = 0; i < adapters.size(); i++) {
46
+ std::cout << "[" << i << "] " << adapters[i]->identifier() << " [" << adapters[i]->address() << "]"
47
+ << std::endl;
48
+ }
49
+
50
+ std::cout << "Please select an adapter to scan: ";
51
+ std::cin >> selection;
52
+ if (selection < 0 || selection >= adapters.size()) {
53
+ std::cout << "Invalid selection" << std::endl;
54
+ return 1;
55
+ }
56
+
57
+ auto adapter = adapters[selection];
58
+ std::cout << "Scanning " << adapter->identifier() << " [" << adapter->address() << "]" << std::endl;
59
+
60
+ SimpleBluez::Adapter::DiscoveryFilter filter;
61
+ filter.Transport = SimpleBluez::Adapter::DiscoveryFilter::TransportType::LE;
62
+ adapter->discovery_filter(filter);
63
+
64
+ adapter->set_on_device_updated([](std::shared_ptr<SimpleBluez::Device> device) {
65
+ if (std::find(peripherals.begin(), peripherals.end(), device) == peripherals.end()) {
66
+ std::cout << "Found device: " << device->name() << " [" << device->address() << "]" << std::endl;
67
+ peripherals.push_back(device);
68
+ }
69
+ });
70
+
71
+ adapter->discovery_start();
72
+ millisecond_delay(3000);
73
+ adapter->discovery_stop();
74
+
75
+ std::cout << "The following devices were found:" << std::endl;
76
+ for (int i = 0; i < peripherals.size(); i++) {
77
+ std::cout << "[" << i << "] " << peripherals[i]->name() << " [" << peripherals[i]->address() << "]"
78
+ << std::endl;
79
+ }
80
+
81
+ std::cout << "Please select a device to connect to: ";
82
+ std::cin >> selection;
83
+
84
+ if (selection >= 0 && selection < peripherals.size()) {
85
+ auto peripheral = peripherals[selection];
86
+ std::cout << "Connecting to " << peripheral->name() << " [" << peripheral->address() << "]" << std::endl;
87
+
88
+ for (int attempt = 0; attempt < 3; attempt++) {
89
+ try {
90
+ peripheral->connect();
91
+ } catch (SimpleDBus::Exception::SendFailed& e) {
92
+ millisecond_delay(100);
93
+ }
94
+ }
95
+
96
+ if (!peripheral->connected() || !peripheral->services_resolved()) {
97
+ std::cout << "Failed to connect to " << peripheral->name() << " [" << peripheral->address() << "]"
98
+ << std::endl;
99
+ return 1;
100
+ }
101
+
102
+ // Store all services and characteristics in a vector.
103
+ std::vector<std::pair<std::shared_ptr<SimpleBluez::Service>, std::shared_ptr<SimpleBluez::Characteristic>>>
104
+ char_list;
105
+ for (auto service : peripheral->services()) {
106
+ for (auto characteristic : service->characteristics()) {
107
+ char_list.push_back(std::make_pair(service, characteristic));
108
+ }
109
+ }
110
+
111
+ std::cout << "The following services and characteristics were found:" << std::endl;
112
+ for (int i = 0; i < char_list.size(); i++) {
113
+ std::cout << "[" << i << "] " << char_list[i].first->uuid() << " " << char_list[i].second->uuid()
114
+ << std::endl;
115
+ }
116
+
117
+ std::cout << "Please select a characteristic to read: ";
118
+ std::cin >> selection;
119
+
120
+ if (selection >= 0 && selection < char_list.size()) {
121
+ SimpleBluez::ByteArray value = char_list[selection].second->read();
122
+ std::cout << "Characteristic contents were: ";
123
+ print_byte_array(value);
124
+ }
125
+
126
+ peripheral->disconnect();
127
+
128
+ // Sleep for an additional second before returning.
129
+ // If there are any unexpected events, this example will help debug them.
130
+ millisecond_delay(1000);
131
+ }
132
+
133
+ async_thread_active = false;
134
+ while (!async_thread->joinable()) {
135
+ millisecond_delay(10);
136
+ }
137
+ async_thread->join();
138
+ delete async_thread;
139
+
140
+ return 0;
141
+ }
@@ -0,0 +1,85 @@
1
+ #include <simplebluez/Bluez.h>
2
+
3
+ #include <atomic>
4
+ #include <chrono>
5
+ #include <cstdlib>
6
+ #include <iomanip>
7
+ #include <iostream>
8
+ #include <thread>
9
+
10
+ SimpleBluez::Bluez bluez;
11
+
12
+ std::atomic_bool async_thread_active = true;
13
+ void async_thread_function() {
14
+ while (async_thread_active) {
15
+ bluez.run_async();
16
+ std::this_thread::sleep_for(std::chrono::microseconds(100));
17
+ }
18
+ }
19
+
20
+ void millisecond_delay(int ms) {
21
+ for (int i = 0; i < ms; i++) {
22
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
23
+ }
24
+ }
25
+
26
+ int main(int argc, char* argv[]) {
27
+ int selection = -1;
28
+
29
+ bluez.init();
30
+ std::thread* async_thread = new std::thread(async_thread_function);
31
+
32
+ auto adapters = bluez.get_adapters();
33
+ std::cout << "The following adapters were found:" << std::endl;
34
+ for (int i = 0; i < adapters.size(); i++) {
35
+ std::cout << "[" << i << "] " << adapters[i]->identifier() << " [" << adapters[i]->address() << "]"
36
+ << std::endl;
37
+ }
38
+
39
+ std::cout << "Please select an adapter to scan: ";
40
+ std::cin >> selection;
41
+ if (selection < 0 || selection >= adapters.size()) {
42
+ std::cout << "Invalid selection" << std::endl;
43
+ return 1;
44
+ }
45
+
46
+ auto adapter = adapters[selection];
47
+ std::cout << "Scanning " << adapter->identifier() << " [" << adapter->address() << "]" << std::endl;
48
+
49
+ SimpleBluez::Adapter::DiscoveryFilter filter;
50
+ filter.Transport = SimpleBluez::Adapter::DiscoveryFilter::TransportType::LE;
51
+ adapter->discovery_filter(filter);
52
+
53
+ adapter->set_on_device_updated([](std::shared_ptr<SimpleBluez::Device> device) {
54
+ std::cout << "Update received for " << device->address() << std::endl;
55
+ std::cout << "\tName " << device->name() << std::endl;
56
+ std::cout << "\tAddress Type " << device->address_type() << std::endl;
57
+ std::cout << "\tRSSI " << std::dec << device->rssi() << std::endl;
58
+ std::cout << "\tTxPower " << std::dec << device->tx_power() << std::endl;
59
+ auto manufacturer_data = device->manufacturer_data();
60
+ for (auto& [manufacturer_id, value_array] : manufacturer_data) {
61
+ std::cout << "\tManuf ID 0x" << std::setfill('0') << std::setw(4) << std::hex << (int)manufacturer_id;
62
+ std::cout << ": ";
63
+ for (int i = 0; i < value_array.size(); i++) {
64
+ std::cout << std::setfill('0') << std::setw(2) << std::hex << ((int)value_array[i]) << " ";
65
+ }
66
+ std::cout << std::endl;
67
+ }
68
+ });
69
+
70
+ adapter->discovery_start();
71
+ millisecond_delay(3000);
72
+ adapter->discovery_stop();
73
+
74
+ // Sleep for a bit to allow the adapter to stop discovering.
75
+ millisecond_delay(3000);
76
+
77
+ async_thread_active = false;
78
+ while (!async_thread->joinable()) {
79
+ millisecond_delay(10);
80
+ }
81
+ async_thread->join();
82
+ delete async_thread;
83
+
84
+ return 0;
85
+ }
@@ -0,0 +1,163 @@
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+
4
+ #include "simpleble_c/simpleble.h"
5
+
6
+ #define PERIPHERAL_LIST_SIZE (size_t)10
7
+
8
+ static void clean_on_exit(void);
9
+
10
+ static void adapter_on_scan_start(simpleble_adapter_t adapter, void* userdata);
11
+ static void adapter_on_scan_stop(simpleble_adapter_t adapter, void* userdata);
12
+ static void adapter_on_scan_found(simpleble_adapter_t adapter, simpleble_peripheral_t peripheral, void* userdata);
13
+
14
+ static simpleble_peripheral_t peripheral_list[PERIPHERAL_LIST_SIZE] = {0};
15
+ static size_t peripheral_list_len = 0;
16
+ static simpleble_adapter_t adapter = NULL;
17
+
18
+ int main() {
19
+ simpleble_err_t err_code = SIMPLEBLE_SUCCESS;
20
+ atexit(clean_on_exit);
21
+
22
+ // NOTE: It's necessary to call this function before any other to allow the
23
+ // underlying driver to run its initialization routine.
24
+ size_t adapter_count = simpleble_adapter_get_count();
25
+ if (adapter_count == 0) {
26
+ printf("No adapter was found.\n");
27
+ return 1;
28
+ }
29
+
30
+ // TODO: Allow the user to pick an adapter.
31
+ adapter = simpleble_adapter_get_handle(0);
32
+ if (adapter == NULL) {
33
+ printf("No adapter was found.\n");
34
+ return 1;
35
+ }
36
+
37
+ simpleble_adapter_set_callback_on_scan_start(adapter, adapter_on_scan_start, NULL);
38
+ simpleble_adapter_set_callback_on_scan_stop(adapter, adapter_on_scan_stop, NULL);
39
+ simpleble_adapter_set_callback_on_scan_found(adapter, adapter_on_scan_found, NULL);
40
+
41
+ simpleble_adapter_scan_for(adapter, 5000);
42
+
43
+ printf("The following devices were found:\n");
44
+ for (size_t i = 0; i < peripheral_list_len; i++) {
45
+ simpleble_peripheral_t peripheral = peripheral_list[i];
46
+ char* peripheral_identifier = simpleble_peripheral_identifier(peripheral);
47
+ char* peripheral_address = simpleble_peripheral_address(peripheral);
48
+ printf("[%zu] %s [%s]\n", i, peripheral_identifier, peripheral_address);
49
+ simpleble_free(peripheral_identifier);
50
+ simpleble_free(peripheral_address);
51
+ }
52
+
53
+ int selection = -1;
54
+ printf("Please select a device to connect to: ");
55
+ scanf("%d", &selection);
56
+
57
+ if (selection < 0 || selection >= (int)peripheral_list_len) {
58
+ printf("Invalid selection.\n");
59
+ return 1;
60
+ }
61
+
62
+ simpleble_peripheral_t peripheral = peripheral_list[selection];
63
+
64
+ char* peripheral_identifier = simpleble_peripheral_identifier(peripheral);
65
+ char* peripheral_address = simpleble_peripheral_address(peripheral);
66
+ printf("Connecting to %s [%s]\n", peripheral_identifier, peripheral_address);
67
+ simpleble_free(peripheral_identifier);
68
+ simpleble_free(peripheral_address);
69
+
70
+ err_code = simpleble_peripheral_connect(peripheral);
71
+ if (err_code != SIMPLEBLE_SUCCESS) {
72
+ printf("Failed to connect.\n");
73
+ return 1;
74
+ }
75
+
76
+ size_t services_count = simpleble_peripheral_services_count(peripheral);
77
+ printf("Successfully connected, listing %zu services.\n", services_count);
78
+
79
+ for (size_t i = 0; i < services_count; i++) {
80
+ simpleble_service_t service;
81
+ err_code = simpleble_peripheral_services_get(peripheral, i, &service);
82
+
83
+ if (err_code != SIMPLEBLE_SUCCESS) {
84
+ printf("Failed to get service.\n");
85
+ return 1;
86
+ }
87
+
88
+ printf("Service: %s - (%zu characteristics)\n", service.uuid.value, service.characteristic_count);
89
+ for (size_t j = 0; j < service.characteristic_count; j++) {
90
+ printf(" Characteristic: %s - (%zu descriptors)\n", service.characteristics[j].uuid.value,
91
+ service.characteristics[j].descriptor_count);
92
+ for (size_t k = 0; k < service.characteristics[j].descriptor_count; k++) {
93
+ printf(" Descriptor: %s\n", service.characteristics[j].descriptors[k].uuid.value);
94
+ }
95
+ }
96
+ }
97
+
98
+ simpleble_peripheral_disconnect(peripheral);
99
+
100
+ return 0;
101
+ }
102
+
103
+ static void clean_on_exit(void) {
104
+ printf("Releasing allocated resources.\n");
105
+
106
+ // Release all saved peripherals
107
+ for (size_t i = 0; i < peripheral_list_len; i++) {
108
+ simpleble_peripheral_release_handle(peripheral_list[i]);
109
+ }
110
+
111
+ // Let's not forget to release the associated handle.
112
+ simpleble_adapter_release_handle(adapter);
113
+ }
114
+
115
+ static void adapter_on_scan_start(simpleble_adapter_t adapter, void* userdata) {
116
+ char* identifier = simpleble_adapter_identifier(adapter);
117
+
118
+ if (identifier == NULL) {
119
+ return;
120
+ }
121
+
122
+ printf("Adapter %s started scanning.\n", identifier);
123
+
124
+ // Let's not forget to clear the allocated memory.
125
+ simpleble_free(identifier);
126
+ }
127
+
128
+ static void adapter_on_scan_stop(simpleble_adapter_t adapter, void* userdata) {
129
+ char* identifier = simpleble_adapter_identifier(adapter);
130
+
131
+ if (identifier == NULL) {
132
+ return;
133
+ }
134
+
135
+ printf("Adapter %s stopped scanning.\n", identifier);
136
+
137
+ // Let's not forget to clear the allocated memory.
138
+ simpleble_free(identifier);
139
+ }
140
+
141
+ static void adapter_on_scan_found(simpleble_adapter_t adapter, simpleble_peripheral_t peripheral, void* userdata) {
142
+ char* adapter_identifier = simpleble_adapter_identifier(adapter);
143
+ char* peripheral_identifier = simpleble_peripheral_identifier(peripheral);
144
+ char* peripheral_address = simpleble_peripheral_address(peripheral);
145
+
146
+ if (adapter_identifier == NULL || peripheral_identifier == NULL || peripheral_address == NULL) {
147
+ return;
148
+ }
149
+
150
+ printf("Adapter %s found device: %s [%s]\n", adapter_identifier, peripheral_identifier, peripheral_address);
151
+
152
+ if (peripheral_list_len < PERIPHERAL_LIST_SIZE) {
153
+ // Save the peripheral
154
+ peripheral_list[peripheral_list_len++] = peripheral;
155
+ } else {
156
+ // As there was no space left for this peripheral, release the associated handle.
157
+ simpleble_peripheral_release_handle(peripheral);
158
+ }
159
+
160
+ // Let's not forget to release all allocated memory.
161
+ simpleble_free(peripheral_identifier);
162
+ simpleble_free(peripheral_address);
163
+ }
@@ -0,0 +1,217 @@
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+
4
+ #ifdef _WIN32
5
+ #include <Windows.h>
6
+ #else
7
+ #include <unistd.h>
8
+ #endif
9
+
10
+ void msleep(int ms) {
11
+ #ifdef _WIN32
12
+ Sleep(ms);
13
+ #else
14
+ usleep(ms * 1000);
15
+ #endif
16
+ }
17
+
18
+ #include "simpleble_c/simpleble.h"
19
+
20
+ #define PERIPHERAL_LIST_SIZE (size_t)10
21
+ #define SERVICES_LIST_SIZE (size_t)32
22
+
23
+ typedef struct {
24
+ simpleble_uuid_t service;
25
+ simpleble_uuid_t characteristic;
26
+ } service_characteristic_t;
27
+
28
+ static void clean_on_exit(void);
29
+
30
+ static void adapter_on_scan_start(simpleble_adapter_t adapter, void* userdata);
31
+ static void adapter_on_scan_stop(simpleble_adapter_t adapter, void* userdata);
32
+ static void adapter_on_scan_found(simpleble_adapter_t adapter, simpleble_peripheral_t peripheral, void* userdata);
33
+ static void peripheral_on_notify(simpleble_peripheral_t handle, simpleble_uuid_t service,
34
+ simpleble_uuid_t characteristic, const uint8_t* data, size_t data_length,
35
+ void* userdata);
36
+
37
+ static service_characteristic_t characteristic_list[SERVICES_LIST_SIZE] = {0};
38
+ static simpleble_peripheral_t peripheral_list[PERIPHERAL_LIST_SIZE] = {0};
39
+ static size_t peripheral_list_len = 0;
40
+ static simpleble_adapter_t adapter = NULL;
41
+
42
+ int main() {
43
+ simpleble_err_t err_code = SIMPLEBLE_SUCCESS;
44
+ atexit(clean_on_exit);
45
+
46
+ // NOTE: It's necessary to call this function before any other to allow the
47
+ // underlying driver to run its initialization routine.
48
+ size_t adapter_count = simpleble_adapter_get_count();
49
+ if (adapter_count == 0) {
50
+ printf("No adapter was found.\n");
51
+ return 1;
52
+ }
53
+
54
+ // TODO: Allow the user to pick an adapter.
55
+ adapter = simpleble_adapter_get_handle(0);
56
+ if (adapter == NULL) {
57
+ printf("No adapter was found.\n");
58
+ return 1;
59
+ }
60
+
61
+ simpleble_adapter_set_callback_on_scan_start(adapter, adapter_on_scan_start, NULL);
62
+ simpleble_adapter_set_callback_on_scan_stop(adapter, adapter_on_scan_stop, NULL);
63
+ simpleble_adapter_set_callback_on_scan_found(adapter, adapter_on_scan_found, NULL);
64
+
65
+ simpleble_adapter_scan_for(adapter, 5000);
66
+
67
+ printf("The following devices were found:\n");
68
+ for (size_t i = 0; i < peripheral_list_len; i++) {
69
+ simpleble_peripheral_t peripheral = peripheral_list[i];
70
+ char* peripheral_identifier = simpleble_peripheral_identifier(peripheral);
71
+ char* peripheral_address = simpleble_peripheral_address(peripheral);
72
+ printf("[%zu] %s [%s]\n", i, peripheral_identifier, peripheral_address);
73
+ simpleble_free(peripheral_identifier);
74
+ simpleble_free(peripheral_address);
75
+ }
76
+
77
+ int selection = -1;
78
+ printf("Please select a device to connect to: ");
79
+ scanf("%d", &selection);
80
+
81
+ if (selection < 0 || selection >= (int)peripheral_list_len) {
82
+ printf("Invalid selection.\n");
83
+ return 1;
84
+ }
85
+
86
+ simpleble_peripheral_t peripheral = peripheral_list[selection];
87
+
88
+ char* peripheral_identifier = simpleble_peripheral_identifier(peripheral);
89
+ char* peripheral_address = simpleble_peripheral_address(peripheral);
90
+ printf("Connecting to %s [%s]\n", peripheral_identifier, peripheral_address);
91
+ simpleble_free(peripheral_identifier);
92
+ simpleble_free(peripheral_address);
93
+
94
+ err_code = simpleble_peripheral_connect(peripheral);
95
+ if (err_code != SIMPLEBLE_SUCCESS) {
96
+ printf("Failed to connect.\n");
97
+ return 1;
98
+ }
99
+
100
+ printf("Successfully connected, listing services and characteristics.\n");
101
+
102
+ size_t characteristic_count = 0;
103
+ for (size_t i = 0; i < simpleble_peripheral_services_count(peripheral); i++) {
104
+ simpleble_service_t service;
105
+ err_code = simpleble_peripheral_services_get(peripheral, i, &service);
106
+
107
+ if (err_code != SIMPLEBLE_SUCCESS) {
108
+ printf("Failed to get service.\n");
109
+ return 1;
110
+ }
111
+
112
+ for (size_t j = 0; j < service.characteristic_count; j++) {
113
+ if (characteristic_count >= SERVICES_LIST_SIZE) {
114
+ break;
115
+ }
116
+
117
+ printf("[%zu] %s %s\n", characteristic_count, service.uuid.value, service.characteristics[j].uuid.value);
118
+ characteristic_list[characteristic_count].service = service.uuid;
119
+ characteristic_list[characteristic_count].characteristic = service.characteristics[j].uuid;
120
+ characteristic_count++;
121
+ }
122
+ }
123
+
124
+ selection = -1;
125
+ printf("Please select a characteristic to read from: ");
126
+ scanf("%d", &selection);
127
+
128
+ if (selection < 0 || selection >= (int)characteristic_count) {
129
+ printf("Invalid selection.\n");
130
+ return 1;
131
+ }
132
+
133
+ simpleble_peripheral_notify(peripheral, characteristic_list[selection].service,
134
+ characteristic_list[selection].characteristic, peripheral_on_notify, NULL);
135
+
136
+ // Sleep for 5 seconds
137
+ msleep(5000);
138
+
139
+ simpleble_peripheral_unsubscribe(peripheral, characteristic_list[selection].service,
140
+ characteristic_list[selection].characteristic);
141
+
142
+ simpleble_peripheral_disconnect(peripheral);
143
+
144
+ return 0;
145
+ }
146
+
147
+ static void clean_on_exit(void) {
148
+ printf("Releasing allocated resources.\n");
149
+
150
+ // Release all saved peripherals
151
+ for (size_t i = 0; i < peripheral_list_len; i++) {
152
+ simpleble_peripheral_release_handle(peripheral_list[i]);
153
+ }
154
+
155
+ // Let's not forget to release the associated handle.
156
+ simpleble_adapter_release_handle(adapter);
157
+ }
158
+
159
+ static void adapter_on_scan_start(simpleble_adapter_t adapter, void* userdata) {
160
+ char* identifier = simpleble_adapter_identifier(adapter);
161
+
162
+ if (identifier == NULL) {
163
+ return;
164
+ }
165
+
166
+ printf("Adapter %s started scanning.\n", identifier);
167
+
168
+ // Let's not forget to clear the allocated memory.
169
+ simpleble_free(identifier);
170
+ }
171
+
172
+ static void adapter_on_scan_stop(simpleble_adapter_t adapter, void* userdata) {
173
+ char* identifier = simpleble_adapter_identifier(adapter);
174
+
175
+ if (identifier == NULL) {
176
+ return;
177
+ }
178
+
179
+ printf("Adapter %s stopped scanning.\n", identifier);
180
+
181
+ // Let's not forget to clear the allocated memory.
182
+ simpleble_free(identifier);
183
+ }
184
+
185
+ static void adapter_on_scan_found(simpleble_adapter_t adapter, simpleble_peripheral_t peripheral, void* userdata) {
186
+ char* adapter_identifier = simpleble_adapter_identifier(adapter);
187
+ char* peripheral_identifier = simpleble_peripheral_identifier(peripheral);
188
+ char* peripheral_address = simpleble_peripheral_address(peripheral);
189
+
190
+ if (adapter_identifier == NULL || peripheral_identifier == NULL || peripheral_address == NULL) {
191
+ return;
192
+ }
193
+
194
+ printf("Adapter %s found device: %s [%s]\n", adapter_identifier, peripheral_identifier, peripheral_address);
195
+
196
+ if (peripheral_list_len < PERIPHERAL_LIST_SIZE) {
197
+ // Save the peripheral
198
+ peripheral_list[peripheral_list_len++] = peripheral;
199
+ } else {
200
+ // As there was no space left for this peripheral, release the associated handle.
201
+ simpleble_peripheral_release_handle(peripheral);
202
+ }
203
+
204
+ // Let's not forget to release all allocated memory.
205
+ simpleble_free(peripheral_identifier);
206
+ simpleble_free(peripheral_address);
207
+ }
208
+
209
+ static void peripheral_on_notify(simpleble_peripheral_t handle, simpleble_uuid_t service,
210
+ simpleble_uuid_t characteristic, const uint8_t* data, size_t data_length,
211
+ void* userdata) {
212
+ printf("Received: ");
213
+ for (size_t i = 0; i < data_length; i++) {
214
+ printf("%02X ", data[i]);
215
+ }
216
+ printf("\n");
217
+ }