oep-client-python 0.0.53__tar.gz → 0.0.55__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.53 → oep_client_python-0.0.55}/CHANGELOG.md +93 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/PKG-INFO +13 -1
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/README.ja.md +9 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/README.md +9 -0
- oep_client_python-0.0.55/docs/pytest.ja.md +97 -0
- oep_client_python-0.0.55/docs/pytest.md +101 -0
- oep_client_python-0.0.55/docs/swd.ja.md +173 -0
- oep_client_python-0.0.55/docs/swd.md +179 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/pyproject.toml +6 -2
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/__init__.py +1 -1
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/__main__.py +89 -0
- oep_client_python-0.0.55/src/oep_client/brokers.py +149 -0
- oep_client_python-0.0.55/src/oep_client/call.py +284 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/catalog.py +70 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/__init__.py +1 -1
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/core_smoke.py +1 -1
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_core.py +1 -1
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_deadline.py +2 -2
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_requests.py +2 -2
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_wait.py +2 -2
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/dump.py +7 -1
- oep_client_python-0.0.55/src/oep_client/gdb_server.py +528 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/host.py +4 -1
- oep_client_python-0.0.55/src/oep_client/ide.py +341 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/link.py +27 -4
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/pyserial/protocol_oep.py +2 -2
- oep_client_python-0.0.55/src/oep_client/pytest_plugin.py +433 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/registry.py +5 -5
- oep_client_python-0.0.53/src/oep_client/rp2040_peer.py → oep_client_python-0.0.55/src/oep_client/rp2040_swd.py +11 -77
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/virtual_bench.py +15 -3
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_mdns.py +9 -4
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/spec/DOCS_SHA256 +2 -2
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/spec/oep-v1.toml +25 -1
- oep_client_python-0.0.55/tests/test_brokers.py +128 -0
- oep_client_python-0.0.55/tests/test_call.py +234 -0
- oep_client_python-0.0.55/tests/test_gdb_server.py +202 -0
- oep_client_python-0.0.55/tests/test_ide.py +151 -0
- oep_client_python-0.0.55/tests/test_pytest_plugin.py +149 -0
- oep_client_python-0.0.53/tests/test_rp2040_peer.py → oep_client_python-0.0.55/tests/test_rp2040_swd.py +3 -8
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_core.py +6 -3
- oep_client_python-0.0.55/tests/vectors/SPEC_COMMIT +1 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/SPEC_SHA256 +4 -4
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/ops.json +35 -35
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/settings_file.json +2 -2
- oep_client_python-0.0.53/src/oep_client/pytest_rp2040_peer.py +0 -68
- oep_client_python-0.0.53/tests/vectors/SPEC_COMMIT +0 -1
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/.gitignore +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/LICENSE +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/README.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/allocator-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/analog-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/analog-payload-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/arm-adi-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/attach-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/block-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/capture-group-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/capture-group-geometry-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/capture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/capture-serial-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/capture-timeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/capture-timeline-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/clock-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/config-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/config-execution-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/config-fallback-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/config-paging-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/config-power-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/config-storage-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/conformance-checks.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/conformance-spec-compatibility.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/core-fixed-fields-review.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/core-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/corr-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/cut-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/data-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/debug-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/dependency-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/discovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/dmseq-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/dmseq-target-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/execution-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/exhausted-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/fixture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/gpio-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/gpio-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/hardware-configuration.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/hardware-quickstart.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/hardware-schema.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/host-core-shapes-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/host-deadline-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/host-notification-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/host-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/host-resend-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/host-tlv-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/host-value-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/host-wait-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/i2c-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/interface-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/interface-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/link-routes-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/link-transfer-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/logic-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/mailbox-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/notification-output-sample.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/notification-retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/notification-sequence-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/oep-declaration-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/oep-example-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/outcome-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/pin-constraints-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/pipeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/port-speed-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/probe-input-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/recovery-races-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/refusal-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/registered-ops-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/replay-pressure-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/reset-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/resource-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/response-race-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/restart-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/retention-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/retry-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/route-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/run-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/scan-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/scan-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/selected-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/session-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/session-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/spec-follow-notes.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/spi-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/step-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/subscription-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/tcp-recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/testing-consumers.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/testing-policy.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/tlv-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/trace/README.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/trace/capture.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/trace/common.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/trace/console.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/trace/core.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/trace/debug.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/trace/fixture.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/trace/link.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/trace/plan.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/trace/restart.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/trace/transports.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/uart-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/uart-stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/usb-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/wire-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/docs/writer-lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/acquire.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/arm.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/capture.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/capture_blocks.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/ch32_flash.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/cobs.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/allocator.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/allocator_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/allocator_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/analog.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/analog_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/analog_payload.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/analog_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/arm_adi.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/arm_adi_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/arm_adi_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/attach.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/attach_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/attach_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/block_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/block_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/blocks.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_group.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_group_geometry.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_group_geometry_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_group_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_group_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_metadata.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_metadata_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_serial.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_serial_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_timeline.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_timeline_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_timeline_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/clock.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/clock_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/clock_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/core_fixed_fields.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/corr.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/cut.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/cut_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/cut_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/data.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/data_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/data_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/debug.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/debug_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/debug_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/declaration_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/dependencies.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/dependency_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/dependency_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/discovery.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq_target.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq_target_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq_target_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/execution_order.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/execution_order_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/exhausted.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/exhausted_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/fixture_metadata.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/fixture_metadata_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/force_hw.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio_lifecycle_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_core_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_deadline_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_notifications.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_notifications_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_request_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_resend.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_resend_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_tlv.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_tlv_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_values.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_values_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/host_wait_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/i2c.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/i2c_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/i2c_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/interface_smoke.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/interfaces.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/lease.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/lease_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/link_routes.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/link_routes_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/link_routes_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/link_transfer_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/link_transfer_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/link_transfers.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/logic.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/logic_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/logic_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/mailbox.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/mailbox_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/mailbox_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/notification_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/notification_retention.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/notification_retention_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/notification_sequence.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/notification_sequence_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/notify_hw.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/oep_declaration_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/oep_declarations.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/oep_smoke.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/outcome_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/outcome_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/outcomes.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/pipeline.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/pipeline_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/pipeline_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_execution.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_execution_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_execution_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/probe_input.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/probe_input_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/recovery.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/recovery_race_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/recovery_races.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/recovery_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/refusal_order.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/refusal_order_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/registered_ops.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/registered_ops_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/release_hw.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/replay_pressure.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/reset.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/reset_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/reset_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/resource_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/resource_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/resources.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/response_race.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/response_race_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/restart.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/restart_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/restart_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/retention.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/retention_lifecycle.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/retention_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/retention_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/retention_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/retry.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/retry_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/retry_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/route_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/route_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/routes.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/run.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/run_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/run_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/scan.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/scan_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/scan_options.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/scan_options_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/scan_options_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/scan_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/selected_metadata.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/selected_metadata_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/serial.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/session_loss.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/session_loss_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/session_smoke.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/spi.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/spi_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/spi_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/step.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/step_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/step_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/stream.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/stream_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/stream_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/subscription_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/subscriptions.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/tcp.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/tcp_peers.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/tcp_recovery.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/tcp_recovery_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/tlv_request_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/tlv_requests.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/uart.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/uart_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/uart_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/uart_stream.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/uart_stream_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/usb.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/usb_cases.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/usb_hw.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/usb_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/wire_options.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/wire_options_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/wire_options_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/writer_lease.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/writer_lease_model.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/conformance/writer_lease_sample.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/console.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/core.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/discovery.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/endpoint.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/fixture.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/frames.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/hardware.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/hid_stream.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/interfaces.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/kept_session.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/linktest.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/memo.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/message.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/names.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/pins.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/probe_log.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/pyserial/__init__.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/pytest_conformance.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/riscv.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/rp2040.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/rp2350.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/settings.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/speed_record.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/stimulus.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/targets.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/uiapduino.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/usb_stream.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_capture.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_serial.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_serve.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_trigger.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_usb.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/virtual_core.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/virtual_fixture_drive.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/src/oep_client/virtual_names.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/conftest.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/equipment/.env.example +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/equipment/test_core_contract.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/equipment/test_preflight.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/fixtures/hardware.virtual.toml +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/.env.example +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/.env.virtual.example +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/README.ja.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/README.md +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/__init__.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/boards.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/conftest.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/firmware.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/flash.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/hardware.example.toml +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/hardware.resolved.example.toml +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/record.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/.gitignore +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32+1491c13-0.0.31-20261016T133559.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32+672bf7b-0.0.32-20261016T164655.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131458.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131510.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131526.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131532.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131656.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131703.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131708.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132050.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132057.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132104.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T160307.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T161655.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.37+1031feb-0.0.37-20261023T214002.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.38+7c158ff-0.0.38-20261027T081156.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+1ad47c7-0.0.39-20261027T182907.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+2c0c41f-0.0.39-20261027T174907.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+9317805-0.0.39-20261027T191153.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+a75fd45-0.0.39-20261027T205055.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201038.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201057.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201058.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201059.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896__crash_at_2106_s_-0.0.39-20261027T204608.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T190815.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T191854.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181116.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181812.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T182903.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+62463f2-0.0.39-20261029T145541.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+9317805-0.0.39-20261027T191150.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+a75fd45-0.0.39-20261028T190803.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T191727.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T204611.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191811.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191849.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.44+34c0b0b-0.0.44-20261104T190820.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.44+34c0b0b-0.0.44-20261104T190903.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-unknown-0.0.44-20261104T190857.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+4fad559-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+1491c13-0.0.31-20261016T133501.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+672bf7b-0.0.32-20261016T164559.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T130922.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T131024.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+12e1222-0.0.37-20261023T214016.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+f8ac55a-0.0.36-20261022T160134.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.37+1031feb-0.0.37-20261023T214230.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.38+7c158ff-0.0.38-20261027T081159.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+2c0c41f-0.0.39-20261027T174933.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+9317805-0.0.39-20261027T191154.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+b7fbdf9-0.0.39-20261027T204617.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+bb371fb-0.0.39-20261028T191816.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.25-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+e877631-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ac80e07-0.0.27.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27-0.0.27.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T220718.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T221106.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220856.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220901.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220915.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.37-20261023T214102.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.39-20261028T190818.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e31108-0.0.44+34c0b0b-0.0.44-20261104T190941.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e343c6-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+0f013b7-0.0.28.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+1c940ca-0.0.28.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+4ef21db+4ef21db-dirty-0.0.28.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+68d9694-0.0.28.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ec38b1d-0.0.28.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.36+f8ac55a-0.0.36-20261022T160503.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.37+1031feb-0.0.37-20261023T214005.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081145.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081152.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T180716.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T182855.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T183107.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f-0.0.39-20261027T174908.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_18_s_-0.0.39-20261027T175743.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_18_s_-0.0.39-20261027T175815.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_33_s_-0.0.39-20261027T175634.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_431_s_-0.0.39-20261027T175709.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+62463f2-0.0.39-20261029T145536.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+7445bee-0.0.39-20261027T155413.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+9317805-0.0.39-20261027T191146.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+b7fbdf9-0.0.39-20261027T191724.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191806.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191843.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+d4d323c-0.0.39-20261028T190809.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.36-20261022T160222.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155301.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155340.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/test_harness.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/hw/test_probe.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/spec_names.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_acquire.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_acquire_beside.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_address.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_capabilities.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_capture.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_capture_blocks.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_capture_generation_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_capture_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_cobs.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_allocator.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_analog.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_analog_payload.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_arm_adi.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_attach.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_blocks.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_capture_group.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_capture_group_geometry.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_capture_metadata.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_capture_serial.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_capture_timeline.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_clock.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_core_fixed_fields.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_core_smoke.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_corr.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_cut.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_data.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_debug.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_dependencies.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_discovery.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_dmseq.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_dmseq_target.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_execution_order.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_exhausted.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_fixture_metadata.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_force_hw.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_gpio.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_host_core.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_host_critical_calls.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_host_deadline.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_host_notifications.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_host_requests.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_host_resend.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_host_tlv.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_host_values.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_host_wait.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_i2c.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_interface_smoke.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_interfaces.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_lease.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_link_routes.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_link_transfers.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_logic.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_mailbox.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_notification_output.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_notification_retention.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_notification_sequence.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_oep_declarations.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_oep_smoke.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_outcomes.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_pipeline.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_port_speed.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_port_speed_execution.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_probe_input.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_reconnect.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_recovery.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_recovery_races.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_refusal_order.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_registered_ops.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_replay_pressure.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_replay_records_optional.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_reset.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_resources.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_response_race.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_restart.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_retention.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_retention_lifecycle.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_retry.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_reviewed_pins.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_routes.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_run.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_scan.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_scan_options.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_selected_metadata.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_serial.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_session_loss.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_session_smoke.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_spec_guard.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_spi.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_step.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_stream.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_subscriptions.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_tcp.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_tcp_peers.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_tcp_recovery.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_tlv_requests.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_uart.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_uart_stream.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_usb.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_wire_options.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_conformance_writer_lease.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_console_queue_and_reset_settle.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_core_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_debug_attach.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_debug_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_describe_unset_idle_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_exact_payload_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_extension_patterns.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_fixture_controllers.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_fixture_link_settings_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_fixture_out.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_fixture_targets.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_flash_console.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_gpio_drive_and_serve_options.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_hardware.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_hid_stream.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_host_boot_lifecycle.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_host_recovery_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_host_rules_bounds_options.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_host_rules_waits_lines.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_host_wait_bound.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_interfaces.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_link_drop.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_link_host.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_link_serial.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_linktest.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_literals.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_memo.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_minimal_ops.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_no_resume.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_open_extensions.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_passthrough.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_pins.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_plan.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_port_speed.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_probe_log.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_request_tails.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_request_validation_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_restart.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_resubscribe_after_reopen.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_rvswd_rest.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_session.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_settings.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_spec_sections.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_spec_vectors.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_state_resource_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_stimulus.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_target_parts.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_tcp_discovery.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_tlv_reader_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_capture.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_common.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_console.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_core_names.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_debug.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_fixture.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_fixture_drive.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_link.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_plan.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_restart.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_trace_transports.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_transport_session_rules.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_usb_identity.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_usb_stream.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_analog_roles.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_announce.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_changing_trigger.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_channel_time.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_format_2.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_formats.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_initial_trigger_time.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_lifetime.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_notifications.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_one_shot_time.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_options.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_pretrigger.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_query.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_rates.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_requests.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_resume_calibration.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_trigger_modes.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_trigger_source.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_trigger_source_more.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_waiting.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_fast_samples.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_pin_constraints.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_rules_core.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_rules_ops_lines.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_serve_reboot.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_serve_tcp_connections.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_spec.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_bench_targets.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_core.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_virtual_core_bool.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/test_wire_hold.py +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/capture_formats.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/checks.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/cobs.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/confirm.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/core_extensions.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/core_lifecycle.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/core_policy.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/discovery.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/headers.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/interface_boundaries.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/interface_profiles.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/logic_layout.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/ops_encoding.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/refusals.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/tests/vectors/sessions.json +0 -0
- {oep_client_python-0.0.53 → oep_client_python-0.0.55}/udev/70-oep-probe.rules +0 -0
|
@@ -2,6 +2,99 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.0.55
|
|
6
|
+
- (EN) The pytest plugin's `oep_host` (an OEP session on the DUT's probe, sharing its broker's lock; behind the
|
|
7
|
+
platform's own monitor it waits for the broker up to the ini `oep_broker_wait`, 10 s) and `oep_uart` (`open(baud)`:
|
|
8
|
+
an oep.fixture.uart on the port's `<port>.rx` / `<port>.tx`, a Dut-like channel with expect / expect_exact / write).
|
|
9
|
+
`link.open_host` reaches an `oep://` probe through its broker when one serves it (host guide §7.2) and its opens
|
|
10
|
+
carry `oep.probe.share` (`Host.open_extensions`); no session is kept then. `broker=False` opens the probe itself.
|
|
11
|
+
The `pytest` extra takes pexpect.
|
|
12
|
+
- (JA) pytest のプラグインの `oep_host`(DUT のプローブとの OEP のセッション。broker のロックを分けてもらう。platform 自前のモニタの
|
|
13
|
+
ときは broker を ini の `oep_broker_wait`(10 秒)まで待つ)と `oep_uart`(`open(baud)`: 口の `<口>.rx` / `<口>.tx` の
|
|
14
|
+
oep.fixture.uart。expect / expect_exact / write を持つ Dut の形のチャンネル)。`link.open_host` は、broker が受け持つ `oep://` の
|
|
15
|
+
probe に broker 経由でつなぎ、open に `oep.probe.share` を付ける(`Host.open_extensions`。セッションは持ち越さない)。`broker=False`
|
|
16
|
+
で probe を直接開く。追加の依存 `pytest` に pexpect を足した。
|
|
17
|
+
- (EN) `oep_client.pytest_plugin`, pytest-embedded-arduino-cli's OEP plugin, loaded by itself (`pytest11`) with the new
|
|
18
|
+
`pytest` extra (pytest-embedded-arduino-cli >= 1.12.0): the lock name `probe:<unit_id>` for every port and route of a
|
|
19
|
+
probe and for its own serial port; `port_memo` / `peer_port_memo(name)` / `port_memo_of(config, port)`, the port's
|
|
20
|
+
record by the ini `oep_memo_owner` - `.env`'s `OEP_PORT_MEMO_<unit_id>[_<PORT>]` whole, else the probe's
|
|
21
|
+
`<owner>/port/<port>`, else {} (a warning when both differ); the `oep://` pyserial console; an RP2040 board on
|
|
22
|
+
`oep://<probe>/<port>` written over SWD through the upload hook. Removed: `oep_client.pytest_rp2040_peer` (the
|
|
23
|
+
conftest line, the OpenOCD files, the `rp2040-swd:` lock key, `CH32RV`) and `rp2040_swd.write_openocd_hook`.
|
|
24
|
+
Guide: docs/pytest.md.
|
|
25
|
+
- (JA) `oep_client.pytest_plugin`: pytest-embedded-arduino-cli の OEP のプラグイン。新しい追加の依存 `pytest`
|
|
26
|
+
(pytest-embedded-arduino-cli 1.12.0 以上)で自動で読み込まれる(`pytest11`)。プローブの口と経路と自身のシリアルの口のロックの名前
|
|
27
|
+
`probe:<unit_id>`。口の記録 `port_memo` / `peer_port_memo(name)` / `port_memo_of(config, port)`(ini の `oep_memo_owner`。`.env` の
|
|
28
|
+
`OEP_PORT_MEMO_<unit_id>[_<口>]` を丸ごと、無ければプローブの `<持ち主>/port/<口>`、無ければ {}。両方あって違えば警告)。pyserial の
|
|
29
|
+
`oep://` のコンソール。`oep://<probe>/<口>` の RP2040 のボードを、書き込みの hook で SWD で書く。消したもの: `oep_client.pytest_rp2040_peer`
|
|
30
|
+
(conftest の 1 行、OpenOCD のファイル、ロックの鍵 `rp2040-swd:`、`CH32RV`)と `rp2040_swd.write_openocd_hook`。ガイド: docs/pytest.ja.md。
|
|
31
|
+
- (EN) Renamed: `oep_client.ota_broker` -> `oep_client.ide` (`python -m oep_client.ide`; its class `Server`): an IDE
|
|
32
|
+
server, not an OEP broker. `oep_client.rp2040_peer` -> `oep_client.rp2040_swd` (`python -m oep_client.rp2040_swd
|
|
33
|
+
flash|console`): an RP2040 over the probe's SWD, for any use. docs/swd: the IDE server, and §3.6 sharing the probe
|
|
34
|
+
through a broker by host guide §7.
|
|
35
|
+
- (JA) 名前を変えた: `oep_client.ota_broker` → `oep_client.ide`(`python -m oep_client.ide`、クラスは `Server`)。OEP の broker
|
|
36
|
+
ではなく IDE のサーバーであるため。`oep_client.rp2040_peer` → `oep_client.rp2040_swd`(`python -m oep_client.rp2040_swd
|
|
37
|
+
flash|console`)。プローブの SWD の RP2040 を、用途によらず扱うもの。docs/swd: IDE のサーバーの呼び方と、§3.6 の broker との相乗り
|
|
38
|
+
(host ガイド §7)。
|
|
39
|
+
- (EN) `oep_client.brokers`: finding the broker that serves a probe and sharing its lock, as OEP host guide §7.1 / §7.2
|
|
40
|
+
have it: `OEP_BROKER` (`<host>:<port>`), else the user's `oep/brokers/<unit_id>.json` (its tcp endpoints; fn 0's
|
|
41
|
+
describe must name the file's unit_id), else the probe itself; joined with `oep.probe.share`. `rp2040_peer` uses it
|
|
42
|
+
instead of running `ch32rv broker endpoint` (no ch32rv path, no `io.github.ch32-riscv-ug.share`). The virtual
|
|
43
|
+
bench's stand-in fn is named under this project (`io.github.open-embedded-probe.stand-in`).
|
|
44
|
+
- (JA) `oep_client.brokers`: probe を受け持つ broker を見つけてロックを分けてもらう(OEP の host ガイド §7.1、§7.2)。`OEP_BROKER`
|
|
45
|
+
(`<host>:<port>`)、無ければ利用者の `oep/brokers/<unit_id>.json`(tcp の endpoints。fn 0 の describe の unit_id がファイルと同じこと
|
|
46
|
+
を確かめる)、無ければ probe を直接開く。相乗りは `oep.probe.share`。`rp2040_peer` は `ch32rv broker endpoint` を呼ばずにこれを使う
|
|
47
|
+
(ch32rv の場所も `io.github.ch32-riscv-ug.share` も要らない)。仮想ベンチの stand-in の fn の名前を、この project の名前空間に
|
|
48
|
+
(`io.github.open-embedded-probe.stand-in`)。
|
|
49
|
+
- (EN) `oep_client.ota_broker`: the Arduino IDE's Upload button and its Debug for a board on an OEP probe, the core
|
|
50
|
+
unchanged. Each OEP port is announced as a network port (`_arduino._tcp` over mDNS, TXT board / auth_upload=no, one
|
|
51
|
+
LAN address) and the core's network upload (`espota.py`) is answered: the `.bin` checked by its MD5 and written over
|
|
52
|
+
SWD (`rp2040_peer.flash`; RP2040 boards), digits keeping espota waiting. `--gdb-port` adds
|
|
53
|
+
`oep_client.gdb_server` for it: GDB's remote protocol (M-profile target.xml, memory map, registers, memory, run /
|
|
54
|
+
stop / step, Ctrl-C, FPB breakpoints, `load` into flash as one image from the erase block, `monitor reset halt` /
|
|
55
|
+
`reset` / `halt` / `resume`), the IDE pointed at it by `debug_custom.json` (`servertype: external`). An upload while
|
|
56
|
+
gdb is connected is written within gdb's session. `--dry-run` writes nothing. Checked on a Pico: arduino-pico
|
|
57
|
+
6.3.1's own `espota.py`, `arduino-cli upload --protocol network` (73240 B in about 13 s), and cortex-debug's MI steps
|
|
58
|
+
through arduino-pico's gdb (load, a breakpoint at main, step, interrupt, reset; 9 s).
|
|
59
|
+
`virtual_bench_mdns.Announcement` takes the TXT's entries (`properties`). Guide: docs/swd.md.
|
|
60
|
+
- (JA) `oep_client.ota_broker`: Arduino IDE の「書き込み」ボタンと「デバッグ」で、OEP のプローブにつないだボードを扱う。コアには手を
|
|
61
|
+
入れない。OEP の口をネットワークのポートとして名乗り(mDNS の `_arduino._tcp`、TXT は board と auth_upload=no など、アドレスは LAN の 1 つ)、
|
|
62
|
+
コアのネットワーク書き込み(`espota.py`)に答える: `.bin` を MD5 で確かめ、SWD で書く(`rp2040_peer.flash`。RP2040 のボード)。
|
|
63
|
+
書き込みの間は数字を送って espota を待たせる。`--gdb-port` でその口の `oep_client.gdb_server` も持つ: gdb のリモートプロトコル(M-profile の
|
|
64
|
+
target.xml、メモリマップ、レジスタ、メモリ、実行・停止・ステップ、Ctrl-C、FPB のブレークポイント、消去ブロックからの 1 つの像としての flash への
|
|
65
|
+
`load`、`monitor reset halt` / `reset` / `halt` / `resume`)。IDE は `debug_custom.json`(`servertype: external`)でそこへ向ける。gdb がつながって
|
|
66
|
+
いる間の書き込みは gdb のセッションの中で書く。`--dry-run` は書かない。Pico で確認: arduino-pico 6.3.1 の `espota.py`、
|
|
67
|
+
`arduino-cli upload --protocol network`(73240 B で約 13 秒)、arduino-pico の gdb で cortex-debug の MI の手順(load、main でのブレーク、
|
|
68
|
+
ステップ、一時停止、リセット。9 秒)。`virtual_bench_mdns.Announcement` は TXT の項目を受ける(`properties`)。ガイド: docs/swd.ja.md。
|
|
69
|
+
|
|
70
|
+
## 0.0.54
|
|
71
|
+
- (EN) Jobs (oep::SimpleInterface::job, the probe's worker): `oep_client.call.call_wait(hst, interface, op, timeout=,
|
|
72
|
+
wait=, **fields)` starts the job and reads its status op until it ends; it returns the status's fields (start_ns,
|
|
73
|
+
end_ns on the probe's clock) or raises `JobFailed` (code, message), `JobCancelled`, `JobTimeout` (a cancel sent
|
|
74
|
+
first) or `ProbeRestarted` (the boot_id changed). `wait(seconds)` is called between the reads (a stream's wait keeps
|
|
75
|
+
a capture going). `oep call ... --wait S` does the same from the command line.
|
|
76
|
+
- (JA) ジョブ(oep::SimpleInterface::job、プローブのワーカー): `oep_client.call.call_wait(hst, interface, op, timeout=,
|
|
77
|
+
wait=, **欄)` はジョブを始め、終わるまで status の op を読む。status の欄(プローブの時計の start_ns、end_ns)を返すか、
|
|
78
|
+
`JobFailed`(番号、文)、`JobCancelled`、`JobTimeout`(先に cancel を送る)、`ProbeRestarted`(boot_id が変わった)を投げる。
|
|
79
|
+
読む間に `wait(秒)` を呼ぶ(流し続けの wait なら取り込みが続く)。コマンドラインは `oep call ... --wait S`。
|
|
80
|
+
- (EN) Any interface's op from the command line and Python: `oep call PROBE INTERFACE OP [ARGS...]` - by number with
|
|
81
|
+
the request as hex bytes, or by the name and fields its describe gives (oep-spec core §7.4 op_name / op_field,
|
|
82
|
+
draft e392ad5): `oep call oep://… io.github.you.mine add a=2 b=3` -> `completed rev 1 sum=5`. Python:
|
|
83
|
+
`oep_client.call.call(hst, interface, op, payload=None, **fields)` returns the success fields by name (a dict and
|
|
84
|
+
attributes, `.revision`, `.payload`); `CommandRejected`, `CommandFailed` (code and message), and `InterfaceMissing` /
|
|
85
|
+
`RevisionMismatch` / `OpMissing`, all `NotOffered` for a test's skip. `oep dump` shows an op's signature
|
|
86
|
+
(`add(a: i32, b: i32) -> sum: i32`). The virtual bench's stand-in fn gives its two ops' names and fields. Registry,
|
|
87
|
+
vectors and the reviewed digests synced from oep-spec e392ad5 (the core's §7.4 tags and transports §3.1
|
|
88
|
+
usb.transports: the virtual bench knows the item).
|
|
89
|
+
- (JA) どのインターフェースの op もコマンドラインと Python から呼べる: `oep call PROBE INTERFACE OP [ARGS...]`。番号と 16 進の
|
|
90
|
+
要求で、または describe が示す名前と欄で(oep-spec core §7.4 op_name / op_field、案 e392ad5):
|
|
91
|
+
`oep call oep://… io.github.you.mine add a=2 b=3` → `completed rev 1 sum=5`。Python は
|
|
92
|
+
`oep_client.call.call(hst, interface, op, payload=None, **fields)` で、成功の欄を名前で返す(辞書と属性、`.revision`、
|
|
93
|
+
`.payload`)。`CommandRejected`、`CommandFailed`(番号と文)、`InterfaceMissing` / `RevisionMismatch` / `OpMissing`(どれも
|
|
94
|
+
`NotOffered`: 試験の skip に)。`oep dump` は op の形(`add(a: i32, b: i32) -> sum: i32`)を出す。仮想ベンチの代役の fn は
|
|
95
|
+
2 つの op の名前と欄を持つ。registry、ベクタ、確かめた文書のダイジェストを oep-spec e392ad5 に合わせた(core §7.4 のタグと
|
|
96
|
+
transports §3.1 の usb.transports。仮想ベンチはその項目を知る)。
|
|
97
|
+
|
|
5
98
|
## 0.0.53
|
|
6
99
|
- (EN) An RP2040 board as a test's peer over an OEP probe's SWD alone (`oep_client.rp2040_peer`), for a peer whose USB goes to
|
|
7
100
|
the device under test: `python -m oep_client.rp2040_peer flash oep://<probe>/<port> <elf|bin>` (the port's labels
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: oep-client-python
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.55
|
|
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
|
|
@@ -21,6 +21,9 @@ Provides-Extra: hid
|
|
|
21
21
|
Requires-Dist: hidapi>=0.14; extra == 'hid'
|
|
22
22
|
Provides-Extra: mdns
|
|
23
23
|
Requires-Dist: zeroconf>=0.131; extra == 'mdns'
|
|
24
|
+
Provides-Extra: pytest
|
|
25
|
+
Requires-Dist: pexpect>=4.8; extra == 'pytest'
|
|
26
|
+
Requires-Dist: pytest-embedded-arduino-cli>=1.12.0; extra == 'pytest'
|
|
24
27
|
Provides-Extra: usb-async
|
|
25
28
|
Requires-Dist: libusb1>=3; extra == 'usb-async'
|
|
26
29
|
Description-Content-Type: text/markdown
|
|
@@ -89,6 +92,10 @@ names starting with `_`, may change. Check probe/client compatibility using the
|
|
|
89
92
|
| `registry` | generated from oep-spec's number table (never edited; copied again from oep-spec). The public way to reach an interface by name is `registry.INTERFACES[name]` (`.revision`, `.op`, `.tlv`, `.enum`, e.g. `INTERFACES["oep.fixture.uart"].enum["role"]`); the module-level names (`FIXTURE_UART`, ...) are the same objects |
|
|
90
93
|
| `arm` | `oep.wire.swd`, `oep.target.arm-adi`, MEM-AP, halting and calling functions on a Cortex-M |
|
|
91
94
|
| `ch32_flash` | writing a CH32 (a RAM loader, page by page) |
|
|
95
|
+
| `pytest_plugin` | pytest-embedded-arduino-cli's OEP plugin, loaded by itself with the `pytest` extra: the probe's lock `probe:<unit_id>`, the port's record `port_memo` (`.env`'s `OEP_PORT_MEMO_*`, else the probe's memo), the `oep://` console, an RP2040 board's upload over SWD, the session `oep_host` and the UART `oep_uart` ([docs/pytest.md](docs/pytest.md)) |
|
|
96
|
+
| `brokers` | finding the broker that serves a probe (`OEP_BROKER`, the user's `oep/brokers/<unit_id>.json`) and sharing its lock with `oep.probe.share` (OEP host guide §7) |
|
|
97
|
+
| `ide` | the Arduino IDE's network upload, received and written through an OEP probe; a GDB server too ([docs/swd.md](docs/swd.md)) |
|
|
98
|
+
| `gdb_server` | GDB's remote protocol for a Cortex-M on an OEP probe's SWD (registers, memory, run / stop / step, FPB breakpoints, load into flash) |
|
|
92
99
|
| `rp2350` | flash and reboot through the RP2350 boot ROM |
|
|
93
100
|
| `uiapduino` | into and out of the UIAPduino bootloader |
|
|
94
101
|
| `catalog` / `names` / `interfaces` / `dump` | the capability list and describe shapes, display |
|
|
@@ -117,6 +124,11 @@ wire.detach(conn)
|
|
|
117
124
|
hst.end()
|
|
118
125
|
```
|
|
119
126
|
|
|
127
|
+
## Writing and debugging an SWD board
|
|
128
|
+
|
|
129
|
+
An Arm board on an OEP probe's SWD (an RP2040 for now) is written, run and inspected from the Arduino IDE's Upload and
|
|
130
|
+
Debug, or from an OEP host directly: see [docs/swd.md](docs/swd.md).
|
|
131
|
+
|
|
120
132
|
## USB access on Linux (udev)
|
|
121
133
|
|
|
122
134
|
A probe enumerates with the project's USB VID:PID `1209:4F45` (transports §3). Opening its vendor bulk (libusb) or its HID
|
|
@@ -56,6 +56,10 @@ GitHub Release、PyPI(Trusted Publishing)へ出す。変更は CHANGELOG.md
|
|
|
56
56
|
| `registry` | oep-spec の番号の表から生成したモジュール(編集しない。oep-spec から写し直す)。名前からインターフェースの番号を引く公開の入口は `registry.INTERFACES[name]`(`.revision`、`.op`、`.tlv`、`.enum`。例 `INTERFACES["oep.fixture.uart"].enum["role"]`)。`FIXTURE_UART` などのモジュールの名前は同じもの |
|
|
57
57
|
| `arm` | `oep.wire.swd`、`oep.target.arm-adi`、MEM-AP、Cortex-M の停止と関数呼び出し |
|
|
58
58
|
| `ch32_flash` | CH32 の書き込み(RAM ローダー、ページ単位の書き直し) |
|
|
59
|
+
| `pytest_plugin` | pytest-embedded-arduino-cli の OEP のプラグイン。`pytest` の追加の依存で自動で読み込まれる。プローブのロック `probe:<unit_id>`、口の記録 `port_memo`(`.env` の `OEP_PORT_MEMO_*`、無ければプローブのメモ欄)、`oep://` のコンソール、RP2040 のボードの SWD での書き込み、セッション `oep_host` と UART `oep_uart`([docs/pytest.ja.md](docs/pytest.ja.md)) |
|
|
60
|
+
| `brokers` | probe を受け持つ broker を見つけ(`OEP_BROKER`、利用者の `oep/brokers/<unit_id>.json`)、`oep.probe.share` でロックを分けてもらう(OEP の host ガイド §7) |
|
|
61
|
+
| `ide` | Arduino IDE のネットワーク書き込みを受けて、OEP のプローブ越しに書く。gdb サーバーも持つ([docs/swd.ja.md](docs/swd.ja.md)) |
|
|
62
|
+
| `gdb_server` | OEP の SWD の Cortex-M に gdb のリモートプロトコルで答える(レジスタ、メモリ、実行・停止・ステップ、FPB のブレークポイント、flash への load) |
|
|
59
63
|
| `rp2350` | RP2350 の boot ROM 経由の flash と reboot |
|
|
60
64
|
| `uiapduino` | UIAPduino のブートローダへの出入り |
|
|
61
65
|
| `catalog` / `names` / `interfaces` / `dump` | 能力の一覧と describe の形、表示 |
|
|
@@ -84,6 +88,11 @@ wire.detach(conn)
|
|
|
84
88
|
hst.end()
|
|
85
89
|
```
|
|
86
90
|
|
|
91
|
+
## SWD のボードを書く・デバッグする
|
|
92
|
+
|
|
93
|
+
OEP のプローブの SWD につないだ Arm のボード(今は RP2040)を、Arduino IDE の「書き込み」と「デバッグ」から、または OEP のホストから
|
|
94
|
+
直接、書いて動かして調べます。手順は [docs/swd.ja.md](docs/swd.ja.md) にあります。
|
|
95
|
+
|
|
87
96
|
## Linux での USB の権限(udev)
|
|
88
97
|
|
|
89
98
|
probe はプロジェクトの USB の VID:PID `1209:4F45`(transports §3)で列挙される。その vendor bulk(libusb)や HID(hidraw)を
|
|
@@ -62,6 +62,10 @@ names starting with `_`, may change. Check probe/client compatibility using the
|
|
|
62
62
|
| `registry` | generated from oep-spec's number table (never edited; copied again from oep-spec). The public way to reach an interface by name is `registry.INTERFACES[name]` (`.revision`, `.op`, `.tlv`, `.enum`, e.g. `INTERFACES["oep.fixture.uart"].enum["role"]`); the module-level names (`FIXTURE_UART`, ...) are the same objects |
|
|
63
63
|
| `arm` | `oep.wire.swd`, `oep.target.arm-adi`, MEM-AP, halting and calling functions on a Cortex-M |
|
|
64
64
|
| `ch32_flash` | writing a CH32 (a RAM loader, page by page) |
|
|
65
|
+
| `pytest_plugin` | pytest-embedded-arduino-cli's OEP plugin, loaded by itself with the `pytest` extra: the probe's lock `probe:<unit_id>`, the port's record `port_memo` (`.env`'s `OEP_PORT_MEMO_*`, else the probe's memo), the `oep://` console, an RP2040 board's upload over SWD, the session `oep_host` and the UART `oep_uart` ([docs/pytest.md](docs/pytest.md)) |
|
|
66
|
+
| `brokers` | finding the broker that serves a probe (`OEP_BROKER`, the user's `oep/brokers/<unit_id>.json`) and sharing its lock with `oep.probe.share` (OEP host guide §7) |
|
|
67
|
+
| `ide` | the Arduino IDE's network upload, received and written through an OEP probe; a GDB server too ([docs/swd.md](docs/swd.md)) |
|
|
68
|
+
| `gdb_server` | GDB's remote protocol for a Cortex-M on an OEP probe's SWD (registers, memory, run / stop / step, FPB breakpoints, load into flash) |
|
|
65
69
|
| `rp2350` | flash and reboot through the RP2350 boot ROM |
|
|
66
70
|
| `uiapduino` | into and out of the UIAPduino bootloader |
|
|
67
71
|
| `catalog` / `names` / `interfaces` / `dump` | the capability list and describe shapes, display |
|
|
@@ -90,6 +94,11 @@ wire.detach(conn)
|
|
|
90
94
|
hst.end()
|
|
91
95
|
```
|
|
92
96
|
|
|
97
|
+
## Writing and debugging an SWD board
|
|
98
|
+
|
|
99
|
+
An Arm board on an OEP probe's SWD (an RP2040 for now) is written, run and inspected from the Arduino IDE's Upload and
|
|
100
|
+
Debug, or from an OEP host directly: see [docs/swd.md](docs/swd.md).
|
|
101
|
+
|
|
93
102
|
## USB access on Linux (udev)
|
|
94
103
|
|
|
95
104
|
A probe enumerates with the project's USB VID:PID `1209:4F45` (transports §3). Opening its vendor bulk (libusb) or its HID
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# pytest(pytest-embedded-arduino-cli)で OEP を使う
|
|
2
|
+
|
|
3
|
+
[English](pytest.md)
|
|
4
|
+
|
|
5
|
+
OEP のプローブとその先のボードを、[pytest-embedded-arduino-cli](https://github.com/tanakamasayuki/pytest-embedded-arduino-cli) の試験で使います。
|
|
6
|
+
oep-client-python を `pytest` の追加の依存つきで入れると、プラグイン `oep_client.pytest_plugin` が自動で読み込まれます。conftest.py は要りません。
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
pip install "oep-client-python[pytest]"
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
プラグインが動くのは、試験のポートが OEP のプローブのときと、試験がプラグインの fixture を使うときだけです。
|
|
13
|
+
|
|
14
|
+
## 1. ポート
|
|
15
|
+
|
|
16
|
+
ポートは、pytest-embedded-arduino-cli のガイドのとおり `.env` に書きます。
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
# tests/.env
|
|
20
|
+
TEST_SERIAL_PORT_X035C8T6_S3=oep://30eda0e31108/x035c8t6-s3
|
|
21
|
+
TEST_SERIAL_PORT_PEER_PICO=oep://80f1b2d835d6/rp2040-x035
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
アドレスは `oep://<unit_id>/<口>` です(口はプローブのラベル `<口>.<線>` の前半。OEP の host ガイド §5.3)。
|
|
25
|
+
|
|
26
|
+
## 2. ロック
|
|
27
|
+
|
|
28
|
+
プローブは 1 台に 1 つのロックを持ちます(OEP の core §6.1)。プラグインは、pytest-embedded-arduino-cli のロックの名前を
|
|
29
|
+
`probe:<unit_id>` にします。同じプローブの口と経路(`?via=...`)は、どれも同じ名前になります。プローブ自身の USB シリアルの口も同じです。
|
|
30
|
+
|
|
31
|
+
- 1 つの試験の中で、DUT と相手が同じプローブに載っていても、ロックは 1 つを共有します。
|
|
32
|
+
- 別の試験は、そのプローブが空くまで待ちます。
|
|
33
|
+
|
|
34
|
+
## 3. 口の記録
|
|
35
|
+
|
|
36
|
+
その口の先に何がつながっているか(部品、相手の種類、ボードの不良など)を、試験の引数 `port_memo` で読みます。記録の形は、記録の持ち主
|
|
37
|
+
(試験のプロジェクト)が決めます。持ち主の名前は ini に書きます。
|
|
38
|
+
|
|
39
|
+
```toml
|
|
40
|
+
# pyproject.toml
|
|
41
|
+
[tool.pytest.ini_options]
|
|
42
|
+
oep_memo_owner = "io.github.example.mylib"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
def test_eth(dut, port_memo):
|
|
47
|
+
if port_memo.get("parts", {}).get("eth", {}).get("to") != "lan":
|
|
48
|
+
pytest.skip("eth is not wired on this port")
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
次の順に 1 つだけ使います。
|
|
52
|
+
|
|
53
|
+
1. `.env` の `OEP_PORT_MEMO_<unit_id>_<口>`(口の無いプローブは `OEP_PORT_MEMO_<unit_id>`。大文字で、`-` は `_`)。JSON のオブジェクト
|
|
54
|
+
1 つを、一重引用符で囲んで書きます。丸ごと使い、メモ欄と項目ごとに混ぜません。
|
|
55
|
+
2. プローブのメモ欄の `<持ち主>/port/<口>`(oep-if-memo §4)。
|
|
56
|
+
3. どちらも無ければ `{}`。
|
|
57
|
+
|
|
58
|
+
両方あって中身が違えば、警告を出します(メモ欄を直すか、`.env` の変数を消します)。相手の口の記録は `peer_port_memo("<名前>")` です。
|
|
59
|
+
メモ欄を持たないプローブ(ほかのプラグインが `probe:<id>` の名前を返す WCH-Link など)は、`.env` だけを使います。
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
# tests/.env
|
|
63
|
+
OEP_PORT_MEMO_BC5F4B9807F7='{"parts": {"eth": {"to": "lan"}}}'
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
メモ欄に書くのは pytest の外の道具です(`oep_client.memo` の `Memo.write` を使う道具など)。
|
|
67
|
+
|
|
68
|
+
## 4. コンソール
|
|
69
|
+
|
|
70
|
+
pyserial は `oep://...` を開けます(`oep_client.pyserial`)。RP2040 のボードでは、SWD で読む SEGGER RTT がコンソールになります
|
|
71
|
+
([swd.ja.md](swd.ja.md) §3.2)。スケッチは RTT を使います。
|
|
72
|
+
|
|
73
|
+
## 5. 書き込み
|
|
74
|
+
|
|
75
|
+
ポートが `oep://<unit_id>/<口>` で、プロファイルが RP2040 のボード(fqbn が `rp2040:`)のとき、プラグインがビルドの ELF をプローブの SWD で書きます
|
|
76
|
+
(pytest-embedded-arduino-cli の書き込みの hook)。arduino-pico の書き込みの方式は問いません。それ以外は arduino-cli の書き込みのままです。
|
|
77
|
+
|
|
78
|
+
## 6. セッションと UART
|
|
79
|
+
|
|
80
|
+
試験の引数 `oep_host` は、DUT のポートの先のプローブとの OEP のセッションです(`oep_host.host` が Host、`oep_host.touch()` が lease を保つ)。
|
|
81
|
+
60 秒より長く黙ると、セッションを失います。
|
|
82
|
+
|
|
83
|
+
`oep_uart.open(baud)` は、口のラベル `<口>.rx` / `<口>.tx`(OEP の host ガイド §5.3)の線に `oep.fixture.uart` を割り当て、`expect`、
|
|
84
|
+
`expect_exact`、`write` を持つチャンネルを返します(`dut` と同じ pexpect の形。既定の待ち時間は 30 秒)。
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
def test_uart(dut, oep_uart):
|
|
88
|
+
ch = oep_uart.open(115200)
|
|
89
|
+
ch.write("ping\n")
|
|
90
|
+
ch.expect("pong")
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 7. ほかの道具との相乗り
|
|
94
|
+
|
|
95
|
+
同じプローブを broker(OEP の host ガイド §7)が受け持っているときは、そのロックを分けてもらいます(`oep_client.brokers`)。
|
|
96
|
+
DUT のコンソールが platform 自前のモニタを通るとき(pytest-embedded-arduino-cli がポートを包むとき)は、そのモニタがプローブを持ち、
|
|
97
|
+
少し遅れて broker を公開します。`oep_host` は、それを ini の `oep_broker_wait` 秒(既定 10)まで待ちます。
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# OEP in pytest (pytest-embedded-arduino-cli)
|
|
2
|
+
|
|
3
|
+
[日本語](pytest.ja.md)
|
|
4
|
+
|
|
5
|
+
OEP probes and the boards behind them in [pytest-embedded-arduino-cli](https://github.com/tanakamasayuki/pytest-embedded-arduino-cli)
|
|
6
|
+
tests. Installed with its `pytest` extra, oep-client-python's plugin `oep_client.pytest_plugin` loads by itself; no
|
|
7
|
+
conftest.py is needed.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
pip install "oep-client-python[pytest]"
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The plugin acts only when a test's port is an OEP probe, or when a test asks for its fixtures.
|
|
14
|
+
|
|
15
|
+
## 1. Ports
|
|
16
|
+
|
|
17
|
+
Ports go in `.env`, as pytest-embedded-arduino-cli's guide has it.
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
# tests/.env
|
|
21
|
+
TEST_SERIAL_PORT_X035C8T6_S3=oep://30eda0e31108/x035c8t6-s3
|
|
22
|
+
TEST_SERIAL_PORT_PEER_PICO=oep://80f1b2d835d6/rp2040-x035
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The address is `oep://<unit_id>/<port>` (the port is the first half of the probe's labels `<port>.<line>`, OEP host
|
|
26
|
+
guide §5.3).
|
|
27
|
+
|
|
28
|
+
## 2. The lock
|
|
29
|
+
|
|
30
|
+
A probe has one lock (OEP core §6.1). The plugin names pytest-embedded-arduino-cli's lock `probe:<unit_id>`: every
|
|
31
|
+
port and route (`?via=...`) of one probe has that name, and so has the probe's own USB serial port.
|
|
32
|
+
|
|
33
|
+
- In one test, a DUT and a peer on the same probe share the one lock.
|
|
34
|
+
- Another test waits until the probe is free.
|
|
35
|
+
|
|
36
|
+
## 3. The port's record
|
|
37
|
+
|
|
38
|
+
What is wired to a port (parts, the kind of its peer, the board's defects) is read with the test argument `port_memo`.
|
|
39
|
+
The record's shape is its owner's (the test's project); the owner's name goes in the ini.
|
|
40
|
+
|
|
41
|
+
```toml
|
|
42
|
+
# pyproject.toml
|
|
43
|
+
[tool.pytest.ini_options]
|
|
44
|
+
oep_memo_owner = "io.github.example.mylib"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
def test_eth(dut, port_memo):
|
|
49
|
+
if port_memo.get("parts", {}).get("eth", {}).get("to") != "lan":
|
|
50
|
+
pytest.skip("eth is not wired on this port")
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The first of these is used:
|
|
54
|
+
|
|
55
|
+
1. `.env`'s `OEP_PORT_MEMO_<unit_id>_<PORT>` (`OEP_PORT_MEMO_<unit_id>` for a probe without ports; upper case, `-` as
|
|
56
|
+
`_`): one JSON object in single quotes, used whole, never mixed with the memo member by member.
|
|
57
|
+
2. The probe's memo object `<owner>/port/<port>` (oep-if-memo §4).
|
|
58
|
+
3. `{}`.
|
|
59
|
+
|
|
60
|
+
When both are there and differ, a warning (correct the memo or drop the variable). A peer's record is
|
|
61
|
+
`peer_port_memo("<name>")`. A probe without a memo area (a WCH-Link another plugin names `probe:<id>`) has `.env` only.
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
# tests/.env
|
|
65
|
+
OEP_PORT_MEMO_BC5F4B9807F7='{"parts": {"eth": {"to": "lan"}}}'
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The memo is written by tools outside pytest (ones using `oep_client.memo`'s `Memo.write`).
|
|
69
|
+
|
|
70
|
+
## 4. The console
|
|
71
|
+
|
|
72
|
+
pyserial opens `oep://...` (`oep_client.pyserial`). For an RP2040 board it is the SEGGER RTT read over SWD
|
|
73
|
+
([swd.md](swd.md) §3.2); the sketch uses RTT.
|
|
74
|
+
|
|
75
|
+
## 5. The upload
|
|
76
|
+
|
|
77
|
+
For a port `oep://<unit_id>/<port>` whose profile is an RP2040 board (fqbn `rp2040:`), the plugin writes the build's
|
|
78
|
+
ELF over the probe's SWD (pytest-embedded-arduino-cli's upload hook), whatever arduino-pico's upload method is.
|
|
79
|
+
Anything else is arduino-cli's upload.
|
|
80
|
+
|
|
81
|
+
## 6. The session and the UART
|
|
82
|
+
|
|
83
|
+
The test argument `oep_host` is an OEP session on the probe behind the DUT's port (`oep_host.host` is the Host,
|
|
84
|
+
`oep_host.touch()` keeps the lease); quiet for longer than 60 s, it loses the session.
|
|
85
|
+
|
|
86
|
+
`oep_uart.open(baud)` plans an `oep.fixture.uart` onto the port's lines labelled `<port>.rx` / `<port>.tx` (OEP host
|
|
87
|
+
guide §5.3) and returns a channel with `expect`, `expect_exact` and `write` (pexpect, like `dut`; 30 s by default).
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
def test_uart(dut, oep_uart):
|
|
91
|
+
ch = oep_uart.open(115200)
|
|
92
|
+
ch.write("ping\n")
|
|
93
|
+
ch.expect("pong")
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## 7. Sharing with other tools
|
|
97
|
+
|
|
98
|
+
When a broker (OEP host guide §7) serves the probe, the plugin shares its lock (`oep_client.brokers`). When the DUT's
|
|
99
|
+
console runs through the platform's own monitor (pytest-embedded-arduino-cli wraps the port), that monitor holds the
|
|
100
|
+
probe and publishes its broker a moment later; `oep_host` waits for it up to the ini value `oep_broker_wait` seconds
|
|
101
|
+
(default 10).
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# SWD のボードを書く・デバッグする
|
|
2
|
+
|
|
3
|
+
[English](swd.md)
|
|
4
|
+
|
|
5
|
+
OEP のプローブの SWD につないだ Arm のボードを、書いて、動かして、止めて調べます。道は 2 つです。
|
|
6
|
+
|
|
7
|
+
- **Arduino IDE から**: 「書き込み」ボタンと「デバッグ」ボタン。コアにも IDE の設定にも手を入れません。IDE のサーバーを 1 つ起動しておき、デバッグにはスケッチのフォルダに `debug_custom.json` を置きます。
|
|
8
|
+
- **OEP のホストから直接**: コマンド、gdb、pytest、Python。
|
|
9
|
+
|
|
10
|
+
対象は RP2040 のボード(Raspberry Pi Pico など、arduino-pico)のコア 0 です。
|
|
11
|
+
|
|
12
|
+
## 1. つなぐ
|
|
13
|
+
|
|
14
|
+
- 線は SWDIO、SWCLK、GND の 3 本です。ボードの電源はボード側で用意します。
|
|
15
|
+
- プローブの 2 本の channel に、口の名前を付けたラベル `<口>.swdio` と `<口>.swclk` を付けます。以後、ボードは `oep://<unit id>/<口>` で指します。
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
oep settings set oep://<unit id> core channel.GPIO28.label=pico.swdio channel.GPIO27.label=pico.swclk --save
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
どの channel につながったか分からなければ、`oep pins` で探せます(README の「ピンを探す」)。
|
|
22
|
+
- コンソールに UART を使うなら、ボードの TX をプローブの空いている channel につなぎます(3.4)。
|
|
23
|
+
|
|
24
|
+
## 2. Arduino IDE から
|
|
25
|
+
|
|
26
|
+
### 2.1 IDE のサーバーを起動する
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
pip install oep-client-python
|
|
30
|
+
python -m oep_client.ide oep://<unit id>/pico=rpipico --gdb-port 3333
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
- `=rpipico` は IDE に見せるボードの名前です(省くと `rpipico`)。口はいくつでも並べられます。口ごとに、ネットワークのポートが 1 つと、
|
|
34
|
+
gdb のポートが 1 つ(`--gdb-port` から順に)できます。
|
|
35
|
+
- IDE のサーバーは、書き込みが来たときと gdb がつながっている間だけプローブを使います。ほかの時間は、ほかの道具がそのプローブを使えます。
|
|
36
|
+
- 起動の行に、口ごとの名前、UDP のポート、gdb のポートが出ます。
|
|
37
|
+
|
|
38
|
+
### 2.2 書き込む
|
|
39
|
+
|
|
40
|
+
1. IDE でボード(Raspberry Pi Pico など)を選びます。
|
|
41
|
+
2. 「ツール > ポート」で、ネットワークのポート `oep-<unit id>-<口> at <アドレス>` を選びます。IDE のサーバーを起動してから一覧に出るまで、数秒
|
|
42
|
+
かかることがあります。
|
|
43
|
+
3. 「書き込み」を押します。パスワードを聞かれたら、空のまま OK します。
|
|
44
|
+
|
|
45
|
+
IDE のサーバーは、IDE が送る `.bin` を MD5 で確かめてから SWD で書き、読み返して確かめ、ボードを起動し直します。
|
|
46
|
+
|
|
47
|
+
仕組み: IDE のサーバーは口ごとに mDNS の `_arduino._tcp` を名乗り(TXT は `board`、`auth_upload=no`、`tcp_check=no`、`ssh_upload=no`)、
|
|
48
|
+
コアのネットワーク書き込み(arduino-pico の `tools/espota.py`)の受け手になります。名乗るアドレスは 1 つで、LAN のものです(`--interface` で
|
|
49
|
+
選べます)。
|
|
50
|
+
|
|
51
|
+
### 2.3 デバッグする
|
|
52
|
+
|
|
53
|
+
スケッチのフォルダに `debug_custom.json` を置き、IDE のデバッグをIDE のサーバーの gdb サーバーへ向けます。
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
[
|
|
57
|
+
{
|
|
58
|
+
"configId": "rp2040:rp2040:rpipico",
|
|
59
|
+
"servertype": "external",
|
|
60
|
+
"gdbTarget": "localhost:3333"
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- ファイルは配列です。`configId` は、IDE が作るデバッグの設定の `configId` と同じ文字列にします。ボードの FQBN で、ボードのメニューを既定
|
|
66
|
+
から変えていればその値も付きます。合わない要素は黙って無視されるので、IDE が一度デバッグを始めた後にスケッチのフォルダの
|
|
67
|
+
`.theia/launch.json` に書く値を写すのが確実です。
|
|
68
|
+
- 「デバッグ」を押すと、IDE はスケッチを書き込み(gdb の `load`)、コアをリセットして止め、`main` で止まります。ブレークポイント、ステップ、
|
|
69
|
+
一時停止、変数とレジスタの表示が使えます。
|
|
70
|
+
- gdb サーバーは 127.0.0.1 だけで待ちます。IDE はIDE のサーバーと同じ PC で動かします。
|
|
71
|
+
- デバッグの間に「書き込み」を押しても、gdb は切れません。IDE のサーバーは gdb のセッションの中で書き、コアだけをリセットして走らせます。
|
|
72
|
+
|
|
73
|
+
### 2.4 コンソール
|
|
74
|
+
|
|
75
|
+
ボードの UART を、プローブの USB シリアル(CDC)にそのまま流す設定を入れ、IDE のシリアルモニタでプローブのポートを開きます。
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
oep settings set oep://<unit id> oep.fixture.uart/0 passthrough.cdc0.rx=GPIO12 passthrough.cdc0.baud=115200 --save
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
- `GPIO12` はボードの TX をつないだ channel、`cdc0` はプローブの 1 つ目の CDC です(経路の名前は oep-spec core §13.3)。
|
|
82
|
+
- 設定はセッションに関係なく効き、`--save` で起動し直しても残ります。
|
|
83
|
+
|
|
84
|
+
### 2.5 できないこと
|
|
85
|
+
|
|
86
|
+
- コア 1 は扱いません(コア 0 だけ)。
|
|
87
|
+
- ハードウェアのブレークポイントは 4 つまでです(RP2040 の FPB)。flash の中のブレークポイントは、gdb が自動でハードウェアのものにします。
|
|
88
|
+
- ウォッチポイントはありません。
|
|
89
|
+
|
|
90
|
+
## 3. OEP のホストから直接
|
|
91
|
+
|
|
92
|
+
### 3.1 書く
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
python -m oep_client.rp2040_swd flash oep://<unit id>/pico sketch.ino.elf
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
ELF(flash の中の読み込む部分を並べる)か `.bin`(0x10000000 からの flash の中身)を書き、読み返して確かめ、ボードを起動し直します。
|
|
99
|
+
|
|
100
|
+
### 3.2 コンソール(SEGGER RTT)
|
|
101
|
+
|
|
102
|
+
UART の線が無くても、ボードの RAM の RTT のリングを SWD で読めます(スケッチが RTT を使うとき)。
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
python -m oep_client.rp2040_swd console oep://<unit id>/pico 10 # 10 秒の間、出力を表示する
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
pyserial からは、`oep_client.pyserial` を登録すると `oep://` を開けます。
|
|
109
|
+
|
|
110
|
+
```python
|
|
111
|
+
import serial
|
|
112
|
+
serial.protocol_handler_packages.append("oep_client.pyserial")
|
|
113
|
+
port = serial.serial_for_url("oep://<unit id>/pico")
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 3.3 gdb で
|
|
117
|
+
|
|
118
|
+
IDE のサーバーの gdb サーバーに、コアに付いてくる gdb(arduino-pico なら `arm-none-eabi-gdb`)でつなぎます。書き込みの受け手が要らなければ、
|
|
119
|
+
IDE のサーバーをこの用途だけに起動しても同じです。
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
arm-none-eabi-gdb sketch.ino.elf
|
|
123
|
+
(gdb) target extended-remote 127.0.0.1:3333
|
|
124
|
+
(gdb) monitor reset halt
|
|
125
|
+
(gdb) load
|
|
126
|
+
(gdb) monitor reset halt
|
|
127
|
+
(gdb) break loop
|
|
128
|
+
(gdb) continue
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
| monitor のコマンド | 動き |
|
|
132
|
+
|---|---|
|
|
133
|
+
| `reset halt`(`reset init`) | コアをリセットし、最初の命令で止める |
|
|
134
|
+
| `reset`(`reset run`) | コアをリセットして走らせる |
|
|
135
|
+
| `halt` | 止める |
|
|
136
|
+
| `resume`(`go`) | 走らせる |
|
|
137
|
+
|
|
138
|
+
gdb のつながっている間、IDE のサーバーはプローブのロックを持ち、5 秒ごとに keepalive を送ります。
|
|
139
|
+
|
|
140
|
+
### 3.4 pytest(pytest-embedded-arduino-cli)
|
|
141
|
+
|
|
142
|
+
試験の DUT や相手の Pico は、プラグイン `oep_client.pytest_plugin` が SWD で書き、RTT をコンソールにします。ポートは `.env` の
|
|
143
|
+
`TEST_SERIAL_PORT_*=oep://<unit id>/<口>` です。詳しくは [pytest.ja.md](pytest.ja.md) にあります。
|
|
144
|
+
|
|
145
|
+
### 3.5 Python から
|
|
146
|
+
|
|
147
|
+
```python
|
|
148
|
+
from oep_client import arm, link, rp2040
|
|
149
|
+
|
|
150
|
+
hst = link.open_host("oep://<unit id>")
|
|
151
|
+
hst.open(60000, owner="my-tool")
|
|
152
|
+
wire = arm.SwdWire(hst)
|
|
153
|
+
conn, dpidr, _ = wire.attach(targetsel=rp2040.TARGETSEL_CORE0, pins=(28, 27)) # SWDIO、SWCLK の channel
|
|
154
|
+
adi = arm.ArmAdi(hst, conn)
|
|
155
|
+
adi.power_up()
|
|
156
|
+
mem = arm.MemAp(adi, 0)
|
|
157
|
+
core = rp2040.core_of(mem)
|
|
158
|
+
core.halt()
|
|
159
|
+
print(hex(core.reg(15))) # PC
|
|
160
|
+
core.resume()
|
|
161
|
+
wire.detach(conn)
|
|
162
|
+
hst.end()
|
|
163
|
+
hst.link.close()
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
- `oep_client.arm`: `SwdWire`(`oep.wire.swd`)、`ArmAdi`(`oep.target.arm-adi`)、`MemAp`、`CortexM`(停止、レジスタ、関数の呼び出し)。
|
|
167
|
+
- `oep_client.rp2040`: boot ROM での flash の書き込み(`program_and_verify`)と再起動。
|
|
168
|
+
|
|
169
|
+
### 3.6 ほかの道具とプローブを分ける
|
|
170
|
+
|
|
171
|
+
同じプローブを broker(OEP の host ガイド §7)が受け持っているときは、`rp2040_swd` と IDE のサーバーはそのロックを分けてもらいます
|
|
172
|
+
(`oep_client.brokers`: 環境変数 `OEP_BROKER`、利用者の `oep/brokers/<unit_id>.json`、相乗りの拡張 `oep.probe.share`)。broker が
|
|
173
|
+
いなければ、プローブを直接開きます。
|