oep-client-python 0.0.54__tar.gz → 0.0.55__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (747) hide show
  1. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/CHANGELOG.md +65 -0
  2. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/PKG-INFO +13 -1
  3. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/README.ja.md +9 -0
  4. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/README.md +9 -0
  5. oep_client_python-0.0.55/docs/pytest.ja.md +97 -0
  6. oep_client_python-0.0.55/docs/pytest.md +101 -0
  7. oep_client_python-0.0.55/docs/swd.ja.md +173 -0
  8. oep_client_python-0.0.55/docs/swd.md +179 -0
  9. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/pyproject.toml +6 -2
  10. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/__init__.py +1 -1
  11. oep_client_python-0.0.55/src/oep_client/brokers.py +149 -0
  12. oep_client_python-0.0.55/src/oep_client/gdb_server.py +528 -0
  13. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/host.py +4 -1
  14. oep_client_python-0.0.55/src/oep_client/ide.py +341 -0
  15. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/link.py +27 -4
  16. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/pyserial/protocol_oep.py +2 -2
  17. oep_client_python-0.0.55/src/oep_client/pytest_plugin.py +433 -0
  18. oep_client_python-0.0.54/src/oep_client/rp2040_peer.py → oep_client_python-0.0.55/src/oep_client/rp2040_swd.py +11 -77
  19. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/virtual_bench.py +1 -1
  20. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_mdns.py +9 -4
  21. oep_client_python-0.0.55/tests/test_brokers.py +128 -0
  22. oep_client_python-0.0.55/tests/test_gdb_server.py +202 -0
  23. oep_client_python-0.0.55/tests/test_ide.py +151 -0
  24. oep_client_python-0.0.55/tests/test_pytest_plugin.py +149 -0
  25. oep_client_python-0.0.54/tests/test_rp2040_peer.py → oep_client_python-0.0.55/tests/test_rp2040_swd.py +3 -8
  26. oep_client_python-0.0.54/src/oep_client/pytest_rp2040_peer.py +0 -68
  27. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/.gitignore +0 -0
  28. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/LICENSE +0 -0
  29. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/README.ja.md +0 -0
  30. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/allocator-conformance.ja.md +0 -0
  31. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/analog-conformance.ja.md +0 -0
  32. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/analog-payload-conformance.ja.md +0 -0
  33. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/arm-adi-conformance.ja.md +0 -0
  34. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/attach-conformance.ja.md +0 -0
  35. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/block-conformance.ja.md +0 -0
  36. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/capture-group-conformance.ja.md +0 -0
  37. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/capture-group-geometry-conformance.ja.md +0 -0
  38. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/capture-metadata-conformance.ja.md +0 -0
  39. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/capture-serial-conformance.ja.md +0 -0
  40. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/capture-timeline-conformance.ja.md +0 -0
  41. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/capture-timeline-lifecycle-conformance.ja.md +0 -0
  42. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/clock-conformance.ja.md +0 -0
  43. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/config-conformance.ja.md +0 -0
  44. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/config-execution-conformance.ja.md +0 -0
  45. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/config-fallback-conformance.ja.md +0 -0
  46. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/config-paging-conformance.ja.md +0 -0
  47. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/config-power-loss-conformance.ja.md +0 -0
  48. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/config-storage-conformance.ja.md +0 -0
  49. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/conformance-checks.ja.md +0 -0
  50. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/conformance-spec-compatibility.ja.md +0 -0
  51. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/core-fixed-fields-review.ja.md +0 -0
  52. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/core-smoke-conformance.ja.md +0 -0
  53. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/corr-conformance.ja.md +0 -0
  54. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/cut-conformance.ja.md +0 -0
  55. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/data-conformance.ja.md +0 -0
  56. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/debug-conformance.ja.md +0 -0
  57. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/dependency-conformance.ja.md +0 -0
  58. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/discovery-conformance.ja.md +0 -0
  59. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/dmseq-conformance.ja.md +0 -0
  60. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/dmseq-target-conformance.ja.md +0 -0
  61. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/execution-order-conformance.ja.md +0 -0
  62. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/exhausted-conformance.ja.md +0 -0
  63. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/fixture-metadata-conformance.ja.md +0 -0
  64. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/gpio-conformance.ja.md +0 -0
  65. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/gpio-lifecycle-conformance.ja.md +0 -0
  66. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/hardware-configuration.ja.md +0 -0
  67. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/hardware-quickstart.ja.md +0 -0
  68. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/hardware-schema.ja.md +0 -0
  69. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/host-core-shapes-conformance.ja.md +0 -0
  70. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/host-deadline-conformance.ja.md +0 -0
  71. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/host-notification-conformance.ja.md +0 -0
  72. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/host-request-conformance.ja.md +0 -0
  73. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/host-resend-conformance.ja.md +0 -0
  74. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/host-tlv-conformance.ja.md +0 -0
  75. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/host-value-conformance.ja.md +0 -0
  76. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/host-wait-conformance.ja.md +0 -0
  77. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/i2c-conformance.ja.md +0 -0
  78. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/interface-conformance.ja.md +0 -0
  79. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/interface-smoke-conformance.ja.md +0 -0
  80. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/lease-conformance.ja.md +0 -0
  81. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/link-routes-conformance.ja.md +0 -0
  82. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/link-transfer-conformance.ja.md +0 -0
  83. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/logic-conformance.ja.md +0 -0
  84. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/mailbox-conformance.ja.md +0 -0
  85. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/notification-output-sample.ja.md +0 -0
  86. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/notification-retention-conformance.ja.md +0 -0
  87. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/notification-sequence-conformance.ja.md +0 -0
  88. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/oep-declaration-conformance.ja.md +0 -0
  89. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/oep-example-smoke-conformance.ja.md +0 -0
  90. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/outcome-conformance.ja.md +0 -0
  91. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/pin-constraints-conformance.ja.md +0 -0
  92. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/pipeline-conformance.ja.md +0 -0
  93. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/port-speed-conformance.ja.md +0 -0
  94. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/probe-input-conformance.ja.md +0 -0
  95. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/recovery-conformance.ja.md +0 -0
  96. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/recovery-races-conformance.ja.md +0 -0
  97. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/refusal-order-conformance.ja.md +0 -0
  98. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/registered-ops-conformance.ja.md +0 -0
  99. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/replay-pressure-conformance.ja.md +0 -0
  100. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/reset-conformance.ja.md +0 -0
  101. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/resource-conformance.ja.md +0 -0
  102. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/response-race-conformance.ja.md +0 -0
  103. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/restart-conformance.ja.md +0 -0
  104. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/retention-conformance.ja.md +0 -0
  105. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/retention-lifecycle-conformance.ja.md +0 -0
  106. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/retry-conformance.ja.md +0 -0
  107. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/route-conformance.ja.md +0 -0
  108. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/run-conformance.ja.md +0 -0
  109. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/scan-conformance.ja.md +0 -0
  110. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/scan-options-conformance.ja.md +0 -0
  111. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/selected-metadata-conformance.ja.md +0 -0
  112. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/session-loss-conformance.ja.md +0 -0
  113. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/session-smoke-conformance.ja.md +0 -0
  114. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/spec-follow-notes.ja.md +0 -0
  115. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/spi-conformance.ja.md +0 -0
  116. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/step-conformance.ja.md +0 -0
  117. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/stream-conformance.ja.md +0 -0
  118. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/subscription-conformance.ja.md +0 -0
  119. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/tcp-recovery-conformance.ja.md +0 -0
  120. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/testing-consumers.ja.md +0 -0
  121. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/testing-policy.ja.md +0 -0
  122. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/tlv-request-conformance.ja.md +0 -0
  123. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/trace/README.ja.md +0 -0
  124. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/trace/capture.json +0 -0
  125. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/trace/common.json +0 -0
  126. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/trace/console.json +0 -0
  127. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/trace/core.json +0 -0
  128. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/trace/debug.json +0 -0
  129. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/trace/fixture.json +0 -0
  130. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/trace/link.json +0 -0
  131. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/trace/plan.json +0 -0
  132. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/trace/restart.json +0 -0
  133. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/trace/transports.json +0 -0
  134. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/uart-conformance.ja.md +0 -0
  135. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/uart-stream-conformance.ja.md +0 -0
  136. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/usb-conformance.ja.md +0 -0
  137. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/wire-options-conformance.ja.md +0 -0
  138. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/docs/writer-lease-conformance.ja.md +0 -0
  139. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/__main__.py +0 -0
  140. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/acquire.py +0 -0
  141. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/arm.py +0 -0
  142. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/call.py +0 -0
  143. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/capture.py +0 -0
  144. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/capture_blocks.py +0 -0
  145. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/catalog.py +0 -0
  146. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/ch32_flash.py +0 -0
  147. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/cobs.py +0 -0
  148. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/__init__.py +0 -0
  149. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/allocator.py +0 -0
  150. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/allocator_model.py +0 -0
  151. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/allocator_sample.py +0 -0
  152. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/analog.py +0 -0
  153. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/analog_model.py +0 -0
  154. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/analog_payload.py +0 -0
  155. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/analog_sample.py +0 -0
  156. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/arm_adi.py +0 -0
  157. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/arm_adi_blocks.py +0 -0
  158. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/arm_adi_model.py +0 -0
  159. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/arm_adi_sample.py +0 -0
  160. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/attach.py +0 -0
  161. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/attach_model.py +0 -0
  162. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/attach_sample.py +0 -0
  163. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/block_model.py +0 -0
  164. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/block_sample.py +0 -0
  165. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/blocks.py +0 -0
  166. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_group.py +0 -0
  167. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_group_geometry.py +0 -0
  168. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_group_geometry_model.py +0 -0
  169. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_group_model.py +0 -0
  170. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_group_sample.py +0 -0
  171. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_metadata.py +0 -0
  172. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_metadata_model.py +0 -0
  173. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_serial.py +0 -0
  174. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_serial_sample.py +0 -0
  175. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_timeline.py +0 -0
  176. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_timeline_lifecycle.py +0 -0
  177. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_timeline_model.py +0 -0
  178. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/capture_timeline_sample.py +0 -0
  179. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/clock.py +0 -0
  180. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/clock_model.py +0 -0
  181. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/clock_sample.py +0 -0
  182. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/core_fixed_fields.py +0 -0
  183. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/core_smoke.py +0 -0
  184. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/corr.py +0 -0
  185. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/cut.py +0 -0
  186. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/cut_model.py +0 -0
  187. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/cut_sample.py +0 -0
  188. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/data.py +0 -0
  189. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/data_model.py +0 -0
  190. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/data_sample.py +0 -0
  191. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/debug.py +0 -0
  192. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/debug_model.py +0 -0
  193. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/debug_sample.py +0 -0
  194. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/declaration_model.py +0 -0
  195. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/dependencies.py +0 -0
  196. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/dependency_model.py +0 -0
  197. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/dependency_sample.py +0 -0
  198. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/discovery.py +0 -0
  199. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq.py +0 -0
  200. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq_model.py +0 -0
  201. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq_sample.py +0 -0
  202. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq_target.py +0 -0
  203. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq_target_model.py +0 -0
  204. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/dmseq_target_sample.py +0 -0
  205. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/execution_order.py +0 -0
  206. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/execution_order_sample.py +0 -0
  207. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/exhausted.py +0 -0
  208. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/exhausted_sample.py +0 -0
  209. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/fixture_metadata.py +0 -0
  210. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/fixture_metadata_model.py +0 -0
  211. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/force_hw.py +0 -0
  212. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio.py +0 -0
  213. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio_lifecycle.py +0 -0
  214. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio_lifecycle_model.py +0 -0
  215. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio_lifecycle_sample.py +0 -0
  216. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio_model.py +0 -0
  217. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/gpio_sample.py +0 -0
  218. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_core.py +0 -0
  219. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_core_sample.py +0 -0
  220. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_deadline.py +0 -0
  221. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_deadline_sample.py +0 -0
  222. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_notifications.py +0 -0
  223. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_notifications_sample.py +0 -0
  224. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_request_sample.py +0 -0
  225. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_requests.py +0 -0
  226. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_resend.py +0 -0
  227. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_resend_sample.py +0 -0
  228. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_tlv.py +0 -0
  229. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_tlv_sample.py +0 -0
  230. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_values.py +0 -0
  231. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_values_sample.py +0 -0
  232. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_wait.py +0 -0
  233. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/host_wait_sample.py +0 -0
  234. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/i2c.py +0 -0
  235. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/i2c_model.py +0 -0
  236. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/i2c_sample.py +0 -0
  237. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/interface_smoke.py +0 -0
  238. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/interfaces.py +0 -0
  239. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/lease.py +0 -0
  240. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/lease_sample.py +0 -0
  241. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/link_routes.py +0 -0
  242. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/link_routes_model.py +0 -0
  243. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/link_routes_sample.py +0 -0
  244. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/link_transfer_model.py +0 -0
  245. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/link_transfer_sample.py +0 -0
  246. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/link_transfers.py +0 -0
  247. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/logic.py +0 -0
  248. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/logic_model.py +0 -0
  249. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/logic_sample.py +0 -0
  250. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/mailbox.py +0 -0
  251. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/mailbox_model.py +0 -0
  252. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/mailbox_sample.py +0 -0
  253. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/notification_model.py +0 -0
  254. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/notification_retention.py +0 -0
  255. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/notification_retention_sample.py +0 -0
  256. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/notification_sequence.py +0 -0
  257. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/notification_sequence_sample.py +0 -0
  258. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/notify_hw.py +0 -0
  259. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/oep_declaration_model.py +0 -0
  260. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/oep_declarations.py +0 -0
  261. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/oep_smoke.py +0 -0
  262. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/outcome_model.py +0 -0
  263. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/outcome_sample.py +0 -0
  264. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/outcomes.py +0 -0
  265. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/pipeline.py +0 -0
  266. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/pipeline_model.py +0 -0
  267. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/pipeline_sample.py +0 -0
  268. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed.py +0 -0
  269. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_execution.py +0 -0
  270. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_execution_model.py +0 -0
  271. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_execution_sample.py +0 -0
  272. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_lifecycle.py +0 -0
  273. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_model.py +0 -0
  274. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/port_speed_sample.py +0 -0
  275. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/probe_input.py +0 -0
  276. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/probe_input_sample.py +0 -0
  277. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/recovery.py +0 -0
  278. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/recovery_race_sample.py +0 -0
  279. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/recovery_races.py +0 -0
  280. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/recovery_sample.py +0 -0
  281. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/refusal_order.py +0 -0
  282. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/refusal_order_sample.py +0 -0
  283. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/registered_ops.py +0 -0
  284. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/registered_ops_model.py +0 -0
  285. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/release_hw.py +0 -0
  286. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/replay_pressure.py +0 -0
  287. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/reset.py +0 -0
  288. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/reset_model.py +0 -0
  289. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/reset_sample.py +0 -0
  290. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/resource_model.py +0 -0
  291. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/resource_sample.py +0 -0
  292. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/resources.py +0 -0
  293. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/response_race.py +0 -0
  294. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/response_race_sample.py +0 -0
  295. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/restart.py +0 -0
  296. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/restart_model.py +0 -0
  297. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/restart_sample.py +0 -0
  298. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/retention.py +0 -0
  299. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/retention_lifecycle.py +0 -0
  300. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/retention_lifecycle_sample.py +0 -0
  301. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/retention_model.py +0 -0
  302. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/retention_sample.py +0 -0
  303. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/retry.py +0 -0
  304. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/retry_model.py +0 -0
  305. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/retry_sample.py +0 -0
  306. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/route_model.py +0 -0
  307. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/route_sample.py +0 -0
  308. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/routes.py +0 -0
  309. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/run.py +0 -0
  310. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/run_model.py +0 -0
  311. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/run_sample.py +0 -0
  312. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/scan.py +0 -0
  313. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/scan_model.py +0 -0
  314. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/scan_options.py +0 -0
  315. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/scan_options_model.py +0 -0
  316. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/scan_options_sample.py +0 -0
  317. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/scan_sample.py +0 -0
  318. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/selected_metadata.py +0 -0
  319. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/selected_metadata_model.py +0 -0
  320. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/serial.py +0 -0
  321. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/session_loss.py +0 -0
  322. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/session_loss_sample.py +0 -0
  323. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/session_smoke.py +0 -0
  324. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/spi.py +0 -0
  325. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/spi_model.py +0 -0
  326. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/spi_sample.py +0 -0
  327. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/step.py +0 -0
  328. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/step_model.py +0 -0
  329. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/step_sample.py +0 -0
  330. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/stream.py +0 -0
  331. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/stream_model.py +0 -0
  332. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/stream_sample.py +0 -0
  333. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/subscription_sample.py +0 -0
  334. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/subscriptions.py +0 -0
  335. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/tcp.py +0 -0
  336. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/tcp_peers.py +0 -0
  337. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/tcp_recovery.py +0 -0
  338. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/tcp_recovery_sample.py +0 -0
  339. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/tlv_request_model.py +0 -0
  340. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/tlv_requests.py +0 -0
  341. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/uart.py +0 -0
  342. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/uart_model.py +0 -0
  343. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/uart_sample.py +0 -0
  344. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/uart_stream.py +0 -0
  345. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/uart_stream_sample.py +0 -0
  346. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/usb.py +0 -0
  347. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/usb_cases.py +0 -0
  348. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/usb_hw.py +0 -0
  349. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/usb_model.py +0 -0
  350. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/wire_options.py +0 -0
  351. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/wire_options_model.py +0 -0
  352. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/wire_options_sample.py +0 -0
  353. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/writer_lease.py +0 -0
  354. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/writer_lease_model.py +0 -0
  355. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/conformance/writer_lease_sample.py +0 -0
  356. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/console.py +0 -0
  357. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/core.py +0 -0
  358. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/discovery.py +0 -0
  359. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/dump.py +0 -0
  360. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/endpoint.py +0 -0
  361. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/fixture.py +0 -0
  362. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/frames.py +0 -0
  363. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/hardware.py +0 -0
  364. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/hid_stream.py +0 -0
  365. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/interfaces.py +0 -0
  366. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/kept_session.py +0 -0
  367. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/linktest.py +0 -0
  368. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/memo.py +0 -0
  369. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/message.py +0 -0
  370. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/names.py +0 -0
  371. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/pins.py +0 -0
  372. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/probe_log.py +0 -0
  373. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/pyserial/__init__.py +0 -0
  374. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/pytest_conformance.py +0 -0
  375. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/registry.py +0 -0
  376. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/riscv.py +0 -0
  377. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/rp2040.py +0 -0
  378. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/rp2350.py +0 -0
  379. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/settings.py +0 -0
  380. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/speed_record.py +0 -0
  381. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/stimulus.py +0 -0
  382. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/targets.py +0 -0
  383. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/uiapduino.py +0 -0
  384. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/usb_stream.py +0 -0
  385. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_capture.py +0 -0
  386. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_serial.py +0 -0
  387. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_serve.py +0 -0
  388. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_trigger.py +0 -0
  389. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/virtual_bench_usb.py +0 -0
  390. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/virtual_core.py +0 -0
  391. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/virtual_fixture_drive.py +0 -0
  392. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/src/oep_client/virtual_names.py +0 -0
  393. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/conftest.py +0 -0
  394. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/equipment/.env.example +0 -0
  395. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/equipment/test_core_contract.py +0 -0
  396. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/equipment/test_preflight.py +0 -0
  397. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/fixtures/hardware.virtual.toml +0 -0
  398. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/.env.example +0 -0
  399. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/.env.virtual.example +0 -0
  400. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/README.ja.md +0 -0
  401. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/README.md +0 -0
  402. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/__init__.py +0 -0
  403. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/boards.py +0 -0
  404. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/conftest.py +0 -0
  405. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/firmware.py +0 -0
  406. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/flash.py +0 -0
  407. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/hardware.example.toml +0 -0
  408. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/hardware.resolved.example.toml +0 -0
  409. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/record.py +0 -0
  410. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/.gitignore +0 -0
  411. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.26+5bafb92-0.0.26.json +0 -0
  412. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.26+654b06a-0.0.26.json +0 -0
  413. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.27+ec1df99-0.0.27.json +0 -0
  414. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32+1491c13-0.0.31-20261016T133559.json +0 -0
  415. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32+672bf7b-0.0.32-20261016T164655.json +0 -0
  416. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131458.json +0 -0
  417. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131510.json +0 -0
  418. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131526.json +0 -0
  419. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131532.json +0 -0
  420. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131656.json +0 -0
  421. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131703.json +0 -0
  422. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131708.json +0 -0
  423. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132050.json +0 -0
  424. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132057.json +0 -0
  425. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132104.json +0 -0
  426. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T160307.json +0 -0
  427. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T161655.json +0 -0
  428. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.37+1031feb-0.0.37-20261023T214002.json +0 -0
  429. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.38+7c158ff-0.0.38-20261027T081156.json +0 -0
  430. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+1ad47c7-0.0.39-20261027T182907.json +0 -0
  431. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+2c0c41f-0.0.39-20261027T174907.json +0 -0
  432. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+9317805-0.0.39-20261027T191153.json +0 -0
  433. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+a75fd45-0.0.39-20261027T205055.json +0 -0
  434. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201038.json +0 -0
  435. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201057.json +0 -0
  436. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201058.json +0 -0
  437. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896-0.0.39-20261027T201059.json +0 -0
  438. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+ca5f896__crash_at_2106_s_-0.0.39-20261027T204608.json +0 -0
  439. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T190815.json +0 -0
  440. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/9489dd2ae0953650-0.0.39+d4d323c-0.0.39-20261028T191854.json +0 -0
  441. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181116.json +0 -0
  442. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T181812.json +0 -0
  443. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+1ad47c7-0.0.39-20261027T182903.json +0 -0
  444. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+62463f2-0.0.39-20261029T145541.json +0 -0
  445. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+9317805-0.0.39-20261027T191150.json +0 -0
  446. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+a75fd45-0.0.39-20261028T190803.json +0 -0
  447. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T191727.json +0 -0
  448. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+b7fbdf9-0.0.39-20261027T204611.json +0 -0
  449. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191811.json +0 -0
  450. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.39+bb371fb-0.0.39-20261028T191849.json +0 -0
  451. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.44+34c0b0b-0.0.44-20261104T190820.json +0 -0
  452. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-0.0.44+34c0b0b-0.0.44-20261104T190903.json +0 -0
  453. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/e8f60ae84e28-unknown-0.0.44-20261104T190857.json +0 -0
  454. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+4fad559-0.0.26.json +0 -0
  455. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+5bafb92-0.0.26.json +0 -0
  456. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+1491c13-0.0.31-20261016T133501.json +0 -0
  457. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+672bf7b-0.0.32-20261016T164559.json +0 -0
  458. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T130922.json +0 -0
  459. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T131024.json +0 -0
  460. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+12e1222-0.0.37-20261023T214016.json +0 -0
  461. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+f8ac55a-0.0.36-20261022T160134.json +0 -0
  462. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.37+1031feb-0.0.37-20261023T214230.json +0 -0
  463. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.38+7c158ff-0.0.38-20261027T081159.json +0 -0
  464. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+2c0c41f-0.0.39-20261027T174933.json +0 -0
  465. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+9317805-0.0.39-20261027T191154.json +0 -0
  466. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+b7fbdf9-0.0.39-20261027T204617.json +0 -0
  467. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.39+bb371fb-0.0.39-20261028T191816.json +0 -0
  468. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.25-0.0.26.json +0 -0
  469. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+5bafb92-0.0.26.json +0 -0
  470. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+654b06a-0.0.26.json +0 -0
  471. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+e877631-0.0.26.json +0 -0
  472. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ac80e07-0.0.27.json +0 -0
  473. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ec1df99-0.0.27.json +0 -0
  474. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27-0.0.27.json +0 -0
  475. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.28-0.0.28.json +0 -0
  476. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T220718.json +0 -0
  477. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T221106.json +0 -0
  478. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220856.json +0 -0
  479. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220901.json +0 -0
  480. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220915.json +0 -0
  481. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.26.json +0 -0
  482. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.37-20261023T214102.json +0 -0
  483. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.39-20261028T190818.json +0 -0
  484. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+5bafb92-0.0.26.json +0 -0
  485. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+654b06a-0.0.26.json +0 -0
  486. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e31108-0.0.44+34c0b0b-0.0.44-20261104T190941.json +0 -0
  487. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+5bafb92-0.0.26.json +0 -0
  488. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+654b06a-0.0.26.json +0 -0
  489. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e343c6-0.0.27+ec1df99-0.0.27.json +0 -0
  490. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28+ffe4eb1-0.0.28.json +0 -0
  491. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28-0.0.28.json +0 -0
  492. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+0f013b7-0.0.28.json +0 -0
  493. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+1c940ca-0.0.28.json +0 -0
  494. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+4ef21db+4ef21db-dirty-0.0.28.json +0 -0
  495. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+68d9694-0.0.28.json +0 -0
  496. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ec38b1d-0.0.28.json +0 -0
  497. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ffe4eb1-0.0.28.json +0 -0
  498. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28-0.0.28.json +0 -0
  499. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.36+f8ac55a-0.0.36-20261022T160503.json +0 -0
  500. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.37+1031feb-0.0.37-20261023T214005.json +0 -0
  501. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081145.json +0 -0
  502. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.38+7c158ff-0.0.38-20261027T081152.json +0 -0
  503. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T180716.json +0 -0
  504. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T182855.json +0 -0
  505. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+1ad47c7-0.0.39-20261027T183107.json +0 -0
  506. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f-0.0.39-20261027T174908.json +0 -0
  507. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_18_s_-0.0.39-20261027T175743.json +0 -0
  508. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_18_s_-0.0.39-20261027T175815.json +0 -0
  509. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_33_s_-0.0.39-20261027T175634.json +0 -0
  510. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+2c0c41f__task-wdt_at_431_s_-0.0.39-20261027T175709.json +0 -0
  511. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+62463f2-0.0.39-20261029T145536.json +0 -0
  512. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+7445bee-0.0.39-20261027T155413.json +0 -0
  513. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+9317805-0.0.39-20261027T191146.json +0 -0
  514. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+b7fbdf9-0.0.39-20261027T191724.json +0 -0
  515. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191806.json +0 -0
  516. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+bb371fb-0.0.39-20261028T191843.json +0 -0
  517. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-0.0.39+d4d323c-0.0.39-20261028T190809.json +0 -0
  518. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.36-20261022T160222.json +0 -0
  519. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155301.json +0 -0
  520. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.39-20261027T155340.json +0 -0
  521. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/test_harness.py +0 -0
  522. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/hw/test_probe.py +0 -0
  523. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/spec/DOCS_SHA256 +0 -0
  524. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/spec/oep-v1.toml +0 -0
  525. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/spec_names.py +0 -0
  526. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_acquire.py +0 -0
  527. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_acquire_beside.py +0 -0
  528. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_address.py +0 -0
  529. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_call.py +0 -0
  530. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_capabilities.py +0 -0
  531. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_capture.py +0 -0
  532. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_capture_blocks.py +0 -0
  533. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_capture_generation_rules.py +0 -0
  534. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_capture_rules.py +0 -0
  535. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_cobs.py +0 -0
  536. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance.py +0 -0
  537. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_allocator.py +0 -0
  538. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_analog.py +0 -0
  539. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_analog_payload.py +0 -0
  540. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_arm_adi.py +0 -0
  541. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_arm_adi_blocks.py +0 -0
  542. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_attach.py +0 -0
  543. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_blocks.py +0 -0
  544. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_capture_group.py +0 -0
  545. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_capture_group_geometry.py +0 -0
  546. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_capture_metadata.py +0 -0
  547. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_capture_serial.py +0 -0
  548. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_capture_timeline.py +0 -0
  549. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_capture_timeline_lifecycle.py +0 -0
  550. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_clock.py +0 -0
  551. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_core_fixed_fields.py +0 -0
  552. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_core_smoke.py +0 -0
  553. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_corr.py +0 -0
  554. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_cut.py +0 -0
  555. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_data.py +0 -0
  556. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_debug.py +0 -0
  557. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_dependencies.py +0 -0
  558. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_discovery.py +0 -0
  559. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_dmseq.py +0 -0
  560. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_dmseq_target.py +0 -0
  561. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_execution_order.py +0 -0
  562. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_exhausted.py +0 -0
  563. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_fixture_metadata.py +0 -0
  564. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_force_hw.py +0 -0
  565. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_gpio.py +0 -0
  566. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_gpio_lifecycle.py +0 -0
  567. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_host_core.py +0 -0
  568. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_host_critical_calls.py +0 -0
  569. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_host_deadline.py +0 -0
  570. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_host_notifications.py +0 -0
  571. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_host_requests.py +0 -0
  572. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_host_resend.py +0 -0
  573. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_host_tlv.py +0 -0
  574. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_host_values.py +0 -0
  575. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_host_wait.py +0 -0
  576. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_i2c.py +0 -0
  577. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_interface_smoke.py +0 -0
  578. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_interfaces.py +0 -0
  579. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_lease.py +0 -0
  580. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_link_routes.py +0 -0
  581. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_link_transfers.py +0 -0
  582. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_logic.py +0 -0
  583. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_mailbox.py +0 -0
  584. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_notification_output.py +0 -0
  585. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_notification_retention.py +0 -0
  586. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_notification_sequence.py +0 -0
  587. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_oep_declarations.py +0 -0
  588. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_oep_smoke.py +0 -0
  589. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_outcomes.py +0 -0
  590. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_pipeline.py +0 -0
  591. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_port_speed.py +0 -0
  592. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_port_speed_execution.py +0 -0
  593. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_port_speed_lifecycle.py +0 -0
  594. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_probe_input.py +0 -0
  595. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_reconnect.py +0 -0
  596. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_recovery.py +0 -0
  597. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_recovery_races.py +0 -0
  598. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_refusal_order.py +0 -0
  599. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_registered_ops.py +0 -0
  600. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_replay_pressure.py +0 -0
  601. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_replay_records_optional.py +0 -0
  602. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_reset.py +0 -0
  603. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_resources.py +0 -0
  604. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_response_race.py +0 -0
  605. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_restart.py +0 -0
  606. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_retention.py +0 -0
  607. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_retention_lifecycle.py +0 -0
  608. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_retry.py +0 -0
  609. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_reviewed_pins.py +0 -0
  610. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_routes.py +0 -0
  611. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_run.py +0 -0
  612. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_scan.py +0 -0
  613. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_scan_options.py +0 -0
  614. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_selected_metadata.py +0 -0
  615. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_serial.py +0 -0
  616. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_session_loss.py +0 -0
  617. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_session_smoke.py +0 -0
  618. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_spec_guard.py +0 -0
  619. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_spi.py +0 -0
  620. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_step.py +0 -0
  621. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_stream.py +0 -0
  622. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_subscriptions.py +0 -0
  623. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_tcp.py +0 -0
  624. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_tcp_peers.py +0 -0
  625. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_tcp_recovery.py +0 -0
  626. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_tlv_requests.py +0 -0
  627. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_uart.py +0 -0
  628. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_uart_stream.py +0 -0
  629. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_usb.py +0 -0
  630. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_wire_options.py +0 -0
  631. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_conformance_writer_lease.py +0 -0
  632. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_console_queue_and_reset_settle.py +0 -0
  633. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_core_rules.py +0 -0
  634. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_debug_attach.py +0 -0
  635. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_debug_rules.py +0 -0
  636. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_describe_unset_idle_rules.py +0 -0
  637. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_exact_payload_rules.py +0 -0
  638. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_extension_patterns.py +0 -0
  639. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_fixture_controllers.py +0 -0
  640. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_fixture_link_settings_rules.py +0 -0
  641. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_fixture_out.py +0 -0
  642. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_fixture_targets.py +0 -0
  643. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_flash_console.py +0 -0
  644. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_gpio_drive_and_serve_options.py +0 -0
  645. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_hardware.py +0 -0
  646. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_hid_stream.py +0 -0
  647. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_host_boot_lifecycle.py +0 -0
  648. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_host_recovery_rules.py +0 -0
  649. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_host_rules_bounds_options.py +0 -0
  650. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_host_rules_waits_lines.py +0 -0
  651. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_host_wait_bound.py +0 -0
  652. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_interfaces.py +0 -0
  653. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_link_drop.py +0 -0
  654. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_link_host.py +0 -0
  655. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_link_serial.py +0 -0
  656. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_linktest.py +0 -0
  657. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_literals.py +0 -0
  658. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_memo.py +0 -0
  659. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_minimal_ops.py +0 -0
  660. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_no_resume.py +0 -0
  661. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_open_extensions.py +0 -0
  662. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_passthrough.py +0 -0
  663. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_pins.py +0 -0
  664. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_plan.py +0 -0
  665. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_port_speed.py +0 -0
  666. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_probe_log.py +0 -0
  667. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_request_tails.py +0 -0
  668. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_request_validation_rules.py +0 -0
  669. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_restart.py +0 -0
  670. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_resubscribe_after_reopen.py +0 -0
  671. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_rvswd_rest.py +0 -0
  672. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_session.py +0 -0
  673. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_settings.py +0 -0
  674. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_spec_sections.py +0 -0
  675. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_spec_vectors.py +0 -0
  676. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_state_resource_rules.py +0 -0
  677. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_stimulus.py +0 -0
  678. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_target_parts.py +0 -0
  679. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_tcp_discovery.py +0 -0
  680. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_tlv_reader_rules.py +0 -0
  681. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_capture.py +0 -0
  682. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_common.py +0 -0
  683. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_console.py +0 -0
  684. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_core.py +0 -0
  685. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_core_names.py +0 -0
  686. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_debug.py +0 -0
  687. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_fixture.py +0 -0
  688. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_fixture_drive.py +0 -0
  689. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_link.py +0 -0
  690. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_plan.py +0 -0
  691. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_restart.py +0 -0
  692. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_trace_transports.py +0 -0
  693. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_transport_session_rules.py +0 -0
  694. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_usb_identity.py +0 -0
  695. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_usb_stream.py +0 -0
  696. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_analog_roles.py +0 -0
  697. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_announce.py +0 -0
  698. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture.py +0 -0
  699. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_changing_trigger.py +0 -0
  700. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_channel_time.py +0 -0
  701. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_format_2.py +0 -0
  702. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_formats.py +0 -0
  703. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_initial_trigger_time.py +0 -0
  704. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_lifetime.py +0 -0
  705. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_notifications.py +0 -0
  706. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_one_shot_time.py +0 -0
  707. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_options.py +0 -0
  708. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_pretrigger.py +0 -0
  709. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_query.py +0 -0
  710. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_rates.py +0 -0
  711. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_requests.py +0 -0
  712. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_resume_calibration.py +0 -0
  713. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_trigger_modes.py +0 -0
  714. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_trigger_source.py +0 -0
  715. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_trigger_source_more.py +0 -0
  716. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_capture_waiting.py +0 -0
  717. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_fast_samples.py +0 -0
  718. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_pin_constraints.py +0 -0
  719. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_rules_core.py +0 -0
  720. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_rules_ops_lines.py +0 -0
  721. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_serve_reboot.py +0 -0
  722. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_serve_tcp_connections.py +0 -0
  723. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_spec.py +0 -0
  724. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_bench_targets.py +0 -0
  725. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_core.py +0 -0
  726. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_virtual_core_bool.py +0 -0
  727. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/test_wire_hold.py +0 -0
  728. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/SPEC_COMMIT +0 -0
  729. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/SPEC_SHA256 +0 -0
  730. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/capture_formats.json +0 -0
  731. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/checks.json +0 -0
  732. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/cobs.json +0 -0
  733. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/confirm.json +0 -0
  734. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/core_extensions.json +0 -0
  735. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/core_lifecycle.json +0 -0
  736. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/core_policy.json +0 -0
  737. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/discovery.json +0 -0
  738. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/headers.json +0 -0
  739. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/interface_boundaries.json +0 -0
  740. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/interface_profiles.json +0 -0
  741. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/logic_layout.json +0 -0
  742. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/ops.json +0 -0
  743. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/ops_encoding.json +0 -0
  744. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/refusals.json +0 -0
  745. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/sessions.json +0 -0
  746. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/tests/vectors/settings_file.json +0 -0
  747. {oep_client_python-0.0.54 → oep_client_python-0.0.55}/udev/70-oep-probe.rules +0 -0
@@ -2,6 +2,71 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.0.55
6
+ - (EN) The pytest plugin's `oep_host` (an OEP session on the DUT's probe, sharing its broker's lock; behind the
7
+ platform's own monitor it waits for the broker up to the ini `oep_broker_wait`, 10 s) and `oep_uart` (`open(baud)`:
8
+ an oep.fixture.uart on the port's `<port>.rx` / `<port>.tx`, a Dut-like channel with expect / expect_exact / write).
9
+ `link.open_host` reaches an `oep://` probe through its broker when one serves it (host guide §7.2) and its opens
10
+ carry `oep.probe.share` (`Host.open_extensions`); no session is kept then. `broker=False` opens the probe itself.
11
+ The `pytest` extra takes pexpect.
12
+ - (JA) pytest のプラグインの `oep_host`(DUT のプローブとの OEP のセッション。broker のロックを分けてもらう。platform 自前のモニタの
13
+ ときは broker を ini の `oep_broker_wait`(10 秒)まで待つ)と `oep_uart`(`open(baud)`: 口の `<口>.rx` / `<口>.tx` の
14
+ oep.fixture.uart。expect / expect_exact / write を持つ Dut の形のチャンネル)。`link.open_host` は、broker が受け持つ `oep://` の
15
+ probe に broker 経由でつなぎ、open に `oep.probe.share` を付ける(`Host.open_extensions`。セッションは持ち越さない)。`broker=False`
16
+ で probe を直接開く。追加の依存 `pytest` に pexpect を足した。
17
+ - (EN) `oep_client.pytest_plugin`, pytest-embedded-arduino-cli's OEP plugin, loaded by itself (`pytest11`) with the new
18
+ `pytest` extra (pytest-embedded-arduino-cli >= 1.12.0): the lock name `probe:<unit_id>` for every port and route of a
19
+ probe and for its own serial port; `port_memo` / `peer_port_memo(name)` / `port_memo_of(config, port)`, the port's
20
+ record by the ini `oep_memo_owner` - `.env`'s `OEP_PORT_MEMO_<unit_id>[_<PORT>]` whole, else the probe's
21
+ `<owner>/port/<port>`, else {} (a warning when both differ); the `oep://` pyserial console; an RP2040 board on
22
+ `oep://<probe>/<port>` written over SWD through the upload hook. Removed: `oep_client.pytest_rp2040_peer` (the
23
+ conftest line, the OpenOCD files, the `rp2040-swd:` lock key, `CH32RV`) and `rp2040_swd.write_openocd_hook`.
24
+ Guide: docs/pytest.md.
25
+ - (JA) `oep_client.pytest_plugin`: pytest-embedded-arduino-cli の OEP のプラグイン。新しい追加の依存 `pytest`
26
+ (pytest-embedded-arduino-cli 1.12.0 以上)で自動で読み込まれる(`pytest11`)。プローブの口と経路と自身のシリアルの口のロックの名前
27
+ `probe:<unit_id>`。口の記録 `port_memo` / `peer_port_memo(name)` / `port_memo_of(config, port)`(ini の `oep_memo_owner`。`.env` の
28
+ `OEP_PORT_MEMO_<unit_id>[_<口>]` を丸ごと、無ければプローブの `<持ち主>/port/<口>`、無ければ {}。両方あって違えば警告)。pyserial の
29
+ `oep://` のコンソール。`oep://<probe>/<口>` の RP2040 のボードを、書き込みの hook で SWD で書く。消したもの: `oep_client.pytest_rp2040_peer`
30
+ (conftest の 1 行、OpenOCD のファイル、ロックの鍵 `rp2040-swd:`、`CH32RV`)と `rp2040_swd.write_openocd_hook`。ガイド: docs/pytest.ja.md。
31
+ - (EN) Renamed: `oep_client.ota_broker` -> `oep_client.ide` (`python -m oep_client.ide`; its class `Server`): an IDE
32
+ server, not an OEP broker. `oep_client.rp2040_peer` -> `oep_client.rp2040_swd` (`python -m oep_client.rp2040_swd
33
+ flash|console`): an RP2040 over the probe's SWD, for any use. docs/swd: the IDE server, and §3.6 sharing the probe
34
+ through a broker by host guide §7.
35
+ - (JA) 名前を変えた: `oep_client.ota_broker` → `oep_client.ide`(`python -m oep_client.ide`、クラスは `Server`)。OEP の broker
36
+ ではなく IDE のサーバーであるため。`oep_client.rp2040_peer` → `oep_client.rp2040_swd`(`python -m oep_client.rp2040_swd
37
+ flash|console`)。プローブの SWD の RP2040 を、用途によらず扱うもの。docs/swd: IDE のサーバーの呼び方と、§3.6 の broker との相乗り
38
+ (host ガイド §7)。
39
+ - (EN) `oep_client.brokers`: finding the broker that serves a probe and sharing its lock, as OEP host guide §7.1 / §7.2
40
+ have it: `OEP_BROKER` (`<host>:<port>`), else the user's `oep/brokers/<unit_id>.json` (its tcp endpoints; fn 0's
41
+ describe must name the file's unit_id), else the probe itself; joined with `oep.probe.share`. `rp2040_peer` uses it
42
+ instead of running `ch32rv broker endpoint` (no ch32rv path, no `io.github.ch32-riscv-ug.share`). The virtual
43
+ bench's stand-in fn is named under this project (`io.github.open-embedded-probe.stand-in`).
44
+ - (JA) `oep_client.brokers`: probe を受け持つ broker を見つけてロックを分けてもらう(OEP の host ガイド §7.1、§7.2)。`OEP_BROKER`
45
+ (`<host>:<port>`)、無ければ利用者の `oep/brokers/<unit_id>.json`(tcp の endpoints。fn 0 の describe の unit_id がファイルと同じこと
46
+ を確かめる)、無ければ probe を直接開く。相乗りは `oep.probe.share`。`rp2040_peer` は `ch32rv broker endpoint` を呼ばずにこれを使う
47
+ (ch32rv の場所も `io.github.ch32-riscv-ug.share` も要らない)。仮想ベンチの stand-in の fn の名前を、この project の名前空間に
48
+ (`io.github.open-embedded-probe.stand-in`)。
49
+ - (EN) `oep_client.ota_broker`: the Arduino IDE's Upload button and its Debug for a board on an OEP probe, the core
50
+ unchanged. Each OEP port is announced as a network port (`_arduino._tcp` over mDNS, TXT board / auth_upload=no, one
51
+ LAN address) and the core's network upload (`espota.py`) is answered: the `.bin` checked by its MD5 and written over
52
+ SWD (`rp2040_peer.flash`; RP2040 boards), digits keeping espota waiting. `--gdb-port` adds
53
+ `oep_client.gdb_server` for it: GDB's remote protocol (M-profile target.xml, memory map, registers, memory, run /
54
+ stop / step, Ctrl-C, FPB breakpoints, `load` into flash as one image from the erase block, `monitor reset halt` /
55
+ `reset` / `halt` / `resume`), the IDE pointed at it by `debug_custom.json` (`servertype: external`). An upload while
56
+ gdb is connected is written within gdb's session. `--dry-run` writes nothing. Checked on a Pico: arduino-pico
57
+ 6.3.1's own `espota.py`, `arduino-cli upload --protocol network` (73240 B in about 13 s), and cortex-debug's MI steps
58
+ through arduino-pico's gdb (load, a breakpoint at main, step, interrupt, reset; 9 s).
59
+ `virtual_bench_mdns.Announcement` takes the TXT's entries (`properties`). Guide: docs/swd.md.
60
+ - (JA) `oep_client.ota_broker`: Arduino IDE の「書き込み」ボタンと「デバッグ」で、OEP のプローブにつないだボードを扱う。コアには手を
61
+ 入れない。OEP の口をネットワークのポートとして名乗り(mDNS の `_arduino._tcp`、TXT は board と auth_upload=no など、アドレスは LAN の 1 つ)、
62
+ コアのネットワーク書き込み(`espota.py`)に答える: `.bin` を MD5 で確かめ、SWD で書く(`rp2040_peer.flash`。RP2040 のボード)。
63
+ 書き込みの間は数字を送って espota を待たせる。`--gdb-port` でその口の `oep_client.gdb_server` も持つ: gdb のリモートプロトコル(M-profile の
64
+ target.xml、メモリマップ、レジスタ、メモリ、実行・停止・ステップ、Ctrl-C、FPB のブレークポイント、消去ブロックからの 1 つの像としての flash への
65
+ `load`、`monitor reset halt` / `reset` / `halt` / `resume`)。IDE は `debug_custom.json`(`servertype: external`)でそこへ向ける。gdb がつながって
66
+ いる間の書き込みは gdb のセッションの中で書く。`--dry-run` は書かない。Pico で確認: arduino-pico 6.3.1 の `espota.py`、
67
+ `arduino-cli upload --protocol network`(73240 B で約 13 秒)、arduino-pico の gdb で cortex-debug の MI の手順(load、main でのブレーク、
68
+ ステップ、一時停止、リセット。9 秒)。`virtual_bench_mdns.Announcement` は TXT の項目を受ける(`properties`)。ガイド: docs/swd.ja.md。
69
+
5
70
  ## 0.0.54
6
71
  - (EN) Jobs (oep::SimpleInterface::job, the probe's worker): `oep_client.call.call_wait(hst, interface, op, timeout=,
7
72
  wait=, **fields)` starts the job and reads its status op until it ends; it returns the status's fields (start_ns,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: oep-client-python
3
- Version: 0.0.54
3
+ Version: 0.0.55
4
4
  Summary: Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a virtual bench
5
5
  Project-URL: Homepage, https://github.com/Open-Embedded-Probe/oep-client-python
6
6
  Project-URL: Repository, https://github.com/Open-Embedded-Probe/oep-client-python
@@ -21,6 +21,9 @@ Provides-Extra: hid
21
21
  Requires-Dist: hidapi>=0.14; extra == 'hid'
22
22
  Provides-Extra: mdns
23
23
  Requires-Dist: zeroconf>=0.131; extra == 'mdns'
24
+ Provides-Extra: pytest
25
+ Requires-Dist: pexpect>=4.8; extra == 'pytest'
26
+ Requires-Dist: pytest-embedded-arduino-cli>=1.12.0; extra == 'pytest'
24
27
  Provides-Extra: usb-async
25
28
  Requires-Dist: libusb1>=3; extra == 'usb-async'
26
29
  Description-Content-Type: text/markdown
@@ -89,6 +92,10 @@ names starting with `_`, may change. Check probe/client compatibility using the
89
92
  | `registry` | generated from oep-spec's number table (never edited; copied again from oep-spec). The public way to reach an interface by name is `registry.INTERFACES[name]` (`.revision`, `.op`, `.tlv`, `.enum`, e.g. `INTERFACES["oep.fixture.uart"].enum["role"]`); the module-level names (`FIXTURE_UART`, ...) are the same objects |
90
93
  | `arm` | `oep.wire.swd`, `oep.target.arm-adi`, MEM-AP, halting and calling functions on a Cortex-M |
91
94
  | `ch32_flash` | writing a CH32 (a RAM loader, page by page) |
95
+ | `pytest_plugin` | pytest-embedded-arduino-cli's OEP plugin, loaded by itself with the `pytest` extra: the probe's lock `probe:<unit_id>`, the port's record `port_memo` (`.env`'s `OEP_PORT_MEMO_*`, else the probe's memo), the `oep://` console, an RP2040 board's upload over SWD, the session `oep_host` and the UART `oep_uart` ([docs/pytest.md](docs/pytest.md)) |
96
+ | `brokers` | finding the broker that serves a probe (`OEP_BROKER`, the user's `oep/brokers/<unit_id>.json`) and sharing its lock with `oep.probe.share` (OEP host guide §7) |
97
+ | `ide` | the Arduino IDE's network upload, received and written through an OEP probe; a GDB server too ([docs/swd.md](docs/swd.md)) |
98
+ | `gdb_server` | GDB's remote protocol for a Cortex-M on an OEP probe's SWD (registers, memory, run / stop / step, FPB breakpoints, load into flash) |
92
99
  | `rp2350` | flash and reboot through the RP2350 boot ROM |
93
100
  | `uiapduino` | into and out of the UIAPduino bootloader |
94
101
  | `catalog` / `names` / `interfaces` / `dump` | the capability list and describe shapes, display |
@@ -117,6 +124,11 @@ wire.detach(conn)
117
124
  hst.end()
118
125
  ```
119
126
 
127
+ ## Writing and debugging an SWD board
128
+
129
+ An Arm board on an OEP probe's SWD (an RP2040 for now) is written, run and inspected from the Arduino IDE's Upload and
130
+ Debug, or from an OEP host directly: see [docs/swd.md](docs/swd.md).
131
+
120
132
  ## USB access on Linux (udev)
121
133
 
122
134
  A probe enumerates with the project's USB VID:PID `1209:4F45` (transports §3). Opening its vendor bulk (libusb) or its HID
@@ -56,6 +56,10 @@ GitHub Release、PyPI(Trusted Publishing)へ出す。変更は CHANGELOG.md
56
56
  | `registry` | oep-spec の番号の表から生成したモジュール(編集しない。oep-spec から写し直す)。名前からインターフェースの番号を引く公開の入口は `registry.INTERFACES[name]`(`.revision`、`.op`、`.tlv`、`.enum`。例 `INTERFACES["oep.fixture.uart"].enum["role"]`)。`FIXTURE_UART` などのモジュールの名前は同じもの |
57
57
  | `arm` | `oep.wire.swd`、`oep.target.arm-adi`、MEM-AP、Cortex-M の停止と関数呼び出し |
58
58
  | `ch32_flash` | CH32 の書き込み(RAM ローダー、ページ単位の書き直し) |
59
+ | `pytest_plugin` | pytest-embedded-arduino-cli の OEP のプラグイン。`pytest` の追加の依存で自動で読み込まれる。プローブのロック `probe:<unit_id>`、口の記録 `port_memo`(`.env` の `OEP_PORT_MEMO_*`、無ければプローブのメモ欄)、`oep://` のコンソール、RP2040 のボードの SWD での書き込み、セッション `oep_host` と UART `oep_uart`([docs/pytest.ja.md](docs/pytest.ja.md)) |
60
+ | `brokers` | probe を受け持つ broker を見つけ(`OEP_BROKER`、利用者の `oep/brokers/<unit_id>.json`)、`oep.probe.share` でロックを分けてもらう(OEP の host ガイド §7) |
61
+ | `ide` | Arduino IDE のネットワーク書き込みを受けて、OEP のプローブ越しに書く。gdb サーバーも持つ([docs/swd.ja.md](docs/swd.ja.md)) |
62
+ | `gdb_server` | OEP の SWD の Cortex-M に gdb のリモートプロトコルで答える(レジスタ、メモリ、実行・停止・ステップ、FPB のブレークポイント、flash への load) |
59
63
  | `rp2350` | RP2350 の boot ROM 経由の flash と reboot |
60
64
  | `uiapduino` | UIAPduino のブートローダへの出入り |
61
65
  | `catalog` / `names` / `interfaces` / `dump` | 能力の一覧と describe の形、表示 |
@@ -84,6 +88,11 @@ wire.detach(conn)
84
88
  hst.end()
85
89
  ```
86
90
 
91
+ ## SWD のボードを書く・デバッグする
92
+
93
+ OEP のプローブの SWD につないだ Arm のボード(今は RP2040)を、Arduino IDE の「書き込み」と「デバッグ」から、または OEP のホストから
94
+ 直接、書いて動かして調べます。手順は [docs/swd.ja.md](docs/swd.ja.md) にあります。
95
+
87
96
  ## Linux での USB の権限(udev)
88
97
 
89
98
  probe はプロジェクトの USB の VID:PID `1209:4F45`(transports §3)で列挙される。その vendor bulk(libusb)や HID(hidraw)を
@@ -62,6 +62,10 @@ names starting with `_`, may change. Check probe/client compatibility using the
62
62
  | `registry` | generated from oep-spec's number table (never edited; copied again from oep-spec). The public way to reach an interface by name is `registry.INTERFACES[name]` (`.revision`, `.op`, `.tlv`, `.enum`, e.g. `INTERFACES["oep.fixture.uart"].enum["role"]`); the module-level names (`FIXTURE_UART`, ...) are the same objects |
63
63
  | `arm` | `oep.wire.swd`, `oep.target.arm-adi`, MEM-AP, halting and calling functions on a Cortex-M |
64
64
  | `ch32_flash` | writing a CH32 (a RAM loader, page by page) |
65
+ | `pytest_plugin` | pytest-embedded-arduino-cli's OEP plugin, loaded by itself with the `pytest` extra: the probe's lock `probe:<unit_id>`, the port's record `port_memo` (`.env`'s `OEP_PORT_MEMO_*`, else the probe's memo), the `oep://` console, an RP2040 board's upload over SWD, the session `oep_host` and the UART `oep_uart` ([docs/pytest.md](docs/pytest.md)) |
66
+ | `brokers` | finding the broker that serves a probe (`OEP_BROKER`, the user's `oep/brokers/<unit_id>.json`) and sharing its lock with `oep.probe.share` (OEP host guide §7) |
67
+ | `ide` | the Arduino IDE's network upload, received and written through an OEP probe; a GDB server too ([docs/swd.md](docs/swd.md)) |
68
+ | `gdb_server` | GDB's remote protocol for a Cortex-M on an OEP probe's SWD (registers, memory, run / stop / step, FPB breakpoints, load into flash) |
65
69
  | `rp2350` | flash and reboot through the RP2350 boot ROM |
66
70
  | `uiapduino` | into and out of the UIAPduino bootloader |
67
71
  | `catalog` / `names` / `interfaces` / `dump` | the capability list and describe shapes, display |
@@ -90,6 +94,11 @@ wire.detach(conn)
90
94
  hst.end()
91
95
  ```
92
96
 
97
+ ## Writing and debugging an SWD board
98
+
99
+ An Arm board on an OEP probe's SWD (an RP2040 for now) is written, run and inspected from the Arduino IDE's Upload and
100
+ Debug, or from an OEP host directly: see [docs/swd.md](docs/swd.md).
101
+
93
102
  ## USB access on Linux (udev)
94
103
 
95
104
  A probe enumerates with the project's USB VID:PID `1209:4F45` (transports §3). Opening its vendor bulk (libusb) or its HID
@@ -0,0 +1,97 @@
1
+ # pytest(pytest-embedded-arduino-cli)で OEP を使う
2
+
3
+ [English](pytest.md)
4
+
5
+ OEP のプローブとその先のボードを、[pytest-embedded-arduino-cli](https://github.com/tanakamasayuki/pytest-embedded-arduino-cli) の試験で使います。
6
+ oep-client-python を `pytest` の追加の依存つきで入れると、プラグイン `oep_client.pytest_plugin` が自動で読み込まれます。conftest.py は要りません。
7
+
8
+ ```
9
+ pip install "oep-client-python[pytest]"
10
+ ```
11
+
12
+ プラグインが動くのは、試験のポートが OEP のプローブのときと、試験がプラグインの fixture を使うときだけです。
13
+
14
+ ## 1. ポート
15
+
16
+ ポートは、pytest-embedded-arduino-cli のガイドのとおり `.env` に書きます。
17
+
18
+ ```sh
19
+ # tests/.env
20
+ TEST_SERIAL_PORT_X035C8T6_S3=oep://30eda0e31108/x035c8t6-s3
21
+ TEST_SERIAL_PORT_PEER_PICO=oep://80f1b2d835d6/rp2040-x035
22
+ ```
23
+
24
+ アドレスは `oep://<unit_id>/<口>` です(口はプローブのラベル `<口>.<線>` の前半。OEP の host ガイド §5.3)。
25
+
26
+ ## 2. ロック
27
+
28
+ プローブは 1 台に 1 つのロックを持ちます(OEP の core §6.1)。プラグインは、pytest-embedded-arduino-cli のロックの名前を
29
+ `probe:<unit_id>` にします。同じプローブの口と経路(`?via=...`)は、どれも同じ名前になります。プローブ自身の USB シリアルの口も同じです。
30
+
31
+ - 1 つの試験の中で、DUT と相手が同じプローブに載っていても、ロックは 1 つを共有します。
32
+ - 別の試験は、そのプローブが空くまで待ちます。
33
+
34
+ ## 3. 口の記録
35
+
36
+ その口の先に何がつながっているか(部品、相手の種類、ボードの不良など)を、試験の引数 `port_memo` で読みます。記録の形は、記録の持ち主
37
+ (試験のプロジェクト)が決めます。持ち主の名前は ini に書きます。
38
+
39
+ ```toml
40
+ # pyproject.toml
41
+ [tool.pytest.ini_options]
42
+ oep_memo_owner = "io.github.example.mylib"
43
+ ```
44
+
45
+ ```python
46
+ def test_eth(dut, port_memo):
47
+ if port_memo.get("parts", {}).get("eth", {}).get("to") != "lan":
48
+ pytest.skip("eth is not wired on this port")
49
+ ```
50
+
51
+ 次の順に 1 つだけ使います。
52
+
53
+ 1. `.env` の `OEP_PORT_MEMO_<unit_id>_<口>`(口の無いプローブは `OEP_PORT_MEMO_<unit_id>`。大文字で、`-` は `_`)。JSON のオブジェクト
54
+ 1 つを、一重引用符で囲んで書きます。丸ごと使い、メモ欄と項目ごとに混ぜません。
55
+ 2. プローブのメモ欄の `<持ち主>/port/<口>`(oep-if-memo §4)。
56
+ 3. どちらも無ければ `{}`。
57
+
58
+ 両方あって中身が違えば、警告を出します(メモ欄を直すか、`.env` の変数を消します)。相手の口の記録は `peer_port_memo("<名前>")` です。
59
+ メモ欄を持たないプローブ(ほかのプラグインが `probe:<id>` の名前を返す WCH-Link など)は、`.env` だけを使います。
60
+
61
+ ```sh
62
+ # tests/.env
63
+ OEP_PORT_MEMO_BC5F4B9807F7='{"parts": {"eth": {"to": "lan"}}}'
64
+ ```
65
+
66
+ メモ欄に書くのは pytest の外の道具です(`oep_client.memo` の `Memo.write` を使う道具など)。
67
+
68
+ ## 4. コンソール
69
+
70
+ pyserial は `oep://...` を開けます(`oep_client.pyserial`)。RP2040 のボードでは、SWD で読む SEGGER RTT がコンソールになります
71
+ ([swd.ja.md](swd.ja.md) §3.2)。スケッチは RTT を使います。
72
+
73
+ ## 5. 書き込み
74
+
75
+ ポートが `oep://<unit_id>/<口>` で、プロファイルが RP2040 のボード(fqbn が `rp2040:`)のとき、プラグインがビルドの ELF をプローブの SWD で書きます
76
+ (pytest-embedded-arduino-cli の書き込みの hook)。arduino-pico の書き込みの方式は問いません。それ以外は arduino-cli の書き込みのままです。
77
+
78
+ ## 6. セッションと UART
79
+
80
+ 試験の引数 `oep_host` は、DUT のポートの先のプローブとの OEP のセッションです(`oep_host.host` が Host、`oep_host.touch()` が lease を保つ)。
81
+ 60 秒より長く黙ると、セッションを失います。
82
+
83
+ `oep_uart.open(baud)` は、口のラベル `<口>.rx` / `<口>.tx`(OEP の host ガイド §5.3)の線に `oep.fixture.uart` を割り当て、`expect`、
84
+ `expect_exact`、`write` を持つチャンネルを返します(`dut` と同じ pexpect の形。既定の待ち時間は 30 秒)。
85
+
86
+ ```python
87
+ def test_uart(dut, oep_uart):
88
+ ch = oep_uart.open(115200)
89
+ ch.write("ping\n")
90
+ ch.expect("pong")
91
+ ```
92
+
93
+ ## 7. ほかの道具との相乗り
94
+
95
+ 同じプローブを broker(OEP の host ガイド §7)が受け持っているときは、そのロックを分けてもらいます(`oep_client.brokers`)。
96
+ DUT のコンソールが platform 自前のモニタを通るとき(pytest-embedded-arduino-cli がポートを包むとき)は、そのモニタがプローブを持ち、
97
+ 少し遅れて broker を公開します。`oep_host` は、それを ini の `oep_broker_wait` 秒(既定 10)まで待ちます。
@@ -0,0 +1,101 @@
1
+ # OEP in pytest (pytest-embedded-arduino-cli)
2
+
3
+ [日本語](pytest.ja.md)
4
+
5
+ OEP probes and the boards behind them in [pytest-embedded-arduino-cli](https://github.com/tanakamasayuki/pytest-embedded-arduino-cli)
6
+ tests. Installed with its `pytest` extra, oep-client-python's plugin `oep_client.pytest_plugin` loads by itself; no
7
+ conftest.py is needed.
8
+
9
+ ```
10
+ pip install "oep-client-python[pytest]"
11
+ ```
12
+
13
+ The plugin acts only when a test's port is an OEP probe, or when a test asks for its fixtures.
14
+
15
+ ## 1. Ports
16
+
17
+ Ports go in `.env`, as pytest-embedded-arduino-cli's guide has it.
18
+
19
+ ```sh
20
+ # tests/.env
21
+ TEST_SERIAL_PORT_X035C8T6_S3=oep://30eda0e31108/x035c8t6-s3
22
+ TEST_SERIAL_PORT_PEER_PICO=oep://80f1b2d835d6/rp2040-x035
23
+ ```
24
+
25
+ The address is `oep://<unit_id>/<port>` (the port is the first half of the probe's labels `<port>.<line>`, OEP host
26
+ guide §5.3).
27
+
28
+ ## 2. The lock
29
+
30
+ A probe has one lock (OEP core §6.1). The plugin names pytest-embedded-arduino-cli's lock `probe:<unit_id>`: every
31
+ port and route (`?via=...`) of one probe has that name, and so has the probe's own USB serial port.
32
+
33
+ - In one test, a DUT and a peer on the same probe share the one lock.
34
+ - Another test waits until the probe is free.
35
+
36
+ ## 3. The port's record
37
+
38
+ What is wired to a port (parts, the kind of its peer, the board's defects) is read with the test argument `port_memo`.
39
+ The record's shape is its owner's (the test's project); the owner's name goes in the ini.
40
+
41
+ ```toml
42
+ # pyproject.toml
43
+ [tool.pytest.ini_options]
44
+ oep_memo_owner = "io.github.example.mylib"
45
+ ```
46
+
47
+ ```python
48
+ def test_eth(dut, port_memo):
49
+ if port_memo.get("parts", {}).get("eth", {}).get("to") != "lan":
50
+ pytest.skip("eth is not wired on this port")
51
+ ```
52
+
53
+ The first of these is used:
54
+
55
+ 1. `.env`'s `OEP_PORT_MEMO_<unit_id>_<PORT>` (`OEP_PORT_MEMO_<unit_id>` for a probe without ports; upper case, `-` as
56
+ `_`): one JSON object in single quotes, used whole, never mixed with the memo member by member.
57
+ 2. The probe's memo object `<owner>/port/<port>` (oep-if-memo §4).
58
+ 3. `{}`.
59
+
60
+ When both are there and differ, a warning (correct the memo or drop the variable). A peer's record is
61
+ `peer_port_memo("<name>")`. A probe without a memo area (a WCH-Link another plugin names `probe:<id>`) has `.env` only.
62
+
63
+ ```sh
64
+ # tests/.env
65
+ OEP_PORT_MEMO_BC5F4B9807F7='{"parts": {"eth": {"to": "lan"}}}'
66
+ ```
67
+
68
+ The memo is written by tools outside pytest (ones using `oep_client.memo`'s `Memo.write`).
69
+
70
+ ## 4. The console
71
+
72
+ pyserial opens `oep://...` (`oep_client.pyserial`). For an RP2040 board it is the SEGGER RTT read over SWD
73
+ ([swd.md](swd.md) §3.2); the sketch uses RTT.
74
+
75
+ ## 5. The upload
76
+
77
+ For a port `oep://<unit_id>/<port>` whose profile is an RP2040 board (fqbn `rp2040:`), the plugin writes the build's
78
+ ELF over the probe's SWD (pytest-embedded-arduino-cli's upload hook), whatever arduino-pico's upload method is.
79
+ Anything else is arduino-cli's upload.
80
+
81
+ ## 6. The session and the UART
82
+
83
+ The test argument `oep_host` is an OEP session on the probe behind the DUT's port (`oep_host.host` is the Host,
84
+ `oep_host.touch()` keeps the lease); quiet for longer than 60 s, it loses the session.
85
+
86
+ `oep_uart.open(baud)` plans an `oep.fixture.uart` onto the port's lines labelled `<port>.rx` / `<port>.tx` (OEP host
87
+ guide §5.3) and returns a channel with `expect`, `expect_exact` and `write` (pexpect, like `dut`; 30 s by default).
88
+
89
+ ```python
90
+ def test_uart(dut, oep_uart):
91
+ ch = oep_uart.open(115200)
92
+ ch.write("ping\n")
93
+ ch.expect("pong")
94
+ ```
95
+
96
+ ## 7. Sharing with other tools
97
+
98
+ When a broker (OEP host guide §7) serves the probe, the plugin shares its lock (`oep_client.brokers`). When the DUT's
99
+ console runs through the platform's own monitor (pytest-embedded-arduino-cli wraps the port), that monitor holds the
100
+ probe and publishes its broker a moment later; `oep_host` waits for it up to the ini value `oep_broker_wait` seconds
101
+ (default 10).
@@ -0,0 +1,173 @@
1
+ # SWD のボードを書く・デバッグする
2
+
3
+ [English](swd.md)
4
+
5
+ OEP のプローブの SWD につないだ Arm のボードを、書いて、動かして、止めて調べます。道は 2 つです。
6
+
7
+ - **Arduino IDE から**: 「書き込み」ボタンと「デバッグ」ボタン。コアにも IDE の設定にも手を入れません。IDE のサーバーを 1 つ起動しておき、デバッグにはスケッチのフォルダに `debug_custom.json` を置きます。
8
+ - **OEP のホストから直接**: コマンド、gdb、pytest、Python。
9
+
10
+ 対象は RP2040 のボード(Raspberry Pi Pico など、arduino-pico)のコア 0 です。
11
+
12
+ ## 1. つなぐ
13
+
14
+ - 線は SWDIO、SWCLK、GND の 3 本です。ボードの電源はボード側で用意します。
15
+ - プローブの 2 本の channel に、口の名前を付けたラベル `<口>.swdio` と `<口>.swclk` を付けます。以後、ボードは `oep://<unit id>/<口>` で指します。
16
+
17
+ ```
18
+ oep settings set oep://<unit id> core channel.GPIO28.label=pico.swdio channel.GPIO27.label=pico.swclk --save
19
+ ```
20
+
21
+ どの channel につながったか分からなければ、`oep pins` で探せます(README の「ピンを探す」)。
22
+ - コンソールに UART を使うなら、ボードの TX をプローブの空いている channel につなぎます(3.4)。
23
+
24
+ ## 2. Arduino IDE から
25
+
26
+ ### 2.1 IDE のサーバーを起動する
27
+
28
+ ```
29
+ pip install oep-client-python
30
+ python -m oep_client.ide oep://<unit id>/pico=rpipico --gdb-port 3333
31
+ ```
32
+
33
+ - `=rpipico` は IDE に見せるボードの名前です(省くと `rpipico`)。口はいくつでも並べられます。口ごとに、ネットワークのポートが 1 つと、
34
+ gdb のポートが 1 つ(`--gdb-port` から順に)できます。
35
+ - IDE のサーバーは、書き込みが来たときと gdb がつながっている間だけプローブを使います。ほかの時間は、ほかの道具がそのプローブを使えます。
36
+ - 起動の行に、口ごとの名前、UDP のポート、gdb のポートが出ます。
37
+
38
+ ### 2.2 書き込む
39
+
40
+ 1. IDE でボード(Raspberry Pi Pico など)を選びます。
41
+ 2. 「ツール > ポート」で、ネットワークのポート `oep-<unit id>-<口> at <アドレス>` を選びます。IDE のサーバーを起動してから一覧に出るまで、数秒
42
+ かかることがあります。
43
+ 3. 「書き込み」を押します。パスワードを聞かれたら、空のまま OK します。
44
+
45
+ IDE のサーバーは、IDE が送る `.bin` を MD5 で確かめてから SWD で書き、読み返して確かめ、ボードを起動し直します。
46
+
47
+ 仕組み: IDE のサーバーは口ごとに mDNS の `_arduino._tcp` を名乗り(TXT は `board`、`auth_upload=no`、`tcp_check=no`、`ssh_upload=no`)、
48
+ コアのネットワーク書き込み(arduino-pico の `tools/espota.py`)の受け手になります。名乗るアドレスは 1 つで、LAN のものです(`--interface` で
49
+ 選べます)。
50
+
51
+ ### 2.3 デバッグする
52
+
53
+ スケッチのフォルダに `debug_custom.json` を置き、IDE のデバッグをIDE のサーバーの gdb サーバーへ向けます。
54
+
55
+ ```json
56
+ [
57
+ {
58
+ "configId": "rp2040:rp2040:rpipico",
59
+ "servertype": "external",
60
+ "gdbTarget": "localhost:3333"
61
+ }
62
+ ]
63
+ ```
64
+
65
+ - ファイルは配列です。`configId` は、IDE が作るデバッグの設定の `configId` と同じ文字列にします。ボードの FQBN で、ボードのメニューを既定
66
+ から変えていればその値も付きます。合わない要素は黙って無視されるので、IDE が一度デバッグを始めた後にスケッチのフォルダの
67
+ `.theia/launch.json` に書く値を写すのが確実です。
68
+ - 「デバッグ」を押すと、IDE はスケッチを書き込み(gdb の `load`)、コアをリセットして止め、`main` で止まります。ブレークポイント、ステップ、
69
+ 一時停止、変数とレジスタの表示が使えます。
70
+ - gdb サーバーは 127.0.0.1 だけで待ちます。IDE はIDE のサーバーと同じ PC で動かします。
71
+ - デバッグの間に「書き込み」を押しても、gdb は切れません。IDE のサーバーは gdb のセッションの中で書き、コアだけをリセットして走らせます。
72
+
73
+ ### 2.4 コンソール
74
+
75
+ ボードの UART を、プローブの USB シリアル(CDC)にそのまま流す設定を入れ、IDE のシリアルモニタでプローブのポートを開きます。
76
+
77
+ ```
78
+ oep settings set oep://<unit id> oep.fixture.uart/0 passthrough.cdc0.rx=GPIO12 passthrough.cdc0.baud=115200 --save
79
+ ```
80
+
81
+ - `GPIO12` はボードの TX をつないだ channel、`cdc0` はプローブの 1 つ目の CDC です(経路の名前は oep-spec core §13.3)。
82
+ - 設定はセッションに関係なく効き、`--save` で起動し直しても残ります。
83
+
84
+ ### 2.5 できないこと
85
+
86
+ - コア 1 は扱いません(コア 0 だけ)。
87
+ - ハードウェアのブレークポイントは 4 つまでです(RP2040 の FPB)。flash の中のブレークポイントは、gdb が自動でハードウェアのものにします。
88
+ - ウォッチポイントはありません。
89
+
90
+ ## 3. OEP のホストから直接
91
+
92
+ ### 3.1 書く
93
+
94
+ ```
95
+ python -m oep_client.rp2040_swd flash oep://<unit id>/pico sketch.ino.elf
96
+ ```
97
+
98
+ ELF(flash の中の読み込む部分を並べる)か `.bin`(0x10000000 からの flash の中身)を書き、読み返して確かめ、ボードを起動し直します。
99
+
100
+ ### 3.2 コンソール(SEGGER RTT)
101
+
102
+ UART の線が無くても、ボードの RAM の RTT のリングを SWD で読めます(スケッチが RTT を使うとき)。
103
+
104
+ ```
105
+ python -m oep_client.rp2040_swd console oep://<unit id>/pico 10 # 10 秒の間、出力を表示する
106
+ ```
107
+
108
+ pyserial からは、`oep_client.pyserial` を登録すると `oep://` を開けます。
109
+
110
+ ```python
111
+ import serial
112
+ serial.protocol_handler_packages.append("oep_client.pyserial")
113
+ port = serial.serial_for_url("oep://<unit id>/pico")
114
+ ```
115
+
116
+ ### 3.3 gdb で
117
+
118
+ IDE のサーバーの gdb サーバーに、コアに付いてくる gdb(arduino-pico なら `arm-none-eabi-gdb`)でつなぎます。書き込みの受け手が要らなければ、
119
+ IDE のサーバーをこの用途だけに起動しても同じです。
120
+
121
+ ```
122
+ arm-none-eabi-gdb sketch.ino.elf
123
+ (gdb) target extended-remote 127.0.0.1:3333
124
+ (gdb) monitor reset halt
125
+ (gdb) load
126
+ (gdb) monitor reset halt
127
+ (gdb) break loop
128
+ (gdb) continue
129
+ ```
130
+
131
+ | monitor のコマンド | 動き |
132
+ |---|---|
133
+ | `reset halt`(`reset init`) | コアをリセットし、最初の命令で止める |
134
+ | `reset`(`reset run`) | コアをリセットして走らせる |
135
+ | `halt` | 止める |
136
+ | `resume`(`go`) | 走らせる |
137
+
138
+ gdb のつながっている間、IDE のサーバーはプローブのロックを持ち、5 秒ごとに keepalive を送ります。
139
+
140
+ ### 3.4 pytest(pytest-embedded-arduino-cli)
141
+
142
+ 試験の DUT や相手の Pico は、プラグイン `oep_client.pytest_plugin` が SWD で書き、RTT をコンソールにします。ポートは `.env` の
143
+ `TEST_SERIAL_PORT_*=oep://<unit id>/<口>` です。詳しくは [pytest.ja.md](pytest.ja.md) にあります。
144
+
145
+ ### 3.5 Python から
146
+
147
+ ```python
148
+ from oep_client import arm, link, rp2040
149
+
150
+ hst = link.open_host("oep://<unit id>")
151
+ hst.open(60000, owner="my-tool")
152
+ wire = arm.SwdWire(hst)
153
+ conn, dpidr, _ = wire.attach(targetsel=rp2040.TARGETSEL_CORE0, pins=(28, 27)) # SWDIO、SWCLK の channel
154
+ adi = arm.ArmAdi(hst, conn)
155
+ adi.power_up()
156
+ mem = arm.MemAp(adi, 0)
157
+ core = rp2040.core_of(mem)
158
+ core.halt()
159
+ print(hex(core.reg(15))) # PC
160
+ core.resume()
161
+ wire.detach(conn)
162
+ hst.end()
163
+ hst.link.close()
164
+ ```
165
+
166
+ - `oep_client.arm`: `SwdWire`(`oep.wire.swd`)、`ArmAdi`(`oep.target.arm-adi`)、`MemAp`、`CortexM`(停止、レジスタ、関数の呼び出し)。
167
+ - `oep_client.rp2040`: boot ROM での flash の書き込み(`program_and_verify`)と再起動。
168
+
169
+ ### 3.6 ほかの道具とプローブを分ける
170
+
171
+ 同じプローブを broker(OEP の host ガイド §7)が受け持っているときは、`rp2040_swd` と IDE のサーバーはそのロックを分けてもらいます
172
+ (`oep_client.brokers`: 環境変数 `OEP_BROKER`、利用者の `oep/brokers/<unit_id>.json`、相乗りの拡張 `oep.probe.share`)。broker が
173
+ いなければ、プローブを直接開きます。