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.
Files changed (727) hide show
  1. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/CHANGELOG.md +29 -0
  2. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/PKG-INFO +14 -11
  3. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/README.ja.md +11 -9
  4. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/README.md +11 -10
  5. oep_client_python-0.0.41/docs/spec-follow-notes.ja.md +10 -0
  6. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/testing-policy.ja.md +2 -2
  7. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/pyproject.toml +2 -1
  8. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/__init__.py +1 -1
  9. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/__main__.py +8 -8
  10. oep_client_python-0.0.41/src/oep_client/acquire.py +1866 -0
  11. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/discovery.py +1 -1
  12. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/link.py +122 -42
  13. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/pins.py +16 -2
  14. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_serve.py +3 -0
  15. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/README.ja.md +3 -3
  16. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/README.md +3 -3
  17. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/boards.py +19 -20
  18. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/test_probe.py +5 -2
  19. oep_client_python-0.0.41/tests/test_acquire.py +138 -0
  20. oep_client_python-0.0.41/tests/test_address.py +40 -0
  21. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_host_rules_2026_10_02.py +1 -1
  22. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_link_serial.py +17 -1
  23. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_pins.py +26 -0
  24. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_tcp_discovery.py +3 -3
  25. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_core.py +2 -2
  26. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_transports.py +6 -4
  27. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_usb_identity.py +10 -10
  28. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_announce.py +2 -2
  29. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_serve_reboot.py +4 -1
  30. oep_client_python-0.0.40/docs/spec-follow-notes.ja.md +0 -683
  31. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/.gitignore +0 -0
  32. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/LICENSE +0 -0
  33. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/README.ja.md +0 -0
  34. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/allocator-conformance.ja.md +0 -0
  35. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/analog-conformance.ja.md +0 -0
  36. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/analog-payload-conformance.ja.md +0 -0
  37. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/arm-adi-conformance.ja.md +0 -0
  38. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/attach-conformance.ja.md +0 -0
  39. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/block-conformance.ja.md +0 -0
  40. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-group-conformance.ja.md +0 -0
  41. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-group-geometry-conformance.ja.md +0 -0
  42. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-metadata-conformance.ja.md +0 -0
  43. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-serial-conformance.ja.md +0 -0
  44. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-timeline-conformance.ja.md +0 -0
  45. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/capture-timeline-lifecycle-conformance.ja.md +0 -0
  46. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/clock-conformance.ja.md +0 -0
  47. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-conformance.ja.md +0 -0
  48. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-execution-conformance.ja.md +0 -0
  49. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-fallback-conformance.ja.md +0 -0
  50. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-paging-conformance.ja.md +0 -0
  51. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-power-loss-conformance.ja.md +0 -0
  52. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/config-storage-conformance.ja.md +0 -0
  53. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/conformance-checks.ja.md +0 -0
  54. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/conformance-spec-compatibility.ja.md +0 -0
  55. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/core-fixed-fields-review.ja.md +0 -0
  56. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/core-smoke-conformance.ja.md +0 -0
  57. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/corr-conformance.ja.md +0 -0
  58. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/cut-conformance.ja.md +0 -0
  59. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/data-conformance.ja.md +0 -0
  60. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/debug-conformance.ja.md +0 -0
  61. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/dependency-conformance.ja.md +0 -0
  62. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/discovery-conformance.ja.md +0 -0
  63. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/dmseq-conformance.ja.md +0 -0
  64. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/dmseq-target-conformance.ja.md +0 -0
  65. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/execution-order-conformance.ja.md +0 -0
  66. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/exhausted-conformance.ja.md +0 -0
  67. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/fixture-metadata-conformance.ja.md +0 -0
  68. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/gpio-conformance.ja.md +0 -0
  69. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/gpio-lifecycle-conformance.ja.md +0 -0
  70. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/hardware-configuration.ja.md +0 -0
  71. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/hardware-quickstart.ja.md +0 -0
  72. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/hardware-schema.ja.md +0 -0
  73. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-core-shapes-conformance.ja.md +0 -0
  74. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-deadline-conformance.ja.md +0 -0
  75. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-notification-conformance.ja.md +0 -0
  76. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-request-conformance.ja.md +0 -0
  77. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-resend-conformance.ja.md +0 -0
  78. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-tlv-conformance.ja.md +0 -0
  79. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-value-conformance.ja.md +0 -0
  80. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/host-wait-conformance.ja.md +0 -0
  81. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/i2c-conformance.ja.md +0 -0
  82. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/interface-conformance.ja.md +0 -0
  83. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/interface-smoke-conformance.ja.md +0 -0
  84. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/lease-conformance.ja.md +0 -0
  85. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/link-routes-conformance.ja.md +0 -0
  86. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/link-transfer-conformance.ja.md +0 -0
  87. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/logic-conformance.ja.md +0 -0
  88. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/mailbox-conformance.ja.md +0 -0
  89. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/notification-output-sample.ja.md +0 -0
  90. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/notification-retention-conformance.ja.md +0 -0
  91. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/notification-sequence-conformance.ja.md +0 -0
  92. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/oep-declaration-conformance.ja.md +0 -0
  93. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/oep-example-smoke-conformance.ja.md +0 -0
  94. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/outcome-conformance.ja.md +0 -0
  95. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/pin-constraints-conformance.ja.md +0 -0
  96. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/pipeline-conformance.ja.md +0 -0
  97. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/port-speed-conformance.ja.md +0 -0
  98. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/probe-input-conformance.ja.md +0 -0
  99. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/recovery-conformance.ja.md +0 -0
  100. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/recovery-races-conformance.ja.md +0 -0
  101. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/refusal-order-conformance.ja.md +0 -0
  102. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/registered-ops-conformance.ja.md +0 -0
  103. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/replay-pressure-conformance.ja.md +0 -0
  104. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/reset-conformance.ja.md +0 -0
  105. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/resource-conformance.ja.md +0 -0
  106. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/response-race-conformance.ja.md +0 -0
  107. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/restart-conformance.ja.md +0 -0
  108. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/retention-conformance.ja.md +0 -0
  109. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/retention-lifecycle-conformance.ja.md +0 -0
  110. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/retry-conformance.ja.md +0 -0
  111. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/route-conformance.ja.md +0 -0
  112. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/run-conformance.ja.md +0 -0
  113. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/scan-conformance.ja.md +0 -0
  114. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/scan-options-conformance.ja.md +0 -0
  115. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/selected-metadata-conformance.ja.md +0 -0
  116. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/session-loss-conformance.ja.md +0 -0
  117. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/session-smoke-conformance.ja.md +0 -0
  118. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/spi-conformance.ja.md +0 -0
  119. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/step-conformance.ja.md +0 -0
  120. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/stream-conformance.ja.md +0 -0
  121. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/subscription-conformance.ja.md +0 -0
  122. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/tcp-recovery-conformance.ja.md +0 -0
  123. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/testing-consumers.ja.md +0 -0
  124. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/tlv-request-conformance.ja.md +0 -0
  125. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/README.ja.md +0 -0
  126. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/capture.json +0 -0
  127. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/common.json +0 -0
  128. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/console.json +0 -0
  129. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/core.json +0 -0
  130. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/debug.json +0 -0
  131. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/fixture.json +0 -0
  132. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/link.json +0 -0
  133. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/plan.json +0 -0
  134. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/restart.json +0 -0
  135. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/trace/transports.json +0 -0
  136. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/uart-conformance.ja.md +0 -0
  137. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/uart-stream-conformance.ja.md +0 -0
  138. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/usb-conformance.ja.md +0 -0
  139. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/wire-options-conformance.ja.md +0 -0
  140. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/docs/writer-lease-conformance.ja.md +0 -0
  141. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/arm.py +0 -0
  142. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/capture.py +0 -0
  143. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/capture_blocks.py +0 -0
  144. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/catalog.py +0 -0
  145. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/ch32_flash.py +0 -0
  146. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/cobs.py +0 -0
  147. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance.py +0 -0
  148. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_allocator.py +0 -0
  149. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_allocator_sample.py +0 -0
  150. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_analog.py +0 -0
  151. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_analog_payload.py +0 -0
  152. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_analog_sample.py +0 -0
  153. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_arm_adi.py +0 -0
  154. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_arm_adi_blocks.py +0 -0
  155. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_arm_adi_sample.py +0 -0
  156. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_attach.py +0 -0
  157. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_attach_sample.py +0 -0
  158. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_block_sample.py +0 -0
  159. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_blocks.py +0 -0
  160. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_group.py +0 -0
  161. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_group_geometry.py +0 -0
  162. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_group_sample.py +0 -0
  163. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_metadata.py +0 -0
  164. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_serial.py +0 -0
  165. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_serial_sample.py +0 -0
  166. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_timeline.py +0 -0
  167. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_timeline_lifecycle.py +0 -0
  168. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_capture_timeline_sample.py +0 -0
  169. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_clock.py +0 -0
  170. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_clock_sample.py +0 -0
  171. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_core_fixed_fields.py +0 -0
  172. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_core_smoke.py +0 -0
  173. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_corr.py +0 -0
  174. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_cut.py +0 -0
  175. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_cut_sample.py +0 -0
  176. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_data.py +0 -0
  177. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_data_sample.py +0 -0
  178. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_debug.py +0 -0
  179. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_debug_sample.py +0 -0
  180. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dependencies.py +0 -0
  181. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dependency_sample.py +0 -0
  182. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_discovery.py +0 -0
  183. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dmseq.py +0 -0
  184. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dmseq_sample.py +0 -0
  185. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dmseq_target.py +0 -0
  186. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_dmseq_target_sample.py +0 -0
  187. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_execution_order.py +0 -0
  188. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_execution_order_sample.py +0 -0
  189. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_exhausted.py +0 -0
  190. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_exhausted_sample.py +0 -0
  191. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_fixture_metadata.py +0 -0
  192. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_gpio.py +0 -0
  193. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_gpio_lifecycle.py +0 -0
  194. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_gpio_lifecycle_sample.py +0 -0
  195. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_gpio_sample.py +0 -0
  196. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_core.py +0 -0
  197. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_core_sample.py +0 -0
  198. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_deadline.py +0 -0
  199. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_deadline_sample.py +0 -0
  200. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_notifications.py +0 -0
  201. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_notifications_sample.py +0 -0
  202. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_request_sample.py +0 -0
  203. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_requests.py +0 -0
  204. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_resend.py +0 -0
  205. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_resend_sample.py +0 -0
  206. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_tlv.py +0 -0
  207. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_tlv_sample.py +0 -0
  208. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_values.py +0 -0
  209. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_values_sample.py +0 -0
  210. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_wait.py +0 -0
  211. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_host_wait_sample.py +0 -0
  212. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_i2c.py +0 -0
  213. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_i2c_sample.py +0 -0
  214. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_interface_smoke.py +0 -0
  215. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_interfaces.py +0 -0
  216. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_lease.py +0 -0
  217. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_lease_sample.py +0 -0
  218. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_link_routes.py +0 -0
  219. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_link_routes_sample.py +0 -0
  220. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_link_transfer_sample.py +0 -0
  221. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_link_transfers.py +0 -0
  222. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_logic.py +0 -0
  223. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_logic_sample.py +0 -0
  224. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_mailbox.py +0 -0
  225. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_mailbox_sample.py +0 -0
  226. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_notification_retention.py +0 -0
  227. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_notification_retention_sample.py +0 -0
  228. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_notification_sequence.py +0 -0
  229. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_notification_sequence_sample.py +0 -0
  230. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_oep_declarations.py +0 -0
  231. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_oep_smoke.py +0 -0
  232. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_outcome_sample.py +0 -0
  233. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_outcomes.py +0 -0
  234. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_pipeline.py +0 -0
  235. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_pipeline_sample.py +0 -0
  236. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_port_speed.py +0 -0
  237. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_port_speed_execution.py +0 -0
  238. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_port_speed_execution_sample.py +0 -0
  239. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_port_speed_lifecycle.py +0 -0
  240. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_port_speed_sample.py +0 -0
  241. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_probe_input.py +0 -0
  242. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_probe_input_sample.py +0 -0
  243. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_recovery.py +0 -0
  244. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_recovery_race_sample.py +0 -0
  245. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_recovery_races.py +0 -0
  246. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_recovery_sample.py +0 -0
  247. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_refusal_order.py +0 -0
  248. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_refusal_order_sample.py +0 -0
  249. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_registered_ops.py +0 -0
  250. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_replay_pressure.py +0 -0
  251. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_reset.py +0 -0
  252. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_reset_sample.py +0 -0
  253. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_resource_sample.py +0 -0
  254. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_resources.py +0 -0
  255. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_response_race.py +0 -0
  256. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_response_race_sample.py +0 -0
  257. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_restart.py +0 -0
  258. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_restart_sample.py +0 -0
  259. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retention.py +0 -0
  260. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retention_lifecycle.py +0 -0
  261. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retention_lifecycle_sample.py +0 -0
  262. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retention_sample.py +0 -0
  263. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retry.py +0 -0
  264. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_retry_sample.py +0 -0
  265. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_route_sample.py +0 -0
  266. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_routes.py +0 -0
  267. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_run.py +0 -0
  268. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_run_sample.py +0 -0
  269. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_scan.py +0 -0
  270. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_scan_options.py +0 -0
  271. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_scan_options_sample.py +0 -0
  272. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_scan_sample.py +0 -0
  273. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_selected_metadata.py +0 -0
  274. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_serial.py +0 -0
  275. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_session_loss.py +0 -0
  276. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_session_loss_sample.py +0 -0
  277. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_session_smoke.py +0 -0
  278. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_spi.py +0 -0
  279. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_spi_sample.py +0 -0
  280. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_step.py +0 -0
  281. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_step_sample.py +0 -0
  282. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_stream.py +0 -0
  283. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_stream_sample.py +0 -0
  284. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_subscription_sample.py +0 -0
  285. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_subscriptions.py +0 -0
  286. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_tcp.py +0 -0
  287. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_tcp_peers.py +0 -0
  288. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_tcp_recovery.py +0 -0
  289. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_tcp_recovery_sample.py +0 -0
  290. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_tlv_requests.py +0 -0
  291. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_uart.py +0 -0
  292. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_uart_sample.py +0 -0
  293. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_uart_stream.py +0 -0
  294. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_uart_stream_sample.py +0 -0
  295. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_usb.py +0 -0
  296. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_usb_cases.py +0 -0
  297. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_usb_model.py +0 -0
  298. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_wire_options.py +0 -0
  299. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_wire_options_sample.py +0 -0
  300. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_writer_lease.py +0 -0
  301. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/conformance_writer_lease_sample.py +0 -0
  302. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/console.py +0 -0
  303. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/core.py +0 -0
  304. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/decode.py +0 -0
  305. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/dump.py +0 -0
  306. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/endpoint.py +0 -0
  307. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/fixture.py +0 -0
  308. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/frames.py +0 -0
  309. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/hardware.py +0 -0
  310. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/hid_stream.py +0 -0
  311. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/host.py +0 -0
  312. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/interfaces.py +0 -0
  313. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/kept_session.py +0 -0
  314. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/linktest.py +0 -0
  315. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/message.py +0 -0
  316. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/names.py +0 -0
  317. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/probe_log.py +0 -0
  318. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/pytest_conformance.py +0 -0
  319. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/registry.py +0 -0
  320. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/riscv.py +0 -0
  321. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/rp2350.py +0 -0
  322. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/settings.py +0 -0
  323. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/speed_record.py +0 -0
  324. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/stimulus.py +0 -0
  325. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/targets.py +0 -0
  326. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/uiapduino.py +0 -0
  327. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/usb_stream.py +0 -0
  328. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_allocator_model.py +0 -0
  329. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_analog_model.py +0 -0
  330. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_arm_adi_model.py +0 -0
  331. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_attach_model.py +0 -0
  332. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench.py +0 -0
  333. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_capture.py +0 -0
  334. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_mdns.py +0 -0
  335. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_serial.py +0 -0
  336. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_trigger.py +0 -0
  337. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_bench_usb.py +0 -0
  338. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_block_model.py +0 -0
  339. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_capture_group_geometry_model.py +0 -0
  340. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_capture_group_model.py +0 -0
  341. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_capture_metadata_model.py +0 -0
  342. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_capture_timeline_model.py +0 -0
  343. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_clock_model.py +0 -0
  344. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_core.py +0 -0
  345. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_cut_model.py +0 -0
  346. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_data_model.py +0 -0
  347. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_debug_model.py +0 -0
  348. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_declaration_model.py +0 -0
  349. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_dependency_model.py +0 -0
  350. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_dmseq_model.py +0 -0
  351. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_dmseq_target_model.py +0 -0
  352. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_fixture_drive.py +0 -0
  353. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_fixture_metadata_model.py +0 -0
  354. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_gpio_lifecycle_model.py +0 -0
  355. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_gpio_model.py +0 -0
  356. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_i2c_model.py +0 -0
  357. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_link_routes_model.py +0 -0
  358. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_link_transfer_model.py +0 -0
  359. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_logic_model.py +0 -0
  360. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_mailbox_model.py +0 -0
  361. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_names.py +0 -0
  362. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_notification_model.py +0 -0
  363. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_oep_declaration_model.py +0 -0
  364. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_outcome_model.py +0 -0
  365. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_pipeline_model.py +0 -0
  366. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_port_speed_execution_model.py +0 -0
  367. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_port_speed_model.py +0 -0
  368. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_registered_ops_model.py +0 -0
  369. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_reset_model.py +0 -0
  370. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_resource_model.py +0 -0
  371. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_restart_model.py +0 -0
  372. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_retention_model.py +0 -0
  373. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_retry_model.py +0 -0
  374. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_route_model.py +0 -0
  375. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_run_model.py +0 -0
  376. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_scan_model.py +0 -0
  377. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_scan_options_model.py +0 -0
  378. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_selected_metadata_model.py +0 -0
  379. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_spi_model.py +0 -0
  380. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_step_model.py +0 -0
  381. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_stream_model.py +0 -0
  382. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_tlv_request_model.py +0 -0
  383. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_uart_model.py +0 -0
  384. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_wire_options_model.py +0 -0
  385. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/src/oep_client/virtual_writer_lease_model.py +0 -0
  386. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/conftest.py +0 -0
  387. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/equipment/.env.example +0 -0
  388. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/equipment/test_core_contract.py +0 -0
  389. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/equipment/test_preflight.py +0 -0
  390. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/fixtures/hardware.virtual.toml +0 -0
  391. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/.env.example +0 -0
  392. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/.env.virtual.example +0 -0
  393. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/__init__.py +0 -0
  394. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/conftest.py +0 -0
  395. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/firmware.py +0 -0
  396. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/flash.py +0 -0
  397. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/hardware.example.toml +0 -0
  398. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/hardware.resolved.example.toml +0 -0
  399. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/record.py +0 -0
  400. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/results/.gitignore +0 -0
  401. {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
  402. {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
  403. {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
  404. {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
  405. {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
  406. {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
  407. {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
  408. {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
  409. {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
  410. {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
  411. {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
  412. {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
  413. {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
  414. {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
  415. {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
  416. {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
  417. {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
  418. {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
  419. {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
  420. {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
  421. {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
  422. {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
  423. {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
  424. {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
  425. {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
  426. {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
  427. {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
  428. {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
  429. {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
  430. {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
  431. {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
  432. {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
  433. {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
  434. {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
  435. {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
  436. {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
  437. {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
  438. {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
  439. {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
  440. {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
  441. {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
  442. {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
  443. {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
  444. {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
  445. {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
  446. {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
  447. {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
  448. {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
  449. {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
  450. {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
  451. {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
  452. {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
  453. {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
  454. {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
  455. {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
  456. {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
  457. {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
  458. {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
  459. {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
  460. {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
  461. {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
  462. {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
  463. {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
  464. {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
  465. {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
  466. {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
  467. {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
  468. {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
  469. {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
  470. {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
  471. {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
  472. {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
  473. {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
  474. {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
  475. {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
  476. {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
  477. {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
  478. {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
  479. {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
  480. {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
  481. {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
  482. {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
  483. {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
  484. {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
  485. {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
  486. {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
  487. {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
  488. {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
  489. {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
  490. {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
  491. {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
  492. {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
  493. {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
  494. {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
  495. {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
  496. {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
  497. {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
  498. {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
  499. {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
  500. {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
  501. {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
  502. {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
  503. {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
  504. {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
  505. {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
  506. {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
  507. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/hw/test_harness.py +0 -0
  508. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/spec/oep-v1.toml +0 -0
  509. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/spec_names.py +0 -0
  510. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_capabilities.py +0 -0
  511. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_capture.py +0 -0
  512. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_capture_blocks.py +0 -0
  513. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_cobs.py +0 -0
  514. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance.py +0 -0
  515. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_allocator.py +0 -0
  516. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_analog.py +0 -0
  517. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_analog_payload.py +0 -0
  518. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_arm_adi.py +0 -0
  519. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_arm_adi_blocks.py +0 -0
  520. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_attach.py +0 -0
  521. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_blocks.py +0 -0
  522. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_group.py +0 -0
  523. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_group_geometry.py +0 -0
  524. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_metadata.py +0 -0
  525. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_serial.py +0 -0
  526. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_timeline.py +0 -0
  527. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_capture_timeline_lifecycle.py +0 -0
  528. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_clock.py +0 -0
  529. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_core_fixed_fields.py +0 -0
  530. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_core_smoke.py +0 -0
  531. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_corr.py +0 -0
  532. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_cut.py +0 -0
  533. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_data.py +0 -0
  534. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_debug.py +0 -0
  535. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_dependencies.py +0 -0
  536. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_discovery.py +0 -0
  537. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_dmseq.py +0 -0
  538. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_dmseq_target.py +0 -0
  539. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_execution_order.py +0 -0
  540. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_exhausted.py +0 -0
  541. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_fixture_metadata.py +0 -0
  542. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_gpio.py +0 -0
  543. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_gpio_lifecycle.py +0 -0
  544. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_core.py +0 -0
  545. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_critical_calls.py +0 -0
  546. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_deadline.py +0 -0
  547. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_notifications.py +0 -0
  548. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_requests.py +0 -0
  549. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_resend.py +0 -0
  550. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_tlv.py +0 -0
  551. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_values.py +0 -0
  552. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_host_wait.py +0 -0
  553. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_i2c.py +0 -0
  554. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_interface_smoke.py +0 -0
  555. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_interfaces.py +0 -0
  556. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_lease.py +0 -0
  557. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_link_routes.py +0 -0
  558. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_link_transfers.py +0 -0
  559. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_logic.py +0 -0
  560. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_mailbox.py +0 -0
  561. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_notification_output.py +0 -0
  562. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_notification_retention.py +0 -0
  563. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_notification_sequence.py +0 -0
  564. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_oep_declarations.py +0 -0
  565. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_oep_smoke.py +0 -0
  566. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_outcomes.py +0 -0
  567. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_pipeline.py +0 -0
  568. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_port_speed.py +0 -0
  569. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_port_speed_execution.py +0 -0
  570. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_port_speed_lifecycle.py +0 -0
  571. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_probe_input.py +0 -0
  572. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_reconnect.py +0 -0
  573. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_recovery.py +0 -0
  574. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_recovery_races.py +0 -0
  575. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_refusal_order.py +0 -0
  576. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_registered_ops.py +0 -0
  577. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_replay_pressure.py +0 -0
  578. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_replay_records_optional.py +0 -0
  579. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_reset.py +0 -0
  580. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_resources.py +0 -0
  581. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_response_race.py +0 -0
  582. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_restart.py +0 -0
  583. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_retention.py +0 -0
  584. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_retention_lifecycle.py +0 -0
  585. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_retry.py +0 -0
  586. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_routes.py +0 -0
  587. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_run.py +0 -0
  588. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_scan.py +0 -0
  589. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_scan_options.py +0 -0
  590. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_selected_metadata.py +0 -0
  591. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_serial.py +0 -0
  592. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_session_loss.py +0 -0
  593. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_session_smoke.py +0 -0
  594. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_spec_guard.py +0 -0
  595. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_spi.py +0 -0
  596. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_step.py +0 -0
  597. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_stream.py +0 -0
  598. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_subscriptions.py +0 -0
  599. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_tcp.py +0 -0
  600. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_tcp_peers.py +0 -0
  601. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_tcp_recovery.py +0 -0
  602. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_tlv_requests.py +0 -0
  603. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_uart.py +0 -0
  604. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_uart_stream.py +0 -0
  605. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_usb.py +0 -0
  606. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_wire_options.py +0 -0
  607. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_conformance_writer_lease.py +0 -0
  608. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_console_queue_and_reset_settle.py +0 -0
  609. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_debug_attach.py +0 -0
  610. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_extension_patterns.py +0 -0
  611. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_fixture_controllers.py +0 -0
  612. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_fixture_out.py +0 -0
  613. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_fixture_targets.py +0 -0
  614. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_flash_console.py +0 -0
  615. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_gpio_drive_and_serve_options.py +0 -0
  616. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_hardware.py +0 -0
  617. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_hid_stream.py +0 -0
  618. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_host_boot_lifecycle.py +0 -0
  619. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_host_rules_2026_10_06.py +0 -0
  620. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_host_wait_bound.py +0 -0
  621. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_interfaces.py +0 -0
  622. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_link_drop.py +0 -0
  623. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_link_host.py +0 -0
  624. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_linktest.py +0 -0
  625. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_literals.py +0 -0
  626. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_minimal_ops.py +0 -0
  627. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_no_resume.py +0 -0
  628. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_passthrough.py +0 -0
  629. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_plan.py +0 -0
  630. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_port_speed.py +0 -0
  631. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_probe_log.py +0 -0
  632. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_request_tails.py +0 -0
  633. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_restart.py +0 -0
  634. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_resubscribe_after_reopen.py +0 -0
  635. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review4_capture.py +0 -0
  636. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review4_debug.py +0 -0
  637. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review4_small.py +0 -0
  638. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_capture.py +0 -0
  639. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_core_a.py +0 -0
  640. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_core_b.py +0 -0
  641. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_debug_targets.py +0 -0
  642. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_debug_wires.py +0 -0
  643. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review5_small.py +0 -0
  644. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_capture_console.py +0 -0
  645. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_core_early.py +0 -0
  646. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_core_late.py +0 -0
  647. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_debug_a.py +0 -0
  648. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_debug_b.py +0 -0
  649. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review6_rest.py +0 -0
  650. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review7_exact_payload.py +0 -0
  651. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review7_host_recovery.py +0 -0
  652. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review7_request_validation.py +0 -0
  653. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review7_state_resources.py +0 -0
  654. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review7_tlv_readers.py +0 -0
  655. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review8_core_1.py +0 -0
  656. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review8_core_2.py +0 -0
  657. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_review8_debug.py +0 -0
  658. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_rvswd_rest.py +0 -0
  659. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_session.py +0 -0
  660. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_settings.py +0 -0
  661. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_spec_283e5b5.py +0 -0
  662. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_spec_2c6d18d.py +0 -0
  663. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_spec_3cc50c8.py +0 -0
  664. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_spec_sections.py +0 -0
  665. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_spec_vectors.py +0 -0
  666. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_stimulus.py +0 -0
  667. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_target_parts.py +0 -0
  668. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_capture.py +0 -0
  669. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_common.py +0 -0
  670. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_console.py +0 -0
  671. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_core_names.py +0 -0
  672. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_debug.py +0 -0
  673. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_fixture.py +0 -0
  674. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_fixture_drive.py +0 -0
  675. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_link.py +0 -0
  676. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_plan.py +0 -0
  677. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_trace_restart.py +0 -0
  678. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_usb_stream.py +0 -0
  679. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_analog_roles.py +0 -0
  680. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture.py +0 -0
  681. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_changing_trigger.py +0 -0
  682. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_channel_time.py +0 -0
  683. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_format_2.py +0 -0
  684. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_formats.py +0 -0
  685. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_initial_trigger_time.py +0 -0
  686. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_lifetime.py +0 -0
  687. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_notifications.py +0 -0
  688. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_one_shot_time.py +0 -0
  689. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_options.py +0 -0
  690. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_pretrigger.py +0 -0
  691. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_query.py +0 -0
  692. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_rates.py +0 -0
  693. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_requests.py +0 -0
  694. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_resume_calibration.py +0 -0
  695. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_trigger_modes.py +0 -0
  696. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_trigger_source.py +0 -0
  697. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_trigger_source_more.py +0 -0
  698. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_capture_waiting.py +0 -0
  699. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_pin_constraints.py +0 -0
  700. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_rules_2026_10_02.py +0 -0
  701. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_rules_2026_10_06.py +0 -0
  702. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_serve_tcp_connections.py +0 -0
  703. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_spec.py +0 -0
  704. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_bench_targets.py +0 -0
  705. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_core.py +0 -0
  706. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_virtual_core_bool.py +0 -0
  707. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/test_wire_hold.py +0 -0
  708. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/SPEC_COMMIT +0 -0
  709. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/SPEC_SHA256 +0 -0
  710. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/capture_formats.json +0 -0
  711. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/checks.json +0 -0
  712. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/cobs.json +0 -0
  713. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/confirm.json +0 -0
  714. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/core_extensions.json +0 -0
  715. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/core_lifecycle.json +0 -0
  716. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/core_policy.json +0 -0
  717. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/discovery.json +0 -0
  718. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/headers.json +0 -0
  719. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/interface_boundaries.json +0 -0
  720. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/interface_profiles.json +0 -0
  721. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/logic_layout.json +0 -0
  722. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/ops.json +0 -0
  723. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/ops_encoding.json +0 -0
  724. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/refusals.json +0 -0
  725. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/sessions.json +0 -0
  726. {oep_client_python-0.0.40 → oep_client_python-0.0.41}/tests/vectors/settings_file.json +0 -0
  727. {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.40
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
- # a serial port (always COBS), "tcp://127.0.0.1:PORT" (a broker), "usb:<unit id>" (the device whose USB serial it is;
104
- # describe's unit_id must match), "usb" (every device on the project's VID:PID 1209:4F45, each counted once: exactly
105
- # one -> vendor, then HID, else its CDC port; several -> link.SeveralProbes lists them, name one) /
106
- # "usb:VID:PID[:SERIAL]" (vendor, then HID). Each is probed first with a
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 a serial port, `tcp://HOST:PORT`, `tcp://HOST` (the port DNS-SD finds for that host), `tcp:UNIT_ID` (the
154
- probe DNS-SD finds by its TXT unit_id; describe's unit_id must say the same, else it is closed) or
155
- `usb[:VID:PID[:SERIAL]]`. A change takes the lock (owner "oep settings") and
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 `tcp:UNIT_ID`) verifies the same way and passes over an instance it cannot verify;
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
- - `tcp:UNIT_ID` opens the probe DNS-SD finds by that unit_id and checks describe's (UnitIdMismatch, closed, otherwise);
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 `tcp:UNIT_ID` (both engines) - with in-process responders announcing a non-OEP
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
- # a serial port (always COBS), "tcp://127.0.0.1:PORT" (a broker), "usb:<unit id>" (the device whose USB serial it is;
73
- # describe's unit_id must match), "usb" (every device on the project's VID:PID 1209:4F45, each counted once: exactly
74
- # one -> vendor, then HID, else its CDC port; several -> link.SeveralProbes lists them, name one) /
75
- # "usb:VID:PID[:SERIAL]" (vendor, then HID). Each is probed first with a
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>` はシリアルの口、`tcp://HOST:PORT`、`tcp://HOST`(その host に DNS-SD が見つけた port)、`tcp:UNIT_ID`(TXT の unit_id で
122
- DNS-SD が見つけた probe。describe の unit_id が同じでなければ閉じる)、`usb[:VID:PID[:SERIAL]]`。変更はロックを取り(owner "oep settings")、終わったら
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`(つまり `tcp:UNIT_ID`)も
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
- - `tcp:UNIT_ID` はその unit_id で DNS-SD が見つけた probe を開き、describe の unit_id を確かめる(違えば UnitIdMismatch で閉じる)。
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`、`tcp:UNIT_ID`(両方の engine)で試す(同じ process の responder が、OEP でない TCP の
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
- # a serial port (always COBS), "tcp://127.0.0.1:PORT" (a broker), "usb:<unit id>" (the device whose USB serial it is;
79
- # describe's unit_id must match), "usb" (every device on the project's VID:PID 1209:4F45, each counted once: exactly
80
- # one -> vendor, then HID, else its CDC port; several -> link.SeveralProbes lists them, name one) /
81
- # "usb:VID:PID[:SERIAL]" (vendor, then HID). Each is probed first with a
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 a serial port, `tcp://HOST:PORT`, `tcp://HOST` (the port DNS-SD finds for that host), `tcp:UNIT_ID` (the
129
- probe DNS-SD finds by its TXT unit_id; describe's unit_id must say the same, else it is closed) or
130
- `usb[:VID:PID[:SERIAL]]`. A change takes the lock (owner "oep settings") and
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 `tcp:UNIT_ID`) verifies the same way and passes over an instance it cannot verify;
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
- - `tcp:UNIT_ID` opens the probe DNS-SD finds by that unit_id and checks describe's (UnitIdMismatch, closed, otherwise);
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 `tcp:UNIT_ID` (both engines) - with in-process responders announcing a non-OEP
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)、[probe config](https://github.com/Open-Embedded-Probe/oep-spec/blob/main/interfaces/oep-if-probe-config.ja.md)。規範の正本は oep-spec に置き、この方針では新しい通信規則を定義しない。
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)、[Config](https://github.com/Open-Embedded-Probe/oep-probe-arduino/blob/main/src/OepConfig.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)。
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.40"
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"
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.0.40"
5
+ __version__ = "0.0.41"
@@ -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>: a serial port, tcp://HOST[:PORT] (no port: the one DNS-SD finds), tcp:UNIT_ID (found by DNS-SD) or
24
- usb[:VID:PID[:SERIAL]]. A change takes the lock (owner "oep settings") and
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("usb:")) \
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[:VID:PID]")
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[:VID:PID[:SERIAL]]")
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[:VID:PID[:SERIAL]]")
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[:VID:PID[:SERIAL]]")
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[:VID:PID] (lock-free reads only)")
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")