simplejsble 0.0.3 → 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 (273) hide show
  1. package/NitroSimplejsble.podspec +9 -4
  2. package/VERSION +1 -0
  3. package/android/CMakeLists.txt +62 -20
  4. package/cmake/epilogue.cmake +81 -0
  5. package/cmake/find/FindDBus1.cmake +20 -0
  6. package/cmake/find/Findfmt.cmake +41 -0
  7. package/cmake/find/Findgoogletest.cmake +18 -0
  8. package/cmake/parse_version.cmake +45 -0
  9. package/cmake/prelude.cmake +8 -0
  10. package/dependencies/README +4 -0
  11. package/dependencies/external/kvn/kvn_bytearray.h +297 -0
  12. package/dependencies/external/kvn/kvn_safe_callback.hpp +66 -0
  13. package/dependencies/external/kvn/logfwd.hpp +35 -0
  14. package/dependencies/internal/include/fmt/LICENSE +27 -0
  15. package/dependencies/internal/include/fmt/args.h +220 -0
  16. package/dependencies/internal/include/fmt/base.h +2962 -0
  17. package/dependencies/internal/include/fmt/chrono.h +2338 -0
  18. package/dependencies/internal/include/fmt/color.h +610 -0
  19. package/dependencies/internal/include/fmt/compile.h +539 -0
  20. package/dependencies/internal/include/fmt/core.h +5 -0
  21. package/dependencies/internal/include/fmt/format-inl.h +1949 -0
  22. package/dependencies/internal/include/fmt/format.h +4244 -0
  23. package/dependencies/internal/include/fmt/os.h +427 -0
  24. package/dependencies/internal/include/fmt/ostream.h +166 -0
  25. package/dependencies/internal/include/fmt/printf.h +633 -0
  26. package/dependencies/internal/include/fmt/ranges.h +850 -0
  27. package/dependencies/internal/include/fmt/std.h +726 -0
  28. package/dependencies/internal/include/fmt/xchar.h +373 -0
  29. package/dependencies/internal/include/nanopb/pb.h +948 -0
  30. package/dependencies/internal/include/nanopb/pb_common.h +49 -0
  31. package/dependencies/internal/include/nanopb/pb_decode.h +204 -0
  32. package/dependencies/internal/include/nanopb/pb_encode.h +195 -0
  33. package/dependencies/internal/include/simplejni/Common.hpp +598 -0
  34. package/dependencies/internal/include/simplejni/References.hpp +151 -0
  35. package/dependencies/internal/include/simplejni/Registry.hpp +249 -0
  36. package/dependencies/internal/include/simplejni/VM.hpp +93 -0
  37. package/dependencies/internal/src/nanopb/pb_common.c +388 -0
  38. package/dependencies/internal/src/nanopb/pb_decode.c +1763 -0
  39. package/dependencies/internal/src/nanopb/pb_encode.c +1009 -0
  40. package/dependencies/internal/src/simplejni/Common.cpp +4 -0
  41. package/package.json +5 -1
  42. package/simpleble/CMakeLists.txt +519 -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,81 @@
1
+ #pragma once
2
+
3
+ #include <simpleble/Exceptions.h>
4
+ #include <simpleble/Types.h>
5
+
6
+ #include "AdapterBaseTypes.h"
7
+ #include "PeripheralBase.h"
8
+
9
+ #include <kvn_safe_callback.hpp>
10
+
11
+ #include <memory>
12
+
13
+ namespace SimpleBLE {
14
+
15
+ class PeripheralMac : public PeripheralBase {
16
+ public:
17
+ PeripheralMac(void* opaque_peripheral, void* opaque_adapter, advertising_data_t advertising_data);
18
+ ~PeripheralMac();
19
+
20
+ virtual void* underlying() const override;
21
+
22
+ virtual std::string identifier() override;
23
+ virtual BluetoothAddress address() override;
24
+ virtual BluetoothAddressType address_type() override;
25
+ virtual int16_t tx_power() override;
26
+ virtual int16_t rssi() override;
27
+ virtual uint16_t mtu() override;
28
+
29
+ virtual void connect() override;
30
+ virtual void disconnect() override;
31
+ virtual bool is_connected() override;
32
+ virtual bool is_connectable() override;
33
+ virtual bool is_paired() override;
34
+ virtual void unpair() override;
35
+
36
+ virtual std::vector<std::shared_ptr<ServiceBase>> available_services() override;
37
+ virtual std::vector<std::shared_ptr<ServiceBase>> advertised_services() override;
38
+ virtual std::map<uint16_t, ByteArray> manufacturer_data() override;
39
+
40
+ // clang-format off
41
+ virtual ByteArray read(BluetoothUUID const& service, BluetoothUUID const& characteristic) override;
42
+ virtual void write_request(BluetoothUUID const& service, BluetoothUUID const& characteristic, ByteArray const& data) override;
43
+ virtual void write_command(BluetoothUUID const& service, BluetoothUUID const& characteristic, ByteArray const& data) override;
44
+ virtual void notify(BluetoothUUID const& service, BluetoothUUID const& characteristic, std::function<void(ByteArray payload)> callback) override;
45
+ virtual void indicate(BluetoothUUID const& service, BluetoothUUID const& characteristic, std::function<void(ByteArray payload)> callback) override;
46
+ virtual void unsubscribe(BluetoothUUID const& service, BluetoothUUID const& characteristic) override;
47
+
48
+ virtual ByteArray read(BluetoothUUID const& service, BluetoothUUID const& characteristic, BluetoothUUID const& descriptor) override;
49
+ virtual void write(BluetoothUUID const& service, BluetoothUUID const& characteristic, BluetoothUUID const& descriptor, ByteArray const& data) override;
50
+ // clang-format on
51
+
52
+ virtual void set_callback_on_connected(std::function<void()> on_connected) override;
53
+ virtual void set_callback_on_disconnected(std::function<void()> on_disconnected) override;
54
+
55
+ void delegate_did_connect();
56
+ void delegate_did_fail_to_connect(void* opaque_error);
57
+ void delegate_did_disconnect(void* opaque_error);
58
+
59
+ void update_advertising_data(advertising_data_t advertising_data);
60
+
61
+ protected:
62
+ /**
63
+ * Holds a pointer to the Objective-C representation of this object.
64
+ */
65
+ void* opaque_internal_;
66
+
67
+ int16_t rssi_;
68
+ int16_t tx_power_;
69
+
70
+ bool is_connectable_;
71
+
72
+ bool manual_disconnect_triggered_;
73
+
74
+ std::map<uint16_t, ByteArray> manufacturer_data_;
75
+ std::map<BluetoothUUID, ByteArray> service_data_;
76
+
77
+ kvn::safe_callback<void()> callback_on_connected_;
78
+ kvn::safe_callback<void()> callback_on_disconnected_;
79
+ };
80
+
81
+ } // namespace SimpleBLE
@@ -0,0 +1,229 @@
1
+ #import "PeripheralMac.h"
2
+ #import "PeripheralBaseMacOS.h"
3
+ #import "ServiceBase.h"
4
+
5
+ #import "CommonUtils.h"
6
+
7
+ using namespace SimpleBLE;
8
+
9
+ PeripheralMac::PeripheralMac(void* opaque_peripheral, void* opaque_adapter, advertising_data_t advertising_data) {
10
+ CBCentralManager* central_manager = (__bridge CBCentralManager*)opaque_adapter;
11
+ CBPeripheral* peripheral = (__bridge CBPeripheral*)opaque_peripheral;
12
+
13
+ // Cast the Objective-C++ object using __bridge_retained, which will signal ARC to increase
14
+ // the reference count. This means that AdapterBase will be responsible for releasing the
15
+ // Objective-C++ object in the destructor.
16
+ opaque_internal_ = (__bridge_retained void*)[[PeripheralBaseMacOS alloc] init:peripheral centralManager:central_manager];
17
+
18
+ is_connectable_ = advertising_data.connectable;
19
+ manual_disconnect_triggered_ = false;
20
+ manufacturer_data_ = advertising_data.manufacturer_data;
21
+ service_data_ = advertising_data.service_data;
22
+ rssi_ = advertising_data.rssi;
23
+ tx_power_ = advertising_data.tx_power;
24
+ }
25
+
26
+ PeripheralMac::~PeripheralMac() {
27
+ // Cast the opaque pointer back to the Objective-C++ object and release it.
28
+ // This will signal ARC to decrease the reference count.
29
+ // NOTE: This is equivalent to calling [opaque_internal_ release] in Objective-C++.
30
+ PeripheralBaseMacOS* internal = (__bridge_transfer PeripheralBaseMacOS*)opaque_internal_;
31
+ internal = nil;
32
+ }
33
+
34
+ void* PeripheralMac::underlying() const {
35
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
36
+
37
+ return [internal underlying];
38
+ }
39
+
40
+ std::string PeripheralMac::identifier() {
41
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
42
+ return std::string([[internal identifier] UTF8String]);
43
+ }
44
+
45
+ BluetoothAddress PeripheralMac::address() {
46
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
47
+ return std::string([[internal address] UTF8String]);
48
+ }
49
+
50
+ BluetoothAddressType PeripheralMac::address_type() { return BluetoothAddressType::UNSPECIFIED; }
51
+
52
+ int16_t PeripheralMac::rssi() { return rssi_; }
53
+
54
+ int16_t PeripheralMac::tx_power() { return tx_power_; }
55
+
56
+ uint16_t PeripheralMac::mtu() {
57
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
58
+ return [internal mtu];
59
+ }
60
+
61
+ void PeripheralMac::update_advertising_data(advertising_data_t advertising_data) {
62
+ is_connectable_ = advertising_data.connectable;
63
+ manufacturer_data_ = advertising_data.manufacturer_data;
64
+ rssi_ = advertising_data.rssi;
65
+ tx_power_ = advertising_data.tx_power;
66
+
67
+ advertising_data.service_data.merge(service_data_);
68
+ service_data_ = advertising_data.service_data;
69
+ }
70
+
71
+ void PeripheralMac::connect() {
72
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
73
+ [internal connect];
74
+
75
+ SAFE_CALLBACK_CALL(this->callback_on_connected_);
76
+ }
77
+
78
+ void PeripheralMac::disconnect() {
79
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
80
+
81
+ manual_disconnect_triggered_ = true;
82
+ [internal disconnect];
83
+
84
+ SAFE_CALLBACK_CALL(this->callback_on_disconnected_);
85
+
86
+ manual_disconnect_triggered_ = false;
87
+ }
88
+
89
+ bool PeripheralMac::is_connected() {
90
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
91
+ return [internal isConnected];
92
+ }
93
+
94
+ bool PeripheralMac::is_connectable() { return is_connectable_; }
95
+
96
+ bool PeripheralMac::is_paired() { throw Exception::OperationNotSupported(); }
97
+
98
+ void PeripheralMac::unpair() { throw Exception::OperationNotSupported(); }
99
+
100
+ SharedPtrVector<ServiceBase> PeripheralMac::available_services() {
101
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
102
+ return [internal getServices];
103
+ }
104
+
105
+ SharedPtrVector<ServiceBase> PeripheralMac::advertised_services() {
106
+ SharedPtrVector<ServiceBase> service_list;
107
+ for (auto& [service_uuid, data] : service_data_) {
108
+ service_list.push_back(std::make_shared<ServiceBase>(service_uuid, data));
109
+ }
110
+
111
+ return service_list;
112
+ }
113
+
114
+ std::map<uint16_t, ByteArray> PeripheralMac::manufacturer_data() { return manufacturer_data_; }
115
+
116
+ ByteArray PeripheralMac::read(BluetoothUUID const& service, BluetoothUUID const& characteristic) {
117
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
118
+
119
+ NSString* service_uuid = [NSString stringWithCString:service.c_str() encoding:NSString.defaultCStringEncoding];
120
+ NSString* characteristic_uuid = [NSString stringWithCString:characteristic.c_str() encoding:NSString.defaultCStringEncoding];
121
+
122
+ return [internal read:service_uuid characteristic_uuid:characteristic_uuid];
123
+ }
124
+
125
+ void PeripheralMac::write_request(BluetoothUUID const& service, BluetoothUUID const& characteristic, ByteArray const& byte_array) {
126
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
127
+
128
+ NSString* service_uuid = [NSString stringWithCString:service.c_str() encoding:NSString.defaultCStringEncoding];
129
+ NSString* characteristic_uuid = [NSString stringWithCString:characteristic.c_str() encoding:NSString.defaultCStringEncoding];
130
+ NSData* payload = [NSData dataWithBytes:(void*)byte_array.data() length:byte_array.size()];
131
+
132
+ [internal writeRequest:service_uuid characteristic_uuid:characteristic_uuid payload:payload];
133
+ }
134
+
135
+ void PeripheralMac::write_command(BluetoothUUID const& service, BluetoothUUID const& characteristic, ByteArray const& byte_array) {
136
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
137
+
138
+ NSString* service_uuid = [NSString stringWithCString:service.c_str() encoding:NSString.defaultCStringEncoding];
139
+ NSString* characteristic_uuid = [NSString stringWithCString:characteristic.c_str() encoding:NSString.defaultCStringEncoding];
140
+ NSData* payload = [NSData dataWithBytes:(void*)byte_array.data() length:byte_array.size()];
141
+
142
+ [internal writeCommand:service_uuid characteristic_uuid:characteristic_uuid payload:payload];
143
+ }
144
+
145
+ void PeripheralMac::notify(BluetoothUUID const& service, BluetoothUUID const& characteristic,
146
+ std::function<void(ByteArray payload)> callback) {
147
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
148
+
149
+ NSString* service_uuid = [NSString stringWithCString:service.c_str() encoding:NSString.defaultCStringEncoding];
150
+ NSString* characteristic_uuid = [NSString stringWithCString:characteristic.c_str() encoding:NSString.defaultCStringEncoding];
151
+ [internal notify:service_uuid characteristic_uuid:characteristic_uuid callback:callback];
152
+ }
153
+
154
+ void PeripheralMac::indicate(BluetoothUUID const& service, BluetoothUUID const& characteristic,
155
+ std::function<void(ByteArray payload)> callback) {
156
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
157
+
158
+ NSString* service_uuid = [NSString stringWithCString:service.c_str() encoding:NSString.defaultCStringEncoding];
159
+ NSString* characteristic_uuid = [NSString stringWithCString:characteristic.c_str() encoding:NSString.defaultCStringEncoding];
160
+ [internal indicate:service_uuid characteristic_uuid:characteristic_uuid callback:callback];
161
+ }
162
+
163
+ void PeripheralMac::unsubscribe(BluetoothUUID const& service, BluetoothUUID const& characteristic) {
164
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
165
+
166
+ NSString* service_uuid = [NSString stringWithCString:service.c_str() encoding:NSString.defaultCStringEncoding];
167
+ NSString* characteristic_uuid = [NSString stringWithCString:characteristic.c_str() encoding:NSString.defaultCStringEncoding];
168
+ [internal unsubscribe:service_uuid characteristic_uuid:characteristic_uuid];
169
+ }
170
+
171
+ ByteArray PeripheralMac::read(BluetoothUUID const& service, BluetoothUUID const& characteristic, BluetoothUUID const& descriptor) {
172
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
173
+
174
+ NSString* service_uuid = [NSString stringWithCString:service.c_str() encoding:NSString.defaultCStringEncoding];
175
+ NSString* characteristic_uuid = [NSString stringWithCString:characteristic.c_str() encoding:NSString.defaultCStringEncoding];
176
+ NSString* descriptor_uuid = [NSString stringWithCString:descriptor.c_str() encoding:NSString.defaultCStringEncoding];
177
+
178
+ return [internal read:service_uuid characteristic_uuid:characteristic_uuid descriptor_uuid:descriptor_uuid];
179
+ }
180
+
181
+ void PeripheralMac::write(BluetoothUUID const& service, BluetoothUUID const& characteristic, BluetoothUUID const& descriptor,
182
+ ByteArray const& byte_array) {
183
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
184
+
185
+ NSString* service_uuid = [NSString stringWithCString:service.c_str() encoding:NSString.defaultCStringEncoding];
186
+ NSString* characteristic_uuid = [NSString stringWithCString:characteristic.c_str() encoding:NSString.defaultCStringEncoding];
187
+ NSString* descriptor_uuid = [NSString stringWithCString:descriptor.c_str() encoding:NSString.defaultCStringEncoding];
188
+ NSData* payload = [NSData dataWithBytes:(void*)byte_array.data() length:byte_array.size()];
189
+
190
+ [internal write:service_uuid characteristic_uuid:characteristic_uuid descriptor_uuid:descriptor_uuid payload:payload];
191
+ }
192
+
193
+ void PeripheralMac::set_callback_on_connected(std::function<void()> on_connected) {
194
+ if (on_connected) {
195
+ callback_on_connected_.load(std::move(on_connected));
196
+ } else {
197
+ callback_on_connected_.unload();
198
+ }
199
+ }
200
+
201
+ void PeripheralMac::set_callback_on_disconnected(std::function<void()> on_disconnected) {
202
+ if (on_disconnected) {
203
+ callback_on_disconnected_.load(std::move(on_disconnected));
204
+ } else {
205
+ callback_on_disconnected_.unload();
206
+ }
207
+ }
208
+
209
+ void PeripheralMac::delegate_did_connect() {
210
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
211
+ [internal delegateDidConnect];
212
+ }
213
+
214
+ void PeripheralMac::delegate_did_fail_to_connect(void* opaque_error) {
215
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
216
+ NSError* error = (__bridge NSError*)opaque_error;
217
+ [internal delegateDidFailToConnect:error];
218
+ }
219
+
220
+ void PeripheralMac::delegate_did_disconnect(void* opaque_error) {
221
+ PeripheralBaseMacOS* internal = (__bridge PeripheralBaseMacOS*)opaque_internal_;
222
+ NSError* error = (__bridge NSError*)opaque_error;
223
+ [internal delegateDidDisconnect:error];
224
+
225
+ // If the user manually disconnects the peripheral, don't call the callback at this point.
226
+ if (callback_on_disconnected_ && !manual_disconnect_triggered_) {
227
+ callback_on_disconnected_();
228
+ }
229
+ }
@@ -0,0 +1,9 @@
1
+ #pragma once
2
+
3
+ #import <CoreBluetooth/CoreBluetooth.h>
4
+ #import <Foundation/Foundation.h>
5
+
6
+ #include <simpleble/Types.h>
7
+
8
+ SimpleBLE::BluetoothUUID uuidToSimpleBLE(CBUUID* uuid);
9
+ NSString* uuidToString(CBUUID* uuid);
@@ -0,0 +1,23 @@
1
+ #import "Utils.h"
2
+
3
+ #import <fmt/core.h>
4
+
5
+ SimpleBLE::BluetoothUUID uuidToSimpleBLE(CBUUID* uuid) {
6
+ std::string uuid_raw = [[[uuid UUIDString] lowercaseString] UTF8String];
7
+
8
+ if (uuid_raw.length() == 4) {
9
+ return fmt::format("0000{}-0000-1000-8000-00805f9b34fb", uuid_raw);
10
+ } else {
11
+ return uuid_raw;
12
+ }
13
+ }
14
+
15
+ NSString* uuidToString(CBUUID* uuid) {
16
+ NSString* uuidString = [[uuid UUIDString] lowercaseString];
17
+
18
+ if ([uuidString length] == 4) {
19
+ return [NSString stringWithFormat:@"0000%@-0000-1000-8000-00805f9b34fb", uuidString];
20
+ } else {
21
+ return uuidString;
22
+ }
23
+ }
@@ -0,0 +1,65 @@
1
+ #include <simpleble/Peripheral.h>
2
+
3
+ #include "AdapterPlain.h"
4
+ #include "BuilderBase.h"
5
+ #include "CommonUtils.h"
6
+ #include "PeripheralBase.h"
7
+ #include "PeripheralPlain.h"
8
+
9
+ #include <memory>
10
+ #include <thread>
11
+
12
+ using namespace SimpleBLE;
13
+
14
+ bool AdapterPlain::bluetooth_enabled() { return true; }
15
+
16
+ AdapterPlain::AdapterPlain() {}
17
+
18
+ AdapterPlain::~AdapterPlain() {}
19
+
20
+ void* AdapterPlain::underlying() const { return nullptr; }
21
+
22
+ std::string AdapterPlain::identifier() { return "Plain Adapter"; }
23
+
24
+ BluetoothAddress AdapterPlain::address() { return "AA:BB:CC:DD:EE:FF"; }
25
+
26
+ void AdapterPlain::power_on() {}
27
+
28
+ void AdapterPlain::power_off() {}
29
+
30
+ bool AdapterPlain::is_powered() { return true; }
31
+
32
+ void AdapterPlain::scan_start() {
33
+ is_scanning_ = true;
34
+ SAFE_CALLBACK_CALL(this->_callback_on_scan_start);
35
+
36
+ Peripheral peripheral = Factory::build(std::make_shared<PeripheralPlain>());
37
+ SAFE_CALLBACK_CALL(this->_callback_on_scan_found, peripheral);
38
+ SAFE_CALLBACK_CALL(this->_callback_on_scan_updated, peripheral);
39
+ }
40
+
41
+ void AdapterPlain::scan_stop() {
42
+ is_scanning_ = false;
43
+ SAFE_CALLBACK_CALL(this->_callback_on_scan_stop);
44
+ }
45
+
46
+ void AdapterPlain::scan_for(int timeout_ms) {
47
+ scan_start();
48
+ std::this_thread::sleep_for(std::chrono::milliseconds(timeout_ms));
49
+ scan_stop();
50
+ }
51
+
52
+ bool AdapterPlain::scan_is_active() { return is_scanning_; }
53
+ SharedPtrVector<PeripheralBase> AdapterPlain::scan_get_results() {
54
+ SharedPtrVector<PeripheralBase> peripherals;
55
+ peripherals.push_back(std::make_shared<PeripheralPlain>());
56
+
57
+ return peripherals;
58
+ }
59
+
60
+ SharedPtrVector<PeripheralBase> AdapterPlain::get_paired_peripherals() {
61
+ SharedPtrVector<PeripheralBase> peripherals;
62
+ peripherals.push_back(std::make_shared<PeripheralPlain>());
63
+
64
+ return peripherals;
65
+ }
@@ -0,0 +1,49 @@
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
+ namespace SimpleBLE {
17
+
18
+ /**
19
+ * Dummy adapter for testing purposes.
20
+ */
21
+ class AdapterPlain : public AdapterBase {
22
+ public:
23
+ AdapterPlain();
24
+ virtual ~AdapterPlain();
25
+
26
+ virtual void* underlying() const override;
27
+
28
+ virtual std::string identifier() override;
29
+ virtual BluetoothAddress address() override;
30
+
31
+ virtual void power_on() override;
32
+ virtual void power_off() override;
33
+ virtual bool is_powered() override;
34
+
35
+ virtual void scan_start() override;
36
+ virtual void scan_stop() override;
37
+ virtual void scan_for(int timeout_ms) override;
38
+ virtual bool scan_is_active() override;
39
+ virtual std::vector<std::shared_ptr<PeripheralBase>> scan_get_results() override;
40
+
41
+ virtual std::vector<std::shared_ptr<PeripheralBase>> get_paired_peripherals() override;
42
+
43
+ virtual bool bluetooth_enabled() override;
44
+
45
+ private:
46
+ std::atomic_bool is_scanning_{false};
47
+ };
48
+
49
+ } // namespace SimpleBLE
@@ -0,0 +1,30 @@
1
+ #include <string>
2
+ #include "AdapterPlain.h"
3
+ #include "BackendUtils.h"
4
+ #include "CommonUtils.h"
5
+
6
+ namespace SimpleBLE {
7
+
8
+ class BackendPlain : public BackendSingleton<BackendPlain> {
9
+ public:
10
+ BackendPlain(buildToken) {};
11
+ virtual ~BackendPlain() = default;
12
+
13
+ virtual SharedPtrVector<AdapterBase> get_adapters() override;
14
+ virtual bool bluetooth_enabled() override;
15
+ std::string name() const noexcept override;
16
+ };
17
+
18
+ std::shared_ptr<BackendBase> BACKEND_PLAIN() { return BackendPlain::get(); }
19
+
20
+ std::string BackendPlain::name() const noexcept { return "Plain"; }
21
+
22
+ bool BackendPlain::bluetooth_enabled() { return true; }
23
+
24
+ SharedPtrVector<AdapterBase> BackendPlain::get_adapters() {
25
+ SharedPtrVector<AdapterBase> adapters;
26
+ adapters.push_back(std::make_shared<AdapterPlain>());
27
+ return adapters;
28
+ }
29
+
30
+ } // namespace SimpleBLE
@@ -0,0 +1,159 @@
1
+ #include "PeripheralPlain.h"
2
+
3
+ #include "CharacteristicBase.h"
4
+ #include "DescriptorBase.h"
5
+ #include "ServiceBase.h"
6
+
7
+ #include <simpleble/Exceptions.h>
8
+
9
+ #include <memory>
10
+
11
+ #include "CommonUtils.h"
12
+ #include "LoggingInternal.h"
13
+
14
+ using namespace SimpleBLE;
15
+ using namespace std::chrono_literals;
16
+
17
+ const SimpleBLE::BluetoothUUID BATTERY_SERVICE_UUID = "0000180f-0000-1000-8000-00805f9b34fb";
18
+ const SimpleBLE::BluetoothUUID BATTERY_CHARACTERISTIC_UUID = "00002a19-0000-1000-8000-00805f9b34fb";
19
+
20
+ PeripheralPlain::PeripheralPlain() {}
21
+
22
+ PeripheralPlain::~PeripheralPlain() {}
23
+
24
+ void* PeripheralPlain::underlying() const { return nullptr; }
25
+
26
+ std::string PeripheralPlain::identifier() { return "Plain Peripheral"; }
27
+
28
+ BluetoothAddress PeripheralPlain::address() { return "11:22:33:44:55:66"; }
29
+
30
+ BluetoothAddressType PeripheralPlain::address_type() { return BluetoothAddressType::PUBLIC; };
31
+
32
+ int16_t PeripheralPlain::rssi() { return -60; }
33
+
34
+ int16_t PeripheralPlain::tx_power() { return 5; }
35
+
36
+ uint16_t PeripheralPlain::mtu() {
37
+ if (is_connected()) {
38
+ return 247;
39
+ } else {
40
+ return 0;
41
+ }
42
+ }
43
+
44
+ void PeripheralPlain::connect() {
45
+ connected_ = true;
46
+ paired_ = true;
47
+ SAFE_CALLBACK_CALL(this->callback_on_connected_);
48
+ }
49
+
50
+ void PeripheralPlain::disconnect() {
51
+ connected_ = false;
52
+ SAFE_CALLBACK_CALL(this->callback_on_disconnected_);
53
+ }
54
+ bool PeripheralPlain::is_connected() { return connected_; }
55
+
56
+ bool PeripheralPlain::is_connectable() { return true; }
57
+
58
+ bool PeripheralPlain::is_paired() { return paired_; }
59
+
60
+ void PeripheralPlain::unpair() { paired_ = false; }
61
+
62
+ SharedPtrVector<ServiceBase> PeripheralPlain::available_services() {
63
+ if (!connected_) return {};
64
+
65
+ SharedPtrVector<ServiceBase> service_list;
66
+ SharedPtrVector<DescriptorBase> descriptor_list;
67
+ SharedPtrVector<CharacteristicBase> characteristic_list = {std::make_shared<CharacteristicBase>(
68
+ BATTERY_CHARACTERISTIC_UUID, descriptor_list, true, false, false, true, false)};
69
+
70
+ service_list.push_back(std::make_shared<ServiceBase>(BATTERY_SERVICE_UUID, characteristic_list));
71
+ return service_list;
72
+ }
73
+
74
+ SharedPtrVector<ServiceBase> PeripheralPlain::advertised_services() { return {}; }
75
+
76
+ std::map<uint16_t, ByteArray> PeripheralPlain::manufacturer_data() { return {{0x004C, "test"}}; }
77
+
78
+ ByteArray PeripheralPlain::read(BluetoothUUID const& service, BluetoothUUID const& characteristic) { return {}; }
79
+
80
+ void PeripheralPlain::write_request(BluetoothUUID const& service, BluetoothUUID const& characteristic,
81
+ ByteArray const& data) {}
82
+
83
+ void PeripheralPlain::write_command(BluetoothUUID const& service, BluetoothUUID const& characteristic,
84
+ ByteArray const& data) {}
85
+
86
+ void PeripheralPlain::notify(BluetoothUUID const& service, BluetoothUUID const& characteristic,
87
+ std::function<void(ByteArray payload)> callback) {
88
+ if (callback) {
89
+ callback_mutex_.lock();
90
+ callbacks_[{service, characteristic}] = std::move(callback);
91
+ callback_mutex_.unlock();
92
+
93
+ task_runner_.dispatch(
94
+ [this, service, characteristic]() -> std::optional<std::chrono::seconds> {
95
+ std::lock_guard<std::mutex> lock(callback_mutex_);
96
+ auto it = this->callbacks_.find({service, characteristic});
97
+
98
+ if (it == this->callbacks_.end()) {
99
+ return std::nullopt;
100
+ }
101
+
102
+ it->second("Hello from notify");
103
+ return 1s;
104
+ },
105
+ 1s);
106
+ }
107
+ }
108
+
109
+ void PeripheralPlain::indicate(BluetoothUUID const& service, BluetoothUUID const& characteristic,
110
+ std::function<void(ByteArray payload)> callback) {
111
+ if (callback) {
112
+ callback_mutex_.lock();
113
+ callbacks_[{service, characteristic}] = std::move(callback);
114
+ callback_mutex_.unlock();
115
+
116
+ task_runner_.dispatch(
117
+ [this, service, characteristic]() -> std::optional<std::chrono::seconds> {
118
+ std::lock_guard<std::mutex> lock(callback_mutex_);
119
+ auto it = this->callbacks_.find({service, characteristic});
120
+
121
+ if (it == this->callbacks_.end()) {
122
+ return std::nullopt;
123
+ }
124
+
125
+ it->second("Hello from notify");
126
+ return 1s;
127
+ },
128
+ 1s);
129
+ }
130
+ }
131
+
132
+ void PeripheralPlain::unsubscribe(BluetoothUUID const& service, BluetoothUUID const& characteristic) {
133
+ std::lock_guard<std::mutex> lock(callback_mutex_);
134
+ callbacks_.erase({service, characteristic});
135
+ }
136
+
137
+ ByteArray PeripheralPlain::read(BluetoothUUID const& service, BluetoothUUID const& characteristic,
138
+ BluetoothUUID const& descriptor) {
139
+ return {};
140
+ }
141
+
142
+ void PeripheralPlain::write(BluetoothUUID const& service, BluetoothUUID const& characteristic,
143
+ BluetoothUUID const& descriptor, ByteArray const& data) {}
144
+
145
+ void PeripheralPlain::set_callback_on_connected(std::function<void()> on_connected) {
146
+ if (on_connected) {
147
+ callback_on_connected_.load(std::move(on_connected));
148
+ } else {
149
+ callback_on_connected_.unload();
150
+ }
151
+ }
152
+
153
+ void PeripheralPlain::set_callback_on_disconnected(std::function<void()> on_disconnected) {
154
+ if (on_disconnected) {
155
+ callback_on_disconnected_.load(std::move(on_disconnected));
156
+ } else {
157
+ callback_on_disconnected_.unload();
158
+ }
159
+ }