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,73 @@
1
+ #pragma once
2
+
3
+ #include <cstdint>
4
+ #include <functional>
5
+ #include <mutex>
6
+ #include <string>
7
+
8
+ #include <simpleble/export.h>
9
+
10
+ namespace SimpleBLE {
11
+
12
+ namespace Logging {
13
+
14
+ enum Level : int {
15
+ None = 0,
16
+ Fatal,
17
+ Error,
18
+ Warn,
19
+ Info,
20
+ Debug,
21
+ Verbose,
22
+ };
23
+
24
+ // clang-format off
25
+ using Callback = std::function<void(
26
+ Level,
27
+ const std::string& module,
28
+ const std::string& file,
29
+ uint32_t line,
30
+ const std::string& function,
31
+ const std::string& message)>;
32
+ // clang-format on
33
+
34
+ class SIMPLEBLE_EXPORT Logger {
35
+ public:
36
+ static Logger* get();
37
+
38
+ void set_level(Level level);
39
+ Level get_level();
40
+
41
+ void set_callback(Callback callback);
42
+ bool has_callback();
43
+
44
+ void log_default_stdout();
45
+ void log_default_file();
46
+ void log_default_file(const std::string path);
47
+
48
+ // clang-format off
49
+ void log(
50
+ Level level,
51
+ const std::string& module,
52
+ const std::string& file,
53
+ uint32_t line,
54
+ const std::string& function,
55
+ const std::string& message);
56
+ // clang-format on
57
+
58
+ private:
59
+ Logger();
60
+ ~Logger();
61
+ Logger(Logger& other) = delete; // Remove copy constructor
62
+ void operator=(const Logger&) = delete; // Remove copy assignment
63
+
64
+ static std::string level_to_str(Level level);
65
+
66
+ Level level_{Level::Info};
67
+ Callback callback_{nullptr};
68
+ std::recursive_mutex mutex_;
69
+ };
70
+
71
+ } // namespace Logging
72
+
73
+ } // namespace SimpleBLE
@@ -0,0 +1,82 @@
1
+ #pragma once
2
+
3
+ #include <cstdint>
4
+ #include <functional>
5
+ #include <map>
6
+ #include <memory>
7
+ #include <string>
8
+ #include <vector>
9
+
10
+ #include <simpleble/export.h>
11
+
12
+ #include <simpleble/Exceptions.h>
13
+ #include <simpleble/Service.h>
14
+ #include <simpleble/Types.h>
15
+
16
+ namespace SimpleBLE {
17
+
18
+ class PeripheralBase;
19
+
20
+ class SIMPLEBLE_EXPORT Peripheral {
21
+ public:
22
+ Peripheral() = default;
23
+ virtual ~Peripheral() = default;
24
+
25
+ bool initialized() const;
26
+ void* underlying() const;
27
+
28
+ std::string identifier();
29
+ BluetoothAddress address();
30
+ BluetoothAddressType address_type();
31
+ int16_t rssi();
32
+
33
+ /**
34
+ * @brief Provides the advertised transmit power in dBm.
35
+ *
36
+ * @note If the field has not been advertised by the peripheral,
37
+ * the returned value will be -32768.
38
+ */
39
+ int16_t tx_power();
40
+ uint16_t mtu();
41
+
42
+ void connect();
43
+ void disconnect();
44
+ bool is_connected();
45
+ bool is_connectable();
46
+ bool is_paired();
47
+ void unpair();
48
+
49
+ /**
50
+ * @brief Provides a list of all services that are available on the peripheral.
51
+ *
52
+ * @note If the peripheral is not connected, it will return a list of services
53
+ * that were advertised by the device.
54
+ */
55
+ std::vector<Service> services();
56
+ std::map<uint16_t, ByteArray> manufacturer_data();
57
+
58
+ /* Calling any of the methods below when the device is not connected will throw
59
+ Exception::NotConnected */
60
+ // clang-format off
61
+ ByteArray read(BluetoothUUID const& service, BluetoothUUID const& characteristic);
62
+ void write_request(BluetoothUUID const& service, BluetoothUUID const& characteristic, ByteArray const& data);
63
+ void write_command(BluetoothUUID const& service, BluetoothUUID const& characteristic, ByteArray const& data);
64
+ void notify(BluetoothUUID const& service, BluetoothUUID const& characteristic, std::function<void(ByteArray payload)> callback);
65
+ void indicate(BluetoothUUID const& service, BluetoothUUID const& characteristic, std::function<void(ByteArray payload)> callback);
66
+ void unsubscribe(BluetoothUUID const& service, BluetoothUUID const& characteristic);
67
+
68
+ ByteArray read(BluetoothUUID const& service, BluetoothUUID const& characteristic, BluetoothUUID const& descriptor);
69
+ void write(BluetoothUUID const& service, BluetoothUUID const& characteristic, BluetoothUUID const& descriptor, ByteArray const& data);
70
+ // clang-format on
71
+
72
+ void set_callback_on_connected(std::function<void()> on_connected);
73
+ void set_callback_on_disconnected(std::function<void()> on_disconnected);
74
+
75
+ protected:
76
+ PeripheralBase* operator->();
77
+ const PeripheralBase* operator->() const;
78
+
79
+ std::shared_ptr<PeripheralBase> internal_;
80
+ };
81
+
82
+ } // namespace SimpleBLE
@@ -0,0 +1,64 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <optional>
5
+
6
+ #include <simpleble/export.h>
7
+
8
+ #include <simpleble/Peripheral.h>
9
+ #include <simpleble/Service.h>
10
+
11
+ namespace SimpleBLE {
12
+
13
+ namespace Safe {
14
+
15
+ class SIMPLEBLE_EXPORT Peripheral {
16
+ public:
17
+ Peripheral(SimpleBLE::Peripheral& peripheral);
18
+ Peripheral(SimpleBLE::Peripheral&& peripheral);
19
+ virtual ~Peripheral() = default;
20
+
21
+ std::optional<std::string> identifier() noexcept;
22
+ std::optional<BluetoothAddress> address() noexcept;
23
+ std::optional<BluetoothAddressType> address_type() noexcept;
24
+ std::optional<int16_t> rssi() noexcept;
25
+ std::optional<int16_t> tx_power() noexcept;
26
+ std::optional<uint16_t> mtu() noexcept;
27
+
28
+ bool connect() noexcept;
29
+ bool disconnect() noexcept;
30
+ std::optional<bool> is_connected() noexcept;
31
+ std::optional<bool> is_connectable() noexcept;
32
+ std::optional<bool> is_paired() noexcept;
33
+ bool unpair() noexcept;
34
+
35
+ std::optional<std::vector<Service>> services() noexcept;
36
+ std::optional<std::map<uint16_t, ByteArray>> manufacturer_data() noexcept;
37
+
38
+ // clang-format off
39
+ std::optional<ByteArray> read(BluetoothUUID const& service, BluetoothUUID const& characteristic) noexcept;
40
+ bool write_request(BluetoothUUID const& service, BluetoothUUID const& characteristic, ByteArray const& data) noexcept;
41
+ bool write_command(BluetoothUUID const& service, BluetoothUUID const& characteristic, ByteArray const& data) noexcept;
42
+ bool notify(BluetoothUUID const& service, BluetoothUUID const& characteristic, std::function<void(ByteArray payload)> callback) noexcept;
43
+ bool indicate(BluetoothUUID const& service, BluetoothUUID const& characteristic, std::function<void(ByteArray payload)> callback) noexcept;
44
+ bool unsubscribe(BluetoothUUID const& service, BluetoothUUID const& characteristic) noexcept;
45
+
46
+ std::optional<ByteArray> read(BluetoothUUID const& service, BluetoothUUID const& characteristic, BluetoothUUID const& descriptor) noexcept;
47
+ bool write(BluetoothUUID const& service, BluetoothUUID const& characteristic, BluetoothUUID const& descriptor, ByteArray const& data) noexcept;
48
+ // clang-format on
49
+
50
+ bool set_callback_on_connected(std::function<void()> on_connected) noexcept;
51
+ bool set_callback_on_disconnected(std::function<void()> on_disconnected) noexcept;
52
+
53
+ /**
54
+ * Get the underlying peripheral object.
55
+ */
56
+ operator SimpleBLE::Peripheral() const noexcept;
57
+
58
+ protected:
59
+ SimpleBLE::Peripheral internal_;
60
+ };
61
+
62
+ } // namespace Safe
63
+
64
+ } // namespace SimpleBLE
@@ -0,0 +1,34 @@
1
+ #pragma once
2
+
3
+ #include <memory>
4
+ #include <vector>
5
+
6
+ #include <simpleble/export.h>
7
+
8
+ #include <simpleble/Exceptions.h>
9
+ #include <simpleble/Types.h>
10
+ #include "simpleble/Characteristic.h"
11
+
12
+ namespace SimpleBLE {
13
+
14
+ class ServiceBase;
15
+
16
+ class SIMPLEBLE_EXPORT Service {
17
+ public:
18
+ Service() = default;
19
+ virtual ~Service() = default;
20
+
21
+ bool initialized() const;
22
+
23
+ BluetoothUUID uuid();
24
+ ByteArray data();
25
+ std::vector<Characteristic> characteristics();
26
+
27
+ protected:
28
+ const ServiceBase* operator->() const;
29
+ ServiceBase* operator->();
30
+
31
+ std::shared_ptr<ServiceBase> internal_;
32
+ };
33
+
34
+ } // namespace SimpleBLE
@@ -0,0 +1,8 @@
1
+ #pragma once
2
+
3
+ #include <simpleble/Config.h>
4
+ #include <simpleble/Adapter.h>
5
+ #include <simpleble/AdapterSafe.h>
6
+ #include <simpleble/Peripheral.h>
7
+ #include <simpleble/PeripheralSafe.h>
8
+ #include <simpleble/Utils.h>
@@ -0,0 +1,49 @@
1
+ #pragma once
2
+
3
+ #include <cstdint>
4
+ #include <string>
5
+ #include <vector>
6
+ #include "kvn/kvn_bytearray.h"
7
+
8
+ /**
9
+ * @file Types.h
10
+ * @brief Defines types and enumerations used throughout the SimpleBLE library.
11
+ */
12
+
13
+ namespace SimpleBLE {
14
+
15
+ using BluetoothAddress = std::string;
16
+
17
+ // IDEA: Extend BluetoothUUID to include a `uuid` function that
18
+ // returns the same string, but provides a homogeneous interface.
19
+ using BluetoothUUID = std::string;
20
+
21
+ /**
22
+ * @typedef ByteArray
23
+ * @brief Represents a byte array using kvn::bytearray from the external library.
24
+ */
25
+ using ByteArray = kvn::bytearray;
26
+
27
+ #ifdef ANDROID
28
+ #pragma push_macro("ANDROID")
29
+ #undef ANDROID
30
+ #define ANDROID_WAS_DEFINED
31
+ #endif
32
+
33
+ enum class OperatingSystem {
34
+ WINDOWS,
35
+ MACOS,
36
+ IOS,
37
+ LINUX,
38
+ ANDROID,
39
+ };
40
+
41
+ #ifdef ANDROID_WAS_DEFINED
42
+ #pragma pop_macro("ANDROID")
43
+ #undef ANDROID_WAS_DEFINED
44
+ #endif
45
+
46
+ // TODO: Add to_string functions for all enums.
47
+ enum BluetoothAddressType : int32_t { PUBLIC = 0, RANDOM = 1, UNSPECIFIED = 2 };
48
+
49
+ } // namespace SimpleBLE
@@ -0,0 +1,13 @@
1
+ #pragma once
2
+
3
+ #include <simpleble/export.h>
4
+
5
+ #include <simpleble/Types.h>
6
+
7
+ namespace SimpleBLE {
8
+
9
+ OperatingSystem SIMPLEBLE_EXPORT get_operating_system();
10
+
11
+ std::string SIMPLEBLE_EXPORT get_simpleble_version();
12
+
13
+ } // namespace SimpleBLE
@@ -0,0 +1,43 @@
1
+
2
+ #ifndef SIMPLEBLE_EXPORT_H
3
+ #define SIMPLEBLE_EXPORT_H
4
+
5
+ #ifdef SIMPLEBLE_STATIC_DEFINE
6
+ # define SIMPLEBLE_EXPORT
7
+ # define SIMPLEBLE_NO_EXPORT
8
+ #else
9
+ # ifndef SIMPLEBLE_EXPORT
10
+ # ifdef simpleble_EXPORTS
11
+ /* We are building this library */
12
+ # define SIMPLEBLE_EXPORT
13
+ # else
14
+ /* We are using this library */
15
+ # define SIMPLEBLE_EXPORT
16
+ # endif
17
+ # endif
18
+
19
+ # ifndef SIMPLEBLE_NO_EXPORT
20
+ # define SIMPLEBLE_NO_EXPORT
21
+ # endif
22
+ #endif
23
+
24
+ #ifndef SIMPLEBLE_DEPRECATED
25
+ # define SIMPLEBLE_DEPRECATED __attribute__ ((__deprecated__))
26
+ #endif
27
+
28
+ #ifndef SIMPLEBLE_DEPRECATED_EXPORT
29
+ # define SIMPLEBLE_DEPRECATED_EXPORT SIMPLEBLE_EXPORT SIMPLEBLE_DEPRECATED
30
+ #endif
31
+
32
+ #ifndef SIMPLEBLE_DEPRECATED_NO_EXPORT
33
+ # define SIMPLEBLE_DEPRECATED_NO_EXPORT SIMPLEBLE_NO_EXPORT SIMPLEBLE_DEPRECATED
34
+ #endif
35
+
36
+ /* NOLINTNEXTLINE(readability-avoid-unconditional-preprocessor-if) */
37
+ #if 0 /* DEFINE_NO_DEPRECATED */
38
+ # ifndef SIMPLEBLE_NO_DEPRECATED
39
+ # define SIMPLEBLE_NO_DEPRECATED
40
+ # endif
41
+ #endif
42
+
43
+ #endif /* SIMPLEBLE_EXPORT_H */
@@ -0,0 +1,222 @@
1
+ #ifndef KVN_BYTEARRAY_H
2
+ #define KVN_BYTEARRAY_H
3
+
4
+ #include <cstdint>
5
+ #include <cstring>
6
+ #include <iomanip>
7
+ #include <iostream>
8
+ #include <memory>
9
+ #include <sstream>
10
+ #include <stdexcept>
11
+ #include <vector>
12
+
13
+ namespace kvn {
14
+
15
+ /**
16
+ * @class bytearray
17
+ * @brief A class to handle byte arrays and their conversion from/to hex strings.
18
+ */
19
+ class bytearray {
20
+ public:
21
+ /**
22
+ * @brief Default constructor.
23
+ */
24
+ bytearray() = default;
25
+
26
+ /**
27
+ * @brief Constructs byte array from a vector of uint8_t.
28
+ * @param vec A vector of uint8_t.
29
+ */
30
+ bytearray(const std::vector<uint8_t>& vec) : data_(vec) {}
31
+
32
+ /**
33
+ * @brief Constructs byte array from a raw pointer and size.
34
+ * @param ptr A pointer to uint8_t data.
35
+ * @param size The size of the data.
36
+ */
37
+ bytearray(const uint8_t* ptr, size_t size) : data_(ptr, ptr + size) {}
38
+
39
+ /**
40
+ * @brief Constructs byte array from iterators.
41
+ * @tparam InputIt Iterator type.
42
+ * @param first Iterator to the first element.
43
+ * @param last Iterator to one past the last element.
44
+ */
45
+ template <typename InputIt>
46
+ bytearray(InputIt first, InputIt last) : data_(first, last) {}
47
+
48
+ /**
49
+ * @brief Constructs byte array from a std::string.
50
+ * @param byteArr A string containing byte data.
51
+ */
52
+ bytearray(const std::string& byteArr) : data_(byteArr.begin(), byteArr.end()) {}
53
+
54
+ /**
55
+ * @brief Constructs byte array from a C-style string and size.
56
+ * @param byteArr A C-style string.
57
+ * @param size The size of the string.
58
+ */
59
+ bytearray(const char* byteArr, size_t size) : bytearray(std::string(byteArr, size)) {}
60
+
61
+ /**
62
+ * @brief Constructs byte array from a C-style string.
63
+ * @param byteArr A C-style string.
64
+ */
65
+ bytearray(const char* byteArr) : bytearray(std::string(byteArr)) {}
66
+
67
+ /**
68
+ * @brief Constructs a byte array of specified size, initialized with zeros.
69
+ * @param size The number of bytes to allocate.
70
+ */
71
+ explicit bytearray(size_t size) : data_(size) {}
72
+
73
+ /**
74
+ * @brief Creates a ByteArray from a hex string.
75
+ *
76
+ * Case is ignored and the string may have a '0x' hex prefix or not.
77
+ *
78
+ * @param hexStr A string containing hex data.
79
+ * @return A ByteArray object.
80
+ * @throws std::invalid_argument If the hex string contains non-hexadecimal characters.
81
+ * @throws std::length_error If the hex string length is not even.
82
+ */
83
+ static bytearray fromHex(const std::string& hexStr) {
84
+ std::string cleanString(hexStr);
85
+
86
+ // Check and skip the '0x' prefix if present
87
+ if (cleanString.size() >= 2 && cleanString.substr(0, 2) == "0x") {
88
+ cleanString = cleanString.substr(2);
89
+ }
90
+
91
+ size_t size = cleanString.size();
92
+ if (size % 2 != 0) {
93
+ throw std::length_error("Hex string length must be even.");
94
+ }
95
+
96
+ bytearray byteArray;
97
+ byteArray.data_.reserve(size / 2);
98
+
99
+ for (size_t i = 0; i < size; i += 2) {
100
+ uint8_t byte = static_cast<uint8_t>(std::stoi(cleanString.substr(i, 2), nullptr, 16));
101
+ byteArray.data_.push_back(byte);
102
+ }
103
+
104
+ return byteArray;
105
+ }
106
+
107
+ /**
108
+ * @overload
109
+ */
110
+ static bytearray fromHex(const char* byteArr) { return fromHex(std::string(byteArr)); }
111
+
112
+ /**
113
+ * @overload
114
+ */
115
+ static bytearray fromHex(const char* byteArr, size_t size) { return fromHex(std::string(byteArr, size)); }
116
+
117
+ /**
118
+ * @brief Converts the byte array to a lowercase hex string without '0x' prefix.
119
+ * @param spacing Whether to include spaces between bytes.
120
+ *
121
+ * @return A hex string representation of the byte array.
122
+ */
123
+ std::string toHex(bool spacing = false) const {
124
+ std::ostringstream oss;
125
+ for (auto byte : data_) {
126
+ oss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(byte);
127
+ if (spacing) {
128
+ oss << " ";
129
+ }
130
+ }
131
+ return oss.str();
132
+ }
133
+
134
+ /**
135
+ * @brief Slices the byte array from a specified start index to an end index.
136
+ *
137
+ * This method creates a new byte array containing bytes from the specified range.
138
+ * The start index is inclusive, while the end index is exclusive.
139
+ *
140
+ * @param start The starting index from which to begin slicing.
141
+ * @param end The ending index up to which to slice (exclusive).
142
+ * @return byte array A new byte array containing the sliced segment.
143
+ * @throws std::out_of_range If the start index is greater than the end index or if the end index is out of bounds.
144
+ */
145
+ bytearray slice(size_t start, size_t end) const {
146
+ if (start > end || end > data_.size()) {
147
+ throw std::out_of_range("Invalid slice range");
148
+ }
149
+ return bytearray(std::vector<uint8_t>(data_.begin() + start, data_.begin() + end));
150
+ }
151
+
152
+ /**
153
+ * @brief Slices the byte array from a specified start index to the end of the array.
154
+ *
155
+ * This method creates a new byte array containing all bytes from the specified start index to the end of the
156
+ * byte array.
157
+ *
158
+ * @param start The starting index from which to begin slicing.
159
+ * @return byte array A new byte array containing the sliced segment from the start index to the end.
160
+ * @throws std::out_of_range If the start index is out of the bounds of the byte array.
161
+ */
162
+ bytearray slice_from(size_t start) const { return slice(start, data_.size()); }
163
+
164
+ /**
165
+ * @brief Slices the byte array from the beginning to a specified end index.
166
+ *
167
+ * This method creates a new byte array containing all bytes from the beginning of the byte array to the specified
168
+ * end index.
169
+ *
170
+ * @param end The ending index up to which to slice (exclusive).
171
+ * @return byte array A new byte array containing the sliced segment from the beginning to the end index.
172
+ * @throws std::out_of_range If the end index is out of the bounds of the byte array.
173
+ */
174
+ bytearray slice_to(size_t end) const { return slice(0, end); }
175
+
176
+ /**
177
+ * @brief Overloaded stream insertion operator for byte array.
178
+ * @param os The output stream.
179
+ * @param byteArray The byte array object.
180
+ * @return The output stream.
181
+ */
182
+ friend std::ostream& operator<<(std::ostream& os, const bytearray& byteArray) {
183
+ os << byteArray.toHex(true);
184
+ return os;
185
+ }
186
+
187
+ /**
188
+ * @brief Conversion operator to convert byte array to std::string.
189
+ *
190
+ * @note This is provided to support code that relies on byte array
191
+ * being representd as a string.
192
+ * @return String containing the raw bytes of the byte array
193
+ */
194
+ operator std::string() const { return std::string(data_.begin(), data_.end()); }
195
+
196
+ /**
197
+ * @brief Conversion operator to convert byte array to std::vector<uint8_t>.
198
+ * @return Vector containing the raw bytes of the byte array
199
+ */
200
+ operator std::vector<uint8_t>() const { return data_; }
201
+
202
+ //! @cond Doxygen_Suppress
203
+ // Expose vector-like functionality
204
+ size_t size() const { return data_.size(); }
205
+ const uint8_t* data() const { return data_.data(); }
206
+ uint8_t* data() { return data_.data(); }
207
+ bool empty() const { return data_.empty(); }
208
+ void clear() { data_.clear(); }
209
+ uint8_t& operator[](size_t index) { return data_[index]; }
210
+ const uint8_t& operator[](size_t index) const { return data_[index]; }
211
+ void push_back(uint8_t byte) { data_.push_back(byte); }
212
+ auto begin() const { return data_.begin(); }
213
+ auto end() const { return data_.end(); }
214
+ //! @endcond
215
+
216
+ private:
217
+ std::vector<uint8_t> data_;
218
+ };
219
+
220
+ } // namespace kvn
221
+
222
+ #endif // KVN_BYTEARRAY_H