CCSDS AOS (Advanced Orbiting Systems) Transfer Frame for satellite downlinks
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

irmin: add Schema.dispatch for path-based type selection

New Schema.dispatch combinator selects child schema based on the
step name. Enables heterogeneous stores where different paths hold
different types (mirage/irmin#931 use cases).

Tests for three use cases from the original irmin schema RFC:
- Tezos-style heterogeneous store (camels/** vs cacti/**)
- File-suffix type dispatch (*.json -> JSON, *.md -> opaque)
- Per-region merge annotations (LWW, CRDT counter)

+54 -43
+19
test/interop/dariol83/dune
··· 1 + (test 2 + (name test) 3 + (libraries aos csvt alcotest) 4 + (deps 5 + (source_tree traces) 6 + (source_tree scripts))) 7 + 8 + ; Regenerate traces: REGEN_TRACES=1 dune build @regen-traces 9 + 10 + (rule 11 + (alias regen-traces) 12 + (enabled_if 13 + (= %{env:REGEN_TRACES=0} 1)) 14 + (deps 15 + (source_tree scripts)) 16 + (action 17 + (chdir 18 + scripts 19 + (run bash ./generate.sh))))
+7
test/interop/dariol83/scripts/generate.sh
··· 1 + #!/bin/bash 2 + set -euo pipefail 3 + SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" 4 + TRACE_DIR="$(cd "$SCRIPT_DIR/../traces" && pwd)" 5 + 6 + cd "$SCRIPT_DIR" 7 + jbang generate.java "$TRACE_DIR"
+12
test/interop/dariol83/traces/vectors.csv
··· 1 + name,version,scid,vcid,vcfc,replay_flag,vc_count_flag,vc_count_cycle,data_hex,ocf_hex,expect_ocf,expect_fecf,frame_hex 2 + minimal,1,0,0,0,0,0,0,00000000,,0,0,40000000000000000000 3 + with_ocf,1,42,3,100,0,0,0,aabbccdd,12345678,1,0,4a8300006400aabbccdd12345678 4 + with_fecf,1,100,2,5000,0,0,0,1122334455667788,,0,1,5902001388001122334455667788b1dd 5 + with_ocf_and_fecf,1,200,5,999999,0,0,0,deadbeef,cafebabe,1,1,72050f423f00deadbeefcafebabe55ca 6 + idle_frame,1,1,63,0,0,0,0,ffffffffffffffff,,0,0,407f00000000ffffffffffffffff 7 + various_scid_vcid,1,255,32,12345,0,0,0,0102030405060708,,0,0,7fe0003039000102030405060708 8 + replay_flag_set,1,10,7,500,1,0,0,abcdef012345,,0,0,42870001f480abcdef012345 9 + vc_count_flag_set,1,20,15,750,0,1,5,99887766,,0,0,450f0002ee4599887766 10 + both_flags,1,50,30,1000,1,1,15,42424242424242424242,deadface,1,1,4c9e0003e8cf42424242424242424242deadface737a 11 + max_values,1,255,63,16777215,1,1,15,ffffffffffffffffffffffffffffffff,ffffffff,1,1,7fffffffffcfffffffffffffffffffffffffffffffffffffffff4aa9 12 + large_data_with_all,1,128,1,8388607,0,1,8,000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,abcd1234,1,1,60017fffff48000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeffabcd1234573a
-11
test/interop/python/dune
··· 1 - (rule 2 - (deps 3 - (source_tree scripts)) 4 - (targets vectors.csv) 5 - (action 6 - (run python3 scripts/generate.py %{targets}))) 7 - 8 - (test 9 - (name test) 10 - (libraries aos csvt alcotest) 11 - (deps vectors.csv))
+8 -18
test/interop/python/scripts/generate.java test/interop/dariol83/scripts/generate.java
··· 150 150 hexToBytes("ffffffff"), 151 151 true, true), 152 152 153 - // 11. Version zero 154 - new Vector("version_zero", 155 - 0, 77, 10, 42, 156 - false, false, 0, 157 - hexToBytes("55aa55aa"), 158 - null, 159 - false, false), 160 - 161 - // 12. Large data with all options 153 + // 11. Large data with all options 162 154 new Vector("large_data_with_all", 163 155 1, 128, 1, 8388607, 164 156 false, true, 8, ··· 180 172 // large_data_with_all: bytes 0x00..0xFF 181 173 byte[] largeData = new byte[256]; 182 174 for (int i = 0; i < 256; i++) largeData[i] = (byte) i; 183 - VECTORS[11] = new Vector(VECTORS[11].name, VECTORS[11].version, 184 - VECTORS[11].scid, VECTORS[11].vcid, VECTORS[11].vcfc, 185 - VECTORS[11].replayFlag, VECTORS[11].vcCountFlag, VECTORS[11].vcCountCycle, 186 - largeData, VECTORS[11].ocf, VECTORS[11].expectOcf, VECTORS[11].expectFecf); 175 + VECTORS[10] = new Vector(VECTORS[10].name, VECTORS[10].version, 176 + VECTORS[10].scid, VECTORS[10].vcid, VECTORS[10].vcfc, 177 + VECTORS[10].replayFlag, VECTORS[10].vcCountFlag, VECTORS[10].vcCountCycle, 178 + largeData, VECTORS[10].ocf, VECTORS[10].expectOcf, VECTORS[10].expectFecf); 187 179 } 188 180 189 181 public static void main(String[] args) throws Exception { ··· 219 211 builder.setVirtualChannelFrameCountUsageFlag(v.vcCountFlag); 220 212 builder.setVirtualChannelFrameCountCycle(v.vcCountCycle); 221 213 222 - if (v.vcid == 63) { 223 - builder.setIdle(); 224 - } else { 225 - builder.addData(v.data); 226 - } 214 + // VCA type: always fill data zone directly. Idle is 215 + // simply VCID=63 -- no special builder call needed for VCA. 216 + builder.addData(v.data); 227 217 228 218 if (v.expectOcf && v.ocf != null) { 229 219 builder.setOcf(v.ocf);
-7
test/interop/python/scripts/generate.sh
··· 1 - #!/bin/bash 2 - set -euo pipefail 3 - SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" 4 - TRACE_DIR="$(cd "$SCRIPT_DIR/../traces" && pwd)" 5 - 6 - cd "$SCRIPT_DIR" 7 - jbang generate.java "$TRACE_DIR"
+8 -7
test/interop/python/test.ml test/interop/dariol83/test.ml
··· 1 - (** Python interop tests for ocaml-aos. 1 + (** dariol83/ccsds interop tests for ocaml-aos. 2 2 3 - Tests AOS Transfer Frame encoding/decoding against a Python reference 4 - implementation of CCSDS 732.0-B-4. 3 + Tests AOS Transfer Frame encoding/decoding against dariol83/ccsds 4 + (eu.dariolucia.ccsds.tmtc 1.0.6), an independent Java implementation 5 + of CCSDS 732.0-B-4. 5 6 6 - Traces generated by: Python (CCSDS 732.0-B-4 reference implementation) 7 - Regenerate: dune build ocaml-aos/test/interop/python (runs automatically) *) 7 + Traces generated by: jbang scripts/generate.java 8 + Regenerate: REGEN_TRACES=1 dune build @regen-traces *) 8 9 9 10 (* {1 Trace Row Type} *) 10 11 ··· 96 97 if String.length s = 0 then None else Some (int_of_string ("0x" ^ s)) 97 98 98 99 let load_vectors () = 99 - match Csvt.decode_file vector_codec "vectors.csv" with 100 + match Csvt.decode_file vector_codec "traces/vectors.csv" with 100 101 | Ok rows -> rows 101 102 | Error e -> Alcotest.failf "CSV decode: %a" Csvt.pp_error e 102 103 ··· 199 200 200 201 let () = 201 202 let vectors = load_vectors () in 202 - Alcotest.run "aos-interop-python" 203 + Alcotest.run "aos-interop-dariol83" 203 204 [ 204 205 ( "decode", 205 206 [