simpleble 0.0.1
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +88 -0
- data/LICENSE.txt +21 -0
- data/README.md +350 -0
- data/ext/simpleble/extconf.rb +57 -0
- data/ext/simpleble/simpleble_ruby.c +682 -0
- data/lib/simpleble/adapter.rb +10 -0
- data/lib/simpleble/characteristic.rb +36 -0
- data/lib/simpleble/descriptor.rb +8 -0
- data/lib/simpleble/exceptions.rb +25 -0
- data/lib/simpleble/peripheral.rb +64 -0
- data/lib/simpleble/service.rb +16 -0
- data/lib/simpleble/version.rb +3 -0
- data/lib/simpleble.rb +40 -0
- data/vendor/simpleble/build_simplecble/CMakeFiles/4.0.3/CompilerIdCXX/CMakeCXXCompilerId.cpp +920 -0
- data/vendor/simpleble/build_simplecble/CMakeFiles/4.0.3/CompilerIdCXX/apple-sdk.cpp +1 -0
- data/vendor/simpleble/build_simplecble/CMakeFiles/4.1.0/CompilerIdCXX/CMakeCXXCompilerId.cpp +949 -0
- data/vendor/simpleble/build_simplecble/CMakeFiles/4.1.0/CompilerIdCXX/apple-sdk.cpp +1 -0
- data/vendor/simpleble/build_simplecble/export/simplecble/export.h +43 -0
- data/vendor/simpleble/build_simplecble/simpleble/export/simpleble/export.h +43 -0
- data/vendor/simpleble/dependencies/external/kvn/kvn_bytearray.h +222 -0
- data/vendor/simpleble/dependencies/external/kvn/kvn_safe_callback.hpp +66 -0
- data/vendor/simpleble/dependencies/external/kvn/logfwd.hpp +35 -0
- data/vendor/simpleble/dependencies/internal/fmt/args.h +220 -0
- data/vendor/simpleble/dependencies/internal/fmt/base.h +2962 -0
- data/vendor/simpleble/dependencies/internal/fmt/chrono.h +2338 -0
- data/vendor/simpleble/dependencies/internal/fmt/color.h +610 -0
- data/vendor/simpleble/dependencies/internal/fmt/compile.h +539 -0
- data/vendor/simpleble/dependencies/internal/fmt/core.h +5 -0
- data/vendor/simpleble/dependencies/internal/fmt/format-inl.h +1949 -0
- data/vendor/simpleble/dependencies/internal/fmt/format.h +4244 -0
- data/vendor/simpleble/dependencies/internal/fmt/os.h +427 -0
- data/vendor/simpleble/dependencies/internal/fmt/ostream.h +166 -0
- data/vendor/simpleble/dependencies/internal/fmt/printf.h +633 -0
- data/vendor/simpleble/dependencies/internal/fmt/ranges.h +850 -0
- data/vendor/simpleble/dependencies/internal/fmt/std.h +726 -0
- data/vendor/simpleble/dependencies/internal/fmt/xchar.h +373 -0
- data/vendor/simpleble/dependencies/internal/simplejni/Common.hpp +579 -0
- data/vendor/simpleble/dependencies/internal/simplejni/References.hpp +151 -0
- data/vendor/simpleble/dependencies/internal/simplejni/Registry.hpp +183 -0
- data/vendor/simpleble/dependencies/internal/simplejni/VM.hpp +88 -0
- data/vendor/simpleble/examples/simpleble/src/connect.cpp +67 -0
- data/vendor/simpleble/examples/simpleble/src/connect_safe.cpp +91 -0
- data/vendor/simpleble/examples/simpleble/src/list_adapters.cpp +22 -0
- data/vendor/simpleble/examples/simpleble/src/list_adapters_safe.cpp +33 -0
- data/vendor/simpleble/examples/simpleble/src/list_paired.cpp +27 -0
- data/vendor/simpleble/examples/simpleble/src/multiconnect.cpp +60 -0
- data/vendor/simpleble/examples/simpleble/src/notify.cpp +85 -0
- data/vendor/simpleble/examples/simpleble/src/notify_multi.cpp +101 -0
- data/vendor/simpleble/examples/simpleble/src/power_cycle.cpp +43 -0
- data/vendor/simpleble/examples/simpleble/src/read.cpp +82 -0
- data/vendor/simpleble/examples/simpleble/src/scan.cpp +62 -0
- data/vendor/simpleble/examples/simpleble/src/utils.cpp +59 -0
- data/vendor/simpleble/examples/simpleble/src/utils.hpp +27 -0
- data/vendor/simpleble/examples/simpleble/src/write.cpp +81 -0
- data/vendor/simpleble/examples/simplebluez/ble_nus/ble_nus.cpp +138 -0
- data/vendor/simpleble/examples/simplebluez/connect/connect.cpp +119 -0
- data/vendor/simpleble/examples/simplebluez/list_adapters/list_adapters.cpp +44 -0
- data/vendor/simpleble/examples/simplebluez/list_paired/list_paired.cpp +48 -0
- data/vendor/simpleble/examples/simplebluez/notify/notify.cpp +145 -0
- data/vendor/simpleble/examples/simplebluez/pair/pair.cpp +181 -0
- data/vendor/simpleble/examples/simplebluez/read/read.cpp +141 -0
- data/vendor/simpleble/examples/simplebluez/scan/scan.cpp +85 -0
- data/vendor/simpleble/examples/simplecble/c/connect.c +163 -0
- data/vendor/simpleble/examples/simplecble/c/notify.c +217 -0
- data/vendor/simpleble/examples/simplecble/c/scan.c +164 -0
- data/vendor/simpleble/examples/simpledbus/notification.cpp +24 -0
- data/vendor/simpleble/hitl/src/test_sanity.cpp +48 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/Adapter.h +102 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/AdapterSafe.h +58 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/Advanced.h +50 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/Characteristic.h +39 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/Config.h +55 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/Descriptor.h +30 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/Exceptions.h +72 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/Logging.h +73 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/Peripheral.h +82 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/PeripheralSafe.h +64 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/Service.h +34 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/SimpleBLE.h +8 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/Types.h +49 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/Utils.h +13 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/export.h +43 -0
- data/vendor/simpleble/install_simplecble/include/simpleble/kvn/kvn_bytearray.h +222 -0
- data/vendor/simpleble/install_simplecble/include/simplecble/adapter.h +188 -0
- data/vendor/simpleble/install_simplecble/include/simplecble/logging.h +37 -0
- data/vendor/simpleble/install_simplecble/include/simplecble/peripheral.h +304 -0
- data/vendor/simpleble/install_simplecble/include/simplecble/simpleble.h +21 -0
- data/vendor/simpleble/install_simplecble/include/simplecble/types.h +73 -0
- data/vendor/simpleble/install_simplecble/include/simplecble/utils.h +27 -0
- data/vendor/simpleble/simpleble/include/simpleble/Adapter.h +102 -0
- data/vendor/simpleble/simpleble/include/simpleble/AdapterSafe.h +58 -0
- data/vendor/simpleble/simpleble/include/simpleble/Characteristic.h +39 -0
- data/vendor/simpleble/simpleble/include/simpleble/Config.h +55 -0
- data/vendor/simpleble/simpleble/include/simpleble/Descriptor.h +30 -0
- data/vendor/simpleble/simpleble/include/simpleble/Exceptions.h +72 -0
- data/vendor/simpleble/simpleble/include/simpleble/Logging.h +73 -0
- data/vendor/simpleble/simpleble/include/simpleble/Peripheral.h +82 -0
- data/vendor/simpleble/simpleble/include/simpleble/PeripheralSafe.h +64 -0
- data/vendor/simpleble/simpleble/include/simpleble/Service.h +34 -0
- data/vendor/simpleble/simpleble/include/simpleble/SimpleBLE.h +8 -0
- data/vendor/simpleble/simpleble/include/simpleble/Types.h +49 -0
- data/vendor/simpleble/simpleble/include/simpleble/Utils.h +13 -0
- data/vendor/simpleble/simpleble/include/simpleble_c/adapter.h +188 -0
- data/vendor/simpleble/simpleble/include/simpleble_c/logging.h +37 -0
- data/vendor/simpleble/simpleble/include/simpleble_c/peripheral.h +304 -0
- data/vendor/simpleble/simpleble/include/simpleble_c/simpleble.h +21 -0
- data/vendor/simpleble/simpleble/include/simpleble_c/types.h +73 -0
- data/vendor/simpleble/simpleble/include/simpleble_c/utils.h +27 -0
- data/vendor/simpleble/simpleble/src/CommonUtils.h +63 -0
- data/vendor/simpleble/simpleble/src/Exceptions.cpp +31 -0
- data/vendor/simpleble/simpleble/src/Logging.cpp +136 -0
- data/vendor/simpleble/simpleble/src/LoggingInternal.h +85 -0
- data/vendor/simpleble/simpleble/src/Utils.cpp +24 -0
- data/vendor/simpleble/simpleble/src/backends/android/AdapterAndroid.cpp +101 -0
- data/vendor/simpleble/simpleble/src/backends/android/AdapterAndroid.h +70 -0
- data/vendor/simpleble/simpleble/src/backends/android/BackendAndroid.cpp +40 -0
- data/vendor/simpleble/simpleble/src/backends/android/BackendAndroid.h +20 -0
- data/vendor/simpleble/simpleble/src/backends/android/PeripheralAndroid.cpp +365 -0
- data/vendor/simpleble/simpleble/src/backends/android/PeripheralAndroid.h +90 -0
- data/vendor/simpleble/simpleble/src/backends/android/bridge/BluetoothGattCallback.cpp +432 -0
- data/vendor/simpleble/simpleble/src/backends/android/bridge/BluetoothGattCallback.h +102 -0
- data/vendor/simpleble/simpleble/src/backends/android/bridge/ScanCallback.cpp +142 -0
- data/vendor/simpleble/simpleble/src/backends/android/bridge/ScanCallback.h +55 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.cpp +107 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.h +55 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.cpp +68 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.h +54 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.cpp +115 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.h +75 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.cpp +142 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.h +66 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.cpp +67 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.h +46 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.cpp +106 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.h +47 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.cpp +47 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.h +37 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.cpp +69 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.h +41 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.cpp +63 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.h +42 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/os/ParcelUUID.cpp +32 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/os/ParcelUUID.h +30 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/util/SparseArray.cpp +54 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/android/util/SparseArray.h +37 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Iterator.cpp +36 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Iterator.h +28 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/java/util/List.cpp +29 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/java/util/List.h +27 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Set.cpp +33 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Set.h +28 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/java/util/UUID.cpp +26 -0
- data/vendor/simpleble/simpleble/src/backends/android/types/java/util/UUID.h +29 -0
- data/vendor/simpleble/simpleble/src/backends/common/AdapterBase.cpp +53 -0
- data/vendor/simpleble/simpleble/src/backends/common/AdapterBase.h +81 -0
- data/vendor/simpleble/simpleble/src/backends/common/AdapterBaseTypes.h +22 -0
- data/vendor/simpleble/simpleble/src/backends/common/BackendBase.h +20 -0
- data/vendor/simpleble/simpleble/src/backends/common/BackendUtils.h +33 -0
- data/vendor/simpleble/simpleble/src/backends/common/CharacteristicBase.cpp +28 -0
- data/vendor/simpleble/simpleble/src/backends/common/CharacteristicBase.h +38 -0
- data/vendor/simpleble/simpleble/src/backends/common/DescriptorBase.cpp +7 -0
- data/vendor/simpleble/simpleble/src/backends/common/DescriptorBase.h +19 -0
- data/vendor/simpleble/simpleble/src/backends/common/PeripheralBase.h +82 -0
- data/vendor/simpleble/simpleble/src/backends/common/ServiceBase.cpp +18 -0
- data/vendor/simpleble/simpleble/src/backends/common/ServiceBase.h +28 -0
- data/vendor/simpleble/simpleble/src/backends/linux/AdapterLinux.cpp +102 -0
- data/vendor/simpleble/simpleble/src/backends/linux/AdapterLinux.h +55 -0
- data/vendor/simpleble/simpleble/src/backends/linux/BackendBluez.cpp +87 -0
- data/vendor/simpleble/simpleble/src/backends/linux/PeripheralLinux.cpp +376 -0
- data/vendor/simpleble/simpleble/src/backends/linux/PeripheralLinux.h +90 -0
- data/vendor/simpleble/simpleble/src/backends/macos/AdapterBaseMacOS.h +29 -0
- data/vendor/simpleble/simpleble/src/backends/macos/AdapterMac.h +78 -0
- data/vendor/simpleble/simpleble/src/backends/macos/PeripheralBaseMacOS.h +49 -0
- data/vendor/simpleble/simpleble/src/backends/macos/PeripheralMac.h +81 -0
- data/vendor/simpleble/simpleble/src/backends/macos/Utils.h +9 -0
- data/vendor/simpleble/simpleble/src/backends/plain/AdapterPlain.cpp +65 -0
- data/vendor/simpleble/simpleble/src/backends/plain/AdapterPlain.h +49 -0
- data/vendor/simpleble/simpleble/src/backends/plain/BackendPlain.cpp +30 -0
- data/vendor/simpleble/simpleble/src/backends/plain/PeripheralPlain.cpp +159 -0
- data/vendor/simpleble/simpleble/src/backends/plain/PeripheralPlain.h +72 -0
- data/vendor/simpleble/simpleble/src/backends/windows/AdapterWindows.cpp +330 -0
- data/vendor/simpleble/simpleble/src/backends/windows/AdapterWindows.h +89 -0
- data/vendor/simpleble/simpleble/src/backends/windows/BackendWinRT.cpp +67 -0
- data/vendor/simpleble/simpleble/src/backends/windows/BackendWinRT.h +18 -0
- data/vendor/simpleble/simpleble/src/backends/windows/MtaManager.cpp +49 -0
- data/vendor/simpleble/simpleble/src/backends/windows/MtaManager.h +90 -0
- data/vendor/simpleble/simpleble/src/backends/windows/PeripheralWindows.cpp +487 -0
- data/vendor/simpleble/simpleble/src/backends/windows/PeripheralWindows.h +129 -0
- data/vendor/simpleble/simpleble/src/backends/windows/Utils.cpp +146 -0
- data/vendor/simpleble/simpleble/src/backends/windows/Utils.h +47 -0
- data/vendor/simpleble/simpleble/src/builders/BuildVec.h +32 -0
- data/vendor/simpleble/simpleble/src/builders/BuilderBase.h +87 -0
- data/vendor/simpleble/simpleble/src/external/TaskRunner.hpp +99 -0
- data/vendor/simpleble/simpleble/src/external/ThreadRunner.h +52 -0
- data/vendor/simpleble/simpleble/src/external/kvn_safe_callback.hpp +66 -0
- data/vendor/simpleble/simpleble/src/external/kvn_safe_map.hpp +94 -0
- data/vendor/simpleble/simpleble/src/external/kvn_threadrunner.hpp +70 -0
- data/vendor/simpleble/simpleble/src/external/logfwd.hpp +35 -0
- data/vendor/simpleble/simpleble/src/frontends/base/Adapter.cpp +111 -0
- data/vendor/simpleble/simpleble/src/frontends/base/Backend.cpp +83 -0
- data/vendor/simpleble/simpleble/src/frontends/base/Backend.h +76 -0
- data/vendor/simpleble/simpleble/src/frontends/base/Characteristic.cpp +56 -0
- data/vendor/simpleble/simpleble/src/frontends/base/Descriptor.cpp +21 -0
- data/vendor/simpleble/simpleble/src/frontends/base/Peripheral.cpp +113 -0
- data/vendor/simpleble/simpleble/src/frontends/base/Service.cpp +26 -0
- data/vendor/simpleble/simpleble/src/frontends/safe/AdapterSafe.cpp +158 -0
- data/vendor/simpleble/simpleble/src/frontends/safe/PeripheralSafe.cpp +219 -0
- data/vendor/simpleble/simpleble/src_c/adapter.cpp +204 -0
- data/vendor/simpleble/simpleble/src_c/logging.cpp +19 -0
- data/vendor/simpleble/simpleble/src_c/peripheral.cpp +444 -0
- data/vendor/simpleble/simpleble/src_c/simpleble.cpp +5 -0
- data/vendor/simpleble/simpleble/src_c/utils.cpp +15 -0
- data/vendor/simpleble/simpleble/test/src/main.cpp +8 -0
- data/vendor/simpleble/simpleble/test/src/test_bytearray.cpp +246 -0
- data/vendor/simpleble/simpleble/test/src/test_utils.cpp +24 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/Adapter.h +46 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/Agent.h +52 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/Bluez.h +37 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/BluezOrg.h +22 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/BluezOrgBluez.h +26 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/BluezRoot.h +32 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/Characteristic.h +46 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/Descriptor.h +33 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/Device.h +64 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/Exceptions.h +43 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/Service.h +27 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/Types.h +9 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Adapter1.h +49 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Agent1.h +100 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/AgentManager1.h +24 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Battery1.h +32 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Device1.h +62 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattCharacteristic1.h +48 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattDescriptor1.h +41 -0
- data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattService1.h +28 -0
- data/vendor/simpleble/simplebluez/src/Adapter.cpp +78 -0
- data/vendor/simpleble/simplebluez/src/Agent.cpp +72 -0
- data/vendor/simpleble/simplebluez/src/Bluez.cpp +45 -0
- data/vendor/simpleble/simplebluez/src/BluezOrg.cpp +20 -0
- data/vendor/simpleble/simplebluez/src/BluezOrgBluez.cpp +23 -0
- data/vendor/simpleble/simplebluez/src/BluezRoot.cpp +44 -0
- data/vendor/simpleble/simplebluez/src/Characteristic.cpp +64 -0
- data/vendor/simpleble/simplebluez/src/Descriptor.cpp +27 -0
- data/vendor/simpleble/simplebluez/src/Device.cpp +104 -0
- data/vendor/simpleble/simplebluez/src/Exceptions.cpp +29 -0
- data/vendor/simpleble/simplebluez/src/Logging.cpp +52 -0
- data/vendor/simpleble/simplebluez/src/Logging.h +57 -0
- data/vendor/simpleble/simplebluez/src/Service.cpp +33 -0
- data/vendor/simpleble/simplebluez/src/interfaces/Adapter1.cpp +123 -0
- data/vendor/simpleble/simplebluez/src/interfaces/Agent1.cpp +143 -0
- data/vendor/simpleble/simplebluez/src/interfaces/AgentManager1.cpp +34 -0
- data/vendor/simpleble/simplebluez/src/interfaces/Battery1.cpp +30 -0
- data/vendor/simpleble/simplebluez/src/interfaces/Device1.cpp +170 -0
- data/vendor/simpleble/simplebluez/src/interfaces/GattCharacteristic1.cpp +118 -0
- data/vendor/simpleble/simplebluez/src/interfaces/GattDescriptor1.cpp +78 -0
- data/vendor/simpleble/simplebluez/src/interfaces/GattService1.cpp +28 -0
- data/vendor/simpleble/simplebluez/test/src/helpers/PythonRunner.cpp +53 -0
- data/vendor/simpleble/simplebluez/test/src/helpers/PythonRunner.h +24 -0
- data/vendor/simpleble/simplebluez/test/src/main.cpp +16 -0
- data/vendor/simpleble/simplecble/include/simplecble/adapter.h +188 -0
- data/vendor/simpleble/simplecble/include/simplecble/logging.h +37 -0
- data/vendor/simpleble/simplecble/include/simplecble/peripheral.h +304 -0
- data/vendor/simpleble/simplecble/include/simplecble/simpleble.h +21 -0
- data/vendor/simpleble/simplecble/include/simplecble/types.h +73 -0
- data/vendor/simpleble/simplecble/include/simplecble/utils.h +27 -0
- data/vendor/simpleble/simplecble/src/adapter.cpp +204 -0
- data/vendor/simpleble/simplecble/src/logging.cpp +19 -0
- data/vendor/simpleble/simplecble/src/peripheral.cpp +444 -0
- data/vendor/simpleble/simplecble/src/simpleble.cpp +5 -0
- data/vendor/simpleble/simplecble/src/utils.cpp +15 -0
- data/vendor/simpleble/simpledbus/include/simpledbus/advanced/Interface.h +67 -0
- data/vendor/simpleble/simpledbus/include/simpledbus/advanced/InterfaceRegistry.h +64 -0
- data/vendor/simpleble/simpledbus/include/simpledbus/advanced/Proxy.h +117 -0
- data/vendor/simpleble/simpledbus/include/simpledbus/base/Connection.h +50 -0
- data/vendor/simpleble/simpledbus/include/simpledbus/base/Exceptions.h +56 -0
- data/vendor/simpleble/simpledbus/include/simpledbus/base/Holder.h +147 -0
- data/vendor/simpleble/simpledbus/include/simpledbus/base/Logging.h +57 -0
- data/vendor/simpleble/simpledbus/include/simpledbus/base/Message.h +89 -0
- data/vendor/simpleble/simpledbus/include/simpledbus/base/Path.h +24 -0
- data/vendor/simpleble/simpledbus/include/simpledbus/interfaces/ObjectManager.h +26 -0
- data/vendor/simpleble/simpledbus/src/advanced/Interface.cpp +155 -0
- data/vendor/simpleble/simpledbus/src/advanced/Proxy.cpp +375 -0
- data/vendor/simpleble/simpledbus/src/base/Connection.cpp +222 -0
- data/vendor/simpleble/simpledbus/src/base/Exceptions.cpp +39 -0
- data/vendor/simpleble/simpledbus/src/base/Holder.cpp +739 -0
- data/vendor/simpleble/simpledbus/src/base/Logging.cpp +52 -0
- data/vendor/simpleble/simpledbus/src/base/Message.cpp +622 -0
- data/vendor/simpleble/simpledbus/src/base/Path.cpp +129 -0
- data/vendor/simpleble/simpledbus/src/interfaces/ObjectManager.cpp +58 -0
- data/vendor/simpleble/simpledbus/test/src/helpers/PythonRunner.cpp +53 -0
- data/vendor/simpleble/simpledbus/test/src/helpers/PythonRunner.h +24 -0
- data/vendor/simpleble/simpledbus/test/src/main.cpp +16 -0
- data/vendor/simpleble/simpledbus/test/src/test_holder.cpp +184 -0
- data/vendor/simpleble/simpledbus/test/src/test_message.cpp +397 -0
- data/vendor/simpleble/simpledbus/test/src/test_path.cpp +76 -0
- data/vendor/simpleble/simpledbus/test/src/test_proxy_children.cpp +109 -0
- data/vendor/simpleble/simpledbus/test/src/test_proxy_interfaces.cpp +102 -0
- data/vendor/simpleble/simpledbus/test/src/test_proxy_lifetime.cpp +18 -0
- data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/ThreadRunner.h +89 -0
- data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/android_utils.cpp +55 -0
- data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/android_utils.h +18 -0
- data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/simpleble_android.cpp +813 -0
- data/vendor/simpleble/simplejavable/cpp/src/core/AdapterWrapper.cpp +37 -0
- data/vendor/simpleble/simplejavable/cpp/src/core/AdapterWrapper.h +23 -0
- data/vendor/simpleble/simplejavable/cpp/src/core/Cache.cpp +58 -0
- data/vendor/simpleble/simplejavable/cpp/src/core/Cache.h +34 -0
- data/vendor/simpleble/simplejavable/cpp/src/core/PeripheralWrapper.cpp +17 -0
- data/vendor/simpleble/simplejavable/cpp/src/core/PeripheralWrapper.h +19 -0
- data/vendor/simpleble/simplejavable/cpp/src/java/lang/ArrayList.cpp +257 -0
- data/vendor/simpleble/simplejavable/cpp/src/java/lang/ArrayList.h +78 -0
- data/vendor/simpleble/simplejavable/cpp/src/java/lang/HashMap.cpp +96 -0
- data/vendor/simpleble/simplejavable/cpp/src/java/lang/HashMap.h +54 -0
- data/vendor/simpleble/simplejavable/cpp/src/java/lang/Integer.cpp +93 -0
- data/vendor/simpleble/simplejavable/cpp/src/java/lang/Integer.h +49 -0
- data/vendor/simpleble/simplejavable/cpp/src/java/lang/Iterator.cpp +85 -0
- data/vendor/simpleble/simplejavable/cpp/src/java/lang/Iterator.h +48 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/AdapterCallback.cpp +91 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/AdapterCallback.h +90 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Characteristic.cpp +35 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Characteristic.h +60 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/DataCallback.cpp +33 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/DataCallback.h +45 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Descriptor.cpp +30 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Descriptor.h +49 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/PeripheralCallback.cpp +41 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/PeripheralCallback.h +51 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Service.cpp +33 -0
- data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Service.h +54 -0
- data/vendor/simpleble/simplejavable/cpp/src/simplejavable.cpp +361 -0
- data/vendor/simpleble/simplepyble/src/main.cpp +55 -0
- data/vendor/simpleble/simplepyble/src/wrap_adapter.cpp +106 -0
- data/vendor/simpleble/simplepyble/src/wrap_characteristic.cpp +56 -0
- data/vendor/simpleble/simplepyble/src/wrap_config.cpp +136 -0
- data/vendor/simpleble/simplepyble/src/wrap_descriptor.cpp +21 -0
- data/vendor/simpleble/simplepyble/src/wrap_peripheral.cpp +217 -0
- data/vendor/simpleble/simplepyble/src/wrap_service.cpp +32 -0
- data/vendor/simpleble/simplepyble/src/wrap_types.cpp +21 -0
- data/vendor/simpleble/simplersble/src/bindings/Bindings.cpp +338 -0
- data/vendor/simpleble/simplersble/src/bindings/Bindings.hpp +178 -0
- metadata +430 -0
@@ -0,0 +1,143 @@
|
|
1
|
+
#include "simplebluez/interfaces/Agent1.h"
|
2
|
+
|
3
|
+
using namespace SimpleBluez;
|
4
|
+
|
5
|
+
const SimpleDBus::AutoRegisterInterface<Agent1> Agent1::registry{
|
6
|
+
"org.bluez.Agent1",
|
7
|
+
// clang-format off
|
8
|
+
[](std::shared_ptr<SimpleDBus::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBus::Holder& options) -> std::shared_ptr<SimpleDBus::Interface> {
|
9
|
+
return std::static_pointer_cast<SimpleDBus::Interface>(std::make_shared<Agent1>(conn, path));
|
10
|
+
}
|
11
|
+
// clang-format on
|
12
|
+
};
|
13
|
+
|
14
|
+
Agent1::Agent1(std::shared_ptr<SimpleDBus::Connection> conn, std::string path)
|
15
|
+
: SimpleDBus::Interface(conn, "org.bluez", path, "org.bluez.Agent1") {}
|
16
|
+
|
17
|
+
void Agent1::message_handle(SimpleDBus::Message& msg) {
|
18
|
+
if (msg.get_type() == SimpleDBus::Message::Type::METHOD_CALL) {
|
19
|
+
// To minimize the amount of repeated code, create a method return object that will be
|
20
|
+
// used to send the reply.
|
21
|
+
SimpleDBus::Message reply = SimpleDBus::Message::create_method_return(msg);
|
22
|
+
|
23
|
+
if (msg.get_member() == "Release") {
|
24
|
+
// Nothing to do
|
25
|
+
|
26
|
+
} else if (msg.get_member() == "RequestPinCode") {
|
27
|
+
// std::cout << "Agent1::message_handle() RequestPinCode" << std::endl;
|
28
|
+
|
29
|
+
std::string pin_code = "abc123";
|
30
|
+
if (OnRequestPinCode) {
|
31
|
+
pin_code = OnRequestPinCode();
|
32
|
+
}
|
33
|
+
|
34
|
+
if (!pin_code.empty()) {
|
35
|
+
reply.append_argument(SimpleDBus::Holder::create_string(pin_code), DBUS_TYPE_STRING_AS_STRING);
|
36
|
+
} else {
|
37
|
+
reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
|
38
|
+
return;
|
39
|
+
}
|
40
|
+
|
41
|
+
} else if (msg.get_member() == "RequestPasskey") {
|
42
|
+
// std::cout << "Agent1::message_handle() RequestPasskey" << std::endl;
|
43
|
+
|
44
|
+
int32_t passkey = 123456;
|
45
|
+
if (OnRequestPasskey) {
|
46
|
+
passkey = OnRequestPasskey();
|
47
|
+
}
|
48
|
+
|
49
|
+
if (passkey >= 0 && passkey <= 999999) {
|
50
|
+
reply.append_argument(SimpleDBus::Holder::create_uint32(static_cast<uint32_t>(passkey)),
|
51
|
+
DBUS_TYPE_UINT32_AS_STRING);
|
52
|
+
} else {
|
53
|
+
reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
|
54
|
+
return;
|
55
|
+
}
|
56
|
+
|
57
|
+
} else if (msg.get_member() == "DisplayPinCode") {
|
58
|
+
// std::cout << "Agent1::message_handle() DisplayPinCode" << std::endl;
|
59
|
+
SimpleDBus::Holder arg_device = msg.extract();
|
60
|
+
SimpleDBus::Holder arg_pin_code = msg.extract();
|
61
|
+
|
62
|
+
bool success = true;
|
63
|
+
if (OnDisplayPinCode) {
|
64
|
+
success = OnDisplayPinCode(arg_pin_code.get_string());
|
65
|
+
}
|
66
|
+
|
67
|
+
if (!success) {
|
68
|
+
reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
|
69
|
+
return;
|
70
|
+
}
|
71
|
+
|
72
|
+
} else if (msg.get_member() == "DisplayPasskey") {
|
73
|
+
// std::cout << "Agent1::message_handle() DisplayPasskey" << std::endl;
|
74
|
+
SimpleDBus::Holder arg_device = msg.extract();
|
75
|
+
SimpleDBus::Holder arg_passkey = msg.extract();
|
76
|
+
SimpleDBus::Holder arg_entered = msg.extract();
|
77
|
+
|
78
|
+
if (OnDisplayPasskey) {
|
79
|
+
OnDisplayPasskey(arg_passkey.get_uint32(), arg_entered.get_uint16());
|
80
|
+
}
|
81
|
+
|
82
|
+
} else if (msg.get_member() == "RequestConfirmation") {
|
83
|
+
// std::cout << "Agent1::message_handle() RequestConfirmation" << std::endl;
|
84
|
+
SimpleDBus::Holder arg_device = msg.extract();
|
85
|
+
SimpleDBus::Holder arg_passkey = msg.extract();
|
86
|
+
|
87
|
+
bool success = true;
|
88
|
+
if (OnRequestConfirmation) {
|
89
|
+
success = OnRequestConfirmation(arg_passkey.get_uint32());
|
90
|
+
}
|
91
|
+
|
92
|
+
if (!success) {
|
93
|
+
reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
|
94
|
+
return;
|
95
|
+
}
|
96
|
+
|
97
|
+
} else if (msg.get_member() == "RequestAuthorization") {
|
98
|
+
// std::cout << "Agent1::message_handle() RequestAuthorization" << std::endl;
|
99
|
+
SimpleDBus::Holder arg_device = msg.extract();
|
100
|
+
|
101
|
+
bool success = true;
|
102
|
+
if (OnRequestAuthorization) {
|
103
|
+
success = OnRequestAuthorization();
|
104
|
+
}
|
105
|
+
|
106
|
+
if (!success) {
|
107
|
+
reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
|
108
|
+
return;
|
109
|
+
}
|
110
|
+
|
111
|
+
} else if (msg.get_member() == "AuthorizeService") {
|
112
|
+
// std::cout << "Agent1::message_handle() AuthorizeService" << std::endl;
|
113
|
+
|
114
|
+
SimpleDBus::Holder arg_device = msg.extract();
|
115
|
+
SimpleDBus::Holder arg_uuid = msg.extract();
|
116
|
+
|
117
|
+
bool success = true;
|
118
|
+
if (OnAuthorizeService) {
|
119
|
+
success = OnAuthorizeService(arg_uuid.get_string());
|
120
|
+
}
|
121
|
+
|
122
|
+
if (!success) {
|
123
|
+
reply_error(msg, "org.bluez.Error.Rejected", "User rejected the request");
|
124
|
+
return;
|
125
|
+
}
|
126
|
+
|
127
|
+
} else if (msg.get_member() == "Cancel") {
|
128
|
+
// std::cout << "Agent1::message_handle() Cancel" << std::endl;
|
129
|
+
// NOTE: Due to the blocking nature of this interface, the Cancel method won't
|
130
|
+
// have any real impact on any of the callbacks, and thus will be ignored.
|
131
|
+
|
132
|
+
} else {
|
133
|
+
// std::cout << "Agent1::message_handle() Unknown method: " << msg.get_member() << std::endl;
|
134
|
+
}
|
135
|
+
|
136
|
+
_conn->send(reply);
|
137
|
+
}
|
138
|
+
}
|
139
|
+
|
140
|
+
void Agent1::reply_error(SimpleDBus::Message& msg, const std::string& error_name, const std::string& error_message) {
|
141
|
+
SimpleDBus::Message reply = SimpleDBus::Message::create_error(msg, error_name, error_message);
|
142
|
+
_conn->send(reply);
|
143
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#include <simplebluez/interfaces/AgentManager1.h>
|
2
|
+
|
3
|
+
using namespace SimpleBluez;
|
4
|
+
|
5
|
+
const SimpleDBus::AutoRegisterInterface<AgentManager1> AgentManager1::registry{
|
6
|
+
"org.bluez.AgentManager1",
|
7
|
+
// clang-format off
|
8
|
+
[](std::shared_ptr<SimpleDBus::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBus::Holder& options) -> std::shared_ptr<SimpleDBus::Interface> {
|
9
|
+
return std::static_pointer_cast<SimpleDBus::Interface>(std::make_shared<AgentManager1>(conn, path));
|
10
|
+
}
|
11
|
+
// clang-format on
|
12
|
+
};
|
13
|
+
|
14
|
+
AgentManager1::AgentManager1(std::shared_ptr<SimpleDBus::Connection> conn, std::string path)
|
15
|
+
: SimpleDBus::Interface(conn, "org.bluez", path, "org.bluez.AgentManager1") {}
|
16
|
+
|
17
|
+
void AgentManager1::RegisterAgent(std::string agent, std::string capability) {
|
18
|
+
auto msg = create_method_call("RegisterAgent");
|
19
|
+
msg.append_argument(SimpleDBus::Holder::create_object_path(agent), "o");
|
20
|
+
msg.append_argument(SimpleDBus::Holder::create_string(capability), "s");
|
21
|
+
_conn->send_with_reply_and_block(msg);
|
22
|
+
}
|
23
|
+
|
24
|
+
void AgentManager1::RequestDefaultAgent(std::string agent) {
|
25
|
+
auto msg = create_method_call("RequestDefaultAgent");
|
26
|
+
msg.append_argument(SimpleDBus::Holder::create_object_path(agent), "o");
|
27
|
+
_conn->send_with_reply_and_block(msg);
|
28
|
+
}
|
29
|
+
|
30
|
+
void AgentManager1::UnregisterAgent(std::string agent) {
|
31
|
+
auto msg = create_method_call("UnregisterAgent");
|
32
|
+
msg.append_argument(SimpleDBus::Holder::create_object_path(agent), "o");
|
33
|
+
_conn->send_with_reply_and_block(msg);
|
34
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#include "simplebluez/interfaces/Battery1.h"
|
2
|
+
|
3
|
+
#include <iostream>
|
4
|
+
|
5
|
+
using namespace SimpleBluez;
|
6
|
+
|
7
|
+
const SimpleDBus::AutoRegisterInterface<Battery1> Battery1::registry{
|
8
|
+
"org.bluez.Battery1",
|
9
|
+
// clang-format off
|
10
|
+
[](std::shared_ptr<SimpleDBus::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBus::Holder& options) -> std::shared_ptr<SimpleDBus::Interface> {
|
11
|
+
return std::static_pointer_cast<SimpleDBus::Interface>(std::make_shared<Battery1>(conn, path));
|
12
|
+
}
|
13
|
+
// clang-format on
|
14
|
+
};
|
15
|
+
|
16
|
+
Battery1::Battery1(std::shared_ptr<SimpleDBus::Connection> conn, std::string path)
|
17
|
+
: SimpleDBus::Interface(conn, "org.bluez", path, "org.bluez.Battery1") {}
|
18
|
+
|
19
|
+
Battery1::~Battery1() { OnPercentageChanged.unload(); }
|
20
|
+
|
21
|
+
uint8_t Battery1::Percentage() {
|
22
|
+
std::scoped_lock lock(_property_update_mutex);
|
23
|
+
return _properties["Percentage"].get_byte();
|
24
|
+
}
|
25
|
+
|
26
|
+
void Battery1::property_changed(std::string option_name) {
|
27
|
+
if (option_name == "Percentage") {
|
28
|
+
OnPercentageChanged();
|
29
|
+
}
|
30
|
+
}
|
@@ -0,0 +1,170 @@
|
|
1
|
+
#include "simplebluez/interfaces/Device1.h"
|
2
|
+
|
3
|
+
using namespace SimpleBluez;
|
4
|
+
|
5
|
+
const SimpleDBus::AutoRegisterInterface<Device1> Device1::registry{
|
6
|
+
"org.bluez.Device1",
|
7
|
+
// clang-format off
|
8
|
+
[](std::shared_ptr<SimpleDBus::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBus::Holder& options) -> std::shared_ptr<SimpleDBus::Interface> {
|
9
|
+
return std::static_pointer_cast<SimpleDBus::Interface>(std::make_shared<Device1>(conn, path));
|
10
|
+
}
|
11
|
+
// clang-format on
|
12
|
+
};
|
13
|
+
|
14
|
+
Device1::Device1(std::shared_ptr<SimpleDBus::Connection> conn, std::string path)
|
15
|
+
: SimpleDBus::Interface(conn, "org.bluez", path, "org.bluez.Device1") {}
|
16
|
+
|
17
|
+
Device1::~Device1() {
|
18
|
+
OnDisconnected.unload();
|
19
|
+
OnServicesResolved.unload();
|
20
|
+
}
|
21
|
+
|
22
|
+
void Device1::Connect() {
|
23
|
+
auto msg = create_method_call("Connect");
|
24
|
+
_conn->send_with_reply_and_block(msg);
|
25
|
+
}
|
26
|
+
|
27
|
+
void Device1::Disconnect() {
|
28
|
+
auto msg = create_method_call("Disconnect");
|
29
|
+
_conn->send_with_reply_and_block(msg);
|
30
|
+
}
|
31
|
+
|
32
|
+
void Device1::Pair() {
|
33
|
+
auto msg = create_method_call("Pair");
|
34
|
+
_conn->send_with_reply_and_block(msg);
|
35
|
+
}
|
36
|
+
|
37
|
+
void Device1::CancelPairing() {
|
38
|
+
auto msg = create_method_call("CancelPairing");
|
39
|
+
_conn->send_with_reply_and_block(msg);
|
40
|
+
}
|
41
|
+
|
42
|
+
int16_t Device1::RSSI() {
|
43
|
+
std::scoped_lock lock(_property_update_mutex);
|
44
|
+
return _properties["RSSI"].get_int16();
|
45
|
+
}
|
46
|
+
|
47
|
+
int16_t Device1::TxPower() { return _tx_power; }
|
48
|
+
|
49
|
+
uint16_t Device1::Appearance() {
|
50
|
+
std::scoped_lock lock(_property_update_mutex);
|
51
|
+
return _properties["Appearance"].get_uint16();
|
52
|
+
}
|
53
|
+
|
54
|
+
std::string Device1::Address() {
|
55
|
+
std::scoped_lock lock(_property_update_mutex);
|
56
|
+
return _properties["Address"].get_string();
|
57
|
+
}
|
58
|
+
|
59
|
+
std::string Device1::AddressType() {
|
60
|
+
std::scoped_lock lock(_property_update_mutex);
|
61
|
+
return _properties["AddressType"].get_string();
|
62
|
+
}
|
63
|
+
|
64
|
+
std::string Device1::Alias() {
|
65
|
+
std::scoped_lock lock(_property_update_mutex);
|
66
|
+
return _properties["Alias"].get_string();
|
67
|
+
}
|
68
|
+
|
69
|
+
std::string Device1::Name() {
|
70
|
+
std::scoped_lock lock(_property_update_mutex);
|
71
|
+
return _properties["Name"].get_string();
|
72
|
+
}
|
73
|
+
|
74
|
+
std::vector<std::string> Device1::UUIDs() {
|
75
|
+
std::scoped_lock lock(_property_update_mutex);
|
76
|
+
|
77
|
+
std::vector<std::string> uuids;
|
78
|
+
for (SimpleDBus::Holder& uuid : _properties["UUIDs"].get_array()) {
|
79
|
+
uuids.push_back(uuid.get_string());
|
80
|
+
}
|
81
|
+
|
82
|
+
return uuids;
|
83
|
+
}
|
84
|
+
|
85
|
+
std::map<uint16_t, ByteArray> Device1::ManufacturerData(bool refresh) {
|
86
|
+
if (refresh) {
|
87
|
+
property_refresh("ManufacturerData");
|
88
|
+
}
|
89
|
+
|
90
|
+
// Use the locally cached version to avoid parsing the map multiple times.
|
91
|
+
std::scoped_lock lock(_property_update_mutex);
|
92
|
+
return _manufacturer_data;
|
93
|
+
}
|
94
|
+
|
95
|
+
std::map<std::string, ByteArray> Device1::ServiceData(bool refresh) {
|
96
|
+
if (refresh) {
|
97
|
+
property_refresh("ServiceData");
|
98
|
+
}
|
99
|
+
|
100
|
+
// Use the locally cached version to avoid parsing the map multiple times.
|
101
|
+
std::scoped_lock lock(_property_update_mutex);
|
102
|
+
return _service_data;
|
103
|
+
}
|
104
|
+
|
105
|
+
bool Device1::Paired(bool refresh) {
|
106
|
+
if (refresh) {
|
107
|
+
property_refresh("Paired");
|
108
|
+
}
|
109
|
+
|
110
|
+
std::scoped_lock lock(_property_update_mutex);
|
111
|
+
return _properties["Paired"].get_boolean();
|
112
|
+
}
|
113
|
+
|
114
|
+
bool Device1::Connected(bool refresh) {
|
115
|
+
if (refresh) {
|
116
|
+
property_refresh("Connected");
|
117
|
+
}
|
118
|
+
|
119
|
+
std::scoped_lock lock(_property_update_mutex);
|
120
|
+
return _properties["Connected"].get_boolean();
|
121
|
+
}
|
122
|
+
|
123
|
+
bool Device1::ServicesResolved(bool refresh) {
|
124
|
+
if (refresh) {
|
125
|
+
property_refresh("ServicesResolved");
|
126
|
+
}
|
127
|
+
|
128
|
+
std::scoped_lock lock(_property_update_mutex);
|
129
|
+
return _properties["ServicesResolved"].get_boolean();
|
130
|
+
}
|
131
|
+
|
132
|
+
void Device1::property_changed(std::string option_name) {
|
133
|
+
if (option_name == "Connected") {
|
134
|
+
if (!Connected(false)) {
|
135
|
+
OnDisconnected();
|
136
|
+
}
|
137
|
+
} else if (option_name == "ServicesResolved") {
|
138
|
+
if (ServicesResolved(false)) {
|
139
|
+
OnServicesResolved();
|
140
|
+
}
|
141
|
+
} else if (option_name == "ManufacturerData") {
|
142
|
+
std::scoped_lock lock(_property_update_mutex);
|
143
|
+
|
144
|
+
_manufacturer_data.clear();
|
145
|
+
std::map<uint16_t, SimpleDBus::Holder> manuf_data = _properties["ManufacturerData"].get_dict_uint16();
|
146
|
+
// Loop through all received keys and store them.
|
147
|
+
for (auto& [key, value_array] : manuf_data) {
|
148
|
+
ByteArray raw_manuf_data;
|
149
|
+
for (auto& elem : value_array.get_array()) {
|
150
|
+
raw_manuf_data.push_back(elem.get_byte());
|
151
|
+
}
|
152
|
+
_manufacturer_data[key] = raw_manuf_data;
|
153
|
+
}
|
154
|
+
} else if (option_name == "ServiceData") {
|
155
|
+
std::scoped_lock lock(_property_update_mutex);
|
156
|
+
|
157
|
+
_service_data.clear();
|
158
|
+
std::map<std::string, SimpleDBus::Holder> service_data = _properties["ServiceData"].get_dict_string();
|
159
|
+
// Loop through all received keys and store them.
|
160
|
+
for (auto& [key, value_array] : service_data) {
|
161
|
+
ByteArray raw_service_data;
|
162
|
+
for (auto& elem : value_array.get_array()) {
|
163
|
+
raw_service_data.push_back(elem.get_byte());
|
164
|
+
}
|
165
|
+
_service_data[key] = raw_service_data;
|
166
|
+
}
|
167
|
+
} else if (option_name == "TxPower") {
|
168
|
+
_tx_power = _properties["TxPower"].get_int16();
|
169
|
+
}
|
170
|
+
}
|
@@ -0,0 +1,118 @@
|
|
1
|
+
#include "simplebluez/interfaces/GattCharacteristic1.h"
|
2
|
+
|
3
|
+
using namespace SimpleBluez;
|
4
|
+
|
5
|
+
const SimpleDBus::AutoRegisterInterface<GattCharacteristic1> GattCharacteristic1::registry{
|
6
|
+
"org.bluez.GattCharacteristic1",
|
7
|
+
// clang-format off
|
8
|
+
[](std::shared_ptr<SimpleDBus::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBus::Holder& options) -> std::shared_ptr<SimpleDBus::Interface> {
|
9
|
+
return std::static_pointer_cast<SimpleDBus::Interface>(std::make_shared<GattCharacteristic1>(conn, path));
|
10
|
+
}
|
11
|
+
// clang-format on
|
12
|
+
};
|
13
|
+
|
14
|
+
GattCharacteristic1::GattCharacteristic1(std::shared_ptr<SimpleDBus::Connection> conn, std::string path)
|
15
|
+
: SimpleDBus::Interface(conn, "org.bluez", path, "org.bluez.GattCharacteristic1") {}
|
16
|
+
|
17
|
+
GattCharacteristic1::~GattCharacteristic1() { OnValueChanged.unload(); }
|
18
|
+
|
19
|
+
void GattCharacteristic1::StartNotify() {
|
20
|
+
auto msg = create_method_call("StartNotify");
|
21
|
+
_conn->send_with_reply_and_block(msg);
|
22
|
+
}
|
23
|
+
|
24
|
+
void GattCharacteristic1::StopNotify() {
|
25
|
+
auto msg = create_method_call("StopNotify");
|
26
|
+
_conn->send_with_reply_and_block(msg);
|
27
|
+
}
|
28
|
+
|
29
|
+
void GattCharacteristic1::WriteValue(const ByteArray& value, WriteType type) {
|
30
|
+
SimpleDBus::Holder value_data = SimpleDBus::Holder::create_array();
|
31
|
+
for (size_t i = 0; i < value.size(); i++) {
|
32
|
+
value_data.array_append(SimpleDBus::Holder::create_byte(value[i]));
|
33
|
+
}
|
34
|
+
|
35
|
+
SimpleDBus::Holder options = SimpleDBus::Holder::create_dict();
|
36
|
+
if (type == WriteType::REQUEST) {
|
37
|
+
options.dict_append(SimpleDBus::Holder::Type::STRING, "type", SimpleDBus::Holder::create_string("request"));
|
38
|
+
} else if (type == WriteType::COMMAND) {
|
39
|
+
options.dict_append(SimpleDBus::Holder::Type::STRING, "type", SimpleDBus::Holder::create_string("command"));
|
40
|
+
}
|
41
|
+
|
42
|
+
auto msg = create_method_call("WriteValue");
|
43
|
+
msg.append_argument(value_data, "ay");
|
44
|
+
msg.append_argument(options, "a{sv}");
|
45
|
+
_conn->send_with_reply_and_block(msg);
|
46
|
+
}
|
47
|
+
|
48
|
+
ByteArray GattCharacteristic1::ReadValue() {
|
49
|
+
auto msg = create_method_call("ReadValue");
|
50
|
+
|
51
|
+
// NOTE: ReadValue requires an additional argument, which currently is not supported
|
52
|
+
SimpleDBus::Holder options = SimpleDBus::Holder::create_dict();
|
53
|
+
msg.append_argument(options, "a{sv}");
|
54
|
+
|
55
|
+
SimpleDBus::Message reply_msg = _conn->send_with_reply_and_block(msg);
|
56
|
+
SimpleDBus::Holder value = reply_msg.extract();
|
57
|
+
update_value(value);
|
58
|
+
|
59
|
+
return Value();
|
60
|
+
}
|
61
|
+
|
62
|
+
std::string GattCharacteristic1::UUID() {
|
63
|
+
// As the UUID property doesn't change, we can cache it
|
64
|
+
std::scoped_lock lock(_property_update_mutex);
|
65
|
+
return _uuid;
|
66
|
+
}
|
67
|
+
|
68
|
+
ByteArray GattCharacteristic1::Value() {
|
69
|
+
std::scoped_lock lock(_property_update_mutex);
|
70
|
+
return _value;
|
71
|
+
}
|
72
|
+
|
73
|
+
std::vector<std::string> GattCharacteristic1::Flags() {
|
74
|
+
std::scoped_lock lock(_property_update_mutex);
|
75
|
+
|
76
|
+
std::vector<std::string> flags;
|
77
|
+
for (SimpleDBus::Holder& flag : _properties["Flags"].get_array()) {
|
78
|
+
flags.push_back(flag.get_string());
|
79
|
+
}
|
80
|
+
|
81
|
+
return flags;
|
82
|
+
}
|
83
|
+
|
84
|
+
uint16_t GattCharacteristic1::MTU() {
|
85
|
+
std::scoped_lock lock(_property_update_mutex);
|
86
|
+
return _properties["MTU"].get_uint16();
|
87
|
+
}
|
88
|
+
|
89
|
+
bool GattCharacteristic1::Notifying(bool refresh) {
|
90
|
+
if (refresh) {
|
91
|
+
property_refresh("Notifying");
|
92
|
+
}
|
93
|
+
|
94
|
+
std::scoped_lock lock(_property_update_mutex);
|
95
|
+
return _properties["Notifying"].get_boolean();
|
96
|
+
}
|
97
|
+
|
98
|
+
void GattCharacteristic1::property_changed(std::string option_name) {
|
99
|
+
if (option_name == "UUID") {
|
100
|
+
std::scoped_lock lock(_property_update_mutex);
|
101
|
+
_uuid = _properties["UUID"].get_string();
|
102
|
+
} else if (option_name == "Value") {
|
103
|
+
update_value(_properties["Value"]);
|
104
|
+
OnValueChanged();
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
void GattCharacteristic1::update_value(SimpleDBus::Holder& new_value) {
|
109
|
+
std::scoped_lock lock(_property_update_mutex);
|
110
|
+
auto value_array = new_value.get_array();
|
111
|
+
|
112
|
+
char* value_data = new char[value_array.size()];
|
113
|
+
for (std::size_t i = 0; i < value_array.size(); i++) {
|
114
|
+
value_data[i] = value_array[i].get_byte();
|
115
|
+
}
|
116
|
+
_value = ByteArray(value_data, value_array.size());
|
117
|
+
delete[] value_data;
|
118
|
+
}
|
@@ -0,0 +1,78 @@
|
|
1
|
+
#include "simplebluez/interfaces/GattDescriptor1.h"
|
2
|
+
|
3
|
+
using namespace SimpleBluez;
|
4
|
+
|
5
|
+
const SimpleDBus::AutoRegisterInterface<GattDescriptor1> GattDescriptor1::registry{
|
6
|
+
"org.bluez.GattDescriptor1",
|
7
|
+
// clang-format off
|
8
|
+
[](std::shared_ptr<SimpleDBus::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBus::Holder& options) -> std::shared_ptr<SimpleDBus::Interface> {
|
9
|
+
return std::static_pointer_cast<SimpleDBus::Interface>(std::make_shared<GattDescriptor1>(conn, path));
|
10
|
+
}
|
11
|
+
// clang-format on
|
12
|
+
};
|
13
|
+
|
14
|
+
GattDescriptor1::GattDescriptor1(std::shared_ptr<SimpleDBus::Connection> conn, std::string path)
|
15
|
+
: SimpleDBus::Interface(conn, "org.bluez", path, "org.bluez.GattDescriptor1") {}
|
16
|
+
|
17
|
+
GattDescriptor1::~GattDescriptor1() { OnValueChanged.unload(); }
|
18
|
+
|
19
|
+
void GattDescriptor1::WriteValue(const ByteArray& value) {
|
20
|
+
SimpleDBus::Holder value_data = SimpleDBus::Holder::create_array();
|
21
|
+
for (size_t i = 0; i < value.size(); i++) {
|
22
|
+
value_data.array_append(SimpleDBus::Holder::create_byte(value[i]));
|
23
|
+
}
|
24
|
+
|
25
|
+
SimpleDBus::Holder options = SimpleDBus::Holder::create_dict();
|
26
|
+
|
27
|
+
auto msg = create_method_call("WriteValue");
|
28
|
+
msg.append_argument(value_data, "ay");
|
29
|
+
msg.append_argument(options, "a{sv}");
|
30
|
+
_conn->send_with_reply_and_block(msg);
|
31
|
+
}
|
32
|
+
|
33
|
+
ByteArray GattDescriptor1::ReadValue() {
|
34
|
+
auto msg = create_method_call("ReadValue");
|
35
|
+
|
36
|
+
// NOTE: ReadValue requires an additional argument, which currently is not supported
|
37
|
+
SimpleDBus::Holder options = SimpleDBus::Holder::create_dict();
|
38
|
+
msg.append_argument(options, "a{sv}");
|
39
|
+
|
40
|
+
SimpleDBus::Message reply_msg = _conn->send_with_reply_and_block(msg);
|
41
|
+
SimpleDBus::Holder value = reply_msg.extract();
|
42
|
+
update_value(value);
|
43
|
+
|
44
|
+
return Value();
|
45
|
+
}
|
46
|
+
|
47
|
+
std::string GattDescriptor1::UUID() {
|
48
|
+
// As the UUID property doesn't change, we can cache it
|
49
|
+
std::scoped_lock lock(_property_update_mutex);
|
50
|
+
return _uuid;
|
51
|
+
}
|
52
|
+
|
53
|
+
ByteArray GattDescriptor1::Value() {
|
54
|
+
std::scoped_lock lock(_property_update_mutex);
|
55
|
+
return _value;
|
56
|
+
}
|
57
|
+
|
58
|
+
void GattDescriptor1::property_changed(std::string option_name) {
|
59
|
+
if (option_name == "UUID") {
|
60
|
+
std::scoped_lock lock(_property_update_mutex);
|
61
|
+
_uuid = _properties["UUID"].get_string();
|
62
|
+
} else if (option_name == "Value") {
|
63
|
+
update_value(_properties["Value"]);
|
64
|
+
OnValueChanged();
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
void GattDescriptor1::update_value(SimpleDBus::Holder& new_value) {
|
69
|
+
std::scoped_lock lock(_property_update_mutex);
|
70
|
+
auto value_array = new_value.get_array();
|
71
|
+
|
72
|
+
char* value_data = new char[value_array.size()];
|
73
|
+
for (std::size_t i = 0; i < value_array.size(); i++) {
|
74
|
+
value_data[i] = value_array[i].get_byte();
|
75
|
+
}
|
76
|
+
_value = ByteArray(value_data, value_array.size());
|
77
|
+
delete[] value_data;
|
78
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#include "simplebluez/interfaces/GattService1.h"
|
2
|
+
|
3
|
+
using namespace SimpleBluez;
|
4
|
+
|
5
|
+
const SimpleDBus::AutoRegisterInterface<GattService1> GattService1::registry{
|
6
|
+
"org.bluez.GattService1",
|
7
|
+
// clang-format off
|
8
|
+
[](std::shared_ptr<SimpleDBus::Connection> conn, const std::string& bus_name, const std::string& path, const SimpleDBus::Holder& options) -> std::shared_ptr<SimpleDBus::Interface> {
|
9
|
+
return std::static_pointer_cast<SimpleDBus::Interface>(std::make_shared<GattService1>(conn, path));
|
10
|
+
}
|
11
|
+
// clang-format on
|
12
|
+
};
|
13
|
+
|
14
|
+
GattService1::GattService1(std::shared_ptr<SimpleDBus::Connection> conn, std::string path)
|
15
|
+
: SimpleDBus::Interface(conn, "org.bluez", path, "org.bluez.GattService1") {}
|
16
|
+
|
17
|
+
std::string GattService1::UUID() {
|
18
|
+
// As the UUID property doesn't change, we can cache it
|
19
|
+
std::scoped_lock lock(_property_update_mutex);
|
20
|
+
return _uuid;
|
21
|
+
}
|
22
|
+
|
23
|
+
void GattService1::property_changed(std::string option_name) {
|
24
|
+
if (option_name == "UUID") {
|
25
|
+
std::scoped_lock lock(_property_update_mutex);
|
26
|
+
_uuid = _properties["UUID"].get_string();
|
27
|
+
}
|
28
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#include "PythonRunner.h"
|
2
|
+
#include <Python.h>
|
3
|
+
#include <mutex>
|
4
|
+
|
5
|
+
#include <csignal>
|
6
|
+
|
7
|
+
PythonRunner::PythonRunner(const std::string& script_path) : _script_path(script_path) {
|
8
|
+
// In order to get Python to properly find relative imports, the current location
|
9
|
+
// of the executable needs to be added to the Python path.
|
10
|
+
_import_path = std::filesystem::canonical("/proc/self/exe").parent_path();
|
11
|
+
}
|
12
|
+
|
13
|
+
PythonRunner::~PythonRunner() { uninit(); }
|
14
|
+
|
15
|
+
void PythonRunner::init() {
|
16
|
+
_async_thread = new std::thread(&PythonRunner::_async_thread_function, this);
|
17
|
+
while (!_python_initialized) {
|
18
|
+
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
19
|
+
}
|
20
|
+
std::this_thread::sleep_for(std::chrono::seconds(1));
|
21
|
+
}
|
22
|
+
|
23
|
+
void PythonRunner::uninit() {
|
24
|
+
if (Py_IsInitialized()) {
|
25
|
+
// This is a hack to get the Python interpreter to exit cleanly.
|
26
|
+
raise(SIGINT);
|
27
|
+
}
|
28
|
+
if (_async_thread) {
|
29
|
+
while (!_async_thread->joinable()) {
|
30
|
+
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
31
|
+
}
|
32
|
+
_async_thread->join();
|
33
|
+
delete _async_thread;
|
34
|
+
_async_thread = nullptr;
|
35
|
+
_python_initialized = false;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
void PythonRunner::_async_thread_function() {
|
40
|
+
Py_InitializeEx(0);
|
41
|
+
|
42
|
+
// Append the required import path to the Python path.
|
43
|
+
PyRun_SimpleString("import sys");
|
44
|
+
PyRun_SimpleString(("sys.path.append('" + _import_path.string() + "')").c_str());
|
45
|
+
_python_initialized = true;
|
46
|
+
|
47
|
+
// Run the script.
|
48
|
+
std::string full_script_path = (_import_path / _script_path).string();
|
49
|
+
FILE* fp = fopen(full_script_path.c_str(), "r");
|
50
|
+
PyRun_SimpleFile(fp, full_script_path.c_str());
|
51
|
+
fclose(fp);
|
52
|
+
Py_Finalize();
|
53
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include <atomic>
|
4
|
+
#include <filesystem>
|
5
|
+
#include <string>
|
6
|
+
#include <thread>
|
7
|
+
|
8
|
+
class PythonRunner {
|
9
|
+
public:
|
10
|
+
PythonRunner(const std::string& script_path);
|
11
|
+
~PythonRunner();
|
12
|
+
PythonRunner(PythonRunner& other) = delete; // Remove the copy constructor
|
13
|
+
void operator=(const PythonRunner&) = delete; // Remove the copy assignment
|
14
|
+
|
15
|
+
void init();
|
16
|
+
void uninit();
|
17
|
+
|
18
|
+
private:
|
19
|
+
std::atomic_bool _python_initialized = {false};
|
20
|
+
std::filesystem::path _import_path;
|
21
|
+
std::string _script_path;
|
22
|
+
std::thread* _async_thread;
|
23
|
+
void _async_thread_function();
|
24
|
+
};
|