oep-client-python 0.0.32__tar.gz → 0.0.33__tar.gz
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.
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/CHANGELOG.md +10 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/PKG-INFO +1 -1
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/spec-follow-notes.ja.md +39 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/pyproject.toml +1 -1
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/__init__.py +1 -1
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/__main__.py +8 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/config.py +24 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/endpoint.py +38 -12
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/registry.py +4 -4
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/riscv.py +16 -1
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_bench.py +5 -3
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32+1491c13-0.0.31-20261016T133559.json +393 -0
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32+672bf7b-0.0.32-20261016T164655.json +391 -0
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131458.json +372 -0
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131510.json +162 -0
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131526.json +372 -0
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131532.json +372 -0
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131656.json +361 -0
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131703.json +372 -0
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131708.json +372 -0
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132050.json +364 -0
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132057.json +364 -0
- oep_client_python-0.0.33/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132104.json +364 -0
- oep_client_python-0.0.33/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+1491c13-0.0.31-20261016T133501.json +752 -0
- oep_client_python-0.0.33/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+672bf7b-0.0.32-20261016T164559.json +753 -0
- oep_client_python-0.0.33/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T130922.json +719 -0
- oep_client_python-0.0.33/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T131024.json +228 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/test_probe.py +15 -2
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/spec/oep-v1.toml +18 -1
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_config.py +2 -1
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_host_rules_2026_10_02.py +2 -2
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_passthrough.py +2 -0
- oep_client_python-0.0.33/tests/test_rvswd_rest.py +61 -0
- oep_client_python-0.0.33/tests/vectors/SPEC_COMMIT +1 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/SPEC_SHA256 +3 -3
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/ops.json +4 -4
- oep_client_python-0.0.32/tests/vectors/SPEC_COMMIT +0 -1
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/.gitignore +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/LICENSE +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/README.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/README.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/README.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/allocator-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/analog-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/analog-payload-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/arm-adi-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/attach-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/block-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/capture-group-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/capture-group-geometry-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/capture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/capture-serial-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/capture-timeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/capture-timeline-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/clock-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/config-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/config-execution-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/config-fallback-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/config-paging-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/config-power-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/config-storage-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/conformance-checks.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/conformance-spec-compatibility.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/core-fixed-fields-review.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/core-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/corr-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/cut-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/data-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/debug-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/dependency-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/discovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/dmseq-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/dmseq-target-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/execution-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/exhausted-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/fixture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/gpio-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/gpio-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/hardware-configuration.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/hardware-quickstart.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/hardware-schema.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/host-core-shapes-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/host-deadline-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/host-notification-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/host-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/host-resend-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/host-tlv-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/host-value-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/host-wait-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/i2c-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/interface-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/interface-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/link-routes-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/link-transfer-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/logic-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/mailbox-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/notification-output-sample.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/notification-retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/notification-sequence-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/oep-declaration-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/oep-example-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/outcome-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/pin-constraints-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/pipeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/port-speed-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/probe-input-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/recovery-races-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/refusal-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/registered-ops-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/replay-pressure-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/reset-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/resource-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/response-race-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/restart-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/retention-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/retry-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/route-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/run-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/scan-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/scan-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/selected-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/session-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/session-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/spec-a09fa45-sections.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/spi-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/stage9-rule-trace.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/step-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/subscription-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/tcp-recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/testing-consumers.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/testing-policy.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/tlv-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/README.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/capture.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/common.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/console.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/core.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/debug.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/fixture.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/link.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/plan.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/probe-config.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/restart.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/capture.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/common.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/console.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/core.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/debug.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/fixture.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/link.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/plan.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/probe-config.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/restart.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/sample-audit.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review/transports.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/capture.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/common.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/console.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/core.0.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/core.1-6.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/core.7-13.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/debug.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/fixture.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/link.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/plan.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/probe-config.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/restart.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review2/transports.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review3/capture.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review3/core-a.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review3/core-b.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review3/debug-a.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review3/debug-b.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review3/rest.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review4/capture.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review4/core-rest.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review4/core-sessions.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review4/debug.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review4/fixture-console.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review4/small.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review5/capture.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review5/core-a.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review5/core-b.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review5/debug-targets.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review5/debug-wires.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review5/small.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review6/capture-console.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review6/core-early.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review6/core-late.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review6/debug-a.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review6/debug-b.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review6/rest.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review7/exact-payload.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review7/host-recovery.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review7/optional-as-required.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review7/request-validation.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review7/state-and-resources.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review7/tlv-readers.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review8/core-1.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review8/core-2.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/review8/debug.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/trace/transports.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/uart-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/uart-stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/usb-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/wire-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/docs/writer-lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/arm.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/capture.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/catalog.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/ch32_flash.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/cobs.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_allocator.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_allocator_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_analog.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_analog_payload.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_analog_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_arm_adi.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_arm_adi_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_attach.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_attach_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_block_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_blocks.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_capture_group.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_capture_group_geometry.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_capture_group_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_capture_metadata.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_capture_serial.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_capture_serial_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_capture_timeline.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_capture_timeline_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_clock.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_clock_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config_execution.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config_execution_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config_fallback.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config_fallback_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config_paging.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config_paging_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config_power_loss.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config_power_loss_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config_storage.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_config_storage_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_core_fixed_fields.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_core_smoke.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_corr.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_cut.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_cut_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_data.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_data_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_debug.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_debug_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_dependencies.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_dependency_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_discovery.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_dmseq.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_dmseq_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_dmseq_target.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_dmseq_target_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_execution_order.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_execution_order_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_exhausted.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_exhausted_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_fixture_metadata.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_gpio.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_gpio_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_gpio_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_core.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_core_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_deadline.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_deadline_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_notifications.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_notifications_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_request_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_requests.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_resend.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_resend_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_tlv.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_tlv_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_values.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_values_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_wait.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_host_wait_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_i2c.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_i2c_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_interface_smoke.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_interfaces.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_lease.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_lease_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_link_routes.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_link_routes_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_link_transfer_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_link_transfers.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_logic.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_logic_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_mailbox.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_mailbox_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_notification_retention.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_notification_retention_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_notification_sequence.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_notification_sequence_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_oep_declarations.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_oep_smoke.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_outcome_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_outcomes.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_pipeline.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_pipeline_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_port_speed.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_port_speed_execution.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_port_speed_execution_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_port_speed_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_probe_input.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_probe_input_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_recovery.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_recovery_race_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_recovery_races.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_recovery_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_refusal_order.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_refusal_order_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_registered_ops.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_replay_pressure.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_reset.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_reset_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_resource_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_resources.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_response_race.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_response_race_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_restart.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_restart_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_retention.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_retention_lifecycle.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_retention_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_retention_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_retry.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_retry_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_route_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_routes.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_run.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_run_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_scan.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_scan_options.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_scan_options_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_scan_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_selected_metadata.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_serial.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_session_loss.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_session_loss_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_session_smoke.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_spi.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_spi_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_step.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_step_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_stream.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_stream_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_subscription_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_subscriptions.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_tcp.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_tcp_peers.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_tcp_recovery.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_tcp_recovery_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_tlv_requests.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_uart.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_uart_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_uart_stream.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_uart_stream_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_usb.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_usb_cases.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_usb_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_wire_options.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_wire_options_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_writer_lease.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/conformance_writer_lease_sample.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/console.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/core.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/decode.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/discovery.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/dump.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/fixture.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/frames.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/hardware.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/hid_stream.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/host.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/interfaces.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/kept_session.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/link.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/linktest.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/message.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/names.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/pins.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/pytest_conformance.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/rp2350.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/speed_record.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/targets.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/uiapduino.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/usb_stream.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_allocator_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_analog_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_arm_adi_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_attach_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_bench_capture.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_bench_mdns.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_bench_serial.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_bench_serve.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_bench_usb.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_block_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_capture_group_geometry_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_capture_group_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_capture_metadata_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_capture_timeline_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_clock_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_config_execution_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_config_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_config_paging_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_config_power_loss_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_config_storage_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_core.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_cut_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_data_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_debug_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_declaration_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_dependency_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_dmseq_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_dmseq_target_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_fixture_metadata_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_gpio_lifecycle_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_gpio_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_i2c_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_link_routes_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_link_transfer_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_logic_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_mailbox_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_names.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_notification_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_oep_declaration_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_outcome_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_pipeline_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_port_speed_execution_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_port_speed_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_registered_ops_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_reset_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_resource_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_restart_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_retention_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_retry_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_route_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_run_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_scan_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_scan_options_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_selected_metadata_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_spi_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_step_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_stream_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_tlv_request_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_uart_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_wire_options_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/src/oep_client/virtual_writer_lease_model.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/conftest.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/equipment/.env.example +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/equipment/test_core_contract.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/equipment/test_preflight.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/fixtures/hardware.virtual.toml +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/.env.example +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/.env.virtual.example +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/README.ja.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/README.md +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/__init__.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/boards.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/conftest.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/firmware.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/flash.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/hardware.example.toml +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/hardware.resolved.example.toml +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/record.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/.gitignore +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/9489dd2ae0953650-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/9489dd2ae0953650-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/9489dd2ae0953650-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+4fad559-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.25-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+e877631-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ac80e07-0.0.27.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27-0.0.27.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0e343c6-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+0f013b7-0.0.28.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+1c940ca-0.0.28.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+4ef21db+4ef21db-dirty-0.0.28.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+68d9694-0.0.28.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ec38b1d-0.0.28.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/hw/test_harness.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/spec_names.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_capabilities.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_capture.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_cobs.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_config_disable.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_config_idle.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_config_network.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_allocator.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_analog.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_analog_payload.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_arm_adi.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_attach.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_blocks.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_capture_group.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_capture_group_geometry.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_capture_metadata.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_capture_serial.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_capture_timeline.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_clock.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_config.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_config_execution.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_config_fallback.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_config_paging.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_config_power_loss.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_config_storage.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_core_fixed_fields.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_core_smoke.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_corr.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_cut.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_data.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_debug.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_dependencies.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_discovery.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_dmseq.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_dmseq_target.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_execution_order.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_exhausted.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_fixture_metadata.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_gpio.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_host_core.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_host_critical_calls.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_host_deadline.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_host_notifications.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_host_requests.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_host_resend.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_host_tlv.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_host_values.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_host_wait.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_i2c.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_interface_smoke.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_interfaces.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_lease.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_link_routes.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_link_transfers.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_logic.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_mailbox.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_notification_output.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_notification_retention.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_notification_sequence.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_oep_declarations.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_oep_smoke.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_outcomes.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_pipeline.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_port_speed.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_port_speed_execution.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_probe_input.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_reconnect.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_recovery.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_recovery_races.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_refusal_order.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_registered_ops.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_replay_pressure.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_replay_records_optional.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_reset.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_resources.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_response_race.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_restart.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_retention.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_retention_lifecycle.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_retry.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_routes.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_run.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_scan.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_scan_options.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_selected_metadata.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_serial.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_session_loss.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_session_smoke.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_spec_guard.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_spi.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_step.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_stream.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_subscriptions.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_tcp.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_tcp_peers.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_tcp_recovery.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_tlv_requests.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_uart.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_uart_stream.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_usb.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_wire_options.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_conformance_writer_lease.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_console_queue_and_reset_settle.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_debug_attach.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_extension_patterns.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_fixture_targets.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_flash_console.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_gpio_drive_and_serve_options.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_hardware.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_hid_stream.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_host_boot_lifecycle.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_host_rules_2026_10_06.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_host_wait_bound.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_interfaces.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_link_drop.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_link_host.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_link_serial.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_linktest.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_literals.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_minimal_ops.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_no_resume.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_pins.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_plan.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_port_speed.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_request_tails.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_restart.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_resubscribe_after_reopen.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review4_capture.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review4_debug.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review4_small.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review5_capture.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review5_core_a.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review5_core_b.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review5_debug_targets.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review5_debug_wires.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review5_small.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review6_capture_console.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review6_core_early.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review6_core_late.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review6_debug_a.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review6_debug_b.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review6_rest.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review7_exact_payload.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review7_host_recovery.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review7_request_validation.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review7_state_resources.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review7_tlv_readers.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review8_core_1.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review8_core_2.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_review8_debug.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_session.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_spec_283e5b5.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_spec_2c6d18d.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_spec_3cc50c8.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_spec_sections.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_spec_vectors.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_target_parts.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_tcp_discovery.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_capture.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_common.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_console.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_core.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_core_names.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_debug.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_fixture.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_link.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_plan.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_probe_config.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_restart.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_trace_transports.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_usb_identity.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_usb_stream.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_analog_roles.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_announce.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_changing_trigger.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_channel_time.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_initial_trigger_time.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_lifetime.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_notifications.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_one_shot_time.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_pretrigger.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_query.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_rates.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_requests.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_resume_calibration.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_trigger_modes.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_capture_waiting.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_pin_constraints.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_rules_2026_10_02.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_rules_2026_10_06.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_serve_reboot.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_serve_tcp_connections.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_spec.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_bench_targets.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_core.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/test_virtual_core_bool.py +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/checks.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/cobs.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/confirm.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/core_extensions.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/core_lifecycle.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/core_policy.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/discovery.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/headers.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/interface_boundaries.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/interface_profiles.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/logic_layout.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/ops_encoding.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/refusals.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/tests/vectors/sessions.json +0 -0
- {oep_client_python-0.0.32 → oep_client_python-0.0.33}/udev/70-oep-probe.rules +0 -0
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.0.33
|
|
6
|
+
- (JA) oep-spec ba4e8ee(debug §3.1、core §12 規則 8、probe.config の rvswd-rest)に追従。rvswd の線の休ませ方は、attach の idle_clock が無ければ
|
|
7
|
+
probe が決める(その SWCLK の channel の設定 rvswd-rest、無ければ target_id の系統: CH32L103 は low)。仮想ベンチはそのとおりに休ませ、attach の応答と
|
|
8
|
+
connections に使う休ませ方を返す。クライアントは `Wire.idle_clock`、`ConnectionInfo.idle_clock` で読み、`config.RvswdRest` と
|
|
9
|
+
`oep config rvswd-rest PROBE CH auto|high|low` で口ごとに自動を止められる。
|
|
10
|
+
- (JA) oep-spec 91209aa の線の名前(swdio / swclk / swio / rx / tx)を registry から引く(`config.LINE_NAMES`)。console-passthrough は 13 byte のまま
|
|
11
|
+
(91209aa の idle_clock の欄は oep-spec edbe841 で取り下げ)。
|
|
12
|
+
- (JA) tests/hw: `OEP_HW_IDLE_CLOCK=low|high` で rvswd の attach に休ませ方を明示できる。無ければ probe の判定に任せ、結果に使った休ませ方を記録する。
|
|
13
|
+
- (JA) CI: equipment の段が走ったときだけ証跡を upload する(テストの段が落ちると .pytest-results/ が空で警告が出ていた)。
|
|
14
|
+
|
|
5
15
|
## 0.0.32
|
|
6
16
|
- (JA) 仮想ベンチに `--minimal-ops`(`virtual_bench.minimal_ops`)を足す。console と fixture UART の任意の op(marks、clear、mark、write)を
|
|
7
17
|
ops から外し、unknown_operation で答える。host が任意の op を describe の ops を見ずに使っていないかを、実機なしで試せる
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: oep-client-python
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.33
|
|
4
4
|
Summary: Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a virtual bench
|
|
5
5
|
Project-URL: Homepage, https://github.com/Open-Embedded-Probe/oep-client-python
|
|
6
6
|
Project-URL: Repository, https://github.com/Open-Embedded-Probe/oep-client-python
|
|
@@ -595,3 +595,42 @@ B にした。core §12 の規則 7 を「他者は名前で識別する所か
|
|
|
595
595
|
|
|
596
596
|
**仕様への提案の候補(まだ出していない)**: 共有ベクタのうち「仕様書の例の probe」に固有の値(fn 19 の CPU 捕捉の 16 ms、analog の skew や scale の値)を前提にするものは、
|
|
597
597
|
実装の harness が名前で見分けて飛ばしている。ベクタに「例の probe の構成」を示す欄があれば、各実装が機械的に扱える。小さいので、ch32rv の追従の後にまとめて判断する。
|
|
598
|
+
|
|
599
|
+
## 実機の入れ替え(2026-10-16、リリース 0.0.32)
|
|
600
|
+
|
|
601
|
+
既存の OEP プローブ 6 台(RP2040 `53032847491a571c`、Pico 2 `9489dd2ae0953650`、P4 `30eda0ea068b` / `30eda0e34a0e`、
|
|
602
|
+
P4X `e8f60ae84e28`、classic ESP32 `0070070d9394`)を Arduino 0.0.32 のリリース版に入れ替え、設定を新しい形(ラベル `S.N`、素通し、wifi)で入れ直した。
|
|
603
|
+
|
|
604
|
+
| # | 見つけたこと | 判断 |
|
|
605
|
+
|---|---|---|
|
|
606
|
+
| H1 | capture の start の応答に、Arduino が仕様に無い blocking_ms(u32) を generation の前に残していた(logic、analog)。仕様の形で読む host は generation を TLV と読んで落ちる。共有ベクタは start の応答を見ていなかった | Arduino を直した(ffd6a14、未リリース。実機は 0.0.32 のまま)。**ベクタへの提案の候補**: capture / analog の start の応答の形 |
|
|
607
|
+
| H2 | CH32L103(Pico 2 の rvswd)は、線を休ませる間に SWCLK が high だと debug module がリセットされる(DMCONTROL 0、hart が走る。リセット要因は増えない)。idle_clock low の attach なら halt が保たれる。旧設定の slot は idle_clock low を持っていた | tests/hw に OEP_HW_IDLE_CLOCK を足した。**仕様への提案の候補**: probe.config の console-passthrough(§1.2)に idle_clock が無く、L103 のような target では素通しを使えない(attach と同じ値を持たせる)。ベンチでは L103 の素通しを外した |
|
|
608
|
+
|
|
609
|
+
### 決定: rvswd の線の休ませ方(2026-10-16、所有者が決定。oep-spec 3b32b12 / ba4e8ee)
|
|
610
|
+
|
|
611
|
+
仕様にはまだ入れていない(oep-spec edbe841 で 1ad434f と 91209aa の欄を取り下げ、判断基準を probe ガイド §12 に書いた e25a654)。実装の試作は
|
|
612
|
+
oep-client-python の `wip/rvswd-rest` ブランチ。
|
|
613
|
+
|
|
614
|
+
- 事実: CH32L103 は high で休ませると約 1 ms で debug module がリセットされる。CH32X035 は low で休ませると attach できない。attach は 2 本とも high
|
|
615
|
+
から始まるので、どの系統でも target_id(DMI 0x7F)までは読める。ch32rv は今、L103 を見たら low で attach し直す回避を持っている(B になれば外す)。
|
|
616
|
+
- 方向(所有者の意見): 自動の決定は足してよい。初期設定はブラウザから行う予定で、時間の猶予が無い操作は host から間に合わない。
|
|
617
|
+
ただし自動を OFF にする手段もあった方がよい。
|
|
618
|
+
- 案:
|
|
619
|
+
1. attach に idle_clock の TLV が無ければ、probe は target_id の系統(bit 31〜20)から決める。系統の表は registry(名前で引くデータ)。
|
|
620
|
+
2. 使った休ませ方は attach の応答と connections に必ず出す。
|
|
621
|
+
3. OFF は probe.config の項目 `rvswd-rest`(値: auto / high / low。項目が無ければ auto)。**口ごとに決める**: 1 台に X035 の口と L103 の口が
|
|
622
|
+
並ぶことがあるので、key は wire の fn ではなく、その口の SWCLK の channel(label / idle と同じ「channel が key」。attach は swclk を固定部で
|
|
623
|
+
名指すので probe はその channel の項目を引く。ユーザーと ch32rv の指摘)。host の居ない場面(素通し、ブラウザで設定した probe)にも効き、
|
|
624
|
+
console-passthrough に idle_clock の欄は要らない。
|
|
625
|
+
4. 優先: attach の TLV > 設定の `rvswd-rest`(high / low)> 自動(auto)。
|
|
626
|
+
5. 1 つの接続の休ませ方は 1 つ。変えるには detach が要る(違う TLV の attach は、生きた接続のピンなので cause 1 で断られる。ch32rv の
|
|
627
|
+
ブローカーは応答の休ませ方と合えば貸し、違えば断る)。
|
|
628
|
+
6. 系統の事実の正本は ch32-device-data の family 属性。registry の表はそこから作るか CI で突き合わせ、2 つの正本にしない。
|
|
629
|
+
DMI 0x7F の bit 31〜20 で系統を引けるかは、古い系統(V103 など)の id の形で確かめる(ch32rv の DB には例外の形がある)。
|
|
630
|
+
- 残る論点: core §12 規則 8(チップ固有の処理を汎用のインターフェースに入れない)との関係。rvswd は対象の系統が限られる線なので、
|
|
631
|
+
その線の定義の中に置いてよいか。
|
|
632
|
+
|
|
633
|
+
決定(所有者): 基本は host が判定し、タイミング系などは probe の自動判定を足せる。自動判定は設定で OFF にでき、判定したことが分かるようにする
|
|
634
|
+
(core §12 規則 8)。仕様は上の案のとおり(key は SWCLK の channel)。Python ebcf306 以降、Arduino 77a8002。
|
|
635
|
+
実機(77a8002): idle_clock 無しの attach で Pico 2 + L103 は low(halt を 3 秒保つ)、P4 + X035 は high。`rvswd-rest=high` で L103 は high になり halt が
|
|
636
|
+
0.1 s で外れる(OFF が効く)。
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "oep-client-python"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.33"
|
|
8
8
|
description = "Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a virtual bench"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -353,6 +353,12 @@ def _config_parser(sub) -> None:
|
|
|
353
353
|
idle.add_argument("channel", type=int)
|
|
354
354
|
idle.add_argument("mode", choices=sorted(config.IDLE))
|
|
355
355
|
idle.add_argument("--save", action="store_true")
|
|
356
|
+
rest = cs.add_parser("rvswd-rest", help="how rvswd rests a port's SWCLK: auto (the probe decides from the target_id), "
|
|
357
|
+
"or high / low fixed (the automatic choice off; debug §3.1)")
|
|
358
|
+
rest.add_argument("probe")
|
|
359
|
+
rest.add_argument("channel", type=int, help="the port's SWCLK channel")
|
|
360
|
+
rest.add_argument("mode", choices=sorted(config.REST_MODE))
|
|
361
|
+
rest.add_argument("--save", action="store_true")
|
|
356
362
|
dis = cs.add_parser("disable", help="channels the probe never drives or sets up (not on this board)")
|
|
357
363
|
dis.add_argument("probe")
|
|
358
364
|
dis.add_argument("channels", type=int, nargs="+")
|
|
@@ -435,6 +441,8 @@ def _config(args) -> int:
|
|
|
435
441
|
_change(hst, cfg, [config.Label(channel=args.channel, text=args.text)], args.save)
|
|
436
442
|
elif args.action == "idle":
|
|
437
443
|
_change(hst, cfg, [config.Idle(channel=args.channel, mode=args.mode)], args.save)
|
|
444
|
+
elif args.action == "rvswd-rest":
|
|
445
|
+
_change(hst, cfg, [config.RvswdRest(channel=args.channel, mode=args.mode)], args.save)
|
|
438
446
|
elif args.action == "disable":
|
|
439
447
|
_change(hst, cfg, [config.Disable(channel=ch) for ch in args.channels], args.save)
|
|
440
448
|
elif args.action == "remove":
|
|
@@ -36,6 +36,7 @@ NAMES = tuple(_CFG.names["setting"]) # the standard i
|
|
|
36
36
|
ITEM = {k.replace("-", "_"): i + 1 for i, k in enumerate(NAMES)}
|
|
37
37
|
DESCRIBE = _CFG.tlv["describe"]
|
|
38
38
|
IDLE = {k.replace("_", "-"): v for k, v in _CFG.enum["idle_mode"].items()}
|
|
39
|
+
REST_MODE = dict(_CFG.enum["rvswd_rest_mode"]) # rvswd-rest: auto / high / low (debug §3.1)
|
|
39
40
|
STORAGE_STATE = {v: k for k, v in _CFG.enum["storage_state"].items()}
|
|
40
41
|
UNREADABLE = {v: k for k, v in _CFG.enum["storage_unreadable"].items()}
|
|
41
42
|
FORM = _CFG.enum["setting_form"]
|
|
@@ -140,6 +141,27 @@ class Passthrough:
|
|
|
140
141
|
return struct.pack("<HHIB", self.fn, self.rx, self.baud, self.format)
|
|
141
142
|
|
|
142
143
|
|
|
144
|
+
@dataclass
|
|
145
|
+
class RvswdRest:
|
|
146
|
+
"""How an rvswd attach without idle_clock rests the SWCLK on `channel` (the port's SWCLK; debug §3.1): auto - the
|
|
147
|
+
probe's choice from the target_id it reads (also with no item) - or high / low fixed, the automatic choice off for
|
|
148
|
+
that port. An attach's idle_clock TLV still decides."""
|
|
149
|
+
channel: int
|
|
150
|
+
mode: str = "auto"
|
|
151
|
+
NAME = "rvswd-rest"
|
|
152
|
+
|
|
153
|
+
def key(self) -> int:
|
|
154
|
+
return self.channel
|
|
155
|
+
|
|
156
|
+
def value(self) -> bytes:
|
|
157
|
+
return struct.pack("<H", self.key()) + self.data()
|
|
158
|
+
|
|
159
|
+
def data(self) -> bytes:
|
|
160
|
+
if self.mode not in REST_MODE:
|
|
161
|
+
raise ValueError(f"rvswd-rest mode {self.mode!r}: one of {', '.join(REST_MODE)}")
|
|
162
|
+
return bytes([REST_MODE[self.mode]])
|
|
163
|
+
|
|
164
|
+
|
|
143
165
|
@dataclass(kw_only=True)
|
|
144
166
|
class ConsolePassthrough:
|
|
145
167
|
"""Serial port `port` carries the target's debug console - read by the probe itself over `wire_fn` on (swdio, swclk)
|
|
@@ -293,6 +315,8 @@ def decode(name: str, key: int, d: bytes, setting: Setting | None = None, netifs
|
|
|
293
315
|
try:
|
|
294
316
|
if name == "label":
|
|
295
317
|
return Label(channel=key, text=d.decode("utf-8", "replace"))
|
|
318
|
+
if name == "rvswd-rest" and len(d) == 1 and d[0] in REST_MODE.values():
|
|
319
|
+
return RvswdRest(channel=key, mode={v: k for k, v in REST_MODE.items()}[d[0]])
|
|
296
320
|
if name == "idle" and len(d) == 1:
|
|
297
321
|
return Idle(channel=key, mode=_name(IDLE, d[0]))
|
|
298
322
|
if name == "disable" and not d:
|
|
@@ -117,7 +117,8 @@ RESET_MODE = _RV.enum["reset_mode"]
|
|
|
117
117
|
READ_FROM = reg.COMMON.enum["read_from"] # position, oldest, now, last_mark (common §1.2)
|
|
118
118
|
STEP_LEFT = _RV.tlv["step_answer"]["step_left"] # step's answer: the hart could not be halted again (§4.2)
|
|
119
119
|
ITEM = {k.replace("-", "_"): k for k in cfgmod.NAMES} # the standard items by name (probe.config §1, core §7.7)
|
|
120
|
-
CHANNEL_ITEMS = (ITEM["label"], ITEM["idle"], ITEM["disable"]) #
|
|
120
|
+
CHANNEL_ITEMS = (ITEM["label"], ITEM["idle"], ITEM["disable"], ITEM["rvswd_rest"]) # keyed by a channel (probe.config §1)
|
|
121
|
+
REST_MODE = cfgmod.REST_MODE
|
|
121
122
|
IDLE_MODE = _CFG.enum["idle_mode"]
|
|
122
123
|
CFG_DESCRIBE = cfgmod.DESCRIBE
|
|
123
124
|
SETTING_FORM = _CFG.enum["setting_form"]
|
|
@@ -137,7 +138,18 @@ I2C_FEATURES, SPI_FEATURES = _I2C.enum["features"], _SPI.enum["features"]
|
|
|
137
138
|
TARGET_ROLES = {"oep.fixture.gpio": {1}, "oep.fixture.uart": {1, 2}, _I2C.name: set(_I2C.enum["role"].values()),
|
|
138
139
|
_SPI.name: set(_SPI.enum["role"].values())} # the plan roles each fixture takes
|
|
139
140
|
UART_FORMAT_MASK = 0x1F # the defined format bits (fixture §2)
|
|
140
|
-
_T_SCAN, _T_ATTACH, _T_ATTACH_ANSWER = (
|
|
141
|
+
_T_SCAN, _T_ATTACH, _T_ATTACH_ANSWER, _T_CONNECTIONS_ANSWER = (
|
|
142
|
+
reg.WIRE_RVSWD.tlv[k] for k in ("scan", "attach", "attach_answer", "connections_answer"))
|
|
143
|
+
_IDLE_CLOCK = reg.WIRE_RVSWD.enum["idle_clock"]
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def rvswd_rest(target_id: int | None) -> int:
|
|
147
|
+
"""The rest an rvswd attach without idle_clock uses (debug §3.1): low for a family in the registry's
|
|
148
|
+
idle_low_family (target_id >> target_id_family.shift), high otherwise and when no target_id was read."""
|
|
149
|
+
if target_id is None:
|
|
150
|
+
return _IDLE_CLOCK["high"]
|
|
151
|
+
family = target_id >> reg.WIRE_RVSWD.enum["target_id_family"]["shift"]
|
|
152
|
+
return _IDLE_CLOCK["low"] if family in reg.WIRE_RVSWD.enum["idle_low_family"].values() else _IDLE_CLOCK["high"]
|
|
141
153
|
_WIRE_INDEX = reg.WIRE_RVSWD.tlv["unsupported_payload"]["index"] # scan's candidate index (debug §1)
|
|
142
154
|
ATTACH_METHOD = reg.WIRE_RVSWD.enum["attach_method"]
|
|
143
155
|
GPIO_MODE_MAX = max(_GPIO.enum["mode"].values()) # 6: the modes revision 1 defines are 0-6 (fixture §1)
|
|
@@ -542,7 +554,7 @@ class Connection:
|
|
|
542
554
|
|
|
543
555
|
|
|
544
556
|
ITEM_SIZES = {ITEM["idle"]: 1, ITEM["disable"]: 0, ITEM["passthrough"]: 9, # the data of a fixed length (probe.config §1)
|
|
545
|
-
ITEM["console_passthrough"]: 13, ITEM["ipv4"]: 14}
|
|
557
|
+
ITEM["console_passthrough"]: 13, ITEM["ipv4"]: 14, ITEM["rvswd_rest"]: 1}
|
|
546
558
|
PASSTHROUGHS = (ITEM["passthrough"], ITEM["console_passthrough"])
|
|
547
559
|
|
|
548
560
|
|
|
@@ -2293,8 +2305,11 @@ class Endpoint:
|
|
|
2293
2305
|
if tg.havereset:
|
|
2294
2306
|
tg.havereset, flags = False, flags | ATTACH_FLAGS["havereset_acked"]
|
|
2295
2307
|
c = self.conns[cid]
|
|
2296
|
-
if
|
|
2297
|
-
|
|
2308
|
+
if rvswd: # the host's TLV, the setting, else from target_id (§3.1)
|
|
2309
|
+
setting = self.config.get((ITEM["rvswd_rest"], pair[1]), bytes([REST_MODE["auto"]]))[0]
|
|
2310
|
+
c.idle_clock = (idle_clock if idle_clock is not None
|
|
2311
|
+
else _IDLE_CLOCK["high"] if setting == REST_MODE["high"]
|
|
2312
|
+
else _IDLE_CLOCK["low"] if setting == REST_MODE["low"] else rvswd_rest(c.tid))
|
|
2298
2313
|
if reset is not None and tg.reset_line not in (None, channel):
|
|
2299
2314
|
if method == 1: # a line that resets nothing: halted where it ran
|
|
2300
2315
|
tg.halted, tg.dpc = True, tg.reset_vector + 0x2f8
|
|
@@ -2308,6 +2323,8 @@ class Endpoint:
|
|
|
2308
2323
|
if tg.halted and method == 1: # bit3: the probe saw hart 0 halted (§3)
|
|
2309
2324
|
flags |= ATTACH_FLAGS["halted"]
|
|
2310
2325
|
tail += m.tlv(_T_ATTACH_ANSWER["dpc"], struct.pack("<I", tg.dpc))
|
|
2326
|
+
if rvswd: # the rest in use, always (§3.1)
|
|
2327
|
+
tail += m.tlv(_T_ATTACH_ANSWER["idle_clock"], bytes([c.idle_clock]))
|
|
2311
2328
|
return self._answer(struct.pack("<IIBI", cid, tg.dmstatus(), flags, c.speed) + tail)
|
|
2312
2329
|
if op == O["detach"]:
|
|
2313
2330
|
cid = t.take("I")
|
|
@@ -2321,24 +2338,31 @@ class Endpoint:
|
|
|
2321
2338
|
first = t.take("B")
|
|
2322
2339
|
t.tail()
|
|
2323
2340
|
mine = sorted((c.order, cid) for cid, c in self.conns.items() if c.fn == fn)
|
|
2324
|
-
rows = []
|
|
2341
|
+
rows, rests = [], []
|
|
2325
2342
|
for _, cid in mine:
|
|
2326
2343
|
c = self.conns[cid]
|
|
2327
2344
|
tid = b"" if c.tid is None else struct.pack("<I", c.tid)
|
|
2328
2345
|
scheme = TARGET_ID_SCHEME["dmi_7f"] if tid else 0
|
|
2329
2346
|
rows.append(struct.pack("<IHHIBB", cid, *c.pair, c.speed, scheme, len(tid)) + tid)
|
|
2330
|
-
|
|
2347
|
+
rests.append(c.idle_clock)
|
|
2348
|
+
# rvswd: TLV idle_clock (entry_index, rest) for every entry of the page (§2.1, §3.1)
|
|
2349
|
+
return m.COMPLETED, m.SUCCESS, self._paged(rows, first, rests if rvswd else None)
|
|
2331
2350
|
return m.REJECTED, m.UNKNOWN_OPERATION, b""
|
|
2332
2351
|
|
|
2333
|
-
def _paged(self, rows: list[bytes], first: int) -> bytes:
|
|
2334
|
-
"""more(u8) count(u8) the rows from `first` that fit the frame (connections, streams: core §2.3's lists)
|
|
2352
|
+
def _paged(self, rows: list[bytes], first: int, rests: list[int] | None = None) -> bytes:
|
|
2353
|
+
"""more(u8) count(u8) the rows from `first` that fit the frame (connections, streams: core §2.3's lists);
|
|
2354
|
+
with `rests` (rvswd's connections), each row's TLV idle_clock (entry_index, rest) after them, counted in."""
|
|
2335
2355
|
budget = self.probe.max_frame - m.RESULT_HEADER - 2
|
|
2336
2356
|
out: list[bytes] = []
|
|
2337
|
-
|
|
2338
|
-
|
|
2357
|
+
tail: list[bytes] = []
|
|
2358
|
+
for i, row in enumerate(rows[first:]):
|
|
2359
|
+
extra = b"" if rests is None else m.tlv(_T_CONNECTIONS_ANSWER["idle_clock"], bytes([len(out), rests[first + i]]))
|
|
2360
|
+
if out and sum(map(len, out + tail)) + len(row) + len(extra) > budget:
|
|
2339
2361
|
break
|
|
2340
2362
|
out.append(row)
|
|
2341
|
-
|
|
2363
|
+
if extra:
|
|
2364
|
+
tail.append(extra)
|
|
2365
|
+
return bytes([int(first + len(out) < len(rows)), len(out)]) + b"".join(out) + b"".join(tail)
|
|
2342
2366
|
|
|
2343
2367
|
def _attach_methods(self, fn: int) -> set[int]:
|
|
2344
2368
|
"""method 0, and 1 when the wire declares features bit0 attach_halt (debug §3)."""
|
|
@@ -3275,6 +3299,8 @@ class Endpoint:
|
|
|
3275
3299
|
return True
|
|
3276
3300
|
if mode in (IDLE_MODE["pull_up"], IDLE_MODE["pull_down"]) and mode in self.no_pull.get(key, ()):
|
|
3277
3301
|
return True
|
|
3302
|
+
if name == ITEM["rvswd_rest"] and d[0] not in REST_MODE.values():
|
|
3303
|
+
return True # a mode the definition leaves unused (§1)
|
|
3278
3304
|
return False
|
|
3279
3305
|
|
|
3280
3306
|
def _shown(self, name: str, d: bytes) -> bytes:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
from types import SimpleNamespace as _NS
|
|
5
5
|
|
|
6
|
-
REGISTRY_HASH = "
|
|
6
|
+
REGISTRY_HASH = "66b19f04290391f3"
|
|
7
7
|
SCHEMA = 1
|
|
8
8
|
PROTOCOL_REVISION = 1
|
|
9
9
|
CONFIRM_REQUEST_MAGIC = 'OEP?'
|
|
@@ -42,7 +42,7 @@ PROBE_LINK = _NS(name="oep.probe.link", revision=1, target=None, op={"source": 0
|
|
|
42
42
|
line_names={}, names={})
|
|
43
43
|
INTERFACES["oep.probe.link"] = PROBE_LINK
|
|
44
44
|
WIRE_RVSWD = _NS(name="oep.wire.rvswd", revision=1, target="RISC-V targets whose debug module is reached over the two-wire RVSWD line", op={"scan": 0x10, "attach": 0x11, "detach": 0x12, "connections": 0x13}, lock_free={0x13},
|
|
45
|
-
tlv={"describe": {"max_connections": 0x40}, "scan": {"max_speed": 0x01, "idle_clock": 0x03}, "attach": {"idle_clock": 0x03, "reset": 0x04}, "attach_answer": {"target_id": 0x01, "dpc": 0x02}, "unavailable_payload": {"index": 0x40}, "unsupported_payload": {"index": 0x40}}, event={}, enum={"scan_kind": {"riscv_dm": 0x01}, "attach_flags": {"havereset_acked": 0x01, "halted": 0x08}, "features": {"attach_halt": 0x01}, "attach_method": {"run": 0x00, "halt": 0x01}, "pin_role": {"swdio": 0x01, "swclk": 0x02, "reset": 0x03}, "idle_clock": {"high": 0x00, "low": 0x01}}, own={},
|
|
45
|
+
tlv={"describe": {"max_connections": 0x40}, "scan": {"max_speed": 0x01, "idle_clock": 0x03}, "attach": {"idle_clock": 0x03, "reset": 0x04}, "attach_answer": {"target_id": 0x01, "dpc": 0x02, "idle_clock": 0x03}, "connections_answer": {"idle_clock": 0x02}, "unavailable_payload": {"index": 0x40}, "unsupported_payload": {"index": 0x40}}, event={}, enum={"scan_kind": {"riscv_dm": 0x01}, "attach_flags": {"havereset_acked": 0x01, "halted": 0x08}, "features": {"attach_halt": 0x01}, "attach_method": {"run": 0x00, "halt": 0x01}, "pin_role": {"swdio": 0x01, "swclk": 0x02, "reset": 0x03}, "idle_clock": {"high": 0x00, "low": 0x01}, "target_id_family": {"shift": 0x14}, "idle_low_family": {"ch32l103": 0x103}}, own={},
|
|
46
46
|
line_names={}, names={})
|
|
47
47
|
INTERFACES["oep.wire.rvswd"] = WIRE_RVSWD
|
|
48
48
|
WIRE_SWIO = _NS(name="oep.wire.swio", revision=1, target="RISC-V targets whose debug module is reached over the one-wire SWIO line", op={"scan": 0x10, "attach": 0x11, "detach": 0x12, "connections": 0x13}, lock_free={0x13},
|
|
@@ -94,6 +94,6 @@ FIXTURE_CAPTURE_GROUP = _NS(name="oep.fixture.capture-group", revision=1, target
|
|
|
94
94
|
line_names={}, names={})
|
|
95
95
|
INTERFACES["oep.fixture.capture-group"] = FIXTURE_CAPTURE_GROUP
|
|
96
96
|
PROBE_CONFIG = _NS(name="oep.probe.config", revision=1, target=None, op={"get": 0x10, "set": 0x11, "save": 0x12, "erase": 0x13, "unset": 0x14, "state": 0x15, "network": 0x16}, lock_free={0x10, 0x15, 0x16},
|
|
97
|
-
tlv={"describe": {"storage": 0x40, "setting": 0x41, "netif": 0x42}}, event={}, enum={"idle_mode": {"hi_z": 0x00, "pull_up": 0x01, "pull_down": 0x02, "output_low": 0x03, "output_high": 0x04}, "ipv4_mode": {"dhcp": 0x00, "static": 0x01}, "network_state": {"off": 0x00, "connecting": 0x01, "up": 0x02, "waiting": 0x03}, "network_reason": {"none": 0x00, "not_found": 0x01, "auth": 0x02, "no_address": 0x03, "other": 0x04}, "setting_form": {"named": 0x00, "bytes": 0x01, "text": 0x02, "u32": 0x03, "ipv4": 0x04, "bool": 0x05}, "setting_flag": {"secret": 0x01, "restart": 0x02}, "storage_state": {"none": 0x00, "applied": 0x01, "unreadable": 0x02, "partial": 0x03}, "storage_unreadable": {"none": 0x00, "form": 0x01, "item": 0x02, "capacity": 0x03}}, own={},
|
|
98
|
-
line_names={'nrst': 'the target reset line (Host only)', 'power_hi': 'target power on when high (Host only)', 'power_lo': 'target power on when low (Host only)'}, names={'setting': {'label': 'key channel; text 1-32 bytes', 'idle': 'key channel; mode(u8)', 'disable': 'key channel; no data', 'passthrough': 'key port; fn(u16) rx(u16) baud(u32) format(u8)', 'console-passthrough': 'key port; wire_fn(u16) swdio(u16) swclk(u16) max_speed(u32) console_fn(u16) mechanism(u8)', 'wifi': 'key entry; ssid_len(u8) ssid pass_len(u8) passphrase; passphrase write-only', 'ipv4': 'key netif; mode(u8) address(4) prefix(u8) gateway(4) dns(4)'}, 'netif': {'wifi': 'Wi-Fi station', 'ethernet': 'wired Ethernet'}})
|
|
97
|
+
tlv={"describe": {"storage": 0x40, "setting": 0x41, "netif": 0x42}}, event={}, enum={"idle_mode": {"hi_z": 0x00, "pull_up": 0x01, "pull_down": 0x02, "output_low": 0x03, "output_high": 0x04}, "rvswd_rest_mode": {"auto": 0x00, "high": 0x01, "low": 0x02}, "ipv4_mode": {"dhcp": 0x00, "static": 0x01}, "network_state": {"off": 0x00, "connecting": 0x01, "up": 0x02, "waiting": 0x03}, "network_reason": {"none": 0x00, "not_found": 0x01, "auth": 0x02, "no_address": 0x03, "other": 0x04}, "setting_form": {"named": 0x00, "bytes": 0x01, "text": 0x02, "u32": 0x03, "ipv4": 0x04, "bool": 0x05}, "setting_flag": {"secret": 0x01, "restart": 0x02}, "storage_state": {"none": 0x00, "applied": 0x01, "unreadable": 0x02, "partial": 0x03}, "storage_unreadable": {"none": 0x00, "form": 0x01, "item": 0x02, "capacity": 0x03}}, own={},
|
|
98
|
+
line_names={'swdio': 'the debug data line (2 wires: rvswd, swd) (Host only)', 'swclk': 'the debug clock line (2 wires: rvswd, swd) (Host only)', 'swio': 'the one debug wire (swio) (Host only)', 'rx': 'the fixture UART receive, wired to the target TX (Host only)', 'tx': 'the fixture UART transmit, wired to the target RX (Host only)', 'nrst': 'the target reset line (Host only)', 'power_hi': 'target power on when high (Host only)', 'power_lo': 'target power on when low (Host only)'}, names={'setting': {'label': 'key channel; text 1-32 bytes', 'idle': 'key channel; mode(u8)', 'disable': 'key channel; no data', 'passthrough': 'key port; fn(u16) rx(u16) baud(u32) format(u8)', 'console-passthrough': 'key port; wire_fn(u16) swdio(u16) swclk(u16) max_speed(u32) console_fn(u16) mechanism(u8)', 'wifi': 'key entry; ssid_len(u8) ssid pass_len(u8) passphrase; passphrase write-only', 'ipv4': 'key netif; mode(u8) address(4) prefix(u8) gateway(4) dns(4)', 'rvswd-rest': "key channel (the port's SWCLK); mode(u8): rvswd_rest_mode"}, 'netif': {'wifi': 'Wi-Fi station', 'ethernet': 'wired Ethernet'}})
|
|
99
99
|
INTERFACES["oep.probe.config"] = PROBE_CONFIG
|
|
@@ -197,6 +197,10 @@ class WireBase(Interface):
|
|
|
197
197
|
ONE_WIRE = False # swio: swclk is 0xFFFF (§3)
|
|
198
198
|
DEFAULT_MAX_SPEED = 1_000_000 # when the wire declares no max_clock_hz either
|
|
199
199
|
|
|
200
|
+
def _is_rvswd(self) -> bool:
|
|
201
|
+
"""The rest TLVs are rvswd's (debug §3.1); the name as opened, else the class's."""
|
|
202
|
+
return getattr(self, "name", self.NAME) == "oep.wire.rvswd"
|
|
203
|
+
|
|
200
204
|
def _description(self) -> catalog.Description:
|
|
201
205
|
return catalog.decode_description(b"".join(catalog.tlv(t, v) for t, v in describe(self.host, self.fn)))
|
|
202
206
|
|
|
@@ -307,17 +311,22 @@ class WireBase(Interface):
|
|
|
307
311
|
for _ in range(count):
|
|
308
312
|
conn, swdio, swclk, speed, scheme, n = rd.take("IHHIBB")
|
|
309
313
|
tid = rd.bytes(n)
|
|
310
|
-
page.append([conn, (swdio, swclk), speed, (scheme, tid) if scheme else None, None])
|
|
314
|
+
page.append([conn, (swdio, swclk), speed, (scheme, tid) if scheme else None, None, None])
|
|
311
315
|
for tag, value in m.split_tlvs(rd.rest()):
|
|
312
316
|
# entry_index(u8) targetsel(u32), repeatable; bit 7 in an answer: an unknown tag (core §2.2, §2.3)
|
|
313
317
|
if tag == _SELECTED_TARGET and len(value) == 5 and value[0] < len(page):
|
|
314
318
|
page[value[0]][4] = struct.unpack_from("<I", value, 1)[0]
|
|
319
|
+
# rvswd: entry_index(u8) idle_clock(u8) for every entry (debug §2.1, §3.1)
|
|
320
|
+
if self._is_rvswd() and tag == _REST and len(value) == 2 and value[0] < len(page):
|
|
321
|
+
page[value[0]][5] = _REST_NAMES.get(value[1])
|
|
315
322
|
out += [ConnectionInfo(*row) for row in page]
|
|
316
323
|
if not more or not count or len(out) > 0xFF:
|
|
317
324
|
return out
|
|
318
325
|
|
|
319
326
|
|
|
320
327
|
_SELECTED_TARGET = reg.WIRE_SWD.tlv["connections_answer"]["selected_target"]
|
|
328
|
+
_REST = reg.WIRE_RVSWD.tlv["connections_answer"]["idle_clock"]
|
|
329
|
+
_REST_NAMES = {v: k for k, v in reg.WIRE_RVSWD.enum["idle_clock"].items()}
|
|
321
330
|
|
|
322
331
|
|
|
323
332
|
@dataclass(frozen=True)
|
|
@@ -329,6 +338,7 @@ class ConnectionInfo:
|
|
|
329
338
|
speed_hz: int
|
|
330
339
|
target_id: tuple[int, bytes] | None
|
|
331
340
|
targetsel: int | None = None
|
|
341
|
+
idle_clock: str | None = None # rvswd: "high" / "low", the rest the connection uses (debug §3.1)
|
|
332
342
|
|
|
333
343
|
|
|
334
344
|
class Wire(WireBase):
|
|
@@ -342,6 +352,7 @@ class Wire(WireBase):
|
|
|
342
352
|
SCHEME_DMI_7F = reg.COMMON.enum["target_id_scheme"]["dmi_7f"] # the u32 at DMI 0x7F (oep-if-debug §3)
|
|
343
353
|
|
|
344
354
|
TAG_DPC = reg.WIRE_RVSWD.tlv["attach_answer"]["dpc"]
|
|
355
|
+
TAG_REST = reg.WIRE_RVSWD.tlv["attach_answer"]["idle_clock"]
|
|
345
356
|
|
|
346
357
|
def __init__(self, hst: h.Host, name: str = "oep.wire.rvswd"):
|
|
347
358
|
super().__init__(hst, name)
|
|
@@ -397,6 +408,10 @@ class Wire(WireBase):
|
|
|
397
408
|
dpc = tail.get(self.TAG_DPC)
|
|
398
409
|
# dpc is a u32: a value of another length is broken, not used (core §2.3)
|
|
399
410
|
self.dpc = struct.unpack("<I", dpc)[0] if self.halted and dpc is not None and len(dpc) == 4 else None
|
|
411
|
+
# rvswd: the rest the connection uses, the host's or the probe's choice from target_id (debug §3.1)
|
|
412
|
+
rest = tail.get(self.TAG_REST) if self._is_rvswd() else None
|
|
413
|
+
names = {v: k for k, v in self.IDLE_CLOCK.items()}
|
|
414
|
+
self.idle_clock = names.get(rest[0]) if rest is not None and len(rest) == 1 else None
|
|
400
415
|
return conn, status
|
|
401
416
|
|
|
402
417
|
def attach_under_reset(self, channel: int, hold_ms: int = 20, max_speed: int | None = None,
|
|
@@ -262,7 +262,7 @@ def _setting(name: str, keys: int, form: int = 0, max_len: int = 0, flags: int =
|
|
|
262
262
|
|
|
263
263
|
|
|
264
264
|
def _config(fn: int, instance: int, storage: int = 4096, *, channels: int = 64, ports: int = 4, netifs=(), wifi_entries: int = 4,
|
|
265
|
-
own=()) -> Offered:
|
|
265
|
+
own=(), rvswd: bool = False) -> Offered:
|
|
266
266
|
"""oep.probe.config's declarations (probe.config §4): the standard items label / idle / disable (keys: the
|
|
267
267
|
channels), passthrough / console-passthrough (keys: the transports), with `netifs` (names) wifi / ipv4 and the
|
|
268
268
|
network op; `own`: the probe's own items as (name, form, keys, max_len, flags) (§1.6). storage 0 = none - no storage
|
|
@@ -274,6 +274,8 @@ def _config(fn: int, instance: int, storage: int = 4096, *, channels: int = 64,
|
|
|
274
274
|
if "wifi" in netifs:
|
|
275
275
|
settings.append(_setting("wifi", wifi_entries))
|
|
276
276
|
settings.append(_setting("ipv4", len(netifs) + 1))
|
|
277
|
+
if rvswd: # its automatic rest can be turned off per port (debug §3.1)
|
|
278
|
+
settings.append(_setting("rvswd-rest", channels))
|
|
277
279
|
settings += [_setting(name, keys, form, max_len, flags) for name, form, keys, max_len, flags in own]
|
|
278
280
|
return Offered(fn, instance, "oep.probe.config", ops_of("oep.probe.config", *drop)
|
|
279
281
|
+ ((catalog.u32(_CFG["storage"], storage),) if storage else ()) + tuple(settings)
|
|
@@ -388,7 +390,7 @@ def p4_x035() -> VirtualProbe:
|
|
|
388
390
|
max_stretch_us=100_000), # stretch
|
|
389
391
|
Offered(9, 0, "oep.fixture.spi-target", _roles({1: pins, 2: pins, 3: pins, 4: pins})
|
|
390
392
|
+ _spi_decl(max_length=64, max_hz=3_000_000, features=0b1, queue_depth=8)), # LSB first
|
|
391
|
-
_config(10, 0, channels=55, ports=4, netifs=("ethernet",)),
|
|
393
|
+
_config(10, 0, channels=55, ports=4, netifs=("ethernet",), rvswd=True),
|
|
392
394
|
# the P4's ADC1 (GPIO16-23): one ADC for all its channels, 611 Hz - 83.3 kHz in all; ESP32-style attenuations
|
|
393
395
|
Offered(11, 0, "oep.fixture.analog", _roles({k: list(range(16, 24)) for k in range(4)})
|
|
394
396
|
+ _analog_decl([(0, 0, 950), (1, 0, 1250), (2, 0, 1750), (3, 0, 3100)], 65536, 611, 83_333),
|
|
@@ -465,7 +467,7 @@ def p4_bench() -> VirtualProbe:
|
|
|
465
467
|
_console(3),
|
|
466
468
|
_gpio(4, pins),
|
|
467
469
|
_uart(5, 0, pins, 3_000_000),
|
|
468
|
-
_config(6, 0, channels=55, ports=4),
|
|
470
|
+
_config(6, 0, channels=55, ports=4, rvswd=True),
|
|
469
471
|
_link(7),
|
|
470
472
|
_plan(8),
|
|
471
473
|
_restart(9),
|