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,156 @@
1
+ #include <simpleble/Peripheral.h>
2
+
3
+ #import "AdapterBaseMacOS.h"
4
+ #import "AdapterMac.h"
5
+ #import "BuilderBase.h"
6
+ #import "CommonUtils.h"
7
+ #import "PeripheralMac.h"
8
+
9
+ #include <fmt/core.h>
10
+
11
+ #include <chrono>
12
+ #include <memory>
13
+ #include <thread>
14
+
15
+ using namespace SimpleBLE;
16
+
17
+ AdapterMac::AdapterMac() {
18
+ // Cast the Objective-C++ object using __bridge_retained, which will signal ARC to increase
19
+ // the reference count. This means that AdapterMac will be responsible for releasing the
20
+ // Objective-C++ object in the destructor.
21
+ opaque_internal_ = (__bridge_retained void*)[[AdapterBaseMacOS alloc] init:this];
22
+ }
23
+
24
+ AdapterMac::~AdapterMac() {
25
+ // Cast the opaque pointer back to the Objective-C++ object and release it.
26
+ // This will signal ARC to decrease the reference count.
27
+ // NOTE: This is equivalent to calling [opaque_internal_ release] in Objective-C++.
28
+ AdapterBaseMacOS* internal = (__bridge_transfer AdapterBaseMacOS*)opaque_internal_;
29
+ internal = nil;
30
+ }
31
+
32
+ bool AdapterMac::bluetooth_enabled() {
33
+ AdapterBaseMacOS* internal = (__bridge AdapterBaseMacOS*)opaque_internal_;
34
+ return [internal isBluetoothEnabled];
35
+ }
36
+
37
+ void* AdapterMac::underlying() const {
38
+ AdapterBaseMacOS* internal = (__bridge AdapterBaseMacOS*)opaque_internal_;
39
+
40
+ return [internal underlying];
41
+ }
42
+
43
+ std::string AdapterMac::identifier() { return fmt::format("Default Adapter [{}]", this->address()); }
44
+
45
+ BluetoothAddress AdapterMac::address() const {
46
+ AdapterBaseMacOS* internal = (__bridge AdapterBaseMacOS*)opaque_internal_;
47
+
48
+ return [[internal address] UTF8String];
49
+ }
50
+
51
+ void AdapterMac::power_on() {
52
+ AdapterBaseMacOS* internal = (__bridge AdapterBaseMacOS*)opaque_internal_;
53
+ [internal powerOn];
54
+ }
55
+
56
+ void AdapterMac::power_off() {
57
+ AdapterBaseMacOS* internal = (__bridge AdapterBaseMacOS*)opaque_internal_;
58
+ [internal powerOff];
59
+ }
60
+
61
+ bool AdapterMac::is_powered() {
62
+ AdapterBaseMacOS* internal = (__bridge AdapterBaseMacOS*)opaque_internal_;
63
+ return [internal isPowered];
64
+ }
65
+
66
+ BluetoothAddress AdapterMac::address() { return const_cast<const AdapterMac*>(this)->address(); }
67
+
68
+ void AdapterMac::scan_start() {
69
+ this->seen_peripherals_.clear();
70
+
71
+ AdapterBaseMacOS* internal = (__bridge AdapterBaseMacOS*)opaque_internal_;
72
+ [internal scanStart];
73
+
74
+ SAFE_CALLBACK_CALL(this->_callback_on_scan_start);
75
+ }
76
+
77
+ void AdapterMac::scan_stop() {
78
+ AdapterBaseMacOS* internal = (__bridge AdapterBaseMacOS*)opaque_internal_;
79
+ [internal scanStop];
80
+
81
+ SAFE_CALLBACK_CALL(this->_callback_on_scan_stop);
82
+ }
83
+
84
+ void AdapterMac::scan_for(int timeout_ms) {
85
+ this->scan_start();
86
+ std::this_thread::sleep_for(std::chrono::milliseconds(timeout_ms));
87
+ this->scan_stop();
88
+ }
89
+
90
+ bool AdapterMac::scan_is_active() {
91
+ AdapterBaseMacOS* internal = (__bridge AdapterBaseMacOS*)opaque_internal_;
92
+ return [internal scanIsActive];
93
+ }
94
+
95
+ SharedPtrVector<PeripheralBase> AdapterMac::scan_get_results() {
96
+ SharedPtrVector<PeripheralBase> peripherals = Util::values(seen_peripherals_);
97
+ return peripherals;
98
+ }
99
+
100
+ SharedPtrVector<PeripheralBase> AdapterMac::get_paired_peripherals() { return {}; }
101
+
102
+ // Delegate methods passed for AdapterBaseMacOS
103
+
104
+ void AdapterMac::delegate_did_discover_peripheral(void* opaque_peripheral, void* opaque_adapter, advertising_data_t advertising_data) {
105
+ if (this->peripherals_.count(opaque_peripheral) == 0) {
106
+ // If the incoming peripheral has never been seen before, create and save a reference to it.
107
+ auto base_peripheral = std::make_shared<PeripheralMac>(opaque_peripheral, opaque_adapter, advertising_data);
108
+ this->peripherals_.insert(std::make_pair(opaque_peripheral, base_peripheral));
109
+ }
110
+
111
+ // Update the received advertising data.
112
+ auto base_peripheral = this->peripherals_.at(opaque_peripheral);
113
+ base_peripheral->update_advertising_data(advertising_data);
114
+
115
+ // Convert the base object into an external-facing Peripheral object
116
+ Peripheral peripheral = Factory::build(base_peripheral);
117
+
118
+ // Check if the device has been seen before, to forward the correct call to the user.
119
+ if (this->seen_peripherals_.count(opaque_peripheral) == 0) {
120
+ // Store it in our table of seen peripherals
121
+ this->seen_peripherals_.insert(std::make_pair(opaque_peripheral, base_peripheral));
122
+ SAFE_CALLBACK_CALL(this->_callback_on_scan_found, peripheral);
123
+ } else {
124
+ SAFE_CALLBACK_CALL(this->_callback_on_scan_updated, peripheral);
125
+ }
126
+ }
127
+
128
+ void AdapterMac::delegate_did_connect_peripheral(void* opaque_peripheral) {
129
+ if (this->peripherals_.count(opaque_peripheral) == 0) {
130
+ throw Exception::InvalidReference();
131
+ }
132
+
133
+ // Load the existing PeripheralBase object
134
+ std::shared_ptr<PeripheralMac> base_peripheral = this->peripherals_.at(opaque_peripheral);
135
+ base_peripheral->delegate_did_connect();
136
+ }
137
+
138
+ void AdapterMac::delegate_did_fail_to_connect_peripheral(void* opaque_peripheral, void* opaque_error) {
139
+ if (this->peripherals_.count(opaque_peripheral) == 0) {
140
+ throw Exception::InvalidReference();
141
+ }
142
+
143
+ // Load the existing PeripheralBase object
144
+ std::shared_ptr<PeripheralMac> base_peripheral = this->peripherals_.at(opaque_peripheral);
145
+ base_peripheral->delegate_did_fail_to_connect(opaque_error);
146
+ }
147
+
148
+ void AdapterMac::delegate_did_disconnect_peripheral(void* opaque_peripheral, void* opaque_error) {
149
+ if (this->peripherals_.count(opaque_peripheral) == 0) {
150
+ throw Exception::InvalidReference();
151
+ }
152
+
153
+ // Load the existing PeripheralBase object
154
+ std::shared_ptr<PeripheralMac> base_peripheral = this->peripherals_.at(opaque_peripheral);
155
+ base_peripheral->delegate_did_disconnect(opaque_error);
156
+ }
@@ -0,0 +1,45 @@
1
+ #include "../common/BackendBase.h"
2
+ #include "../common/BackendUtils.h"
3
+ #include "CommonUtils.h"
4
+
5
+ #include "AdapterMac.h"
6
+
7
+ namespace SimpleBLE {
8
+
9
+ class BackendCoreBluetooth : public BackendSingleton<BackendCoreBluetooth> {
10
+ public:
11
+ BackendCoreBluetooth(buildToken);
12
+ virtual ~BackendCoreBluetooth() = default;
13
+
14
+ virtual std::vector<std::shared_ptr<AdapterBase>> get_adapters() override;
15
+ virtual bool bluetooth_enabled() override;
16
+ virtual std::string name() const noexcept override;
17
+
18
+ private:
19
+ // Apple devices only have a single Bluetooth adapter, so in order to preserve
20
+ // state across multiple instances, a single Adapter object is shared across
21
+ // all users of this backend.
22
+ std::shared_ptr<AdapterMac> _adapter;
23
+ };
24
+
25
+ std::shared_ptr<BackendBase> BACKEND_MACOS() { return BackendCoreBluetooth::get(); }
26
+
27
+ BackendCoreBluetooth::BackendCoreBluetooth(buildToken) : _adapter{std::make_shared<AdapterMac>()} {}
28
+
29
+ SharedPtrVector<AdapterBase> BackendCoreBluetooth::get_adapters() {
30
+ SharedPtrVector<AdapterBase> adapter_list;
31
+ adapter_list.push_back(_adapter);
32
+ return adapter_list;
33
+ }
34
+
35
+ bool BackendCoreBluetooth::bluetooth_enabled() {
36
+ // Because CBCentralManager requires an instance of an object to properly operate,
37
+ // we'll fabricate a local AdapterBase object and query it's internal AdapterBaseMacOS
38
+ // to see if Bluetooth is enabled.
39
+ // TODO: Find a better alternative for this.
40
+ return _adapter->bluetooth_enabled();
41
+ }
42
+
43
+ std::string BackendCoreBluetooth::name() const noexcept { return "CoreBluetooth"; }
44
+
45
+ } // namespace SimpleBLE
@@ -0,0 +1,49 @@
1
+ #pragma once
2
+
3
+ #import <CoreBluetooth/CoreBluetooth.h>
4
+ #import <Foundation/Foundation.h>
5
+
6
+ #include <cstdint>
7
+ #include <functional>
8
+ #include <vector>
9
+ #import "PeripheralMac.h"
10
+
11
+ @interface PeripheralBaseMacOS : NSObject<CBPeripheralDelegate>
12
+
13
+ - (instancetype)init:(CBPeripheral*)peripheral centralManager:(CBCentralManager*)centralManager;
14
+
15
+ - (void*)underlying;
16
+
17
+ - (NSString*)identifier;
18
+ - (NSString*)address;
19
+ - (uint16_t)mtu;
20
+
21
+ - (void)connect;
22
+ - (void)disconnect;
23
+ - (bool)isConnected;
24
+ - (std::vector<std::shared_ptr<SimpleBLE::ServiceBase>>)getServices;
25
+
26
+ - (SimpleBLE::ByteArray)read:(NSString*)service_uuid characteristic_uuid:(NSString*)characteristic_uuid;
27
+ - (void)writeRequest:(NSString*)service_uuid characteristic_uuid:(NSString*)characteristic_uuid payload:(NSData*)payload;
28
+ - (void)writeCommand:(NSString*)service_uuid characteristic_uuid:(NSString*)characteristic_uuid payload:(NSData*)payload;
29
+ - (void)notify:(NSString*)service_uuid
30
+ characteristic_uuid:(NSString*)characteristic_uuid
31
+ callback:(std::function<void(SimpleBLE::ByteArray)>)callback;
32
+ - (void)indicate:(NSString*)service_uuid
33
+ characteristic_uuid:(NSString*)characteristic_uuid
34
+ callback:(std::function<void(SimpleBLE::ByteArray)>)callback;
35
+ - (void)unsubscribe:(NSString*)service_uuid characteristic_uuid:(NSString*)characteristic_uuid;
36
+
37
+ - (SimpleBLE::ByteArray)read:(NSString*)service_uuid
38
+ characteristic_uuid:(NSString*)characteristic_uuid
39
+ descriptor_uuid:(NSString*)descriptor_uuid;
40
+ - (void)write:(NSString*)service_uuid
41
+ characteristic_uuid:(NSString*)characteristic_uuid
42
+ descriptor_uuid:(NSString*)descriptor_uuid
43
+ payload:(NSData*)payload;
44
+
45
+ - (void)delegateDidConnect;
46
+ - (void)delegateDidFailToConnect:(NSError*)error;
47
+ - (void)delegateDidDisconnect:(NSError*)error;
48
+
49
+ @end