simplejsble 0.0.4 → 0.0.6

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 (273) hide show
  1. package/VERSION +1 -0
  2. package/android/CMakeLists.txt +62 -20
  3. package/cmake/epilogue.cmake +81 -0
  4. package/cmake/find/FindDBus1.cmake +20 -0
  5. package/cmake/find/Findfmt.cmake +41 -0
  6. package/cmake/find/Findgoogletest.cmake +18 -0
  7. package/cmake/parse_version.cmake +45 -0
  8. package/cmake/prelude.cmake +8 -0
  9. package/dependencies/README +4 -0
  10. package/dependencies/external/kvn/kvn_bytearray.h +297 -0
  11. package/dependencies/external/kvn/kvn_safe_callback.hpp +66 -0
  12. package/dependencies/external/kvn/logfwd.hpp +35 -0
  13. package/dependencies/internal/include/fmt/LICENSE +27 -0
  14. package/dependencies/internal/include/fmt/args.h +220 -0
  15. package/dependencies/internal/include/fmt/base.h +2962 -0
  16. package/dependencies/internal/include/fmt/chrono.h +2338 -0
  17. package/dependencies/internal/include/fmt/color.h +610 -0
  18. package/dependencies/internal/include/fmt/compile.h +539 -0
  19. package/dependencies/internal/include/fmt/core.h +5 -0
  20. package/dependencies/internal/include/fmt/format-inl.h +1949 -0
  21. package/dependencies/internal/include/fmt/format.h +4244 -0
  22. package/dependencies/internal/include/fmt/os.h +427 -0
  23. package/dependencies/internal/include/fmt/ostream.h +166 -0
  24. package/dependencies/internal/include/fmt/printf.h +633 -0
  25. package/dependencies/internal/include/fmt/ranges.h +850 -0
  26. package/dependencies/internal/include/fmt/std.h +726 -0
  27. package/dependencies/internal/include/fmt/xchar.h +373 -0
  28. package/dependencies/internal/include/nanopb/pb.h +948 -0
  29. package/dependencies/internal/include/nanopb/pb_common.h +49 -0
  30. package/dependencies/internal/include/nanopb/pb_decode.h +204 -0
  31. package/dependencies/internal/include/nanopb/pb_encode.h +195 -0
  32. package/dependencies/internal/include/simplejni/Common.hpp +598 -0
  33. package/dependencies/internal/include/simplejni/References.hpp +151 -0
  34. package/dependencies/internal/include/simplejni/Registry.hpp +249 -0
  35. package/dependencies/internal/include/simplejni/VM.hpp +93 -0
  36. package/dependencies/internal/src/nanopb/pb_common.c +388 -0
  37. package/dependencies/internal/src/nanopb/pb_decode.c +1763 -0
  38. package/dependencies/internal/src/nanopb/pb_encode.c +1009 -0
  39. package/dependencies/internal/src/simplejni/Common.cpp +4 -0
  40. package/package.json +5 -1
  41. package/simpleble/CMakeLists.txt +519 -0
  42. package/simpleble/cmake/simpleble.pc.in +11 -0
  43. package/simpleble/include/simpleble/Adapter.h +102 -0
  44. package/simpleble/include/simpleble/AdapterSafe.h +58 -0
  45. package/simpleble/include/simpleble/Advanced.h +50 -0
  46. package/simpleble/include/simpleble/Characteristic.h +39 -0
  47. package/simpleble/include/simpleble/Config.h +64 -0
  48. package/simpleble/include/simpleble/Descriptor.h +30 -0
  49. package/simpleble/include/simpleble/Exceptions.h +72 -0
  50. package/simpleble/include/simpleble/Logging.h +73 -0
  51. package/simpleble/include/simpleble/Peripheral.h +82 -0
  52. package/simpleble/include/simpleble/PeripheralSafe.h +64 -0
  53. package/simpleble/include/simpleble/Service.h +34 -0
  54. package/simpleble/include/simpleble/SimpleBLE.h +8 -0
  55. package/simpleble/include/simpleble/Types.h +49 -0
  56. package/simpleble/include/simpleble/Utils.h +13 -0
  57. package/simpleble/include/simpleble_c/DEPRECATED +2 -0
  58. package/simpleble/include/simpleble_c/adapter.h +188 -0
  59. package/simpleble/include/simpleble_c/logging.h +37 -0
  60. package/simpleble/include/simpleble_c/peripheral.h +304 -0
  61. package/simpleble/include/simpleble_c/simpleble.h +21 -0
  62. package/simpleble/include/simpleble_c/types.h +73 -0
  63. package/simpleble/include/simpleble_c/utils.h +27 -0
  64. package/simpleble/src/CommonUtils.h +63 -0
  65. package/simpleble/src/Config.cpp +25 -0
  66. package/simpleble/src/Exceptions.cpp +31 -0
  67. package/simpleble/src/Logging.cpp +136 -0
  68. package/simpleble/src/LoggingInternal.h +85 -0
  69. package/simpleble/src/Utils.cpp +24 -0
  70. package/simpleble/src/backends/android/AdapterAndroid.cpp +101 -0
  71. package/simpleble/src/backends/android/AdapterAndroid.h +67 -0
  72. package/simpleble/src/backends/android/BackendAndroid.cpp +41 -0
  73. package/simpleble/src/backends/android/BackendAndroid.h +26 -0
  74. package/simpleble/src/backends/android/PeripheralAndroid.cpp +365 -0
  75. package/simpleble/src/backends/android/PeripheralAndroid.h +90 -0
  76. package/simpleble/src/backends/android/bridge/BluetoothGattCallback.cpp +432 -0
  77. package/simpleble/src/backends/android/bridge/BluetoothGattCallback.h +102 -0
  78. package/simpleble/src/backends/android/bridge/ScanCallback.cpp +142 -0
  79. package/simpleble/src/backends/android/bridge/ScanCallback.h +55 -0
  80. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.cpp +107 -0
  81. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.h +55 -0
  82. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.cpp +68 -0
  83. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.h +54 -0
  84. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.cpp +115 -0
  85. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.h +75 -0
  86. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.cpp +142 -0
  87. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.h +66 -0
  88. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.cpp +67 -0
  89. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.h +46 -0
  90. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.cpp +106 -0
  91. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.h +47 -0
  92. package/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.cpp +47 -0
  93. package/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.h +37 -0
  94. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.cpp +69 -0
  95. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.h +41 -0
  96. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.cpp +63 -0
  97. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.h +42 -0
  98. package/simpleble/src/backends/android/types/android/os/ParcelUUID.cpp +32 -0
  99. package/simpleble/src/backends/android/types/android/os/ParcelUUID.h +30 -0
  100. package/simpleble/src/backends/android/types/android/util/SparseArray.cpp +54 -0
  101. package/simpleble/src/backends/android/types/android/util/SparseArray.h +37 -0
  102. package/simpleble/src/backends/android/types/java/util/Iterator.cpp +36 -0
  103. package/simpleble/src/backends/android/types/java/util/Iterator.h +28 -0
  104. package/simpleble/src/backends/android/types/java/util/List.cpp +29 -0
  105. package/simpleble/src/backends/android/types/java/util/List.h +27 -0
  106. package/simpleble/src/backends/android/types/java/util/Set.cpp +33 -0
  107. package/simpleble/src/backends/android/types/java/util/Set.h +28 -0
  108. package/simpleble/src/backends/android/types/java/util/UUID.cpp +26 -0
  109. package/simpleble/src/backends/android/types/java/util/UUID.h +29 -0
  110. package/simpleble/src/backends/common/AdapterBase.cpp +53 -0
  111. package/simpleble/src/backends/common/AdapterBase.h +81 -0
  112. package/simpleble/src/backends/common/AdapterBaseTypes.h +22 -0
  113. package/simpleble/src/backends/common/BackendBase.h +20 -0
  114. package/simpleble/src/backends/common/BackendUtils.h +33 -0
  115. package/simpleble/src/backends/common/CharacteristicBase.cpp +28 -0
  116. package/simpleble/src/backends/common/CharacteristicBase.h +38 -0
  117. package/simpleble/src/backends/common/DescriptorBase.cpp +7 -0
  118. package/simpleble/src/backends/common/DescriptorBase.h +19 -0
  119. package/simpleble/src/backends/common/PeripheralBase.h +82 -0
  120. package/simpleble/src/backends/common/ServiceBase.cpp +18 -0
  121. package/simpleble/src/backends/common/ServiceBase.h +28 -0
  122. package/simpleble/src/backends/dongl/AdapterBaseTypes.h +22 -0
  123. package/simpleble/src/backends/dongl/AdapterDongl.cpp +369 -0
  124. package/simpleble/src/backends/dongl/AdapterDongl.h +60 -0
  125. package/simpleble/src/backends/dongl/BackendDongl.cpp +35 -0
  126. package/simpleble/src/backends/dongl/PeripheralDongl.cpp +562 -0
  127. package/simpleble/src/backends/dongl/PeripheralDongl.h +136 -0
  128. package/simpleble/src/backends/dongl/protocol/basic.pb.c +33 -0
  129. package/simpleble/src/backends/dongl/protocol/basic.pb.h +172 -0
  130. package/simpleble/src/backends/dongl/protocol/d2h.pb.c +18 -0
  131. package/simpleble/src/backends/dongl/protocol/d2h.pb.h +118 -0
  132. package/simpleble/src/backends/dongl/protocol/h2d.pb.c +12 -0
  133. package/simpleble/src/backends/dongl/protocol/h2d.pb.h +69 -0
  134. package/simpleble/src/backends/dongl/protocol/simpleble.pb.c +123 -0
  135. package/simpleble/src/backends/dongl/protocol/simpleble.pb.h +908 -0
  136. package/simpleble/src/backends/dongl/protocol/softdevice.pb.c +18 -0
  137. package/simpleble/src/backends/dongl/protocol/softdevice.pb.h +815 -0
  138. package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.c +339 -0
  139. package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.h +2086 -0
  140. package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.c +114 -0
  141. package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.h +772 -0
  142. package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.c +117 -0
  143. package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.h +766 -0
  144. package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.c +207 -0
  145. package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.h +1686 -0
  146. package/simpleble/src/backends/dongl/serial/Protocol.cpp +887 -0
  147. package/simpleble/src/backends/dongl/serial/Protocol.h +117 -0
  148. package/simpleble/src/backends/dongl/serial/ProtocolBase.cpp +95 -0
  149. package/simpleble/src/backends/dongl/serial/ProtocolBase.h +54 -0
  150. package/simpleble/src/backends/dongl/serial/Wire.cpp +133 -0
  151. package/simpleble/src/backends/dongl/serial/Wire.h +116 -0
  152. package/simpleble/src/backends/dongl/usb/UsbHelper.cpp +53 -0
  153. package/simpleble/src/backends/dongl/usb/UsbHelper.h +32 -0
  154. package/simpleble/src/backends/dongl/usb/UsbHelperApple.cpp +266 -0
  155. package/simpleble/src/backends/dongl/usb/UsbHelperApple.h +34 -0
  156. package/simpleble/src/backends/dongl/usb/UsbHelperImpl.h +29 -0
  157. package/simpleble/src/backends/dongl/usb/UsbHelperLinux.cpp +21 -0
  158. package/simpleble/src/backends/dongl/usb/UsbHelperLinux.h +22 -0
  159. package/simpleble/src/backends/dongl/usb/UsbHelperNull.cpp +21 -0
  160. package/simpleble/src/backends/dongl/usb/UsbHelperNull.h +22 -0
  161. package/simpleble/src/backends/dongl/usb/UsbHelperWindows.cpp +21 -0
  162. package/simpleble/src/backends/dongl/usb/UsbHelperWindows.h +22 -0
  163. package/simpleble/src/backends/linux/AdapterLinux.cpp +102 -0
  164. package/simpleble/src/backends/linux/AdapterLinux.h +55 -0
  165. package/simpleble/src/backends/linux/BackendBluez.cpp +90 -0
  166. package/simpleble/src/backends/linux/PeripheralLinux.cpp +394 -0
  167. package/simpleble/src/backends/linux/PeripheralLinux.h +90 -0
  168. package/simpleble/src/backends/linux_legacy/AdapterLinuxLegacy.cpp +102 -0
  169. package/simpleble/src/backends/linux_legacy/AdapterLinuxLegacy.h +55 -0
  170. package/simpleble/src/backends/linux_legacy/BackendBluezLegacy.cpp +87 -0
  171. package/simpleble/src/backends/linux_legacy/PeripheralLinuxLegacy.cpp +376 -0
  172. package/simpleble/src/backends/linux_legacy/PeripheralLinuxLegacy.h +90 -0
  173. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Adapter.h +46 -0
  174. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Agent.h +52 -0
  175. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Bluez.h +37 -0
  176. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezOrg.h +22 -0
  177. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezOrgBluez.h +26 -0
  178. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezRoot.h +32 -0
  179. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Characteristic.h +47 -0
  180. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Descriptor.h +33 -0
  181. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Device.h +64 -0
  182. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Exceptions.h +43 -0
  183. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Service.h +27 -0
  184. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Types.h +9 -0
  185. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Adapter1.h +49 -0
  186. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Agent1.h +100 -0
  187. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/AgentManager1.h +24 -0
  188. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Battery1.h +32 -0
  189. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Device1.h +62 -0
  190. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattCharacteristic1.h +48 -0
  191. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattDescriptor1.h +41 -0
  192. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattService1.h +28 -0
  193. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/Interface.h +67 -0
  194. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/InterfaceRegistry.h +62 -0
  195. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/Proxy.h +117 -0
  196. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Connection.h +50 -0
  197. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Exceptions.h +56 -0
  198. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Holder.h +147 -0
  199. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Logging.h +57 -0
  200. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Message.h +89 -0
  201. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Path.h +24 -0
  202. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/interfaces/ObjectManager.h +26 -0
  203. package/simpleble/src/backends/linux_legacy/src/Adapter.cpp +78 -0
  204. package/simpleble/src/backends/linux_legacy/src/Agent.cpp +72 -0
  205. package/simpleble/src/backends/linux_legacy/src/Bluez.cpp +45 -0
  206. package/simpleble/src/backends/linux_legacy/src/BluezOrg.cpp +20 -0
  207. package/simpleble/src/backends/linux_legacy/src/BluezOrgBluez.cpp +23 -0
  208. package/simpleble/src/backends/linux_legacy/src/BluezRoot.cpp +44 -0
  209. package/simpleble/src/backends/linux_legacy/src/Characteristic.cpp +64 -0
  210. package/simpleble/src/backends/linux_legacy/src/Descriptor.cpp +27 -0
  211. package/simpleble/src/backends/linux_legacy/src/Device.cpp +104 -0
  212. package/simpleble/src/backends/linux_legacy/src/Exceptions.cpp +29 -0
  213. package/simpleble/src/backends/linux_legacy/src/Service.cpp +33 -0
  214. package/simpleble/src/backends/linux_legacy/src/advanced/Interface.cpp +155 -0
  215. package/simpleble/src/backends/linux_legacy/src/advanced/Proxy.cpp +374 -0
  216. package/simpleble/src/backends/linux_legacy/src/base/Connection.cpp +219 -0
  217. package/simpleble/src/backends/linux_legacy/src/base/Exceptions.cpp +39 -0
  218. package/simpleble/src/backends/linux_legacy/src/base/Holder.cpp +739 -0
  219. package/simpleble/src/backends/linux_legacy/src/base/Message.cpp +622 -0
  220. package/simpleble/src/backends/linux_legacy/src/base/Path.cpp +129 -0
  221. package/simpleble/src/backends/linux_legacy/src/interfaces/Adapter1.cpp +123 -0
  222. package/simpleble/src/backends/linux_legacy/src/interfaces/Agent1.cpp +143 -0
  223. package/simpleble/src/backends/linux_legacy/src/interfaces/AgentManager1.cpp +34 -0
  224. package/simpleble/src/backends/linux_legacy/src/interfaces/Battery1.cpp +30 -0
  225. package/simpleble/src/backends/linux_legacy/src/interfaces/Device1.cpp +170 -0
  226. package/simpleble/src/backends/linux_legacy/src/interfaces/GattCharacteristic1.cpp +118 -0
  227. package/simpleble/src/backends/linux_legacy/src/interfaces/GattDescriptor1.cpp +78 -0
  228. package/simpleble/src/backends/linux_legacy/src/interfaces/GattService1.cpp +28 -0
  229. package/simpleble/src/backends/linux_legacy/src/interfaces/ObjectManager.cpp +58 -0
  230. package/simpleble/src/backends/macos/AdapterBaseMacOS.h +29 -0
  231. package/simpleble/src/backends/macos/AdapterBaseMacOS.mm +235 -0
  232. package/simpleble/src/backends/macos/AdapterMac.h +78 -0
  233. package/simpleble/src/backends/macos/AdapterMac.mm +156 -0
  234. package/simpleble/src/backends/macos/BackendCoreBluetooth.mm +45 -0
  235. package/simpleble/src/backends/macos/PeripheralBaseMacOS.h +49 -0
  236. package/simpleble/src/backends/macos/PeripheralBaseMacOS.mm +714 -0
  237. package/simpleble/src/backends/macos/PeripheralMac.h +81 -0
  238. package/simpleble/src/backends/macos/PeripheralMac.mm +229 -0
  239. package/simpleble/src/backends/macos/Utils.h +9 -0
  240. package/simpleble/src/backends/macos/Utils.mm +23 -0
  241. package/simpleble/src/backends/plain/AdapterPlain.cpp +65 -0
  242. package/simpleble/src/backends/plain/AdapterPlain.h +49 -0
  243. package/simpleble/src/backends/plain/BackendPlain.cpp +30 -0
  244. package/simpleble/src/backends/plain/PeripheralPlain.cpp +159 -0
  245. package/simpleble/src/backends/plain/PeripheralPlain.h +72 -0
  246. package/simpleble/src/backends/windows/AdapterWindows.cpp +338 -0
  247. package/simpleble/src/backends/windows/AdapterWindows.h +89 -0
  248. package/simpleble/src/backends/windows/BackendWinRT.cpp +67 -0
  249. package/simpleble/src/backends/windows/BackendWinRT.h +18 -0
  250. package/simpleble/src/backends/windows/MtaManager.cpp +49 -0
  251. package/simpleble/src/backends/windows/MtaManager.h +90 -0
  252. package/simpleble/src/backends/windows/PeripheralWindows.cpp +487 -0
  253. package/simpleble/src/backends/windows/PeripheralWindows.h +129 -0
  254. package/simpleble/src/backends/windows/Utils.cpp +146 -0
  255. package/simpleble/src/backends/windows/Utils.h +47 -0
  256. package/simpleble/src/builders/BuildVec.h +32 -0
  257. package/simpleble/src/builders/BuilderBase.h +87 -0
  258. package/simpleble/src/external/TaskRunner.hpp +99 -0
  259. package/simpleble/src/external/ThreadRunner.h +52 -0
  260. package/simpleble/src/external/kvn_safe_callback.hpp +66 -0
  261. package/simpleble/src/external/kvn_safe_map.hpp +94 -0
  262. package/simpleble/src/external/kvn_threadrunner.hpp +70 -0
  263. package/simpleble/src/external/logfwd.hpp +35 -0
  264. package/simpleble/src/frontends/base/Adapter.cpp +111 -0
  265. package/simpleble/src/frontends/base/Advanced.cpp +34 -0
  266. package/simpleble/src/frontends/base/Backend.cpp +95 -0
  267. package/simpleble/src/frontends/base/Backend.h +76 -0
  268. package/simpleble/src/frontends/base/Characteristic.cpp +56 -0
  269. package/simpleble/src/frontends/base/Descriptor.cpp +21 -0
  270. package/simpleble/src/frontends/base/Peripheral.cpp +113 -0
  271. package/simpleble/src/frontends/base/Service.cpp +26 -0
  272. package/simpleble/src/frontends/safe/AdapterSafe.cpp +158 -0
  273. package/simpleble/src/frontends/safe/PeripheralSafe.cpp +219 -0
@@ -0,0 +1,129 @@
1
+ #include "simpledbuslegacy/base/Path.h"
2
+
3
+ #include <algorithm>
4
+
5
+ namespace SimpleDBusLegacy {
6
+
7
+ // TODO: Add path validation and throw exception if invalid
8
+
9
+ size_t Path::count_elements(const std::string& path) {
10
+ if (path.empty() || path == "/") {
11
+ return 0;
12
+ }
13
+
14
+ return std::count(path.begin(), path.end(), '/');
15
+ }
16
+
17
+ std::vector<std::string> Path::split_elements(const std::string& path) {
18
+ std::vector<std::string> elements;
19
+
20
+ if (path.empty() || path == "/") {
21
+ return elements;
22
+ }
23
+
24
+ // Note: Skip the first element, which is the root
25
+ std::string::const_iterator it = path.begin() + 1;
26
+ std::string::const_iterator end = path.end();
27
+
28
+ while (it != end) {
29
+ std::string::const_iterator next = std::find(it, end, '/');
30
+ elements.push_back(std::string(it, next));
31
+ it = next;
32
+ if (it != end) {
33
+ ++it;
34
+ }
35
+ }
36
+
37
+ return elements;
38
+ }
39
+
40
+ std::string Path::fetch_elements(const std::string& path, size_t count) {
41
+ if (count == 0) {
42
+ return "/";
43
+ }
44
+
45
+ if (count > count_elements(path)) {
46
+ // TODO: Should we throw an exception?
47
+ return path;
48
+ }
49
+
50
+ std::vector<std::string> elements = split_elements(path);
51
+ std::string result;
52
+
53
+ for (size_t i = 0; i < count; i++) {
54
+ result += "/" + elements[i];
55
+ }
56
+
57
+ return result;
58
+ }
59
+
60
+ bool Path::is_descendant(const std::string& base, const std::string& path) {
61
+ if (base.empty() || path.empty()) {
62
+ return false;
63
+ }
64
+
65
+ if (base == path) {
66
+ return false;
67
+ }
68
+
69
+ if (base == "/") {
70
+ return true;
71
+ }
72
+
73
+ return path.rfind(base) == 0;
74
+ }
75
+
76
+ bool Path::is_ascendant(const std::string& base, const std::string& path) {
77
+ if (base.empty() || path.empty()) {
78
+ return false;
79
+ }
80
+
81
+ if (base == path) {
82
+ return false;
83
+ }
84
+
85
+ return !is_descendant(base, path);
86
+ }
87
+
88
+ bool Path::is_child(const std::string& base, const std::string& path) {
89
+ if (base.empty() || path.empty()) {
90
+ return false;
91
+ }
92
+
93
+ if (base == path) {
94
+ return false;
95
+ }
96
+
97
+ if (!is_descendant(base, path)) {
98
+ return false;
99
+ }
100
+
101
+ return count_elements(base) + 1 == count_elements(path);
102
+ }
103
+
104
+ bool Path::is_parent(const std::string& base, const std::string& path) {
105
+ if (base.empty() || path.empty()) {
106
+ return false;
107
+ }
108
+
109
+ if (base == path) {
110
+ return false;
111
+ }
112
+
113
+ if (!is_ascendant(base, path)) {
114
+ return false;
115
+ }
116
+
117
+ return count_elements(base) - 1 == count_elements(path);
118
+ }
119
+
120
+ std::string Path::next_child(const std::string& base, const std::string& path) {
121
+ return fetch_elements(path, count_elements(base) + 1);
122
+ }
123
+
124
+ std::string Path::next_child_strip(const std::string& base, const std::string& path) {
125
+ const std::string child = next_child(base, path);
126
+ return child.substr(base.length() + 1);
127
+ }
128
+
129
+ } // namespace SimpleDBusLegacy
@@ -0,0 +1,123 @@
1
+ #include "simplebluezlegacy/interfaces/Adapter1.h"
2
+
3
+ using namespace SimpleBluezLegacy;
4
+
5
+ const SimpleDBusLegacy::AutoRegisterInterface<Adapter1> Adapter1::registry{
6
+ "org.bluez.Adapter1",
7
+ // clang-format off
8
+ [](std::shared_ptr<SimpleDBusLegacy::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBusLegacy::Holder& options) -> std::shared_ptr<SimpleDBusLegacy::Interface> {
9
+ return std::static_pointer_cast<SimpleDBusLegacy::Interface>(std::make_shared<Adapter1>(conn, path));
10
+ }
11
+ // clang-format on
12
+ };
13
+
14
+ Adapter1::Adapter1(std::shared_ptr<SimpleDBusLegacy::Connection> conn, std::string path)
15
+ : SimpleDBusLegacy::Interface(conn, "org.bluez", path, "org.bluez.Adapter1") {}
16
+
17
+ void Adapter1::StartDiscovery() {
18
+ auto msg = create_method_call("StartDiscovery");
19
+ _conn->send_with_reply_and_block(msg);
20
+ }
21
+
22
+ void Adapter1::StopDiscovery() {
23
+ auto msg = create_method_call("StopDiscovery");
24
+ _conn->send_with_reply_and_block(msg);
25
+ // NOTE: It might take a few seconds until the peripheral reports that is has actually stopped discovering.
26
+ }
27
+
28
+ SimpleDBusLegacy::Holder Adapter1::GetDiscoveryFilters() {
29
+ auto msg = create_method_call("GetDiscoveryFilters");
30
+ SimpleDBusLegacy::Message reply_msg = _conn->send_with_reply_and_block(msg);
31
+ SimpleDBusLegacy::Holder discovery_filters = reply_msg.extract();
32
+ return discovery_filters;
33
+ }
34
+
35
+ void Adapter1::SetDiscoveryFilter(DiscoveryFilter filter) {
36
+ SimpleDBusLegacy::Holder properties = SimpleDBusLegacy::Holder::create_dict();
37
+
38
+ if (filter.UUIDs.size() > 0) {
39
+ SimpleDBusLegacy::Holder uuids = SimpleDBusLegacy::Holder::create_array();
40
+ for (size_t i = 0; i < filter.UUIDs.size(); i++) {
41
+ uuids.array_append(SimpleDBusLegacy::Holder::create_string(filter.UUIDs.at(i)));
42
+ }
43
+ properties.dict_append(SimpleDBusLegacy::Holder::Type::ARRAY, "UUIDs", uuids);
44
+ }
45
+
46
+ if (filter.RSSI.has_value()) {
47
+ properties.dict_append(SimpleDBusLegacy::Holder::Type::INT16, "RSSI",
48
+ SimpleDBusLegacy::Holder::create_int16(filter.RSSI.value()));
49
+ }
50
+
51
+ if (filter.Pathloss.has_value()) {
52
+ properties.dict_append(SimpleDBusLegacy::Holder::Type::UINT16, "Pathloss",
53
+ SimpleDBusLegacy::Holder::create_uint16(filter.Pathloss.value()));
54
+ }
55
+
56
+ switch (filter.Transport) {
57
+ case DiscoveryFilter::TransportType::AUTO: {
58
+ properties.dict_append(SimpleDBusLegacy::Holder::Type::STRING, "Transport",
59
+ SimpleDBusLegacy::Holder::create_string("auto"));
60
+ break;
61
+ }
62
+ case DiscoveryFilter::TransportType::BREDR: {
63
+ properties.dict_append(SimpleDBusLegacy::Holder::Type::STRING, "Transport",
64
+ SimpleDBusLegacy::Holder::create_string("bredr"));
65
+ break;
66
+ }
67
+ case DiscoveryFilter::TransportType::LE: {
68
+ properties.dict_append(SimpleDBusLegacy::Holder::Type::STRING, "Transport",
69
+ SimpleDBusLegacy::Holder::create_string("le"));
70
+ break;
71
+ }
72
+ }
73
+
74
+ if (!filter.DuplicateData) {
75
+ properties.dict_append(SimpleDBusLegacy::Holder::Type::BOOLEAN, "DuplicateData",
76
+ SimpleDBusLegacy::Holder::create_boolean(false));
77
+ }
78
+
79
+ if (filter.Discoverable) {
80
+ properties.dict_append(SimpleDBusLegacy::Holder::Type::BOOLEAN, "Discoverable",
81
+ SimpleDBusLegacy::Holder::create_boolean(false));
82
+ }
83
+
84
+ if (filter.Pattern.size() > 0) {
85
+ properties.dict_append(SimpleDBusLegacy::Holder::Type::STRING, "Pattern",
86
+ SimpleDBusLegacy::Holder::create_string(filter.Pattern));
87
+ }
88
+
89
+ auto msg = create_method_call("SetDiscoveryFilter");
90
+ msg.append_argument(properties, "a{sv}");
91
+ _conn->send_with_reply_and_block(msg);
92
+ }
93
+
94
+ void Adapter1::RemoveDevice(std::string device_path) {
95
+ auto msg = create_method_call("RemoveDevice");
96
+ msg.append_argument(SimpleDBusLegacy::Holder::create_object_path(device_path), "o");
97
+ _conn->send_with_reply_and_block(msg);
98
+ }
99
+
100
+ bool Adapter1::Discovering(bool refresh) {
101
+ if (refresh) {
102
+ property_refresh("Discovering");
103
+ }
104
+
105
+ std::scoped_lock lock(_property_update_mutex);
106
+ return _properties["Discovering"].get_boolean();
107
+ }
108
+
109
+ bool Adapter1::Powered(bool refresh) {
110
+ if (refresh) {
111
+ property_refresh("Powered");
112
+ }
113
+
114
+ std::scoped_lock lock(_property_update_mutex);
115
+ return _properties["Powered"].get_boolean();
116
+ }
117
+
118
+ std::string Adapter1::Address() {
119
+ std::scoped_lock lock(_property_update_mutex);
120
+ return _properties["Address"].get_string();
121
+ }
122
+
123
+ void Adapter1::property_changed(std::string option_name) {}
@@ -0,0 +1,143 @@
1
+ #include "simplebluezlegacy/interfaces/Agent1.h"
2
+
3
+ using namespace SimpleBluezLegacy;
4
+
5
+ const SimpleDBusLegacy::AutoRegisterInterface<Agent1> Agent1::registry{
6
+ "org.bluez.Agent1",
7
+ // clang-format off
8
+ [](std::shared_ptr<SimpleDBusLegacy::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBusLegacy::Holder& options) -> std::shared_ptr<SimpleDBusLegacy::Interface> {
9
+ return std::static_pointer_cast<SimpleDBusLegacy::Interface>(std::make_shared<Agent1>(conn, path));
10
+ }
11
+ // clang-format on
12
+ };
13
+
14
+ Agent1::Agent1(std::shared_ptr<SimpleDBusLegacy::Connection> conn, std::string path)
15
+ : SimpleDBusLegacy::Interface(conn, "org.bluez", path, "org.bluez.Agent1") {}
16
+
17
+ void Agent1::message_handle(SimpleDBusLegacy::Message& msg) {
18
+ if (msg.get_type() == SimpleDBusLegacy::Message::Type::METHOD_CALL) {
19
+ // To minimize the amount of repeated code, create a method return object that will be
20
+ // used to send the reply.
21
+ SimpleDBusLegacy::Message reply = SimpleDBusLegacy::Message::create_method_return(msg);
22
+
23
+ if (msg.get_member() == "Release") {
24
+ // Nothing to do
25
+
26
+ } else if (msg.get_member() == "RequestPinCode") {
27
+ // std::cout << "Agent1::message_handle() RequestPinCode" << std::endl;
28
+
29
+ std::string pin_code = "abc123";
30
+ if (OnRequestPinCode) {
31
+ pin_code = OnRequestPinCode();
32
+ }
33
+
34
+ if (!pin_code.empty()) {
35
+ reply.append_argument(SimpleDBusLegacy::Holder::create_string(pin_code), DBUS_TYPE_STRING_AS_STRING);
36
+ } else {
37
+ reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
38
+ return;
39
+ }
40
+
41
+ } else if (msg.get_member() == "RequestPasskey") {
42
+ // std::cout << "Agent1::message_handle() RequestPasskey" << std::endl;
43
+
44
+ int32_t passkey = 123456;
45
+ if (OnRequestPasskey) {
46
+ passkey = OnRequestPasskey();
47
+ }
48
+
49
+ if (passkey >= 0 && passkey <= 999999) {
50
+ reply.append_argument(SimpleDBusLegacy::Holder::create_uint32(static_cast<uint32_t>(passkey)),
51
+ DBUS_TYPE_UINT32_AS_STRING);
52
+ } else {
53
+ reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
54
+ return;
55
+ }
56
+
57
+ } else if (msg.get_member() == "DisplayPinCode") {
58
+ // std::cout << "Agent1::message_handle() DisplayPinCode" << std::endl;
59
+ SimpleDBusLegacy::Holder arg_device = msg.extract();
60
+ SimpleDBusLegacy::Holder arg_pin_code = msg.extract();
61
+
62
+ bool success = true;
63
+ if (OnDisplayPinCode) {
64
+ success = OnDisplayPinCode(arg_pin_code.get_string());
65
+ }
66
+
67
+ if (!success) {
68
+ reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
69
+ return;
70
+ }
71
+
72
+ } else if (msg.get_member() == "DisplayPasskey") {
73
+ // std::cout << "Agent1::message_handle() DisplayPasskey" << std::endl;
74
+ SimpleDBusLegacy::Holder arg_device = msg.extract();
75
+ SimpleDBusLegacy::Holder arg_passkey = msg.extract();
76
+ SimpleDBusLegacy::Holder arg_entered = msg.extract();
77
+
78
+ if (OnDisplayPasskey) {
79
+ OnDisplayPasskey(arg_passkey.get_uint32(), arg_entered.get_uint16());
80
+ }
81
+
82
+ } else if (msg.get_member() == "RequestConfirmation") {
83
+ // std::cout << "Agent1::message_handle() RequestConfirmation" << std::endl;
84
+ SimpleDBusLegacy::Holder arg_device = msg.extract();
85
+ SimpleDBusLegacy::Holder arg_passkey = msg.extract();
86
+
87
+ bool success = true;
88
+ if (OnRequestConfirmation) {
89
+ success = OnRequestConfirmation(arg_passkey.get_uint32());
90
+ }
91
+
92
+ if (!success) {
93
+ reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
94
+ return;
95
+ }
96
+
97
+ } else if (msg.get_member() == "RequestAuthorization") {
98
+ // std::cout << "Agent1::message_handle() RequestAuthorization" << std::endl;
99
+ SimpleDBusLegacy::Holder arg_device = msg.extract();
100
+
101
+ bool success = true;
102
+ if (OnRequestAuthorization) {
103
+ success = OnRequestAuthorization();
104
+ }
105
+
106
+ if (!success) {
107
+ reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
108
+ return;
109
+ }
110
+
111
+ } else if (msg.get_member() == "AuthorizeService") {
112
+ // std::cout << "Agent1::message_handle() AuthorizeService" << std::endl;
113
+
114
+ SimpleDBusLegacy::Holder arg_device = msg.extract();
115
+ SimpleDBusLegacy::Holder arg_uuid = msg.extract();
116
+
117
+ bool success = true;
118
+ if (OnAuthorizeService) {
119
+ success = OnAuthorizeService(arg_uuid.get_string());
120
+ }
121
+
122
+ if (!success) {
123
+ reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
124
+ return;
125
+ }
126
+
127
+ } else if (msg.get_member() == "Cancel") {
128
+ // std::cout << "Agent1::message_handle() Cancel" << std::endl;
129
+ // NOTE: Due to the blocking nature of this interface, the Cancel method won't
130
+ // have any real impact on any of the callbacks, and thus will be ignored.
131
+
132
+ } else {
133
+ // std::cout << "Agent1::message_handle() Unknown method: " << msg.get_member() << std::endl;
134
+ }
135
+
136
+ _conn->send(reply);
137
+ }
138
+ }
139
+
140
+ void Agent1::reply_error(SimpleDBusLegacy::Message& msg, const std::string& error_name, const std::string& error_message) {
141
+ SimpleDBusLegacy::Message reply = SimpleDBusLegacy::Message::create_error(msg, error_name, error_message);
142
+ _conn->send(reply);
143
+ }
@@ -0,0 +1,34 @@
1
+ #include <simplebluezlegacy/interfaces/AgentManager1.h>
2
+
3
+ using namespace SimpleBluezLegacy;
4
+
5
+ const SimpleDBusLegacy::AutoRegisterInterface<AgentManager1> AgentManager1::registry{
6
+ "org.bluez.AgentManager1",
7
+ // clang-format off
8
+ [](std::shared_ptr<SimpleDBusLegacy::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBusLegacy::Holder& options) -> std::shared_ptr<SimpleDBusLegacy::Interface> {
9
+ return std::static_pointer_cast<SimpleDBusLegacy::Interface>(std::make_shared<AgentManager1>(conn, path));
10
+ }
11
+ // clang-format on
12
+ };
13
+
14
+ AgentManager1::AgentManager1(std::shared_ptr<SimpleDBusLegacy::Connection> conn, std::string path)
15
+ : SimpleDBusLegacy::Interface(conn, "org.bluez", path, "org.bluez.AgentManager1") {}
16
+
17
+ void AgentManager1::RegisterAgent(std::string agent, std::string capability) {
18
+ auto msg = create_method_call("RegisterAgent");
19
+ msg.append_argument(SimpleDBusLegacy::Holder::create_object_path(agent), "o");
20
+ msg.append_argument(SimpleDBusLegacy::Holder::create_string(capability), "s");
21
+ _conn->send_with_reply_and_block(msg);
22
+ }
23
+
24
+ void AgentManager1::RequestDefaultAgent(std::string agent) {
25
+ auto msg = create_method_call("RequestDefaultAgent");
26
+ msg.append_argument(SimpleDBusLegacy::Holder::create_object_path(agent), "o");
27
+ _conn->send_with_reply_and_block(msg);
28
+ }
29
+
30
+ void AgentManager1::UnregisterAgent(std::string agent) {
31
+ auto msg = create_method_call("UnregisterAgent");
32
+ msg.append_argument(SimpleDBusLegacy::Holder::create_object_path(agent), "o");
33
+ _conn->send_with_reply_and_block(msg);
34
+ }
@@ -0,0 +1,30 @@
1
+ #include "simplebluezlegacy/interfaces/Battery1.h"
2
+
3
+ #include <iostream>
4
+
5
+ using namespace SimpleBluezLegacy;
6
+
7
+ const SimpleDBusLegacy::AutoRegisterInterface<Battery1> Battery1::registry{
8
+ "org.bluez.Battery1",
9
+ // clang-format off
10
+ [](std::shared_ptr<SimpleDBusLegacy::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBusLegacy::Holder& options) -> std::shared_ptr<SimpleDBusLegacy::Interface> {
11
+ return std::static_pointer_cast<SimpleDBusLegacy::Interface>(std::make_shared<Battery1>(conn, path));
12
+ }
13
+ // clang-format on
14
+ };
15
+
16
+ Battery1::Battery1(std::shared_ptr<SimpleDBusLegacy::Connection> conn, std::string path)
17
+ : SimpleDBusLegacy::Interface(conn, "org.bluez", path, "org.bluez.Battery1") {}
18
+
19
+ Battery1::~Battery1() { OnPercentageChanged.unload(); }
20
+
21
+ uint8_t Battery1::Percentage() {
22
+ std::scoped_lock lock(_property_update_mutex);
23
+ return _properties["Percentage"].get_byte();
24
+ }
25
+
26
+ void Battery1::property_changed(std::string option_name) {
27
+ if (option_name == "Percentage") {
28
+ OnPercentageChanged();
29
+ }
30
+ }
@@ -0,0 +1,170 @@
1
+ #include "simplebluezlegacy/interfaces/Device1.h"
2
+
3
+ using namespace SimpleBluezLegacy;
4
+
5
+ const SimpleDBusLegacy::AutoRegisterInterface<Device1> Device1::registry{
6
+ "org.bluez.Device1",
7
+ // clang-format off
8
+ [](std::shared_ptr<SimpleDBusLegacy::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBusLegacy::Holder& options) -> std::shared_ptr<SimpleDBusLegacy::Interface> {
9
+ return std::static_pointer_cast<SimpleDBusLegacy::Interface>(std::make_shared<Device1>(conn, path));
10
+ }
11
+ // clang-format on
12
+ };
13
+
14
+ Device1::Device1(std::shared_ptr<SimpleDBusLegacy::Connection> conn, std::string path)
15
+ : SimpleDBusLegacy::Interface(conn, "org.bluez", path, "org.bluez.Device1") {}
16
+
17
+ Device1::~Device1() {
18
+ OnDisconnected.unload();
19
+ OnServicesResolved.unload();
20
+ }
21
+
22
+ void Device1::Connect() {
23
+ auto msg = create_method_call("Connect");
24
+ _conn->send_with_reply_and_block(msg);
25
+ }
26
+
27
+ void Device1::Disconnect() {
28
+ auto msg = create_method_call("Disconnect");
29
+ _conn->send_with_reply_and_block(msg);
30
+ }
31
+
32
+ void Device1::Pair() {
33
+ auto msg = create_method_call("Pair");
34
+ _conn->send_with_reply_and_block(msg);
35
+ }
36
+
37
+ void Device1::CancelPairing() {
38
+ auto msg = create_method_call("CancelPairing");
39
+ _conn->send_with_reply_and_block(msg);
40
+ }
41
+
42
+ int16_t Device1::RSSI() {
43
+ std::scoped_lock lock(_property_update_mutex);
44
+ return _properties["RSSI"].get_int16();
45
+ }
46
+
47
+ int16_t Device1::TxPower() { return _tx_power; }
48
+
49
+ uint16_t Device1::Appearance() {
50
+ std::scoped_lock lock(_property_update_mutex);
51
+ return _properties["Appearance"].get_uint16();
52
+ }
53
+
54
+ std::string Device1::Address() {
55
+ std::scoped_lock lock(_property_update_mutex);
56
+ return _properties["Address"].get_string();
57
+ }
58
+
59
+ std::string Device1::AddressType() {
60
+ std::scoped_lock lock(_property_update_mutex);
61
+ return _properties["AddressType"].get_string();
62
+ }
63
+
64
+ std::string Device1::Alias() {
65
+ std::scoped_lock lock(_property_update_mutex);
66
+ return _properties["Alias"].get_string();
67
+ }
68
+
69
+ std::string Device1::Name() {
70
+ std::scoped_lock lock(_property_update_mutex);
71
+ return _properties["Name"].get_string();
72
+ }
73
+
74
+ std::vector<std::string> Device1::UUIDs() {
75
+ std::scoped_lock lock(_property_update_mutex);
76
+
77
+ std::vector<std::string> uuids;
78
+ for (SimpleDBusLegacy::Holder& uuid : _properties["UUIDs"].get_array()) {
79
+ uuids.push_back(uuid.get_string());
80
+ }
81
+
82
+ return uuids;
83
+ }
84
+
85
+ std::map<uint16_t, ByteArray> Device1::ManufacturerData(bool refresh) {
86
+ if (refresh) {
87
+ property_refresh("ManufacturerData");
88
+ }
89
+
90
+ // Use the locally cached version to avoid parsing the map multiple times.
91
+ std::scoped_lock lock(_property_update_mutex);
92
+ return _manufacturer_data;
93
+ }
94
+
95
+ std::map<std::string, ByteArray> Device1::ServiceData(bool refresh) {
96
+ if (refresh) {
97
+ property_refresh("ServiceData");
98
+ }
99
+
100
+ // Use the locally cached version to avoid parsing the map multiple times.
101
+ std::scoped_lock lock(_property_update_mutex);
102
+ return _service_data;
103
+ }
104
+
105
+ bool Device1::Paired(bool refresh) {
106
+ if (refresh) {
107
+ property_refresh("Paired");
108
+ }
109
+
110
+ std::scoped_lock lock(_property_update_mutex);
111
+ return _properties["Paired"].get_boolean();
112
+ }
113
+
114
+ bool Device1::Connected(bool refresh) {
115
+ if (refresh) {
116
+ property_refresh("Connected");
117
+ }
118
+
119
+ std::scoped_lock lock(_property_update_mutex);
120
+ return _properties["Connected"].get_boolean();
121
+ }
122
+
123
+ bool Device1::ServicesResolved(bool refresh) {
124
+ if (refresh) {
125
+ property_refresh("ServicesResolved");
126
+ }
127
+
128
+ std::scoped_lock lock(_property_update_mutex);
129
+ return _properties["ServicesResolved"].get_boolean();
130
+ }
131
+
132
+ void Device1::property_changed(std::string option_name) {
133
+ if (option_name == "Connected") {
134
+ if (!Connected(false)) {
135
+ OnDisconnected();
136
+ }
137
+ } else if (option_name == "ServicesResolved") {
138
+ if (ServicesResolved(false)) {
139
+ OnServicesResolved();
140
+ }
141
+ } else if (option_name == "ManufacturerData") {
142
+ std::scoped_lock lock(_property_update_mutex);
143
+
144
+ _manufacturer_data.clear();
145
+ std::map<uint16_t, SimpleDBusLegacy::Holder> manuf_data = _properties["ManufacturerData"].get_dict_uint16();
146
+ // Loop through all received keys and store them.
147
+ for (auto& [key, value_array] : manuf_data) {
148
+ ByteArray raw_manuf_data;
149
+ for (auto& elem : value_array.get_array()) {
150
+ raw_manuf_data.push_back(elem.get_byte());
151
+ }
152
+ _manufacturer_data[key] = raw_manuf_data;
153
+ }
154
+ } else if (option_name == "ServiceData") {
155
+ std::scoped_lock lock(_property_update_mutex);
156
+
157
+ _service_data.clear();
158
+ std::map<std::string, SimpleDBusLegacy::Holder> service_data = _properties["ServiceData"].get_dict_string();
159
+ // Loop through all received keys and store them.
160
+ for (auto& [key, value_array] : service_data) {
161
+ ByteArray raw_service_data;
162
+ for (auto& elem : value_array.get_array()) {
163
+ raw_service_data.push_back(elem.get_byte());
164
+ }
165
+ _service_data[key] = raw_service_data;
166
+ }
167
+ } else if (option_name == "TxPower") {
168
+ _tx_power = _properties["TxPower"].get_int16();
169
+ }
170
+ }