oep-client-python 0.0.45__tar.gz → 0.0.47__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.45 → oep_client_python-0.0.47}/CHANGELOG.md +24 -0
  2. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/PKG-INFO +1 -1
  3. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/pyproject.toml +2 -2
  4. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/__init__.py +1 -1
  5. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/acquire.py +85 -33
  6. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/__init__.py +1 -1
  7. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_serial.py +1 -1
  8. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/core_smoke.py +1 -1
  9. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_core.py +1 -1
  10. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_deadline.py +1 -1
  11. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_requests.py +4 -4
  12. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_wait.py +1 -1
  13. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/oep_smoke.py +1 -1
  14. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/fixture.py +8 -2
  15. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/interfaces.py +1 -1
  16. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/memo.py +1 -1
  17. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/registry.py +1 -1
  18. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/virtual_fixture_drive.py +2 -2
  19. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/spec/DOCS_SHA256 +4 -4
  20. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/spec/oep-v1.toml +1 -1
  21. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_acquire.py +33 -4
  22. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_memo.py +1 -1
  23. oep_client_python-0.0.47/tests/vectors/SPEC_COMMIT +1 -0
  24. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/SPEC_SHA256 +4 -4
  25. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/capture_formats.json +1 -1
  26. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/ops.json +2 -2
  27. oep_client_python-0.0.45/tests/vectors/SPEC_COMMIT +0 -1
  28. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/.gitignore +0 -0
  29. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/LICENSE +0 -0
  30. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/README.ja.md +0 -0
  31. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/README.md +0 -0
  32. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/README.ja.md +0 -0
  33. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/allocator-conformance.ja.md +0 -0
  34. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/analog-conformance.ja.md +0 -0
  35. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/analog-payload-conformance.ja.md +0 -0
  36. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/arm-adi-conformance.ja.md +0 -0
  37. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/attach-conformance.ja.md +0 -0
  38. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/block-conformance.ja.md +0 -0
  39. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/capture-group-conformance.ja.md +0 -0
  40. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/capture-group-geometry-conformance.ja.md +0 -0
  41. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/capture-metadata-conformance.ja.md +0 -0
  42. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/capture-serial-conformance.ja.md +0 -0
  43. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/capture-timeline-conformance.ja.md +0 -0
  44. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/capture-timeline-lifecycle-conformance.ja.md +0 -0
  45. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/clock-conformance.ja.md +0 -0
  46. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/config-conformance.ja.md +0 -0
  47. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/config-execution-conformance.ja.md +0 -0
  48. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/config-fallback-conformance.ja.md +0 -0
  49. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/config-paging-conformance.ja.md +0 -0
  50. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/config-power-loss-conformance.ja.md +0 -0
  51. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/config-storage-conformance.ja.md +0 -0
  52. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/conformance-checks.ja.md +0 -0
  53. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/conformance-spec-compatibility.ja.md +0 -0
  54. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/core-fixed-fields-review.ja.md +0 -0
  55. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/core-smoke-conformance.ja.md +0 -0
  56. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/corr-conformance.ja.md +0 -0
  57. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/cut-conformance.ja.md +0 -0
  58. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/data-conformance.ja.md +0 -0
  59. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/debug-conformance.ja.md +0 -0
  60. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/dependency-conformance.ja.md +0 -0
  61. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/discovery-conformance.ja.md +0 -0
  62. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/dmseq-conformance.ja.md +0 -0
  63. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/dmseq-target-conformance.ja.md +0 -0
  64. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/execution-order-conformance.ja.md +0 -0
  65. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/exhausted-conformance.ja.md +0 -0
  66. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/fixture-metadata-conformance.ja.md +0 -0
  67. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/gpio-conformance.ja.md +0 -0
  68. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/gpio-lifecycle-conformance.ja.md +0 -0
  69. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/hardware-configuration.ja.md +0 -0
  70. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/hardware-quickstart.ja.md +0 -0
  71. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/hardware-schema.ja.md +0 -0
  72. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/host-core-shapes-conformance.ja.md +0 -0
  73. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/host-deadline-conformance.ja.md +0 -0
  74. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/host-notification-conformance.ja.md +0 -0
  75. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/host-request-conformance.ja.md +0 -0
  76. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/host-resend-conformance.ja.md +0 -0
  77. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/host-tlv-conformance.ja.md +0 -0
  78. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/host-value-conformance.ja.md +0 -0
  79. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/host-wait-conformance.ja.md +0 -0
  80. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/i2c-conformance.ja.md +0 -0
  81. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/interface-conformance.ja.md +0 -0
  82. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/interface-smoke-conformance.ja.md +0 -0
  83. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/lease-conformance.ja.md +0 -0
  84. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/link-routes-conformance.ja.md +0 -0
  85. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/link-transfer-conformance.ja.md +0 -0
  86. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/logic-conformance.ja.md +0 -0
  87. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/mailbox-conformance.ja.md +0 -0
  88. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/notification-output-sample.ja.md +0 -0
  89. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/notification-retention-conformance.ja.md +0 -0
  90. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/notification-sequence-conformance.ja.md +0 -0
  91. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/oep-declaration-conformance.ja.md +0 -0
  92. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/oep-example-smoke-conformance.ja.md +0 -0
  93. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/outcome-conformance.ja.md +0 -0
  94. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/pin-constraints-conformance.ja.md +0 -0
  95. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/pipeline-conformance.ja.md +0 -0
  96. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/port-speed-conformance.ja.md +0 -0
  97. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/probe-input-conformance.ja.md +0 -0
  98. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/recovery-conformance.ja.md +0 -0
  99. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/recovery-races-conformance.ja.md +0 -0
  100. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/refusal-order-conformance.ja.md +0 -0
  101. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/registered-ops-conformance.ja.md +0 -0
  102. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/replay-pressure-conformance.ja.md +0 -0
  103. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/reset-conformance.ja.md +0 -0
  104. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/resource-conformance.ja.md +0 -0
  105. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/response-race-conformance.ja.md +0 -0
  106. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/restart-conformance.ja.md +0 -0
  107. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/retention-conformance.ja.md +0 -0
  108. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/retention-lifecycle-conformance.ja.md +0 -0
  109. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/retry-conformance.ja.md +0 -0
  110. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/route-conformance.ja.md +0 -0
  111. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/run-conformance.ja.md +0 -0
  112. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/scan-conformance.ja.md +0 -0
  113. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/scan-options-conformance.ja.md +0 -0
  114. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/selected-metadata-conformance.ja.md +0 -0
  115. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/session-loss-conformance.ja.md +0 -0
  116. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/session-smoke-conformance.ja.md +0 -0
  117. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/spec-follow-notes.ja.md +0 -0
  118. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/spi-conformance.ja.md +0 -0
  119. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/step-conformance.ja.md +0 -0
  120. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/stream-conformance.ja.md +0 -0
  121. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/subscription-conformance.ja.md +0 -0
  122. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/tcp-recovery-conformance.ja.md +0 -0
  123. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/testing-consumers.ja.md +0 -0
  124. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/testing-policy.ja.md +0 -0
  125. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/tlv-request-conformance.ja.md +0 -0
  126. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/trace/README.ja.md +0 -0
  127. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/trace/capture.json +0 -0
  128. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/trace/common.json +0 -0
  129. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/trace/console.json +0 -0
  130. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/trace/core.json +0 -0
  131. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/trace/debug.json +0 -0
  132. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/trace/fixture.json +0 -0
  133. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/trace/link.json +0 -0
  134. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/trace/plan.json +0 -0
  135. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/trace/restart.json +0 -0
  136. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/trace/transports.json +0 -0
  137. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/uart-conformance.ja.md +0 -0
  138. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/uart-stream-conformance.ja.md +0 -0
  139. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/usb-conformance.ja.md +0 -0
  140. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/wire-options-conformance.ja.md +0 -0
  141. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/docs/writer-lease-conformance.ja.md +0 -0
  142. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/__main__.py +0 -0
  143. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/arm.py +0 -0
  144. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/capture.py +0 -0
  145. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/capture_blocks.py +0 -0
  146. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/catalog.py +0 -0
  147. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/ch32_flash.py +0 -0
  148. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/cobs.py +0 -0
  149. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/allocator.py +0 -0
  150. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/allocator_model.py +0 -0
  151. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/allocator_sample.py +0 -0
  152. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/analog.py +0 -0
  153. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/analog_model.py +0 -0
  154. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/analog_payload.py +0 -0
  155. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/analog_sample.py +0 -0
  156. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/arm_adi.py +0 -0
  157. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/arm_adi_blocks.py +0 -0
  158. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/arm_adi_model.py +0 -0
  159. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/arm_adi_sample.py +0 -0
  160. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/attach.py +0 -0
  161. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/attach_model.py +0 -0
  162. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/attach_sample.py +0 -0
  163. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/block_model.py +0 -0
  164. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/block_sample.py +0 -0
  165. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/blocks.py +0 -0
  166. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_group.py +0 -0
  167. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_group_geometry.py +0 -0
  168. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_group_geometry_model.py +0 -0
  169. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_group_model.py +0 -0
  170. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_group_sample.py +0 -0
  171. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_metadata.py +0 -0
  172. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_metadata_model.py +0 -0
  173. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_serial_sample.py +0 -0
  174. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_timeline.py +0 -0
  175. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_timeline_lifecycle.py +0 -0
  176. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_timeline_model.py +0 -0
  177. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/capture_timeline_sample.py +0 -0
  178. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/clock.py +0 -0
  179. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/clock_model.py +0 -0
  180. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/clock_sample.py +0 -0
  181. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/core_fixed_fields.py +0 -0
  182. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/corr.py +0 -0
  183. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/cut.py +0 -0
  184. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/cut_model.py +0 -0
  185. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/cut_sample.py +0 -0
  186. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/data.py +0 -0
  187. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/data_model.py +0 -0
  188. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/data_sample.py +0 -0
  189. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/debug.py +0 -0
  190. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/debug_model.py +0 -0
  191. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/debug_sample.py +0 -0
  192. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/declaration_model.py +0 -0
  193. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/dependencies.py +0 -0
  194. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/dependency_model.py +0 -0
  195. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/dependency_sample.py +0 -0
  196. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/discovery.py +0 -0
  197. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/dmseq.py +0 -0
  198. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/dmseq_model.py +0 -0
  199. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/dmseq_sample.py +0 -0
  200. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/dmseq_target.py +0 -0
  201. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/dmseq_target_model.py +0 -0
  202. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/dmseq_target_sample.py +0 -0
  203. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/execution_order.py +0 -0
  204. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/execution_order_sample.py +0 -0
  205. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/exhausted.py +0 -0
  206. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/exhausted_sample.py +0 -0
  207. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/fixture_metadata.py +0 -0
  208. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/fixture_metadata_model.py +0 -0
  209. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/force_hw.py +0 -0
  210. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/gpio.py +0 -0
  211. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/gpio_lifecycle.py +0 -0
  212. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/gpio_lifecycle_model.py +0 -0
  213. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/gpio_lifecycle_sample.py +0 -0
  214. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/gpio_model.py +0 -0
  215. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/gpio_sample.py +0 -0
  216. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_core_sample.py +0 -0
  217. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_deadline_sample.py +0 -0
  218. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_notifications.py +0 -0
  219. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_notifications_sample.py +0 -0
  220. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_request_sample.py +0 -0
  221. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_resend.py +0 -0
  222. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_resend_sample.py +0 -0
  223. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_tlv.py +0 -0
  224. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_tlv_sample.py +0 -0
  225. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_values.py +0 -0
  226. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_values_sample.py +0 -0
  227. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/host_wait_sample.py +0 -0
  228. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/i2c.py +0 -0
  229. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/i2c_model.py +0 -0
  230. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/i2c_sample.py +0 -0
  231. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/interface_smoke.py +0 -0
  232. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/interfaces.py +0 -0
  233. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/lease.py +0 -0
  234. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/lease_sample.py +0 -0
  235. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/link_routes.py +0 -0
  236. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/link_routes_model.py +0 -0
  237. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/link_routes_sample.py +0 -0
  238. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/link_transfer_model.py +0 -0
  239. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/link_transfer_sample.py +0 -0
  240. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/link_transfers.py +0 -0
  241. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/logic.py +0 -0
  242. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/logic_model.py +0 -0
  243. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/logic_sample.py +0 -0
  244. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/mailbox.py +0 -0
  245. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/mailbox_model.py +0 -0
  246. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/mailbox_sample.py +0 -0
  247. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/notification_model.py +0 -0
  248. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/notification_retention.py +0 -0
  249. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/notification_retention_sample.py +0 -0
  250. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/notification_sequence.py +0 -0
  251. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/notification_sequence_sample.py +0 -0
  252. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/notify_hw.py +0 -0
  253. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/oep_declaration_model.py +0 -0
  254. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/oep_declarations.py +0 -0
  255. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/outcome_model.py +0 -0
  256. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/outcome_sample.py +0 -0
  257. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/outcomes.py +0 -0
  258. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/pipeline.py +0 -0
  259. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/pipeline_model.py +0 -0
  260. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/pipeline_sample.py +0 -0
  261. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/port_speed.py +0 -0
  262. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/port_speed_execution.py +0 -0
  263. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/port_speed_execution_model.py +0 -0
  264. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/port_speed_execution_sample.py +0 -0
  265. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/port_speed_lifecycle.py +0 -0
  266. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/port_speed_model.py +0 -0
  267. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/port_speed_sample.py +0 -0
  268. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/probe_input.py +0 -0
  269. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/probe_input_sample.py +0 -0
  270. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/recovery.py +0 -0
  271. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/recovery_race_sample.py +0 -0
  272. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/recovery_races.py +0 -0
  273. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/recovery_sample.py +0 -0
  274. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/refusal_order.py +0 -0
  275. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/refusal_order_sample.py +0 -0
  276. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/registered_ops.py +0 -0
  277. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/registered_ops_model.py +0 -0
  278. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/release_hw.py +0 -0
  279. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/replay_pressure.py +0 -0
  280. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/reset.py +0 -0
  281. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/reset_model.py +0 -0
  282. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/reset_sample.py +0 -0
  283. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/resource_model.py +0 -0
  284. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/resource_sample.py +0 -0
  285. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/resources.py +0 -0
  286. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/response_race.py +0 -0
  287. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/response_race_sample.py +0 -0
  288. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/restart.py +0 -0
  289. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/restart_model.py +0 -0
  290. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/restart_sample.py +0 -0
  291. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/retention.py +0 -0
  292. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/retention_lifecycle.py +0 -0
  293. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/retention_lifecycle_sample.py +0 -0
  294. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/retention_model.py +0 -0
  295. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/retention_sample.py +0 -0
  296. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/retry.py +0 -0
  297. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/retry_model.py +0 -0
  298. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/retry_sample.py +0 -0
  299. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/route_model.py +0 -0
  300. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/route_sample.py +0 -0
  301. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/routes.py +0 -0
  302. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/run.py +0 -0
  303. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/run_model.py +0 -0
  304. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/run_sample.py +0 -0
  305. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/scan.py +0 -0
  306. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/scan_model.py +0 -0
  307. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/scan_options.py +0 -0
  308. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/scan_options_model.py +0 -0
  309. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/scan_options_sample.py +0 -0
  310. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/scan_sample.py +0 -0
  311. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/selected_metadata.py +0 -0
  312. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/selected_metadata_model.py +0 -0
  313. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/serial.py +0 -0
  314. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/session_loss.py +0 -0
  315. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/session_loss_sample.py +0 -0
  316. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/session_smoke.py +0 -0
  317. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/spi.py +0 -0
  318. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/spi_model.py +0 -0
  319. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/spi_sample.py +0 -0
  320. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/step.py +0 -0
  321. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/step_model.py +0 -0
  322. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/step_sample.py +0 -0
  323. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/stream.py +0 -0
  324. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/stream_model.py +0 -0
  325. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/stream_sample.py +0 -0
  326. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/subscription_sample.py +0 -0
  327. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/subscriptions.py +0 -0
  328. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/tcp.py +0 -0
  329. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/tcp_peers.py +0 -0
  330. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/tcp_recovery.py +0 -0
  331. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/tcp_recovery_sample.py +0 -0
  332. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/tlv_request_model.py +0 -0
  333. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/tlv_requests.py +0 -0
  334. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/uart.py +0 -0
  335. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/uart_model.py +0 -0
  336. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/uart_sample.py +0 -0
  337. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/uart_stream.py +0 -0
  338. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/uart_stream_sample.py +0 -0
  339. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/usb.py +0 -0
  340. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/usb_cases.py +0 -0
  341. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/usb_hw.py +0 -0
  342. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/usb_model.py +0 -0
  343. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/wire_options.py +0 -0
  344. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/wire_options_model.py +0 -0
  345. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/wire_options_sample.py +0 -0
  346. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/writer_lease.py +0 -0
  347. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/writer_lease_model.py +0 -0
  348. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/conformance/writer_lease_sample.py +0 -0
  349. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/console.py +0 -0
  350. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/core.py +0 -0
  351. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/decode.py +0 -0
  352. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/discovery.py +0 -0
  353. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/dump.py +0 -0
  354. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/endpoint.py +0 -0
  355. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/frames.py +0 -0
  356. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/hardware.py +0 -0
  357. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/hid_stream.py +0 -0
  358. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/host.py +0 -0
  359. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/kept_session.py +0 -0
  360. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/link.py +0 -0
  361. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/linktest.py +0 -0
  362. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/message.py +0 -0
  363. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/names.py +0 -0
  364. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/pins.py +0 -0
  365. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/probe_log.py +0 -0
  366. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/pytest_conformance.py +0 -0
  367. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/riscv.py +0 -0
  368. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/rp2350.py +0 -0
  369. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/settings.py +0 -0
  370. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/speed_record.py +0 -0
  371. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/stimulus.py +0 -0
  372. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/targets.py +0 -0
  373. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/uiapduino.py +0 -0
  374. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/usb_stream.py +0 -0
  375. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/virtual_bench.py +0 -0
  376. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/virtual_bench_capture.py +0 -0
  377. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/virtual_bench_mdns.py +0 -0
  378. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/virtual_bench_serial.py +0 -0
  379. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/virtual_bench_serve.py +0 -0
  380. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/virtual_bench_trigger.py +0 -0
  381. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/virtual_bench_usb.py +0 -0
  382. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/virtual_core.py +0 -0
  383. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/src/oep_client/virtual_names.py +0 -0
  384. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/conftest.py +0 -0
  385. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/equipment/.env.example +0 -0
  386. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/equipment/test_core_contract.py +0 -0
  387. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/equipment/test_preflight.py +0 -0
  388. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/fixtures/hardware.virtual.toml +0 -0
  389. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/.env.example +0 -0
  390. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/.env.virtual.example +0 -0
  391. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/README.ja.md +0 -0
  392. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/README.md +0 -0
  393. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/__init__.py +0 -0
  394. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/boards.py +0 -0
  395. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/conftest.py +0 -0
  396. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/firmware.py +0 -0
  397. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/flash.py +0 -0
  398. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/hardware.example.toml +0 -0
  399. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/hardware.resolved.example.toml +0 -0
  400. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/record.py +0 -0
  401. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/.gitignore +0 -0
  402. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.26+5bafb92-0.0.26.json +0 -0
  403. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.26+654b06a-0.0.26.json +0 -0
  404. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.27+ec1df99-0.0.27.json +0 -0
  405. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32+1491c13-0.0.31-20261016T133559.json +0 -0
  406. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32+672bf7b-0.0.32-20261016T164655.json +0 -0
  407. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131458.json +0 -0
  408. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131510.json +0 -0
  409. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131526.json +0 -0
  410. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131532.json +0 -0
  411. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131656.json +0 -0
  412. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131703.json +0 -0
  413. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131708.json +0 -0
  414. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132050.json +0 -0
  415. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132057.json +0 -0
  416. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132104.json +0 -0
  417. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T160307.json +0 -0
  418. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T161655.json +0 -0
  419. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.37+1031feb-0.0.37-20261023T214002.json +0 -0
  420. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.38+7c158ff-0.0.38-20261027T081156.json +0 -0
  421. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.39+1ad47c7-0.0.39-20261027T182907.json +0 -0
  422. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.39+2c0c41f-0.0.39-20261027T174907.json +0 -0
  423. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.39+9317805-0.0.39-20261027T191153.json +0 -0
  424. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.39+a75fd45-0.0.39-20261027T205055.json +0 -0
  425. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201038.json +0 -0
  426. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201057.json +0 -0
  427. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201058.json +0 -0
  428. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201059.json +0 -0
  429. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896__crash_at_2106_s_-0.0.39-20261027T204608.json +0 -0
  430. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T190815.json +0 -0
  431. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T191854.json +0 -0
  432. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181116.json +0 -0
  433. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181812.json +0 -0
  434. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T182903.json +0 -0
  435. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.39+62463f2-0.0.39-20261029T145541.json +0 -0
  436. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.39+9317805-0.0.39-20261027T191150.json +0 -0
  437. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.39+a75fd45-0.0.39-20261028T190803.json +0 -0
  438. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T191727.json +0 -0
  439. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T204611.json +0 -0
  440. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191811.json +0 -0
  441. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191849.json +0 -0
  442. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.44+34c0b0b-0.0.44-20261104T190820.json +0 -0
  443. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-0.0.44+34c0b0b-0.0.44-20261104T190903.json +0 -0
  444. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/e8f60ae84e28-unknown-0.0.44-20261104T190857.json +0 -0
  445. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+4fad559-0.0.26.json +0 -0
  446. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+5bafb92-0.0.26.json +0 -0
  447. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+1491c13-0.0.31-20261016T133501.json +0 -0
  448. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+672bf7b-0.0.32-20261016T164559.json +0 -0
  449. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T130922.json +0 -0
  450. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T131024.json +0 -0
  451. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+12e1222-0.0.37-20261023T214016.json +0 -0
  452. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+f8ac55a-0.0.36-20261022T160134.json +0 -0
  453. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.37+1031feb-0.0.37-20261023T214230.json +0 -0
  454. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.38+7c158ff-0.0.38-20261027T081159.json +0 -0
  455. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+2c0c41f-0.0.39-20261027T174933.json +0 -0
  456. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+9317805-0.0.39-20261027T191154.json +0 -0
  457. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+b7fbdf9-0.0.39-20261027T204617.json +0 -0
  458. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+bb371fb-0.0.39-20261028T191816.json +0 -0
  459. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.25-0.0.26.json +0 -0
  460. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+5bafb92-0.0.26.json +0 -0
  461. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+654b06a-0.0.26.json +0 -0
  462. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+e877631-0.0.26.json +0 -0
  463. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ac80e07-0.0.27.json +0 -0
  464. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ec1df99-0.0.27.json +0 -0
  465. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27-0.0.27.json +0 -0
  466. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.28-0.0.28.json +0 -0
  467. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T220718.json +0 -0
  468. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T221106.json +0 -0
  469. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220856.json +0 -0
  470. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220901.json +0 -0
  471. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220915.json +0 -0
  472. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.26.json +0 -0
  473. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.37-20261023T214102.json +0 -0
  474. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.39-20261028T190818.json +0 -0
  475. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+5bafb92-0.0.26.json +0 -0
  476. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+654b06a-0.0.26.json +0 -0
  477. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0e31108-0.0.44+34c0b0b-0.0.44-20261104T190941.json +0 -0
  478. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+5bafb92-0.0.26.json +0 -0
  479. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+654b06a-0.0.26.json +0 -0
  480. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0e343c6-0.0.27+ec1df99-0.0.27.json +0 -0
  481. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28+ffe4eb1-0.0.28.json +0 -0
  482. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28-0.0.28.json +0 -0
  483. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+0f013b7-0.0.28.json +0 -0
  484. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+1c940ca-0.0.28.json +0 -0
  485. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+4ef21db+4ef21db-dirty-0.0.28.json +0 -0
  486. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+68d9694-0.0.28.json +0 -0
  487. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ec38b1d-0.0.28.json +0 -0
  488. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ffe4eb1-0.0.28.json +0 -0
  489. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28-0.0.28.json +0 -0
  490. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.36+f8ac55a-0.0.36-20261022T160503.json +0 -0
  491. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.37+1031feb-0.0.37-20261023T214005.json +0 -0
  492. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081145.json +0 -0
  493. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081152.json +0 -0
  494. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T180716.json +0 -0
  495. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T182855.json +0 -0
  496. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T183107.json +0 -0
  497. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f-0.0.39-20261027T174908.json +0 -0
  498. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_18_s_-0.0.39-20261027T175743.json +0 -0
  499. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_18_s_-0.0.39-20261027T175815.json +0 -0
  500. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_33_s_-0.0.39-20261027T175634.json +0 -0
  501. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_431_s_-0.0.39-20261027T175709.json +0 -0
  502. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+62463f2-0.0.39-20261029T145536.json +0 -0
  503. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+7445bee-0.0.39-20261027T155413.json +0 -0
  504. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+9317805-0.0.39-20261027T191146.json +0 -0
  505. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+b7fbdf9-0.0.39-20261027T191724.json +0 -0
  506. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191806.json +0 -0
  507. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191843.json +0 -0
  508. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+d4d323c-0.0.39-20261028T190809.json +0 -0
  509. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.36-20261022T160222.json +0 -0
  510. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155301.json +0 -0
  511. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155340.json +0 -0
  512. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/test_harness.py +0 -0
  513. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/hw/test_probe.py +0 -0
  514. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/spec_names.py +0 -0
  515. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_address.py +0 -0
  516. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_capabilities.py +0 -0
  517. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_capture.py +0 -0
  518. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_capture_blocks.py +0 -0
  519. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_capture_generation_rules.py +0 -0
  520. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_capture_rules.py +0 -0
  521. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_cobs.py +0 -0
  522. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance.py +0 -0
  523. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_allocator.py +0 -0
  524. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_analog.py +0 -0
  525. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_analog_payload.py +0 -0
  526. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_arm_adi.py +0 -0
  527. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_arm_adi_blocks.py +0 -0
  528. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_attach.py +0 -0
  529. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_blocks.py +0 -0
  530. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_capture_group.py +0 -0
  531. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_capture_group_geometry.py +0 -0
  532. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_capture_metadata.py +0 -0
  533. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_capture_serial.py +0 -0
  534. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_capture_timeline.py +0 -0
  535. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_capture_timeline_lifecycle.py +0 -0
  536. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_clock.py +0 -0
  537. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_core_fixed_fields.py +0 -0
  538. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_core_smoke.py +0 -0
  539. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_corr.py +0 -0
  540. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_cut.py +0 -0
  541. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_data.py +0 -0
  542. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_debug.py +0 -0
  543. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_dependencies.py +0 -0
  544. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_discovery.py +0 -0
  545. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_dmseq.py +0 -0
  546. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_dmseq_target.py +0 -0
  547. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_execution_order.py +0 -0
  548. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_exhausted.py +0 -0
  549. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_fixture_metadata.py +0 -0
  550. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_force_hw.py +0 -0
  551. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_gpio.py +0 -0
  552. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_gpio_lifecycle.py +0 -0
  553. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_host_core.py +0 -0
  554. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_host_critical_calls.py +0 -0
  555. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_host_deadline.py +0 -0
  556. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_host_notifications.py +0 -0
  557. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_host_requests.py +0 -0
  558. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_host_resend.py +0 -0
  559. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_host_tlv.py +0 -0
  560. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_host_values.py +0 -0
  561. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_host_wait.py +0 -0
  562. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_i2c.py +0 -0
  563. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_interface_smoke.py +0 -0
  564. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_interfaces.py +0 -0
  565. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_lease.py +0 -0
  566. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_link_routes.py +0 -0
  567. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_link_transfers.py +0 -0
  568. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_logic.py +0 -0
  569. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_mailbox.py +0 -0
  570. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_notification_output.py +0 -0
  571. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_notification_retention.py +0 -0
  572. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_notification_sequence.py +0 -0
  573. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_oep_declarations.py +0 -0
  574. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_oep_smoke.py +0 -0
  575. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_outcomes.py +0 -0
  576. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_pipeline.py +0 -0
  577. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_port_speed.py +0 -0
  578. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_port_speed_execution.py +0 -0
  579. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_port_speed_lifecycle.py +0 -0
  580. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_probe_input.py +0 -0
  581. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_reconnect.py +0 -0
  582. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_recovery.py +0 -0
  583. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_recovery_races.py +0 -0
  584. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_refusal_order.py +0 -0
  585. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_registered_ops.py +0 -0
  586. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_replay_pressure.py +0 -0
  587. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_replay_records_optional.py +0 -0
  588. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_reset.py +0 -0
  589. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_resources.py +0 -0
  590. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_response_race.py +0 -0
  591. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_restart.py +0 -0
  592. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_retention.py +0 -0
  593. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_retention_lifecycle.py +0 -0
  594. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_retry.py +0 -0
  595. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_reviewed_pins.py +0 -0
  596. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_routes.py +0 -0
  597. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_run.py +0 -0
  598. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_scan.py +0 -0
  599. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_scan_options.py +0 -0
  600. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_selected_metadata.py +0 -0
  601. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_serial.py +0 -0
  602. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_session_loss.py +0 -0
  603. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_session_smoke.py +0 -0
  604. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_spec_guard.py +0 -0
  605. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_spi.py +0 -0
  606. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_step.py +0 -0
  607. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_stream.py +0 -0
  608. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_subscriptions.py +0 -0
  609. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_tcp.py +0 -0
  610. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_tcp_peers.py +0 -0
  611. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_tcp_recovery.py +0 -0
  612. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_tlv_requests.py +0 -0
  613. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_uart.py +0 -0
  614. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_uart_stream.py +0 -0
  615. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_usb.py +0 -0
  616. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_wire_options.py +0 -0
  617. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_conformance_writer_lease.py +0 -0
  618. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_console_queue_and_reset_settle.py +0 -0
  619. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_core_rules.py +0 -0
  620. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_debug_attach.py +0 -0
  621. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_debug_rules.py +0 -0
  622. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_describe_unset_idle_rules.py +0 -0
  623. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_exact_payload_rules.py +0 -0
  624. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_extension_patterns.py +0 -0
  625. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_fixture_controllers.py +0 -0
  626. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_fixture_link_settings_rules.py +0 -0
  627. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_fixture_out.py +0 -0
  628. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_fixture_targets.py +0 -0
  629. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_flash_console.py +0 -0
  630. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_gpio_drive_and_serve_options.py +0 -0
  631. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_hardware.py +0 -0
  632. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_hid_stream.py +0 -0
  633. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_host_boot_lifecycle.py +0 -0
  634. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_host_recovery_rules.py +0 -0
  635. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_host_rules_bounds_options.py +0 -0
  636. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_host_rules_waits_lines.py +0 -0
  637. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_host_wait_bound.py +0 -0
  638. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_interfaces.py +0 -0
  639. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_link_drop.py +0 -0
  640. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_link_host.py +0 -0
  641. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_link_serial.py +0 -0
  642. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_linktest.py +0 -0
  643. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_literals.py +0 -0
  644. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_minimal_ops.py +0 -0
  645. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_no_resume.py +0 -0
  646. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_open_extensions.py +0 -0
  647. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_passthrough.py +0 -0
  648. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_pins.py +0 -0
  649. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_plan.py +0 -0
  650. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_port_speed.py +0 -0
  651. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_probe_log.py +0 -0
  652. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_request_tails.py +0 -0
  653. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_request_validation_rules.py +0 -0
  654. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_restart.py +0 -0
  655. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_resubscribe_after_reopen.py +0 -0
  656. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_rvswd_rest.py +0 -0
  657. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_session.py +0 -0
  658. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_settings.py +0 -0
  659. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_spec_sections.py +0 -0
  660. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_spec_vectors.py +0 -0
  661. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_state_resource_rules.py +0 -0
  662. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_stimulus.py +0 -0
  663. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_target_parts.py +0 -0
  664. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_tcp_discovery.py +0 -0
  665. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_tlv_reader_rules.py +0 -0
  666. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_capture.py +0 -0
  667. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_common.py +0 -0
  668. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_console.py +0 -0
  669. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_core.py +0 -0
  670. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_core_names.py +0 -0
  671. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_debug.py +0 -0
  672. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_fixture.py +0 -0
  673. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_fixture_drive.py +0 -0
  674. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_link.py +0 -0
  675. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_plan.py +0 -0
  676. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_restart.py +0 -0
  677. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_trace_transports.py +0 -0
  678. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_transport_session_rules.py +0 -0
  679. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_usb_identity.py +0 -0
  680. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_usb_stream.py +0 -0
  681. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_analog_roles.py +0 -0
  682. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_announce.py +0 -0
  683. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture.py +0 -0
  684. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_changing_trigger.py +0 -0
  685. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_channel_time.py +0 -0
  686. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_format_2.py +0 -0
  687. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_formats.py +0 -0
  688. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_initial_trigger_time.py +0 -0
  689. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_lifetime.py +0 -0
  690. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_notifications.py +0 -0
  691. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_one_shot_time.py +0 -0
  692. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_options.py +0 -0
  693. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_pretrigger.py +0 -0
  694. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_query.py +0 -0
  695. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_rates.py +0 -0
  696. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_requests.py +0 -0
  697. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_resume_calibration.py +0 -0
  698. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_trigger_modes.py +0 -0
  699. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_trigger_source.py +0 -0
  700. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_trigger_source_more.py +0 -0
  701. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_capture_waiting.py +0 -0
  702. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_pin_constraints.py +0 -0
  703. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_rules_core.py +0 -0
  704. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_rules_ops_lines.py +0 -0
  705. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_serve_reboot.py +0 -0
  706. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_serve_tcp_connections.py +0 -0
  707. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_spec.py +0 -0
  708. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_bench_targets.py +0 -0
  709. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_core.py +0 -0
  710. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_virtual_core_bool.py +0 -0
  711. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/test_wire_hold.py +0 -0
  712. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/checks.json +0 -0
  713. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/cobs.json +0 -0
  714. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/confirm.json +0 -0
  715. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/core_extensions.json +0 -0
  716. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/core_lifecycle.json +0 -0
  717. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/core_policy.json +0 -0
  718. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/discovery.json +0 -0
  719. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/headers.json +0 -0
  720. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/interface_boundaries.json +0 -0
  721. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/interface_profiles.json +0 -0
  722. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/logic_layout.json +0 -0
  723. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/ops_encoding.json +0 -0
  724. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/refusals.json +0 -0
  725. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/sessions.json +0 -0
  726. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/tests/vectors/settings_file.json +0 -0
  727. {oep_client_python-0.0.45 → oep_client_python-0.0.47}/udev/70-oep-probe.rules +0 -0
@@ -2,6 +2,30 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.0.47
6
+ - (EN) Added: `acquire.Request(during=steps)` for a stream in place of `seconds`: it streams until `steps(wait)`
7
+ returns, `wait(seconds)` collecting while it waits, so a script marks sections and sends ops or console commands on
8
+ the same session (no second thread or session) while one long capture runs. A loss with on_loss "stop" raises
9
+ `acquire.StreamStopped` out of `wait`; the stream ends there. An exception of the steps stops the capture and comes out.
10
+ - (JA) 追加: stream の `acquire.Request(during=steps)`(`seconds` の代わり)。`steps(wait)` が戻るまで取り込み、
11
+ `wait(秒)` の間に受け取る。1 本の長い取り込みの間に、同じセッションで区間の見出しを書き、op やコンソールの命令を送れる
12
+ (別のスレッドもセッションも要らない)。on_loss "stop" で欠損があると、`wait` から `acquire.StreamStopped` が出て、
13
+ そこで取り込みを終える。steps の例外は、取り込みを止めてから外に出る。
14
+ - (EN) Added: acquire's channels take a port's line by the target pin, `S@P` (host guide §5.3; `x035@pb9`), besides
15
+ `S.N` and the probe's channel names.
16
+ - (JA) 追加: acquire のチャネルに、口の線を相手のピンで指す `S@P`(host ガイド §5.3、`x035@pb9`)も使える。`S.N` と
17
+ プローブのチャネル名に加えて。
18
+ - (EN) CI and the release run the tests four at a time by file (pytest-xdist, a dev dependency): most tests wait on real
19
+ timeouts, so the run drops from about 6 minutes to about 2.
20
+ - (JA) CI とリリースは、試験をファイルごとに並べて流す(pytest-xdist、開発用の依存)。多くの試験は実際の時間切れを待つので、約 6 分が約 2 分になる。
21
+
22
+ ## 0.0.46
23
+ - (EN) Changed (oep-spec 4d28f24): `SpiController.transfer` and `Pwm.set` read the answer's count n(u8) first, and the
24
+ virtual bench sends it; the memo's max_objects is read as u16. Registry, documents and vectors synced; the checkers'
25
+ pins moved after a review (none checks the rules changed).
26
+ - (JA) 変更(oep-spec 4d28f24): `SpiController.transfer` と `Pwm.set` は応答の頭の件数 n(u8) を読み、仮想のベンチもそれを送る。メモ欄の
27
+ max_objects は u16 で読む。registry、文書、ベクタを同期した。適合の検査の固定は見直して合わせた(変えた規則を確かめる検査は無い)。
28
+
5
29
  ## 0.0.45
6
30
  - (EN) Added: `oep_client.memo` for `oep.probe.memo` (oep-if-memo): list (paged, by prefix), read and write in parts at the
7
31
  route's max_frame, delete; a read whose data does not match its crc raises MemoTorn. `oep dump` names the interface and
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: oep-client-python
3
- Version: 0.0.45
3
+ Version: 0.0.47
4
4
  Summary: Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a virtual bench
5
5
  Project-URL: Homepage, https://github.com/Open-Embedded-Probe/oep-client-python
6
6
  Project-URL: Repository, https://github.com/Open-Embedded-Probe/oep-client-python
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "oep-client-python"
7
- version = "0.0.45"
7
+ version = "0.0.47"
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"
@@ -42,7 +42,7 @@ packages = ["src/oep_client"]
42
42
  only-include = ["src/oep_client", "tests", "docs", "udev", "README.md", "README.ja.md", "CHANGELOG.md", "LICENSE", "pyproject.toml"]
43
43
 
44
44
  [dependency-groups]
45
- dev = ["pytest>=8"]
45
+ dev = ["pytest>=8", "pytest-xdist>=3"]
46
46
 
47
47
  [tool.pytest.ini_options]
48
48
  markers = ["hw: needs a probe board (OEP_HW_BOARDS=<board-identify ids>); skipped otherwise (tests/hw/README.md)",
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.0.45"
5
+ __version__ = "0.0.47"
@@ -11,14 +11,25 @@ probe's facts out.
11
11
 
12
12
  Logic channels go to oep.fixture.logic, analog ones to oep.fixture.analog; with both, oep.fixture.capture-group
13
13
  starts them together, a trigger on either track as the group's trigger source (capture §4.4). A line is named as a
14
- script keeps it - the probe's channel name (fn 0's channel_name, core §7.5) or a port's line label (S.N, host guide
15
- §5.3) - and looked up on the session (a channel number holds for one boot only); a track's channels are its plan roles
14
+ script keeps it - the probe's channel name (fn 0's channel_name, core §7.5) or a port's line label (host guide §5.3:
15
+ S.N by its role, S@P by the target pin) - and looked up on the session (a channel number holds for one boot only); a track's channels are its plan roles
16
16
  0..C-1 in the order given. The plans are released afterwards.
17
17
 
18
18
  Modes: "oneshot" (the probe's memory), "repeat" (`segments` acquisitions read and released as they come: with a
19
19
  trigger one part each, layout "segments"; without, a timeline), "stream" (for `seconds`, sent as taken,
20
20
  put together on disk while it runs: a timeline, cut where data was lost).
21
21
 
22
+ A stream can run while the script does its steps on the same session (marking sections, sending console commands):
23
+ `during=steps` in place of `seconds` streams until steps(wait) returns, `wait(seconds)` collecting while it waits.
24
+ Steps should call wait often (the probe holds only its stream buffer meanwhile); a loss with on_loss "stop" raises
25
+ StreamStopped out of wait, and the stream ends there.
26
+
27
+ def steps(wait):
28
+ for duty in (64, 128):
29
+ with rec.section(2, f"duty={duty}"):
30
+ console.write(f"PWM {duty}\n".encode()); wait(0.5)
31
+ res = acquire.capture(hst, acquire.Request(chans, 1_000_000, 0, mode="stream", during=steps))
32
+
22
33
  Times: tick 0 of a part is its first logic sample, `start_ns` on the probe's clock; an analog channel starts at
23
34
  t0_ticks = (its segment's start_ns - that) plus its skew_ns, in ticks. These are the probe's estimates; each track's
24
35
  uncertainty is kept. ADC values are kept raw with the probe's linear conversion; the input range, reference, Vrefint
@@ -37,13 +48,14 @@ import array
37
48
  import math
38
49
  import struct
39
50
  import sys
51
+ from collections.abc import Callable
40
52
  from dataclasses import dataclass, field
41
53
  from fractions import Fraction
42
54
  from pathlib import Path
43
55
 
44
56
  from . import registry as _reg
45
57
 
46
- __all__ = ["Analog", "Bits", "Changes", "OnDisk", "Part", "Request", "Result", "capture", "capture_at"]
58
+ __all__ = ["Analog", "Bits", "Changes", "OnDisk", "Part", "Request", "Result", "StreamStopped", "capture", "capture_at"]
47
59
 
48
60
  TRIGGERS = ("high", "low", "rise", "fall", "both")
49
61
  ANALOG_TRIGGERS = ("high", "low", "rise", "fall")
@@ -52,7 +64,8 @@ ANALOG_TRIGGERS = ("high", "low", "rise", "fall")
52
64
  @dataclass
53
65
  class Request:
54
66
  channels: list[tuple[str, str]] # logic: (name to record, the line): the probe's channel name (fn 0's
55
- # channel_name, GPIO47) or a port's line label (S.N, x035.swdio), in order
67
+ # channel_name, GPIO47) or a port's line label (S.N, x035.swdio; S@P,
68
+ # x035@pb9), in order
56
69
  rate: int # logic samples per second asked for (the probe may answer another)
57
70
  samples: int
58
71
  trigger: tuple | None = None # (logic channel, one of TRIGGERS) or (analog channel, rise / fall / high /
@@ -69,6 +82,8 @@ class Request:
69
82
  segments: int | None = None # repeat: how many acquisitions
70
83
  on_loss: str = "stop" # stream: "stop" at the first loss, or "continue" to the end
71
84
  spool_dir: str | None = None # stream: where its channels are put together on disk while it runs
85
+ during: Callable[[Callable[[float], None]], None] | None = None # stream: instead of `seconds`, runs until this
86
+ # returns - called with wait(seconds), which collects while it waits
72
87
 
73
88
  def __post_init__(self):
74
89
  names = [n for n, _ in self.channels] + [n for n, *_ in self.analog]
@@ -92,8 +107,10 @@ class Request:
92
107
  raise ValueError("repeat: logic channels only")
93
108
  elif self.segments is not None:
94
109
  raise ValueError("segments is for repeat only")
95
- if self.mode == "stream" and not (self.seconds and self.seconds > 0):
96
- raise ValueError("a stream needs seconds (how long)")
110
+ if self.during is not None and (self.mode != "stream" or self.seconds is not None):
111
+ raise ValueError("during is for a stream, in place of seconds")
112
+ if self.mode == "stream" and self.during is None and not (self.seconds and self.seconds > 0):
113
+ raise ValueError("a stream needs seconds (how long) or during")
97
114
  if self.arm not in ("pretrigger", "now"):
98
115
  raise ValueError(f"arm {self.arm!r}: pretrigger or now")
99
116
  logic = {n for n, _ in self.channels}
@@ -567,7 +584,8 @@ def _describe(core, hst, fn: int) -> list[tuple[int, bytes]]:
567
584
 
568
585
  def _channels(core, hst, lines: list[str]) -> list[int]:
569
586
  """The probe's channel numbers (valid for this boot) of lines named as kept in scripts: a channel name (fn 0's
570
- channel_name, core §7.5; GPIO47) or a port's line label (S.N, host guide §5.3; x035.swdio). ASCII case aside."""
587
+ channel_name, core §7.5; GPIO47) or a port's line label (host guide §5.3: S.N by its role, x035.swdio; S@P by the target pin, x035@pb9). ASCII
588
+ case aside."""
571
589
  if not lines:
572
590
  return []
573
591
  from . import registry, settings
@@ -581,11 +599,13 @@ def _channels(core, hst, lines: list[str]) -> list[int]:
581
599
  labels = None
582
600
  out = []
583
601
  for line in lines:
584
- port_line = settings.port_line(line)
585
- if port_line is not None:
602
+ label = settings.parse_label(line)
603
+ if label is not None:
586
604
  if labels is None:
587
605
  labels = settings.labels(hst)
588
- ch = settings.line_from_labels(labels, port_line[1], port_line[0])
606
+ port, role, pin = label
607
+ ch = (settings.line_from_labels(labels, role, port) if role
608
+ else settings.pin_from_labels(labels, pin, port))
589
609
  if ch is None:
590
610
  raise ValueError(f"{line}: no channel carries that label (host guide §5.3)")
591
611
  else:
@@ -1133,6 +1153,35 @@ STREAM_MAX_DELAY_MS = 20 # ... or after this long. With (0, 0) the P4X sent eac
1133
1153
  # quiet lines) as a transfer of its own, 2000 a second, and dropped 35 % it could not send
1134
1154
 
1135
1155
 
1156
+ class StreamStopped(Exception):
1157
+ """Raised by a stream's `wait` (Request.during) when data was lost and on_loss is "stop": the stream stops there."""
1158
+
1159
+
1160
+ def _drive(req: Request, poll, lost) -> None:
1161
+ """Collect a started stream: for req.seconds, or while req.during(wait) runs - its `wait(seconds)` collecting
1162
+ meanwhile. poll(seconds) takes what comes, lost() says whether anything was lost; with on_loss "stop" a loss ends
1163
+ it (a StreamStopped out of wait, caught here)."""
1164
+ import time
1165
+
1166
+ def wait(seconds: float) -> None:
1167
+ deadline = time.monotonic() + seconds
1168
+ while True:
1169
+ now = time.monotonic()
1170
+ if now >= deadline:
1171
+ return
1172
+ poll(min(STREAM_POLL_S, deadline - now))
1173
+ if req.on_loss == "stop" and lost():
1174
+ raise StreamStopped("data was lost while streaming")
1175
+
1176
+ try:
1177
+ if req.during is None:
1178
+ wait(req.seconds)
1179
+ else:
1180
+ req.during(wait)
1181
+ except StreamStopped:
1182
+ pass
1183
+
1184
+
1136
1185
  def _collect_group(group, tracks, link, req: Request, oc, spool=None):
1137
1186
  """_collect for a group's streaming tracks (capture §4.1: each subscribed, started at once): -> ({fn: Received},
1138
1187
  seconds). The first track's Received goes to the spool as it comes; a loss in any track stops it with "stop"."""
@@ -1141,20 +1190,22 @@ def _collect_group(group, tracks, link, req: Request, oc, spool=None):
1141
1190
  t.subscribe(STREAM_MIN_BYTES, STREAM_MAX_DELAY_MS)
1142
1191
  group.start(tracks)
1143
1192
  t_read = time.monotonic()
1144
- deadline, got = t_read + req.seconds, {t.fn: oc.Received() for t in tracks}
1193
+ got = {t.fn: oc.Received() for t in tracks}
1145
1194
  lead = tracks[0].fn
1146
- while True:
1147
- now = time.monotonic()
1148
- if now >= deadline:
1149
- break
1150
- got = group.stream(link, tracks, seconds=min(STREAM_POLL_S, deadline - now), into=got)
1195
+
1196
+ def poll(seconds):
1197
+ group.stream(link, tracks, seconds=seconds, into=got)
1151
1198
  if spool is not None:
1152
1199
  spool.take(got[lead])
1153
- lost = (spool is not None and spool.lost) or any(
1200
+
1201
+ def lost():
1202
+ return (spool is not None and spool.lost) or any(
1154
1203
  g.gaps or (g.start or 0) > 0 for fn, g in got.items() if spool is None or fn != lead)
1155
- if req.on_loss == "stop" and lost:
1156
- break
1157
- group.stop()
1204
+
1205
+ try:
1206
+ _drive(req, poll, lost)
1207
+ finally:
1208
+ group.stop() # also when the caller's `during` raised: the probe is left stopped
1158
1209
  got = group.finish(link, tracks, got)
1159
1210
  return got, time.monotonic() - t_read
1160
1211
 
@@ -1182,25 +1233,26 @@ def _analog_runs(an, acfg, got) -> tuple[list, list]:
1182
1233
 
1183
1234
 
1184
1235
  def _collect(track, link, req: Request, oc, spool=None):
1185
- """Subscribe, start, collect for req.seconds, stop and collect the rest -> (Received, seconds). A loss stops it
1186
- at once with on_loss "stop"."""
1236
+ """Subscribe, start, collect for req.seconds (or while req.during runs), stop and collect the rest -> (Received,
1237
+ seconds). A loss stops it at once with on_loss "stop"."""
1187
1238
  import time
1188
1239
  track.subscribe(STREAM_MIN_BYTES, STREAM_MAX_DELAY_MS) # batched: a capture wants bandwidth, not a frame per block
1189
1240
  track.start()
1190
1241
  t_read = time.monotonic()
1191
- deadline, got = t_read + req.seconds, oc.Received()
1192
- while True: # stream() renews the lease across calls on the same Received
1193
- now = time.monotonic()
1194
- if now >= deadline:
1195
- break
1196
- got = track.stream(link, seconds=min(STREAM_POLL_S, deadline - now), into=got)
1242
+ got = oc.Received()
1243
+
1244
+ def poll(seconds): # stream() renews the lease across calls on the same Received
1245
+ track.stream(link, seconds=seconds, into=got)
1197
1246
  if spool is not None: # put together as it comes: memory holds a poll's worth, not the stream
1198
1247
  spool.take(got)
1199
- if req.on_loss == "stop" and spool.lost:
1200
- break
1201
- elif req.on_loss == "stop" and (got.gaps or (got.start or 0) > 0):
1202
- break
1203
- track.stop()
1248
+
1249
+ def lost():
1250
+ return spool.lost if spool is not None else bool(got.gaps or (got.start or 0) > 0)
1251
+
1252
+ try:
1253
+ _drive(req, poll, lost)
1254
+ finally:
1255
+ track.stop()
1204
1256
  got = track.finish(link, got)
1205
1257
  return got, time.monotonic() - t_read
1206
1258
 
@@ -145,7 +145,7 @@ def checker_sources_sha256():
145
145
  for name in CHECKER_SOURCES}
146
146
 
147
147
 
148
- REVIEWED_CORE_SHA256 = 'b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a' # oep-spec docs/oep-core.ja.md
148
+ REVIEWED_CORE_SHA256 = '0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a' # oep-spec docs/oep-core.ja.md
149
149
 
150
150
 
151
151
  def require_reviewed_contract(registry, spec=None):
@@ -17,7 +17,7 @@ def refused_stale(reply):
17
17
  return reply[3:5]==b'\0\4' and refusal_carries('unavailable',reply[5:],b'\1\1\0\6')
18
18
  from .host_deadline import reviewed_identity as core_identity
19
19
 
20
- REVIEWED={'interfaces/oep-if-capture.ja.md':'9bab21bc5e8cdf069448dea059af459b6d7a46757554ca7aee4196b04e1dccd6',
20
+ REVIEWED={'interfaces/oep-if-capture.ja.md':'786bf349dfe322cee7b0d13e9d250cee2d0778bef3590ae751b2e87b11bb2fd3',
21
21
  'interfaces/oep-if-common.ja.md':'25fed0b1b8b7f246a8b71d02cea810249803b1c3c1e9c3df466c04f38687f70c'}
22
22
 
23
23
  def reviewed_identity(path):
@@ -8,7 +8,7 @@ import struct
8
8
  from . import ops, require, tlvs
9
9
  from .. import conformance as _helpers
10
10
 
11
- REVIEWED_CORE_SHA256 = 'b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a' # oep-spec docs/oep-core.ja.md
11
+ REVIEWED_CORE_SHA256 = '0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a' # oep-spec docs/oep-core.ja.md
12
12
 
13
13
 
14
14
  class CoreSmokeChecks:
@@ -4,7 +4,7 @@ from pathlib import Path
4
4
  import struct
5
5
  from . import require,spec_identity
6
6
 
7
- REVIEWED_CORE_SHA256='b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a'
7
+ REVIEWED_CORE_SHA256='0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a'
8
8
  CORE_OPS={'confirm':1,'list':2,'describe':3,'clock':4,'open':16,'end':17,'keepalive':18,'lock_state':19}
9
9
  # the settings' ops (core §13.5 / §13.7, transports §7.3): their numbers reviewed, their results not read here
10
10
  SETTINGS_OPS={'get':32,'set':33,'unset':34,'save':35,'state':36,'network':37}
@@ -9,7 +9,7 @@ from pathlib import Path
9
9
  from . import require,spec_identity
10
10
 
11
11
 
12
- REVIEWED={'docs/oep-core.ja.md':'b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a',
12
+ REVIEWED={'docs/oep-core.ja.md':'0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a',
13
13
  'docs/oep-transports.ja.md':'2e99bf8039a3d8f5b55c80b66ac97ac40ddf7ad4711079177ffc947c5790103f'}
14
14
  QUICK_MS=1000 # core_quick_op_max_ms
15
15
 
@@ -11,12 +11,12 @@ from . import require, spec_identity
11
11
 
12
12
  REVIEWED = {
13
13
  'interfaces/oep-if-plan.ja.md': 'da8bd60af53499573c07bc33dbd8c4df93eb61a93b91dc57907f26620ae36bbf',
14
- 'interfaces/oep-if-fixture.ja.md': '53c81882c1789f4e5dd055977066ebd1dedc6c282d772218e85a402a1ba65d39',
15
- 'docs/oep-core.ja.md': 'b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a',
14
+ 'interfaces/oep-if-fixture.ja.md': '777a972349a14d1efa6e4575d3118b4e0566b81a6f22320401d529e4dca585f1',
15
+ 'docs/oep-core.ja.md': '0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a',
16
16
  'interfaces/oep-if-debug.ja.md': '1f490ab984c5820b29acfee923b9400849a3d0011c9ed6bb7144397d8dd29d38',
17
- 'interfaces/oep-if-capture.ja.md': '9bab21bc5e8cdf069448dea059af459b6d7a46757554ca7aee4196b04e1dccd6',
17
+ 'interfaces/oep-if-capture.ja.md': '786bf349dfe322cee7b0d13e9d250cee2d0778bef3590ae751b2e87b11bb2fd3',
18
18
  }
19
- REVIEWED_REGISTRY_SHA256='46c9da661fcdf07b68e1240bcf03320673d7b418882f3481863e58d2843d00a1'
19
+ REVIEWED_REGISTRY_SHA256='5fccf16a1d0ea2857834f2f4d83deca2294b3d5ef65b80e06a3b9020f78224ae'
20
20
 
21
21
 
22
22
  def reviewed_identity(spec):
@@ -6,7 +6,7 @@ from .. import registry as _reg
6
6
  SAVE=_reg.CORE.op['save'] # fn 0's save (core §13.7)
7
7
 
8
8
 
9
- REVIEWED={'docs/oep-core.ja.md':'b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a',
9
+ REVIEWED={'docs/oep-core.ja.md':'0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a',
10
10
  'docs/oep-transports.ja.md':'2e99bf8039a3d8f5b55c80b66ac97ac40ddf7ad4711079177ffc947c5790103f'}
11
11
  QUICK_MS=1000 # core_quick_op_max_ms
12
12
 
@@ -7,7 +7,7 @@ import struct
7
7
  from . import ops, require, tlvs
8
8
 
9
9
  REVIEWED_INTERFACES = { # oep-spec interfaces/
10
- 'oep-if-fixture.ja.md': '53c81882c1789f4e5dd055977066ebd1dedc6c282d772218e85a402a1ba65d39',
10
+ 'oep-if-fixture.ja.md': '777a972349a14d1efa6e4575d3118b4e0566b81a6f22320401d529e4dca585f1',
11
11
  'oep-if-plan.ja.md': 'da8bd60af53499573c07bc33dbd8c4df93eb61a93b91dc57907f26620ae36bbf',
12
12
  'oep-if-debug.ja.md': '1f490ab984c5820b29acfee923b9400849a3d0011c9ed6bb7144397d8dd29d38',
13
13
  'oep-if-common.ja.md': '25fed0b1b8b7f246a8b71d02cea810249803b1c3c1e9c3df466c04f38687f70c',
@@ -559,8 +559,11 @@ class SpiController(_TargetDeclarations, Interface):
559
559
 
560
560
  def transfer(self, items: list[SpiItem]) -> list[SpiDone]:
561
561
  rd = m.Reader(self._call(self.TRANSFER, self.transfer_body(items)).payload)
562
+ n = rd.u8() # the answer's count (core §2.3)
563
+ if n != len(items):
564
+ raise m.ProtocolError(f"spi-controller transfer: {n} answered for {len(items)} asked")
562
565
  done = []
563
- for _ in items:
566
+ for _ in range(n):
564
567
  gap, setup, hold = rd.take("III")
565
568
  done.append(SpiDone(gap_ns=gap, setup_ns=setup, hold_ns=hold, rx=rd.counted("H")))
566
569
  rd.tail()
@@ -631,7 +634,10 @@ class Pwm(_TargetDeclarations, Interface):
631
634
  """(role, hz, duty) each, in order -> what the probe made of each."""
632
635
  body = struct.pack("<B", len(outputs)) + b"".join(struct.pack("<BIH", r, hz, d) for r, hz, d in outputs)
633
636
  rd = m.Reader(self._call(self.SET, body).payload)
634
- made = self._outputs(rd, len(outputs))
637
+ n = rd.u8() # the answer's count (core §2.3)
638
+ if n != len(outputs):
639
+ raise m.ProtocolError(f"pwm set: {n} answered for {len(outputs)} asked")
640
+ made = self._outputs(rd, n)
635
641
  rd.tail()
636
642
  return made
637
643
 
@@ -129,7 +129,7 @@ KNOWN: dict[str, Known] = {
129
129
  "oep.probe.link": Known("the link test (source, sink) and, when its ops offer it, port_speed on a UART bridge"),
130
130
  "oep.probe.memo": Known("the memo area: named objects the host keeps on the probe (list, read, write, delete)",
131
131
  tags=_d("oep.probe.memo", ("max_object", "max object bytes", _u32),
132
- ("max_objects", "max objects", _u32))),
132
+ ("max_objects", "max objects", _u16))),
133
133
  "oep.probe.plan": Known("the plan: which channel each role of an interface uses (plan_apply, plan_release)",
134
134
  tags=_d("oep.probe.plan", ("plan_roles", "plan roles", _u32))),
135
135
  "oep.probe.restart": Known("the probe restarts itself, answering first",
@@ -51,7 +51,7 @@ class Memo:
51
51
  self.fn = core.find(hst, _R.name) if fn is None else fn
52
52
  found = dict(core.describe(hst, self.fn))
53
53
  self.max_object = struct.unpack("<I", found[_R.tlv["describe"]["max_object"]])[0]
54
- self.max_objects = struct.unpack("<I", found[_R.tlv["describe"]["max_objects"]])[0]
54
+ self.max_objects = struct.unpack("<H", found[_R.tlv["describe"]["max_objects"]])[0]
55
55
 
56
56
  def _frame(self) -> int:
57
57
  return getattr(self.h.link, "max_frame", reg.MIN_MAX_FRAME)
@@ -3,7 +3,7 @@
3
3
 
4
4
  from types import SimpleNamespace as _NS
5
5
 
6
- REGISTRY_HASH = "46c9da661fcdf07b"
6
+ REGISTRY_HASH = "5fccf16a1d0ea285"
7
7
  SCHEMA = 1
8
8
  PROTOCOL_REVISION = 1
9
9
  CONFIRM_REQUEST_MAGIC = 'OEP?'
@@ -305,7 +305,7 @@ class FixtureDrive:
305
305
  if nanos // 1_000_000 > MAX_OP_MS:
306
306
  raise unsupported_fixed()
307
307
  up = lambda ns: -(-ns // step) * step # noqa: E731 the nearest step at or above
308
- out = b""
308
+ out = bytes([n]) # n first (core §2.3)
309
309
  for k, (gap, setup, hold, tx) in enumerate(items):
310
310
  wire = bytes(reverse_bits(b) for b in tx) if st.bit_order else tx # the order on MOSI (§4)
311
311
  miso = self.spi_device[fn](st.mode, wire)[:len(tx)] if tx else b""
@@ -336,7 +336,7 @@ class FixtureDrive:
336
336
  raise unsupported_fixed()
337
337
  if any(r not in planned for r in roles):
338
338
  raise unavailable("wrong_state")
339
- out = b""
339
+ out = bytes([n]) # n first (core §2.3)
340
340
  for role, hz, duty in rows:
341
341
  if hz == 0:
342
342
  made = (0, 1, 0) # stopped: the line driven low
@@ -1,13 +1,13 @@
1
- b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a docs/oep-core.ja.md
1
+ 0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a docs/oep-core.ja.md
2
2
  2e99bf8039a3d8f5b55c80b66ac97ac40ddf7ad4711079177ffc947c5790103f docs/oep-transports.ja.md
3
3
  a07e3517fe65e53b669307458dd9698dbf8c7e28801b5ebfd14954f776afe4d9 interfaces/README.ja.md
4
- 9bab21bc5e8cdf069448dea059af459b6d7a46757554ca7aee4196b04e1dccd6 interfaces/oep-if-capture.ja.md
4
+ 786bf349dfe322cee7b0d13e9d250cee2d0778bef3590ae751b2e87b11bb2fd3 interfaces/oep-if-capture.ja.md
5
5
  25fed0b1b8b7f246a8b71d02cea810249803b1c3c1e9c3df466c04f38687f70c interfaces/oep-if-common.ja.md
6
6
  f3f93a8943ca03a8c5d605d88425088420e1028753118c2c25c3ecfa037a9b54 interfaces/oep-if-console.ja.md
7
7
  1f490ab984c5820b29acfee923b9400849a3d0011c9ed6bb7144397d8dd29d38 interfaces/oep-if-debug.ja.md
8
- 53c81882c1789f4e5dd055977066ebd1dedc6c282d772218e85a402a1ba65d39 interfaces/oep-if-fixture.ja.md
8
+ 777a972349a14d1efa6e4575d3118b4e0566b81a6f22320401d529e4dca585f1 interfaces/oep-if-fixture.ja.md
9
9
  81d5f8ae9a556f0588373494f6c97ecf1df630c7c03d83e7e83c7260d320505a interfaces/oep-if-link.ja.md
10
- 396de65c2f5e654edd70677bb8bf0dfc758d775070da32a79a7a0612152cf6b3 interfaces/oep-if-memo.ja.md
10
+ 2b6082c9cd125afd1353259714c9716f1518a06a308ba30fc2589a0531b50eb2 interfaces/oep-if-memo.ja.md
11
11
  da8bd60af53499573c07bc33dbd8c4df93eb61a93b91dc57907f26620ae36bbf interfaces/oep-if-plan.ja.md
12
12
  c1925c4c23f97476725b1f8a18b91ba88f15ed0db9e790dbce81d4d17ca961ea interfaces/oep-if-restart.ja.md
13
13
  35cabaff444b53f30fc390be4dd0bcc394709de790f88cb5f9404ddc0833aeb6 interfaces/target-console-dmseq.ja.md
@@ -347,7 +347,7 @@ op = [
347
347
  ]
348
348
  [interface.tlv.describe]
349
349
  max_object = 0x40 # u32, required, >= 1: the longest data of one object (oep-if-memo §1)
350
- max_objects = 0x41 # u32, required, >= 1: the objects held at once (oep-if-memo §1)
350
+ max_objects = 0x41 # u16, required, >= 1: the objects held at once (oep-if-memo §1)
351
351
 
352
352
  [[interface]]
353
353
  name = "oep.probe.link" # optional: the link test and a UART bridge's speed for a session (oep-if-link)
@@ -86,6 +86,35 @@ def test_a_stream_is_put_together_on_a_timeline(probe, tmp_path):
86
86
  assert n > 0 and all(isinstance(c, acquire.Bits) for p in res.parts for c in p.channels)
87
87
 
88
88
 
89
+ def test_a_stream_runs_while_the_caller_works_on_the_same_session(probe, tmp_path):
90
+ hst = link.open_host(probe())
91
+ try:
92
+ core.take(hst, 30_000, owner="test")
93
+ seen = []
94
+
95
+ def steps(wait): # sections: a request on the session, then collect meanwhile
96
+ for _ in range(3):
97
+ seen.append(hst.clock_best(2).uptime_ns)
98
+ wait(0.1)
99
+ req = acquire.Request([("A", "GPIO10")], 1_000_000, 0, mode="stream", during=steps, spool_dir=str(tmp_path))
100
+ res = acquire.capture(hst, req)
101
+ assert res.complete and res.parts and len(seen) == 3 and seen == sorted(seen)
102
+ assert sum(p.channels[0].n for p in res.parts) > 0
103
+ with pytest.raises(RuntimeError): # the caller's own failure stops the stream and comes out
104
+ acquire.capture(hst, acquire.Request([("A", "GPIO10")], 1_000_000, 0, mode="stream",
105
+ during=lambda wait: (wait(0.05), (_ for _ in ()).throw(RuntimeError()))))
106
+ assert acquire.capture(hst, acquire.Request([("A", "GPIO10")], 1_000_000, 0, mode="stream", seconds=0.1)).complete
107
+ finally:
108
+ hst.end()
109
+ hst.link.close()
110
+
111
+
112
+ def test_during_is_for_a_stream_in_place_of_seconds():
113
+ for kw in ({"mode": "oneshot"}, {"mode": "stream", "seconds": 1.0}):
114
+ with pytest.raises(ValueError):
115
+ acquire.Request([("A", "GPIO10")], 1_000_000, 100, during=lambda wait: None, **kw)
116
+
117
+
89
118
  def test_format_1_lines_as_their_changes(probe):
90
119
  req = acquire.Request([("A", "GPIO10"), ("B", "GPIO11")], 20_000_000, 1000, resolution={"B": 1})
91
120
  res = acquire.capture_at(probe(), req)
@@ -128,10 +157,10 @@ def test_probe_clock_against_the_host():
128
157
 
129
158
 
130
159
  def test_lines_are_named_by_channel_name_or_label(probe):
131
- src = probe("--label", "13=bus.sda")
132
- res = acquire.capture_at(src, acquire.Request([("D", "bus.SDA"), ("E", "gpio11")], 20_000_000, 100))
133
- assert [c.acquisition["pin"] for c in res.channels] == [13, 11] # the label's channel; names any case
134
- assert res.meta["probe_channels"] == {"D": 13, "E": 11}
160
+ src = probe("--label", "13=bus.sda", "--label", "12=bus@PB9")
161
+ res = acquire.capture_at(src, acquire.Request([("D", "bus.SDA"), ("E", "gpio11"), ("F", "BUS@pb9")], 20_000_000, 100))
162
+ assert [c.acquisition["pin"] for c in res.channels] == [13, 11, 12] # by role, by name, by the target pin (S@P)
163
+ assert res.meta["probe_channels"] == {"D": 13, "E": 11, "F": 12}
135
164
  with pytest.raises(ValueError, match="no channel of that name"):
136
165
  acquire.capture_at(probe(), acquire.Request([("A", "10")], 20_000_000, 100)) # a number is not a name
137
166
  with pytest.raises(ValueError, match="no channel carries that label"):
@@ -74,7 +74,7 @@ def probe(monkeypatch):
74
74
  fake = FakeProbe()
75
75
  monkeypatch.setattr(core, "find", lambda hst, name, revision=None: 7)
76
76
  monkeypatch.setattr(core, "describe", lambda hst, fn=0: [(TLV["max_object"], struct.pack("<I", 2048)),
77
- (TLV["max_objects"], struct.pack("<I", 64))])
77
+ (TLV["max_objects"], struct.pack("<H", 64))])
78
78
  return fake
79
79
 
80
80
 
@@ -0,0 +1 @@
1
+ 98e7f5e1845318947442ca1cf0898d4b6747f0ac
@@ -1,6 +1,6 @@
1
- 4c1e6ea7dd919fbe8ca93da289f2f10448f9c79680941ff95cd8d89a18a64e85 src/oep_client/registry.py
2
- 46c9da661fcdf07b68e1240bcf03320673d7b418882f3481863e58d2843d00a1 tests/spec/oep-v1.toml
3
- 75f36d5439da7dbf7586c937d90bf08c1bfcebc8873f6913970f7336e6955ba0 tests/vectors/capture_formats.json
1
+ cd64ffc25290d00c1eb7b8406e6fd219aac18d14f5a1702f284744c54249fa9c src/oep_client/registry.py
2
+ 5fccf16a1d0ea2857834f2f4d83deca2294b3d5ef65b80e06a3b9020f78224ae tests/spec/oep-v1.toml
3
+ 92c74f42bbf8949e77b16e76e9526ba4242f3255a6d1b1400e9cc7448ecd11cd tests/vectors/capture_formats.json
4
4
  546ddf20d11b86faa23afe2fa1e3c38c514c157db4d5a5c8d92edf48647d61f1 tests/vectors/checks.json
5
5
  9950576fcf803299386d0b2e61bf154402f306102311312d49dec6a87a34ced5 tests/vectors/cobs.json
6
6
  c981ca124e3393ba68ce3ce3ee92970827f399202c7688bb6e02b66bb6190806 tests/vectors/confirm.json
@@ -12,7 +12,7 @@ c981ca124e3393ba68ce3ce3ee92970827f399202c7688bb6e02b66bb6190806 tests/vectors/
12
12
  dc69237eba40e132086806b140453bbd3f58c45b4820a3a927919c1d94d36ab8 tests/vectors/interface_boundaries.json
13
13
  2f3028f5b0a3dc764e28c535bdb2b55d7460e39a250bda8e0a27d5f980c57b57 tests/vectors/interface_profiles.json
14
14
  8309e40482373ccd3c063ff406befca71a033efffda5894b13d378cb7b6b13f7 tests/vectors/logic_layout.json
15
- cbf4af0cab979ef7570d68316a13172ed8033c85dfcec9638d4c7861923ed0a5 tests/vectors/ops.json
15
+ 3588a7ebed318fc268b59a011a2461a257d89f35044ff3055c7c6e35c76219cc tests/vectors/ops.json
16
16
  0e29a578ef94464df23b6084776e25734900824fdc5d098c7bb78e9cf2c1ff41 tests/vectors/ops_encoding.json
17
17
  a46d0cba21bf37bfaf9c1f6427c43320cc1f3f62e80e3f0633e9811bb3de62ec tests/vectors/refusals.json
18
18
  18e660de3901184988d9af52865a81565e1006542eef8985d15553be0a2ff33e tests/vectors/sessions.json
@@ -1,5 +1,5 @@
1
1
  {
2
- "about": "capture data formats and the trigger expression. Vectors fix fallback to the required blocks only (a probe may fall back earlier; a host reads the header). logic: per segment the raw / events channels' levels, the fallback chosen per block, the stream. analog: values per channel, the stream. trigger: bind TLVs.",
2
+ "about": "capture data formats and the trigger expression. A block falls back exactly when a channel's events pass L / 8 bytes (capture §1.3). logic: per segment the raw / events channels' levels, the fallback chosen per block, the stream. analog: values per channel, the stream. trigger: bind TLVs.",
3
3
  "logic_blocks": [
4
4
  {
5
5
  "name": "raw and events mixed: a raw channel and a D 4 events channel",
@@ -1748,7 +1748,7 @@
1748
1748
  },
1749
1749
  "state": "session S; fn 17 has roles 0 and 1 planned; the probe makes 1 kHz exactly and 32767 of 65535 as 32768",
1750
1750
  "request_hex": "01a900110010443322110200e8030000ff7f01000000000000",
1751
- "answer_hex": "02a900010000e80300000100000000800100000000010000000000"
1751
+ "answer_hex": "02a90001000200e80300000100000000800100000000010000000000"
1752
1752
  },
1753
1753
  {
1754
1754
  "name": "pwm set: a role past channels is unsupported",
@@ -1818,7 +1818,7 @@
1818
1818
  },
1819
1819
  "state": "session S; configured mode 0 MSB first; time_step_ns 25; the target answers 0x5A then 0x00 0xFF; the first transfer's gap is 0",
1820
1820
  "request_hex": "01a700100011443322110200000000e8030000f401000001009fda070000e8030000f401000002000102",
1821
- "answer_hex": "02a700010000000000e8030000f401000001005ae9070000e8030000f4010000020000ff"
1821
+ "answer_hex": "02a70001000200000000e8030000f401000001005ae9070000e8030000f4010000020000ff"
1822
1822
  },
1823
1823
  {
1824
1824
  "name": "spi-controller transfer: n 0 is malformed",
@@ -1 +0,0 @@
1
- 2cd20aa77fbe4eda9bc48e7b4d5e125fcf4ce538