simplejsble 0.0.4 → 0.0.6
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/cmake/simpleble.pc.in +11 -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,388 @@
|
|
|
1
|
+
/* pb_common.c: Common support functions for pb_encode.c and pb_decode.c.
|
|
2
|
+
*
|
|
3
|
+
* 2014 Petteri Aimonen <jpa@kapsi.fi>
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
#include "nanopb/pb_common.h" // NOTE: INCLUDE PATH HAS BEEN MANUALLY CHANGED
|
|
7
|
+
|
|
8
|
+
static bool load_descriptor_values(pb_field_iter_t *iter)
|
|
9
|
+
{
|
|
10
|
+
uint32_t word0;
|
|
11
|
+
uint32_t data_offset;
|
|
12
|
+
int_least8_t size_offset;
|
|
13
|
+
|
|
14
|
+
if (iter->index >= iter->descriptor->field_count)
|
|
15
|
+
return false;
|
|
16
|
+
|
|
17
|
+
word0 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index]);
|
|
18
|
+
iter->type = (pb_type_t)((word0 >> 8) & 0xFF);
|
|
19
|
+
|
|
20
|
+
switch(word0 & 3)
|
|
21
|
+
{
|
|
22
|
+
case 0: {
|
|
23
|
+
/* 1-word format */
|
|
24
|
+
iter->array_size = 1;
|
|
25
|
+
iter->tag = (pb_size_t)((word0 >> 2) & 0x3F);
|
|
26
|
+
size_offset = (int_least8_t)((word0 >> 24) & 0x0F);
|
|
27
|
+
data_offset = (word0 >> 16) & 0xFF;
|
|
28
|
+
iter->data_size = (pb_size_t)((word0 >> 28) & 0x0F);
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
case 1: {
|
|
33
|
+
/* 2-word format */
|
|
34
|
+
uint32_t word1 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 1]);
|
|
35
|
+
|
|
36
|
+
iter->array_size = (pb_size_t)((word0 >> 16) & 0x0FFF);
|
|
37
|
+
iter->tag = (pb_size_t)(((word0 >> 2) & 0x3F) | ((word1 >> 28) << 6));
|
|
38
|
+
size_offset = (int_least8_t)((word0 >> 28) & 0x0F);
|
|
39
|
+
data_offset = word1 & 0xFFFF;
|
|
40
|
+
iter->data_size = (pb_size_t)((word1 >> 16) & 0x0FFF);
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
case 2: {
|
|
45
|
+
/* 4-word format */
|
|
46
|
+
uint32_t word1 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 1]);
|
|
47
|
+
uint32_t word2 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 2]);
|
|
48
|
+
uint32_t word3 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 3]);
|
|
49
|
+
|
|
50
|
+
iter->array_size = (pb_size_t)(word0 >> 16);
|
|
51
|
+
iter->tag = (pb_size_t)(((word0 >> 2) & 0x3F) | ((word1 >> 8) << 6));
|
|
52
|
+
size_offset = (int_least8_t)(word1 & 0xFF);
|
|
53
|
+
data_offset = word2;
|
|
54
|
+
iter->data_size = (pb_size_t)word3;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
default: {
|
|
59
|
+
/* 8-word format */
|
|
60
|
+
uint32_t word1 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 1]);
|
|
61
|
+
uint32_t word2 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 2]);
|
|
62
|
+
uint32_t word3 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 3]);
|
|
63
|
+
uint32_t word4 = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index + 4]);
|
|
64
|
+
|
|
65
|
+
iter->array_size = (pb_size_t)word4;
|
|
66
|
+
iter->tag = (pb_size_t)(((word0 >> 2) & 0x3F) | ((word1 >> 8) << 6));
|
|
67
|
+
size_offset = (int_least8_t)(word1 & 0xFF);
|
|
68
|
+
data_offset = word2;
|
|
69
|
+
iter->data_size = (pb_size_t)word3;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (!iter->message)
|
|
75
|
+
{
|
|
76
|
+
/* Avoid doing arithmetic on null pointers, it is undefined */
|
|
77
|
+
iter->pField = NULL;
|
|
78
|
+
iter->pSize = NULL;
|
|
79
|
+
}
|
|
80
|
+
else
|
|
81
|
+
{
|
|
82
|
+
iter->pField = (char*)iter->message + data_offset;
|
|
83
|
+
|
|
84
|
+
if (size_offset)
|
|
85
|
+
{
|
|
86
|
+
iter->pSize = (char*)iter->pField - size_offset;
|
|
87
|
+
}
|
|
88
|
+
else if (PB_HTYPE(iter->type) == PB_HTYPE_REPEATED &&
|
|
89
|
+
(PB_ATYPE(iter->type) == PB_ATYPE_STATIC ||
|
|
90
|
+
PB_ATYPE(iter->type) == PB_ATYPE_POINTER))
|
|
91
|
+
{
|
|
92
|
+
/* Fixed count array */
|
|
93
|
+
iter->pSize = &iter->array_size;
|
|
94
|
+
}
|
|
95
|
+
else
|
|
96
|
+
{
|
|
97
|
+
iter->pSize = NULL;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (PB_ATYPE(iter->type) == PB_ATYPE_POINTER && iter->pField != NULL)
|
|
101
|
+
{
|
|
102
|
+
iter->pData = *(void**)iter->pField;
|
|
103
|
+
}
|
|
104
|
+
else
|
|
105
|
+
{
|
|
106
|
+
iter->pData = iter->pField;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (PB_LTYPE_IS_SUBMSG(iter->type))
|
|
111
|
+
{
|
|
112
|
+
iter->submsg_desc = iter->descriptor->submsg_info[iter->submessage_index];
|
|
113
|
+
}
|
|
114
|
+
else
|
|
115
|
+
{
|
|
116
|
+
iter->submsg_desc = NULL;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
static void advance_iterator(pb_field_iter_t *iter)
|
|
123
|
+
{
|
|
124
|
+
iter->index++;
|
|
125
|
+
|
|
126
|
+
if (iter->index >= iter->descriptor->field_count)
|
|
127
|
+
{
|
|
128
|
+
/* Restart */
|
|
129
|
+
iter->index = 0;
|
|
130
|
+
iter->field_info_index = 0;
|
|
131
|
+
iter->submessage_index = 0;
|
|
132
|
+
iter->required_field_index = 0;
|
|
133
|
+
}
|
|
134
|
+
else
|
|
135
|
+
{
|
|
136
|
+
/* Increment indexes based on previous field type.
|
|
137
|
+
* All field info formats have the following fields:
|
|
138
|
+
* - lowest 2 bits tell the amount of words in the descriptor (2^n words)
|
|
139
|
+
* - bits 2..7 give the lowest bits of tag number.
|
|
140
|
+
* - bits 8..15 give the field type.
|
|
141
|
+
*/
|
|
142
|
+
uint32_t prev_descriptor = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index]);
|
|
143
|
+
pb_type_t prev_type = (prev_descriptor >> 8) & 0xFF;
|
|
144
|
+
pb_size_t descriptor_len = (pb_size_t)(1 << (prev_descriptor & 3));
|
|
145
|
+
|
|
146
|
+
/* Add to fields.
|
|
147
|
+
* The cast to pb_size_t is needed to avoid -Wconversion warning.
|
|
148
|
+
* Because the data is is constants from generator, there is no danger of overflow.
|
|
149
|
+
*/
|
|
150
|
+
iter->field_info_index = (pb_size_t)(iter->field_info_index + descriptor_len);
|
|
151
|
+
iter->required_field_index = (pb_size_t)(iter->required_field_index + (PB_HTYPE(prev_type) == PB_HTYPE_REQUIRED));
|
|
152
|
+
iter->submessage_index = (pb_size_t)(iter->submessage_index + PB_LTYPE_IS_SUBMSG(prev_type));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
bool pb_field_iter_begin(pb_field_iter_t *iter, const pb_msgdesc_t *desc, void *message)
|
|
157
|
+
{
|
|
158
|
+
memset(iter, 0, sizeof(*iter));
|
|
159
|
+
|
|
160
|
+
iter->descriptor = desc;
|
|
161
|
+
iter->message = message;
|
|
162
|
+
|
|
163
|
+
return load_descriptor_values(iter);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
bool pb_field_iter_begin_extension(pb_field_iter_t *iter, pb_extension_t *extension)
|
|
167
|
+
{
|
|
168
|
+
const pb_msgdesc_t *msg = (const pb_msgdesc_t*)extension->type->arg;
|
|
169
|
+
bool status;
|
|
170
|
+
|
|
171
|
+
uint32_t word0 = PB_PROGMEM_READU32(msg->field_info[0]);
|
|
172
|
+
if (PB_ATYPE(word0 >> 8) == PB_ATYPE_POINTER)
|
|
173
|
+
{
|
|
174
|
+
/* For pointer extensions, the pointer is stored directly
|
|
175
|
+
* in the extension structure. This avoids having an extra
|
|
176
|
+
* indirection. */
|
|
177
|
+
status = pb_field_iter_begin(iter, msg, &extension->dest);
|
|
178
|
+
}
|
|
179
|
+
else
|
|
180
|
+
{
|
|
181
|
+
status = pb_field_iter_begin(iter, msg, extension->dest);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
iter->pSize = &extension->found;
|
|
185
|
+
return status;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
bool pb_field_iter_next(pb_field_iter_t *iter)
|
|
189
|
+
{
|
|
190
|
+
advance_iterator(iter);
|
|
191
|
+
(void)load_descriptor_values(iter);
|
|
192
|
+
return iter->index != 0;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
bool pb_field_iter_find(pb_field_iter_t *iter, uint32_t tag)
|
|
196
|
+
{
|
|
197
|
+
if (iter->tag == tag)
|
|
198
|
+
{
|
|
199
|
+
return true; /* Nothing to do, correct field already. */
|
|
200
|
+
}
|
|
201
|
+
else if (tag > iter->descriptor->largest_tag)
|
|
202
|
+
{
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
else
|
|
206
|
+
{
|
|
207
|
+
pb_size_t start = iter->index;
|
|
208
|
+
uint32_t fieldinfo;
|
|
209
|
+
|
|
210
|
+
if (tag < iter->tag)
|
|
211
|
+
{
|
|
212
|
+
/* Fields are in tag number order, so we know that tag is between
|
|
213
|
+
* 0 and our start position. Setting index to end forces
|
|
214
|
+
* advance_iterator() call below to restart from beginning. */
|
|
215
|
+
iter->index = iter->descriptor->field_count;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
do
|
|
219
|
+
{
|
|
220
|
+
/* Advance iterator but don't load values yet */
|
|
221
|
+
advance_iterator(iter);
|
|
222
|
+
|
|
223
|
+
/* Do fast check for tag number match */
|
|
224
|
+
fieldinfo = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index]);
|
|
225
|
+
|
|
226
|
+
if (((fieldinfo >> 2) & 0x3F) == (tag & 0x3F))
|
|
227
|
+
{
|
|
228
|
+
/* Good candidate, check further */
|
|
229
|
+
(void)load_descriptor_values(iter);
|
|
230
|
+
|
|
231
|
+
if (iter->tag == tag &&
|
|
232
|
+
PB_LTYPE(iter->type) != PB_LTYPE_EXTENSION)
|
|
233
|
+
{
|
|
234
|
+
/* Found it */
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
} while (iter->index != start);
|
|
239
|
+
|
|
240
|
+
/* Searched all the way back to start, and found nothing. */
|
|
241
|
+
(void)load_descriptor_values(iter);
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
bool pb_field_iter_find_extension(pb_field_iter_t *iter)
|
|
247
|
+
{
|
|
248
|
+
if (PB_LTYPE(iter->type) == PB_LTYPE_EXTENSION)
|
|
249
|
+
{
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
else
|
|
253
|
+
{
|
|
254
|
+
pb_size_t start = iter->index;
|
|
255
|
+
uint32_t fieldinfo;
|
|
256
|
+
|
|
257
|
+
do
|
|
258
|
+
{
|
|
259
|
+
/* Advance iterator but don't load values yet */
|
|
260
|
+
advance_iterator(iter);
|
|
261
|
+
|
|
262
|
+
/* Do fast check for field type */
|
|
263
|
+
fieldinfo = PB_PROGMEM_READU32(iter->descriptor->field_info[iter->field_info_index]);
|
|
264
|
+
|
|
265
|
+
if (PB_LTYPE((fieldinfo >> 8) & 0xFF) == PB_LTYPE_EXTENSION)
|
|
266
|
+
{
|
|
267
|
+
return load_descriptor_values(iter);
|
|
268
|
+
}
|
|
269
|
+
} while (iter->index != start);
|
|
270
|
+
|
|
271
|
+
/* Searched all the way back to start, and found nothing. */
|
|
272
|
+
(void)load_descriptor_values(iter);
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
static void *pb_const_cast(const void *p)
|
|
278
|
+
{
|
|
279
|
+
/* Note: this casts away const, in order to use the common field iterator
|
|
280
|
+
* logic for both encoding and decoding. The cast is done using union
|
|
281
|
+
* to avoid spurious compiler warnings. */
|
|
282
|
+
union {
|
|
283
|
+
void *p1;
|
|
284
|
+
const void *p2;
|
|
285
|
+
} t;
|
|
286
|
+
t.p2 = p;
|
|
287
|
+
return t.p1;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
bool pb_field_iter_begin_const(pb_field_iter_t *iter, const pb_msgdesc_t *desc, const void *message)
|
|
291
|
+
{
|
|
292
|
+
return pb_field_iter_begin(iter, desc, pb_const_cast(message));
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
bool pb_field_iter_begin_extension_const(pb_field_iter_t *iter, const pb_extension_t *extension)
|
|
296
|
+
{
|
|
297
|
+
return pb_field_iter_begin_extension(iter, (pb_extension_t*)pb_const_cast(extension));
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
bool pb_default_field_callback(pb_istream_t *istream, pb_ostream_t *ostream, const pb_field_t *field)
|
|
301
|
+
{
|
|
302
|
+
if (field->data_size == sizeof(pb_callback_t))
|
|
303
|
+
{
|
|
304
|
+
pb_callback_t *pCallback = (pb_callback_t*)field->pData;
|
|
305
|
+
|
|
306
|
+
if (pCallback != NULL)
|
|
307
|
+
{
|
|
308
|
+
if (istream != NULL && pCallback->funcs.decode != NULL)
|
|
309
|
+
{
|
|
310
|
+
return pCallback->funcs.decode(istream, field, &pCallback->arg);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
if (ostream != NULL && pCallback->funcs.encode != NULL)
|
|
314
|
+
{
|
|
315
|
+
return pCallback->funcs.encode(ostream, field, &pCallback->arg);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return true; /* Success, but didn't do anything */
|
|
321
|
+
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
#ifdef PB_VALIDATE_UTF8
|
|
325
|
+
|
|
326
|
+
/* This function checks whether a string is valid UTF-8 text.
|
|
327
|
+
*
|
|
328
|
+
* Algorithm is adapted from https://www.cl.cam.ac.uk/~mgk25/ucs/utf8_check.c
|
|
329
|
+
* Original copyright: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> 2005-03-30
|
|
330
|
+
* Licensed under "Short code license", which allows use under MIT license or
|
|
331
|
+
* any compatible with it.
|
|
332
|
+
*/
|
|
333
|
+
|
|
334
|
+
bool pb_validate_utf8(const char *str)
|
|
335
|
+
{
|
|
336
|
+
const pb_byte_t *s = (const pb_byte_t*)str;
|
|
337
|
+
while (*s)
|
|
338
|
+
{
|
|
339
|
+
if (*s < 0x80)
|
|
340
|
+
{
|
|
341
|
+
/* 0xxxxxxx */
|
|
342
|
+
s++;
|
|
343
|
+
}
|
|
344
|
+
else if ((s[0] & 0xe0) == 0xc0)
|
|
345
|
+
{
|
|
346
|
+
/* 110XXXXx 10xxxxxx */
|
|
347
|
+
if ((s[1] & 0xc0) != 0x80 ||
|
|
348
|
+
(s[0] & 0xfe) == 0xc0) /* overlong? */
|
|
349
|
+
return false;
|
|
350
|
+
else
|
|
351
|
+
s += 2;
|
|
352
|
+
}
|
|
353
|
+
else if ((s[0] & 0xf0) == 0xe0)
|
|
354
|
+
{
|
|
355
|
+
/* 1110XXXX 10Xxxxxx 10xxxxxx */
|
|
356
|
+
if ((s[1] & 0xc0) != 0x80 ||
|
|
357
|
+
(s[2] & 0xc0) != 0x80 ||
|
|
358
|
+
(s[0] == 0xe0 && (s[1] & 0xe0) == 0x80) || /* overlong? */
|
|
359
|
+
(s[0] == 0xed && (s[1] & 0xe0) == 0xa0) || /* surrogate? */
|
|
360
|
+
(s[0] == 0xef && s[1] == 0xbf &&
|
|
361
|
+
(s[2] & 0xfe) == 0xbe)) /* U+FFFE or U+FFFF? */
|
|
362
|
+
return false;
|
|
363
|
+
else
|
|
364
|
+
s += 3;
|
|
365
|
+
}
|
|
366
|
+
else if ((s[0] & 0xf8) == 0xf0)
|
|
367
|
+
{
|
|
368
|
+
/* 11110XXX 10XXxxxx 10xxxxxx 10xxxxxx */
|
|
369
|
+
if ((s[1] & 0xc0) != 0x80 ||
|
|
370
|
+
(s[2] & 0xc0) != 0x80 ||
|
|
371
|
+
(s[3] & 0xc0) != 0x80 ||
|
|
372
|
+
(s[0] == 0xf0 && (s[1] & 0xf0) == 0x80) || /* overlong? */
|
|
373
|
+
(s[0] == 0xf4 && s[1] > 0x8f) || s[0] > 0xf4) /* > U+10FFFF? */
|
|
374
|
+
return false;
|
|
375
|
+
else
|
|
376
|
+
s += 4;
|
|
377
|
+
}
|
|
378
|
+
else
|
|
379
|
+
{
|
|
380
|
+
return false;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
return true;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
#endif
|
|
388
|
+
|