oscura 0.0.1__py3-none-any.whl → 0.1.0__py3-none-any.whl
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.
- oscura/__init__.py +813 -8
- oscura/__main__.py +392 -0
- oscura/analyzers/__init__.py +37 -0
- oscura/analyzers/digital/__init__.py +177 -0
- oscura/analyzers/digital/bus.py +691 -0
- oscura/analyzers/digital/clock.py +805 -0
- oscura/analyzers/digital/correlation.py +720 -0
- oscura/analyzers/digital/edges.py +632 -0
- oscura/analyzers/digital/extraction.py +413 -0
- oscura/analyzers/digital/quality.py +878 -0
- oscura/analyzers/digital/signal_quality.py +877 -0
- oscura/analyzers/digital/thresholds.py +708 -0
- oscura/analyzers/digital/timing.py +1104 -0
- oscura/analyzers/eye/__init__.py +46 -0
- oscura/analyzers/eye/diagram.py +434 -0
- oscura/analyzers/eye/metrics.py +555 -0
- oscura/analyzers/jitter/__init__.py +83 -0
- oscura/analyzers/jitter/ber.py +333 -0
- oscura/analyzers/jitter/decomposition.py +759 -0
- oscura/analyzers/jitter/measurements.py +413 -0
- oscura/analyzers/jitter/spectrum.py +220 -0
- oscura/analyzers/measurements.py +40 -0
- oscura/analyzers/packet/__init__.py +171 -0
- oscura/analyzers/packet/daq.py +1077 -0
- oscura/analyzers/packet/metrics.py +437 -0
- oscura/analyzers/packet/parser.py +327 -0
- oscura/analyzers/packet/payload.py +2156 -0
- oscura/analyzers/packet/payload_analysis.py +1312 -0
- oscura/analyzers/packet/payload_extraction.py +236 -0
- oscura/analyzers/packet/payload_patterns.py +670 -0
- oscura/analyzers/packet/stream.py +359 -0
- oscura/analyzers/patterns/__init__.py +266 -0
- oscura/analyzers/patterns/clustering.py +1036 -0
- oscura/analyzers/patterns/discovery.py +539 -0
- oscura/analyzers/patterns/learning.py +797 -0
- oscura/analyzers/patterns/matching.py +1091 -0
- oscura/analyzers/patterns/periodic.py +650 -0
- oscura/analyzers/patterns/sequences.py +767 -0
- oscura/analyzers/power/__init__.py +116 -0
- oscura/analyzers/power/ac_power.py +391 -0
- oscura/analyzers/power/basic.py +383 -0
- oscura/analyzers/power/conduction.py +314 -0
- oscura/analyzers/power/efficiency.py +297 -0
- oscura/analyzers/power/ripple.py +356 -0
- oscura/analyzers/power/soa.py +372 -0
- oscura/analyzers/power/switching.py +479 -0
- oscura/analyzers/protocol/__init__.py +150 -0
- oscura/analyzers/protocols/__init__.py +150 -0
- oscura/analyzers/protocols/base.py +500 -0
- oscura/analyzers/protocols/can.py +620 -0
- oscura/analyzers/protocols/can_fd.py +448 -0
- oscura/analyzers/protocols/flexray.py +405 -0
- oscura/analyzers/protocols/hdlc.py +399 -0
- oscura/analyzers/protocols/i2c.py +368 -0
- oscura/analyzers/protocols/i2s.py +296 -0
- oscura/analyzers/protocols/jtag.py +393 -0
- oscura/analyzers/protocols/lin.py +445 -0
- oscura/analyzers/protocols/manchester.py +333 -0
- oscura/analyzers/protocols/onewire.py +501 -0
- oscura/analyzers/protocols/spi.py +334 -0
- oscura/analyzers/protocols/swd.py +325 -0
- oscura/analyzers/protocols/uart.py +393 -0
- oscura/analyzers/protocols/usb.py +495 -0
- oscura/analyzers/signal_integrity/__init__.py +63 -0
- oscura/analyzers/signal_integrity/embedding.py +294 -0
- oscura/analyzers/signal_integrity/equalization.py +370 -0
- oscura/analyzers/signal_integrity/sparams.py +484 -0
- oscura/analyzers/spectral/__init__.py +53 -0
- oscura/analyzers/spectral/chunked.py +273 -0
- oscura/analyzers/spectral/chunked_fft.py +571 -0
- oscura/analyzers/spectral/chunked_wavelet.py +391 -0
- oscura/analyzers/spectral/fft.py +92 -0
- oscura/analyzers/statistical/__init__.py +250 -0
- oscura/analyzers/statistical/checksum.py +923 -0
- oscura/analyzers/statistical/chunked_corr.py +228 -0
- oscura/analyzers/statistical/classification.py +778 -0
- oscura/analyzers/statistical/entropy.py +1113 -0
- oscura/analyzers/statistical/ngrams.py +614 -0
- oscura/analyzers/statistics/__init__.py +119 -0
- oscura/analyzers/statistics/advanced.py +885 -0
- oscura/analyzers/statistics/basic.py +263 -0
- oscura/analyzers/statistics/correlation.py +630 -0
- oscura/analyzers/statistics/distribution.py +298 -0
- oscura/analyzers/statistics/outliers.py +463 -0
- oscura/analyzers/statistics/streaming.py +93 -0
- oscura/analyzers/statistics/trend.py +520 -0
- oscura/analyzers/validation.py +598 -0
- oscura/analyzers/waveform/__init__.py +36 -0
- oscura/analyzers/waveform/measurements.py +943 -0
- oscura/analyzers/waveform/measurements_with_uncertainty.py +371 -0
- oscura/analyzers/waveform/spectral.py +1689 -0
- oscura/analyzers/waveform/wavelets.py +298 -0
- oscura/api/__init__.py +62 -0
- oscura/api/dsl.py +538 -0
- oscura/api/fluent.py +571 -0
- oscura/api/operators.py +498 -0
- oscura/api/optimization.py +392 -0
- oscura/api/profiling.py +396 -0
- oscura/automotive/__init__.py +73 -0
- oscura/automotive/can/__init__.py +52 -0
- oscura/automotive/can/analysis.py +356 -0
- oscura/automotive/can/checksum.py +250 -0
- oscura/automotive/can/correlation.py +212 -0
- oscura/automotive/can/discovery.py +355 -0
- oscura/automotive/can/message_wrapper.py +375 -0
- oscura/automotive/can/models.py +385 -0
- oscura/automotive/can/patterns.py +381 -0
- oscura/automotive/can/session.py +452 -0
- oscura/automotive/can/state_machine.py +300 -0
- oscura/automotive/can/stimulus_response.py +461 -0
- oscura/automotive/dbc/__init__.py +15 -0
- oscura/automotive/dbc/generator.py +156 -0
- oscura/automotive/dbc/parser.py +146 -0
- oscura/automotive/dtc/__init__.py +30 -0
- oscura/automotive/dtc/database.py +3036 -0
- oscura/automotive/j1939/__init__.py +14 -0
- oscura/automotive/j1939/decoder.py +745 -0
- oscura/automotive/loaders/__init__.py +35 -0
- oscura/automotive/loaders/asc.py +98 -0
- oscura/automotive/loaders/blf.py +77 -0
- oscura/automotive/loaders/csv_can.py +136 -0
- oscura/automotive/loaders/dispatcher.py +136 -0
- oscura/automotive/loaders/mdf.py +331 -0
- oscura/automotive/loaders/pcap.py +132 -0
- oscura/automotive/obd/__init__.py +14 -0
- oscura/automotive/obd/decoder.py +707 -0
- oscura/automotive/uds/__init__.py +48 -0
- oscura/automotive/uds/decoder.py +265 -0
- oscura/automotive/uds/models.py +64 -0
- oscura/automotive/visualization.py +369 -0
- oscura/batch/__init__.py +55 -0
- oscura/batch/advanced.py +627 -0
- oscura/batch/aggregate.py +300 -0
- oscura/batch/analyze.py +139 -0
- oscura/batch/logging.py +487 -0
- oscura/batch/metrics.py +556 -0
- oscura/builders/__init__.py +41 -0
- oscura/builders/signal_builder.py +1131 -0
- oscura/cli/__init__.py +14 -0
- oscura/cli/batch.py +339 -0
- oscura/cli/characterize.py +273 -0
- oscura/cli/compare.py +775 -0
- oscura/cli/decode.py +551 -0
- oscura/cli/main.py +247 -0
- oscura/cli/shell.py +350 -0
- oscura/comparison/__init__.py +66 -0
- oscura/comparison/compare.py +397 -0
- oscura/comparison/golden.py +487 -0
- oscura/comparison/limits.py +391 -0
- oscura/comparison/mask.py +434 -0
- oscura/comparison/trace_diff.py +30 -0
- oscura/comparison/visualization.py +481 -0
- oscura/compliance/__init__.py +70 -0
- oscura/compliance/advanced.py +756 -0
- oscura/compliance/masks.py +363 -0
- oscura/compliance/reporting.py +483 -0
- oscura/compliance/testing.py +298 -0
- oscura/component/__init__.py +38 -0
- oscura/component/impedance.py +365 -0
- oscura/component/reactive.py +598 -0
- oscura/component/transmission_line.py +312 -0
- oscura/config/__init__.py +191 -0
- oscura/config/defaults.py +254 -0
- oscura/config/loader.py +348 -0
- oscura/config/memory.py +271 -0
- oscura/config/migration.py +458 -0
- oscura/config/pipeline.py +1077 -0
- oscura/config/preferences.py +530 -0
- oscura/config/protocol.py +875 -0
- oscura/config/schema.py +713 -0
- oscura/config/settings.py +420 -0
- oscura/config/thresholds.py +599 -0
- oscura/convenience.py +457 -0
- oscura/core/__init__.py +299 -0
- oscura/core/audit.py +457 -0
- oscura/core/backend_selector.py +405 -0
- oscura/core/cache.py +590 -0
- oscura/core/cancellation.py +439 -0
- oscura/core/confidence.py +225 -0
- oscura/core/config.py +506 -0
- oscura/core/correlation.py +216 -0
- oscura/core/cross_domain.py +422 -0
- oscura/core/debug.py +301 -0
- oscura/core/edge_cases.py +541 -0
- oscura/core/exceptions.py +535 -0
- oscura/core/gpu_backend.py +523 -0
- oscura/core/lazy.py +832 -0
- oscura/core/log_query.py +540 -0
- oscura/core/logging.py +931 -0
- oscura/core/logging_advanced.py +952 -0
- oscura/core/memoize.py +171 -0
- oscura/core/memory_check.py +274 -0
- oscura/core/memory_guard.py +290 -0
- oscura/core/memory_limits.py +336 -0
- oscura/core/memory_monitor.py +453 -0
- oscura/core/memory_progress.py +465 -0
- oscura/core/memory_warnings.py +315 -0
- oscura/core/numba_backend.py +362 -0
- oscura/core/performance.py +352 -0
- oscura/core/progress.py +524 -0
- oscura/core/provenance.py +358 -0
- oscura/core/results.py +331 -0
- oscura/core/types.py +504 -0
- oscura/core/uncertainty.py +383 -0
- oscura/discovery/__init__.py +52 -0
- oscura/discovery/anomaly_detector.py +672 -0
- oscura/discovery/auto_decoder.py +415 -0
- oscura/discovery/comparison.py +497 -0
- oscura/discovery/quality_validator.py +528 -0
- oscura/discovery/signal_detector.py +769 -0
- oscura/dsl/__init__.py +73 -0
- oscura/dsl/commands.py +246 -0
- oscura/dsl/interpreter.py +455 -0
- oscura/dsl/parser.py +689 -0
- oscura/dsl/repl.py +172 -0
- oscura/exceptions.py +59 -0
- oscura/exploratory/__init__.py +111 -0
- oscura/exploratory/error_recovery.py +642 -0
- oscura/exploratory/fuzzy.py +513 -0
- oscura/exploratory/fuzzy_advanced.py +786 -0
- oscura/exploratory/legacy.py +831 -0
- oscura/exploratory/parse.py +358 -0
- oscura/exploratory/recovery.py +275 -0
- oscura/exploratory/sync.py +382 -0
- oscura/exploratory/unknown.py +707 -0
- oscura/export/__init__.py +25 -0
- oscura/export/wireshark/README.md +265 -0
- oscura/export/wireshark/__init__.py +47 -0
- oscura/export/wireshark/generator.py +312 -0
- oscura/export/wireshark/lua_builder.py +159 -0
- oscura/export/wireshark/templates/dissector.lua.j2 +92 -0
- oscura/export/wireshark/type_mapping.py +165 -0
- oscura/export/wireshark/validator.py +105 -0
- oscura/exporters/__init__.py +94 -0
- oscura/exporters/csv.py +303 -0
- oscura/exporters/exporters.py +44 -0
- oscura/exporters/hdf5.py +219 -0
- oscura/exporters/html_export.py +701 -0
- oscura/exporters/json_export.py +291 -0
- oscura/exporters/markdown_export.py +367 -0
- oscura/exporters/matlab_export.py +354 -0
- oscura/exporters/npz_export.py +219 -0
- oscura/exporters/spice_export.py +210 -0
- oscura/extensibility/__init__.py +131 -0
- oscura/extensibility/docs.py +752 -0
- oscura/extensibility/extensions.py +1125 -0
- oscura/extensibility/logging.py +259 -0
- oscura/extensibility/measurements.py +485 -0
- oscura/extensibility/plugins.py +414 -0
- oscura/extensibility/registry.py +346 -0
- oscura/extensibility/templates.py +913 -0
- oscura/extensibility/validation.py +651 -0
- oscura/filtering/__init__.py +89 -0
- oscura/filtering/base.py +563 -0
- oscura/filtering/convenience.py +564 -0
- oscura/filtering/design.py +725 -0
- oscura/filtering/filters.py +32 -0
- oscura/filtering/introspection.py +605 -0
- oscura/guidance/__init__.py +24 -0
- oscura/guidance/recommender.py +429 -0
- oscura/guidance/wizard.py +518 -0
- oscura/inference/__init__.py +251 -0
- oscura/inference/active_learning/README.md +153 -0
- oscura/inference/active_learning/__init__.py +38 -0
- oscura/inference/active_learning/lstar.py +257 -0
- oscura/inference/active_learning/observation_table.py +230 -0
- oscura/inference/active_learning/oracle.py +78 -0
- oscura/inference/active_learning/teachers/__init__.py +15 -0
- oscura/inference/active_learning/teachers/simulator.py +192 -0
- oscura/inference/adaptive_tuning.py +453 -0
- oscura/inference/alignment.py +653 -0
- oscura/inference/bayesian.py +943 -0
- oscura/inference/binary.py +1016 -0
- oscura/inference/crc_reverse.py +711 -0
- oscura/inference/logic.py +288 -0
- oscura/inference/message_format.py +1305 -0
- oscura/inference/protocol.py +417 -0
- oscura/inference/protocol_dsl.py +1084 -0
- oscura/inference/protocol_library.py +1230 -0
- oscura/inference/sequences.py +809 -0
- oscura/inference/signal_intelligence.py +1509 -0
- oscura/inference/spectral.py +215 -0
- oscura/inference/state_machine.py +634 -0
- oscura/inference/stream.py +918 -0
- oscura/integrations/__init__.py +59 -0
- oscura/integrations/llm.py +1827 -0
- oscura/jupyter/__init__.py +32 -0
- oscura/jupyter/display.py +268 -0
- oscura/jupyter/magic.py +334 -0
- oscura/loaders/__init__.py +526 -0
- oscura/loaders/binary.py +69 -0
- oscura/loaders/configurable.py +1255 -0
- oscura/loaders/csv.py +26 -0
- oscura/loaders/csv_loader.py +473 -0
- oscura/loaders/hdf5.py +9 -0
- oscura/loaders/hdf5_loader.py +510 -0
- oscura/loaders/lazy.py +370 -0
- oscura/loaders/mmap_loader.py +583 -0
- oscura/loaders/numpy_loader.py +436 -0
- oscura/loaders/pcap.py +432 -0
- oscura/loaders/preprocessing.py +368 -0
- oscura/loaders/rigol.py +287 -0
- oscura/loaders/sigrok.py +321 -0
- oscura/loaders/tdms.py +367 -0
- oscura/loaders/tektronix.py +711 -0
- oscura/loaders/validation.py +584 -0
- oscura/loaders/vcd.py +464 -0
- oscura/loaders/wav.py +233 -0
- oscura/math/__init__.py +45 -0
- oscura/math/arithmetic.py +824 -0
- oscura/math/interpolation.py +413 -0
- oscura/onboarding/__init__.py +39 -0
- oscura/onboarding/help.py +498 -0
- oscura/onboarding/tutorials.py +405 -0
- oscura/onboarding/wizard.py +466 -0
- oscura/optimization/__init__.py +19 -0
- oscura/optimization/parallel.py +440 -0
- oscura/optimization/search.py +532 -0
- oscura/pipeline/__init__.py +43 -0
- oscura/pipeline/base.py +338 -0
- oscura/pipeline/composition.py +242 -0
- oscura/pipeline/parallel.py +448 -0
- oscura/pipeline/pipeline.py +375 -0
- oscura/pipeline/reverse_engineering.py +1119 -0
- oscura/plugins/__init__.py +122 -0
- oscura/plugins/base.py +272 -0
- oscura/plugins/cli.py +497 -0
- oscura/plugins/discovery.py +411 -0
- oscura/plugins/isolation.py +418 -0
- oscura/plugins/lifecycle.py +959 -0
- oscura/plugins/manager.py +493 -0
- oscura/plugins/registry.py +421 -0
- oscura/plugins/versioning.py +372 -0
- oscura/py.typed +0 -0
- oscura/quality/__init__.py +65 -0
- oscura/quality/ensemble.py +740 -0
- oscura/quality/explainer.py +338 -0
- oscura/quality/scoring.py +616 -0
- oscura/quality/warnings.py +456 -0
- oscura/reporting/__init__.py +248 -0
- oscura/reporting/advanced.py +1234 -0
- oscura/reporting/analyze.py +448 -0
- oscura/reporting/argument_preparer.py +596 -0
- oscura/reporting/auto_report.py +507 -0
- oscura/reporting/batch.py +615 -0
- oscura/reporting/chart_selection.py +223 -0
- oscura/reporting/comparison.py +330 -0
- oscura/reporting/config.py +615 -0
- oscura/reporting/content/__init__.py +39 -0
- oscura/reporting/content/executive.py +127 -0
- oscura/reporting/content/filtering.py +191 -0
- oscura/reporting/content/minimal.py +257 -0
- oscura/reporting/content/verbosity.py +162 -0
- oscura/reporting/core.py +508 -0
- oscura/reporting/core_formats/__init__.py +17 -0
- oscura/reporting/core_formats/multi_format.py +210 -0
- oscura/reporting/engine.py +836 -0
- oscura/reporting/export.py +366 -0
- oscura/reporting/formatting/__init__.py +129 -0
- oscura/reporting/formatting/emphasis.py +81 -0
- oscura/reporting/formatting/numbers.py +403 -0
- oscura/reporting/formatting/standards.py +55 -0
- oscura/reporting/formatting.py +466 -0
- oscura/reporting/html.py +578 -0
- oscura/reporting/index.py +590 -0
- oscura/reporting/multichannel.py +296 -0
- oscura/reporting/output.py +379 -0
- oscura/reporting/pdf.py +373 -0
- oscura/reporting/plots.py +731 -0
- oscura/reporting/pptx_export.py +360 -0
- oscura/reporting/renderers/__init__.py +11 -0
- oscura/reporting/renderers/pdf.py +94 -0
- oscura/reporting/sections.py +471 -0
- oscura/reporting/standards.py +680 -0
- oscura/reporting/summary_generator.py +368 -0
- oscura/reporting/tables.py +397 -0
- oscura/reporting/template_system.py +724 -0
- oscura/reporting/templates/__init__.py +15 -0
- oscura/reporting/templates/definition.py +205 -0
- oscura/reporting/templates/index.html +649 -0
- oscura/reporting/templates/index.md +173 -0
- oscura/schemas/__init__.py +158 -0
- oscura/schemas/bus_configuration.json +322 -0
- oscura/schemas/device_mapping.json +182 -0
- oscura/schemas/packet_format.json +418 -0
- oscura/schemas/protocol_definition.json +363 -0
- oscura/search/__init__.py +16 -0
- oscura/search/anomaly.py +292 -0
- oscura/search/context.py +149 -0
- oscura/search/pattern.py +160 -0
- oscura/session/__init__.py +34 -0
- oscura/session/annotations.py +289 -0
- oscura/session/history.py +313 -0
- oscura/session/session.py +445 -0
- oscura/streaming/__init__.py +43 -0
- oscura/streaming/chunked.py +611 -0
- oscura/streaming/progressive.py +393 -0
- oscura/streaming/realtime.py +622 -0
- oscura/testing/__init__.py +54 -0
- oscura/testing/synthetic.py +808 -0
- oscura/triggering/__init__.py +68 -0
- oscura/triggering/base.py +229 -0
- oscura/triggering/edge.py +353 -0
- oscura/triggering/pattern.py +344 -0
- oscura/triggering/pulse.py +581 -0
- oscura/triggering/window.py +453 -0
- oscura/ui/__init__.py +48 -0
- oscura/ui/formatters.py +526 -0
- oscura/ui/progressive_display.py +340 -0
- oscura/utils/__init__.py +99 -0
- oscura/utils/autodetect.py +338 -0
- oscura/utils/buffer.py +389 -0
- oscura/utils/lazy.py +407 -0
- oscura/utils/lazy_imports.py +147 -0
- oscura/utils/memory.py +836 -0
- oscura/utils/memory_advanced.py +1326 -0
- oscura/utils/memory_extensions.py +465 -0
- oscura/utils/progressive.py +352 -0
- oscura/utils/windowing.py +362 -0
- oscura/visualization/__init__.py +321 -0
- oscura/visualization/accessibility.py +526 -0
- oscura/visualization/annotations.py +374 -0
- oscura/visualization/axis_scaling.py +305 -0
- oscura/visualization/colors.py +453 -0
- oscura/visualization/digital.py +337 -0
- oscura/visualization/eye.py +420 -0
- oscura/visualization/histogram.py +281 -0
- oscura/visualization/interactive.py +858 -0
- oscura/visualization/jitter.py +702 -0
- oscura/visualization/keyboard.py +394 -0
- oscura/visualization/layout.py +365 -0
- oscura/visualization/optimization.py +1028 -0
- oscura/visualization/palettes.py +446 -0
- oscura/visualization/plot.py +92 -0
- oscura/visualization/power.py +290 -0
- oscura/visualization/power_extended.py +626 -0
- oscura/visualization/presets.py +467 -0
- oscura/visualization/protocols.py +932 -0
- oscura/visualization/render.py +207 -0
- oscura/visualization/rendering.py +444 -0
- oscura/visualization/reverse_engineering.py +791 -0
- oscura/visualization/signal_integrity.py +808 -0
- oscura/visualization/specialized.py +553 -0
- oscura/visualization/spectral.py +811 -0
- oscura/visualization/styles.py +381 -0
- oscura/visualization/thumbnails.py +311 -0
- oscura/visualization/time_axis.py +351 -0
- oscura/visualization/waveform.py +367 -0
- oscura/workflow/__init__.py +13 -0
- oscura/workflow/dag.py +377 -0
- oscura/workflows/__init__.py +58 -0
- oscura/workflows/compliance.py +280 -0
- oscura/workflows/digital.py +272 -0
- oscura/workflows/multi_trace.py +502 -0
- oscura/workflows/power.py +178 -0
- oscura/workflows/protocol.py +492 -0
- oscura/workflows/reverse_engineering.py +639 -0
- oscura/workflows/signal_integrity.py +227 -0
- oscura-0.1.0.dist-info/METADATA +300 -0
- oscura-0.1.0.dist-info/RECORD +463 -0
- oscura-0.1.0.dist-info/entry_points.txt +2 -0
- {oscura-0.0.1.dist-info → oscura-0.1.0.dist-info}/licenses/LICENSE +1 -1
- oscura-0.0.1.dist-info/METADATA +0 -63
- oscura-0.0.1.dist-info/RECORD +0 -5
- {oscura-0.0.1.dist-info → oscura-0.1.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# {{title}}
|
|
2
|
+
|
|
3
|
+
## Report Metadata
|
|
4
|
+
|
|
5
|
+
|Field|Value|
|
|
6
|
+
|---|---|
|
|
7
|
+
|**Input File**|{{input_name}}|
|
|
8
|
+
|**File Size**|{{input_size}}|
|
|
9
|
+
|**Input Type**|{{input_type}}|
|
|
10
|
+
|**Generated**|{{timestamp}}|
|
|
11
|
+
|**Analysis Duration**|{{duration}}|
|
|
12
|
+
|
|
13
|
+
## Analysis Summary
|
|
14
|
+
|
|
15
|
+
|Metric|Count|
|
|
16
|
+
|---|---|
|
|
17
|
+
|Total Analyses|{{total_analyses}}|
|
|
18
|
+
|Successful|{{successful}}|
|
|
19
|
+
|Failed|{{failed}}|
|
|
20
|
+
|Analysis Domains|{{domains_count}}|
|
|
21
|
+
|
|
22
|
+
{{#if has_errors}}
|
|
23
|
+
|
|
24
|
+
> **Warning**: {{failed}} analyses encountered errors. See [Errors](#errors) section for details.
|
|
25
|
+
> {{/if}}
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Table of Contents
|
|
30
|
+
|
|
31
|
+
- [Overview](#overview)
|
|
32
|
+
{{#each domains}}
|
|
33
|
+
- [{{domain_name}}](#{{domain_id}})
|
|
34
|
+
{{/each}}
|
|
35
|
+
{{#if has_errors}}
|
|
36
|
+
- [Errors](#errors)
|
|
37
|
+
{{/if}}
|
|
38
|
+
- [Data Files](#data-files)
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Overview
|
|
43
|
+
|
|
44
|
+
This comprehensive analysis report contains **{{total_analyses}}** analyses across **{{domains_count}}** domains. Analysis completed in **{{duration}}**.
|
|
45
|
+
|
|
46
|
+
{{#if has_errors}}
|
|
47
|
+
**Note**: {{failed}} analyses encountered errors during execution. Check the [Errors](#errors) section below for details.
|
|
48
|
+
{{/if}}
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
{{#each domains}}
|
|
53
|
+
|
|
54
|
+
## {{domain_name}} {#{{domain_id}}}
|
|
55
|
+
|
|
56
|
+
**Statistics**: {{analyses_count}} analyses | {{plots_count}} plots | {{data_files_count}} data files
|
|
57
|
+
|
|
58
|
+
{{#if key_findings}}
|
|
59
|
+
|
|
60
|
+
### Key Findings
|
|
61
|
+
|
|
62
|
+
{{#each key_findings}}
|
|
63
|
+
|
|
64
|
+
- {{this}}
|
|
65
|
+
{{/each}}
|
|
66
|
+
|
|
67
|
+
{{/if}}
|
|
68
|
+
{{#if plots}}
|
|
69
|
+
|
|
70
|
+
### Visualizations
|
|
71
|
+
|
|
72
|
+
{{#each plots}}
|
|
73
|
+
|
|
74
|
+
#### {{title}}
|
|
75
|
+
|
|
76
|
+

|
|
77
|
+
|
|
78
|
+
{{/each}}
|
|
79
|
+
|
|
80
|
+
{{/if}}
|
|
81
|
+
{{#if data_files}}
|
|
82
|
+
|
|
83
|
+
### Data Files
|
|
84
|
+
|
|
85
|
+
{{#each data_files}}
|
|
86
|
+
|
|
87
|
+
- [{{filename}}]({{path}}) - {{format}}
|
|
88
|
+
{{/each}}
|
|
89
|
+
|
|
90
|
+
{{/if}}
|
|
91
|
+
|
|
92
|
+
{{/each}}
|
|
93
|
+
|
|
94
|
+
{{#if has_errors}}
|
|
95
|
+
|
|
96
|
+
## Errors {#errors}
|
|
97
|
+
|
|
98
|
+
The following analyses encountered errors during execution:
|
|
99
|
+
|
|
100
|
+
{{#each errors}}
|
|
101
|
+
|
|
102
|
+
### {{domain}} - {{analysis_name}}
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
{{error_message}}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
{{/each}}
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
{{/if}}
|
|
113
|
+
|
|
114
|
+
## Data Files {#data-files}
|
|
115
|
+
|
|
116
|
+
Full analysis results are available in multiple formats:
|
|
117
|
+
|
|
118
|
+
- [summary.json](summary.json) - Complete JSON output
|
|
119
|
+
- [summary.yaml](summary.yaml) - YAML format for readability
|
|
120
|
+
- [summary.csv](summary.csv) - Tabular data export
|
|
121
|
+
- [index.md](index.md) - This Markdown report
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Technical Details
|
|
126
|
+
|
|
127
|
+
### Analysis Configuration
|
|
128
|
+
|
|
129
|
+
All analyses were executed using the Oscura comprehensive analysis system with the following configuration:
|
|
130
|
+
|
|
131
|
+
- Input file: `{{input_name}}`
|
|
132
|
+
- File size: {{input_size}}
|
|
133
|
+
- Input type: {{input_type}}
|
|
134
|
+
- Analysis duration: {{duration}}
|
|
135
|
+
- Total analyses: {{total_analyses}}
|
|
136
|
+
- Success rate: {{successful}}/{{total_analyses}}
|
|
137
|
+
|
|
138
|
+
### Output Structure
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
output_directory/
|
|
142
|
+
├── index.html # Interactive HTML report
|
|
143
|
+
├── index.md # This Markdown report
|
|
144
|
+
├── summary.json # Complete JSON data
|
|
145
|
+
├── summary.yaml # YAML formatted data
|
|
146
|
+
├── summary.csv # CSV export
|
|
147
|
+
{{#each domains}}
|
|
148
|
+
├── {{domain_id}}/ # {{domain_name}} outputs
|
|
149
|
+
{{#if plots}}
|
|
150
|
+
│ ├── plots/ # Visualization files
|
|
151
|
+
{{#each plots}}
|
|
152
|
+
│ │ ├── {{filename}}
|
|
153
|
+
{{/each}}
|
|
154
|
+
{{/if}}
|
|
155
|
+
{{#if data_files}}
|
|
156
|
+
│ └── data/ # Analysis data files
|
|
157
|
+
{{#each data_files}}
|
|
158
|
+
│ ├── {{filename}}
|
|
159
|
+
{{/each}}
|
|
160
|
+
{{/if}}
|
|
161
|
+
{{/each}}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Viewing This Report
|
|
165
|
+
|
|
166
|
+
- **HTML Version**: Open `index.html` in any modern web browser for an interactive experience with dark mode support
|
|
167
|
+
- **Markdown Version**: View this file in any Markdown-compatible viewer or editor
|
|
168
|
+
- **PDF Export**: The HTML version is print-optimized for PDF generation via browser print
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
_Generated by Oscura Comprehensive Analysis System_
|
|
173
|
+
_Report timestamp: {{timestamp}}_
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"""JSON Schema definitions for TraceKit configuration types.
|
|
2
|
+
|
|
3
|
+
This module provides JSON Schema definitions for validating various
|
|
4
|
+
configuration file types used in TraceKit, including packet formats,
|
|
5
|
+
device mappings, bus configurations, and protocol definitions.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Example:
|
|
9
|
+
>>> from oscura.schemas import load_schema, validate_config
|
|
10
|
+
>>> schema = load_schema("packet_format")
|
|
11
|
+
>>> validate_config(config_dict, "packet_format")
|
|
12
|
+
True
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import json
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Any
|
|
20
|
+
|
|
21
|
+
from oscura.config.schema import (
|
|
22
|
+
ConfigSchema,
|
|
23
|
+
get_schema_registry,
|
|
24
|
+
register_schema,
|
|
25
|
+
validate_against_schema,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
__all__ = [
|
|
29
|
+
"SCHEMA_NAMES",
|
|
30
|
+
"get_schema_path",
|
|
31
|
+
"load_schema",
|
|
32
|
+
"register_builtin_schemas",
|
|
33
|
+
"validate_config",
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
# Schema type names
|
|
37
|
+
SCHEMA_NAMES = [
|
|
38
|
+
"packet_format",
|
|
39
|
+
"device_mapping",
|
|
40
|
+
"bus_configuration",
|
|
41
|
+
"protocol_definition",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def get_schema_path(schema_name: str) -> Path:
|
|
46
|
+
"""Get the file path for a schema definition.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
schema_name: Schema name (e.g., "packet_format").
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
Path to the JSON schema file.
|
|
53
|
+
|
|
54
|
+
Raises:
|
|
55
|
+
ValueError: If schema name is not recognized.
|
|
56
|
+
FileNotFoundError: If schema file does not exist.
|
|
57
|
+
"""
|
|
58
|
+
if schema_name not in SCHEMA_NAMES:
|
|
59
|
+
raise ValueError(f"Unknown schema name: {schema_name}. Available schemas: {SCHEMA_NAMES}")
|
|
60
|
+
|
|
61
|
+
schema_dir = Path(__file__).parent
|
|
62
|
+
schema_file = schema_dir / f"{schema_name}.json"
|
|
63
|
+
|
|
64
|
+
if not schema_file.exists():
|
|
65
|
+
raise FileNotFoundError(f"Schema file not found: {schema_file}")
|
|
66
|
+
|
|
67
|
+
return schema_file
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def load_schema(schema_name: str) -> dict[str, Any]:
|
|
71
|
+
"""Load a JSON schema definition from disk.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
schema_name: Schema name (e.g., "packet_format").
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
JSON schema dictionary.
|
|
78
|
+
"""
|
|
79
|
+
schema_path = get_schema_path(schema_name)
|
|
80
|
+
|
|
81
|
+
with open(schema_path) as f:
|
|
82
|
+
result: dict[str, Any] = json.load(f)
|
|
83
|
+
return result
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def validate_config(
|
|
87
|
+
config: dict[str, Any],
|
|
88
|
+
schema_name: str,
|
|
89
|
+
*,
|
|
90
|
+
strict: bool = False,
|
|
91
|
+
) -> bool:
|
|
92
|
+
"""Validate a configuration dictionary against a schema.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
config: Configuration dictionary to validate.
|
|
96
|
+
schema_name: Schema name (e.g., "packet_format").
|
|
97
|
+
strict: If True, fail on additional properties.
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
True if validation passes.
|
|
101
|
+
|
|
102
|
+
Example:
|
|
103
|
+
>>> config = {"name": "test", "packet": {...}, "header": {...}}
|
|
104
|
+
>>> validate_config(config, "packet_format")
|
|
105
|
+
True
|
|
106
|
+
"""
|
|
107
|
+
# Use the existing validation system from config.schema
|
|
108
|
+
return validate_against_schema(config, schema_name, strict=strict)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def register_builtin_schemas() -> None:
|
|
112
|
+
"""Register all built-in configuration schemas.
|
|
113
|
+
|
|
114
|
+
This function registers the following schemas:
|
|
115
|
+
- packet_format: Binary packet format configurations
|
|
116
|
+
- device_mapping: Device ID to name mappings
|
|
117
|
+
- bus_configuration: Parallel bus configurations
|
|
118
|
+
- protocol_definition: Protocol DSL definitions
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
The schemas are registered with the global SchemaRegistry and can
|
|
123
|
+
be accessed via validate_against_schema() or get_schema_registry().
|
|
124
|
+
"""
|
|
125
|
+
registry = get_schema_registry()
|
|
126
|
+
|
|
127
|
+
# Load and register each schema
|
|
128
|
+
for schema_name in SCHEMA_NAMES:
|
|
129
|
+
# Skip if already registered
|
|
130
|
+
if registry.has_schema(schema_name):
|
|
131
|
+
continue
|
|
132
|
+
|
|
133
|
+
schema_dict = load_schema(schema_name)
|
|
134
|
+
|
|
135
|
+
# Extract version from $id if present
|
|
136
|
+
version = "1.0.0" # default
|
|
137
|
+
if "$id" in schema_dict:
|
|
138
|
+
# Extract version from URI like .../v1.0.0.json
|
|
139
|
+
schema_id = schema_dict["$id"]
|
|
140
|
+
if "/v" in schema_id:
|
|
141
|
+
version_part = schema_id.split("/v")[-1]
|
|
142
|
+
version = version_part.replace(".json", "")
|
|
143
|
+
|
|
144
|
+
# Create ConfigSchema object
|
|
145
|
+
config_schema = ConfigSchema(
|
|
146
|
+
name=schema_name,
|
|
147
|
+
version=version,
|
|
148
|
+
schema=schema_dict,
|
|
149
|
+
description=schema_dict.get("description", ""),
|
|
150
|
+
uri=schema_dict.get("$id"),
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
# Register with global registry
|
|
154
|
+
register_schema(config_schema, set_default=True)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
# Auto-register schemas on module import
|
|
158
|
+
register_builtin_schemas()
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://tracekit.io/schemas/bus_configuration.json",
|
|
4
|
+
"title": "Bus Configuration Schema",
|
|
5
|
+
"description": "Schema for validating parallel bus configurations for multi-bit protocols (CFG-001).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["name", "settings"],
|
|
8
|
+
"additionalProperties": true,
|
|
9
|
+
"properties": {
|
|
10
|
+
"name": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "Bus configuration identifier",
|
|
13
|
+
"pattern": "^[a-zA-Z][a-zA-Z0-9_]*$",
|
|
14
|
+
"minLength": 1
|
|
15
|
+
},
|
|
16
|
+
"version": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "Configuration version",
|
|
19
|
+
"pattern": "^\\d+\\.\\d+$"
|
|
20
|
+
},
|
|
21
|
+
"description": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Human-readable description"
|
|
24
|
+
},
|
|
25
|
+
"settings": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"description": "Global bus settings",
|
|
28
|
+
"properties": {
|
|
29
|
+
"active_low": {
|
|
30
|
+
"type": "boolean",
|
|
31
|
+
"description": "Signals are active-low (inverted)"
|
|
32
|
+
},
|
|
33
|
+
"sample_on": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"enum": ["rising", "falling", "both"],
|
|
36
|
+
"description": "Sample on clock/timing pulse edge"
|
|
37
|
+
},
|
|
38
|
+
"bit_numbering": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"enum": ["lsb_0", "msb_0"],
|
|
41
|
+
"description": "Bit numbering convention"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"additionalProperties": false
|
|
45
|
+
},
|
|
46
|
+
"data_bus": {
|
|
47
|
+
"type": "object",
|
|
48
|
+
"description": "Data bus definition",
|
|
49
|
+
"required": ["name", "width", "bits"],
|
|
50
|
+
"properties": {
|
|
51
|
+
"name": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"description": "Bus name",
|
|
54
|
+
"pattern": "^[a-zA-Z][a-zA-Z0-9_]*$"
|
|
55
|
+
},
|
|
56
|
+
"width": {
|
|
57
|
+
"type": "integer",
|
|
58
|
+
"minimum": 1,
|
|
59
|
+
"maximum": 128,
|
|
60
|
+
"description": "Bus width in bits"
|
|
61
|
+
},
|
|
62
|
+
"description": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"description": "Bus description"
|
|
65
|
+
},
|
|
66
|
+
"active_low": {
|
|
67
|
+
"type": "boolean",
|
|
68
|
+
"description": "Override global active_low setting"
|
|
69
|
+
},
|
|
70
|
+
"bits": {
|
|
71
|
+
"type": "array",
|
|
72
|
+
"description": "Bit mappings from channel to position",
|
|
73
|
+
"minItems": 1,
|
|
74
|
+
"items": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"required": ["channel", "bit"],
|
|
77
|
+
"properties": {
|
|
78
|
+
"channel": {
|
|
79
|
+
"type": "integer",
|
|
80
|
+
"minimum": 0,
|
|
81
|
+
"description": "Source channel index"
|
|
82
|
+
},
|
|
83
|
+
"bit": {
|
|
84
|
+
"type": "integer",
|
|
85
|
+
"minimum": 0,
|
|
86
|
+
"description": "Bit position in bus"
|
|
87
|
+
},
|
|
88
|
+
"name": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"description": "Signal name",
|
|
91
|
+
"pattern": "^[a-zA-Z][a-zA-Z0-9_]*$"
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"additionalProperties": false
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"additionalProperties": false
|
|
99
|
+
},
|
|
100
|
+
"address_bus": {
|
|
101
|
+
"type": "object",
|
|
102
|
+
"description": "Address bus definition",
|
|
103
|
+
"required": ["name", "width", "bits"],
|
|
104
|
+
"properties": {
|
|
105
|
+
"name": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"description": "Bus name",
|
|
108
|
+
"pattern": "^[a-zA-Z][a-zA-Z0-9_]*$"
|
|
109
|
+
},
|
|
110
|
+
"width": {
|
|
111
|
+
"type": "integer",
|
|
112
|
+
"minimum": 1,
|
|
113
|
+
"maximum": 128,
|
|
114
|
+
"description": "Bus width in bits"
|
|
115
|
+
},
|
|
116
|
+
"description": {
|
|
117
|
+
"type": "string",
|
|
118
|
+
"description": "Bus description"
|
|
119
|
+
},
|
|
120
|
+
"active_low": {
|
|
121
|
+
"type": "boolean",
|
|
122
|
+
"description": "Override global active_low setting"
|
|
123
|
+
},
|
|
124
|
+
"bits": {
|
|
125
|
+
"type": "array",
|
|
126
|
+
"description": "Bit mappings from channel to position",
|
|
127
|
+
"minItems": 1,
|
|
128
|
+
"items": {
|
|
129
|
+
"type": "object",
|
|
130
|
+
"required": ["channel", "bit"],
|
|
131
|
+
"properties": {
|
|
132
|
+
"channel": {
|
|
133
|
+
"type": "integer",
|
|
134
|
+
"minimum": 0,
|
|
135
|
+
"description": "Source channel index"
|
|
136
|
+
},
|
|
137
|
+
"bit": {
|
|
138
|
+
"type": "integer",
|
|
139
|
+
"minimum": 0,
|
|
140
|
+
"description": "Bit position in bus"
|
|
141
|
+
},
|
|
142
|
+
"name": {
|
|
143
|
+
"type": "string",
|
|
144
|
+
"description": "Signal name",
|
|
145
|
+
"pattern": "^[a-zA-Z][a-zA-Z0-9_]*$"
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
"additionalProperties": false
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"additionalProperties": false
|
|
153
|
+
},
|
|
154
|
+
"control_signals": {
|
|
155
|
+
"type": "array",
|
|
156
|
+
"description": "Control signal definitions",
|
|
157
|
+
"items": {
|
|
158
|
+
"type": "object",
|
|
159
|
+
"required": ["name", "channel"],
|
|
160
|
+
"properties": {
|
|
161
|
+
"name": {
|
|
162
|
+
"type": "string",
|
|
163
|
+
"description": "Signal name",
|
|
164
|
+
"pattern": "^[a-zA-Z][a-zA-Z0-9_]*$"
|
|
165
|
+
},
|
|
166
|
+
"channel": {
|
|
167
|
+
"type": "integer",
|
|
168
|
+
"minimum": 0,
|
|
169
|
+
"description": "Source channel index"
|
|
170
|
+
},
|
|
171
|
+
"active_low": {
|
|
172
|
+
"type": "boolean",
|
|
173
|
+
"description": "Signal is active-low"
|
|
174
|
+
},
|
|
175
|
+
"description": {
|
|
176
|
+
"type": "string",
|
|
177
|
+
"description": "Signal description"
|
|
178
|
+
},
|
|
179
|
+
"short_name": {
|
|
180
|
+
"type": "string",
|
|
181
|
+
"description": "Short name/abbreviation",
|
|
182
|
+
"maxLength": 8
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
"additionalProperties": false
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
"timing": {
|
|
189
|
+
"type": "object",
|
|
190
|
+
"description": "Timing constraints and validation",
|
|
191
|
+
"properties": {
|
|
192
|
+
"clock_period_ns": {
|
|
193
|
+
"type": "number",
|
|
194
|
+
"exclusiveMinimum": 0,
|
|
195
|
+
"description": "Clock period in nanoseconds"
|
|
196
|
+
},
|
|
197
|
+
"setup_time_ns": {
|
|
198
|
+
"type": "number",
|
|
199
|
+
"minimum": 0,
|
|
200
|
+
"description": "Setup time requirement in nanoseconds"
|
|
201
|
+
},
|
|
202
|
+
"hold_time_ns": {
|
|
203
|
+
"type": "number",
|
|
204
|
+
"minimum": 0,
|
|
205
|
+
"description": "Hold time requirement in nanoseconds"
|
|
206
|
+
},
|
|
207
|
+
"pulse_width_ns": {
|
|
208
|
+
"type": "object",
|
|
209
|
+
"description": "Pulse width requirements by signal type",
|
|
210
|
+
"additionalProperties": {
|
|
211
|
+
"type": "number",
|
|
212
|
+
"minimum": 0
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"additionalProperties": false
|
|
217
|
+
},
|
|
218
|
+
"transactions": {
|
|
219
|
+
"type": "object",
|
|
220
|
+
"description": "Transaction decoding rules",
|
|
221
|
+
"properties": {
|
|
222
|
+
"types": {
|
|
223
|
+
"type": "array",
|
|
224
|
+
"description": "Transaction type definitions",
|
|
225
|
+
"items": {
|
|
226
|
+
"type": "object",
|
|
227
|
+
"required": ["name", "conditions"],
|
|
228
|
+
"properties": {
|
|
229
|
+
"name": {
|
|
230
|
+
"type": "string",
|
|
231
|
+
"description": "Transaction type name",
|
|
232
|
+
"pattern": "^[a-zA-Z][a-zA-Z0-9_]*$"
|
|
233
|
+
},
|
|
234
|
+
"conditions": {
|
|
235
|
+
"type": "object",
|
|
236
|
+
"description": "Signal conditions for this transaction",
|
|
237
|
+
"additionalProperties": {
|
|
238
|
+
"type": "boolean"
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
"sample_on": {
|
|
242
|
+
"type": "string",
|
|
243
|
+
"description": "Control signal to sample on"
|
|
244
|
+
},
|
|
245
|
+
"capture": {
|
|
246
|
+
"type": "object",
|
|
247
|
+
"description": "Buses/signals to capture",
|
|
248
|
+
"additionalProperties": {
|
|
249
|
+
"type": "string"
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
"additionalProperties": false
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
"additionalProperties": false
|
|
258
|
+
},
|
|
259
|
+
"instruction_decode": {
|
|
260
|
+
"type": "object",
|
|
261
|
+
"description": "Instruction decoding (if data contains opcodes)",
|
|
262
|
+
"properties": {
|
|
263
|
+
"enabled": {
|
|
264
|
+
"type": "boolean",
|
|
265
|
+
"description": "Enable instruction decoding"
|
|
266
|
+
},
|
|
267
|
+
"opcode_bits": {
|
|
268
|
+
"type": "array",
|
|
269
|
+
"description": "Bit range for opcode [start, end]",
|
|
270
|
+
"items": { "type": "integer", "minimum": 0 },
|
|
271
|
+
"minItems": 2,
|
|
272
|
+
"maxItems": 2
|
|
273
|
+
},
|
|
274
|
+
"opcodes": {
|
|
275
|
+
"type": "object",
|
|
276
|
+
"description": "Opcode to instruction mappings (keys can be integers or binary/hex strings)",
|
|
277
|
+
"additionalProperties": {
|
|
278
|
+
"type": "object",
|
|
279
|
+
"required": ["name"],
|
|
280
|
+
"properties": {
|
|
281
|
+
"name": {
|
|
282
|
+
"type": "string",
|
|
283
|
+
"description": "Instruction mnemonic"
|
|
284
|
+
},
|
|
285
|
+
"description": {
|
|
286
|
+
"type": "string",
|
|
287
|
+
"description": "Instruction description"
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
"additionalProperties": false
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
"additionalProperties": false
|
|
295
|
+
},
|
|
296
|
+
"output": {
|
|
297
|
+
"type": "object",
|
|
298
|
+
"description": "Output formatting options",
|
|
299
|
+
"properties": {
|
|
300
|
+
"format": {
|
|
301
|
+
"type": "string",
|
|
302
|
+
"enum": ["raw", "transaction", "annotated"],
|
|
303
|
+
"description": "Output format type"
|
|
304
|
+
},
|
|
305
|
+
"timestamp_format": {
|
|
306
|
+
"type": "string",
|
|
307
|
+
"enum": ["absolute", "relative_us", "relative_ns", "sample_index"],
|
|
308
|
+
"description": "Timestamp format"
|
|
309
|
+
},
|
|
310
|
+
"include_raw_values": {
|
|
311
|
+
"type": "boolean",
|
|
312
|
+
"description": "Include raw values in output"
|
|
313
|
+
},
|
|
314
|
+
"hex_format": {
|
|
315
|
+
"type": "boolean",
|
|
316
|
+
"description": "Display values in hexadecimal"
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
"additionalProperties": false
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|