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.
- package/VERSION +1 -0
- package/android/CMakeLists.txt +62 -20
- package/cmake/epilogue.cmake +81 -0
- package/cmake/find/FindDBus1.cmake +20 -0
- package/cmake/find/Findfmt.cmake +41 -0
- package/cmake/find/Findgoogletest.cmake +18 -0
- package/cmake/parse_version.cmake +45 -0
- package/cmake/prelude.cmake +8 -0
- package/dependencies/README +4 -0
- package/dependencies/external/kvn/kvn_bytearray.h +297 -0
- package/dependencies/external/kvn/kvn_safe_callback.hpp +66 -0
- package/dependencies/external/kvn/logfwd.hpp +35 -0
- package/dependencies/internal/include/fmt/LICENSE +27 -0
- package/dependencies/internal/include/fmt/args.h +220 -0
- package/dependencies/internal/include/fmt/base.h +2962 -0
- package/dependencies/internal/include/fmt/chrono.h +2338 -0
- package/dependencies/internal/include/fmt/color.h +610 -0
- package/dependencies/internal/include/fmt/compile.h +539 -0
- package/dependencies/internal/include/fmt/core.h +5 -0
- package/dependencies/internal/include/fmt/format-inl.h +1949 -0
- package/dependencies/internal/include/fmt/format.h +4244 -0
- package/dependencies/internal/include/fmt/os.h +427 -0
- package/dependencies/internal/include/fmt/ostream.h +166 -0
- package/dependencies/internal/include/fmt/printf.h +633 -0
- package/dependencies/internal/include/fmt/ranges.h +850 -0
- package/dependencies/internal/include/fmt/std.h +726 -0
- package/dependencies/internal/include/fmt/xchar.h +373 -0
- package/dependencies/internal/include/nanopb/pb.h +948 -0
- package/dependencies/internal/include/nanopb/pb_common.h +49 -0
- package/dependencies/internal/include/nanopb/pb_decode.h +204 -0
- package/dependencies/internal/include/nanopb/pb_encode.h +195 -0
- package/dependencies/internal/include/simplejni/Common.hpp +598 -0
- package/dependencies/internal/include/simplejni/References.hpp +151 -0
- package/dependencies/internal/include/simplejni/Registry.hpp +249 -0
- package/dependencies/internal/include/simplejni/VM.hpp +93 -0
- package/dependencies/internal/src/nanopb/pb_common.c +388 -0
- package/dependencies/internal/src/nanopb/pb_decode.c +1763 -0
- package/dependencies/internal/src/nanopb/pb_encode.c +1009 -0
- package/dependencies/internal/src/simplejni/Common.cpp +4 -0
- package/package.json +5 -1
- package/simpleble/CMakeLists.txt +519 -0
- package/simpleble/include/simpleble/Adapter.h +102 -0
- package/simpleble/include/simpleble/AdapterSafe.h +58 -0
- package/simpleble/include/simpleble/Advanced.h +50 -0
- package/simpleble/include/simpleble/Characteristic.h +39 -0
- package/simpleble/include/simpleble/Config.h +64 -0
- package/simpleble/include/simpleble/Descriptor.h +30 -0
- package/simpleble/include/simpleble/Exceptions.h +72 -0
- package/simpleble/include/simpleble/Logging.h +73 -0
- package/simpleble/include/simpleble/Peripheral.h +82 -0
- package/simpleble/include/simpleble/PeripheralSafe.h +64 -0
- package/simpleble/include/simpleble/Service.h +34 -0
- package/simpleble/include/simpleble/SimpleBLE.h +8 -0
- package/simpleble/include/simpleble/Types.h +49 -0
- package/simpleble/include/simpleble/Utils.h +13 -0
- package/simpleble/include/simpleble_c/DEPRECATED +2 -0
- package/simpleble/include/simpleble_c/adapter.h +188 -0
- package/simpleble/include/simpleble_c/logging.h +37 -0
- package/simpleble/include/simpleble_c/peripheral.h +304 -0
- package/simpleble/include/simpleble_c/simpleble.h +21 -0
- package/simpleble/include/simpleble_c/types.h +73 -0
- package/simpleble/include/simpleble_c/utils.h +27 -0
- package/simpleble/src/CommonUtils.h +63 -0
- package/simpleble/src/Config.cpp +25 -0
- package/simpleble/src/Exceptions.cpp +31 -0
- package/simpleble/src/Logging.cpp +136 -0
- package/simpleble/src/LoggingInternal.h +85 -0
- package/simpleble/src/Utils.cpp +24 -0
- package/simpleble/src/backends/android/AdapterAndroid.cpp +101 -0
- package/simpleble/src/backends/android/AdapterAndroid.h +67 -0
- package/simpleble/src/backends/android/BackendAndroid.cpp +41 -0
- package/simpleble/src/backends/android/BackendAndroid.h +26 -0
- package/simpleble/src/backends/android/PeripheralAndroid.cpp +365 -0
- package/simpleble/src/backends/android/PeripheralAndroid.h +90 -0
- package/simpleble/src/backends/android/bridge/BluetoothGattCallback.cpp +432 -0
- package/simpleble/src/backends/android/bridge/BluetoothGattCallback.h +102 -0
- package/simpleble/src/backends/android/bridge/ScanCallback.cpp +142 -0
- package/simpleble/src/backends/android/bridge/ScanCallback.h +55 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.cpp +107 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.h +55 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.cpp +68 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.h +54 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.cpp +115 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.h +75 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.cpp +142 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.h +66 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.cpp +67 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.h +46 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.cpp +106 -0
- package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.h +47 -0
- package/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.cpp +47 -0
- package/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.h +37 -0
- package/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.cpp +69 -0
- package/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.h +41 -0
- package/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.cpp +63 -0
- package/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.h +42 -0
- package/simpleble/src/backends/android/types/android/os/ParcelUUID.cpp +32 -0
- package/simpleble/src/backends/android/types/android/os/ParcelUUID.h +30 -0
- package/simpleble/src/backends/android/types/android/util/SparseArray.cpp +54 -0
- package/simpleble/src/backends/android/types/android/util/SparseArray.h +37 -0
- package/simpleble/src/backends/android/types/java/util/Iterator.cpp +36 -0
- package/simpleble/src/backends/android/types/java/util/Iterator.h +28 -0
- package/simpleble/src/backends/android/types/java/util/List.cpp +29 -0
- package/simpleble/src/backends/android/types/java/util/List.h +27 -0
- package/simpleble/src/backends/android/types/java/util/Set.cpp +33 -0
- package/simpleble/src/backends/android/types/java/util/Set.h +28 -0
- package/simpleble/src/backends/android/types/java/util/UUID.cpp +26 -0
- package/simpleble/src/backends/android/types/java/util/UUID.h +29 -0
- package/simpleble/src/backends/common/AdapterBase.cpp +53 -0
- package/simpleble/src/backends/common/AdapterBase.h +81 -0
- package/simpleble/src/backends/common/AdapterBaseTypes.h +22 -0
- package/simpleble/src/backends/common/BackendBase.h +20 -0
- package/simpleble/src/backends/common/BackendUtils.h +33 -0
- package/simpleble/src/backends/common/CharacteristicBase.cpp +28 -0
- package/simpleble/src/backends/common/CharacteristicBase.h +38 -0
- package/simpleble/src/backends/common/DescriptorBase.cpp +7 -0
- package/simpleble/src/backends/common/DescriptorBase.h +19 -0
- package/simpleble/src/backends/common/PeripheralBase.h +82 -0
- package/simpleble/src/backends/common/ServiceBase.cpp +18 -0
- package/simpleble/src/backends/common/ServiceBase.h +28 -0
- package/simpleble/src/backends/dongl/AdapterBaseTypes.h +22 -0
- package/simpleble/src/backends/dongl/AdapterDongl.cpp +369 -0
- package/simpleble/src/backends/dongl/AdapterDongl.h +60 -0
- package/simpleble/src/backends/dongl/BackendDongl.cpp +35 -0
- package/simpleble/src/backends/dongl/PeripheralDongl.cpp +562 -0
- package/simpleble/src/backends/dongl/PeripheralDongl.h +136 -0
- package/simpleble/src/backends/dongl/protocol/basic.pb.c +33 -0
- package/simpleble/src/backends/dongl/protocol/basic.pb.h +172 -0
- package/simpleble/src/backends/dongl/protocol/d2h.pb.c +18 -0
- package/simpleble/src/backends/dongl/protocol/d2h.pb.h +118 -0
- package/simpleble/src/backends/dongl/protocol/h2d.pb.c +12 -0
- package/simpleble/src/backends/dongl/protocol/h2d.pb.h +69 -0
- package/simpleble/src/backends/dongl/protocol/simpleble.pb.c +123 -0
- package/simpleble/src/backends/dongl/protocol/simpleble.pb.h +908 -0
- package/simpleble/src/backends/dongl/protocol/softdevice.pb.c +18 -0
- package/simpleble/src/backends/dongl/protocol/softdevice.pb.h +815 -0
- package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.c +339 -0
- package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.h +2086 -0
- package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.c +114 -0
- package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.h +772 -0
- package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.c +117 -0
- package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.h +766 -0
- package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.c +207 -0
- package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.h +1686 -0
- package/simpleble/src/backends/dongl/serial/Protocol.cpp +887 -0
- package/simpleble/src/backends/dongl/serial/Protocol.h +117 -0
- package/simpleble/src/backends/dongl/serial/ProtocolBase.cpp +95 -0
- package/simpleble/src/backends/dongl/serial/ProtocolBase.h +54 -0
- package/simpleble/src/backends/dongl/serial/Wire.cpp +133 -0
- package/simpleble/src/backends/dongl/serial/Wire.h +116 -0
- package/simpleble/src/backends/dongl/usb/UsbHelper.cpp +53 -0
- package/simpleble/src/backends/dongl/usb/UsbHelper.h +32 -0
- package/simpleble/src/backends/dongl/usb/UsbHelperApple.cpp +266 -0
- package/simpleble/src/backends/dongl/usb/UsbHelperApple.h +34 -0
- package/simpleble/src/backends/dongl/usb/UsbHelperImpl.h +29 -0
- package/simpleble/src/backends/dongl/usb/UsbHelperLinux.cpp +21 -0
- package/simpleble/src/backends/dongl/usb/UsbHelperLinux.h +22 -0
- package/simpleble/src/backends/dongl/usb/UsbHelperNull.cpp +21 -0
- package/simpleble/src/backends/dongl/usb/UsbHelperNull.h +22 -0
- package/simpleble/src/backends/dongl/usb/UsbHelperWindows.cpp +21 -0
- package/simpleble/src/backends/dongl/usb/UsbHelperWindows.h +22 -0
- package/simpleble/src/backends/linux/AdapterLinux.cpp +102 -0
- package/simpleble/src/backends/linux/AdapterLinux.h +55 -0
- package/simpleble/src/backends/linux/BackendBluez.cpp +90 -0
- package/simpleble/src/backends/linux/PeripheralLinux.cpp +394 -0
- package/simpleble/src/backends/linux/PeripheralLinux.h +90 -0
- package/simpleble/src/backends/linux_legacy/AdapterLinuxLegacy.cpp +102 -0
- package/simpleble/src/backends/linux_legacy/AdapterLinuxLegacy.h +55 -0
- package/simpleble/src/backends/linux_legacy/BackendBluezLegacy.cpp +87 -0
- package/simpleble/src/backends/linux_legacy/PeripheralLinuxLegacy.cpp +376 -0
- package/simpleble/src/backends/linux_legacy/PeripheralLinuxLegacy.h +90 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Adapter.h +46 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Agent.h +52 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Bluez.h +37 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezOrg.h +22 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezOrgBluez.h +26 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezRoot.h +32 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Characteristic.h +47 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Descriptor.h +33 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Device.h +64 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Exceptions.h +43 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Service.h +27 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Types.h +9 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Adapter1.h +49 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Agent1.h +100 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/AgentManager1.h +24 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Battery1.h +32 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Device1.h +62 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattCharacteristic1.h +48 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattDescriptor1.h +41 -0
- package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattService1.h +28 -0
- package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/Interface.h +67 -0
- package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/InterfaceRegistry.h +62 -0
- package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/Proxy.h +117 -0
- package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Connection.h +50 -0
- package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Exceptions.h +56 -0
- package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Holder.h +147 -0
- package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Logging.h +57 -0
- package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Message.h +89 -0
- package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Path.h +24 -0
- package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/interfaces/ObjectManager.h +26 -0
- package/simpleble/src/backends/linux_legacy/src/Adapter.cpp +78 -0
- package/simpleble/src/backends/linux_legacy/src/Agent.cpp +72 -0
- package/simpleble/src/backends/linux_legacy/src/Bluez.cpp +45 -0
- package/simpleble/src/backends/linux_legacy/src/BluezOrg.cpp +20 -0
- package/simpleble/src/backends/linux_legacy/src/BluezOrgBluez.cpp +23 -0
- package/simpleble/src/backends/linux_legacy/src/BluezRoot.cpp +44 -0
- package/simpleble/src/backends/linux_legacy/src/Characteristic.cpp +64 -0
- package/simpleble/src/backends/linux_legacy/src/Descriptor.cpp +27 -0
- package/simpleble/src/backends/linux_legacy/src/Device.cpp +104 -0
- package/simpleble/src/backends/linux_legacy/src/Exceptions.cpp +29 -0
- package/simpleble/src/backends/linux_legacy/src/Service.cpp +33 -0
- package/simpleble/src/backends/linux_legacy/src/advanced/Interface.cpp +155 -0
- package/simpleble/src/backends/linux_legacy/src/advanced/Proxy.cpp +374 -0
- package/simpleble/src/backends/linux_legacy/src/base/Connection.cpp +219 -0
- package/simpleble/src/backends/linux_legacy/src/base/Exceptions.cpp +39 -0
- package/simpleble/src/backends/linux_legacy/src/base/Holder.cpp +739 -0
- package/simpleble/src/backends/linux_legacy/src/base/Message.cpp +622 -0
- package/simpleble/src/backends/linux_legacy/src/base/Path.cpp +129 -0
- package/simpleble/src/backends/linux_legacy/src/interfaces/Adapter1.cpp +123 -0
- package/simpleble/src/backends/linux_legacy/src/interfaces/Agent1.cpp +143 -0
- package/simpleble/src/backends/linux_legacy/src/interfaces/AgentManager1.cpp +34 -0
- package/simpleble/src/backends/linux_legacy/src/interfaces/Battery1.cpp +30 -0
- package/simpleble/src/backends/linux_legacy/src/interfaces/Device1.cpp +170 -0
- package/simpleble/src/backends/linux_legacy/src/interfaces/GattCharacteristic1.cpp +118 -0
- package/simpleble/src/backends/linux_legacy/src/interfaces/GattDescriptor1.cpp +78 -0
- package/simpleble/src/backends/linux_legacy/src/interfaces/GattService1.cpp +28 -0
- package/simpleble/src/backends/linux_legacy/src/interfaces/ObjectManager.cpp +58 -0
- package/simpleble/src/backends/macos/AdapterBaseMacOS.h +29 -0
- package/simpleble/src/backends/macos/AdapterBaseMacOS.mm +235 -0
- package/simpleble/src/backends/macos/AdapterMac.h +78 -0
- package/simpleble/src/backends/macos/AdapterMac.mm +156 -0
- package/simpleble/src/backends/macos/BackendCoreBluetooth.mm +45 -0
- package/simpleble/src/backends/macos/PeripheralBaseMacOS.h +49 -0
- package/simpleble/src/backends/macos/PeripheralBaseMacOS.mm +714 -0
- package/simpleble/src/backends/macos/PeripheralMac.h +81 -0
- package/simpleble/src/backends/macos/PeripheralMac.mm +229 -0
- package/simpleble/src/backends/macos/Utils.h +9 -0
- package/simpleble/src/backends/macos/Utils.mm +23 -0
- package/simpleble/src/backends/plain/AdapterPlain.cpp +65 -0
- package/simpleble/src/backends/plain/AdapterPlain.h +49 -0
- package/simpleble/src/backends/plain/BackendPlain.cpp +30 -0
- package/simpleble/src/backends/plain/PeripheralPlain.cpp +159 -0
- package/simpleble/src/backends/plain/PeripheralPlain.h +72 -0
- package/simpleble/src/backends/windows/AdapterWindows.cpp +338 -0
- package/simpleble/src/backends/windows/AdapterWindows.h +89 -0
- package/simpleble/src/backends/windows/BackendWinRT.cpp +67 -0
- package/simpleble/src/backends/windows/BackendWinRT.h +18 -0
- package/simpleble/src/backends/windows/MtaManager.cpp +49 -0
- package/simpleble/src/backends/windows/MtaManager.h +90 -0
- package/simpleble/src/backends/windows/PeripheralWindows.cpp +487 -0
- package/simpleble/src/backends/windows/PeripheralWindows.h +129 -0
- package/simpleble/src/backends/windows/Utils.cpp +146 -0
- package/simpleble/src/backends/windows/Utils.h +47 -0
- package/simpleble/src/builders/BuildVec.h +32 -0
- package/simpleble/src/builders/BuilderBase.h +87 -0
- package/simpleble/src/external/TaskRunner.hpp +99 -0
- package/simpleble/src/external/ThreadRunner.h +52 -0
- package/simpleble/src/external/kvn_safe_callback.hpp +66 -0
- package/simpleble/src/external/kvn_safe_map.hpp +94 -0
- package/simpleble/src/external/kvn_threadrunner.hpp +70 -0
- package/simpleble/src/external/logfwd.hpp +35 -0
- package/simpleble/src/frontends/base/Adapter.cpp +111 -0
- package/simpleble/src/frontends/base/Advanced.cpp +34 -0
- package/simpleble/src/frontends/base/Backend.cpp +95 -0
- package/simpleble/src/frontends/base/Backend.h +76 -0
- package/simpleble/src/frontends/base/Characteristic.cpp +56 -0
- package/simpleble/src/frontends/base/Descriptor.cpp +21 -0
- package/simpleble/src/frontends/base/Peripheral.cpp +113 -0
- package/simpleble/src/frontends/base/Service.cpp +26 -0
- package/simpleble/src/frontends/safe/AdapterSafe.cpp +158 -0
- 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
|