simplejsble 0.0.4 → 0.0.5

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 (272) 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/include/simpleble/Adapter.h +102 -0
  43. package/simpleble/include/simpleble/AdapterSafe.h +58 -0
  44. package/simpleble/include/simpleble/Advanced.h +50 -0
  45. package/simpleble/include/simpleble/Characteristic.h +39 -0
  46. package/simpleble/include/simpleble/Config.h +64 -0
  47. package/simpleble/include/simpleble/Descriptor.h +30 -0
  48. package/simpleble/include/simpleble/Exceptions.h +72 -0
  49. package/simpleble/include/simpleble/Logging.h +73 -0
  50. package/simpleble/include/simpleble/Peripheral.h +82 -0
  51. package/simpleble/include/simpleble/PeripheralSafe.h +64 -0
  52. package/simpleble/include/simpleble/Service.h +34 -0
  53. package/simpleble/include/simpleble/SimpleBLE.h +8 -0
  54. package/simpleble/include/simpleble/Types.h +49 -0
  55. package/simpleble/include/simpleble/Utils.h +13 -0
  56. package/simpleble/include/simpleble_c/DEPRECATED +2 -0
  57. package/simpleble/include/simpleble_c/adapter.h +188 -0
  58. package/simpleble/include/simpleble_c/logging.h +37 -0
  59. package/simpleble/include/simpleble_c/peripheral.h +304 -0
  60. package/simpleble/include/simpleble_c/simpleble.h +21 -0
  61. package/simpleble/include/simpleble_c/types.h +73 -0
  62. package/simpleble/include/simpleble_c/utils.h +27 -0
  63. package/simpleble/src/CommonUtils.h +63 -0
  64. package/simpleble/src/Config.cpp +25 -0
  65. package/simpleble/src/Exceptions.cpp +31 -0
  66. package/simpleble/src/Logging.cpp +136 -0
  67. package/simpleble/src/LoggingInternal.h +85 -0
  68. package/simpleble/src/Utils.cpp +24 -0
  69. package/simpleble/src/backends/android/AdapterAndroid.cpp +101 -0
  70. package/simpleble/src/backends/android/AdapterAndroid.h +67 -0
  71. package/simpleble/src/backends/android/BackendAndroid.cpp +41 -0
  72. package/simpleble/src/backends/android/BackendAndroid.h +26 -0
  73. package/simpleble/src/backends/android/PeripheralAndroid.cpp +365 -0
  74. package/simpleble/src/backends/android/PeripheralAndroid.h +90 -0
  75. package/simpleble/src/backends/android/bridge/BluetoothGattCallback.cpp +432 -0
  76. package/simpleble/src/backends/android/bridge/BluetoothGattCallback.h +102 -0
  77. package/simpleble/src/backends/android/bridge/ScanCallback.cpp +142 -0
  78. package/simpleble/src/backends/android/bridge/ScanCallback.h +55 -0
  79. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.cpp +107 -0
  80. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.h +55 -0
  81. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.cpp +68 -0
  82. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.h +54 -0
  83. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.cpp +115 -0
  84. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.h +75 -0
  85. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.cpp +142 -0
  86. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.h +66 -0
  87. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.cpp +67 -0
  88. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.h +46 -0
  89. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.cpp +106 -0
  90. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.h +47 -0
  91. package/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.cpp +47 -0
  92. package/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.h +37 -0
  93. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.cpp +69 -0
  94. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.h +41 -0
  95. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.cpp +63 -0
  96. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.h +42 -0
  97. package/simpleble/src/backends/android/types/android/os/ParcelUUID.cpp +32 -0
  98. package/simpleble/src/backends/android/types/android/os/ParcelUUID.h +30 -0
  99. package/simpleble/src/backends/android/types/android/util/SparseArray.cpp +54 -0
  100. package/simpleble/src/backends/android/types/android/util/SparseArray.h +37 -0
  101. package/simpleble/src/backends/android/types/java/util/Iterator.cpp +36 -0
  102. package/simpleble/src/backends/android/types/java/util/Iterator.h +28 -0
  103. package/simpleble/src/backends/android/types/java/util/List.cpp +29 -0
  104. package/simpleble/src/backends/android/types/java/util/List.h +27 -0
  105. package/simpleble/src/backends/android/types/java/util/Set.cpp +33 -0
  106. package/simpleble/src/backends/android/types/java/util/Set.h +28 -0
  107. package/simpleble/src/backends/android/types/java/util/UUID.cpp +26 -0
  108. package/simpleble/src/backends/android/types/java/util/UUID.h +29 -0
  109. package/simpleble/src/backends/common/AdapterBase.cpp +53 -0
  110. package/simpleble/src/backends/common/AdapterBase.h +81 -0
  111. package/simpleble/src/backends/common/AdapterBaseTypes.h +22 -0
  112. package/simpleble/src/backends/common/BackendBase.h +20 -0
  113. package/simpleble/src/backends/common/BackendUtils.h +33 -0
  114. package/simpleble/src/backends/common/CharacteristicBase.cpp +28 -0
  115. package/simpleble/src/backends/common/CharacteristicBase.h +38 -0
  116. package/simpleble/src/backends/common/DescriptorBase.cpp +7 -0
  117. package/simpleble/src/backends/common/DescriptorBase.h +19 -0
  118. package/simpleble/src/backends/common/PeripheralBase.h +82 -0
  119. package/simpleble/src/backends/common/ServiceBase.cpp +18 -0
  120. package/simpleble/src/backends/common/ServiceBase.h +28 -0
  121. package/simpleble/src/backends/dongl/AdapterBaseTypes.h +22 -0
  122. package/simpleble/src/backends/dongl/AdapterDongl.cpp +369 -0
  123. package/simpleble/src/backends/dongl/AdapterDongl.h +60 -0
  124. package/simpleble/src/backends/dongl/BackendDongl.cpp +35 -0
  125. package/simpleble/src/backends/dongl/PeripheralDongl.cpp +562 -0
  126. package/simpleble/src/backends/dongl/PeripheralDongl.h +136 -0
  127. package/simpleble/src/backends/dongl/protocol/basic.pb.c +33 -0
  128. package/simpleble/src/backends/dongl/protocol/basic.pb.h +172 -0
  129. package/simpleble/src/backends/dongl/protocol/d2h.pb.c +18 -0
  130. package/simpleble/src/backends/dongl/protocol/d2h.pb.h +118 -0
  131. package/simpleble/src/backends/dongl/protocol/h2d.pb.c +12 -0
  132. package/simpleble/src/backends/dongl/protocol/h2d.pb.h +69 -0
  133. package/simpleble/src/backends/dongl/protocol/simpleble.pb.c +123 -0
  134. package/simpleble/src/backends/dongl/protocol/simpleble.pb.h +908 -0
  135. package/simpleble/src/backends/dongl/protocol/softdevice.pb.c +18 -0
  136. package/simpleble/src/backends/dongl/protocol/softdevice.pb.h +815 -0
  137. package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.c +339 -0
  138. package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.h +2086 -0
  139. package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.c +114 -0
  140. package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.h +772 -0
  141. package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.c +117 -0
  142. package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.h +766 -0
  143. package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.c +207 -0
  144. package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.h +1686 -0
  145. package/simpleble/src/backends/dongl/serial/Protocol.cpp +887 -0
  146. package/simpleble/src/backends/dongl/serial/Protocol.h +117 -0
  147. package/simpleble/src/backends/dongl/serial/ProtocolBase.cpp +95 -0
  148. package/simpleble/src/backends/dongl/serial/ProtocolBase.h +54 -0
  149. package/simpleble/src/backends/dongl/serial/Wire.cpp +133 -0
  150. package/simpleble/src/backends/dongl/serial/Wire.h +116 -0
  151. package/simpleble/src/backends/dongl/usb/UsbHelper.cpp +53 -0
  152. package/simpleble/src/backends/dongl/usb/UsbHelper.h +32 -0
  153. package/simpleble/src/backends/dongl/usb/UsbHelperApple.cpp +266 -0
  154. package/simpleble/src/backends/dongl/usb/UsbHelperApple.h +34 -0
  155. package/simpleble/src/backends/dongl/usb/UsbHelperImpl.h +29 -0
  156. package/simpleble/src/backends/dongl/usb/UsbHelperLinux.cpp +21 -0
  157. package/simpleble/src/backends/dongl/usb/UsbHelperLinux.h +22 -0
  158. package/simpleble/src/backends/dongl/usb/UsbHelperNull.cpp +21 -0
  159. package/simpleble/src/backends/dongl/usb/UsbHelperNull.h +22 -0
  160. package/simpleble/src/backends/dongl/usb/UsbHelperWindows.cpp +21 -0
  161. package/simpleble/src/backends/dongl/usb/UsbHelperWindows.h +22 -0
  162. package/simpleble/src/backends/linux/AdapterLinux.cpp +102 -0
  163. package/simpleble/src/backends/linux/AdapterLinux.h +55 -0
  164. package/simpleble/src/backends/linux/BackendBluez.cpp +90 -0
  165. package/simpleble/src/backends/linux/PeripheralLinux.cpp +394 -0
  166. package/simpleble/src/backends/linux/PeripheralLinux.h +90 -0
  167. package/simpleble/src/backends/linux_legacy/AdapterLinuxLegacy.cpp +102 -0
  168. package/simpleble/src/backends/linux_legacy/AdapterLinuxLegacy.h +55 -0
  169. package/simpleble/src/backends/linux_legacy/BackendBluezLegacy.cpp +87 -0
  170. package/simpleble/src/backends/linux_legacy/PeripheralLinuxLegacy.cpp +376 -0
  171. package/simpleble/src/backends/linux_legacy/PeripheralLinuxLegacy.h +90 -0
  172. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Adapter.h +46 -0
  173. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Agent.h +52 -0
  174. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Bluez.h +37 -0
  175. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezOrg.h +22 -0
  176. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezOrgBluez.h +26 -0
  177. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezRoot.h +32 -0
  178. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Characteristic.h +47 -0
  179. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Descriptor.h +33 -0
  180. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Device.h +64 -0
  181. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Exceptions.h +43 -0
  182. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Service.h +27 -0
  183. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Types.h +9 -0
  184. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Adapter1.h +49 -0
  185. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Agent1.h +100 -0
  186. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/AgentManager1.h +24 -0
  187. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Battery1.h +32 -0
  188. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Device1.h +62 -0
  189. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattCharacteristic1.h +48 -0
  190. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattDescriptor1.h +41 -0
  191. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattService1.h +28 -0
  192. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/Interface.h +67 -0
  193. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/InterfaceRegistry.h +62 -0
  194. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/Proxy.h +117 -0
  195. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Connection.h +50 -0
  196. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Exceptions.h +56 -0
  197. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Holder.h +147 -0
  198. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Logging.h +57 -0
  199. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Message.h +89 -0
  200. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Path.h +24 -0
  201. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/interfaces/ObjectManager.h +26 -0
  202. package/simpleble/src/backends/linux_legacy/src/Adapter.cpp +78 -0
  203. package/simpleble/src/backends/linux_legacy/src/Agent.cpp +72 -0
  204. package/simpleble/src/backends/linux_legacy/src/Bluez.cpp +45 -0
  205. package/simpleble/src/backends/linux_legacy/src/BluezOrg.cpp +20 -0
  206. package/simpleble/src/backends/linux_legacy/src/BluezOrgBluez.cpp +23 -0
  207. package/simpleble/src/backends/linux_legacy/src/BluezRoot.cpp +44 -0
  208. package/simpleble/src/backends/linux_legacy/src/Characteristic.cpp +64 -0
  209. package/simpleble/src/backends/linux_legacy/src/Descriptor.cpp +27 -0
  210. package/simpleble/src/backends/linux_legacy/src/Device.cpp +104 -0
  211. package/simpleble/src/backends/linux_legacy/src/Exceptions.cpp +29 -0
  212. package/simpleble/src/backends/linux_legacy/src/Service.cpp +33 -0
  213. package/simpleble/src/backends/linux_legacy/src/advanced/Interface.cpp +155 -0
  214. package/simpleble/src/backends/linux_legacy/src/advanced/Proxy.cpp +374 -0
  215. package/simpleble/src/backends/linux_legacy/src/base/Connection.cpp +219 -0
  216. package/simpleble/src/backends/linux_legacy/src/base/Exceptions.cpp +39 -0
  217. package/simpleble/src/backends/linux_legacy/src/base/Holder.cpp +739 -0
  218. package/simpleble/src/backends/linux_legacy/src/base/Message.cpp +622 -0
  219. package/simpleble/src/backends/linux_legacy/src/base/Path.cpp +129 -0
  220. package/simpleble/src/backends/linux_legacy/src/interfaces/Adapter1.cpp +123 -0
  221. package/simpleble/src/backends/linux_legacy/src/interfaces/Agent1.cpp +143 -0
  222. package/simpleble/src/backends/linux_legacy/src/interfaces/AgentManager1.cpp +34 -0
  223. package/simpleble/src/backends/linux_legacy/src/interfaces/Battery1.cpp +30 -0
  224. package/simpleble/src/backends/linux_legacy/src/interfaces/Device1.cpp +170 -0
  225. package/simpleble/src/backends/linux_legacy/src/interfaces/GattCharacteristic1.cpp +118 -0
  226. package/simpleble/src/backends/linux_legacy/src/interfaces/GattDescriptor1.cpp +78 -0
  227. package/simpleble/src/backends/linux_legacy/src/interfaces/GattService1.cpp +28 -0
  228. package/simpleble/src/backends/linux_legacy/src/interfaces/ObjectManager.cpp +58 -0
  229. package/simpleble/src/backends/macos/AdapterBaseMacOS.h +29 -0
  230. package/simpleble/src/backends/macos/AdapterBaseMacOS.mm +235 -0
  231. package/simpleble/src/backends/macos/AdapterMac.h +78 -0
  232. package/simpleble/src/backends/macos/AdapterMac.mm +156 -0
  233. package/simpleble/src/backends/macos/BackendCoreBluetooth.mm +45 -0
  234. package/simpleble/src/backends/macos/PeripheralBaseMacOS.h +49 -0
  235. package/simpleble/src/backends/macos/PeripheralBaseMacOS.mm +714 -0
  236. package/simpleble/src/backends/macos/PeripheralMac.h +81 -0
  237. package/simpleble/src/backends/macos/PeripheralMac.mm +229 -0
  238. package/simpleble/src/backends/macos/Utils.h +9 -0
  239. package/simpleble/src/backends/macos/Utils.mm +23 -0
  240. package/simpleble/src/backends/plain/AdapterPlain.cpp +65 -0
  241. package/simpleble/src/backends/plain/AdapterPlain.h +49 -0
  242. package/simpleble/src/backends/plain/BackendPlain.cpp +30 -0
  243. package/simpleble/src/backends/plain/PeripheralPlain.cpp +159 -0
  244. package/simpleble/src/backends/plain/PeripheralPlain.h +72 -0
  245. package/simpleble/src/backends/windows/AdapterWindows.cpp +338 -0
  246. package/simpleble/src/backends/windows/AdapterWindows.h +89 -0
  247. package/simpleble/src/backends/windows/BackendWinRT.cpp +67 -0
  248. package/simpleble/src/backends/windows/BackendWinRT.h +18 -0
  249. package/simpleble/src/backends/windows/MtaManager.cpp +49 -0
  250. package/simpleble/src/backends/windows/MtaManager.h +90 -0
  251. package/simpleble/src/backends/windows/PeripheralWindows.cpp +487 -0
  252. package/simpleble/src/backends/windows/PeripheralWindows.h +129 -0
  253. package/simpleble/src/backends/windows/Utils.cpp +146 -0
  254. package/simpleble/src/backends/windows/Utils.h +47 -0
  255. package/simpleble/src/builders/BuildVec.h +32 -0
  256. package/simpleble/src/builders/BuilderBase.h +87 -0
  257. package/simpleble/src/external/TaskRunner.hpp +99 -0
  258. package/simpleble/src/external/ThreadRunner.h +52 -0
  259. package/simpleble/src/external/kvn_safe_callback.hpp +66 -0
  260. package/simpleble/src/external/kvn_safe_map.hpp +94 -0
  261. package/simpleble/src/external/kvn_threadrunner.hpp +70 -0
  262. package/simpleble/src/external/logfwd.hpp +35 -0
  263. package/simpleble/src/frontends/base/Adapter.cpp +111 -0
  264. package/simpleble/src/frontends/base/Advanced.cpp +34 -0
  265. package/simpleble/src/frontends/base/Backend.cpp +95 -0
  266. package/simpleble/src/frontends/base/Backend.h +76 -0
  267. package/simpleble/src/frontends/base/Characteristic.cpp +56 -0
  268. package/simpleble/src/frontends/base/Descriptor.cpp +21 -0
  269. package/simpleble/src/frontends/base/Peripheral.cpp +113 -0
  270. package/simpleble/src/frontends/base/Service.cpp +26 -0
  271. package/simpleble/src/frontends/safe/AdapterSafe.cpp +158 -0
  272. package/simpleble/src/frontends/safe/PeripheralSafe.cpp +219 -0
@@ -0,0 +1,82 @@
1
+ #pragma once
2
+
3
+ #include <functional>
4
+ #include <map>
5
+ #include <memory>
6
+ #include <vector>
7
+
8
+ #include <simpleble/Types.h>
9
+
10
+ namespace SimpleBLE {
11
+
12
+ class ServiceBase;
13
+
14
+ /**
15
+ * Abstract base class for Bluetooth adapter implementations.
16
+ *
17
+ * Each backend must implement this class.
18
+ *
19
+ * Notes for implementers: ...
20
+ */
21
+ class PeripheralBase {
22
+ public:
23
+ virtual ~PeripheralBase() = default;
24
+
25
+ virtual void* underlying() const = 0;
26
+
27
+ virtual std::string identifier() = 0;
28
+ virtual BluetoothAddress address() = 0;
29
+ virtual BluetoothAddressType address_type() = 0;
30
+ virtual int16_t rssi() = 0;
31
+
32
+ /**
33
+ * @brief Provides the advertised transmit power in dBm.
34
+ *
35
+ * @note If the field has not been advertised by the peripheral,
36
+ * the returned value will be -32768.
37
+ */
38
+ virtual int16_t tx_power() = 0;
39
+ virtual uint16_t mtu() = 0;
40
+
41
+ virtual void connect() = 0;
42
+ virtual void disconnect() = 0;
43
+ virtual bool is_connected() = 0;
44
+ virtual bool is_connectable() = 0;
45
+ virtual bool is_paired() = 0;
46
+ virtual void unpair() = 0;
47
+
48
+ /**
49
+ * Available services (if the peripheral is connected).
50
+ */
51
+ virtual std::vector<std::shared_ptr<ServiceBase>> available_services() = 0;
52
+
53
+ /**
54
+ * Advertised services (if the peripheral is not connected).
55
+ */
56
+ virtual std::vector<std::shared_ptr<ServiceBase>> advertised_services() = 0;
57
+
58
+ virtual std::map<uint16_t, ByteArray> manufacturer_data() = 0;
59
+
60
+ // clang-format off
61
+ /* These methods are called by the frontend ONLY when the device is connected.
62
+ */
63
+ // clang-format off
64
+ virtual ByteArray read(BluetoothUUID const& service, BluetoothUUID const& characteristic) = 0;
65
+ virtual void write_request(BluetoothUUID const& service, BluetoothUUID const& characteristic, ByteArray const& data) = 0;
66
+ virtual void write_command(BluetoothUUID const& service, BluetoothUUID const& characteristic, ByteArray const& data) = 0;
67
+ virtual void notify(BluetoothUUID const& service, BluetoothUUID const& characteristic, std::function<void(ByteArray payload)> callback) = 0;
68
+ virtual void indicate(BluetoothUUID const& service, BluetoothUUID const& characteristic, std::function<void(ByteArray payload)> callback) = 0;
69
+ virtual void unsubscribe(BluetoothUUID const& service, BluetoothUUID const& characteristic) = 0;
70
+
71
+ virtual ByteArray read(BluetoothUUID const& service, BluetoothUUID const& characteristic, BluetoothUUID const& descriptor) = 0;
72
+ virtual void write(BluetoothUUID const& service, BluetoothUUID const& characteristic, BluetoothUUID const& descriptor, ByteArray const& data) = 0;
73
+ // clang-format on
74
+
75
+ virtual void set_callback_on_connected(std::function<void()> on_connected) = 0;
76
+ virtual void set_callback_on_disconnected(std::function<void()> on_disconnected) = 0;
77
+
78
+ protected:
79
+ PeripheralBase() = default;
80
+ };
81
+
82
+ } // namespace SimpleBLE
@@ -0,0 +1,18 @@
1
+
2
+ #include "ServiceBase.h"
3
+ #include "CommonUtils.h"
4
+
5
+ using namespace SimpleBLE;
6
+
7
+ ServiceBase::ServiceBase(const BluetoothUUID& uuid) : uuid_(uuid) {}
8
+
9
+ ServiceBase::ServiceBase(const BluetoothUUID& uuid, const ByteArray& data) : uuid_(uuid), data_(data) {}
10
+
11
+ ServiceBase::ServiceBase(const BluetoothUUID& uuid, SharedPtrVector<CharacteristicBase>& characteristics)
12
+ : uuid_(uuid), characteristics_(characteristics) {}
13
+
14
+ BluetoothUUID ServiceBase::uuid() { return uuid_; }
15
+
16
+ ByteArray ServiceBase::data() { return data_; }
17
+
18
+ SharedPtrVector<CharacteristicBase> ServiceBase::characteristics() { return characteristics_; }
@@ -0,0 +1,28 @@
1
+ #pragma once
2
+
3
+ #include <simpleble/Exceptions.h>
4
+ #include <simpleble/Types.h>
5
+ #include <memory>
6
+
7
+ namespace SimpleBLE {
8
+
9
+ class CharacteristicBase;
10
+
11
+ class ServiceBase {
12
+ public:
13
+ ServiceBase(const BluetoothUUID& uuid);
14
+ ServiceBase(const BluetoothUUID& uuid, const ByteArray& data);
15
+ ServiceBase(const BluetoothUUID& uuid, std::vector<std::shared_ptr<CharacteristicBase>>& characteristics);
16
+ virtual ~ServiceBase() = default;
17
+
18
+ BluetoothUUID uuid();
19
+ ByteArray data();
20
+ std::vector<std::shared_ptr<CharacteristicBase>> characteristics();
21
+
22
+ protected:
23
+ BluetoothUUID uuid_;
24
+ ByteArray data_;
25
+ std::vector<std::shared_ptr<CharacteristicBase>> characteristics_;
26
+ };
27
+
28
+ } // namespace SimpleBLE
@@ -0,0 +1,22 @@
1
+ #pragma once
2
+
3
+ #include <simpleble/Types.h>
4
+ #include <cstdint>
5
+ #include <map>
6
+ #include <string>
7
+
8
+ namespace SimpleBLE {
9
+
10
+ struct advertising_data_t {
11
+ std::string identifier;
12
+ BluetoothAddressType address_type;
13
+ BluetoothAddress mac_address;
14
+ bool connectable;
15
+ int16_t rssi;
16
+ int16_t tx_power;
17
+
18
+ std::map<uint16_t, ByteArray> manufacturer_data;
19
+ std::map<BluetoothUUID, ByteArray> service_data;
20
+ };
21
+
22
+ } // namespace SimpleBLE
@@ -0,0 +1,369 @@
1
+ #include <simpleble/Peripheral.h>
2
+
3
+ #include "AdapterDongl.h"
4
+ #include "BuilderBase.h"
5
+ #include "CommonUtils.h"
6
+ #include "PeripheralDongl.h"
7
+ #include "protocol/simpleble.pb.h"
8
+ #include "serial/Protocol.h"
9
+
10
+ // #include "cmd/Commands.h"
11
+ // #include "cmd/Events.h"
12
+ #include <memory>
13
+ #include <thread>
14
+
15
+ using namespace SimpleBLE;
16
+
17
+ // Forward declarations for decoded data structures
18
+ struct DecodedManufacturerData {
19
+ std::map<uint16_t, ByteArray> data;
20
+ };
21
+
22
+ struct DecodedServiceData {
23
+ std::map<BluetoothUUID, ByteArray> data;
24
+ };
25
+
26
+ bool AdapterDongl::bluetooth_enabled() { return true; }
27
+
28
+ AdapterDongl::AdapterDongl(const std::string& device_path)
29
+ : _serial_protocol(std::make_shared<Dongl::Serial::Protocol>(device_path)) {
30
+ fmt::print("Dongl adapter created with device path: {}\n", device_path);
31
+
32
+ _serial_protocol->set_event_callback([this](const dongl_Event& event) {
33
+ switch (event.which_evt) {
34
+ case dongl_Event_softdevice_tag:
35
+ _on_softdevice_event(event.evt.softdevice);
36
+ break;
37
+ case dongl_Event_simpleble_tag:
38
+ _on_simpleble_event(event.evt.simpleble);
39
+ break;
40
+ default:
41
+ break;
42
+ }
43
+ });
44
+
45
+ // _serial_protocol->set_response_callback([this](const dongl_Response& response) {
46
+ // fmt::print("Received response: {} bytes\n", response.size());
47
+
48
+ // // TODO: Process the received response
49
+ // // auto event = Dongl::CMD::UartEvent::from_bytes(response);
50
+ // // fmt::print("Received event: {}\n", event->to_string());
51
+ // });
52
+
53
+ // _serial_protocol->set_event_callback([this](const std::vector<uint8_t>& event) {
54
+ // fmt::print("Received event: {} bytes\n", event.size());
55
+
56
+ // // TODO: Process the received event
57
+ // });
58
+
59
+ // _serial_protocol->set_error_callback([this](const std::vector<uint8_t>& error) {
60
+ // fmt::print("Protocol error: {} bytes\n", error.size());
61
+
62
+ // // TODO: Handle protocol errors
63
+ // });
64
+
65
+ // TODO: Send initialization commands
66
+ // auto command = Dongl::CMD::UartReadVersionCommand();
67
+ // _serial_protocol->send_packet(command.to_bytes());
68
+
69
+ auto response_whoami = _serial_protocol->basic_whoami();
70
+ fmt::print("Whoami: {}\n", response_whoami.whoami);
71
+
72
+ auto response_init = _serial_protocol->simpleble_init();
73
+ fmt::print("SimpleBLE init: {}\n", response_init.ret_code);
74
+
75
+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
76
+ }
77
+
78
+ AdapterDongl::~AdapterDongl() {}
79
+
80
+ void* AdapterDongl::underlying() const { return nullptr; }
81
+
82
+ std::string AdapterDongl::identifier() { return "Dongl Adapter"; }
83
+
84
+ BluetoothAddress AdapterDongl::address() { return "AA:BB:CC:DD:EE:FF"; }
85
+
86
+ void AdapterDongl::power_on() {}
87
+
88
+ void AdapterDongl::power_off() {}
89
+
90
+ bool AdapterDongl::is_powered() { return true; }
91
+
92
+ void AdapterDongl::scan_start() {
93
+ auto response = _serial_protocol->simpleble_scan_start();
94
+
95
+ fmt::print("Scan start: {}\n", response.ret_code);
96
+ }
97
+
98
+ void AdapterDongl::scan_stop() {
99
+ auto response = _serial_protocol->simpleble_scan_stop();
100
+ fmt::print("Scan stop: {}\n", response.ret_code);
101
+ }
102
+
103
+ void AdapterDongl::scan_for(int timeout_ms) {
104
+ scan_start();
105
+ std::this_thread::sleep_for(std::chrono::milliseconds(timeout_ms));
106
+ scan_stop();
107
+ }
108
+
109
+ bool AdapterDongl::scan_is_active() { return false; }
110
+
111
+ SharedPtrVector<PeripheralBase> AdapterDongl::scan_get_results() { return Util::values(seen_peripherals_); }
112
+
113
+ SharedPtrVector<PeripheralBase> AdapterDongl::get_paired_peripherals() { return {}; }
114
+
115
+ void AdapterDongl::_scan_received_callback(advertising_data_t data) {
116
+ if (this->peripherals_.count(data.mac_address) == 0) {
117
+ // If the incoming peripheral has never been seen before, create and save a reference to it.
118
+ auto base_peripheral = std::make_shared<PeripheralDongl>(_serial_protocol, data);
119
+ this->peripherals_.insert(std::make_pair(data.mac_address, base_peripheral));
120
+ }
121
+
122
+ // Update the received advertising data.
123
+ auto base_peripheral = this->peripherals_.at(data.mac_address);
124
+ base_peripheral->update_advertising_data(data);
125
+
126
+ // Convert the base object into an external-facing Peripheral object
127
+ Peripheral peripheral = Factory::build(base_peripheral);
128
+
129
+ // Check if the device has been seen before, to forward the correct call to the user.
130
+ if (this->seen_peripherals_.count(data.mac_address) == 0) {
131
+ // Store it in our table of seen peripherals
132
+ this->seen_peripherals_.insert(std::make_pair(data.mac_address, base_peripheral));
133
+ SAFE_CALLBACK_CALL(this->_callback_on_scan_found, peripheral);
134
+ } else {
135
+ SAFE_CALLBACK_CALL(this->_callback_on_scan_updated, peripheral);
136
+ }
137
+ }
138
+
139
+ void AdapterDongl::_on_simpleble_event(const simpleble_Event& event) {
140
+ switch (event.which_evt) {
141
+ case simpleble_Event_adv_evt_tag: {
142
+ advertising_data_t data = advertising_data_t();
143
+ data.mac_address = std::string(event.evt.adv_evt.address);
144
+ data.address_type = static_cast<SimpleBLE::BluetoothAddressType>(event.evt.adv_evt.address_type);
145
+ data.identifier = std::string(event.evt.adv_evt.identifier);
146
+ data.connectable = event.evt.adv_evt.connectable;
147
+ data.rssi = event.evt.adv_evt.rssi;
148
+ data.tx_power = event.evt.adv_evt.tx_power;
149
+
150
+ // Extract decoded manufacturer and service data
151
+ for (int i = 0; i < event.evt.adv_evt.manufacturer_data_count; i++) {
152
+ ByteArray manufacturer_data(event.evt.adv_evt.manufacturer_data[i].data.bytes,
153
+ event.evt.adv_evt.manufacturer_data[i].data.size);
154
+ data.manufacturer_data[event.evt.adv_evt.manufacturer_data[i].company_id] = manufacturer_data;
155
+ }
156
+
157
+ // TODO: Implement service data extraction
158
+ // for (int i = 0; i < event.evt.adv_evt.service_data_count; i++) {
159
+ // ByteArray service_data(event.evt.adv_evt.service_data[i].data.bytes,
160
+ // event.evt.adv_evt.service_data[i].data.size);
161
+ // data.service_data[BluetoothUUID(event.evt.adv_evt.service_data[i].uuid)] = service_data;
162
+ // }
163
+
164
+ _scan_received_callback(data);
165
+ break;
166
+ }
167
+
168
+ case simpleble_Event_connection_evt_tag: {
169
+ for (auto& [address, peripheral] : this->peripherals_) {
170
+ if (peripheral->address() == std::string(event.evt.connection_evt.address)) {
171
+ peripheral->notify_connected(event.evt.connection_evt.conn_handle);
172
+ break;
173
+ }
174
+ }
175
+ break;
176
+ }
177
+
178
+ case simpleble_Event_disconnection_evt_tag: {
179
+ for (auto& [address, peripheral] : this->peripherals_) {
180
+ if (peripheral->conn_handle() == event.evt.disconnection_evt.conn_handle) {
181
+ peripheral->notify_disconnected();
182
+ break;
183
+ }
184
+ }
185
+ break;
186
+ }
187
+
188
+ case simpleble_Event_service_discovered_evt_tag: {
189
+ for (auto& [address, peripheral] : this->peripherals_) {
190
+ if (peripheral->conn_handle() == event.evt.service_discovered_evt.conn_handle) {
191
+ peripheral->notify_service_discovered(event.evt.service_discovered_evt);
192
+ break;
193
+ }
194
+ }
195
+ break;
196
+ }
197
+
198
+
199
+ case simpleble_Event_characteristic_discovered_evt_tag: {
200
+ for (auto& [address, peripheral] : this->peripherals_) {
201
+ if (peripheral->conn_handle() == event.evt.characteristic_discovered_evt.conn_handle) {
202
+ peripheral->notify_characteristic_discovered(event.evt.characteristic_discovered_evt);
203
+ break;
204
+ }
205
+ }
206
+ break;
207
+ }
208
+
209
+ case simpleble_Event_descriptor_discovered_evt_tag: {
210
+ for (auto& [address, peripheral] : this->peripherals_) {
211
+ if (peripheral->conn_handle() == event.evt.descriptor_discovered_evt.conn_handle) {
212
+ peripheral->notify_descriptor_discovered(event.evt.descriptor_discovered_evt);
213
+ break;
214
+ }
215
+ }
216
+ break;
217
+ }
218
+
219
+ case simpleble_Event_attribute_discovery_complete_evt_tag: {
220
+ for (auto& [address, peripheral] : this->peripherals_) {
221
+ if (peripheral->conn_handle() == event.evt.attribute_discovery_complete_evt.conn_handle) {
222
+ peripheral->notify_attribute_discovery_complete();
223
+ break;
224
+ }
225
+ }
226
+ break;
227
+ }
228
+ }
229
+ }
230
+
231
+ void AdapterDongl::_on_softdevice_event(const sd_Event& event) {
232
+ // //fmt::print("Received event: {}\n", event.which_evt);
233
+
234
+ // switch (event.which_evt) {
235
+ // case sd_Event_gap_adv_report_tag: {
236
+ // BluetoothAddress mac_address = fmt::format(
237
+ // "{:02X}:{:02X}:{:02X}:{:02X}:{:02X}:{:02X}", event.evt.gap_adv_report.peer_addr.addr[0],
238
+ // event.evt.gap_adv_report.peer_addr.addr[1], event.evt.gap_adv_report.peer_addr.addr[2],
239
+ // event.evt.gap_adv_report.peer_addr.addr[3], event.evt.gap_adv_report.peer_addr.addr[4],
240
+ // event.evt.gap_adv_report.peer_addr.addr[5]);
241
+
242
+ // BluetoothAddressType address_type = SimpleBLE::BluetoothAddressType::UNSPECIFIED;
243
+ // if (event.evt.gap_adv_report.peer_addr.addr_type == sd_types_BleGapAddrType_BLE_GAP_ADDR_TYPE_PUBLIC) {
244
+ // address_type = SimpleBLE::BluetoothAddressType::PUBLIC;
245
+ // } else if (event.evt.gap_adv_report.peer_addr.addr_type ==
246
+ // sd_types_BleGapAddrType_BLE_GAP_ADDR_TYPE_RANDOM_STATIC ||
247
+ // event.evt.gap_adv_report.peer_addr.addr_type ==
248
+ // sd_types_BleGapAddrType_BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE) {
249
+ // address_type = SimpleBLE::BluetoothAddressType::RANDOM;
250
+ // }
251
+
252
+ // std::string identifier = "";
253
+ // std::map<uint16_t, ByteArray> manufacturer_data = {};
254
+ // std::map<BluetoothUUID, ByteArray> service_data = {};
255
+
256
+ // // Parse the advertising data
257
+ // size_t offset = 0;
258
+ // while (offset < event.evt.gap_adv_report.data.len) {
259
+ // if (offset + 1 >= event.evt.gap_adv_report.data.len) break;
260
+
261
+ // uint8_t length = event.evt.gap_adv_report.data.data.bytes[offset++];
262
+ // if (length == 0 || offset + length > event.evt.gap_adv_report.data.len) break;
263
+
264
+ // if (offset >= event.evt.gap_adv_report.data.len) break;
265
+ // uint8_t ad_type = event.evt.gap_adv_report.data.data.bytes[offset++];
266
+
267
+ // size_t data_length = length - 1; // AD Type takes 1 byte
268
+ // if (data_length == 0 || offset + data_length > event.evt.gap_adv_report.data.len) break;
269
+
270
+ // switch (ad_type) {
271
+ // case 0x08: // Shortened Local Name
272
+ // case 0x09: // Complete Local Name
273
+ // if (data_length > 0) {
274
+ // identifier = std::string(
275
+ // reinterpret_cast<const char*>(&event.evt.gap_adv_report.data.data.bytes[offset]),
276
+ // data_length);
277
+ // }
278
+ // break;
279
+
280
+ // case 0xFF: // Manufacturer Specific Data
281
+ // if (data_length >= 2) { // Need at least company ID (2 bytes)
282
+ // uint16_t company_id = event.evt.gap_adv_report.data.data.bytes[offset] |
283
+ // (event.evt.gap_adv_report.data.data.bytes[offset + 1] << 8);
284
+ // ByteArray manufacturer_bytes(
285
+ // &event.evt.gap_adv_report.data.data.bytes[offset + 2],
286
+ // &event.evt.gap_adv_report.data.data.bytes[offset + data_length]);
287
+ // manufacturer_data[company_id] = manufacturer_bytes;
288
+ // }
289
+ // break;
290
+
291
+ // case 0x16: // Service Data - 16-bit UUID
292
+ // if (data_length >= 2) { // Need at least UUID (2 bytes)
293
+ // uint16_t service_uuid_16 = event.evt.gap_adv_report.data.data.bytes[offset] |
294
+ // (event.evt.gap_adv_report.data.data.bytes[offset + 1] << 8);
295
+ // BluetoothUUID service_uuid = fmt::format("{:04x}", service_uuid_16);
296
+ // ByteArray service_bytes(
297
+ // &event.evt.gap_adv_report.data.data.bytes[offset + 2],
298
+ // &event.evt.gap_adv_report.data.data.bytes[offset + data_length]);
299
+ // service_data[service_uuid] = service_bytes;
300
+ // }
301
+ // break;
302
+
303
+ // case 0x20: // Service Data - 32-bit UUID
304
+ // if (data_length >= 4) { // Need at least UUID (4 bytes)
305
+ // uint32_t service_uuid_32 = event.evt.gap_adv_report.data.data.bytes[offset] |
306
+ // (event.evt.gap_adv_report.data.data.bytes[offset + 1] << 8) |
307
+ // (event.evt.gap_adv_report.data.data.bytes[offset + 2] << 16) |
308
+ // (event.evt.gap_adv_report.data.data.bytes[offset + 3] << 24);
309
+ // BluetoothUUID service_uuid = fmt::format("{:08x}", service_uuid_32);
310
+ // ByteArray service_bytes(
311
+ // &event.evt.gap_adv_report.data.data.bytes[offset + 4],
312
+ // &event.evt.gap_adv_report.data.data.bytes[offset + data_length]);
313
+ // service_data[service_uuid] = service_bytes;
314
+ // }
315
+ // break;
316
+
317
+ // case 0x21: // Service Data - 128-bit UUID
318
+ // if (data_length >= 16) { // Need at least UUID (16 bytes)
319
+ // // Convert to UUID string format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
320
+ // BluetoothUUID service_uuid = fmt::format(
321
+ // "{:02x}{:02x}{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}-{:02x}{:02x}{:02x}{:02x}{:02x}{:02x}",
322
+ // event.evt.gap_adv_report.data.data.bytes[offset + 15], // Little endian byte order
323
+ // event.evt.gap_adv_report.data.data.bytes[offset + 14],
324
+ // event.evt.gap_adv_report.data.data.bytes[offset + 13],
325
+ // event.evt.gap_adv_report.data.data.bytes[offset + 12],
326
+ // event.evt.gap_adv_report.data.data.bytes[offset + 11],
327
+ // event.evt.gap_adv_report.data.data.bytes[offset + 10],
328
+ // event.evt.gap_adv_report.data.data.bytes[offset + 9],
329
+ // event.evt.gap_adv_report.data.data.bytes[offset + 8],
330
+ // event.evt.gap_adv_report.data.data.bytes[offset + 7],
331
+ // event.evt.gap_adv_report.data.data.bytes[offset + 6],
332
+ // event.evt.gap_adv_report.data.data.bytes[offset + 5],
333
+ // event.evt.gap_adv_report.data.data.bytes[offset + 4],
334
+ // event.evt.gap_adv_report.data.data.bytes[offset + 3],
335
+ // event.evt.gap_adv_report.data.data.bytes[offset + 2],
336
+ // event.evt.gap_adv_report.data.data.bytes[offset + 1],
337
+ // event.evt.gap_adv_report.data.data.bytes[offset]);
338
+ // ByteArray service_bytes(
339
+ // &event.evt.gap_adv_report.data.data.bytes[offset + 16],
340
+ // &event.evt.gap_adv_report.data.data.bytes[offset + data_length]);
341
+ // service_data[service_uuid] = service_bytes;
342
+ // }
343
+ // break;
344
+
345
+ // default:
346
+ // // Skip unknown AD types
347
+ // break;
348
+ // }
349
+
350
+ // offset += data_length;
351
+ // }
352
+
353
+ // auto advertising_data = advertising_data_t{
354
+ // .identifier = identifier,
355
+ // .address_type = address_type,
356
+ // .mac_address = mac_address,
357
+ // .connectable = event.evt.gap_adv_report.type.connectable,
358
+ // .rssi = event.evt.gap_adv_report.rssi,
359
+ // .tx_power = event.evt.gap_adv_report.tx_power,
360
+ // .manufacturer_data = manufacturer_data,
361
+ // .service_data = service_data,
362
+ // };
363
+ // _scan_received_callback(advertising_data);
364
+ // break;
365
+ // }
366
+ // default:
367
+ // break;
368
+ // }
369
+ }
@@ -0,0 +1,60 @@
1
+ #pragma once
2
+
3
+ #include <simpleble/Exceptions.h>
4
+ #include <simpleble/Types.h>
5
+
6
+ #include "AdapterBase.h"
7
+
8
+ #include <kvn_safe_callback.hpp>
9
+
10
+ #include <atomic>
11
+ #include <functional>
12
+ #include <memory>
13
+ #include <string>
14
+ #include <vector>
15
+
16
+ #include "AdapterBaseTypes.h"
17
+ #include "PeripheralDongl.h"
18
+ #include "serial/Protocol.h"
19
+
20
+ namespace SimpleBLE {
21
+
22
+ /**
23
+ * Dongl adapter.
24
+ */
25
+ class AdapterDongl : public AdapterBase {
26
+ public:
27
+ AdapterDongl(const std::string& device_path);
28
+ virtual ~AdapterDongl();
29
+
30
+ virtual void* underlying() const override;
31
+
32
+ virtual std::string identifier() override;
33
+ virtual BluetoothAddress address() override;
34
+
35
+ virtual void power_on() override;
36
+ virtual void power_off() override;
37
+ virtual bool is_powered() override;
38
+
39
+ virtual void scan_start() override;
40
+ virtual void scan_stop() override;
41
+ virtual void scan_for(int timeout_ms) override;
42
+ virtual bool scan_is_active() override;
43
+ virtual std::vector<std::shared_ptr<PeripheralBase>> scan_get_results() override;
44
+
45
+ virtual std::vector<std::shared_ptr<PeripheralBase>> get_paired_peripherals() override;
46
+
47
+ virtual bool bluetooth_enabled() override;
48
+
49
+ private:
50
+ void _scan_received_callback(advertising_data_t data);
51
+ void _on_softdevice_event(const sd_Event& event);
52
+ void _on_simpleble_event(const simpleble_Event& event);
53
+
54
+ std::shared_ptr<Dongl::Serial::Protocol> _serial_protocol;
55
+ std::map<BluetoothAddress, std::shared_ptr<PeripheralDongl>> peripherals_;
56
+ std::map<BluetoothAddress, std::shared_ptr<PeripheralDongl>> seen_peripherals_;
57
+
58
+ };
59
+
60
+ } // namespace SimpleBLE
@@ -0,0 +1,35 @@
1
+ #include <string>
2
+ #include "AdapterDongl.h"
3
+ #include "BackendUtils.h"
4
+ #include "CommonUtils.h"
5
+
6
+ #include "usb/UsbHelper.h"
7
+ #include <fmt/core.h>
8
+
9
+ namespace SimpleBLE {
10
+
11
+ class BackendDongl : public BackendSingleton<BackendDongl> {
12
+ public:
13
+ BackendDongl(buildToken) {};
14
+ virtual ~BackendDongl() = default;
15
+
16
+ virtual SharedPtrVector<AdapterBase> get_adapters() override;
17
+ virtual bool bluetooth_enabled() override;
18
+ std::string name() const noexcept override;
19
+ };
20
+
21
+ std::shared_ptr<BackendBase> BACKEND_DONGL() { return BackendDongl::get(); }
22
+
23
+ std::string BackendDongl::name() const noexcept { return "Dongl"; }
24
+
25
+ bool BackendDongl::bluetooth_enabled() { return true; }
26
+
27
+ SharedPtrVector<AdapterBase> BackendDongl::get_adapters() {
28
+ SharedPtrVector<AdapterBase> adapters;
29
+ for (const auto& device_path : Dongl::USB::UsbHelper::get_dongl_devices()) {
30
+ adapters.push_back(std::make_shared<AdapterDongl>(device_path));
31
+ }
32
+ return adapters;
33
+ }
34
+
35
+ } // namespace SimpleBLE