oep-client-python 0.0.33__tar.gz → 0.0.34__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (732) hide show
  1. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/CHANGELOG.md +5 -0
  2. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/PKG-INFO +1 -1
  3. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/pyproject.toml +1 -1
  4. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/__init__.py +1 -1
  5. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/__main__.py +8 -0
  6. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/config.py +23 -0
  7. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/endpoint.py +48 -7
  8. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/registry.py +6 -6
  9. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/riscv.py +14 -1
  10. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_attach_model.py +3 -2
  11. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench.py +3 -1
  12. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_oep_declaration_model.py +3 -3
  13. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_registered_ops_model.py +1 -1
  14. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_scan_options_model.py +1 -1
  15. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/spec/oep-v1.toml +7 -0
  16. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_config.py +1 -1
  17. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_oep_declarations.py +2 -1
  18. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_request_tails.py +1 -0
  19. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_debug.py +1 -1
  20. oep_client_python-0.0.34/tests/test_wire_hold.py +59 -0
  21. oep_client_python-0.0.34/tests/vectors/SPEC_COMMIT +1 -0
  22. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/SPEC_SHA256 +2 -2
  23. oep_client_python-0.0.33/tests/vectors/SPEC_COMMIT +0 -1
  24. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/.gitignore +0 -0
  25. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/LICENSE +0 -0
  26. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/README.ja.md +0 -0
  27. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/README.md +0 -0
  28. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/README.ja.md +0 -0
  29. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/allocator-conformance.ja.md +0 -0
  30. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/analog-conformance.ja.md +0 -0
  31. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/analog-payload-conformance.ja.md +0 -0
  32. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/arm-adi-conformance.ja.md +0 -0
  33. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/attach-conformance.ja.md +0 -0
  34. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/block-conformance.ja.md +0 -0
  35. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-group-conformance.ja.md +0 -0
  36. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-group-geometry-conformance.ja.md +0 -0
  37. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-metadata-conformance.ja.md +0 -0
  38. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-serial-conformance.ja.md +0 -0
  39. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-timeline-conformance.ja.md +0 -0
  40. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/capture-timeline-lifecycle-conformance.ja.md +0 -0
  41. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/clock-conformance.ja.md +0 -0
  42. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-conformance.ja.md +0 -0
  43. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-execution-conformance.ja.md +0 -0
  44. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-fallback-conformance.ja.md +0 -0
  45. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-paging-conformance.ja.md +0 -0
  46. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-power-loss-conformance.ja.md +0 -0
  47. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/config-storage-conformance.ja.md +0 -0
  48. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/conformance-checks.ja.md +0 -0
  49. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/conformance-spec-compatibility.ja.md +0 -0
  50. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/core-fixed-fields-review.ja.md +0 -0
  51. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/core-smoke-conformance.ja.md +0 -0
  52. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/corr-conformance.ja.md +0 -0
  53. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/cut-conformance.ja.md +0 -0
  54. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/data-conformance.ja.md +0 -0
  55. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/debug-conformance.ja.md +0 -0
  56. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/dependency-conformance.ja.md +0 -0
  57. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/discovery-conformance.ja.md +0 -0
  58. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/dmseq-conformance.ja.md +0 -0
  59. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/dmseq-target-conformance.ja.md +0 -0
  60. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/execution-order-conformance.ja.md +0 -0
  61. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/exhausted-conformance.ja.md +0 -0
  62. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/fixture-metadata-conformance.ja.md +0 -0
  63. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/gpio-conformance.ja.md +0 -0
  64. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/gpio-lifecycle-conformance.ja.md +0 -0
  65. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/hardware-configuration.ja.md +0 -0
  66. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/hardware-quickstart.ja.md +0 -0
  67. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/hardware-schema.ja.md +0 -0
  68. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-core-shapes-conformance.ja.md +0 -0
  69. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-deadline-conformance.ja.md +0 -0
  70. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-notification-conformance.ja.md +0 -0
  71. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-request-conformance.ja.md +0 -0
  72. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-resend-conformance.ja.md +0 -0
  73. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-tlv-conformance.ja.md +0 -0
  74. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-value-conformance.ja.md +0 -0
  75. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/host-wait-conformance.ja.md +0 -0
  76. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/i2c-conformance.ja.md +0 -0
  77. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/interface-conformance.ja.md +0 -0
  78. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/interface-smoke-conformance.ja.md +0 -0
  79. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/lease-conformance.ja.md +0 -0
  80. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/link-routes-conformance.ja.md +0 -0
  81. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/link-transfer-conformance.ja.md +0 -0
  82. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/logic-conformance.ja.md +0 -0
  83. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/mailbox-conformance.ja.md +0 -0
  84. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/notification-output-sample.ja.md +0 -0
  85. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/notification-retention-conformance.ja.md +0 -0
  86. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/notification-sequence-conformance.ja.md +0 -0
  87. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/oep-declaration-conformance.ja.md +0 -0
  88. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/oep-example-smoke-conformance.ja.md +0 -0
  89. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/outcome-conformance.ja.md +0 -0
  90. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/pin-constraints-conformance.ja.md +0 -0
  91. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/pipeline-conformance.ja.md +0 -0
  92. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/port-speed-conformance.ja.md +0 -0
  93. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/probe-input-conformance.ja.md +0 -0
  94. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/recovery-conformance.ja.md +0 -0
  95. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/recovery-races-conformance.ja.md +0 -0
  96. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/refusal-order-conformance.ja.md +0 -0
  97. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/registered-ops-conformance.ja.md +0 -0
  98. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/replay-pressure-conformance.ja.md +0 -0
  99. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/reset-conformance.ja.md +0 -0
  100. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/resource-conformance.ja.md +0 -0
  101. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/response-race-conformance.ja.md +0 -0
  102. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/restart-conformance.ja.md +0 -0
  103. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/retention-conformance.ja.md +0 -0
  104. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/retention-lifecycle-conformance.ja.md +0 -0
  105. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/retry-conformance.ja.md +0 -0
  106. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/route-conformance.ja.md +0 -0
  107. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/run-conformance.ja.md +0 -0
  108. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/scan-conformance.ja.md +0 -0
  109. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/scan-options-conformance.ja.md +0 -0
  110. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/selected-metadata-conformance.ja.md +0 -0
  111. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/session-loss-conformance.ja.md +0 -0
  112. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/session-smoke-conformance.ja.md +0 -0
  113. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/spec-a09fa45-sections.ja.md +0 -0
  114. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/spec-follow-notes.ja.md +0 -0
  115. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/spi-conformance.ja.md +0 -0
  116. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/stage9-rule-trace.ja.md +0 -0
  117. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/step-conformance.ja.md +0 -0
  118. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/stream-conformance.ja.md +0 -0
  119. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/subscription-conformance.ja.md +0 -0
  120. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/tcp-recovery-conformance.ja.md +0 -0
  121. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/testing-consumers.ja.md +0 -0
  122. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/testing-policy.ja.md +0 -0
  123. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/tlv-request-conformance.ja.md +0 -0
  124. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/README.ja.md +0 -0
  125. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/capture.json +0 -0
  126. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/common.json +0 -0
  127. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/console.json +0 -0
  128. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/core.json +0 -0
  129. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/debug.json +0 -0
  130. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/fixture.json +0 -0
  131. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/link.json +0 -0
  132. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/plan.json +0 -0
  133. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/probe-config.json +0 -0
  134. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/restart.json +0 -0
  135. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/capture.json +0 -0
  136. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/common.json +0 -0
  137. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/console.json +0 -0
  138. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/core.json +0 -0
  139. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/debug.json +0 -0
  140. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/fixture.json +0 -0
  141. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/link.json +0 -0
  142. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/plan.json +0 -0
  143. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/probe-config.json +0 -0
  144. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/restart.json +0 -0
  145. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/sample-audit.ja.md +0 -0
  146. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review/transports.json +0 -0
  147. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/capture.json +0 -0
  148. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/common.json +0 -0
  149. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/console.json +0 -0
  150. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/core.0.json +0 -0
  151. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/core.1-6.json +0 -0
  152. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/core.7-13.json +0 -0
  153. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/debug.json +0 -0
  154. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/fixture.json +0 -0
  155. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/link.json +0 -0
  156. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/plan.json +0 -0
  157. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/probe-config.json +0 -0
  158. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/restart.json +0 -0
  159. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review2/transports.json +0 -0
  160. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/capture.json +0 -0
  161. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/core-a.json +0 -0
  162. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/core-b.json +0 -0
  163. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/debug-a.json +0 -0
  164. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/debug-b.json +0 -0
  165. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review3/rest.json +0 -0
  166. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/capture.json +0 -0
  167. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/core-rest.json +0 -0
  168. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/core-sessions.json +0 -0
  169. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/debug.json +0 -0
  170. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/fixture-console.json +0 -0
  171. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review4/small.json +0 -0
  172. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/capture.json +0 -0
  173. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/core-a.json +0 -0
  174. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/core-b.json +0 -0
  175. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/debug-targets.json +0 -0
  176. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/debug-wires.json +0 -0
  177. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review5/small.json +0 -0
  178. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/capture-console.json +0 -0
  179. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/core-early.json +0 -0
  180. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/core-late.json +0 -0
  181. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/debug-a.json +0 -0
  182. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/debug-b.json +0 -0
  183. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review6/rest.json +0 -0
  184. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/exact-payload.json +0 -0
  185. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/host-recovery.json +0 -0
  186. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/optional-as-required.json +0 -0
  187. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/request-validation.json +0 -0
  188. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/state-and-resources.json +0 -0
  189. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review7/tlv-readers.json +0 -0
  190. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review8/core-1.json +0 -0
  191. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review8/core-2.json +0 -0
  192. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/review8/debug.json +0 -0
  193. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/trace/transports.json +0 -0
  194. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/uart-conformance.ja.md +0 -0
  195. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/uart-stream-conformance.ja.md +0 -0
  196. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/usb-conformance.ja.md +0 -0
  197. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/wire-options-conformance.ja.md +0 -0
  198. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/docs/writer-lease-conformance.ja.md +0 -0
  199. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/arm.py +0 -0
  200. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/capture.py +0 -0
  201. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/catalog.py +0 -0
  202. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/ch32_flash.py +0 -0
  203. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/cobs.py +0 -0
  204. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance.py +0 -0
  205. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_allocator.py +0 -0
  206. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_allocator_sample.py +0 -0
  207. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_analog.py +0 -0
  208. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_analog_payload.py +0 -0
  209. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_analog_sample.py +0 -0
  210. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_arm_adi.py +0 -0
  211. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_arm_adi_blocks.py +0 -0
  212. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_arm_adi_sample.py +0 -0
  213. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_attach.py +0 -0
  214. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_attach_sample.py +0 -0
  215. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_block_sample.py +0 -0
  216. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_blocks.py +0 -0
  217. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_group.py +0 -0
  218. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_group_geometry.py +0 -0
  219. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_group_sample.py +0 -0
  220. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_metadata.py +0 -0
  221. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_serial.py +0 -0
  222. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_serial_sample.py +0 -0
  223. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_timeline.py +0 -0
  224. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_timeline_lifecycle.py +0 -0
  225. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_capture_timeline_sample.py +0 -0
  226. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_clock.py +0 -0
  227. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_clock_sample.py +0 -0
  228. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config.py +0 -0
  229. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_execution.py +0 -0
  230. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_execution_sample.py +0 -0
  231. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_fallback.py +0 -0
  232. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_fallback_sample.py +0 -0
  233. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_paging.py +0 -0
  234. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_paging_sample.py +0 -0
  235. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_power_loss.py +0 -0
  236. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_power_loss_sample.py +0 -0
  237. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_sample.py +0 -0
  238. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_storage.py +0 -0
  239. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_config_storage_sample.py +0 -0
  240. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_core_fixed_fields.py +0 -0
  241. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_core_smoke.py +0 -0
  242. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_corr.py +0 -0
  243. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_cut.py +0 -0
  244. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_cut_sample.py +0 -0
  245. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_data.py +0 -0
  246. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_data_sample.py +0 -0
  247. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_debug.py +0 -0
  248. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_debug_sample.py +0 -0
  249. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dependencies.py +0 -0
  250. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dependency_sample.py +0 -0
  251. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_discovery.py +0 -0
  252. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dmseq.py +0 -0
  253. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dmseq_sample.py +0 -0
  254. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dmseq_target.py +0 -0
  255. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_dmseq_target_sample.py +0 -0
  256. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_execution_order.py +0 -0
  257. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_execution_order_sample.py +0 -0
  258. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_exhausted.py +0 -0
  259. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_exhausted_sample.py +0 -0
  260. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_fixture_metadata.py +0 -0
  261. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_gpio.py +0 -0
  262. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_gpio_lifecycle.py +0 -0
  263. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_gpio_lifecycle_sample.py +0 -0
  264. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_gpio_sample.py +0 -0
  265. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_core.py +0 -0
  266. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_core_sample.py +0 -0
  267. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_deadline.py +0 -0
  268. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_deadline_sample.py +0 -0
  269. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_notifications.py +0 -0
  270. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_notifications_sample.py +0 -0
  271. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_request_sample.py +0 -0
  272. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_requests.py +0 -0
  273. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_resend.py +0 -0
  274. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_resend_sample.py +0 -0
  275. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_tlv.py +0 -0
  276. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_tlv_sample.py +0 -0
  277. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_values.py +0 -0
  278. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_values_sample.py +0 -0
  279. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_wait.py +0 -0
  280. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_host_wait_sample.py +0 -0
  281. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_i2c.py +0 -0
  282. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_i2c_sample.py +0 -0
  283. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_interface_smoke.py +0 -0
  284. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_interfaces.py +0 -0
  285. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_lease.py +0 -0
  286. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_lease_sample.py +0 -0
  287. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_link_routes.py +0 -0
  288. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_link_routes_sample.py +0 -0
  289. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_link_transfer_sample.py +0 -0
  290. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_link_transfers.py +0 -0
  291. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_logic.py +0 -0
  292. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_logic_sample.py +0 -0
  293. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_mailbox.py +0 -0
  294. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_mailbox_sample.py +0 -0
  295. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_notification_retention.py +0 -0
  296. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_notification_retention_sample.py +0 -0
  297. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_notification_sequence.py +0 -0
  298. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_notification_sequence_sample.py +0 -0
  299. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_oep_declarations.py +0 -0
  300. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_oep_smoke.py +0 -0
  301. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_outcome_sample.py +0 -0
  302. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_outcomes.py +0 -0
  303. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_pipeline.py +0 -0
  304. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_pipeline_sample.py +0 -0
  305. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_port_speed.py +0 -0
  306. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_port_speed_execution.py +0 -0
  307. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_port_speed_execution_sample.py +0 -0
  308. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_port_speed_lifecycle.py +0 -0
  309. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_port_speed_sample.py +0 -0
  310. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_probe_input.py +0 -0
  311. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_probe_input_sample.py +0 -0
  312. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_recovery.py +0 -0
  313. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_recovery_race_sample.py +0 -0
  314. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_recovery_races.py +0 -0
  315. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_recovery_sample.py +0 -0
  316. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_refusal_order.py +0 -0
  317. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_refusal_order_sample.py +0 -0
  318. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_registered_ops.py +0 -0
  319. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_replay_pressure.py +0 -0
  320. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_reset.py +0 -0
  321. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_reset_sample.py +0 -0
  322. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_resource_sample.py +0 -0
  323. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_resources.py +0 -0
  324. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_response_race.py +0 -0
  325. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_response_race_sample.py +0 -0
  326. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_restart.py +0 -0
  327. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_restart_sample.py +0 -0
  328. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retention.py +0 -0
  329. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retention_lifecycle.py +0 -0
  330. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retention_lifecycle_sample.py +0 -0
  331. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retention_sample.py +0 -0
  332. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retry.py +0 -0
  333. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_retry_sample.py +0 -0
  334. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_route_sample.py +0 -0
  335. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_routes.py +0 -0
  336. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_run.py +0 -0
  337. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_run_sample.py +0 -0
  338. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_scan.py +0 -0
  339. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_scan_options.py +0 -0
  340. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_scan_options_sample.py +0 -0
  341. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_scan_sample.py +0 -0
  342. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_selected_metadata.py +0 -0
  343. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_serial.py +0 -0
  344. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_session_loss.py +0 -0
  345. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_session_loss_sample.py +0 -0
  346. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_session_smoke.py +0 -0
  347. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_spi.py +0 -0
  348. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_spi_sample.py +0 -0
  349. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_step.py +0 -0
  350. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_step_sample.py +0 -0
  351. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_stream.py +0 -0
  352. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_stream_sample.py +0 -0
  353. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_subscription_sample.py +0 -0
  354. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_subscriptions.py +0 -0
  355. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_tcp.py +0 -0
  356. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_tcp_peers.py +0 -0
  357. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_tcp_recovery.py +0 -0
  358. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_tcp_recovery_sample.py +0 -0
  359. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_tlv_requests.py +0 -0
  360. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_uart.py +0 -0
  361. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_uart_sample.py +0 -0
  362. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_uart_stream.py +0 -0
  363. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_uart_stream_sample.py +0 -0
  364. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_usb.py +0 -0
  365. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_usb_cases.py +0 -0
  366. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_usb_model.py +0 -0
  367. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_wire_options.py +0 -0
  368. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_wire_options_sample.py +0 -0
  369. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_writer_lease.py +0 -0
  370. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/conformance_writer_lease_sample.py +0 -0
  371. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/console.py +0 -0
  372. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/core.py +0 -0
  373. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/decode.py +0 -0
  374. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/discovery.py +0 -0
  375. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/dump.py +0 -0
  376. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/fixture.py +0 -0
  377. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/frames.py +0 -0
  378. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/hardware.py +0 -0
  379. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/hid_stream.py +0 -0
  380. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/host.py +0 -0
  381. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/interfaces.py +0 -0
  382. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/kept_session.py +0 -0
  383. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/link.py +0 -0
  384. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/linktest.py +0 -0
  385. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/message.py +0 -0
  386. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/names.py +0 -0
  387. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/pins.py +0 -0
  388. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/pytest_conformance.py +0 -0
  389. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/rp2350.py +0 -0
  390. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/speed_record.py +0 -0
  391. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/targets.py +0 -0
  392. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/uiapduino.py +0 -0
  393. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/usb_stream.py +0 -0
  394. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_allocator_model.py +0 -0
  395. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_analog_model.py +0 -0
  396. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_arm_adi_model.py +0 -0
  397. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench_capture.py +0 -0
  398. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench_mdns.py +0 -0
  399. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench_serial.py +0 -0
  400. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench_serve.py +0 -0
  401. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_bench_usb.py +0 -0
  402. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_block_model.py +0 -0
  403. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_capture_group_geometry_model.py +0 -0
  404. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_capture_group_model.py +0 -0
  405. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_capture_metadata_model.py +0 -0
  406. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_capture_timeline_model.py +0 -0
  407. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_clock_model.py +0 -0
  408. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_config_execution_model.py +0 -0
  409. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_config_model.py +0 -0
  410. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_config_paging_model.py +0 -0
  411. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_config_power_loss_model.py +0 -0
  412. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_config_storage_model.py +0 -0
  413. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_core.py +0 -0
  414. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_cut_model.py +0 -0
  415. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_data_model.py +0 -0
  416. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_debug_model.py +0 -0
  417. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_declaration_model.py +0 -0
  418. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_dependency_model.py +0 -0
  419. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_dmseq_model.py +0 -0
  420. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_dmseq_target_model.py +0 -0
  421. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_fixture_metadata_model.py +0 -0
  422. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_gpio_lifecycle_model.py +0 -0
  423. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_gpio_model.py +0 -0
  424. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_i2c_model.py +0 -0
  425. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_link_routes_model.py +0 -0
  426. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_link_transfer_model.py +0 -0
  427. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_logic_model.py +0 -0
  428. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_mailbox_model.py +0 -0
  429. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_names.py +0 -0
  430. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_notification_model.py +0 -0
  431. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_outcome_model.py +0 -0
  432. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_pipeline_model.py +0 -0
  433. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_port_speed_execution_model.py +0 -0
  434. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_port_speed_model.py +0 -0
  435. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_reset_model.py +0 -0
  436. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_resource_model.py +0 -0
  437. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_restart_model.py +0 -0
  438. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_retention_model.py +0 -0
  439. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_retry_model.py +0 -0
  440. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_route_model.py +0 -0
  441. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_run_model.py +0 -0
  442. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_scan_model.py +0 -0
  443. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_selected_metadata_model.py +0 -0
  444. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_spi_model.py +0 -0
  445. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_step_model.py +0 -0
  446. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_stream_model.py +0 -0
  447. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_tlv_request_model.py +0 -0
  448. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_uart_model.py +0 -0
  449. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_wire_options_model.py +0 -0
  450. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/src/oep_client/virtual_writer_lease_model.py +0 -0
  451. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/conftest.py +0 -0
  452. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/equipment/.env.example +0 -0
  453. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/equipment/test_core_contract.py +0 -0
  454. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/equipment/test_preflight.py +0 -0
  455. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/fixtures/hardware.virtual.toml +0 -0
  456. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/.env.example +0 -0
  457. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/.env.virtual.example +0 -0
  458. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/README.ja.md +0 -0
  459. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/README.md +0 -0
  460. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/__init__.py +0 -0
  461. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/boards.py +0 -0
  462. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/conftest.py +0 -0
  463. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/firmware.py +0 -0
  464. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/flash.py +0 -0
  465. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/hardware.example.toml +0 -0
  466. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/hardware.resolved.example.toml +0 -0
  467. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/record.py +0 -0
  468. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/.gitignore +0 -0
  469. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.26+5bafb92-0.0.26.json +0 -0
  470. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.26+654b06a-0.0.26.json +0 -0
  471. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.27+ec1df99-0.0.27.json +0 -0
  472. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32+1491c13-0.0.31-20261016T133559.json +0 -0
  473. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32+672bf7b-0.0.32-20261016T164655.json +0 -0
  474. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131458.json +0 -0
  475. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131510.json +0 -0
  476. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131526.json +0 -0
  477. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131532.json +0 -0
  478. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131656.json +0 -0
  479. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131703.json +0 -0
  480. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131708.json +0 -0
  481. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132050.json +0 -0
  482. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132057.json +0 -0
  483. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132104.json +0 -0
  484. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+4fad559-0.0.26.json +0 -0
  485. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+5bafb92-0.0.26.json +0 -0
  486. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+1491c13-0.0.31-20261016T133501.json +0 -0
  487. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+672bf7b-0.0.32-20261016T164559.json +0 -0
  488. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T130922.json +0 -0
  489. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T131024.json +0 -0
  490. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.25-0.0.26.json +0 -0
  491. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+5bafb92-0.0.26.json +0 -0
  492. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+654b06a-0.0.26.json +0 -0
  493. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+e877631-0.0.26.json +0 -0
  494. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ac80e07-0.0.27.json +0 -0
  495. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ec1df99-0.0.27.json +0 -0
  496. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27-0.0.27.json +0 -0
  497. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.28-0.0.28.json +0 -0
  498. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.26.json +0 -0
  499. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+5bafb92-0.0.26.json +0 -0
  500. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+654b06a-0.0.26.json +0 -0
  501. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+5bafb92-0.0.26.json +0 -0
  502. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+654b06a-0.0.26.json +0 -0
  503. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e343c6-0.0.27+ec1df99-0.0.27.json +0 -0
  504. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28+ffe4eb1-0.0.28.json +0 -0
  505. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28-0.0.28.json +0 -0
  506. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+0f013b7-0.0.28.json +0 -0
  507. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+1c940ca-0.0.28.json +0 -0
  508. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+4ef21db+4ef21db-dirty-0.0.28.json +0 -0
  509. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+68d9694-0.0.28.json +0 -0
  510. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ec38b1d-0.0.28.json +0 -0
  511. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ffe4eb1-0.0.28.json +0 -0
  512. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28-0.0.28.json +0 -0
  513. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/test_harness.py +0 -0
  514. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/hw/test_probe.py +0 -0
  515. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/spec_names.py +0 -0
  516. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_capabilities.py +0 -0
  517. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_capture.py +0 -0
  518. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_cobs.py +0 -0
  519. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_config_disable.py +0 -0
  520. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_config_idle.py +0 -0
  521. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_config_network.py +0 -0
  522. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance.py +0 -0
  523. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_allocator.py +0 -0
  524. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_analog.py +0 -0
  525. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_analog_payload.py +0 -0
  526. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_arm_adi.py +0 -0
  527. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_arm_adi_blocks.py +0 -0
  528. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_attach.py +0 -0
  529. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_blocks.py +0 -0
  530. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_group.py +0 -0
  531. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_group_geometry.py +0 -0
  532. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_metadata.py +0 -0
  533. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_serial.py +0 -0
  534. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_timeline.py +0 -0
  535. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_capture_timeline_lifecycle.py +0 -0
  536. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_clock.py +0 -0
  537. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config.py +0 -0
  538. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config_execution.py +0 -0
  539. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config_fallback.py +0 -0
  540. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config_paging.py +0 -0
  541. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config_power_loss.py +0 -0
  542. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_config_storage.py +0 -0
  543. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_core_fixed_fields.py +0 -0
  544. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_core_smoke.py +0 -0
  545. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_corr.py +0 -0
  546. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_cut.py +0 -0
  547. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_data.py +0 -0
  548. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_debug.py +0 -0
  549. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_dependencies.py +0 -0
  550. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_discovery.py +0 -0
  551. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_dmseq.py +0 -0
  552. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_dmseq_target.py +0 -0
  553. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_execution_order.py +0 -0
  554. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_exhausted.py +0 -0
  555. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_fixture_metadata.py +0 -0
  556. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_gpio.py +0 -0
  557. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_gpio_lifecycle.py +0 -0
  558. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_core.py +0 -0
  559. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_critical_calls.py +0 -0
  560. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_deadline.py +0 -0
  561. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_notifications.py +0 -0
  562. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_requests.py +0 -0
  563. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_resend.py +0 -0
  564. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_tlv.py +0 -0
  565. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_values.py +0 -0
  566. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_host_wait.py +0 -0
  567. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_i2c.py +0 -0
  568. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_interface_smoke.py +0 -0
  569. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_interfaces.py +0 -0
  570. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_lease.py +0 -0
  571. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_link_routes.py +0 -0
  572. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_link_transfers.py +0 -0
  573. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_logic.py +0 -0
  574. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_mailbox.py +0 -0
  575. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_notification_output.py +0 -0
  576. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_notification_retention.py +0 -0
  577. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_notification_sequence.py +0 -0
  578. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_oep_smoke.py +0 -0
  579. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_outcomes.py +0 -0
  580. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_pipeline.py +0 -0
  581. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_port_speed.py +0 -0
  582. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_port_speed_execution.py +0 -0
  583. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_port_speed_lifecycle.py +0 -0
  584. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_probe_input.py +0 -0
  585. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_reconnect.py +0 -0
  586. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_recovery.py +0 -0
  587. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_recovery_races.py +0 -0
  588. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_refusal_order.py +0 -0
  589. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_registered_ops.py +0 -0
  590. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_replay_pressure.py +0 -0
  591. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_replay_records_optional.py +0 -0
  592. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_reset.py +0 -0
  593. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_resources.py +0 -0
  594. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_response_race.py +0 -0
  595. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_restart.py +0 -0
  596. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_retention.py +0 -0
  597. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_retention_lifecycle.py +0 -0
  598. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_retry.py +0 -0
  599. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_routes.py +0 -0
  600. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_run.py +0 -0
  601. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_scan.py +0 -0
  602. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_scan_options.py +0 -0
  603. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_selected_metadata.py +0 -0
  604. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_serial.py +0 -0
  605. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_session_loss.py +0 -0
  606. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_session_smoke.py +0 -0
  607. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_spec_guard.py +0 -0
  608. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_spi.py +0 -0
  609. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_step.py +0 -0
  610. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_stream.py +0 -0
  611. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_subscriptions.py +0 -0
  612. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_tcp.py +0 -0
  613. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_tcp_peers.py +0 -0
  614. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_tcp_recovery.py +0 -0
  615. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_tlv_requests.py +0 -0
  616. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_uart.py +0 -0
  617. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_uart_stream.py +0 -0
  618. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_usb.py +0 -0
  619. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_wire_options.py +0 -0
  620. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_conformance_writer_lease.py +0 -0
  621. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_console_queue_and_reset_settle.py +0 -0
  622. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_debug_attach.py +0 -0
  623. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_extension_patterns.py +0 -0
  624. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_fixture_targets.py +0 -0
  625. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_flash_console.py +0 -0
  626. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_gpio_drive_and_serve_options.py +0 -0
  627. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_hardware.py +0 -0
  628. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_hid_stream.py +0 -0
  629. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_host_boot_lifecycle.py +0 -0
  630. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_host_rules_2026_10_02.py +0 -0
  631. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_host_rules_2026_10_06.py +0 -0
  632. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_host_wait_bound.py +0 -0
  633. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_interfaces.py +0 -0
  634. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_link_drop.py +0 -0
  635. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_link_host.py +0 -0
  636. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_link_serial.py +0 -0
  637. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_linktest.py +0 -0
  638. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_literals.py +0 -0
  639. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_minimal_ops.py +0 -0
  640. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_no_resume.py +0 -0
  641. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_passthrough.py +0 -0
  642. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_pins.py +0 -0
  643. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_plan.py +0 -0
  644. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_port_speed.py +0 -0
  645. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_restart.py +0 -0
  646. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_resubscribe_after_reopen.py +0 -0
  647. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review4_capture.py +0 -0
  648. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review4_debug.py +0 -0
  649. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review4_small.py +0 -0
  650. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_capture.py +0 -0
  651. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_core_a.py +0 -0
  652. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_core_b.py +0 -0
  653. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_debug_targets.py +0 -0
  654. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_debug_wires.py +0 -0
  655. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review5_small.py +0 -0
  656. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_capture_console.py +0 -0
  657. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_core_early.py +0 -0
  658. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_core_late.py +0 -0
  659. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_debug_a.py +0 -0
  660. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_debug_b.py +0 -0
  661. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review6_rest.py +0 -0
  662. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review7_exact_payload.py +0 -0
  663. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review7_host_recovery.py +0 -0
  664. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review7_request_validation.py +0 -0
  665. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review7_state_resources.py +0 -0
  666. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review7_tlv_readers.py +0 -0
  667. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review8_core_1.py +0 -0
  668. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review8_core_2.py +0 -0
  669. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_review8_debug.py +0 -0
  670. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_rvswd_rest.py +0 -0
  671. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_session.py +0 -0
  672. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_spec_283e5b5.py +0 -0
  673. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_spec_2c6d18d.py +0 -0
  674. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_spec_3cc50c8.py +0 -0
  675. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_spec_sections.py +0 -0
  676. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_spec_vectors.py +0 -0
  677. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_target_parts.py +0 -0
  678. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_tcp_discovery.py +0 -0
  679. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_capture.py +0 -0
  680. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_common.py +0 -0
  681. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_console.py +0 -0
  682. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_core.py +0 -0
  683. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_core_names.py +0 -0
  684. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_fixture.py +0 -0
  685. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_link.py +0 -0
  686. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_plan.py +0 -0
  687. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_probe_config.py +0 -0
  688. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_restart.py +0 -0
  689. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_trace_transports.py +0 -0
  690. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_usb_identity.py +0 -0
  691. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_usb_stream.py +0 -0
  692. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_analog_roles.py +0 -0
  693. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_announce.py +0 -0
  694. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture.py +0 -0
  695. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_changing_trigger.py +0 -0
  696. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_channel_time.py +0 -0
  697. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_initial_trigger_time.py +0 -0
  698. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_lifetime.py +0 -0
  699. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_notifications.py +0 -0
  700. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_one_shot_time.py +0 -0
  701. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_pretrigger.py +0 -0
  702. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_query.py +0 -0
  703. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_rates.py +0 -0
  704. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_requests.py +0 -0
  705. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_resume_calibration.py +0 -0
  706. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_trigger_modes.py +0 -0
  707. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_capture_waiting.py +0 -0
  708. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_pin_constraints.py +0 -0
  709. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_rules_2026_10_02.py +0 -0
  710. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_rules_2026_10_06.py +0 -0
  711. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_serve_reboot.py +0 -0
  712. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_serve_tcp_connections.py +0 -0
  713. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_spec.py +0 -0
  714. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_bench_targets.py +0 -0
  715. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_core.py +0 -0
  716. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/test_virtual_core_bool.py +0 -0
  717. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/checks.json +0 -0
  718. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/cobs.json +0 -0
  719. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/confirm.json +0 -0
  720. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/core_extensions.json +0 -0
  721. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/core_lifecycle.json +0 -0
  722. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/core_policy.json +0 -0
  723. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/discovery.json +0 -0
  724. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/headers.json +0 -0
  725. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/interface_boundaries.json +0 -0
  726. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/interface_profiles.json +0 -0
  727. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/logic_layout.json +0 -0
  728. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/ops.json +0 -0
  729. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/ops_encoding.json +0 -0
  730. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/refusals.json +0 -0
  731. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/tests/vectors/sessions.json +0 -0
  732. {oep_client_python-0.0.33 → oep_client_python-0.0.34}/udev/70-oep-probe.rules +0 -0
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.0.34
6
+ - (JA) oep-spec bc52327(debug §2 の閉じた後の保持、§2.2 holds、probe.config の wire-hold、core §8 の例外)に追従。仮想ベンチは、線切れ以外で
7
+ 接続を閉じたらその口の休みの状態を保持し、ピンを取られる、wire-hold が off、idle / disable の項目、で保持を終える。駆動が止まると halt を失う
8
+ target(`VirtualTarget.needs_drive`、CH32L103)を表せる。クライアントは `WireBase.holds()`、`config.WireHold`、`oep config wire-hold PROBE CH on|off`。
9
+
5
10
  ## 0.0.33
6
11
  - (JA) oep-spec ba4e8ee(debug §3.1、core §12 規則 8、probe.config の rvswd-rest)に追従。rvswd の線の休ませ方は、attach の idle_clock が無ければ
7
12
  probe が決める(その SWCLK の channel の設定 rvswd-rest、無ければ target_id の系統: CH32L103 は low)。仮想ベンチはそのとおりに休ませ、attach の応答と
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: oep-client-python
3
- Version: 0.0.33
3
+ Version: 0.0.34
4
4
  Summary: Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a virtual bench
5
5
  Project-URL: Homepage, https://github.com/Open-Embedded-Probe/oep-client-python
6
6
  Project-URL: Repository, https://github.com/Open-Embedded-Probe/oep-client-python
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "oep-client-python"
7
- version = "0.0.33"
7
+ version = "0.0.34"
8
8
  description = "Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a virtual bench"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.0.33"
5
+ __version__ = "0.0.34"
@@ -359,6 +359,12 @@ def _config_parser(sub) -> None:
359
359
  rest.add_argument("channel", type=int, help="the port's SWCLK channel")
360
360
  rest.add_argument("mode", choices=sorted(config.REST_MODE))
361
361
  rest.add_argument("--save", action="store_true")
362
+ hold = cs.add_parser("wire-hold", help="whether a debug wire's lines stay held at their rest after a close "
363
+ "(on, the default) or go free at once (off; debug §2)")
364
+ hold.add_argument("probe")
365
+ hold.add_argument("channel", type=int, help="the port's SWDIO channel")
366
+ hold.add_argument("mode", choices=sorted(config.HOLD_MODE))
367
+ hold.add_argument("--save", action="store_true")
362
368
  dis = cs.add_parser("disable", help="channels the probe never drives or sets up (not on this board)")
363
369
  dis.add_argument("probe")
364
370
  dis.add_argument("channels", type=int, nargs="+")
@@ -441,6 +447,8 @@ def _config(args) -> int:
441
447
  _change(hst, cfg, [config.Label(channel=args.channel, text=args.text)], args.save)
442
448
  elif args.action == "idle":
443
449
  _change(hst, cfg, [config.Idle(channel=args.channel, mode=args.mode)], args.save)
450
+ elif args.action == "wire-hold":
451
+ _change(hst, cfg, [config.WireHold(channel=args.channel, mode=args.mode)], args.save)
444
452
  elif args.action == "rvswd-rest":
445
453
  _change(hst, cfg, [config.RvswdRest(channel=args.channel, mode=args.mode)], args.save)
446
454
  elif args.action == "disable":
@@ -37,6 +37,7 @@ ITEM = {k.replace("-", "_"): i + 1 for i, k in enumerate(NAMES)}
37
37
  DESCRIBE = _CFG.tlv["describe"]
38
38
  IDLE = {k.replace("_", "-"): v for k, v in _CFG.enum["idle_mode"].items()}
39
39
  REST_MODE = dict(_CFG.enum["rvswd_rest_mode"]) # rvswd-rest: auto / high / low (debug §3.1)
40
+ HOLD_MODE = dict(_CFG.enum["wire_hold_mode"]) # wire-hold: off / on (debug §2)
40
41
  STORAGE_STATE = {v: k for k, v in _CFG.enum["storage_state"].items()}
41
42
  UNREADABLE = {v: k for k, v in _CFG.enum["storage_unreadable"].items()}
42
43
  FORM = _CFG.enum["setting_form"]
@@ -162,6 +163,26 @@ class RvswdRest:
162
163
  return bytes([REST_MODE[self.mode]])
163
164
 
164
165
 
166
+ @dataclass
167
+ class WireHold:
168
+ """Whether a debug wire's lines on the port whose SWDIO is `channel` stay held at their rest after its connection
169
+ closes (debug §2): on - also with no item - or off (back to the free state at once)."""
170
+ channel: int
171
+ mode: str = "on"
172
+ NAME = "wire-hold"
173
+
174
+ def key(self) -> int:
175
+ return self.channel
176
+
177
+ def value(self) -> bytes:
178
+ return struct.pack("<H", self.key()) + self.data()
179
+
180
+ def data(self) -> bytes:
181
+ if self.mode not in HOLD_MODE:
182
+ raise ValueError(f"wire-hold mode {self.mode!r}: one of {', '.join(HOLD_MODE)}")
183
+ return bytes([HOLD_MODE[self.mode]])
184
+
185
+
165
186
  @dataclass(kw_only=True)
166
187
  class ConsolePassthrough:
167
188
  """Serial port `port` carries the target's debug console - read by the probe itself over `wire_fn` on (swdio, swclk)
@@ -315,6 +336,8 @@ def decode(name: str, key: int, d: bytes, setting: Setting | None = None, netifs
315
336
  try:
316
337
  if name == "label":
317
338
  return Label(channel=key, text=d.decode("utf-8", "replace"))
339
+ if name == "wire-hold" and len(d) == 1 and d[0] in HOLD_MODE.values():
340
+ return WireHold(channel=key, mode={v: k for k, v in HOLD_MODE.items()}[d[0]])
318
341
  if name == "rvswd-rest" and len(d) == 1 and d[0] in REST_MODE.values():
319
342
  return RvswdRest(channel=key, mode={v: k for k, v in REST_MODE.items()}[d[0]])
320
343
  if name == "idle" and len(d) == 1:
@@ -117,7 +117,8 @@ RESET_MODE = _RV.enum["reset_mode"]
117
117
  READ_FROM = reg.COMMON.enum["read_from"] # position, oldest, now, last_mark (common §1.2)
118
118
  STEP_LEFT = _RV.tlv["step_answer"]["step_left"] # step's answer: the hart could not be halted again (§4.2)
119
119
  ITEM = {k.replace("-", "_"): k for k in cfgmod.NAMES} # the standard items by name (probe.config §1, core §7.7)
120
- CHANNEL_ITEMS = (ITEM["label"], ITEM["idle"], ITEM["disable"], ITEM["rvswd_rest"]) # keyed by a channel (probe.config §1)
120
+ CHANNEL_ITEMS = (ITEM["label"], ITEM["idle"], ITEM["disable"], ITEM["rvswd_rest"], ITEM["wire_hold"]) # keyed by a channel
121
+ HOLD_MODE = cfgmod.HOLD_MODE
121
122
  REST_MODE = cfgmod.REST_MODE
122
123
  IDLE_MODE = _CFG.enum["idle_mode"]
123
124
  CFG_DESCRIBE = cfgmod.DESCRIBE
@@ -327,6 +328,7 @@ class VirtualTarget:
327
328
  havereset: bool = True
328
329
  resume_misses: int = 0 # resumes that do not take (status state, dpc unchanged)
329
330
  present: bool = True # something answers on this pin pair (scan, attach)
331
+ needs_drive: bool = False # loses its halt once the probe stops driving the line (a CH32L103)
330
332
  target_id: int | None = None # the dmi_7f target_id attach reports (None: none)
331
333
  # run(pc, regs) -> (stopped, dpc, elapsed_us); default: halts 0x10 past the start
332
334
  run_hook: Callable | None = None
@@ -554,7 +556,7 @@ class Connection:
554
556
 
555
557
 
556
558
  ITEM_SIZES = {ITEM["idle"]: 1, ITEM["disable"]: 0, ITEM["passthrough"]: 9, # the data of a fixed length (probe.config §1)
557
- ITEM["console_passthrough"]: 13, ITEM["ipv4"]: 14, ITEM["rvswd_rest"]: 1}
559
+ ITEM["console_passthrough"]: 13, ITEM["ipv4"]: 14, ITEM["rvswd_rest"]: 1, ITEM["wire_hold"]: 1}
558
560
  PASSTHROUGHS = (ITEM["passthrough"], ITEM["console_passthrough"])
559
561
 
560
562
 
@@ -784,6 +786,7 @@ class Endpoint:
784
786
  self.session_ports: set[int] = set() # the transports the lock holder's requests came on (probe.config §1.1)
785
787
  self.passthrough_out: dict[int, bytearray] = {} # a serial port's pass-through bytes not sent yet
786
788
  self.resident: dict[int, bool] = {} # console_passthrough's own connection per port: attached (config §1.2)
789
+ self.holds: dict[tuple[int, tuple[int, int]], int] = {} # (wire fn, pair) -> rest: lines held after a close (debug §2)
787
790
  self.last: int | None = None # S: the id that holds or last held the lock (the resend table's, §5.2)
788
791
  self.owner: bytes | None = None # the holder's owner, while the lock is held (core §6.4)
789
792
  self.lease_ms = self.lease_default_ms
@@ -1561,7 +1564,7 @@ class Endpoint:
1561
1564
  connections closed (an unknown `cid`: none)."""
1562
1565
  gone = [c for c in (list(self.conns) if cid is None else [cid]) if c in self.conns]
1563
1566
  for c in gone:
1564
- self._close_conn(c)
1567
+ self._close_conn(c, lost=True)
1565
1568
  return gone
1566
1569
 
1567
1570
  # ---- core -----------------------------------------------------------------------------------
@@ -2334,6 +2337,11 @@ class Endpoint:
2334
2337
  raise wrong_kind() # another wire's connection
2335
2338
  self._close_conn(cid)
2336
2339
  return m.COMPLETED, m.SUCCESS, b""
2340
+ if op == O["holds"]: # lock-free, paged by first (debug §2.2)
2341
+ first = t.take("B")
2342
+ t.tail()
2343
+ rows = [struct.pack("<HHB", *pair, rest) for pair, rest in self.held_ports(fn)]
2344
+ return m.COMPLETED, m.SUCCESS, self._paged(rows, first)
2337
2345
  if op == O["connections"]: # lock-free, paged by first (debug §2.1)
2338
2346
  first = t.take("B")
2339
2347
  t.tail()
@@ -2409,14 +2417,45 @@ class Endpoint:
2409
2417
  self.conns[cid] = Connection(fn, pair, self._order, speed, tid)
2410
2418
  return cid
2411
2419
 
2412
- def _close_conn(self, cid: int) -> None:
2413
- """The connection goes, its console streams first (common §2); its pins go back to their idle state."""
2420
+ def _close_conn(self, cid: int, lost: bool = False) -> None:
2421
+ """The connection goes, its console streams first (common §2). Its lines stay held at its rest unless the line
2422
+ was lost, the port's wire-hold is off or a pin has an idle / disable item (debug §2); else to their idle state,
2423
+ and a target that needs the drive loses its halt."""
2414
2424
  for sid in [k for k, st in self.streams.items() if st.conn == cid]:
2415
2425
  self._close_stream(sid)
2416
2426
  gone = self.conns.pop(cid, None)
2417
2427
  self.resources.pop(cid, None)
2418
- if gone is not None:
2419
- self._park(gone.pair)
2428
+ if gone is None:
2429
+ return
2430
+ if not lost and self._may_hold(gone.pair):
2431
+ self.holds[(gone.fn, gone.pair)] = gone.idle_clock if self.names[gone.fn] == "oep.wire.rvswd" else 0
2432
+ return
2433
+ self._park(gone.pair)
2434
+ tg = self.targets.get((gone.fn, gone.pair))
2435
+ if tg is not None and tg.needs_drive:
2436
+ tg.halted = False # its debug module dropped the link: the hart runs
2437
+
2438
+ def _may_hold(self, pair: tuple[int, int]) -> bool:
2439
+ """debug §2: wire-hold on (no item: on) for the port's SWDIO, and no idle / disable item on its pins."""
2440
+ mode = self.config.get((ITEM["wire_hold"], pair[0]), bytes([HOLD_MODE["on"]]))[0]
2441
+ pins = [p for p in pair if p != 0xFFFF]
2442
+ return (mode == HOLD_MODE["on"] and not any((ITEM["idle"], p) in self.config for p in pins)
2443
+ and not any(p in self.disabled for p in pins))
2444
+
2445
+ def held_ports(self, fn: int) -> list[tuple[tuple[int, int], int]]:
2446
+ """The ports wire `fn` holds now (debug §2.2): a hold ends once its pins are taken (a plan, a connection), its
2447
+ wire-hold goes off or an idle / disable item lands on them; an ended hold's pins go to their free state."""
2448
+ busy = {a[2] for a in self.plan if not self._listens(a[0])} | {p for c in self.conns.values() for p in c.pair}
2449
+ for key in list(self.holds):
2450
+ hfn, pair = key
2451
+ if any(p in busy for p in pair if p != 0xFFFF) or not self._may_hold(pair):
2452
+ del self.holds[key]
2453
+ if not any(p in busy for p in pair if p != 0xFFFF):
2454
+ self._park(pair)
2455
+ tg = self.targets.get(key)
2456
+ if tg is not None and tg.needs_drive:
2457
+ tg.halted = False
2458
+ return [(pair, rest) for (hfn, pair), rest in self.holds.items() if hfn == fn]
2420
2459
 
2421
2460
  def _cleanup_failed(self, cid: int, done: int, payload: bytes) -> tuple[int, int, bytes]:
2422
2461
  """A block op whose restore of DATA0 / DATA1 failed: partial when done > 0 (all words included), else failed,
@@ -3301,6 +3340,8 @@ class Endpoint:
3301
3340
  return True
3302
3341
  if name == ITEM["rvswd_rest"] and d[0] not in REST_MODE.values():
3303
3342
  return True # a mode the definition leaves unused (§1)
3343
+ if name == ITEM["wire_hold"] and d[0] not in HOLD_MODE.values():
3344
+ return True
3304
3345
  return False
3305
3346
 
3306
3347
  def _shown(self, name: str, d: bytes) -> bytes:
@@ -3,7 +3,7 @@
3
3
 
4
4
  from types import SimpleNamespace as _NS
5
5
 
6
- REGISTRY_HASH = "66b19f04290391f3"
6
+ REGISTRY_HASH = "32b9f952338089a5"
7
7
  SCHEMA = 1
8
8
  PROTOCOL_REVISION = 1
9
9
  CONFIRM_REQUEST_MAGIC = 'OEP?'
@@ -41,15 +41,15 @@ PROBE_LINK = _NS(name="oep.probe.link", revision=1, target=None, op={"source": 0
41
41
  tlv={}, event={}, enum={"port_speed_step": {"try": 0x00, "commit": 0x01, "revert": 0x02}, "port_state": {"boot": 0x00, "trying": 0x01, "committed": 0x02, "recovery_pending": 0x03}}, own={},
42
42
  line_names={}, names={})
43
43
  INTERFACES["oep.probe.link"] = PROBE_LINK
44
- WIRE_RVSWD = _NS(name="oep.wire.rvswd", revision=1, target="RISC-V targets whose debug module is reached over the two-wire RVSWD line", op={"scan": 0x10, "attach": 0x11, "detach": 0x12, "connections": 0x13}, lock_free={0x13},
44
+ WIRE_RVSWD = _NS(name="oep.wire.rvswd", revision=1, target="RISC-V targets whose debug module is reached over the two-wire RVSWD line", op={"scan": 0x10, "attach": 0x11, "detach": 0x12, "connections": 0x13, "holds": 0x14}, lock_free={0x13, 0x14},
45
45
  tlv={"describe": {"max_connections": 0x40}, "scan": {"max_speed": 0x01, "idle_clock": 0x03}, "attach": {"idle_clock": 0x03, "reset": 0x04}, "attach_answer": {"target_id": 0x01, "dpc": 0x02, "idle_clock": 0x03}, "connections_answer": {"idle_clock": 0x02}, "unavailable_payload": {"index": 0x40}, "unsupported_payload": {"index": 0x40}}, event={}, enum={"scan_kind": {"riscv_dm": 0x01}, "attach_flags": {"havereset_acked": 0x01, "halted": 0x08}, "features": {"attach_halt": 0x01}, "attach_method": {"run": 0x00, "halt": 0x01}, "pin_role": {"swdio": 0x01, "swclk": 0x02, "reset": 0x03}, "idle_clock": {"high": 0x00, "low": 0x01}, "target_id_family": {"shift": 0x14}, "idle_low_family": {"ch32l103": 0x103}}, own={},
46
46
  line_names={}, names={})
47
47
  INTERFACES["oep.wire.rvswd"] = WIRE_RVSWD
48
- WIRE_SWIO = _NS(name="oep.wire.swio", revision=1, target="RISC-V targets whose debug module is reached over the one-wire SWIO line", op={"scan": 0x10, "attach": 0x11, "detach": 0x12, "connections": 0x13}, lock_free={0x13},
48
+ WIRE_SWIO = _NS(name="oep.wire.swio", revision=1, target="RISC-V targets whose debug module is reached over the one-wire SWIO line", op={"scan": 0x10, "attach": 0x11, "detach": 0x12, "connections": 0x13, "holds": 0x14}, lock_free={0x13, 0x14},
49
49
  tlv={"describe": {"max_connections": 0x40}, "scan": {"max_speed": 0x01}, "attach": {"reset": 0x04}, "attach_answer": {"target_id": 0x01, "dpc": 0x02}, "unavailable_payload": {"index": 0x40}, "unsupported_payload": {"index": 0x40}}, event={}, enum={"scan_kind": {"riscv_dm": 0x01}, "attach_flags": {"havereset_acked": 0x01, "halted": 0x08}, "features": {"attach_halt": 0x01}, "attach_method": {"run": 0x00, "halt": 0x01}, "pin_role": {"swdio": 0x01, "reset": 0x03}}, own={},
50
50
  line_names={}, names={})
51
51
  INTERFACES["oep.wire.swio"] = WIRE_SWIO
52
- WIRE_SWD = _NS(name="oep.wire.swd", revision=1, target="ARM targets with an SWD debug port", op={"scan": 0x10, "attach": 0x11, "detach": 0x12, "connections": 0x13}, lock_free={0x13},
52
+ WIRE_SWD = _NS(name="oep.wire.swd", revision=1, target="ARM targets with an SWD debug port", op={"scan": 0x10, "attach": 0x11, "detach": 0x12, "connections": 0x13, "holds": 0x14}, lock_free={0x13, 0x14},
53
53
  tlv={"describe": {"max_connections": 0x40}, "scan": {"max_speed": 0x01, "targetsel": 0x02}, "attach": {"targetsel": 0x02, "reset": 0x04}, "attach_answer": {"target_id": 0x01}, "connections_answer": {"selected_target": 0x01}, "unavailable_payload": {"index": 0x40}, "unsupported_payload": {"index": 0x40}}, event={}, enum={"scan_kind": {"arm_adi": 0x02}, "attach_flags": {"dormant_woken": 0x04}, "features": {}, "attach_method": {"run": 0x00}, "pin_role": {"swdio": 0x01, "swclk": 0x02, "reset": 0x03}}, own={},
54
54
  line_names={}, names={})
55
55
  INTERFACES["oep.wire.swd"] = WIRE_SWD
@@ -94,6 +94,6 @@ FIXTURE_CAPTURE_GROUP = _NS(name="oep.fixture.capture-group", revision=1, target
94
94
  line_names={}, names={})
95
95
  INTERFACES["oep.fixture.capture-group"] = FIXTURE_CAPTURE_GROUP
96
96
  PROBE_CONFIG = _NS(name="oep.probe.config", revision=1, target=None, op={"get": 0x10, "set": 0x11, "save": 0x12, "erase": 0x13, "unset": 0x14, "state": 0x15, "network": 0x16}, lock_free={0x10, 0x15, 0x16},
97
- tlv={"describe": {"storage": 0x40, "setting": 0x41, "netif": 0x42}}, event={}, enum={"idle_mode": {"hi_z": 0x00, "pull_up": 0x01, "pull_down": 0x02, "output_low": 0x03, "output_high": 0x04}, "rvswd_rest_mode": {"auto": 0x00, "high": 0x01, "low": 0x02}, "ipv4_mode": {"dhcp": 0x00, "static": 0x01}, "network_state": {"off": 0x00, "connecting": 0x01, "up": 0x02, "waiting": 0x03}, "network_reason": {"none": 0x00, "not_found": 0x01, "auth": 0x02, "no_address": 0x03, "other": 0x04}, "setting_form": {"named": 0x00, "bytes": 0x01, "text": 0x02, "u32": 0x03, "ipv4": 0x04, "bool": 0x05}, "setting_flag": {"secret": 0x01, "restart": 0x02}, "storage_state": {"none": 0x00, "applied": 0x01, "unreadable": 0x02, "partial": 0x03}, "storage_unreadable": {"none": 0x00, "form": 0x01, "item": 0x02, "capacity": 0x03}}, own={},
98
- line_names={'swdio': 'the debug data line (2 wires: rvswd, swd) (Host only)', 'swclk': 'the debug clock line (2 wires: rvswd, swd) (Host only)', 'swio': 'the one debug wire (swio) (Host only)', 'rx': 'the fixture UART receive, wired to the target TX (Host only)', 'tx': 'the fixture UART transmit, wired to the target RX (Host only)', 'nrst': 'the target reset line (Host only)', 'power_hi': 'target power on when high (Host only)', 'power_lo': 'target power on when low (Host only)'}, names={'setting': {'label': 'key channel; text 1-32 bytes', 'idle': 'key channel; mode(u8)', 'disable': 'key channel; no data', 'passthrough': 'key port; fn(u16) rx(u16) baud(u32) format(u8)', 'console-passthrough': 'key port; wire_fn(u16) swdio(u16) swclk(u16) max_speed(u32) console_fn(u16) mechanism(u8)', 'wifi': 'key entry; ssid_len(u8) ssid pass_len(u8) passphrase; passphrase write-only', 'ipv4': 'key netif; mode(u8) address(4) prefix(u8) gateway(4) dns(4)', 'rvswd-rest': "key channel (the port's SWCLK); mode(u8): rvswd_rest_mode"}, 'netif': {'wifi': 'Wi-Fi station', 'ethernet': 'wired Ethernet'}})
97
+ tlv={"describe": {"storage": 0x40, "setting": 0x41, "netif": 0x42}}, event={}, enum={"idle_mode": {"hi_z": 0x00, "pull_up": 0x01, "pull_down": 0x02, "output_low": 0x03, "output_high": 0x04}, "rvswd_rest_mode": {"auto": 0x00, "high": 0x01, "low": 0x02}, "wire_hold_mode": {"off": 0x00, "on": 0x01}, "ipv4_mode": {"dhcp": 0x00, "static": 0x01}, "network_state": {"off": 0x00, "connecting": 0x01, "up": 0x02, "waiting": 0x03}, "network_reason": {"none": 0x00, "not_found": 0x01, "auth": 0x02, "no_address": 0x03, "other": 0x04}, "setting_form": {"named": 0x00, "bytes": 0x01, "text": 0x02, "u32": 0x03, "ipv4": 0x04, "bool": 0x05}, "setting_flag": {"secret": 0x01, "restart": 0x02}, "storage_state": {"none": 0x00, "applied": 0x01, "unreadable": 0x02, "partial": 0x03}, "storage_unreadable": {"none": 0x00, "form": 0x01, "item": 0x02, "capacity": 0x03}}, own={},
98
+ line_names={'swdio': 'the debug data line (2 wires: rvswd, swd) (Host only)', 'swclk': 'the debug clock line (2 wires: rvswd, swd) (Host only)', 'swio': 'the one debug wire (swio) (Host only)', 'rx': 'the fixture UART receive, wired to the target TX (Host only)', 'tx': 'the fixture UART transmit, wired to the target RX (Host only)', 'nrst': 'the target reset line (Host only)', 'power_hi': 'target power on when high (Host only)', 'power_lo': 'target power on when low (Host only)'}, names={'setting': {'label': 'key channel; text 1-32 bytes', 'idle': 'key channel; mode(u8)', 'disable': 'key channel; no data', 'passthrough': 'key port; fn(u16) rx(u16) baud(u32) format(u8)', 'console-passthrough': 'key port; wire_fn(u16) swdio(u16) swclk(u16) max_speed(u32) console_fn(u16) mechanism(u8)', 'wifi': 'key entry; ssid_len(u8) ssid pass_len(u8) passphrase; passphrase write-only', 'ipv4': 'key netif; mode(u8) address(4) prefix(u8) gateway(4) dns(4)', 'rvswd-rest': "key channel (the port's SWCLK); mode(u8): rvswd_rest_mode", 'wire-hold': "key channel (the port's SWDIO); mode(u8): wire_hold_mode"}, 'netif': {'wifi': 'Wi-Fi station', 'ethernet': 'wired Ethernet'}})
99
99
  INTERFACES["oep.probe.config"] = PROBE_CONFIG
@@ -188,7 +188,7 @@ class WireBase(Interface):
188
188
  """oep.wire.<link>: scan / attach / detach / connections (oep-if-debug §0-§2). The shared part; each link's attach
189
189
  takes its own arguments. A failed scan, attach or detach is completed failed with `status(u8) [TLV]` (common §3).
190
190
  attach names its pins in the fixed part (§1): `pins` None takes the wire's one candidate pair (candidate_pairs)."""
191
- SCAN, ATTACH, DETACH, CONNECTIONS = (_WIRE.op[k] for k in ("scan", "attach", "detach", "connections"))
191
+ SCAN, ATTACH, DETACH, CONNECTIONS, HOLDS = (_WIRE.op[k] for k in ("scan", "attach", "detach", "connections", "holds"))
192
192
  REVISION = 1
193
193
  TAG_RESET = _WIRE.tlv["attach"]["reset"] # channel(u16) hold_ms(u16), critical: attach under reset (§3)
194
194
  TAG_SCAN_MAX_SPEED = _WIRE.tlv["scan"]["max_speed"]
@@ -299,6 +299,19 @@ class WireBase(Interface):
299
299
  """Close the connection and its streams (oep-if-debug §2)."""
300
300
  self._call(self.DETACH, struct.pack("<I", conn))
301
301
 
302
+ def holds(self) -> list[tuple[tuple[int, int], int]]:
303
+ """The ports this wire holds at their rest after a close (oep-if-debug §2.2, lock-free; paged like connections):
304
+ [((swdio, swclk), rest)] - rest: rvswd's idle_clock value (0 high, 1 low), 0 on other wires. Not connections."""
305
+ out: list[tuple[tuple[int, int], int]] = []
306
+ while True:
307
+ rd = m.Reader(self._call(self.HOLDS, bytes([len(out)]), locked=False).payload)
308
+ more, count = rd.take("BB")
309
+ page = [((d, c), r) for d, c, r in (rd.take("HHB") for _ in range(count))]
310
+ rd.tail()
311
+ out += page
312
+ if not more or not count or len(out) > 0xFF:
313
+ return out
314
+
302
315
  def connections(self) -> list["ConnectionInfo"]:
303
316
  """The wire's live connections, in the order they were made (oep-if-debug §2.1, lock-free; paged: the request
304
317
  is first(u8), the answer more count entries [TLV], followed until more is 0). swd's selected_target TLVs
@@ -36,7 +36,7 @@ class Attachments(Dependencies):
36
36
  return bytes(page)
37
37
  def describe(self,fn):
38
38
  if fn==4:return (tlv(DC['ops'],pack_ops(set(COP.values()))),*(tlv(CD['mechanism'],name.encode()) for name in self.mechanisms))
39
- rows=[tlv(DC['ops'],pack_ops({WOP['attach'],WOP['detach'],WOP['connections']})),tlv(WT['describe']['max_connections'],b'\x02'),tlv(DC['min_clock_hz'],struct.pack('<I',1000))]
39
+ rows=[tlv(DC['ops'],pack_ops({WOP['attach'],WOP['detach'],WOP['connections'],WOP['holds']})),tlv(WT['describe']['max_connections'],b'\x02'),tlv(DC['min_clock_hz'],struct.pack('<I',1000))]
40
40
  for index,pair in enumerate(self.pairs[fn]):
41
41
  members=[(WE['pin_role']['swdio'],pair[0])] if fn==2 else [(WE['pin_role']['swdio'],pair[0]),(WE['pin_role']['swclk'],pair[1])]
42
42
  rows.append(tlv(DC['channel_group'],bytes((index,len(members)))+b''.join(struct.pack('<BH',*row) for row in members)))
@@ -79,6 +79,7 @@ class Attachments(Dependencies):
79
79
  def dispatch_request(self,fn,op,payload,tags):
80
80
  if fn<=3:
81
81
  if op==WOP['connections']:return self.connection_page(fn,payload[0])
82
+ if op==WOP['holds']:return b'\0\0'+extension() # no port held in this model (debug §2.2)
82
83
  if op==WOP['detach']:
83
84
  rid=struct.unpack('<I',payload)[0];self.resource(rid,'connection')
84
85
  if self.connections[rid]['fn']!=fn:raise Reject(R['unavailable'],cause('wrong_state'))
@@ -131,7 +132,7 @@ class AttachModel(DependencyModel):
131
132
  if len(request)>=6 and struct.unpack_from('<H',request,3)[0]==4:
132
133
  e.fixed={COP['open']:5,COP['read']:15,COP['marks']:8,COP['clear']:4,COP['mark']:5,COP['write']:6,COP['close']:4,COP['streams']:2};e.free={COP['read'],COP['marks'],COP['streams']}
133
134
  if request[5]==COP['write'] and len(request)>=16:e.fixed[COP['write']]=6+struct.unpack_from('<H',request,14)[0]
134
- else:e.fixed={WOP['attach']:9,WOP['detach']:4,WOP['connections']:1};e.free={WOP['connections']}
135
+ else:e.fixed={WOP['attach']:9,WOP['detach']:4,WOP['connections']:1,WOP['holds']:1};e.free={WOP['connections'],WOP['holds']}
135
136
  try:return self.ep.handle(request)
136
137
  finally:e.fixed,e.free=fixed,free
137
138
  def restart_fixture(self):
@@ -262,7 +262,7 @@ def _setting(name: str, keys: int, form: int = 0, max_len: int = 0, flags: int =
262
262
 
263
263
 
264
264
  def _config(fn: int, instance: int, storage: int = 4096, *, channels: int = 64, ports: int = 4, netifs=(), wifi_entries: int = 4,
265
- own=(), rvswd: bool = False) -> Offered:
265
+ own=(), rvswd: bool = False, hold: bool = True) -> Offered:
266
266
  """oep.probe.config's declarations (probe.config §4): the standard items label / idle / disable (keys: the
267
267
  channels), passthrough / console-passthrough (keys: the transports), with `netifs` (names) wifi / ipv4 and the
268
268
  network op; `own`: the probe's own items as (name, form, keys, max_len, flags) (§1.6). storage 0 = none - no storage
@@ -276,6 +276,8 @@ def _config(fn: int, instance: int, storage: int = 4096, *, channels: int = 64,
276
276
  settings.append(_setting("ipv4", len(netifs) + 1))
277
277
  if rvswd: # its automatic rest can be turned off per port (debug §3.1)
278
278
  settings.append(_setting("rvswd-rest", channels))
279
+ if hold: # a debug wire's hold after a close, per port (debug §2)
280
+ settings.append(_setting("wire-hold", channels))
279
281
  settings += [_setting(name, keys, form, max_len, flags) for name, form, keys, max_len, flags in own]
280
282
  return Offered(fn, instance, "oep.probe.config", ops_of("oep.probe.config", *drop)
281
283
  + ((catalog.u32(_CFG["storage"], storage),) if storage else ()) + tuple(settings)
@@ -24,7 +24,7 @@ class OepDeclarations(Resources):
24
24
 
25
25
  def describe(self, fn):
26
26
  if fn==4:return (tlv(DC['ops'],pack_ops(set(COP.values()))),tlv(CD['mechanism'],b'dmdata'))
27
- rows=[tlv(DC['ops'],pack_ops({WOP['attach'],WOP['detach'],WOP['connections']}))]
27
+ rows=[tlv(DC['ops'],pack_ops({WOP['attach'],WOP['detach'],WOP['connections'],WOP['holds']}))]
28
28
  if fn==1:rows.append(tlv(WT['describe']['max_connections'],b'\x02'))
29
29
  if fn==2:rows.append(tlv(DC['min_clock_hz'],struct.pack('<I',1000000)))
30
30
  role=WE['pin_role']
@@ -35,7 +35,7 @@ class OepDeclarations(Resources):
35
35
  return tuple(rows)
36
36
 
37
37
  def dispatch(self, fn, op, payload):
38
- if (fn!=4 and op==WOP['connections']) or (fn==4 and op==COP['streams']):return b'\0\0'+extension()
38
+ if (fn!=4 and op in (WOP['connections'],WOP['holds'])) or (fn==4 and op==COP['streams']):return b'\0\0'+extension()
39
39
  raise Reject(R['no_resource']) # declarations only: no simulated attach or target work
40
40
 
41
41
 
@@ -50,6 +50,6 @@ class OepDeclarationModel(ResourceModel):
50
50
  if len(request)>=6:
51
51
  fn=struct.unpack_from('<H',request,3)[0]
52
52
  if fn==4:e.fixed={COP['open']:5,COP['read']:15,COP['marks']:8,COP['clear']:4,COP['mark']:5,COP['write']:6,COP['close']:4,COP['streams']:2};e.free={COP['read'],COP['marks'],COP['streams']}
53
- else:e.fixed={WOP['attach']:9,WOP['detach']:4,WOP['connections']:1};e.free={WOP['connections']}
53
+ else:e.fixed={WOP['attach']:9,WOP['detach']:4,WOP['connections']:1,WOP['holds']:1};e.free={WOP['connections'],WOP['holds']}
54
54
  try:return super().handle(request)
55
55
  finally:e.fixed,e.free=fixed,free
@@ -8,7 +8,7 @@ from . import registry as _reg
8
8
  # Each interface's mandatory ops, by name (looked up in the registry: never literal numbers).
9
9
  _MANDATORY={
10
10
  'oep.probe.plan':('plan_apply','plan_release'),'oep.probe.restart':('restart',),'oep.probe.link':('source','sink'),
11
- **{w:('attach','detach','connections') for w in ('oep.wire.rvswd','oep.wire.swio','oep.wire.swd')},
11
+ **{w:('attach','detach','connections','holds') for w in ('oep.wire.rvswd','oep.wire.swio','oep.wire.swd')},
12
12
  'oep.target.riscv-dm':('dmi',),'oep.target.arm-adi':('transfer',),
13
13
  'oep.target.console':('open','read','close','streams'),
14
14
  'oep.fixture.gpio':('set','read'),'oep.fixture.uart':('configure','read','status'),
@@ -14,7 +14,7 @@ KIND = _reg.WIRE_RVSWD.enum["scan_kind"] | _reg.WIRE_SWD.enum["scan_kind"]
14
14
 
15
15
  class ScanOptions(WireOptions):
16
16
  def __init__(self,ep):super().__init__(ep);self.scan_limit=2;self.identities={};self.scan_live=set();self.scan_events=[]
17
- def describe(self,fn):return tuple(tlv(DC['ops'],pack_ops({WOP['scan'],WOP['attach'],WOP['detach'],WOP['connections']})) if fn<=3 and row[0]==DC['ops'] else row for row in super().describe(fn))
17
+ def describe(self,fn):return tuple(tlv(DC['ops'],pack_ops({WOP['scan'],WOP['attach'],WOP['detach'],WOP['connections'],WOP['holds']})) if fn<=3 and row[0]==DC['ops'] else row for row in super().describe(fn))
18
18
  def request_tags(self,fn,op,data):
19
19
  if fn>3 or op!=WOP['scan']:return super().request_tags(fn,op,data)
20
20
  known={SC['max_speed']:4}
@@ -266,6 +266,7 @@ op = [
266
266
  { code = 0x11, name = "attach", lock = true },
267
267
  { code = 0x12, name = "detach", lock = true },
268
268
  { code = 0x13, name = "connections", lock = false }, # first(u8) -> more, count x entry
269
+ { code = 0x14, name = "holds", lock = false }, # first(u8) -> more, count x (swdio, swclk, rest): ports held after close (debug §2.2)
269
270
  ]
270
271
 
271
272
  [interface.tlv.describe]
@@ -322,6 +323,7 @@ op = [
322
323
  { code = 0x11, name = "attach", lock = true },
323
324
  { code = 0x12, name = "detach", lock = true },
324
325
  { code = 0x13, name = "connections", lock = false },
326
+ { code = 0x14, name = "holds", lock = false },
325
327
  ]
326
328
 
327
329
  [interface.tlv.describe]
@@ -365,6 +367,7 @@ op = [
365
367
  { code = 0x11, name = "attach", lock = true },
366
368
  { code = 0x12, name = "detach", lock = true },
367
369
  { code = 0x13, name = "connections", lock = false },
370
+ { code = 0x14, name = "holds", lock = false },
368
371
  ]
369
372
 
370
373
  [interface.tlv.describe]
@@ -805,6 +808,7 @@ console-passthrough = "key port; wire_fn(u16) swdio(u16) swclk(u16) max_speed(u3
805
808
  wifi = "key entry; ssid_len(u8) ssid pass_len(u8) passphrase; passphrase write-only"
806
809
  ipv4 = "key netif; mode(u8) address(4) prefix(u8) gateway(4) dns(4)"
807
810
  rvswd-rest = "key channel (the port's SWCLK); mode(u8): rvswd_rest_mode"
811
+ wire-hold = "key channel (the port's SWDIO); mode(u8): wire_hold_mode"
808
812
  [interface.line_names] # Host conventions only (host-development-guide §5.3)
809
813
  swdio = "the debug data line (2 wires: rvswd, swd) (Host only)"
810
814
  swclk = "the debug clock line (2 wires: rvswd, swd) (Host only)"
@@ -827,6 +831,9 @@ ethernet = "wired Ethernet"
827
831
  auto = 0 # the probe's automatic choice from target_id (also when no item)
828
832
  high = 1
829
833
  low = 2
834
+ [interface.enum.wire_hold_mode] # wire-hold: the debug wire's lines held at their rest after a close (oep-if-debug §2)
835
+ off = 0
836
+ on = 1 # also when no item
830
837
  [interface.enum.ipv4_mode]
831
838
  dhcp = 0
832
839
  static = 1
@@ -118,7 +118,7 @@ def test_describe_and_a_probe_without_storage():
118
118
  ep, hst = open_bench()
119
119
  d = config.ProbeConfig(hst).describe()
120
120
  assert d.storage_bytes == 4096 and d.items == ["label", "idle", "disable", "passthrough", "console-passthrough",
121
- "rvswd-rest"]
121
+ "rvswd-rest", "wire-hold"]
122
122
  probe = virtual_bench.VirtualProbe("no-storage", 1024, [virtual_bench._config(o.fn, 0, storage=0)
123
123
  if o.name == "oep.probe.config" else o for o in virtual_bench.p4_bench().offered])
124
124
  ep = endpoint.Endpoint(probe, Clock())
@@ -91,7 +91,8 @@ def test_scan_is_optional_and_the_mechanisms_are_counted():
91
91
 
92
92
 
93
93
  def test_future_registry_mandatory_op_is_not_silently_ignored():
94
- _,c=setup();c.reg['interface'][0]['op'].append({'name':'future_required','code':20})
94
+ _,c=setup();ops=c.reg['interface'][0]['op']
95
+ ops.append({'name':'future_required','code':max(o['code'] for o in ops)+1}) # a code no probe offers yet
95
96
  assert OepDeclarationChecks(c,SELECTION).run()['status']=='failed'
96
97
 
97
98
 
@@ -131,6 +131,7 @@ def drive_wire_dm_console(hst, wire_name):
131
131
  wire.scan()
132
132
  conn, _ = wire.attach(halt=True)
133
133
  wire.connections()
134
+ wire.holds() # debug §2.2, lock-free
134
135
  dm = riscv.RiscvDm(hst, conn)
135
136
  dm.dmi([dm.step_read(0x11)])
136
137
  dm.halt()
@@ -619,7 +619,7 @@ def test_every_op_but_connections_needs_the_lock_and_two_connections_share_one_l
619
619
  c0 = struct.unpack_from("<I", attach(hv, p0).payload)[0]
620
620
  c1 = struct.unpack_from("<I", attach(hv, p1).payload)[0]
621
621
  for op in W.values():
622
- if op != W["connections"]:
622
+ if op not in (W["connections"], W["holds"]): # both lock-free (debug §2.1, §2.2)
623
623
  r = hv.raw(1, op, fixed(ep.pairs[1][2]), session=False)
624
624
  assert (r.resolution, r.detail) == (m.REJECTED, m.SESSION_REQUIRED), op
625
625
  for op in RV.values():
@@ -0,0 +1,59 @@
1
+ """debug §2: a connection closed other than by line loss leaves its lines held at its rest (a CH32L103 keeps its
2
+ halt across processes); probe.config wire-hold turns it off per port; holds (§2.2) lists the held ports; the hold is a
3
+ kind of free state - taken like a free pin, never refused for it."""
4
+ import time
5
+
6
+ import pytest
7
+
8
+ from oep_client import config, core, endpoint, host as h, riscv, virtual_bench
9
+
10
+
11
+ def bench():
12
+ start = time.monotonic()
13
+ ep = endpoint.Endpoint(virtual_bench.p4_x035(), lambda: int((time.monotonic() - start) * 1000))
14
+ hst = h.Host(ep.handle)
15
+ core.take(hst, 10000)
16
+ fn = core.find(hst, "oep.wire.rvswd")
17
+ (pair,) = [p for (f, p) in ep.targets if f == fn]
18
+ ep.targets[(fn, pair)].needs_drive = True # a CH32L103: the halt goes once the line is not driven
19
+ return ep, hst, riscv.Wire(hst, "oep.wire.rvswd"), pair
20
+
21
+
22
+ def halt_then_end(ep, hst, wire, pair):
23
+ conn, _ = wire.attach(halt=True, pins=pair)
24
+ hst.end() # the process ends: its connection closes (core §9)
25
+ core.take(hst, 10000)
26
+
27
+
28
+ def test_the_halt_survives_another_session_by_default():
29
+ ep, hst, wire, pair = bench()
30
+ halt_then_end(ep, hst, wire, pair)
31
+ assert [p for p, _ in wire.holds()] == [pair]
32
+ assert wire.connections() == [] # a hold is no connection
33
+ wire.attach(halt=False, pins=pair) # taken like a free pin (never cause 1 / 5)
34
+ assert wire.halted is False and ep.targets[(core.find(hst, "oep.wire.rvswd"), pair)].halted
35
+ assert wire.holds() == [] # the taker carries on
36
+
37
+
38
+ def test_wire_hold_off_lets_the_lines_go_and_the_target_loses_its_halt():
39
+ ep, hst, wire, pair = bench()
40
+ config.ProbeConfig(hst).set([config.WireHold(channel=pair[0], mode="off")])
41
+ assert config.WireHold(channel=pair[0], mode="off") in config.ProbeConfig(hst).items()
42
+ halt_then_end(ep, hst, wire, pair)
43
+ assert wire.holds() == []
44
+ assert not ep.targets[(core.find(hst, "oep.wire.rvswd"), pair)].halted
45
+
46
+
47
+ def test_a_lost_line_is_not_held():
48
+ ep, hst, wire, pair = bench()
49
+ wire.attach(halt=True, pins=pair)
50
+ ep.lose()
51
+ assert wire.holds() == []
52
+
53
+
54
+ def test_an_idle_item_on_a_held_pin_ends_the_hold():
55
+ ep, hst, wire, pair = bench()
56
+ halt_then_end(ep, hst, wire, pair)
57
+ assert wire.holds()
58
+ config.ProbeConfig(hst).set([config.Idle(channel=pair[1], mode="pull-down")])
59
+ assert wire.holds() == []
@@ -0,0 +1 @@
1
+ bc523272c4b90bc3593cf524dd8ab65f628466aa
@@ -1,5 +1,5 @@
1
- 79e50bedcaaecae9ec692418a1f44d5c7d32f2c005917f2c46d9b073bf866630 src/oep_client/registry.py
2
- 66b19f04290391f363330fa672edb63e59045b217f0af0ea9c8f5ed7f08ffeaf tests/spec/oep-v1.toml
1
+ f329daad8ca30b9e08b83e393e05c0cf1224a44b3d972f90017dae656224d6a2 src/oep_client/registry.py
2
+ 32b9f952338089a5d0cd6bd07192b854f7942816e3b88a9838468c3b0e4d84fc tests/spec/oep-v1.toml
3
3
  546ddf20d11b86faa23afe2fa1e3c38c514c157db4d5a5c8d92edf48647d61f1 tests/vectors/checks.json
4
4
  9950576fcf803299386d0b2e61bf154402f306102311312d49dec6a87a34ced5 tests/vectors/cobs.json
5
5
  c981ca124e3393ba68ce3ce3ee92970827f399202c7688bb6e02b66bb6190806 tests/vectors/confirm.json
@@ -1 +0,0 @@
1
- ba4e8ee9a3ae21dda84938dd793544b9f72ad768