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.
Files changed (273) hide show
  1. package/VERSION +1 -0
  2. package/android/CMakeLists.txt +62 -20
  3. package/cmake/epilogue.cmake +81 -0
  4. package/cmake/find/FindDBus1.cmake +20 -0
  5. package/cmake/find/Findfmt.cmake +41 -0
  6. package/cmake/find/Findgoogletest.cmake +18 -0
  7. package/cmake/parse_version.cmake +45 -0
  8. package/cmake/prelude.cmake +8 -0
  9. package/dependencies/README +4 -0
  10. package/dependencies/external/kvn/kvn_bytearray.h +297 -0
  11. package/dependencies/external/kvn/kvn_safe_callback.hpp +66 -0
  12. package/dependencies/external/kvn/logfwd.hpp +35 -0
  13. package/dependencies/internal/include/fmt/LICENSE +27 -0
  14. package/dependencies/internal/include/fmt/args.h +220 -0
  15. package/dependencies/internal/include/fmt/base.h +2962 -0
  16. package/dependencies/internal/include/fmt/chrono.h +2338 -0
  17. package/dependencies/internal/include/fmt/color.h +610 -0
  18. package/dependencies/internal/include/fmt/compile.h +539 -0
  19. package/dependencies/internal/include/fmt/core.h +5 -0
  20. package/dependencies/internal/include/fmt/format-inl.h +1949 -0
  21. package/dependencies/internal/include/fmt/format.h +4244 -0
  22. package/dependencies/internal/include/fmt/os.h +427 -0
  23. package/dependencies/internal/include/fmt/ostream.h +166 -0
  24. package/dependencies/internal/include/fmt/printf.h +633 -0
  25. package/dependencies/internal/include/fmt/ranges.h +850 -0
  26. package/dependencies/internal/include/fmt/std.h +726 -0
  27. package/dependencies/internal/include/fmt/xchar.h +373 -0
  28. package/dependencies/internal/include/nanopb/pb.h +948 -0
  29. package/dependencies/internal/include/nanopb/pb_common.h +49 -0
  30. package/dependencies/internal/include/nanopb/pb_decode.h +204 -0
  31. package/dependencies/internal/include/nanopb/pb_encode.h +195 -0
  32. package/dependencies/internal/include/simplejni/Common.hpp +598 -0
  33. package/dependencies/internal/include/simplejni/References.hpp +151 -0
  34. package/dependencies/internal/include/simplejni/Registry.hpp +249 -0
  35. package/dependencies/internal/include/simplejni/VM.hpp +93 -0
  36. package/dependencies/internal/src/nanopb/pb_common.c +388 -0
  37. package/dependencies/internal/src/nanopb/pb_decode.c +1763 -0
  38. package/dependencies/internal/src/nanopb/pb_encode.c +1009 -0
  39. package/dependencies/internal/src/simplejni/Common.cpp +4 -0
  40. package/package.json +5 -1
  41. package/simpleble/CMakeLists.txt +519 -0
  42. package/simpleble/cmake/simpleble.pc.in +11 -0
  43. package/simpleble/include/simpleble/Adapter.h +102 -0
  44. package/simpleble/include/simpleble/AdapterSafe.h +58 -0
  45. package/simpleble/include/simpleble/Advanced.h +50 -0
  46. package/simpleble/include/simpleble/Characteristic.h +39 -0
  47. package/simpleble/include/simpleble/Config.h +64 -0
  48. package/simpleble/include/simpleble/Descriptor.h +30 -0
  49. package/simpleble/include/simpleble/Exceptions.h +72 -0
  50. package/simpleble/include/simpleble/Logging.h +73 -0
  51. package/simpleble/include/simpleble/Peripheral.h +82 -0
  52. package/simpleble/include/simpleble/PeripheralSafe.h +64 -0
  53. package/simpleble/include/simpleble/Service.h +34 -0
  54. package/simpleble/include/simpleble/SimpleBLE.h +8 -0
  55. package/simpleble/include/simpleble/Types.h +49 -0
  56. package/simpleble/include/simpleble/Utils.h +13 -0
  57. package/simpleble/include/simpleble_c/DEPRECATED +2 -0
  58. package/simpleble/include/simpleble_c/adapter.h +188 -0
  59. package/simpleble/include/simpleble_c/logging.h +37 -0
  60. package/simpleble/include/simpleble_c/peripheral.h +304 -0
  61. package/simpleble/include/simpleble_c/simpleble.h +21 -0
  62. package/simpleble/include/simpleble_c/types.h +73 -0
  63. package/simpleble/include/simpleble_c/utils.h +27 -0
  64. package/simpleble/src/CommonUtils.h +63 -0
  65. package/simpleble/src/Config.cpp +25 -0
  66. package/simpleble/src/Exceptions.cpp +31 -0
  67. package/simpleble/src/Logging.cpp +136 -0
  68. package/simpleble/src/LoggingInternal.h +85 -0
  69. package/simpleble/src/Utils.cpp +24 -0
  70. package/simpleble/src/backends/android/AdapterAndroid.cpp +101 -0
  71. package/simpleble/src/backends/android/AdapterAndroid.h +67 -0
  72. package/simpleble/src/backends/android/BackendAndroid.cpp +41 -0
  73. package/simpleble/src/backends/android/BackendAndroid.h +26 -0
  74. package/simpleble/src/backends/android/PeripheralAndroid.cpp +365 -0
  75. package/simpleble/src/backends/android/PeripheralAndroid.h +90 -0
  76. package/simpleble/src/backends/android/bridge/BluetoothGattCallback.cpp +432 -0
  77. package/simpleble/src/backends/android/bridge/BluetoothGattCallback.h +102 -0
  78. package/simpleble/src/backends/android/bridge/ScanCallback.cpp +142 -0
  79. package/simpleble/src/backends/android/bridge/ScanCallback.h +55 -0
  80. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.cpp +107 -0
  81. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.h +55 -0
  82. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.cpp +68 -0
  83. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.h +54 -0
  84. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.cpp +115 -0
  85. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.h +75 -0
  86. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.cpp +142 -0
  87. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.h +66 -0
  88. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.cpp +67 -0
  89. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.h +46 -0
  90. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.cpp +106 -0
  91. package/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.h +47 -0
  92. package/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.cpp +47 -0
  93. package/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.h +37 -0
  94. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.cpp +69 -0
  95. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.h +41 -0
  96. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.cpp +63 -0
  97. package/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.h +42 -0
  98. package/simpleble/src/backends/android/types/android/os/ParcelUUID.cpp +32 -0
  99. package/simpleble/src/backends/android/types/android/os/ParcelUUID.h +30 -0
  100. package/simpleble/src/backends/android/types/android/util/SparseArray.cpp +54 -0
  101. package/simpleble/src/backends/android/types/android/util/SparseArray.h +37 -0
  102. package/simpleble/src/backends/android/types/java/util/Iterator.cpp +36 -0
  103. package/simpleble/src/backends/android/types/java/util/Iterator.h +28 -0
  104. package/simpleble/src/backends/android/types/java/util/List.cpp +29 -0
  105. package/simpleble/src/backends/android/types/java/util/List.h +27 -0
  106. package/simpleble/src/backends/android/types/java/util/Set.cpp +33 -0
  107. package/simpleble/src/backends/android/types/java/util/Set.h +28 -0
  108. package/simpleble/src/backends/android/types/java/util/UUID.cpp +26 -0
  109. package/simpleble/src/backends/android/types/java/util/UUID.h +29 -0
  110. package/simpleble/src/backends/common/AdapterBase.cpp +53 -0
  111. package/simpleble/src/backends/common/AdapterBase.h +81 -0
  112. package/simpleble/src/backends/common/AdapterBaseTypes.h +22 -0
  113. package/simpleble/src/backends/common/BackendBase.h +20 -0
  114. package/simpleble/src/backends/common/BackendUtils.h +33 -0
  115. package/simpleble/src/backends/common/CharacteristicBase.cpp +28 -0
  116. package/simpleble/src/backends/common/CharacteristicBase.h +38 -0
  117. package/simpleble/src/backends/common/DescriptorBase.cpp +7 -0
  118. package/simpleble/src/backends/common/DescriptorBase.h +19 -0
  119. package/simpleble/src/backends/common/PeripheralBase.h +82 -0
  120. package/simpleble/src/backends/common/ServiceBase.cpp +18 -0
  121. package/simpleble/src/backends/common/ServiceBase.h +28 -0
  122. package/simpleble/src/backends/dongl/AdapterBaseTypes.h +22 -0
  123. package/simpleble/src/backends/dongl/AdapterDongl.cpp +369 -0
  124. package/simpleble/src/backends/dongl/AdapterDongl.h +60 -0
  125. package/simpleble/src/backends/dongl/BackendDongl.cpp +35 -0
  126. package/simpleble/src/backends/dongl/PeripheralDongl.cpp +562 -0
  127. package/simpleble/src/backends/dongl/PeripheralDongl.h +136 -0
  128. package/simpleble/src/backends/dongl/protocol/basic.pb.c +33 -0
  129. package/simpleble/src/backends/dongl/protocol/basic.pb.h +172 -0
  130. package/simpleble/src/backends/dongl/protocol/d2h.pb.c +18 -0
  131. package/simpleble/src/backends/dongl/protocol/d2h.pb.h +118 -0
  132. package/simpleble/src/backends/dongl/protocol/h2d.pb.c +12 -0
  133. package/simpleble/src/backends/dongl/protocol/h2d.pb.h +69 -0
  134. package/simpleble/src/backends/dongl/protocol/simpleble.pb.c +123 -0
  135. package/simpleble/src/backends/dongl/protocol/simpleble.pb.h +908 -0
  136. package/simpleble/src/backends/dongl/protocol/softdevice.pb.c +18 -0
  137. package/simpleble/src/backends/dongl/protocol/softdevice.pb.h +815 -0
  138. package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.c +339 -0
  139. package/simpleble/src/backends/dongl/protocol/softdevice_gap.pb.h +2086 -0
  140. package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.c +114 -0
  141. package/simpleble/src/backends/dongl/protocol/softdevice_gattc.pb.h +772 -0
  142. package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.c +117 -0
  143. package/simpleble/src/backends/dongl/protocol/softdevice_gatts.pb.h +766 -0
  144. package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.c +207 -0
  145. package/simpleble/src/backends/dongl/protocol/softdevice_types.pb.h +1686 -0
  146. package/simpleble/src/backends/dongl/serial/Protocol.cpp +887 -0
  147. package/simpleble/src/backends/dongl/serial/Protocol.h +117 -0
  148. package/simpleble/src/backends/dongl/serial/ProtocolBase.cpp +95 -0
  149. package/simpleble/src/backends/dongl/serial/ProtocolBase.h +54 -0
  150. package/simpleble/src/backends/dongl/serial/Wire.cpp +133 -0
  151. package/simpleble/src/backends/dongl/serial/Wire.h +116 -0
  152. package/simpleble/src/backends/dongl/usb/UsbHelper.cpp +53 -0
  153. package/simpleble/src/backends/dongl/usb/UsbHelper.h +32 -0
  154. package/simpleble/src/backends/dongl/usb/UsbHelperApple.cpp +266 -0
  155. package/simpleble/src/backends/dongl/usb/UsbHelperApple.h +34 -0
  156. package/simpleble/src/backends/dongl/usb/UsbHelperImpl.h +29 -0
  157. package/simpleble/src/backends/dongl/usb/UsbHelperLinux.cpp +21 -0
  158. package/simpleble/src/backends/dongl/usb/UsbHelperLinux.h +22 -0
  159. package/simpleble/src/backends/dongl/usb/UsbHelperNull.cpp +21 -0
  160. package/simpleble/src/backends/dongl/usb/UsbHelperNull.h +22 -0
  161. package/simpleble/src/backends/dongl/usb/UsbHelperWindows.cpp +21 -0
  162. package/simpleble/src/backends/dongl/usb/UsbHelperWindows.h +22 -0
  163. package/simpleble/src/backends/linux/AdapterLinux.cpp +102 -0
  164. package/simpleble/src/backends/linux/AdapterLinux.h +55 -0
  165. package/simpleble/src/backends/linux/BackendBluez.cpp +90 -0
  166. package/simpleble/src/backends/linux/PeripheralLinux.cpp +394 -0
  167. package/simpleble/src/backends/linux/PeripheralLinux.h +90 -0
  168. package/simpleble/src/backends/linux_legacy/AdapterLinuxLegacy.cpp +102 -0
  169. package/simpleble/src/backends/linux_legacy/AdapterLinuxLegacy.h +55 -0
  170. package/simpleble/src/backends/linux_legacy/BackendBluezLegacy.cpp +87 -0
  171. package/simpleble/src/backends/linux_legacy/PeripheralLinuxLegacy.cpp +376 -0
  172. package/simpleble/src/backends/linux_legacy/PeripheralLinuxLegacy.h +90 -0
  173. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Adapter.h +46 -0
  174. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Agent.h +52 -0
  175. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Bluez.h +37 -0
  176. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezOrg.h +22 -0
  177. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezOrgBluez.h +26 -0
  178. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/BluezRoot.h +32 -0
  179. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Characteristic.h +47 -0
  180. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Descriptor.h +33 -0
  181. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Device.h +64 -0
  182. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Exceptions.h +43 -0
  183. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Service.h +27 -0
  184. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/Types.h +9 -0
  185. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Adapter1.h +49 -0
  186. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Agent1.h +100 -0
  187. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/AgentManager1.h +24 -0
  188. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Battery1.h +32 -0
  189. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/Device1.h +62 -0
  190. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattCharacteristic1.h +48 -0
  191. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattDescriptor1.h +41 -0
  192. package/simpleble/src/backends/linux_legacy/include/simplebluezlegacy/interfaces/GattService1.h +28 -0
  193. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/Interface.h +67 -0
  194. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/InterfaceRegistry.h +62 -0
  195. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/advanced/Proxy.h +117 -0
  196. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Connection.h +50 -0
  197. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Exceptions.h +56 -0
  198. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Holder.h +147 -0
  199. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Logging.h +57 -0
  200. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Message.h +89 -0
  201. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/base/Path.h +24 -0
  202. package/simpleble/src/backends/linux_legacy/include/simpledbuslegacy/interfaces/ObjectManager.h +26 -0
  203. package/simpleble/src/backends/linux_legacy/src/Adapter.cpp +78 -0
  204. package/simpleble/src/backends/linux_legacy/src/Agent.cpp +72 -0
  205. package/simpleble/src/backends/linux_legacy/src/Bluez.cpp +45 -0
  206. package/simpleble/src/backends/linux_legacy/src/BluezOrg.cpp +20 -0
  207. package/simpleble/src/backends/linux_legacy/src/BluezOrgBluez.cpp +23 -0
  208. package/simpleble/src/backends/linux_legacy/src/BluezRoot.cpp +44 -0
  209. package/simpleble/src/backends/linux_legacy/src/Characteristic.cpp +64 -0
  210. package/simpleble/src/backends/linux_legacy/src/Descriptor.cpp +27 -0
  211. package/simpleble/src/backends/linux_legacy/src/Device.cpp +104 -0
  212. package/simpleble/src/backends/linux_legacy/src/Exceptions.cpp +29 -0
  213. package/simpleble/src/backends/linux_legacy/src/Service.cpp +33 -0
  214. package/simpleble/src/backends/linux_legacy/src/advanced/Interface.cpp +155 -0
  215. package/simpleble/src/backends/linux_legacy/src/advanced/Proxy.cpp +374 -0
  216. package/simpleble/src/backends/linux_legacy/src/base/Connection.cpp +219 -0
  217. package/simpleble/src/backends/linux_legacy/src/base/Exceptions.cpp +39 -0
  218. package/simpleble/src/backends/linux_legacy/src/base/Holder.cpp +739 -0
  219. package/simpleble/src/backends/linux_legacy/src/base/Message.cpp +622 -0
  220. package/simpleble/src/backends/linux_legacy/src/base/Path.cpp +129 -0
  221. package/simpleble/src/backends/linux_legacy/src/interfaces/Adapter1.cpp +123 -0
  222. package/simpleble/src/backends/linux_legacy/src/interfaces/Agent1.cpp +143 -0
  223. package/simpleble/src/backends/linux_legacy/src/interfaces/AgentManager1.cpp +34 -0
  224. package/simpleble/src/backends/linux_legacy/src/interfaces/Battery1.cpp +30 -0
  225. package/simpleble/src/backends/linux_legacy/src/interfaces/Device1.cpp +170 -0
  226. package/simpleble/src/backends/linux_legacy/src/interfaces/GattCharacteristic1.cpp +118 -0
  227. package/simpleble/src/backends/linux_legacy/src/interfaces/GattDescriptor1.cpp +78 -0
  228. package/simpleble/src/backends/linux_legacy/src/interfaces/GattService1.cpp +28 -0
  229. package/simpleble/src/backends/linux_legacy/src/interfaces/ObjectManager.cpp +58 -0
  230. package/simpleble/src/backends/macos/AdapterBaseMacOS.h +29 -0
  231. package/simpleble/src/backends/macos/AdapterBaseMacOS.mm +235 -0
  232. package/simpleble/src/backends/macos/AdapterMac.h +78 -0
  233. package/simpleble/src/backends/macos/AdapterMac.mm +156 -0
  234. package/simpleble/src/backends/macos/BackendCoreBluetooth.mm +45 -0
  235. package/simpleble/src/backends/macos/PeripheralBaseMacOS.h +49 -0
  236. package/simpleble/src/backends/macos/PeripheralBaseMacOS.mm +714 -0
  237. package/simpleble/src/backends/macos/PeripheralMac.h +81 -0
  238. package/simpleble/src/backends/macos/PeripheralMac.mm +229 -0
  239. package/simpleble/src/backends/macos/Utils.h +9 -0
  240. package/simpleble/src/backends/macos/Utils.mm +23 -0
  241. package/simpleble/src/backends/plain/AdapterPlain.cpp +65 -0
  242. package/simpleble/src/backends/plain/AdapterPlain.h +49 -0
  243. package/simpleble/src/backends/plain/BackendPlain.cpp +30 -0
  244. package/simpleble/src/backends/plain/PeripheralPlain.cpp +159 -0
  245. package/simpleble/src/backends/plain/PeripheralPlain.h +72 -0
  246. package/simpleble/src/backends/windows/AdapterWindows.cpp +338 -0
  247. package/simpleble/src/backends/windows/AdapterWindows.h +89 -0
  248. package/simpleble/src/backends/windows/BackendWinRT.cpp +67 -0
  249. package/simpleble/src/backends/windows/BackendWinRT.h +18 -0
  250. package/simpleble/src/backends/windows/MtaManager.cpp +49 -0
  251. package/simpleble/src/backends/windows/MtaManager.h +90 -0
  252. package/simpleble/src/backends/windows/PeripheralWindows.cpp +487 -0
  253. package/simpleble/src/backends/windows/PeripheralWindows.h +129 -0
  254. package/simpleble/src/backends/windows/Utils.cpp +146 -0
  255. package/simpleble/src/backends/windows/Utils.h +47 -0
  256. package/simpleble/src/builders/BuildVec.h +32 -0
  257. package/simpleble/src/builders/BuilderBase.h +87 -0
  258. package/simpleble/src/external/TaskRunner.hpp +99 -0
  259. package/simpleble/src/external/ThreadRunner.h +52 -0
  260. package/simpleble/src/external/kvn_safe_callback.hpp +66 -0
  261. package/simpleble/src/external/kvn_safe_map.hpp +94 -0
  262. package/simpleble/src/external/kvn_threadrunner.hpp +70 -0
  263. package/simpleble/src/external/logfwd.hpp +35 -0
  264. package/simpleble/src/frontends/base/Adapter.cpp +111 -0
  265. package/simpleble/src/frontends/base/Advanced.cpp +34 -0
  266. package/simpleble/src/frontends/base/Backend.cpp +95 -0
  267. package/simpleble/src/frontends/base/Backend.h +76 -0
  268. package/simpleble/src/frontends/base/Characteristic.cpp +56 -0
  269. package/simpleble/src/frontends/base/Descriptor.cpp +21 -0
  270. package/simpleble/src/frontends/base/Peripheral.cpp +113 -0
  271. package/simpleble/src/frontends/base/Service.cpp +26 -0
  272. package/simpleble/src/frontends/safe/AdapterSafe.cpp +158 -0
  273. package/simpleble/src/frontends/safe/PeripheralSafe.cpp +219 -0
@@ -0,0 +1,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
+