oep-client-python 0.0.33__tar.gz → 0.0.34__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.33 → oep_client_python-0.0.34}/CHANGELOG.md +5 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/PKG-INFO +1 -1
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/pyproject.toml +1 -1
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/__init__.py +1 -1
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/__main__.py +8 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/config.py +23 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/endpoint.py +48 -7
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/registry.py +6 -6
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/riscv.py +14 -1
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_attach_model.py +3 -2
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench.py +3 -1
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_oep_declaration_model.py +3 -3
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_registered_ops_model.py +1 -1
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_scan_options_model.py +1 -1
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/spec/oep-v1.toml +7 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_config.py +1 -1
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_oep_declarations.py +2 -1
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_request_tails.py +1 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_debug.py +1 -1
- oep_client_python-0.0.34/tests/test_wire_hold.py +59 -0
- oep_client_python-0.0.34/tests/vectors/SPEC_COMMIT +1 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/SPEC_SHA256 +2 -2
- oep_client_python-0.0.33/tests/vectors/SPEC_COMMIT +0 -1
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/.gitignore +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/LICENSE +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/README.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/README.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/README.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/allocator-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/analog-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/analog-payload-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/arm-adi-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/attach-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/block-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-group-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-group-geometry-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-serial-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-timeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-timeline-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/clock-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-execution-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-fallback-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-paging-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-power-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-storage-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/conformance-checks.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/conformance-spec-compatibility.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/core-fixed-fields-review.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/core-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/corr-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/cut-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/data-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/debug-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/dependency-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/discovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/dmseq-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/dmseq-target-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/execution-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/exhausted-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/fixture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/gpio-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/gpio-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/hardware-configuration.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/hardware-quickstart.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/hardware-schema.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-core-shapes-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-deadline-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-notification-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-resend-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-tlv-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-value-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-wait-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/i2c-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/interface-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/interface-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/link-routes-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/link-transfer-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/logic-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/mailbox-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/notification-output-sample.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/notification-retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/notification-sequence-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/oep-declaration-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/oep-example-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/outcome-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/pin-constraints-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/pipeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/port-speed-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/probe-input-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/recovery-races-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/refusal-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/registered-ops-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/replay-pressure-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/reset-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/resource-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/response-race-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/restart-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/retention-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/retry-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/route-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/run-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/scan-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/scan-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/selected-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/session-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/session-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/spec-a09fa45-sections.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/spec-follow-notes.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/spi-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/stage9-rule-trace.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/step-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/subscription-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/tcp-recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/testing-consumers.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/testing-policy.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/tlv-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/README.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/capture.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/common.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/console.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/core.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/debug.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/fixture.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/link.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/plan.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/probe-config.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/restart.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/capture.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/common.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/console.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/core.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/debug.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/fixture.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/link.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/plan.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/probe-config.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/restart.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/sample-audit.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/transports.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/capture.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/common.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/console.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/core.0.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/core.1-6.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/core.7-13.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/debug.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/fixture.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/link.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/plan.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/probe-config.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/restart.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/transports.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/capture.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/core-a.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/core-b.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/debug-a.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/debug-b.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/rest.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/capture.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/core-rest.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/core-sessions.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/debug.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/fixture-console.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/small.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/capture.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/core-a.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/core-b.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/debug-targets.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/debug-wires.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/small.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/capture-console.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/core-early.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/core-late.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/debug-a.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/debug-b.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/rest.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/exact-payload.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/host-recovery.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/optional-as-required.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/request-validation.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/state-and-resources.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/tlv-readers.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review8/core-1.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review8/core-2.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review8/debug.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/transports.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/uart-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/uart-stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/usb-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/wire-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/writer-lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/arm.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/capture.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/catalog.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/ch32_flash.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/cobs.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_allocator.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_allocator_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_analog.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_analog_payload.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_analog_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_arm_adi.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_arm_adi_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_attach.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_attach_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_block_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_blocks.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_group.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_group_geometry.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_group_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_metadata.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_serial.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_serial_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_timeline.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_timeline_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_clock.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_clock_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_execution.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_execution_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_fallback.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_fallback_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_paging.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_paging_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_power_loss.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_power_loss_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_storage.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_storage_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_core_fixed_fields.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_core_smoke.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_corr.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_cut.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_cut_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_data.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_data_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_debug.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_debug_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dependencies.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dependency_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_discovery.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dmseq.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dmseq_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dmseq_target.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dmseq_target_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_execution_order.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_execution_order_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_exhausted.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_exhausted_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_fixture_metadata.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_gpio.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_gpio_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_gpio_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_core.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_core_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_deadline.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_deadline_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_notifications.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_notifications_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_request_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_requests.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_resend.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_resend_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_tlv.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_tlv_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_values.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_values_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_wait.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_wait_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_i2c.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_i2c_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_interface_smoke.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_interfaces.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_lease.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_lease_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_link_routes.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_link_routes_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_link_transfer_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_link_transfers.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_logic.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_logic_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_mailbox.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_mailbox_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_notification_retention.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_notification_retention_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_notification_sequence.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_notification_sequence_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_oep_declarations.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_oep_smoke.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_outcome_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_outcomes.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_pipeline.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_pipeline_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_port_speed.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_port_speed_execution.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_port_speed_execution_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_port_speed_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_probe_input.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_probe_input_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_recovery.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_recovery_race_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_recovery_races.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_recovery_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_refusal_order.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_refusal_order_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_registered_ops.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_replay_pressure.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_reset.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_reset_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_resource_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_resources.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_response_race.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_response_race_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_restart.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_restart_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retention.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retention_lifecycle.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retention_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retention_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retry.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retry_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_route_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_routes.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_run.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_run_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_scan.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_scan_options.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_scan_options_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_scan_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_selected_metadata.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_serial.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_session_loss.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_session_loss_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_session_smoke.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_spi.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_spi_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_step.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_step_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_stream.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_stream_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_subscription_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_subscriptions.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_tcp.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_tcp_peers.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_tcp_recovery.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_tcp_recovery_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_tlv_requests.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_uart.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_uart_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_uart_stream.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_uart_stream_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_usb.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_usb_cases.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_usb_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_wire_options.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_wire_options_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_writer_lease.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_writer_lease_sample.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/console.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/core.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/decode.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/discovery.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/dump.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/fixture.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/frames.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/hardware.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/hid_stream.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/host.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/interfaces.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/kept_session.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/link.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/linktest.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/message.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/names.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/pins.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/pytest_conformance.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/rp2350.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/speed_record.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/targets.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/uiapduino.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/usb_stream.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_allocator_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_analog_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_arm_adi_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench_capture.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench_mdns.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench_serial.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench_serve.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench_usb.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_block_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_capture_group_geometry_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_capture_group_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_capture_metadata_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_capture_timeline_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_clock_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_config_execution_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_config_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_config_paging_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_config_power_loss_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_config_storage_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_core.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_cut_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_data_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_debug_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_declaration_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_dependency_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_dmseq_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_dmseq_target_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_fixture_metadata_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_gpio_lifecycle_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_gpio_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_i2c_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_link_routes_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_link_transfer_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_logic_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_mailbox_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_names.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_notification_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_outcome_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_pipeline_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_port_speed_execution_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_port_speed_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_reset_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_resource_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_restart_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_retention_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_retry_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_route_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_run_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_scan_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_selected_metadata_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_spi_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_step_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_stream_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_tlv_request_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_uart_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_wire_options_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_writer_lease_model.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/conftest.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/equipment/.env.example +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/equipment/test_core_contract.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/equipment/test_preflight.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/fixtures/hardware.virtual.toml +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/.env.example +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/.env.virtual.example +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/README.ja.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/README.md +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/__init__.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/boards.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/conftest.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/firmware.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/flash.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/hardware.example.toml +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/hardware.resolved.example.toml +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/record.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/.gitignore +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32+1491c13-0.0.31-20261016T133559.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32+672bf7b-0.0.32-20261016T164655.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131458.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131510.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131526.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131532.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131656.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131703.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131708.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132050.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132057.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132104.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+4fad559-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+1491c13-0.0.31-20261016T133501.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+672bf7b-0.0.32-20261016T164559.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T130922.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T131024.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.25-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+e877631-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ac80e07-0.0.27.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27-0.0.27.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e343c6-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+0f013b7-0.0.28.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+1c940ca-0.0.28.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+4ef21db+4ef21db-dirty-0.0.28.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+68d9694-0.0.28.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ec38b1d-0.0.28.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/test_harness.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/test_probe.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/spec_names.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_capabilities.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_capture.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_cobs.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_config_disable.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_config_idle.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_config_network.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_allocator.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_analog.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_analog_payload.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_arm_adi.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_attach.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_blocks.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_group.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_group_geometry.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_metadata.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_serial.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_timeline.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_clock.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config_execution.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config_fallback.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config_paging.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config_power_loss.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config_storage.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_core_fixed_fields.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_core_smoke.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_corr.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_cut.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_data.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_debug.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_dependencies.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_discovery.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_dmseq.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_dmseq_target.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_execution_order.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_exhausted.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_fixture_metadata.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_gpio.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_core.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_critical_calls.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_deadline.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_notifications.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_requests.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_resend.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_tlv.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_values.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_wait.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_i2c.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_interface_smoke.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_interfaces.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_lease.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_link_routes.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_link_transfers.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_logic.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_mailbox.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_notification_output.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_notification_retention.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_notification_sequence.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_oep_smoke.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_outcomes.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_pipeline.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_port_speed.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_port_speed_execution.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_probe_input.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_reconnect.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_recovery.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_recovery_races.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_refusal_order.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_registered_ops.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_replay_pressure.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_replay_records_optional.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_reset.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_resources.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_response_race.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_restart.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_retention.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_retention_lifecycle.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_retry.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_routes.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_run.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_scan.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_scan_options.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_selected_metadata.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_serial.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_session_loss.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_session_smoke.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_spec_guard.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_spi.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_step.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_stream.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_subscriptions.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_tcp.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_tcp_peers.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_tcp_recovery.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_tlv_requests.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_uart.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_uart_stream.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_usb.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_wire_options.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_writer_lease.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_console_queue_and_reset_settle.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_debug_attach.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_extension_patterns.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_fixture_targets.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_flash_console.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_gpio_drive_and_serve_options.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_hardware.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_hid_stream.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_host_boot_lifecycle.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_host_rules_2026_10_02.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_host_rules_2026_10_06.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_host_wait_bound.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_interfaces.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_link_drop.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_link_host.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_link_serial.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_linktest.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_literals.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_minimal_ops.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_no_resume.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_passthrough.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_pins.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_plan.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_port_speed.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_restart.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_resubscribe_after_reopen.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review4_capture.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review4_debug.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review4_small.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_capture.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_core_a.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_core_b.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_debug_targets.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_debug_wires.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_small.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_capture_console.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_core_early.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_core_late.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_debug_a.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_debug_b.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_rest.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review7_exact_payload.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review7_host_recovery.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review7_request_validation.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review7_state_resources.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review7_tlv_readers.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review8_core_1.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review8_core_2.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review8_debug.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_rvswd_rest.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_session.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_spec_283e5b5.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_spec_2c6d18d.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_spec_3cc50c8.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_spec_sections.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_spec_vectors.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_target_parts.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_tcp_discovery.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_capture.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_common.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_console.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_core.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_core_names.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_fixture.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_link.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_plan.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_probe_config.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_restart.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_transports.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_usb_identity.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_usb_stream.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_analog_roles.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_announce.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_changing_trigger.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_channel_time.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_initial_trigger_time.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_lifetime.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_notifications.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_one_shot_time.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_pretrigger.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_query.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_rates.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_requests.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_resume_calibration.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_trigger_modes.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_waiting.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_pin_constraints.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_rules_2026_10_02.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_rules_2026_10_06.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_serve_reboot.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_serve_tcp_connections.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_spec.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_targets.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_core.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_core_bool.py +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/checks.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/cobs.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/confirm.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/core_extensions.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/core_lifecycle.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/core_policy.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/discovery.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/headers.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/interface_boundaries.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/interface_profiles.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/logic_layout.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/ops.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/ops_encoding.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/refusals.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/sessions.json +0 -0
- {oep_client_python-0.0.33 → oep_client_python-0.0.34}/udev/70-oep-probe.rules +0 -0
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.0.34
|
|
6
|
+
- (JA) oep-spec bc52327(debug §2 の閉じた後の保持、§2.2 holds、probe.config の wire-hold、core §8 の例外)に追従。仮想ベンチは、線切れ以外で
|
|
7
|
+
接続を閉じたらその口の休みの状態を保持し、ピンを取られる、wire-hold が off、idle / disable の項目、で保持を終える。駆動が止まると halt を失う
|
|
8
|
+
target(`VirtualTarget.needs_drive`、CH32L103)を表せる。クライアントは `WireBase.holds()`、`config.WireHold`、`oep config wire-hold PROBE CH on|off`。
|
|
9
|
+
|
|
5
10
|
## 0.0.33
|
|
6
11
|
- (JA) oep-spec ba4e8ee(debug §3.1、core §12 規則 8、probe.config の rvswd-rest)に追従。rvswd の線の休ませ方は、attach の idle_clock が無ければ
|
|
7
12
|
probe が決める(その SWCLK の channel の設定 rvswd-rest、無ければ target_id の系統: CH32L103 は low)。仮想ベンチはそのとおりに休ませ、attach の応答と
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: oep-client-python
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.34
|
|
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
|
|
@@ -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.34"
|
|
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"
|
|
@@ -359,6 +359,12 @@ def _config_parser(sub) -> None:
|
|
|
359
359
|
rest.add_argument("channel", type=int, help="the port's SWCLK channel")
|
|
360
360
|
rest.add_argument("mode", choices=sorted(config.REST_MODE))
|
|
361
361
|
rest.add_argument("--save", action="store_true")
|
|
362
|
+
hold = cs.add_parser("wire-hold", help="whether a debug wire's lines stay held at their rest after a close "
|
|
363
|
+
"(on, the default) or go free at once (off; debug §2)")
|
|
364
|
+
hold.add_argument("probe")
|
|
365
|
+
hold.add_argument("channel", type=int, help="the port's SWDIO channel")
|
|
366
|
+
hold.add_argument("mode", choices=sorted(config.HOLD_MODE))
|
|
367
|
+
hold.add_argument("--save", action="store_true")
|
|
362
368
|
dis = cs.add_parser("disable", help="channels the probe never drives or sets up (not on this board)")
|
|
363
369
|
dis.add_argument("probe")
|
|
364
370
|
dis.add_argument("channels", type=int, nargs="+")
|
|
@@ -441,6 +447,8 @@ def _config(args) -> int:
|
|
|
441
447
|
_change(hst, cfg, [config.Label(channel=args.channel, text=args.text)], args.save)
|
|
442
448
|
elif args.action == "idle":
|
|
443
449
|
_change(hst, cfg, [config.Idle(channel=args.channel, mode=args.mode)], args.save)
|
|
450
|
+
elif args.action == "wire-hold":
|
|
451
|
+
_change(hst, cfg, [config.WireHold(channel=args.channel, mode=args.mode)], args.save)
|
|
444
452
|
elif args.action == "rvswd-rest":
|
|
445
453
|
_change(hst, cfg, [config.RvswdRest(channel=args.channel, mode=args.mode)], args.save)
|
|
446
454
|
elif args.action == "disable":
|
|
@@ -37,6 +37,7 @@ 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
39
|
REST_MODE = dict(_CFG.enum["rvswd_rest_mode"]) # rvswd-rest: auto / high / low (debug §3.1)
|
|
40
|
+
HOLD_MODE = dict(_CFG.enum["wire_hold_mode"]) # wire-hold: off / on (debug §2)
|
|
40
41
|
STORAGE_STATE = {v: k for k, v in _CFG.enum["storage_state"].items()}
|
|
41
42
|
UNREADABLE = {v: k for k, v in _CFG.enum["storage_unreadable"].items()}
|
|
42
43
|
FORM = _CFG.enum["setting_form"]
|
|
@@ -162,6 +163,26 @@ class RvswdRest:
|
|
|
162
163
|
return bytes([REST_MODE[self.mode]])
|
|
163
164
|
|
|
164
165
|
|
|
166
|
+
@dataclass
|
|
167
|
+
class WireHold:
|
|
168
|
+
"""Whether a debug wire's lines on the port whose SWDIO is `channel` stay held at their rest after its connection
|
|
169
|
+
closes (debug §2): on - also with no item - or off (back to the free state at once)."""
|
|
170
|
+
channel: int
|
|
171
|
+
mode: str = "on"
|
|
172
|
+
NAME = "wire-hold"
|
|
173
|
+
|
|
174
|
+
def key(self) -> int:
|
|
175
|
+
return self.channel
|
|
176
|
+
|
|
177
|
+
def value(self) -> bytes:
|
|
178
|
+
return struct.pack("<H", self.key()) + self.data()
|
|
179
|
+
|
|
180
|
+
def data(self) -> bytes:
|
|
181
|
+
if self.mode not in HOLD_MODE:
|
|
182
|
+
raise ValueError(f"wire-hold mode {self.mode!r}: one of {', '.join(HOLD_MODE)}")
|
|
183
|
+
return bytes([HOLD_MODE[self.mode]])
|
|
184
|
+
|
|
185
|
+
|
|
165
186
|
@dataclass(kw_only=True)
|
|
166
187
|
class ConsolePassthrough:
|
|
167
188
|
"""Serial port `port` carries the target's debug console - read by the probe itself over `wire_fn` on (swdio, swclk)
|
|
@@ -315,6 +336,8 @@ def decode(name: str, key: int, d: bytes, setting: Setting | None = None, netifs
|
|
|
315
336
|
try:
|
|
316
337
|
if name == "label":
|
|
317
338
|
return Label(channel=key, text=d.decode("utf-8", "replace"))
|
|
339
|
+
if name == "wire-hold" and len(d) == 1 and d[0] in HOLD_MODE.values():
|
|
340
|
+
return WireHold(channel=key, mode={v: k for k, v in HOLD_MODE.items()}[d[0]])
|
|
318
341
|
if name == "rvswd-rest" and len(d) == 1 and d[0] in REST_MODE.values():
|
|
319
342
|
return RvswdRest(channel=key, mode={v: k for k, v in REST_MODE.items()}[d[0]])
|
|
320
343
|
if name == "idle" and len(d) == 1:
|
|
@@ -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"], ITEM["rvswd_rest"]) # keyed by a channel
|
|
120
|
+
CHANNEL_ITEMS = (ITEM["label"], ITEM["idle"], ITEM["disable"], ITEM["rvswd_rest"], ITEM["wire_hold"]) # keyed by a channel
|
|
121
|
+
HOLD_MODE = cfgmod.HOLD_MODE
|
|
121
122
|
REST_MODE = cfgmod.REST_MODE
|
|
122
123
|
IDLE_MODE = _CFG.enum["idle_mode"]
|
|
123
124
|
CFG_DESCRIBE = cfgmod.DESCRIBE
|
|
@@ -327,6 +328,7 @@ class VirtualTarget:
|
|
|
327
328
|
havereset: bool = True
|
|
328
329
|
resume_misses: int = 0 # resumes that do not take (status state, dpc unchanged)
|
|
329
330
|
present: bool = True # something answers on this pin pair (scan, attach)
|
|
331
|
+
needs_drive: bool = False # loses its halt once the probe stops driving the line (a CH32L103)
|
|
330
332
|
target_id: int | None = None # the dmi_7f target_id attach reports (None: none)
|
|
331
333
|
# run(pc, regs) -> (stopped, dpc, elapsed_us); default: halts 0x10 past the start
|
|
332
334
|
run_hook: Callable | None = None
|
|
@@ -554,7 +556,7 @@ class Connection:
|
|
|
554
556
|
|
|
555
557
|
|
|
556
558
|
ITEM_SIZES = {ITEM["idle"]: 1, ITEM["disable"]: 0, ITEM["passthrough"]: 9, # the data of a fixed length (probe.config §1)
|
|
557
|
-
ITEM["console_passthrough"]: 13, ITEM["ipv4"]: 14, ITEM["rvswd_rest"]: 1}
|
|
559
|
+
ITEM["console_passthrough"]: 13, ITEM["ipv4"]: 14, ITEM["rvswd_rest"]: 1, ITEM["wire_hold"]: 1}
|
|
558
560
|
PASSTHROUGHS = (ITEM["passthrough"], ITEM["console_passthrough"])
|
|
559
561
|
|
|
560
562
|
|
|
@@ -784,6 +786,7 @@ class Endpoint:
|
|
|
784
786
|
self.session_ports: set[int] = set() # the transports the lock holder's requests came on (probe.config §1.1)
|
|
785
787
|
self.passthrough_out: dict[int, bytearray] = {} # a serial port's pass-through bytes not sent yet
|
|
786
788
|
self.resident: dict[int, bool] = {} # console_passthrough's own connection per port: attached (config §1.2)
|
|
789
|
+
self.holds: dict[tuple[int, tuple[int, int]], int] = {} # (wire fn, pair) -> rest: lines held after a close (debug §2)
|
|
787
790
|
self.last: int | None = None # S: the id that holds or last held the lock (the resend table's, §5.2)
|
|
788
791
|
self.owner: bytes | None = None # the holder's owner, while the lock is held (core §6.4)
|
|
789
792
|
self.lease_ms = self.lease_default_ms
|
|
@@ -1561,7 +1564,7 @@ class Endpoint:
|
|
|
1561
1564
|
connections closed (an unknown `cid`: none)."""
|
|
1562
1565
|
gone = [c for c in (list(self.conns) if cid is None else [cid]) if c in self.conns]
|
|
1563
1566
|
for c in gone:
|
|
1564
|
-
self._close_conn(c)
|
|
1567
|
+
self._close_conn(c, lost=True)
|
|
1565
1568
|
return gone
|
|
1566
1569
|
|
|
1567
1570
|
# ---- core -----------------------------------------------------------------------------------
|
|
@@ -2334,6 +2337,11 @@ class Endpoint:
|
|
|
2334
2337
|
raise wrong_kind() # another wire's connection
|
|
2335
2338
|
self._close_conn(cid)
|
|
2336
2339
|
return m.COMPLETED, m.SUCCESS, b""
|
|
2340
|
+
if op == O["holds"]: # lock-free, paged by first (debug §2.2)
|
|
2341
|
+
first = t.take("B")
|
|
2342
|
+
t.tail()
|
|
2343
|
+
rows = [struct.pack("<HHB", *pair, rest) for pair, rest in self.held_ports(fn)]
|
|
2344
|
+
return m.COMPLETED, m.SUCCESS, self._paged(rows, first)
|
|
2337
2345
|
if op == O["connections"]: # lock-free, paged by first (debug §2.1)
|
|
2338
2346
|
first = t.take("B")
|
|
2339
2347
|
t.tail()
|
|
@@ -2409,14 +2417,45 @@ class Endpoint:
|
|
|
2409
2417
|
self.conns[cid] = Connection(fn, pair, self._order, speed, tid)
|
|
2410
2418
|
return cid
|
|
2411
2419
|
|
|
2412
|
-
def _close_conn(self, cid: int) -> None:
|
|
2413
|
-
"""The connection goes, its console streams first (common §2)
|
|
2420
|
+
def _close_conn(self, cid: int, lost: bool = False) -> None:
|
|
2421
|
+
"""The connection goes, its console streams first (common §2). Its lines stay held at its rest unless the line
|
|
2422
|
+
was lost, the port's wire-hold is off or a pin has an idle / disable item (debug §2); else to their idle state,
|
|
2423
|
+
and a target that needs the drive loses its halt."""
|
|
2414
2424
|
for sid in [k for k, st in self.streams.items() if st.conn == cid]:
|
|
2415
2425
|
self._close_stream(sid)
|
|
2416
2426
|
gone = self.conns.pop(cid, None)
|
|
2417
2427
|
self.resources.pop(cid, None)
|
|
2418
|
-
if gone is
|
|
2419
|
-
|
|
2428
|
+
if gone is None:
|
|
2429
|
+
return
|
|
2430
|
+
if not lost and self._may_hold(gone.pair):
|
|
2431
|
+
self.holds[(gone.fn, gone.pair)] = gone.idle_clock if self.names[gone.fn] == "oep.wire.rvswd" else 0
|
|
2432
|
+
return
|
|
2433
|
+
self._park(gone.pair)
|
|
2434
|
+
tg = self.targets.get((gone.fn, gone.pair))
|
|
2435
|
+
if tg is not None and tg.needs_drive:
|
|
2436
|
+
tg.halted = False # its debug module dropped the link: the hart runs
|
|
2437
|
+
|
|
2438
|
+
def _may_hold(self, pair: tuple[int, int]) -> bool:
|
|
2439
|
+
"""debug §2: wire-hold on (no item: on) for the port's SWDIO, and no idle / disable item on its pins."""
|
|
2440
|
+
mode = self.config.get((ITEM["wire_hold"], pair[0]), bytes([HOLD_MODE["on"]]))[0]
|
|
2441
|
+
pins = [p for p in pair if p != 0xFFFF]
|
|
2442
|
+
return (mode == HOLD_MODE["on"] and not any((ITEM["idle"], p) in self.config for p in pins)
|
|
2443
|
+
and not any(p in self.disabled for p in pins))
|
|
2444
|
+
|
|
2445
|
+
def held_ports(self, fn: int) -> list[tuple[tuple[int, int], int]]:
|
|
2446
|
+
"""The ports wire `fn` holds now (debug §2.2): a hold ends once its pins are taken (a plan, a connection), its
|
|
2447
|
+
wire-hold goes off or an idle / disable item lands on them; an ended hold's pins go to their free state."""
|
|
2448
|
+
busy = {a[2] for a in self.plan if not self._listens(a[0])} | {p for c in self.conns.values() for p in c.pair}
|
|
2449
|
+
for key in list(self.holds):
|
|
2450
|
+
hfn, pair = key
|
|
2451
|
+
if any(p in busy for p in pair if p != 0xFFFF) or not self._may_hold(pair):
|
|
2452
|
+
del self.holds[key]
|
|
2453
|
+
if not any(p in busy for p in pair if p != 0xFFFF):
|
|
2454
|
+
self._park(pair)
|
|
2455
|
+
tg = self.targets.get(key)
|
|
2456
|
+
if tg is not None and tg.needs_drive:
|
|
2457
|
+
tg.halted = False
|
|
2458
|
+
return [(pair, rest) for (hfn, pair), rest in self.holds.items() if hfn == fn]
|
|
2420
2459
|
|
|
2421
2460
|
def _cleanup_failed(self, cid: int, done: int, payload: bytes) -> tuple[int, int, bytes]:
|
|
2422
2461
|
"""A block op whose restore of DATA0 / DATA1 failed: partial when done > 0 (all words included), else failed,
|
|
@@ -3301,6 +3340,8 @@ class Endpoint:
|
|
|
3301
3340
|
return True
|
|
3302
3341
|
if name == ITEM["rvswd_rest"] and d[0] not in REST_MODE.values():
|
|
3303
3342
|
return True # a mode the definition leaves unused (§1)
|
|
3343
|
+
if name == ITEM["wire_hold"] and d[0] not in HOLD_MODE.values():
|
|
3344
|
+
return True
|
|
3304
3345
|
return False
|
|
3305
3346
|
|
|
3306
3347
|
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 = "32b9f952338089a5"
|
|
7
7
|
SCHEMA = 1
|
|
8
8
|
PROTOCOL_REVISION = 1
|
|
9
9
|
CONFIRM_REQUEST_MAGIC = 'OEP?'
|
|
@@ -41,15 +41,15 @@ PROBE_LINK = _NS(name="oep.probe.link", revision=1, target=None, op={"source": 0
|
|
|
41
41
|
tlv={}, event={}, enum={"port_speed_step": {"try": 0x00, "commit": 0x01, "revert": 0x02}, "port_state": {"boot": 0x00, "trying": 0x01, "committed": 0x02, "recovery_pending": 0x03}}, own={},
|
|
42
42
|
line_names={}, names={})
|
|
43
43
|
INTERFACES["oep.probe.link"] = PROBE_LINK
|
|
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},
|
|
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, "holds": 0x14}, lock_free={0x13, 0x14},
|
|
45
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
|
-
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},
|
|
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, "holds": 0x14}, lock_free={0x13, 0x14},
|
|
49
49
|
tlv={"describe": {"max_connections": 0x40}, "scan": {"max_speed": 0x01}, "attach": {"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, "reset": 0x03}}, own={},
|
|
50
50
|
line_names={}, names={})
|
|
51
51
|
INTERFACES["oep.wire.swio"] = WIRE_SWIO
|
|
52
|
-
WIRE_SWD = _NS(name="oep.wire.swd", revision=1, target="ARM targets with an SWD debug port", op={"scan": 0x10, "attach": 0x11, "detach": 0x12, "connections": 0x13}, lock_free={0x13},
|
|
52
|
+
WIRE_SWD = _NS(name="oep.wire.swd", revision=1, target="ARM targets with an SWD debug port", op={"scan": 0x10, "attach": 0x11, "detach": 0x12, "connections": 0x13, "holds": 0x14}, lock_free={0x13, 0x14},
|
|
53
53
|
tlv={"describe": {"max_connections": 0x40}, "scan": {"max_speed": 0x01, "targetsel": 0x02}, "attach": {"targetsel": 0x02, "reset": 0x04}, "attach_answer": {"target_id": 0x01}, "connections_answer": {"selected_target": 0x01}, "unavailable_payload": {"index": 0x40}, "unsupported_payload": {"index": 0x40}}, event={}, enum={"scan_kind": {"arm_adi": 0x02}, "attach_flags": {"dormant_woken": 0x04}, "features": {}, "attach_method": {"run": 0x00}, "pin_role": {"swdio": 0x01, "swclk": 0x02, "reset": 0x03}}, own={},
|
|
54
54
|
line_names={}, names={})
|
|
55
55
|
INTERFACES["oep.wire.swd"] = WIRE_SWD
|
|
@@ -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}, "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'}})
|
|
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}, "wire_hold_mode": {"off": 0x00, "on": 0x01}, "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", 'wire-hold': "key channel (the port's SWDIO); mode(u8): wire_hold_mode"}, 'netif': {'wifi': 'Wi-Fi station', 'ethernet': 'wired Ethernet'}})
|
|
99
99
|
INTERFACES["oep.probe.config"] = PROBE_CONFIG
|
|
@@ -188,7 +188,7 @@ class WireBase(Interface):
|
|
|
188
188
|
"""oep.wire.<link>: scan / attach / detach / connections (oep-if-debug §0-§2). The shared part; each link's attach
|
|
189
189
|
takes its own arguments. A failed scan, attach or detach is completed failed with `status(u8) [TLV]` (common §3).
|
|
190
190
|
attach names its pins in the fixed part (§1): `pins` None takes the wire's one candidate pair (candidate_pairs)."""
|
|
191
|
-
SCAN, ATTACH, DETACH, CONNECTIONS = (_WIRE.op[k] for k in ("scan", "attach", "detach", "connections"))
|
|
191
|
+
SCAN, ATTACH, DETACH, CONNECTIONS, HOLDS = (_WIRE.op[k] for k in ("scan", "attach", "detach", "connections", "holds"))
|
|
192
192
|
REVISION = 1
|
|
193
193
|
TAG_RESET = _WIRE.tlv["attach"]["reset"] # channel(u16) hold_ms(u16), critical: attach under reset (§3)
|
|
194
194
|
TAG_SCAN_MAX_SPEED = _WIRE.tlv["scan"]["max_speed"]
|
|
@@ -299,6 +299,19 @@ class WireBase(Interface):
|
|
|
299
299
|
"""Close the connection and its streams (oep-if-debug §2)."""
|
|
300
300
|
self._call(self.DETACH, struct.pack("<I", conn))
|
|
301
301
|
|
|
302
|
+
def holds(self) -> list[tuple[tuple[int, int], int]]:
|
|
303
|
+
"""The ports this wire holds at their rest after a close (oep-if-debug §2.2, lock-free; paged like connections):
|
|
304
|
+
[((swdio, swclk), rest)] - rest: rvswd's idle_clock value (0 high, 1 low), 0 on other wires. Not connections."""
|
|
305
|
+
out: list[tuple[tuple[int, int], int]] = []
|
|
306
|
+
while True:
|
|
307
|
+
rd = m.Reader(self._call(self.HOLDS, bytes([len(out)]), locked=False).payload)
|
|
308
|
+
more, count = rd.take("BB")
|
|
309
|
+
page = [((d, c), r) for d, c, r in (rd.take("HHB") for _ in range(count))]
|
|
310
|
+
rd.tail()
|
|
311
|
+
out += page
|
|
312
|
+
if not more or not count or len(out) > 0xFF:
|
|
313
|
+
return out
|
|
314
|
+
|
|
302
315
|
def connections(self) -> list["ConnectionInfo"]:
|
|
303
316
|
"""The wire's live connections, in the order they were made (oep-if-debug §2.1, lock-free; paged: the request
|
|
304
317
|
is first(u8), the answer more count entries [TLV], followed until more is 0). swd's selected_target TLVs
|
{oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_attach_model.py
RENAMED
|
@@ -36,7 +36,7 @@ class Attachments(Dependencies):
|
|
|
36
36
|
return bytes(page)
|
|
37
37
|
def describe(self,fn):
|
|
38
38
|
if fn==4:return (tlv(DC['ops'],pack_ops(set(COP.values()))),*(tlv(CD['mechanism'],name.encode()) for name in self.mechanisms))
|
|
39
|
-
rows=[tlv(DC['ops'],pack_ops({WOP['attach'],WOP['detach'],WOP['connections']})),tlv(WT['describe']['max_connections'],b'\x02'),tlv(DC['min_clock_hz'],struct.pack('<I',1000))]
|
|
39
|
+
rows=[tlv(DC['ops'],pack_ops({WOP['attach'],WOP['detach'],WOP['connections'],WOP['holds']})),tlv(WT['describe']['max_connections'],b'\x02'),tlv(DC['min_clock_hz'],struct.pack('<I',1000))]
|
|
40
40
|
for index,pair in enumerate(self.pairs[fn]):
|
|
41
41
|
members=[(WE['pin_role']['swdio'],pair[0])] if fn==2 else [(WE['pin_role']['swdio'],pair[0]),(WE['pin_role']['swclk'],pair[1])]
|
|
42
42
|
rows.append(tlv(DC['channel_group'],bytes((index,len(members)))+b''.join(struct.pack('<BH',*row) for row in members)))
|
|
@@ -79,6 +79,7 @@ class Attachments(Dependencies):
|
|
|
79
79
|
def dispatch_request(self,fn,op,payload,tags):
|
|
80
80
|
if fn<=3:
|
|
81
81
|
if op==WOP['connections']:return self.connection_page(fn,payload[0])
|
|
82
|
+
if op==WOP['holds']:return b'\0\0'+extension() # no port held in this model (debug §2.2)
|
|
82
83
|
if op==WOP['detach']:
|
|
83
84
|
rid=struct.unpack('<I',payload)[0];self.resource(rid,'connection')
|
|
84
85
|
if self.connections[rid]['fn']!=fn:raise Reject(R['unavailable'],cause('wrong_state'))
|
|
@@ -131,7 +132,7 @@ class AttachModel(DependencyModel):
|
|
|
131
132
|
if len(request)>=6 and struct.unpack_from('<H',request,3)[0]==4:
|
|
132
133
|
e.fixed={COP['open']:5,COP['read']:15,COP['marks']:8,COP['clear']:4,COP['mark']:5,COP['write']:6,COP['close']:4,COP['streams']:2};e.free={COP['read'],COP['marks'],COP['streams']}
|
|
133
134
|
if request[5]==COP['write'] and len(request)>=16:e.fixed[COP['write']]=6+struct.unpack_from('<H',request,14)[0]
|
|
134
|
-
else:e.fixed={WOP['attach']:9,WOP['detach']:4,WOP['connections']:1};e.free={WOP['connections']}
|
|
135
|
+
else:e.fixed={WOP['attach']:9,WOP['detach']:4,WOP['connections']:1,WOP['holds']:1};e.free={WOP['connections'],WOP['holds']}
|
|
135
136
|
try:return self.ep.handle(request)
|
|
136
137
|
finally:e.fixed,e.free=fixed,free
|
|
137
138
|
def restart_fixture(self):
|
|
@@ -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=(), rvswd: bool = False) -> Offered:
|
|
265
|
+
own=(), rvswd: bool = False, hold: bool = True) -> 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
|
|
@@ -276,6 +276,8 @@ def _config(fn: int, instance: int, storage: int = 4096, *, channels: int = 64,
|
|
|
276
276
|
settings.append(_setting("ipv4", len(netifs) + 1))
|
|
277
277
|
if rvswd: # its automatic rest can be turned off per port (debug §3.1)
|
|
278
278
|
settings.append(_setting("rvswd-rest", channels))
|
|
279
|
+
if hold: # a debug wire's hold after a close, per port (debug §2)
|
|
280
|
+
settings.append(_setting("wire-hold", channels))
|
|
279
281
|
settings += [_setting(name, keys, form, max_len, flags) for name, form, keys, max_len, flags in own]
|
|
280
282
|
return Offered(fn, instance, "oep.probe.config", ops_of("oep.probe.config", *drop)
|
|
281
283
|
+ ((catalog.u32(_CFG["storage"], storage),) if storage else ()) + tuple(settings)
|
|
@@ -24,7 +24,7 @@ class OepDeclarations(Resources):
|
|
|
24
24
|
|
|
25
25
|
def describe(self, fn):
|
|
26
26
|
if fn==4:return (tlv(DC['ops'],pack_ops(set(COP.values()))),tlv(CD['mechanism'],b'dmdata'))
|
|
27
|
-
rows=[tlv(DC['ops'],pack_ops({WOP['attach'],WOP['detach'],WOP['connections']}))]
|
|
27
|
+
rows=[tlv(DC['ops'],pack_ops({WOP['attach'],WOP['detach'],WOP['connections'],WOP['holds']}))]
|
|
28
28
|
if fn==1:rows.append(tlv(WT['describe']['max_connections'],b'\x02'))
|
|
29
29
|
if fn==2:rows.append(tlv(DC['min_clock_hz'],struct.pack('<I',1000000)))
|
|
30
30
|
role=WE['pin_role']
|
|
@@ -35,7 +35,7 @@ class OepDeclarations(Resources):
|
|
|
35
35
|
return tuple(rows)
|
|
36
36
|
|
|
37
37
|
def dispatch(self, fn, op, payload):
|
|
38
|
-
if (fn!=4 and op
|
|
38
|
+
if (fn!=4 and op in (WOP['connections'],WOP['holds'])) or (fn==4 and op==COP['streams']):return b'\0\0'+extension()
|
|
39
39
|
raise Reject(R['no_resource']) # declarations only: no simulated attach or target work
|
|
40
40
|
|
|
41
41
|
|
|
@@ -50,6 +50,6 @@ class OepDeclarationModel(ResourceModel):
|
|
|
50
50
|
if len(request)>=6:
|
|
51
51
|
fn=struct.unpack_from('<H',request,3)[0]
|
|
52
52
|
if fn==4:e.fixed={COP['open']:5,COP['read']:15,COP['marks']:8,COP['clear']:4,COP['mark']:5,COP['write']:6,COP['close']:4,COP['streams']:2};e.free={COP['read'],COP['marks'],COP['streams']}
|
|
53
|
-
else:e.fixed={WOP['attach']:9,WOP['detach']:4,WOP['connections']:1};e.free={WOP['connections']}
|
|
53
|
+
else:e.fixed={WOP['attach']:9,WOP['detach']:4,WOP['connections']:1,WOP['holds']:1};e.free={WOP['connections'],WOP['holds']}
|
|
54
54
|
try:return super().handle(request)
|
|
55
55
|
finally:e.fixed,e.free=fixed,free
|
{oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_registered_ops_model.py
RENAMED
|
@@ -8,7 +8,7 @@ from . import registry as _reg
|
|
|
8
8
|
# Each interface's mandatory ops, by name (looked up in the registry: never literal numbers).
|
|
9
9
|
_MANDATORY={
|
|
10
10
|
'oep.probe.plan':('plan_apply','plan_release'),'oep.probe.restart':('restart',),'oep.probe.link':('source','sink'),
|
|
11
|
-
**{w:('attach','detach','connections') for w in ('oep.wire.rvswd','oep.wire.swio','oep.wire.swd')},
|
|
11
|
+
**{w:('attach','detach','connections','holds') for w in ('oep.wire.rvswd','oep.wire.swio','oep.wire.swd')},
|
|
12
12
|
'oep.target.riscv-dm':('dmi',),'oep.target.arm-adi':('transfer',),
|
|
13
13
|
'oep.target.console':('open','read','close','streams'),
|
|
14
14
|
'oep.fixture.gpio':('set','read'),'oep.fixture.uart':('configure','read','status'),
|
{oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_scan_options_model.py
RENAMED
|
@@ -14,7 +14,7 @@ KIND = _reg.WIRE_RVSWD.enum["scan_kind"] | _reg.WIRE_SWD.enum["scan_kind"]
|
|
|
14
14
|
|
|
15
15
|
class ScanOptions(WireOptions):
|
|
16
16
|
def __init__(self,ep):super().__init__(ep);self.scan_limit=2;self.identities={};self.scan_live=set();self.scan_events=[]
|
|
17
|
-
def describe(self,fn):return tuple(tlv(DC['ops'],pack_ops({WOP['scan'],WOP['attach'],WOP['detach'],WOP['connections']})) if fn<=3 and row[0]==DC['ops'] else row for row in super().describe(fn))
|
|
17
|
+
def describe(self,fn):return tuple(tlv(DC['ops'],pack_ops({WOP['scan'],WOP['attach'],WOP['detach'],WOP['connections'],WOP['holds']})) if fn<=3 and row[0]==DC['ops'] else row for row in super().describe(fn))
|
|
18
18
|
def request_tags(self,fn,op,data):
|
|
19
19
|
if fn>3 or op!=WOP['scan']:return super().request_tags(fn,op,data)
|
|
20
20
|
known={SC['max_speed']:4}
|
|
@@ -266,6 +266,7 @@ op = [
|
|
|
266
266
|
{ code = 0x11, name = "attach", lock = true },
|
|
267
267
|
{ code = 0x12, name = "detach", lock = true },
|
|
268
268
|
{ code = 0x13, name = "connections", lock = false }, # first(u8) -> more, count x entry
|
|
269
|
+
{ code = 0x14, name = "holds", lock = false }, # first(u8) -> more, count x (swdio, swclk, rest): ports held after close (debug §2.2)
|
|
269
270
|
]
|
|
270
271
|
|
|
271
272
|
[interface.tlv.describe]
|
|
@@ -322,6 +323,7 @@ op = [
|
|
|
322
323
|
{ code = 0x11, name = "attach", lock = true },
|
|
323
324
|
{ code = 0x12, name = "detach", lock = true },
|
|
324
325
|
{ code = 0x13, name = "connections", lock = false },
|
|
326
|
+
{ code = 0x14, name = "holds", lock = false },
|
|
325
327
|
]
|
|
326
328
|
|
|
327
329
|
[interface.tlv.describe]
|
|
@@ -365,6 +367,7 @@ op = [
|
|
|
365
367
|
{ code = 0x11, name = "attach", lock = true },
|
|
366
368
|
{ code = 0x12, name = "detach", lock = true },
|
|
367
369
|
{ code = 0x13, name = "connections", lock = false },
|
|
370
|
+
{ code = 0x14, name = "holds", lock = false },
|
|
368
371
|
]
|
|
369
372
|
|
|
370
373
|
[interface.tlv.describe]
|
|
@@ -805,6 +808,7 @@ console-passthrough = "key port; wire_fn(u16) swdio(u16) swclk(u16) max_speed(u3
|
|
|
805
808
|
wifi = "key entry; ssid_len(u8) ssid pass_len(u8) passphrase; passphrase write-only"
|
|
806
809
|
ipv4 = "key netif; mode(u8) address(4) prefix(u8) gateway(4) dns(4)"
|
|
807
810
|
rvswd-rest = "key channel (the port's SWCLK); mode(u8): rvswd_rest_mode"
|
|
811
|
+
wire-hold = "key channel (the port's SWDIO); mode(u8): wire_hold_mode"
|
|
808
812
|
[interface.line_names] # Host conventions only (host-development-guide §5.3)
|
|
809
813
|
swdio = "the debug data line (2 wires: rvswd, swd) (Host only)"
|
|
810
814
|
swclk = "the debug clock line (2 wires: rvswd, swd) (Host only)"
|
|
@@ -827,6 +831,9 @@ ethernet = "wired Ethernet"
|
|
|
827
831
|
auto = 0 # the probe's automatic choice from target_id (also when no item)
|
|
828
832
|
high = 1
|
|
829
833
|
low = 2
|
|
834
|
+
[interface.enum.wire_hold_mode] # wire-hold: the debug wire's lines held at their rest after a close (oep-if-debug §2)
|
|
835
|
+
off = 0
|
|
836
|
+
on = 1 # also when no item
|
|
830
837
|
[interface.enum.ipv4_mode]
|
|
831
838
|
dhcp = 0
|
|
832
839
|
static = 1
|
|
@@ -118,7 +118,7 @@ def test_describe_and_a_probe_without_storage():
|
|
|
118
118
|
ep, hst = open_bench()
|
|
119
119
|
d = config.ProbeConfig(hst).describe()
|
|
120
120
|
assert d.storage_bytes == 4096 and d.items == ["label", "idle", "disable", "passthrough", "console-passthrough",
|
|
121
|
-
"rvswd-rest"]
|
|
121
|
+
"rvswd-rest", "wire-hold"]
|
|
122
122
|
probe = virtual_bench.VirtualProbe("no-storage", 1024, [virtual_bench._config(o.fn, 0, storage=0)
|
|
123
123
|
if o.name == "oep.probe.config" else o for o in virtual_bench.p4_bench().offered])
|
|
124
124
|
ep = endpoint.Endpoint(probe, Clock())
|
{oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_oep_declarations.py
RENAMED
|
@@ -91,7 +91,8 @@ def test_scan_is_optional_and_the_mechanisms_are_counted():
|
|
|
91
91
|
|
|
92
92
|
|
|
93
93
|
def test_future_registry_mandatory_op_is_not_silently_ignored():
|
|
94
|
-
_,c=setup();c.reg['interface'][0]['op']
|
|
94
|
+
_,c=setup();ops=c.reg['interface'][0]['op']
|
|
95
|
+
ops.append({'name':'future_required','code':max(o['code'] for o in ops)+1}) # a code no probe offers yet
|
|
95
96
|
assert OepDeclarationChecks(c,SELECTION).run()['status']=='failed'
|
|
96
97
|
|
|
97
98
|
|
|
@@ -619,7 +619,7 @@ def test_every_op_but_connections_needs_the_lock_and_two_connections_share_one_l
|
|
|
619
619
|
c0 = struct.unpack_from("<I", attach(hv, p0).payload)[0]
|
|
620
620
|
c1 = struct.unpack_from("<I", attach(hv, p1).payload)[0]
|
|
621
621
|
for op in W.values():
|
|
622
|
-
if op
|
|
622
|
+
if op not in (W["connections"], W["holds"]): # both lock-free (debug §2.1, §2.2)
|
|
623
623
|
r = hv.raw(1, op, fixed(ep.pairs[1][2]), session=False)
|
|
624
624
|
assert (r.resolution, r.detail) == (m.REJECTED, m.SESSION_REQUIRED), op
|
|
625
625
|
for op in RV.values():
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""debug §2: a connection closed other than by line loss leaves its lines held at its rest (a CH32L103 keeps its
|
|
2
|
+
halt across processes); probe.config wire-hold turns it off per port; holds (§2.2) lists the held ports; the hold is a
|
|
3
|
+
kind of free state - taken like a free pin, never refused for it."""
|
|
4
|
+
import time
|
|
5
|
+
|
|
6
|
+
import pytest
|
|
7
|
+
|
|
8
|
+
from oep_client import config, core, endpoint, host as h, riscv, virtual_bench
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def bench():
|
|
12
|
+
start = time.monotonic()
|
|
13
|
+
ep = endpoint.Endpoint(virtual_bench.p4_x035(), lambda: int((time.monotonic() - start) * 1000))
|
|
14
|
+
hst = h.Host(ep.handle)
|
|
15
|
+
core.take(hst, 10000)
|
|
16
|
+
fn = core.find(hst, "oep.wire.rvswd")
|
|
17
|
+
(pair,) = [p for (f, p) in ep.targets if f == fn]
|
|
18
|
+
ep.targets[(fn, pair)].needs_drive = True # a CH32L103: the halt goes once the line is not driven
|
|
19
|
+
return ep, hst, riscv.Wire(hst, "oep.wire.rvswd"), pair
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def halt_then_end(ep, hst, wire, pair):
|
|
23
|
+
conn, _ = wire.attach(halt=True, pins=pair)
|
|
24
|
+
hst.end() # the process ends: its connection closes (core §9)
|
|
25
|
+
core.take(hst, 10000)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_the_halt_survives_another_session_by_default():
|
|
29
|
+
ep, hst, wire, pair = bench()
|
|
30
|
+
halt_then_end(ep, hst, wire, pair)
|
|
31
|
+
assert [p for p, _ in wire.holds()] == [pair]
|
|
32
|
+
assert wire.connections() == [] # a hold is no connection
|
|
33
|
+
wire.attach(halt=False, pins=pair) # taken like a free pin (never cause 1 / 5)
|
|
34
|
+
assert wire.halted is False and ep.targets[(core.find(hst, "oep.wire.rvswd"), pair)].halted
|
|
35
|
+
assert wire.holds() == [] # the taker carries on
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def test_wire_hold_off_lets_the_lines_go_and_the_target_loses_its_halt():
|
|
39
|
+
ep, hst, wire, pair = bench()
|
|
40
|
+
config.ProbeConfig(hst).set([config.WireHold(channel=pair[0], mode="off")])
|
|
41
|
+
assert config.WireHold(channel=pair[0], mode="off") in config.ProbeConfig(hst).items()
|
|
42
|
+
halt_then_end(ep, hst, wire, pair)
|
|
43
|
+
assert wire.holds() == []
|
|
44
|
+
assert not ep.targets[(core.find(hst, "oep.wire.rvswd"), pair)].halted
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def test_a_lost_line_is_not_held():
|
|
48
|
+
ep, hst, wire, pair = bench()
|
|
49
|
+
wire.attach(halt=True, pins=pair)
|
|
50
|
+
ep.lose()
|
|
51
|
+
assert wire.holds() == []
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def test_an_idle_item_on_a_held_pin_ends_the_hold():
|
|
55
|
+
ep, hst, wire, pair = bench()
|
|
56
|
+
halt_then_end(ep, hst, wire, pair)
|
|
57
|
+
assert wire.holds()
|
|
58
|
+
config.ProbeConfig(hst).set([config.Idle(channel=pair[1], mode="pull-down")])
|
|
59
|
+
assert wire.holds() == []
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
bc523272c4b90bc3593cf524dd8ab65f628466aa
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
f329daad8ca30b9e08b83e393e05c0cf1224a44b3d972f90017dae656224d6a2 src/oep_client/registry.py
|
|
2
|
+
32b9f952338089a5d0cd6bd07192b854f7942816e3b88a9838468c3b0e4d84fc tests/spec/oep-v1.toml
|
|
3
3
|
546ddf20d11b86faa23afe2fa1e3c38c514c157db4d5a5c8d92edf48647d61f1 tests/vectors/checks.json
|
|
4
4
|
9950576fcf803299386d0b2e61bf154402f306102311312d49dec6a87a34ced5 tests/vectors/cobs.json
|
|
5
5
|
c981ca124e3393ba68ce3ce3ee92970827f399202c7688bb6e02b66bb6190806 tests/vectors/confirm.json
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ba4e8ee9a3ae21dda84938dd793544b9f72ad768
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-group-geometry-conformance.ja.md
RENAMED
|
File without changes
|
{oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-metadata-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-timeline-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-execution-conformance.ja.md
RENAMED
|
File without changes
|
{oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-fallback-conformance.ja.md
RENAMED
|
File without changes
|
|
File without changes
|
{oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-power-loss-conformance.ja.md
RENAMED
|
File without changes
|