oep-client-python 0.0.40__tar.gz → 0.0.41__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.40 → oep_client_python-0.0.41}/CHANGELOG.md +29 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/PKG-INFO +14 -11
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/README.ja.md +11 -9
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/README.md +11 -10
- oep_client_python-0.0.41/docs/spec-follow-notes.ja.md +10 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/testing-policy.ja.md +2 -2
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/pyproject.toml +2 -1
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/__init__.py +1 -1
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/__main__.py +8 -8
- oep_client_python-0.0.41/src/oep_client/acquire.py +1866 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/discovery.py +1 -1
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/link.py +122 -42
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/pins.py +16 -2
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_serve.py +3 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/README.ja.md +3 -3
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/README.md +3 -3
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/boards.py +19 -20
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/test_probe.py +5 -2
- oep_client_python-0.0.41/tests/test_acquire.py +138 -0
- oep_client_python-0.0.41/tests/test_address.py +40 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_host_rules_2026_10_02.py +1 -1
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_link_serial.py +17 -1
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_pins.py +26 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_tcp_discovery.py +3 -3
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_core.py +2 -2
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_transports.py +6 -4
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_usb_identity.py +10 -10
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_announce.py +2 -2
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_serve_reboot.py +4 -1
- oep_client_python-0.0.40/docs/spec-follow-notes.ja.md +0 -683
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/.gitignore +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/LICENSE +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/README.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/allocator-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/analog-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/analog-payload-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/arm-adi-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/attach-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/block-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-group-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-group-geometry-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-serial-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-timeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-timeline-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/clock-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-execution-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-fallback-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-paging-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-power-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-storage-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/conformance-checks.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/conformance-spec-compatibility.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/core-fixed-fields-review.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/core-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/corr-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/cut-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/data-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/debug-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/dependency-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/discovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/dmseq-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/dmseq-target-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/execution-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/exhausted-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/fixture-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/gpio-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/gpio-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/hardware-configuration.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/hardware-quickstart.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/hardware-schema.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-core-shapes-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-deadline-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-notification-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-resend-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-tlv-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-value-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-wait-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/i2c-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/interface-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/interface-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/link-routes-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/link-transfer-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/logic-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/mailbox-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/notification-output-sample.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/notification-retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/notification-sequence-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/oep-declaration-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/oep-example-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/outcome-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/pin-constraints-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/pipeline-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/port-speed-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/probe-input-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/recovery-races-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/refusal-order-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/registered-ops-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/replay-pressure-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/reset-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/resource-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/response-race-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/restart-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/retention-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/retention-lifecycle-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/retry-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/route-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/run-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/scan-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/scan-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/selected-metadata-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/session-loss-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/session-smoke-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/spi-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/step-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/subscription-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/tcp-recovery-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/testing-consumers.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/tlv-request-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/README.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/capture.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/common.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/console.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/core.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/debug.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/fixture.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/link.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/plan.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/restart.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/transports.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/uart-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/uart-stream-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/usb-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/wire-options-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/writer-lease-conformance.ja.md +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/arm.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/capture.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/capture_blocks.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/catalog.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/ch32_flash.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/cobs.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_allocator.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_allocator_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_analog.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_analog_payload.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_analog_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_arm_adi.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_arm_adi_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_attach.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_attach_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_block_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_blocks.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_group.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_group_geometry.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_group_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_metadata.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_serial.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_serial_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_timeline.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_timeline_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_clock.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_clock_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_core_fixed_fields.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_core_smoke.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_corr.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_cut.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_cut_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_data.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_data_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_debug.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_debug_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dependencies.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dependency_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_discovery.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dmseq.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dmseq_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dmseq_target.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dmseq_target_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_execution_order.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_execution_order_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_exhausted.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_exhausted_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_fixture_metadata.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_gpio.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_gpio_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_gpio_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_core.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_core_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_deadline.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_deadline_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_notifications.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_notifications_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_request_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_requests.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_resend.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_resend_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_tlv.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_tlv_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_values.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_values_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_wait.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_wait_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_i2c.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_i2c_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_interface_smoke.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_interfaces.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_lease.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_lease_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_link_routes.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_link_routes_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_link_transfer_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_link_transfers.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_logic.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_logic_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_mailbox.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_mailbox_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_notification_retention.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_notification_retention_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_notification_sequence.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_notification_sequence_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_oep_declarations.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_oep_smoke.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_outcome_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_outcomes.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_pipeline.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_pipeline_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_port_speed.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_port_speed_execution.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_port_speed_execution_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_port_speed_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_probe_input.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_probe_input_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_recovery.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_recovery_race_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_recovery_races.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_recovery_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_refusal_order.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_refusal_order_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_registered_ops.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_replay_pressure.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_reset.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_reset_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_resource_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_resources.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_response_race.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_response_race_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_restart.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_restart_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retention.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retention_lifecycle.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retention_lifecycle_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retention_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retry.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retry_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_route_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_routes.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_run.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_run_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_scan.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_scan_options.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_scan_options_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_scan_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_selected_metadata.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_serial.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_session_loss.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_session_loss_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_session_smoke.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_spi.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_spi_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_step.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_step_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_stream.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_stream_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_subscription_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_subscriptions.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_tcp.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_tcp_peers.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_tcp_recovery.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_tcp_recovery_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_tlv_requests.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_uart.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_uart_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_uart_stream.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_uart_stream_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_usb.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_usb_cases.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_usb_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_wire_options.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_wire_options_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_writer_lease.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_writer_lease_sample.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/console.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/core.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/decode.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/dump.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/endpoint.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/fixture.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/frames.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/hardware.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/hid_stream.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/host.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/interfaces.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/kept_session.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/linktest.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/message.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/names.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/probe_log.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/pytest_conformance.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/registry.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/riscv.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/rp2350.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/settings.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/speed_record.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/stimulus.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/targets.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/uiapduino.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/usb_stream.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_allocator_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_analog_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_arm_adi_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_attach_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_capture.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_mdns.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_serial.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_trigger.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_usb.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_block_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_capture_group_geometry_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_capture_group_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_capture_metadata_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_capture_timeline_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_clock_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_core.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_cut_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_data_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_debug_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_declaration_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_dependency_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_dmseq_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_dmseq_target_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_fixture_drive.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_fixture_metadata_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_gpio_lifecycle_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_gpio_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_i2c_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_link_routes_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_link_transfer_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_logic_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_mailbox_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_names.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_notification_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_oep_declaration_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_outcome_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_pipeline_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_port_speed_execution_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_port_speed_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_registered_ops_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_reset_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_resource_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_restart_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_retention_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_retry_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_route_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_run_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_scan_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_scan_options_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_selected_metadata_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_spi_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_step_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_stream_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_tlv_request_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_uart_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_wire_options_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_writer_lease_model.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/conftest.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/equipment/.env.example +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/equipment/test_core_contract.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/equipment/test_preflight.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/fixtures/hardware.virtual.toml +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/.env.example +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/.env.virtual.example +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/__init__.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/conftest.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/firmware.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/flash.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/hardware.example.toml +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/hardware.resolved.example.toml +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/record.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/.gitignore +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32+1491c13-0.0.31-20261016T133559.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32+672bf7b-0.0.32-20261016T164655.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131458.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131510.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131526.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131532.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131656.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131703.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131708.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132050.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132057.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132104.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T160307.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T161655.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.37+1031feb-0.0.37-20261023T214002.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.38+7c158ff-0.0.38-20261027T081156.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.39+1ad47c7-0.0.39-20261027T182907.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.39+2c0c41f-0.0.39-20261027T174907.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.39+9317805-0.0.39-20261027T191153.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.39+a75fd45-0.0.39-20261027T205055.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201038.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201057.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201058.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201059.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896__crash_at_2106_s_-0.0.39-20261027T204608.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T190815.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T191854.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181116.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181812.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T182903.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/e8f60ae84e28-0.0.39+62463f2-0.0.39-20261029T145541.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/e8f60ae84e28-0.0.39+9317805-0.0.39-20261027T191150.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/e8f60ae84e28-0.0.39+a75fd45-0.0.39-20261028T190803.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T191727.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T204611.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191811.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191849.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+4fad559-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+1491c13-0.0.31-20261016T133501.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+672bf7b-0.0.32-20261016T164559.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T130922.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T131024.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+12e1222-0.0.37-20261023T214016.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+f8ac55a-0.0.36-20261022T160134.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.37+1031feb-0.0.37-20261023T214230.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.38+7c158ff-0.0.38-20261027T081159.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+2c0c41f-0.0.39-20261027T174933.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+9317805-0.0.39-20261027T191154.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+b7fbdf9-0.0.39-20261027T204617.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+bb371fb-0.0.39-20261028T191816.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.25-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+e877631-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ac80e07-0.0.27.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27-0.0.27.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T220718.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T221106.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/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.40 → oep_client_python-0.0.41}/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.40 → oep_client_python-0.0.41}/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.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.37-20261023T214102.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.39-20261028T190818.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+5bafb92-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+654b06a-0.0.26.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0e343c6-0.0.27+ec1df99-0.0.27.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+0f013b7-0.0.28.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+1c940ca-0.0.28.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+4ef21db+4ef21db-dirty-0.0.28.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+68d9694-0.0.28.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ec38b1d-0.0.28.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ffe4eb1-0.0.28.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28-0.0.28.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.36+f8ac55a-0.0.36-20261022T160503.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.37+1031feb-0.0.37-20261023T214005.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081145.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081152.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T180716.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T182855.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T183107.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f-0.0.39-20261027T174908.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/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.40 → oep_client_python-0.0.41}/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.40 → oep_client_python-0.0.41}/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.40 → oep_client_python-0.0.41}/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.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+62463f2-0.0.39-20261029T145536.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+7445bee-0.0.39-20261027T155413.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+9317805-0.0.39-20261027T191146.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+b7fbdf9-0.0.39-20261027T191724.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191806.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191843.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+d4d323c-0.0.39-20261028T190809.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.36-20261022T160222.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155301.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155340.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/test_harness.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/spec/oep-v1.toml +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/spec_names.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_capabilities.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_capture.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_capture_blocks.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_cobs.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_allocator.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_analog.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_analog_payload.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_arm_adi.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_arm_adi_blocks.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_attach.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_blocks.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_group.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_group_geometry.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_metadata.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_serial.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_timeline.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_timeline_lifecycle.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_clock.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_core_fixed_fields.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_core_smoke.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_corr.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_cut.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_data.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_debug.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_dependencies.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_discovery.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_dmseq.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_dmseq_target.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_execution_order.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_exhausted.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_fixture_metadata.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_gpio.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_gpio_lifecycle.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_core.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_critical_calls.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_deadline.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_notifications.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_requests.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_resend.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_tlv.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_values.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_wait.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_i2c.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_interface_smoke.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_interfaces.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_lease.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_link_routes.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_link_transfers.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_logic.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_mailbox.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_notification_output.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_notification_retention.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_notification_sequence.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_oep_declarations.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_oep_smoke.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_outcomes.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_pipeline.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_port_speed.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_port_speed_execution.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_port_speed_lifecycle.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_probe_input.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_reconnect.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_recovery.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_recovery_races.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_refusal_order.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_registered_ops.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_replay_pressure.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_replay_records_optional.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_reset.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_resources.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_response_race.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_restart.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_retention.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_retention_lifecycle.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_retry.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_routes.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_run.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_scan.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_scan_options.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_selected_metadata.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_serial.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_session_loss.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_session_smoke.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_spec_guard.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_spi.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_step.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_stream.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_subscriptions.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_tcp.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_tcp_peers.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_tcp_recovery.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_tlv_requests.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_uart.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_uart_stream.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_usb.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_wire_options.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_writer_lease.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_console_queue_and_reset_settle.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_debug_attach.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_extension_patterns.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_fixture_controllers.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_fixture_out.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_fixture_targets.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_flash_console.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_gpio_drive_and_serve_options.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_hardware.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_hid_stream.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_host_boot_lifecycle.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_host_rules_2026_10_06.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_host_wait_bound.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_interfaces.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_link_drop.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_link_host.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_linktest.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_literals.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_minimal_ops.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_no_resume.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_passthrough.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_plan.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_port_speed.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_probe_log.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_request_tails.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_restart.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_resubscribe_after_reopen.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review4_capture.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review4_debug.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review4_small.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_capture.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_core_a.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_core_b.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_debug_targets.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_debug_wires.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_small.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_capture_console.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_core_early.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_core_late.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_debug_a.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_debug_b.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_rest.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review7_exact_payload.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review7_host_recovery.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review7_request_validation.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review7_state_resources.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review7_tlv_readers.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review8_core_1.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review8_core_2.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review8_debug.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_rvswd_rest.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_session.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_settings.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_spec_283e5b5.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_spec_2c6d18d.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_spec_3cc50c8.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_spec_sections.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_spec_vectors.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_stimulus.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_target_parts.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_capture.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_common.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_console.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_core_names.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_debug.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_fixture.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_fixture_drive.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_link.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_plan.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_restart.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_usb_stream.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_analog_roles.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_changing_trigger.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_channel_time.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_format_2.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_formats.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_initial_trigger_time.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_lifetime.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_notifications.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_one_shot_time.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_options.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_pretrigger.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_query.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_rates.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_requests.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_resume_calibration.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_trigger_modes.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_trigger_source.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_trigger_source_more.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_waiting.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_pin_constraints.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_rules_2026_10_02.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_rules_2026_10_06.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_serve_tcp_connections.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_spec.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_targets.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_core.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_core_bool.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_wire_hold.py +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/SPEC_COMMIT +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/SPEC_SHA256 +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/capture_formats.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/checks.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/cobs.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/confirm.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/core_extensions.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/core_lifecycle.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/core_policy.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/discovery.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/headers.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/interface_boundaries.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/interface_profiles.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/logic_layout.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/ops.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/ops_encoding.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/refusals.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/sessions.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/settings_file.json +0 -0
- {oep_client_python-0.0.40 → oep_client_python-0.0.41}/udev/70-oep-probe.rules +0 -0
|
@@ -2,6 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.0.41
|
|
6
|
+
- (EN) Added: `oep_client.acquire`, one capture put together. A line is named by the probe's channel name (fn 0's channel_name, `GPIO47`) or a port's line label (`x035.swdio`), looked up on the session; a stream's length is `seconds` (as `LogicCapture.stream`). `capture_at(address, Request)` opens the probe, takes its lease, raises a UART link and lets it all go; `capture(hst, Request)` runs on a session the caller holds (with ProbeLog, the target's control). Modes oneshot / repeat / stream, logic and analog in a capture-group with a trigger on either track (capture §4.4), format 1 lines as their changes. The `Result` has the tick rate, the parts (`tick0`, `meta`: start_ns, start_uncertainty_ns, trigger_tick, ...), their channels as the probe gave them (`Bits`, `Changes`, `Analog`), the losses (any makes the capture a failure) and `meta["probe"]` (model, firmware, unit_id, `address` = the probe's place without the route, boot_id, clock, calibration, link). Moved from wireskein's oep source, which now writes this result as a file. numpy (extra `acquire`) puts streams and format 1 blocks together.
|
|
7
|
+
- (JA) 追加: `oep_client.acquire`。1 回の取り込みを組み立てる。線は、プローブのチャンネルの名前(fn 0 の channel_name、`GPIO47`)か口の線の label(`x035.swdio`)で指し、セッションの上で番号に引く。ストリームの長さは `seconds`(`LogicCapture.stream` と同じ)。`capture_at(address, Request)` はプローブを開き、lease を取り、UART の速さを上げ、終わったら手放す。`capture(hst, Request)` は呼び手が持つセッションの上で動く(ProbeLog や target の操作と一緒に)。mode は oneshot / repeat / stream、ロジックとアナログを capture-group で一緒に、どちらのトラックの trigger も(capture §4.4)、形式 1 の線は変化で。`Result` は刻みの速さ、区間(`tick0`、`meta`: start_ns、start_uncertainty_ns、trigger_tick など)、プローブが渡したままのチャンネル(`Bits`、`Changes`、`Analog`)、欠落(1 つでもあれば失敗)、`meta["probe"]`(model、firmware、unit_id、`address` = 経路を除いたプローブの場所、boot_id、clock、calibration、link)を持つ。wireskein の oep の取り込みから移した(wireskein はこの結果をファイルに書く)。stream と形式 1 のブロックの組み立てに numpy(追加の依存 `acquire`)を使う。
|
|
8
|
+
- (EN) Changed (breaking): a probe is named by its OEP address, `oep://<unit_id>[/<port>[/<target>]][?via=<route>]`
|
|
9
|
+
(oep-spec host guide §5.3; `link.parse_address`, `link.Address`, `hst.address`). Without via: its USB device (found by
|
|
10
|
+
its USB serial, any VID:PID: vendor bulk, then HID, then its one CDC port), else the TCP probe DNS-SD finds; via=usb /
|
|
11
|
+
bulk / hid / cdc / net keeps to that route, via=tcp:<host>:<port> and via=tty:<path> name it. On every route
|
|
12
|
+
describe's unit_id must be the one named. `tcp:UNIT_ID`, `usb:UNIT_ID` and `usb:VID:PID[:SERIAL]` are gone
|
|
13
|
+
(`oep://UNIT_ID?via=net`, `?via=usb`); a serial port path, `tcp://HOST[:PORT]` and a bare `usb` stay as short forms for a
|
|
14
|
+
probe whose unit_id is not known.
|
|
15
|
+
- (JA) 変更(壊す変更): probe は OEP のアドレス `oep://<unit_id>[/<port>[/<target>]][?via=<経路>]` で名指す(oep-spec の host
|
|
16
|
+
ガイド §5.3。`link.parse_address`、`link.Address`、`hst.address`)。via が無ければ USB のデバイス(USB の serial で探す。
|
|
17
|
+
VID:PID は問わない。vendor bulk、HID、ただ 1 つの CDC の順)、無ければ DNS-SD が見つけた TCP の probe。via=usb / bulk / hid / cdc /
|
|
18
|
+
net はその経路だけ、via=tcp:<host>:<port> と via=tty:<path> は経路を名指す。どの経路でも describe の unit_id が名指したものと
|
|
19
|
+
同じでなければならない。`tcp:UNIT_ID`、`usb:UNIT_ID`、`usb:VID:PID[:SERIAL]` は無くした(`oep://UNIT_ID?via=net`、`?via=usb`)。
|
|
20
|
+
unit_id を知らない probe には、シリアルの口の path、`tcp://HOST[:PORT]`、ただの `usb` を短い形として残す。
|
|
21
|
+
- (EN) Changed: `virtual_bench_serve --pty` says so on stderr when it gets no inotify instance (a user's
|
|
22
|
+
fs.inotify.max_user_instances used up by editors and file watchers): it then cannot see the close of a host that ended
|
|
23
|
+
without closing the port, and the pty stays busy. The test of that case skips with this reason instead of failing.
|
|
24
|
+
- (JA) 変更: `virtual_bench_serve --pty` は、inotify を作れないとき(エディタやファイルの見張りが、ユーザーの
|
|
25
|
+
fs.inotify.max_user_instances を使い切ったときなど)に、その旨を stderr に出す。このとき、口を閉じずに終わった host の
|
|
26
|
+
close が見えないので、pty は使用中のまま残る。その場合の試験は、落ちる代わりにこの理由で skip する。
|
|
27
|
+
- (EN) Fixed: `oep pins`' map named pads another device moves as wired - an X035's PC16/PC17, held by a USB host,
|
|
28
|
+
"followed" different channels on every run. The map now reads the target's pads first with nothing driven and leaves
|
|
29
|
+
out those that move (a note names them), and a pad must follow its channel on 4 tries (was 2).
|
|
30
|
+
- (JA) 修正: `oep pins` の map が、ほかの機器が動かすピンを「つながっている」としていた(USB ホストにつながる X035 の PC16/PC17 が、
|
|
31
|
+
走らせるたびに違うチャネルに追従した)。map は、まず何も駆動しないで target のピンを読み、動くピンを外す(note に出す)。チャネルに
|
|
32
|
+
追従するかは 4 回確かめる(前は 2 回)。
|
|
33
|
+
|
|
5
34
|
## 0.0.40
|
|
6
35
|
- (EN) Labels may carry the target pin a line reaches (oep-spec host guide §5.3): `S.N@P`, and `S@P` for a line with no
|
|
7
36
|
role. `settings.parse_label`, `pin_from_labels`, `label_text`, `pin_name`; `port_line` / `find_line` read `S.N@P` as
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: oep-client-python
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.41
|
|
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
|
|
@@ -15,6 +15,8 @@ Requires-Python: >=3.10
|
|
|
15
15
|
Requires-Dist: pyserial>=3.5
|
|
16
16
|
Requires-Dist: pyusb>=1.3
|
|
17
17
|
Requires-Dist: tomli>=2; python_version < '3.11'
|
|
18
|
+
Provides-Extra: acquire
|
|
19
|
+
Requires-Dist: numpy>=2.0; extra == 'acquire'
|
|
18
20
|
Provides-Extra: hid
|
|
19
21
|
Requires-Dist: hidapi>=0.14; extra == 'hid'
|
|
20
22
|
Provides-Extra: mdns
|
|
@@ -100,10 +102,11 @@ names starting with `_`, may change. Check probe/client compatibility using the
|
|
|
100
102
|
from oep_client import core, link, riscv, ch32_flash
|
|
101
103
|
|
|
102
104
|
hst = link.open_host("/dev/ttyACM0") # pipelined
|
|
103
|
-
#
|
|
104
|
-
# describe's unit_id must match),
|
|
105
|
-
#
|
|
106
|
-
#
|
|
105
|
+
# an OEP address "oep://<unit id>[?via=usb|bulk|hid|cdc|net|tcp:HOST:PORT|tty:PATH]" (host guide §5.3; without via
|
|
106
|
+
# its USB device, else the probe DNS-SD finds; describe's unit_id must match on any route), or, when the unit id is not
|
|
107
|
+
# known, a serial port (always COBS), "tcp://127.0.0.1:PORT" (a broker), "usb" (every device on the project's VID:PID
|
|
108
|
+
# 1209:4F45, each counted once: exactly one -> vendor, then HID, else its CDC port; several -> link.SeveralProbes lists
|
|
109
|
+
# them, name one). Each is probed first with a
|
|
107
110
|
# confirm only (transports §3): no valid answer -> closed, link.NotOepProbe
|
|
108
111
|
core.take(hst, 30000, owner="flash script") # the only way in: force; else wait out the lease, name the holder
|
|
109
112
|
wire = riscv.Wire(hst, "oep.wire.rvswd")
|
|
@@ -150,9 +153,9 @@ oep find [--timeout 2] [--json] [--no-verify] # probes announcing _oep._tcp (ea
|
|
|
150
153
|
oep linktest <probe> ... # --timeout: 0.3 s an answer by default, 3 s over TCP
|
|
151
154
|
```
|
|
152
155
|
|
|
153
|
-
`<probe>` is
|
|
154
|
-
probe DNS-SD finds
|
|
155
|
-
`
|
|
156
|
+
`<probe>` is an OEP address `oep://UNIT_ID[?via=route]` (oep-spec host guide §5.3; without via its USB device, else the
|
|
157
|
+
probe DNS-SD finds; on any route describe's unit_id must say the same, else it is closed) or, when the unit_id is not
|
|
158
|
+
known, a serial port, `tcp://HOST:PORT`, `tcp://HOST` (the port DNS-SD finds for that host) or `usb` (the only probe). A change takes the lock (owner "oep settings") and
|
|
156
159
|
ends the session after it; it takes effect at once and, after `save`, stays over a restart.
|
|
157
160
|
|
|
158
161
|
### A host run again: the kept session id
|
|
@@ -185,7 +188,7 @@ A probe that serves OEP over TCP is found by DNS-SD (its network settings are th
|
|
|
185
188
|
(`discovery.verify`, all at once, 1 s per answer, `--verify-timeout`): a TCP connection, confirm (an `OEP!` answer)
|
|
186
189
|
and fn 0's describe, whose unit_id must be the TXT unit_id - no session is opened. One that fails is dropped with a
|
|
187
190
|
warning on stderr naming its endpoint and what it said; `--no-verify` lists every instance as announced.
|
|
188
|
-
`discovery.find_unit` (and so `
|
|
191
|
+
`discovery.find_unit` (and so `oep://UNIT_ID?via=net`) verifies the same way and passes over an instance it cannot verify;
|
|
189
192
|
`open_host` then checks confirm and describe's unit_id again on the link it opens. The port
|
|
190
193
|
is always the SRV record's (none is fixed - the reference probe's 7450 is an example). With python-zeroconf installed
|
|
191
194
|
(`pip install 'oep-client-python[mdns]'`) it browses with it (every interface: InterfaceChoice.All), else with a
|
|
@@ -194,7 +197,7 @@ A probe that serves OEP over TCP is found by DNS-SD (its network settings are th
|
|
|
194
197
|
installed, else each interface's address on Linux, else the host name's addresses) - one send leaves by one
|
|
195
198
|
interface only, on Windows often a virtual adapter's, and a probe on another adapter never hears it. mDNS stays on the local link: from WSL 2's
|
|
196
199
|
default NAT network, a VM or across a router nothing is found - name the probe as `tcp://HOST:PORT`.
|
|
197
|
-
- `
|
|
200
|
+
- `oep://UNIT_ID?via=net` opens the probe DNS-SD finds by that unit_id and checks describe's (UnitIdMismatch, closed, otherwise);
|
|
198
201
|
after a restart it browses again (the address may change). TCP has no authentication: use it on a trusted network or
|
|
199
202
|
a tunnel (transports §1).
|
|
200
203
|
- `oep linktest` waits 3 s an answer over TCP (0.3 s elsewhere): Wi-Fi retransmissions stall answers for 1-4 s now and
|
|
@@ -495,6 +498,6 @@ The query's multicast loops back to this host on the interface it left by, and t
|
|
|
495
498
|
every interface. A host with no multicast route needs `--announce-on 127.0.0.1` and the query sent with
|
|
496
499
|
IP_MULTICAST_IF 127.0.0.1. A different `--unit-id` per job keeps parallel jobs apart (the port is in the instance
|
|
497
500
|
name too). A container or VM answers only on its own network. tests/test_virtual_bench_announce.py does this with
|
|
498
|
-
`oep find`, `discovery.find_unit` and `
|
|
501
|
+
`oep find`, `discovery.find_unit` and `oep://UNIT_ID?via=net` (both engines) - with in-process responders announcing a non-OEP
|
|
499
502
|
TCP service and a wrong TXT unit_id beside it, which the verify drops - skipped where multicast does not loop back.
|
|
500
503
|
|
|
@@ -69,10 +69,11 @@ GitHub Release、PyPI(Trusted Publishing)へ出す。変更は CHANGELOG.md
|
|
|
69
69
|
from oep_client import core, link, riscv, ch32_flash
|
|
70
70
|
|
|
71
71
|
hst = link.open_host("/dev/ttyACM0") # pipelining つき
|
|
72
|
-
#
|
|
73
|
-
# describe's unit_id must match),
|
|
74
|
-
#
|
|
75
|
-
#
|
|
72
|
+
# an OEP address "oep://<unit id>[?via=usb|bulk|hid|cdc|net|tcp:HOST:PORT|tty:PATH]" (host guide §5.3; without via
|
|
73
|
+
# its USB device, else the probe DNS-SD finds; describe's unit_id must match on any route), or, when the unit id is not
|
|
74
|
+
# known, a serial port (always COBS), "tcp://127.0.0.1:PORT" (a broker), "usb" (every device on the project's VID:PID
|
|
75
|
+
# 1209:4F45, each counted once: exactly one -> vendor, then HID, else its CDC port; several -> link.SeveralProbes lists
|
|
76
|
+
# them, name one). Each is probed first with a
|
|
76
77
|
# confirm only (transports §3): no valid answer -> closed, link.NotOepProbe
|
|
77
78
|
core.take(hst, 30000, owner="flash script") # the only way in: force; else wait out the lease, name the holder
|
|
78
79
|
wire = riscv.Wire(hst, "oep.wire.rvswd")
|
|
@@ -118,8 +119,9 @@ oep find [--timeout 2] [--json] [--no-verify] # _oep._tcp を広告する probe
|
|
|
118
119
|
oep linktest <probe> ... # --timeout: 既定は応答 1 つに 0.3 秒、TCP では 3 秒
|
|
119
120
|
```
|
|
120
121
|
|
|
121
|
-
`<probe>`
|
|
122
|
-
DNS-SD が見つけた probe
|
|
122
|
+
`<probe>` は OEP のアドレス `oep://UNIT_ID[?via=経路]`(oep-spec の host ガイド §5.3。via が無ければ USB のデバイス、無ければ
|
|
123
|
+
DNS-SD が見つけた probe。どの経路でも describe の unit_id が同じでなければ閉じる)。unit_id を知らないときは、シリアルの口、
|
|
124
|
+
`tcp://HOST:PORT`、`tcp://HOST`(その host に DNS-SD が見つけた port)、`usb`(ただ 1 つの probe)でもよい。変更はロックを取り(owner "oep settings")、終わったら
|
|
123
125
|
セッションを閉じる。変更はすぐ効き、`save` の後は再起動しても残る。
|
|
124
126
|
|
|
125
127
|
### 走り直す host: 残したセッションの id
|
|
@@ -150,7 +152,7 @@ TCP で OEP を運ぶ probe は DNS-SD で見つける(ネットワークの
|
|
|
150
152
|
`oep` は登録した名前ではないので、別のサービスが `_oep._tcp` を広告しうる: どの instance もまず確かめる(`discovery.verify`、
|
|
151
153
|
すべて同時に、答え 1 つあたり 1 秒、`--verify-timeout`)。TCP でつなぎ、confirm(`OEP!` の答え)と fn 0 の describe を送り、
|
|
152
154
|
describe の unit_id が TXT の unit_id と同じものだけを残す。session は開かない。確かめられないものは、その接続先と言ったことを
|
|
153
|
-
stderr に警告して外す。`--no-verify` は広告されたものをすべてそのまま並べる。`discovery.find_unit`(つまり `
|
|
155
|
+
stderr に警告して外す。`--no-verify` は広告されたものをすべてそのまま並べる。`discovery.find_unit`(つまり `oep://UNIT_ID?via=net`)も
|
|
154
156
|
同じく確かめ、確かめられない instance は飛ばす。そのあと `open_host` は開いた経路で confirm と describe の unit_id をもう一度
|
|
155
157
|
確かめる。port はいつも SRV
|
|
156
158
|
のもの(決まった port は無い。参照の probe の 7450 は例)。python-zeroconf があれば(`pip install 'oep-client-python[mdns]'`)それで、
|
|
@@ -159,7 +161,7 @@ TCP で OEP を運ぶ probe は DNS-SD で見つける(ネットワークの
|
|
|
159
161
|
アドレスごとに IP_MULTICAST_IF。`discovery.interface_addresses`: ifaddr があればそれ、無ければ Linux は各インターフェースのアドレス、
|
|
160
162
|
ほかは host 名のアドレス)。一度の送信は 1 つのインターフェースからしか出ず(Windows ではよく仮想アダプタ)、別のアダプタの probe には届かない。mDNS は同じリンクの
|
|
161
163
|
中だけ: WSL 2 の既定の NAT、VM、ルーターの向こうからは見つからない。そのときは `tcp://HOST:PORT` で名指す。
|
|
162
|
-
- `
|
|
164
|
+
- `oep://UNIT_ID?via=net` はその unit_id で DNS-SD が見つけた probe を開き、describe の unit_id を確かめる(違えば UnitIdMismatch で閉じる)。
|
|
163
165
|
再起動の後は browse し直す(アドレスは変わりうる)。TCP に認証は無い: 信頼するネットワークかトンネルの中で使う(transports §1)。
|
|
164
166
|
- `oep linktest` は TCP では応答を 3 秒待つ(ほかは 0.3 秒): Wi-Fi の再送でときどき 1〜4 秒止まり、それでも答えは来る。
|
|
165
167
|
|
|
@@ -409,7 +411,7 @@ python -m oep_client.virtual_bench_serve --tcp 0 --announce --profile esp32-v003
|
|
|
409
411
|
問い合わせの multicast は出ていったインターフェースでこの host に戻り、応答器はすべてのインターフェースで group に入っている。
|
|
410
412
|
multicast の経路が無い host では `--announce-on 127.0.0.1` にし、問い合わせを IP_MULTICAST_IF 127.0.0.1 で送る。並んで動く job は
|
|
411
413
|
`--unit-id` を変えれば分かれる(instance の名前にも port が入る)。コンテナや VM は自分のネットワークの中でだけ答える。
|
|
412
|
-
tests/test_virtual_bench_announce.py がこれを `oep find`、`discovery.find_unit`、`
|
|
414
|
+
tests/test_virtual_bench_announce.py がこれを `oep find`、`discovery.find_unit`、`oep://UNIT_ID?via=net`(両方の engine)で試す(同じ process の responder が、OEP でない TCP の
|
|
413
415
|
サービスと違う TXT の unit_id を並べて広告し、確かめでそれが外れることも見る)。multicast が
|
|
414
416
|
戻らない所では skip する。
|
|
415
417
|
|
|
@@ -75,10 +75,11 @@ names starting with `_`, may change. Check probe/client compatibility using the
|
|
|
75
75
|
from oep_client import core, link, riscv, ch32_flash
|
|
76
76
|
|
|
77
77
|
hst = link.open_host("/dev/ttyACM0") # pipelined
|
|
78
|
-
#
|
|
79
|
-
# describe's unit_id must match),
|
|
80
|
-
#
|
|
81
|
-
#
|
|
78
|
+
# an OEP address "oep://<unit id>[?via=usb|bulk|hid|cdc|net|tcp:HOST:PORT|tty:PATH]" (host guide §5.3; without via
|
|
79
|
+
# its USB device, else the probe DNS-SD finds; describe's unit_id must match on any route), or, when the unit id is not
|
|
80
|
+
# known, a serial port (always COBS), "tcp://127.0.0.1:PORT" (a broker), "usb" (every device on the project's VID:PID
|
|
81
|
+
# 1209:4F45, each counted once: exactly one -> vendor, then HID, else its CDC port; several -> link.SeveralProbes lists
|
|
82
|
+
# them, name one). Each is probed first with a
|
|
82
83
|
# confirm only (transports §3): no valid answer -> closed, link.NotOepProbe
|
|
83
84
|
core.take(hst, 30000, owner="flash script") # the only way in: force; else wait out the lease, name the holder
|
|
84
85
|
wire = riscv.Wire(hst, "oep.wire.rvswd")
|
|
@@ -125,9 +126,9 @@ oep find [--timeout 2] [--json] [--no-verify] # probes announcing _oep._tcp (ea
|
|
|
125
126
|
oep linktest <probe> ... # --timeout: 0.3 s an answer by default, 3 s over TCP
|
|
126
127
|
```
|
|
127
128
|
|
|
128
|
-
`<probe>` is
|
|
129
|
-
probe DNS-SD finds
|
|
130
|
-
`
|
|
129
|
+
`<probe>` is an OEP address `oep://UNIT_ID[?via=route]` (oep-spec host guide §5.3; without via its USB device, else the
|
|
130
|
+
probe DNS-SD finds; on any route describe's unit_id must say the same, else it is closed) or, when the unit_id is not
|
|
131
|
+
known, a serial port, `tcp://HOST:PORT`, `tcp://HOST` (the port DNS-SD finds for that host) or `usb` (the only probe). A change takes the lock (owner "oep settings") and
|
|
131
132
|
ends the session after it; it takes effect at once and, after `save`, stays over a restart.
|
|
132
133
|
|
|
133
134
|
### A host run again: the kept session id
|
|
@@ -160,7 +161,7 @@ A probe that serves OEP over TCP is found by DNS-SD (its network settings are th
|
|
|
160
161
|
(`discovery.verify`, all at once, 1 s per answer, `--verify-timeout`): a TCP connection, confirm (an `OEP!` answer)
|
|
161
162
|
and fn 0's describe, whose unit_id must be the TXT unit_id - no session is opened. One that fails is dropped with a
|
|
162
163
|
warning on stderr naming its endpoint and what it said; `--no-verify` lists every instance as announced.
|
|
163
|
-
`discovery.find_unit` (and so `
|
|
164
|
+
`discovery.find_unit` (and so `oep://UNIT_ID?via=net`) verifies the same way and passes over an instance it cannot verify;
|
|
164
165
|
`open_host` then checks confirm and describe's unit_id again on the link it opens. The port
|
|
165
166
|
is always the SRV record's (none is fixed - the reference probe's 7450 is an example). With python-zeroconf installed
|
|
166
167
|
(`pip install 'oep-client-python[mdns]'`) it browses with it (every interface: InterfaceChoice.All), else with a
|
|
@@ -169,7 +170,7 @@ A probe that serves OEP over TCP is found by DNS-SD (its network settings are th
|
|
|
169
170
|
installed, else each interface's address on Linux, else the host name's addresses) - one send leaves by one
|
|
170
171
|
interface only, on Windows often a virtual adapter's, and a probe on another adapter never hears it. mDNS stays on the local link: from WSL 2's
|
|
171
172
|
default NAT network, a VM or across a router nothing is found - name the probe as `tcp://HOST:PORT`.
|
|
172
|
-
- `
|
|
173
|
+
- `oep://UNIT_ID?via=net` opens the probe DNS-SD finds by that unit_id and checks describe's (UnitIdMismatch, closed, otherwise);
|
|
173
174
|
after a restart it browses again (the address may change). TCP has no authentication: use it on a trusted network or
|
|
174
175
|
a tunnel (transports §1).
|
|
175
176
|
- `oep linktest` waits 3 s an answer over TCP (0.3 s elsewhere): Wi-Fi retransmissions stall answers for 1-4 s now and
|
|
@@ -470,6 +471,6 @@ The query's multicast loops back to this host on the interface it left by, and t
|
|
|
470
471
|
every interface. A host with no multicast route needs `--announce-on 127.0.0.1` and the query sent with
|
|
471
472
|
IP_MULTICAST_IF 127.0.0.1. A different `--unit-id` per job keeps parallel jobs apart (the port is in the instance
|
|
472
473
|
name too). A container or VM answers only on its own network. tests/test_virtual_bench_announce.py does this with
|
|
473
|
-
`oep find`, `discovery.find_unit` and `
|
|
474
|
+
`oep find`, `discovery.find_unit` and `oep://UNIT_ID?via=net` (both engines) - with in-process responders announcing a non-OEP
|
|
474
475
|
TCP service and a wrong TXT unit_id beside it, which the verify drops - skipped where multicast does not loop back.
|
|
475
476
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# 仕様追従で見つけた実装上の負担
|
|
2
|
+
|
|
3
|
+
実装を oep-spec に追従させるときに、実装がかなり不便だと分かった仕様の規則を記録する。仕様の見直しの材料であり、規範ではない。
|
|
4
|
+
仕様に入ったもの、取り下げたものは消し、今開いているものだけを置く。単に作業量が多いだけのもの、実装側の設計で解消できるものは載せない。
|
|
5
|
+
|
|
6
|
+
| # | 条項 | 不便な点 | 影響 | 代案 |
|
|
7
|
+
|---|---|---|---|---|
|
|
8
|
+
| 1 | core §2.3(後に来た同じ tag も検証の対象) | 要求の中で、繰り返さない既知の tag が 2 回来たとき、使わない 2 つ目以降の値まで、値域と対応の有無を op ごとに検証しなければならない。共通の TLV 読み取りは長さしか見られないので、検証を副作用のある処理から分け、同じ検証をすべてのコピーへ当てる作りが要る | probe(各 op)、仮想ベンチ | 要求の中の、繰り返さない既知の tag の重複を malformed にする(critical の bit を除いた番号で判定する。繰り返す tag と未知の tag は対象外)。今は有効な重複を新たに断る変更になる |
|
|
9
|
+
| 2 | core §2.2 / §2.3(応答・出来事・データの読み手の規則) | 送る側に「繰り返さない tag を応答で 2 度送らない」の義務が無いので、host は応答の TLV を読むすべての所で、最初のコピーを使い、長さの違う値を壊れたものとして扱う防御を持つ。Python は `catalog.first_value` / `first_fixed` に集めた | host、検査器 | probe は、応答・出来事・データで、繰り返さない tag を 2 度送らないと定め、検査器で確かめる。読み手の規則は変えない(要求の側の #1 とは別に書く) |
|
|
10
|
+
| 3 | console §2、core §9(stream はセッションのもので、セッションの終わりで解放する) | 1 回の実行ごとにセッションを開いて閉じる host(`oep` の各コマンド、試験のプロセス)は、コマンドの間に target が出した出力(起動直後の行など)を拾えない。console の素通し(core §13 の項目)は、セッションの無い間の出力をシリアルの口へ流すが、次のセッションで読み返すことはできない | host(CLI、試験) | セッションの無い間も受け続け、次のセッションで読める「保持の stream」を任意の機能として定める。閉じた stream の番号を使い回さない規則(core §9)とは別の資源にする |
|
|
@@ -211,9 +211,9 @@ log、readback、waveform、capture layout/rate、時刻不確かさ、双方の
|
|
|
211
211
|
|
|
212
212
|
## 11. 調査した正本と実装
|
|
213
213
|
|
|
214
|
-
- [OEP 適合](https://github.com/Open-Embedded-Probe/oep-spec/blob/main/docs/conformance.ja.md)、[debug wire と connection](https://github.com/Open-Embedded-Probe/oep-spec/blob/main/interfaces/oep-if-debug.ja.md)、[
|
|
214
|
+
- [OEP 適合](https://github.com/Open-Embedded-Probe/oep-spec/blob/main/docs/conformance.ja.md)、[debug wire と connection](https://github.com/Open-Embedded-Probe/oep-spec/blob/main/interfaces/oep-if-debug.ja.md)、[設定(core §13)](https://github.com/Open-Embedded-Probe/oep-spec/blob/main/docs/oep-core.ja.md#13-設定任意)。規範の正本は oep-spec に置き、この方針では新しい通信規則を定義しない。
|
|
215
215
|
- [Python の pins 探索](https://github.com/Open-Embedded-Probe/oep-client-python/blob/main/src/oep_client/pins.py)、[実機試験](https://github.com/Open-Embedded-Probe/oep-client-python/blob/main/tests/hw/README.ja.md)、[個体表](https://github.com/Open-Embedded-Probe/oep-client-python/blob/main/tests/hw/boards.py)。
|
|
216
|
-
- [probe DebugPort](https://github.com/Open-Embedded-Probe/oep-probe-arduino/blob/main/src/OepTarget.h)、[
|
|
216
|
+
- [probe DebugPort](https://github.com/Open-Embedded-Probe/oep-probe-arduino/blob/main/src/OepTarget.h)、[Settings](https://github.com/Open-Embedded-Probe/oep-probe-arduino/blob/main/src/OepSettings.h)、[実装制約](https://github.com/Open-Embedded-Probe/oep-probe-arduino/blob/main/docs/implementation-limits.ja.md)、[C++ 単体試験](https://github.com/Open-Embedded-Probe/oep-probe-arduino/blob/main/tests/host/run.sh)、[CI](https://github.com/Open-Embedded-Probe/oep-probe-arduino/blob/main/.github/workflows/tests.yml)。
|
|
217
217
|
- [ch32rv の OEP と broker](https://github.com/ch32-riscv-ug/ch32rv/blob/main/docs/oep-host.ja.md)、[仮想 OEP](https://github.com/ch32-riscv-ug/ch32rv/blob/main/crates/oep/tests/virtual_bench.rs)、[仮想環境取得](https://github.com/ch32-riscv-ug/ch32rv/blob/main/crates/oep/tests/virtual_bench/uv.rs)、[flash E2E](https://github.com/ch32-riscv-ug/ch32rv/blob/main/cli/tests/oep_flash.rs)、[monitor E2E](https://github.com/ch32-riscv-ug/ch32rv/blob/main/cli/tests/oep_monitor.rs)。
|
|
218
218
|
- [ArduinoCore の計画](https://github.com/ch32-riscv-ug/ArduinoCore-CH32RV/blob/main/tests/TEST_PLAN.ja.md)、[実装との照合](https://github.com/ch32-riscv-ug/ArduinoCore-CH32RV/blob/main/docs/test-coverage.ja.md)、[現在の構成 loader](https://github.com/ch32-riscv-ug/ArduinoCore-CH32RV/blob/main/tests/harness/bench.py)、[TinyUSB の現状](https://github.com/ch32-riscv-ug/ArduinoCore-CH32RV/blob/main/libraries/TinyUSB/README.ja.md)。
|
|
219
219
|
- [pytest Arduino 基礎](https://github.com/tanakamasayuki/pytest-embedded-arduino-cli/blob/main/TESTING_BASICS.ja.md)、[詳細と peer の原則](https://github.com/tanakamasayuki/pytest-embedded-arduino-cli/blob/main/TESTING_ADVANCED.ja.md)、[peer lifecycle の例](https://github.com/tanakamasayuki/pytest-embedded-arduino-cli/blob/main/examples/12_peer_host_core/README.ja.md)。
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "oep-client-python"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.41"
|
|
8
8
|
description = "Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a virtual bench"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -24,6 +24,7 @@ dependencies = ["pyserial>=3.5", "pyusb>=1.3", "tomli>=2; python_version < '3.11
|
|
|
24
24
|
usb-async = ["libusb1>=3"] # queued asynchronous IN transfers: streaming near the USB HS ceiling
|
|
25
25
|
hid = ["hidapi>=0.14"] # the vendor HID way in through the OS HID driver (Windows without WinUSB, Linux hidraw)
|
|
26
26
|
mdns = ["zeroconf>=0.131"] # DNS-SD browsing through python-zeroconf (oep find, tcp:UNIT_ID); without it a minimal query of its own
|
|
27
|
+
acquire = ["numpy>=2.0"] # acquire: streams and capture format 1 blocks put together at once
|
|
27
28
|
|
|
28
29
|
[project.scripts]
|
|
29
30
|
oep = "oep_client.__main__:main"
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
host's time - the reading with the shortest round trip of n)
|
|
21
21
|
oep restart <probe> [--reopen-s S] (oep.probe.restart: the probe restarts; waits until it is back, its new boot_id)
|
|
22
22
|
|
|
23
|
-
<probe>:
|
|
24
|
-
|
|
23
|
+
<probe>: an OEP address, oep://UNIT_ID[?via=usb|bulk|hid|cdc|net|tcp:HOST:PORT|tty:PATH] (host guide §5.3), or, for a
|
|
24
|
+
probe whose unit_id is not known, a serial port, tcp://HOST[:PORT] (no port: the one DNS-SD finds) or usb (the only one). A change takes the lock (owner "oep settings") and
|
|
25
25
|
ends the session after it; it takes effect at once, and stays over a restart only after `save` (or --save).
|
|
26
26
|
"""
|
|
27
27
|
|
|
@@ -47,7 +47,7 @@ def _open_host(target: str, **kw):
|
|
|
47
47
|
return link.open_host(target, **kw)
|
|
48
48
|
except (OSError, ValueError, ImportError, host.OepError) as e:
|
|
49
49
|
why = " ".join(str(e).split()).rstrip(".") or type(e).__name__
|
|
50
|
-
hint = f" Hint: {USB_HINT}." if isinstance(e, FileNotFoundError) and (target == "usb" or target.startswith("
|
|
50
|
+
hint = f" Hint: {USB_HINT}." if isinstance(e, FileNotFoundError) and (target == "usb" or target.lower().startswith("oep://")) \
|
|
51
51
|
else ""
|
|
52
52
|
raise SystemExit(f"oep: cannot open {target}: {why}.{hint}") from None
|
|
53
53
|
|
|
@@ -81,7 +81,7 @@ def main(argv=None) -> int:
|
|
|
81
81
|
sp.add_argument("--baud", type=int, default=link.BASE_BAUD, help="the boot speed (default 115200)")
|
|
82
82
|
sp.add_argument("--json", action="store_true")
|
|
83
83
|
lt = sub.add_parser("linktest", help="measure the link: traffic patterns at rates the host asks for, what breaks")
|
|
84
|
-
lt.add_argument("probe", help="a probe: a serial port, tcp://HOST:PORT or usb
|
|
84
|
+
lt.add_argument("probe", help="a probe: oep://UNIT_ID[?via=...], a serial port, tcp://HOST:PORT or usb")
|
|
85
85
|
lt.add_argument("--rates", default="", help="comma-separated rates to switch to with port_speed and measure at "
|
|
86
86
|
"(each on its own; 0 or 'now' = the speed in force). Default: only the speed in force")
|
|
87
87
|
lt.add_argument("--patterns", default="in,out,duplex", help="in (probe->host), out (host->probe), duplex")
|
|
@@ -96,7 +96,7 @@ def main(argv=None) -> int:
|
|
|
96
96
|
lt.add_argument("--json", action="store_true", help="one JSON object per cell")
|
|
97
97
|
pn = sub.add_parser("pins", help="find where a target is wired: classify the channels, scan the wire, find the "
|
|
98
98
|
"reset line, suggest labels (writes nothing without --save)")
|
|
99
|
-
pn.add_argument("probe", help="a probe: a serial port, tcp://HOST:PORT or usb
|
|
99
|
+
pn.add_argument("probe", help="a probe: oep://UNIT_ID[?via=...], a serial port, tcp://HOST:PORT or usb")
|
|
100
100
|
pn.add_argument("--power", type=int, help="the gpio channel that powers the target: switched off, then on, to "
|
|
101
101
|
"see which channels follow it (never touched without this)")
|
|
102
102
|
pn.add_argument("--exclude", default="", help="channels never to read, scan or hold, comma-separated")
|
|
@@ -116,11 +116,11 @@ def main(argv=None) -> int:
|
|
|
116
116
|
"<name>.swio), <name>.nrst, <name>.power_hi; the probe is then opened as oep://<unit_id>/<name>")
|
|
117
117
|
pn.add_argument("--json", action="store_true", help="the report as JSON (the steps' lines go to stderr)")
|
|
118
118
|
ck = sub.add_parser("clock", help="the probe's clock (fn 0 clock, core §7.6) against this host's: lock-free")
|
|
119
|
-
ck.add_argument("probe", help="a probe: a serial port, tcp://HOST:PORT or usb
|
|
119
|
+
ck.add_argument("probe", help="a probe: oep://UNIT_ID[?via=...], a serial port, tcp://HOST:PORT or usb")
|
|
120
120
|
ck.add_argument("-n", type=int, default=8, help="readings; the one with the shortest round trip is kept (default 8)")
|
|
121
121
|
ck.add_argument("--json", action="store_true")
|
|
122
122
|
rs = sub.add_parser("restart", help="restart the probe (oep.probe.restart, optional) and wait until it is back")
|
|
123
|
-
rs.add_argument("probe", help="a probe: a serial port, tcp://HOST:PORT or usb
|
|
123
|
+
rs.add_argument("probe", help="a probe: oep://UNIT_ID[?via=...], a serial port, tcp://HOST:PORT or usb")
|
|
124
124
|
rs.add_argument("--force", action="store_true", help="take the lock from its holder")
|
|
125
125
|
rs.add_argument("--reopen-s", type=float, default=0.0, metavar="S",
|
|
126
126
|
help="when the probe is not back within its restart_max_ms, open it again for up to S more seconds "
|
|
@@ -138,7 +138,7 @@ def main(argv=None) -> int:
|
|
|
138
138
|
d = sub.add_parser("dump", help="list and describe every interface a probe offers")
|
|
139
139
|
src = d.add_mutually_exclusive_group(required=True)
|
|
140
140
|
src.add_argument("--virtual", choices=sorted(virtual_bench.PROFILES), help="an in-process virtual bench (no hardware)")
|
|
141
|
-
src.add_argument("--port", help="a probe: a serial port, tcp://HOST:PORT or usb
|
|
141
|
+
src.add_argument("--port", help="a probe: oep://UNIT_ID[?via=...], a serial port, tcp://HOST:PORT or usb (lock-free reads only)")
|
|
142
142
|
d.add_argument("--prefix", default="", help="only names under this namespace (label boundaries)")
|
|
143
143
|
d.add_argument("--exact", action="store_true", help="the prefix is a whole name")
|
|
144
144
|
d.add_argument("--json", action="store_true", help="machine-readable output")
|