space-data-module-sdk 0.8.15 → 0.8.17

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 (130) hide show
  1. package/bin/space-data-module.js +24 -6
  2. package/docs/_shell/consumer-assets.html +5 -0
  3. package/docs/browser-wasmedge-isomorphic.html +261 -0
  4. package/docs/byo-wasm-quickstart.html +226 -0
  5. package/docs/byo-wasm-quickstart.md +204 -0
  6. package/docs/conformance.html +162 -0
  7. package/docs/conformance.md +20 -4
  8. package/docs/emception-shared-memory-verdict.md +209 -0
  9. package/docs/events-abi.html +313 -0
  10. package/docs/events-abi.md +530 -0
  11. package/docs/families/analytics.html +178 -0
  12. package/docs/families/analytics.md +104 -0
  13. package/docs/families/attitude.html +157 -0
  14. package/docs/families/attitude.md +36 -0
  15. package/docs/families/behavior.html +157 -0
  16. package/docs/families/behavior.md +36 -0
  17. package/docs/families/breakup.html +157 -0
  18. package/docs/families/breakup.md +36 -0
  19. package/docs/families/conjunction.html +186 -0
  20. package/docs/families/conjunction.md +121 -0
  21. package/docs/families/data-source.html +323 -0
  22. package/docs/families/effects.html +157 -0
  23. package/docs/families/effects.md +36 -0
  24. package/docs/families/environment.html +170 -0
  25. package/docs/families/environment.md +73 -0
  26. package/docs/families/estimation.html +192 -0
  27. package/docs/families/estimation.md +158 -0
  28. package/docs/families/gnc.html +157 -0
  29. package/docs/families/gnc.md +36 -0
  30. package/docs/families/maneuver.html +209 -0
  31. package/docs/families/maneuver.md +206 -0
  32. package/docs/families/obstruction.html +191 -0
  33. package/docs/families/obstruction.md +96 -0
  34. package/docs/families/propagator.html +347 -0
  35. package/docs/families/propulsion.html +157 -0
  36. package/docs/families/propulsion.md +36 -0
  37. package/docs/families/reentry.html +157 -0
  38. package/docs/families/reentry.md +36 -0
  39. package/docs/families/rf.html +193 -0
  40. package/docs/families/rf.md +136 -0
  41. package/docs/families/scheduler.html +157 -0
  42. package/docs/families/scheduler.md +36 -0
  43. package/docs/families/sensor.html +157 -0
  44. package/docs/families/sensor.md +36 -0
  45. package/docs/families/signature.html +157 -0
  46. package/docs/families/signature.md +36 -0
  47. package/docs/flatsql-host-contract.html +176 -0
  48. package/docs/flatsql-streaming-standard.html +375 -0
  49. package/docs/gpu-module-abi.html +233 -0
  50. package/docs/harness-family-matrix.md +135 -0
  51. package/docs/index.html +216 -85
  52. package/docs/isomorphic-pthreads.html +228 -0
  53. package/docs/isomorphic-pthreads.md +84 -0
  54. package/docs/isomorphic-sdn-runtime-plan.html +274 -0
  55. package/docs/language-runtime-matrix.html +182 -0
  56. package/docs/llms.txt +86 -0
  57. package/docs/module-bundle-runtime-plan.html +146 -0
  58. package/docs/module-publication-standard.html +503 -0
  59. package/docs/node-red-default-node-parity.html +201 -0
  60. package/docs/propagator-abi.md +97 -12
  61. package/docs/protect-and-sign.html +181 -0
  62. package/docs/protect-and-sign.md +120 -0
  63. package/docs/protocol-installation.html +296 -0
  64. package/docs/provider-access-abi.md +25 -0
  65. package/docs/publication-submission.html +158 -0
  66. package/docs/publication-submission.md +78 -0
  67. package/docs/secrets-capability.html +206 -0
  68. package/docs/styles.css +860 -167
  69. package/docs/testing-harness.html +408 -0
  70. package/docs/tri-runtime-parity-gate.html +182 -0
  71. package/docs/tri-runtime-parity.html +203 -0
  72. package/include/orbpro/orbpro_estimation_abi.h +883 -0
  73. package/include/orbpro/orbpro_event_runner.h +951 -0
  74. package/include/orbpro/orbpro_events_abi.h +565 -0
  75. package/include/orbpro/orbpro_propagator_abi.h +75 -0
  76. package/package.json +13 -4
  77. package/schemas/orbpro/Estimation.fbs +244 -0
  78. package/schemas/orbpro/Events.fbs +501 -0
  79. package/schemas/orbpro/Propagator.fbs +136 -9
  80. package/schemas/orbpro/reference-frame-crosswalk.json +108 -0
  81. package/schemas/orbpro/reference-frame.lock.json +98 -0
  82. package/src/browser.js +13 -0
  83. package/src/conformance/estimationReference.js +81 -0
  84. package/src/conformance/estimationSuite.js +134 -0
  85. package/src/conformance/index.js +39 -2
  86. package/src/generated/orbpro/events-abi.js +206 -0
  87. package/src/generated/orbpro/events-abi.ts +319 -0
  88. package/src/generated/orbpro/propagator/reference-frame.js +17 -0
  89. package/src/generated/orbpro/propagator/reference-frame.ts +91 -1
  90. package/src/generated/orbpro/propagator-abi.js +38 -0
  91. package/src/generated/orbpro/propagator-abi.ts +67 -0
  92. package/src/generated/spacedatastandards/plg/CCT.d.ts +94 -0
  93. package/src/generated/spacedatastandards/plg/CCT.d.ts.map +1 -0
  94. package/src/generated/spacedatastandards/plg/CCT.js +208 -0
  95. package/src/generated/spacedatastandards/plg/CCT.ts +281 -0
  96. package/src/generated/spacedatastandards/plg/CCTCategory.d.ts +98 -0
  97. package/src/generated/spacedatastandards/plg/CCTCategory.d.ts.map +1 -0
  98. package/src/generated/spacedatastandards/plg/CCTCategory.js +177 -0
  99. package/src/generated/spacedatastandards/plg/CCTCategory.ts +269 -0
  100. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts +54 -0
  101. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.d.ts.map +1 -0
  102. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.js +106 -0
  103. package/src/generated/spacedatastandards/plg/CCTCategoryRollup.ts +144 -0
  104. package/src/generated/spacedatastandards/plg/PLG.d.ts +46 -2
  105. package/src/generated/spacedatastandards/plg/PLG.d.ts.map +1 -1
  106. package/src/generated/spacedatastandards/plg/PLG.js +78 -5
  107. package/src/generated/spacedatastandards/plg/PLG.ts +90 -5
  108. package/src/generated/spacedatastandards/plg/capabilityClass.d.ts +181 -0
  109. package/src/generated/spacedatastandards/plg/capabilityClass.d.ts.map +1 -0
  110. package/src/generated/spacedatastandards/plg/capabilityClass.js +183 -0
  111. package/src/generated/spacedatastandards/plg/capabilityClass.ts +208 -0
  112. package/src/generated/spacedatastandards/plg/main.d.ts +4 -0
  113. package/src/generated/spacedatastandards/plg/main.d.ts.map +1 -1
  114. package/src/generated/spacedatastandards/plg/main.js +4 -0
  115. package/src/generated/spacedatastandards/plg/main.ts +4 -0
  116. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts +40 -2
  117. package/src/generated/spacedatastandards/plg/pluginCategory.d.ts.map +1 -1
  118. package/src/generated/spacedatastandards/plg/pluginCategory.js +40 -2
  119. package/src/generated/spacedatastandards/plg/pluginCategory.ts +40 -2
  120. package/src/host/browserModuleHarness.js +8 -0
  121. package/src/host/wasiThreadHost.js +189 -14
  122. package/src/index.d.ts +18 -1
  123. package/src/standards/sharedCatalog.js +7 -0
  124. package/src/transport/index.js +16 -0
  125. package/src/transport/records.js +1015 -3
  126. package/templates/estimation-module/README.md +24 -0
  127. package/templates/estimation-module/build.mjs +32 -0
  128. package/templates/estimation-module/package.json +12 -0
  129. package/templates/estimation-module/plugin-manifest.json +34 -0
  130. package/templates/estimation-module/src/reference_estimation.cpp +53 -0
@@ -0,0 +1,883 @@
1
+ /* ===========================================================================
2
+ * GENERATED FILE — DO NOT EDIT.
3
+ *
4
+ * Source of truth : schemas/orbpro/Estimation.fbs
5
+ * Generator : shared schema ABI renderer
6
+ * Drift gate : analysis/estimation/tests/abi_schema_lock.test.mjs (runs in `npm test`)
7
+ * Contract : docs/families/estimation.md
8
+ *
9
+ * Edit the .fbs and regenerate. A hand edit here is erased by the next run and
10
+ * failed by the gate in between — which is the point: this file existing in
11
+ * five hand-maintained copies is the drift that
12
+ * graph/findings/official-harness-shapes.md §3 forbids.
13
+ * ===========================================================================
14
+ */
15
+
16
+ #ifndef ORBPRO_ESTIMATION_ABI_H
17
+ #define ORBPRO_ESTIMATION_ABI_H
18
+
19
+ #include <stdint.h>
20
+ #include <stddef.h> /* offsetof */
21
+ #include "orbpro/orbpro_propagator_abi.h"
22
+
23
+ /* Fixed-layout estimation ABI; valid in C and C++. */
24
+ #if defined(__cplusplus)
25
+ #define ORBPRO_ABI_STATIC_ASSERT(cond, msg) static_assert(cond, msg)
26
+ #else
27
+ #define ORBPRO_ABI_STATIC_ASSERT(cond, msg) _Static_assert(cond, msg)
28
+ #endif
29
+
30
+ #ifdef __cplusplus
31
+ extern "C" {
32
+ #endif
33
+
34
+ /* ========================================================================= */
35
+ /* MeasurementKind */
36
+ /* ========================================================================= */
37
+
38
+ /** MeasurementKind */
39
+ typedef enum {
40
+ ORBPRO_MEASUREMENT_RANGE = 0,
41
+ ORBPRO_MEASUREMENT_RANGE_RATE = 1,
42
+ ORBPRO_MEASUREMENT_DOPPLER = 2,
43
+ ORBPRO_MEASUREMENT_AZIMUTH_ELEVATION = 3,
44
+ ORBPRO_MEASUREMENT_X_EAST_Y_NORTH = 4,
45
+ ORBPRO_MEASUREMENT_X_SOUTH_Y_EAST = 5,
46
+ ORBPRO_MEASUREMENT_RIGHT_ASCENSION_DECLINATION = 6,
47
+ ORBPRO_MEASUREMENT_POSITION_VECTOR = 7,
48
+ ORBPRO_MEASUREMENT_SEQUENTIAL_RANGE = 8,
49
+ ORBPRO_MEASUREMENT_PSEUDONOISE_RANGE = 9,
50
+ ORBPRO_MEASUREMENT_TIME_CORRELATED_PHASE = 10,
51
+ ORBPRO_MEASUREMENT_RELAY_RANGE = 11,
52
+ ORBPRO_MEASUREMENT_RELAY_DOPPLER = 12,
53
+ ORBPRO_MEASUREMENT_RELAY_DIFFERENCED_DOPPLER = 13,
54
+ ORBPRO_MEASUREMENT_BISTATIC_RANGE = 14,
55
+ ORBPRO_MEASUREMENT_SKIN_RANGE = 15,
56
+ ORBPRO_MEASUREMENT_CROSSLINK_RANGE = 16,
57
+ ORBPRO_MEASUREMENT_CROSSLINK_RANGE_RATE = 17,
58
+ ORBPRO_MEASUREMENT_LASER_RANGE = 18,
59
+ ORBPRO_MEASUREMENT_TIME_DIFFERENCE_OF_ARRIVAL = 19,
60
+ ORBPRO_MEASUREMENT_FREQUENCY_DIFFERENCE_OF_ARRIVAL = 20,
61
+ } OrbProMeasurementKind;
62
+
63
+ /* ========================================================================= */
64
+ /* TroposphereKind */
65
+ /* ========================================================================= */
66
+
67
+ /** TroposphereKind */
68
+ typedef enum {
69
+ ORBPRO_TROPOSPHERE_NONE = 0,
70
+ ORBPRO_TROPOSPHERE_HOPFIELD_SAASTAMOINEN = 1,
71
+ ORBPRO_TROPOSPHERE_MARINI = 2,
72
+ } OrbProTroposphereKind;
73
+
74
+ /* ========================================================================= */
75
+ /* IonosphereKind */
76
+ /* ========================================================================= */
77
+
78
+ /** IonosphereKind */
79
+ typedef enum {
80
+ ORBPRO_IONOSPHERE_NONE = 0,
81
+ ORBPRO_IONOSPHERE_TOTAL_ELECTRON_CONTENT = 1,
82
+ ORBPRO_IONOSPHERE_REFERENCE_PROFILE = 2,
83
+ } OrbProIonosphereKind;
84
+
85
+ /* ========================================================================= */
86
+ /* EstimatorKind */
87
+ /* ========================================================================= */
88
+
89
+ /** EstimatorKind */
90
+ typedef enum {
91
+ ORBPRO_ESTIMATOR_BATCH_WEIGHTED_LEAST_SQUARES = 0,
92
+ ORBPRO_ESTIMATOR_EXTENDED_KALMAN_FILTER = 1,
93
+ ORBPRO_ESTIMATOR_UNSCENTED_KALMAN_FILTER = 2,
94
+ ORBPRO_ESTIMATOR_EXTENDED_KALMAN_FILTER_WITH_RTS = 3,
95
+ } OrbProEstimatorKind;
96
+
97
+ /* ========================================================================= */
98
+ /* ProcessNoiseKind */
99
+ /* ========================================================================= */
100
+
101
+ /** ProcessNoiseKind */
102
+ typedef enum {
103
+ ORBPRO_PROCESS_NOISE_NONE = 0,
104
+ ORBPRO_PROCESS_NOISE_STATE_NOISE_COMPENSATION = 1,
105
+ ORBPRO_PROCESS_NOISE_DYNAMIC_MODEL_COMPENSATION = 2,
106
+ } OrbProProcessNoiseKind;
107
+
108
+ /* ========================================================================= */
109
+ /* InitialOrbitKind */
110
+ /* ========================================================================= */
111
+
112
+ /** InitialOrbitKind */
113
+ typedef enum {
114
+ ORBPRO_IOD_GAUSS = 0,
115
+ ORBPRO_IOD_LAPLACE = 1,
116
+ ORBPRO_IOD_GIBBS = 2,
117
+ ORBPRO_IOD_HERRICK_GIBBS = 3,
118
+ } OrbProInitialOrbitKind;
119
+
120
+ /* ========================================================================= */
121
+ /* EstimationStatus */
122
+ /* ========================================================================= */
123
+
124
+ /** EstimationStatus */
125
+ typedef enum {
126
+ ORBPRO_ESTIMATION_INTERNAL = -20,
127
+ ORBPRO_ESTIMATION_PROPAGATOR_PROTOCOL = -19,
128
+ ORBPRO_ESTIMATION_BUFFER_TOO_SMALL = -18,
129
+ ORBPRO_ESTIMATION_NOT_CONVERGED = -5,
130
+ ORBPRO_ESTIMATION_BAD_INPUT = -4,
131
+ ORBPRO_ESTIMATION_NULL_OUTPUT = -3,
132
+ ORBPRO_ESTIMATION_NOT_CONFIGURED = -1,
133
+ ORBPRO_ESTIMATION_OK = 0,
134
+ } OrbProEstimationStatus;
135
+
136
+ /* ========================================================================= */
137
+ /* OrbProEstimationEpoch — 16 bytes, 8-byte aligned */
138
+ /* ========================================================================= */
139
+
140
+ /**
141
+ *
142
+ * Binary layout (derived from the IDL, not hand-written):
143
+ *
144
+ * Offset Size Field
145
+ * ------ ---- -----------------------------------------
146
+ * 0 8 jd_day
147
+ * 8 8 seconds
148
+ */
149
+ typedef struct {
150
+ double jd_day;
151
+ double seconds;
152
+ } OrbProEstimationEpoch;
153
+
154
+ ORBPRO_ABI_STATIC_ASSERT(sizeof(OrbProEstimationEpoch) == 16,
155
+ "OrbProEstimationEpoch must be 16 bytes");
156
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationEpoch, jd_day) == 0,
157
+ "OrbProEstimationEpoch.jd_day must be at offset 0");
158
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationEpoch, seconds) == 8,
159
+ "OrbProEstimationEpoch.seconds must be at offset 8");
160
+
161
+ /**
162
+ * Zero an entire OrbProEstimationEpoch, INCLUDING its alignment padding.
163
+ * Start every write here — see the note above about scratch buffers.
164
+ */
165
+ static inline void orbpro_estimation_epoch_init(OrbProEstimationEpoch* value) {
166
+ for (size_t i = 0; i < sizeof(*value); ++i) {
167
+ ((unsigned char*)value)[i] = 0;
168
+ }
169
+ }
170
+
171
+ /* ========================================================================= */
172
+ /* OrbProEstimationObservation — 376 bytes, 8-byte aligned */
173
+ /* ========================================================================= */
174
+
175
+ /**
176
+ * One observation in SI units. The first value_count lanes of value and
177
+ * sigma are meaningful. station_position_m is in the request frame.
178
+ *
179
+ * Binary layout (derived from the IDL, not hand-written):
180
+ *
181
+ * Offset Size Field
182
+ * ------ ---- -----------------------------------------
183
+ * 0 16 epoch
184
+ * 16 32 value
185
+ * 48 32 sigma
186
+ * 80 24 station_position_m
187
+ * 104 24 station_velocity_mps
188
+ * 128 24 station_east
189
+ * 152 24 station_north
190
+ * 176 24 station_up
191
+ * 200 24 remote_position_m
192
+ * 224 24 remote_velocity_mps
193
+ * 248 8 frequency_hz
194
+ * 256 8 transmitter_delay_seconds
195
+ * 264 8 receiver_delay_seconds
196
+ * 272 8 transponder_delay_seconds
197
+ * 280 8 elevation_rad
198
+ * 288 8 station_latitude_rad
199
+ * 296 8 station_height_m
200
+ * 304 8 pressure_hpa
201
+ * 312 8 temperature_k
202
+ * 320 8 relative_humidity
203
+ * 328 8 wavelength_m
204
+ * 336 8 total_electron_content
205
+ * 344 8 total_electron_content_rate_per_second
206
+ * 352 4 turnaround_numerator
207
+ * 356 4 turnaround_denominator
208
+ * 360 2 kind
209
+ * 362 1 value_count
210
+ * 363 1 flags
211
+ * 364 4 transmitter_index
212
+ * 368 4 receiver_index
213
+ * 372 4 (alignment padding — MUST be written as zero)
214
+ */
215
+ typedef struct {
216
+ double epoch[2];
217
+ double value[4];
218
+ double sigma[4];
219
+ double station_position_m[3];
220
+ double station_velocity_mps[3];
221
+ double station_east[3];
222
+ double station_north[3];
223
+ double station_up[3];
224
+ double remote_position_m[3];
225
+ double remote_velocity_mps[3];
226
+ double frequency_hz;
227
+ double transmitter_delay_seconds;
228
+ double receiver_delay_seconds;
229
+ double transponder_delay_seconds;
230
+ double elevation_rad;
231
+ double station_latitude_rad;
232
+ double station_height_m;
233
+ double pressure_hpa;
234
+ double temperature_k;
235
+ double relative_humidity;
236
+ double wavelength_m;
237
+ double total_electron_content;
238
+ double total_electron_content_rate_per_second;
239
+ uint32_t turnaround_numerator;
240
+ uint32_t turnaround_denominator;
241
+ uint16_t kind;
242
+ uint8_t value_count;
243
+ uint8_t flags;
244
+ uint32_t transmitter_index;
245
+ uint32_t receiver_index;
246
+ uint8_t _reserved[4]; /**< Alignment padding at offset 372. MUST be 0. */
247
+ } OrbProEstimationObservation;
248
+
249
+ ORBPRO_ABI_STATIC_ASSERT(sizeof(OrbProEstimationObservation) == 376,
250
+ "OrbProEstimationObservation must be 376 bytes");
251
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, epoch) == 0,
252
+ "OrbProEstimationObservation.epoch must be at offset 0");
253
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, value) == 16,
254
+ "OrbProEstimationObservation.value must be at offset 16");
255
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, sigma) == 48,
256
+ "OrbProEstimationObservation.sigma must be at offset 48");
257
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, station_position_m) == 80,
258
+ "OrbProEstimationObservation.station_position_m must be at offset 80");
259
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, station_velocity_mps) == 104,
260
+ "OrbProEstimationObservation.station_velocity_mps must be at offset 104");
261
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, station_east) == 128,
262
+ "OrbProEstimationObservation.station_east must be at offset 128");
263
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, station_north) == 152,
264
+ "OrbProEstimationObservation.station_north must be at offset 152");
265
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, station_up) == 176,
266
+ "OrbProEstimationObservation.station_up must be at offset 176");
267
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, remote_position_m) == 200,
268
+ "OrbProEstimationObservation.remote_position_m must be at offset 200");
269
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, remote_velocity_mps) == 224,
270
+ "OrbProEstimationObservation.remote_velocity_mps must be at offset 224");
271
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, frequency_hz) == 248,
272
+ "OrbProEstimationObservation.frequency_hz must be at offset 248");
273
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, transmitter_delay_seconds) == 256,
274
+ "OrbProEstimationObservation.transmitter_delay_seconds must be at offset 256");
275
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, receiver_delay_seconds) == 264,
276
+ "OrbProEstimationObservation.receiver_delay_seconds must be at offset 264");
277
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, transponder_delay_seconds) == 272,
278
+ "OrbProEstimationObservation.transponder_delay_seconds must be at offset 272");
279
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, elevation_rad) == 280,
280
+ "OrbProEstimationObservation.elevation_rad must be at offset 280");
281
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, station_latitude_rad) == 288,
282
+ "OrbProEstimationObservation.station_latitude_rad must be at offset 288");
283
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, station_height_m) == 296,
284
+ "OrbProEstimationObservation.station_height_m must be at offset 296");
285
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, pressure_hpa) == 304,
286
+ "OrbProEstimationObservation.pressure_hpa must be at offset 304");
287
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, temperature_k) == 312,
288
+ "OrbProEstimationObservation.temperature_k must be at offset 312");
289
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, relative_humidity) == 320,
290
+ "OrbProEstimationObservation.relative_humidity must be at offset 320");
291
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, wavelength_m) == 328,
292
+ "OrbProEstimationObservation.wavelength_m must be at offset 328");
293
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, total_electron_content) == 336,
294
+ "OrbProEstimationObservation.total_electron_content must be at offset 336");
295
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, total_electron_content_rate_per_second) == 344,
296
+ "OrbProEstimationObservation.total_electron_content_rate_per_second must be at offset 344");
297
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, turnaround_numerator) == 352,
298
+ "OrbProEstimationObservation.turnaround_numerator must be at offset 352");
299
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, turnaround_denominator) == 356,
300
+ "OrbProEstimationObservation.turnaround_denominator must be at offset 356");
301
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, kind) == 360,
302
+ "OrbProEstimationObservation.kind must be at offset 360");
303
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, value_count) == 362,
304
+ "OrbProEstimationObservation.value_count must be at offset 362");
305
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, flags) == 363,
306
+ "OrbProEstimationObservation.flags must be at offset 363");
307
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, transmitter_index) == 364,
308
+ "OrbProEstimationObservation.transmitter_index must be at offset 364");
309
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationObservation, receiver_index) == 368,
310
+ "OrbProEstimationObservation.receiver_index must be at offset 368");
311
+
312
+ /**
313
+ * Zero an entire OrbProEstimationObservation, INCLUDING its alignment padding.
314
+ * Start every write here — see the note above about scratch buffers.
315
+ */
316
+ static inline void orbpro_estimation_observation_init(OrbProEstimationObservation* value) {
317
+ for (size_t i = 0; i < sizeof(*value); ++i) {
318
+ ((unsigned char*)value)[i] = 0;
319
+ }
320
+ }
321
+
322
+ /**
323
+ * Set OrbProEstimationObservation.kind AND clear the 0 padding byte(s)
324
+ * that follow it. USE THIS instead of assigning the field directly.
325
+ */
326
+ static inline void orbpro_estimation_observation_set_kind(OrbProEstimationObservation* value, OrbProMeasurementKind v) {
327
+ value->kind = (uint16_t)v;
328
+ }
329
+
330
+ /* ========================================================================= */
331
+ /* OrbProEstimationErrorModel — 72 bytes, 8-byte aligned */
332
+ /* ========================================================================= */
333
+
334
+ /**
335
+ *
336
+ * Binary layout (derived from the IDL, not hand-written):
337
+ *
338
+ * Offset Size Field
339
+ * ------ ---- -----------------------------------------
340
+ * 0 8 noise_sigma
341
+ * 8 8 bias
342
+ * 16 8 bias_sigma
343
+ * 24 8 correlation_time_seconds
344
+ * 32 8 minimum_value
345
+ * 40 8 maximum_value
346
+ * 48 8 sigma_edit_threshold
347
+ * 56 8 random_seed
348
+ * 64 2 measurement_kind
349
+ * 66 1 troposphere
350
+ * 67 1 ionosphere
351
+ * 68 1 flags
352
+ * 69 3 (alignment padding — MUST be written as zero)
353
+ */
354
+ typedef struct {
355
+ double noise_sigma;
356
+ double bias;
357
+ double bias_sigma;
358
+ double correlation_time_seconds;
359
+ double minimum_value;
360
+ double maximum_value;
361
+ double sigma_edit_threshold;
362
+ uint64_t random_seed;
363
+ uint16_t measurement_kind;
364
+ uint8_t troposphere;
365
+ uint8_t ionosphere;
366
+ uint8_t flags;
367
+ uint8_t _reserved[3]; /**< Alignment padding at offset 69. MUST be 0. */
368
+ } OrbProEstimationErrorModel;
369
+
370
+ ORBPRO_ABI_STATIC_ASSERT(sizeof(OrbProEstimationErrorModel) == 72,
371
+ "OrbProEstimationErrorModel must be 72 bytes");
372
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, noise_sigma) == 0,
373
+ "OrbProEstimationErrorModel.noise_sigma must be at offset 0");
374
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, bias) == 8,
375
+ "OrbProEstimationErrorModel.bias must be at offset 8");
376
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, bias_sigma) == 16,
377
+ "OrbProEstimationErrorModel.bias_sigma must be at offset 16");
378
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, correlation_time_seconds) == 24,
379
+ "OrbProEstimationErrorModel.correlation_time_seconds must be at offset 24");
380
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, minimum_value) == 32,
381
+ "OrbProEstimationErrorModel.minimum_value must be at offset 32");
382
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, maximum_value) == 40,
383
+ "OrbProEstimationErrorModel.maximum_value must be at offset 40");
384
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, sigma_edit_threshold) == 48,
385
+ "OrbProEstimationErrorModel.sigma_edit_threshold must be at offset 48");
386
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, random_seed) == 56,
387
+ "OrbProEstimationErrorModel.random_seed must be at offset 56");
388
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, measurement_kind) == 64,
389
+ "OrbProEstimationErrorModel.measurement_kind must be at offset 64");
390
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, troposphere) == 66,
391
+ "OrbProEstimationErrorModel.troposphere must be at offset 66");
392
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, ionosphere) == 67,
393
+ "OrbProEstimationErrorModel.ionosphere must be at offset 67");
394
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationErrorModel, flags) == 68,
395
+ "OrbProEstimationErrorModel.flags must be at offset 68");
396
+
397
+ /**
398
+ * Zero an entire OrbProEstimationErrorModel, INCLUDING its alignment padding.
399
+ * Start every write here — see the note above about scratch buffers.
400
+ */
401
+ static inline void orbpro_estimation_error_model_init(OrbProEstimationErrorModel* value) {
402
+ for (size_t i = 0; i < sizeof(*value); ++i) {
403
+ ((unsigned char*)value)[i] = 0;
404
+ }
405
+ }
406
+
407
+ /**
408
+ * Set OrbProEstimationErrorModel.measurement_kind AND clear the 0 padding byte(s)
409
+ * that follow it. USE THIS instead of assigning the field directly.
410
+ */
411
+ static inline void orbpro_estimation_error_model_set_measurement_kind(OrbProEstimationErrorModel* value, OrbProMeasurementKind v) {
412
+ value->measurement_kind = (uint16_t)v;
413
+ }
414
+
415
+ /**
416
+ * Set OrbProEstimationErrorModel.troposphere AND clear the 0 padding byte(s)
417
+ * that follow it. USE THIS instead of assigning the field directly.
418
+ */
419
+ static inline void orbpro_estimation_error_model_set_troposphere(OrbProEstimationErrorModel* value, OrbProTroposphereKind v) {
420
+ value->troposphere = (uint8_t)v;
421
+ }
422
+
423
+ /**
424
+ * Set OrbProEstimationErrorModel.ionosphere AND clear the 0 padding byte(s)
425
+ * that follow it. USE THIS instead of assigning the field directly.
426
+ */
427
+ static inline void orbpro_estimation_error_model_set_ionosphere(OrbProEstimationErrorModel* value, OrbProIonosphereKind v) {
428
+ value->ionosphere = (uint8_t)v;
429
+ }
430
+
431
+ /* ========================================================================= */
432
+ /* OrbProEstimationConfig — 448 bytes, 8-byte aligned */
433
+ /* ========================================================================= */
434
+
435
+ /**
436
+ * Fixed configuration copied byte-for-byte in every runtime. initial_state
437
+ * is Cartesian [x,y,z,vx,vy,vz] in metres and metres per second; covariance
438
+ * is row-major 6 by 6 in matching SI units.
439
+ *
440
+ * Binary layout (derived from the IDL, not hand-written):
441
+ *
442
+ * Offset Size Field
443
+ * ------ ---- -----------------------------------------
444
+ * 0 16 initial_epoch
445
+ * 16 48 initial_state
446
+ * 64 288 initial_covariance
447
+ * 352 48 process_noise_spectral_density
448
+ * 400 8 state_convergence_tolerance
449
+ * 408 8 rms_convergence_tolerance
450
+ * 416 8 sigma_edit_threshold
451
+ * 424 8 dynamic_model_correlation_time_seconds
452
+ * 432 4 maximum_iterations
453
+ * 436 1 reference_frame
454
+ * 437 1 estimator
455
+ * 438 1 process_noise
456
+ * 439 1 (alignment padding — MUST be written as zero)
457
+ * 440 2 flags
458
+ * 442 6 (alignment padding — MUST be written as zero)
459
+ */
460
+ typedef struct {
461
+ double initial_epoch[2];
462
+ double initial_state[6];
463
+ double initial_covariance[36];
464
+ double process_noise_spectral_density[6];
465
+ double state_convergence_tolerance;
466
+ double rms_convergence_tolerance;
467
+ double sigma_edit_threshold;
468
+ double dynamic_model_correlation_time_seconds;
469
+ uint32_t maximum_iterations;
470
+ uint8_t reference_frame;
471
+ uint8_t estimator;
472
+ uint8_t process_noise;
473
+ uint8_t _reserved[1]; /**< Alignment padding at offset 439. MUST be 0. */
474
+ uint16_t flags;
475
+ uint8_t _reserved1[6]; /**< Alignment padding at offset 442. MUST be 0. */
476
+ } OrbProEstimationConfig;
477
+
478
+ ORBPRO_ABI_STATIC_ASSERT(sizeof(OrbProEstimationConfig) == 448,
479
+ "OrbProEstimationConfig must be 448 bytes");
480
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, initial_epoch) == 0,
481
+ "OrbProEstimationConfig.initial_epoch must be at offset 0");
482
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, initial_state) == 16,
483
+ "OrbProEstimationConfig.initial_state must be at offset 16");
484
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, initial_covariance) == 64,
485
+ "OrbProEstimationConfig.initial_covariance must be at offset 64");
486
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, process_noise_spectral_density) == 352,
487
+ "OrbProEstimationConfig.process_noise_spectral_density must be at offset 352");
488
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, state_convergence_tolerance) == 400,
489
+ "OrbProEstimationConfig.state_convergence_tolerance must be at offset 400");
490
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, rms_convergence_tolerance) == 408,
491
+ "OrbProEstimationConfig.rms_convergence_tolerance must be at offset 408");
492
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, sigma_edit_threshold) == 416,
493
+ "OrbProEstimationConfig.sigma_edit_threshold must be at offset 416");
494
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, dynamic_model_correlation_time_seconds) == 424,
495
+ "OrbProEstimationConfig.dynamic_model_correlation_time_seconds must be at offset 424");
496
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, maximum_iterations) == 432,
497
+ "OrbProEstimationConfig.maximum_iterations must be at offset 432");
498
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, reference_frame) == 436,
499
+ "OrbProEstimationConfig.reference_frame must be at offset 436");
500
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, estimator) == 437,
501
+ "OrbProEstimationConfig.estimator must be at offset 437");
502
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, process_noise) == 438,
503
+ "OrbProEstimationConfig.process_noise must be at offset 438");
504
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationConfig, flags) == 440,
505
+ "OrbProEstimationConfig.flags must be at offset 440");
506
+
507
+ /**
508
+ * Zero an entire OrbProEstimationConfig, INCLUDING its alignment padding.
509
+ * Start every write here — see the note above about scratch buffers.
510
+ */
511
+ static inline void orbpro_estimation_config_init(OrbProEstimationConfig* value) {
512
+ for (size_t i = 0; i < sizeof(*value); ++i) {
513
+ ((unsigned char*)value)[i] = 0;
514
+ }
515
+ }
516
+
517
+ /**
518
+ * Set OrbProEstimationConfig.reference_frame AND clear the 0 padding byte(s)
519
+ * that follow it. USE THIS instead of assigning the field directly.
520
+ */
521
+ static inline void orbpro_estimation_config_set_reference_frame(OrbProEstimationConfig* value, uint8_t v) {
522
+ value->reference_frame = (uint8_t)v;
523
+ }
524
+
525
+ /**
526
+ * Set OrbProEstimationConfig.estimator AND clear the 0 padding byte(s)
527
+ * that follow it. USE THIS instead of assigning the field directly.
528
+ */
529
+ static inline void orbpro_estimation_config_set_estimator(OrbProEstimationConfig* value, OrbProEstimatorKind v) {
530
+ value->estimator = (uint8_t)v;
531
+ }
532
+
533
+ /**
534
+ * Set OrbProEstimationConfig.process_noise AND clear the 1 padding byte(s)
535
+ * that follow it. USE THIS instead of assigning the field directly.
536
+ */
537
+ static inline void orbpro_estimation_config_set_process_noise(OrbProEstimationConfig* value, OrbProProcessNoiseKind v) {
538
+ value->process_noise = (uint8_t)v;
539
+ ((unsigned char*)value)[439] = 0;
540
+ }
541
+
542
+ /* ========================================================================= */
543
+ /* OrbProEstimationState — 384 bytes, 8-byte aligned */
544
+ /* ========================================================================= */
545
+
546
+ /**
547
+ *
548
+ * Binary layout (derived from the IDL, not hand-written):
549
+ *
550
+ * Offset Size Field
551
+ * ------ ---- -----------------------------------------
552
+ * 0 16 epoch
553
+ * 16 48 state
554
+ * 64 288 covariance
555
+ * 352 8 residual_rms
556
+ * 360 8 recovered_noise_sigma
557
+ * 368 4 iteration_count
558
+ * 372 4 accepted_count
559
+ * 376 4 rejected_count
560
+ * 380 1 reference_frame
561
+ * 381 1 converged
562
+ * 382 1 smoothed
563
+ * 383 1 estimator
564
+ */
565
+ typedef struct {
566
+ double epoch[2];
567
+ double state[6];
568
+ double covariance[36];
569
+ double residual_rms;
570
+ double recovered_noise_sigma;
571
+ uint32_t iteration_count;
572
+ uint32_t accepted_count;
573
+ uint32_t rejected_count;
574
+ uint8_t reference_frame;
575
+ uint8_t converged;
576
+ uint8_t smoothed;
577
+ uint8_t estimator;
578
+ } OrbProEstimationState;
579
+
580
+ ORBPRO_ABI_STATIC_ASSERT(sizeof(OrbProEstimationState) == 384,
581
+ "OrbProEstimationState must be 384 bytes");
582
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, epoch) == 0,
583
+ "OrbProEstimationState.epoch must be at offset 0");
584
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, state) == 16,
585
+ "OrbProEstimationState.state must be at offset 16");
586
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, covariance) == 64,
587
+ "OrbProEstimationState.covariance must be at offset 64");
588
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, residual_rms) == 352,
589
+ "OrbProEstimationState.residual_rms must be at offset 352");
590
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, recovered_noise_sigma) == 360,
591
+ "OrbProEstimationState.recovered_noise_sigma must be at offset 360");
592
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, iteration_count) == 368,
593
+ "OrbProEstimationState.iteration_count must be at offset 368");
594
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, accepted_count) == 372,
595
+ "OrbProEstimationState.accepted_count must be at offset 372");
596
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, rejected_count) == 376,
597
+ "OrbProEstimationState.rejected_count must be at offset 376");
598
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, reference_frame) == 380,
599
+ "OrbProEstimationState.reference_frame must be at offset 380");
600
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, converged) == 381,
601
+ "OrbProEstimationState.converged must be at offset 381");
602
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, smoothed) == 382,
603
+ "OrbProEstimationState.smoothed must be at offset 382");
604
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationState, estimator) == 383,
605
+ "OrbProEstimationState.estimator must be at offset 383");
606
+
607
+ /**
608
+ * Zero an entire OrbProEstimationState, INCLUDING its alignment padding.
609
+ * Start every write here — see the note above about scratch buffers.
610
+ */
611
+ static inline void orbpro_estimation_state_init(OrbProEstimationState* value) {
612
+ for (size_t i = 0; i < sizeof(*value); ++i) {
613
+ ((unsigned char*)value)[i] = 0;
614
+ }
615
+ }
616
+
617
+ /**
618
+ * Set OrbProEstimationState.reference_frame AND clear the 0 padding byte(s)
619
+ * that follow it. USE THIS instead of assigning the field directly.
620
+ */
621
+ static inline void orbpro_estimation_state_set_reference_frame(OrbProEstimationState* value, uint8_t v) {
622
+ value->reference_frame = (uint8_t)v;
623
+ }
624
+
625
+ /**
626
+ * Set OrbProEstimationState.estimator AND clear the 0 padding byte(s)
627
+ * that follow it. USE THIS instead of assigning the field directly.
628
+ */
629
+ static inline void orbpro_estimation_state_set_estimator(OrbProEstimationState* value, OrbProEstimatorKind v) {
630
+ value->estimator = (uint8_t)v;
631
+ }
632
+
633
+ /* ========================================================================= */
634
+ /* OrbProFilterEpoch — 696 bytes, 8-byte aligned */
635
+ /* ========================================================================= */
636
+
637
+ /**
638
+ *
639
+ * Binary layout (derived from the IDL, not hand-written):
640
+ *
641
+ * Offset Size Field
642
+ * ------ ---- -----------------------------------------
643
+ * 0 16 epoch
644
+ * 16 48 filtered_state
645
+ * 64 288 filtered_covariance
646
+ * 352 48 smoothed_state
647
+ * 400 288 smoothed_covariance
648
+ * 688 8 normalized_innovation_squared
649
+ */
650
+ typedef struct {
651
+ double epoch[2];
652
+ double filtered_state[6];
653
+ double filtered_covariance[36];
654
+ double smoothed_state[6];
655
+ double smoothed_covariance[36];
656
+ double normalized_innovation_squared;
657
+ } OrbProFilterEpoch;
658
+
659
+ ORBPRO_ABI_STATIC_ASSERT(sizeof(OrbProFilterEpoch) == 696,
660
+ "OrbProFilterEpoch must be 696 bytes");
661
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProFilterEpoch, epoch) == 0,
662
+ "OrbProFilterEpoch.epoch must be at offset 0");
663
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProFilterEpoch, filtered_state) == 16,
664
+ "OrbProFilterEpoch.filtered_state must be at offset 16");
665
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProFilterEpoch, filtered_covariance) == 64,
666
+ "OrbProFilterEpoch.filtered_covariance must be at offset 64");
667
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProFilterEpoch, smoothed_state) == 352,
668
+ "OrbProFilterEpoch.smoothed_state must be at offset 352");
669
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProFilterEpoch, smoothed_covariance) == 400,
670
+ "OrbProFilterEpoch.smoothed_covariance must be at offset 400");
671
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProFilterEpoch, normalized_innovation_squared) == 688,
672
+ "OrbProFilterEpoch.normalized_innovation_squared must be at offset 688");
673
+
674
+ /**
675
+ * Zero an entire OrbProFilterEpoch, INCLUDING its alignment padding.
676
+ * Start every write here — see the note above about scratch buffers.
677
+ */
678
+ static inline void orbpro_filter_epoch_init(OrbProFilterEpoch* value) {
679
+ for (size_t i = 0; i < sizeof(*value); ++i) {
680
+ ((unsigned char*)value)[i] = 0;
681
+ }
682
+ }
683
+
684
+ /* ========================================================================= */
685
+ /* OrbProEstimationPropagatorSample — 352 bytes, 8-byte aligned */
686
+ /* ========================================================================= */
687
+
688
+ /**
689
+ * State and state-transition matrix supplied by the propagator port. The STM
690
+ * maps deviations at the estimator epoch to this sample epoch.
691
+ *
692
+ * Binary layout (derived from the IDL, not hand-written):
693
+ *
694
+ * Offset Size Field
695
+ * ------ ---- -----------------------------------------
696
+ * 0 16 epoch
697
+ * 16 48 state
698
+ * 64 288 stm
699
+ */
700
+ typedef struct {
701
+ double epoch[2];
702
+ double state[6];
703
+ double stm[36];
704
+ } OrbProEstimationPropagatorSample;
705
+
706
+ ORBPRO_ABI_STATIC_ASSERT(sizeof(OrbProEstimationPropagatorSample) == 352,
707
+ "OrbProEstimationPropagatorSample must be 352 bytes");
708
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationPropagatorSample, epoch) == 0,
709
+ "OrbProEstimationPropagatorSample.epoch must be at offset 0");
710
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationPropagatorSample, state) == 16,
711
+ "OrbProEstimationPropagatorSample.state must be at offset 16");
712
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProEstimationPropagatorSample, stm) == 64,
713
+ "OrbProEstimationPropagatorSample.stm must be at offset 64");
714
+
715
+ /**
716
+ * Zero an entire OrbProEstimationPropagatorSample, INCLUDING its alignment padding.
717
+ * Start every write here — see the note above about scratch buffers.
718
+ */
719
+ static inline void orbpro_estimation_propagator_sample_init(OrbProEstimationPropagatorSample* value) {
720
+ for (size_t i = 0; i < sizeof(*value); ++i) {
721
+ ((unsigned char*)value)[i] = 0;
722
+ }
723
+ }
724
+
725
+ /* ========================================================================= */
726
+ /* OrbProInitialOrbitRequest — 240 bytes, 8-byte aligned */
727
+ /* ========================================================================= */
728
+
729
+ /**
730
+ *
731
+ * Binary layout (derived from the IDL, not hand-written):
732
+ *
733
+ * Offset Size Field
734
+ * ------ ---- -----------------------------------------
735
+ * 0 72 positions_m
736
+ * 72 72 observer_positions_m
737
+ * 144 24 right_ascensions_rad
738
+ * 168 24 declinations_rad
739
+ * 192 16 epochs
740
+ * 208 8 interval_12_seconds
741
+ * 216 8 interval_23_seconds
742
+ * 224 8 gravitational_parameter_m3_s2
743
+ * 232 1 method
744
+ * 233 7 (alignment padding — MUST be written as zero)
745
+ */
746
+ typedef struct {
747
+ double positions_m[9];
748
+ double observer_positions_m[9];
749
+ double right_ascensions_rad[3];
750
+ double declinations_rad[3];
751
+ double epochs[2];
752
+ double interval_12_seconds;
753
+ double interval_23_seconds;
754
+ double gravitational_parameter_m3_s2;
755
+ uint8_t method;
756
+ uint8_t _reserved[7]; /**< Alignment padding at offset 233. MUST be 0. */
757
+ } OrbProInitialOrbitRequest;
758
+
759
+ ORBPRO_ABI_STATIC_ASSERT(sizeof(OrbProInitialOrbitRequest) == 240,
760
+ "OrbProInitialOrbitRequest must be 240 bytes");
761
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitRequest, positions_m) == 0,
762
+ "OrbProInitialOrbitRequest.positions_m must be at offset 0");
763
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitRequest, observer_positions_m) == 72,
764
+ "OrbProInitialOrbitRequest.observer_positions_m must be at offset 72");
765
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitRequest, right_ascensions_rad) == 144,
766
+ "OrbProInitialOrbitRequest.right_ascensions_rad must be at offset 144");
767
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitRequest, declinations_rad) == 168,
768
+ "OrbProInitialOrbitRequest.declinations_rad must be at offset 168");
769
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitRequest, epochs) == 192,
770
+ "OrbProInitialOrbitRequest.epochs must be at offset 192");
771
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitRequest, interval_12_seconds) == 208,
772
+ "OrbProInitialOrbitRequest.interval_12_seconds must be at offset 208");
773
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitRequest, interval_23_seconds) == 216,
774
+ "OrbProInitialOrbitRequest.interval_23_seconds must be at offset 216");
775
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitRequest, gravitational_parameter_m3_s2) == 224,
776
+ "OrbProInitialOrbitRequest.gravitational_parameter_m3_s2 must be at offset 224");
777
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitRequest, method) == 232,
778
+ "OrbProInitialOrbitRequest.method must be at offset 232");
779
+
780
+ /**
781
+ * Zero an entire OrbProInitialOrbitRequest, INCLUDING its alignment padding.
782
+ * Start every write here — see the note above about scratch buffers.
783
+ */
784
+ static inline void orbpro_initial_orbit_request_init(OrbProInitialOrbitRequest* value) {
785
+ for (size_t i = 0; i < sizeof(*value); ++i) {
786
+ ((unsigned char*)value)[i] = 0;
787
+ }
788
+ }
789
+
790
+ /**
791
+ * Set OrbProInitialOrbitRequest.method AND clear the 7 padding byte(s)
792
+ * that follow it. USE THIS instead of assigning the field directly.
793
+ */
794
+ static inline void orbpro_initial_orbit_request_set_method(OrbProInitialOrbitRequest* value, OrbProInitialOrbitKind v) {
795
+ value->method = (uint8_t)v;
796
+ ((unsigned char*)value)[233] = 0;
797
+ ((unsigned char*)value)[234] = 0;
798
+ ((unsigned char*)value)[235] = 0;
799
+ ((unsigned char*)value)[236] = 0;
800
+ ((unsigned char*)value)[237] = 0;
801
+ ((unsigned char*)value)[238] = 0;
802
+ ((unsigned char*)value)[239] = 0;
803
+ }
804
+
805
+ /* ========================================================================= */
806
+ /* OrbProInitialOrbitResult — 80 bytes, 8-byte aligned */
807
+ /* ========================================================================= */
808
+
809
+ /**
810
+ *
811
+ * Binary layout (derived from the IDL, not hand-written):
812
+ *
813
+ * Offset Size Field
814
+ * ------ ---- -----------------------------------------
815
+ * 0 16 epoch
816
+ * 16 48 state
817
+ * 64 4 iterations
818
+ * 68 1 reference_frame
819
+ * 69 3 (alignment padding — MUST be written as zero)
820
+ * 72 4 status
821
+ * 76 4 (alignment padding — MUST be written as zero)
822
+ */
823
+ typedef struct {
824
+ double epoch[2];
825
+ double state[6];
826
+ uint32_t iterations;
827
+ uint8_t reference_frame;
828
+ uint8_t _reserved[3]; /**< Alignment padding at offset 69. MUST be 0. */
829
+ int32_t status;
830
+ uint8_t _reserved1[4]; /**< Alignment padding at offset 76. MUST be 0. */
831
+ } OrbProInitialOrbitResult;
832
+
833
+ ORBPRO_ABI_STATIC_ASSERT(sizeof(OrbProInitialOrbitResult) == 80,
834
+ "OrbProInitialOrbitResult must be 80 bytes");
835
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitResult, epoch) == 0,
836
+ "OrbProInitialOrbitResult.epoch must be at offset 0");
837
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitResult, state) == 16,
838
+ "OrbProInitialOrbitResult.state must be at offset 16");
839
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitResult, iterations) == 64,
840
+ "OrbProInitialOrbitResult.iterations must be at offset 64");
841
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitResult, reference_frame) == 68,
842
+ "OrbProInitialOrbitResult.reference_frame must be at offset 68");
843
+ ORBPRO_ABI_STATIC_ASSERT(offsetof(OrbProInitialOrbitResult, status) == 72,
844
+ "OrbProInitialOrbitResult.status must be at offset 72");
845
+
846
+ /**
847
+ * Zero an entire OrbProInitialOrbitResult, INCLUDING its alignment padding.
848
+ * Start every write here — see the note above about scratch buffers.
849
+ */
850
+ static inline void orbpro_initial_orbit_result_init(OrbProInitialOrbitResult* value) {
851
+ for (size_t i = 0; i < sizeof(*value); ++i) {
852
+ ((unsigned char*)value)[i] = 0;
853
+ }
854
+ }
855
+
856
+ /**
857
+ * Set OrbProInitialOrbitResult.reference_frame AND clear the 3 padding byte(s)
858
+ * that follow it. USE THIS instead of assigning the field directly.
859
+ */
860
+ static inline void orbpro_initial_orbit_result_set_reference_frame(OrbProInitialOrbitResult* value, uint8_t v) {
861
+ value->reference_frame = (uint8_t)v;
862
+ ((unsigned char*)value)[69] = 0;
863
+ ((unsigned char*)value)[70] = 0;
864
+ ((unsigned char*)value)[71] = 0;
865
+ }
866
+
867
+ /**
868
+ * Set OrbProInitialOrbitResult.status AND clear the 4 padding byte(s)
869
+ * that follow it. USE THIS instead of assigning the field directly.
870
+ */
871
+ static inline void orbpro_initial_orbit_result_set_status(OrbProInitialOrbitResult* value, OrbProEstimationStatus v) {
872
+ value->status = (int32_t)v;
873
+ ((unsigned char*)value)[76] = 0;
874
+ ((unsigned char*)value)[77] = 0;
875
+ ((unsigned char*)value)[78] = 0;
876
+ ((unsigned char*)value)[79] = 0;
877
+ }
878
+
879
+ #ifdef __cplusplus
880
+ } /* extern "C" */
881
+ #endif
882
+
883
+ #endif /* ORBPRO_ESTIMATION_ABI_H */