oep-client-python 0.0.36__tar.gz → 0.0.38__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 (758) hide show
  1. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/CHANGELOG.md +61 -0
  2. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/PKG-INFO +22 -18
  3. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/README.ja.md +20 -17
  4. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/README.md +21 -17
  5. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/spec-follow-notes.ja.md +24 -0
  6. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/pyproject.toml +1 -1
  7. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/__init__.py +1 -1
  8. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/__main__.py +171 -205
  9. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/capture.py +74 -32
  10. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance.py +1 -1
  11. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_capture_metadata.py +7 -10
  12. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_request_sample.py +0 -2
  13. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_requests.py +3 -9
  14. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_wait.py +7 -7
  15. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_wait_sample.py +6 -6
  16. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_registered_ops.py +1 -2
  17. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_selected_metadata.py +3 -9
  18. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/core.py +14 -25
  19. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/discovery.py +1 -1
  20. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/dump.py +7 -3
  21. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/endpoint.py +395 -329
  22. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/hid_stream.py +10 -3
  23. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/host.py +8 -2
  24. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/interfaces.py +3 -7
  25. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/link.py +21 -7
  26. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/message.py +2 -2
  27. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/pins.py +43 -27
  28. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/registry.py +23 -27
  29. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/riscv.py +8 -1
  30. oep_client_python-0.0.38/src/oep_client/settings.py +577 -0
  31. oep_client_python-0.0.38/src/oep_client/usb_stream.py +528 -0
  32. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_analog_model.py +2 -2
  33. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_bench.py +127 -58
  34. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_bench_serve.py +3 -3
  35. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_capture_group_model.py +1 -1
  36. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_capture_metadata_model.py +3 -3
  37. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_capture_timeline_model.py +1 -1
  38. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_registered_ops_model.py +1 -1
  39. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_selected_metadata_model.py +4 -4
  40. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/README.ja.md +9 -9
  41. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/README.md +7 -7
  42. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/boards.py +4 -4
  43. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/conftest.py +0 -2
  44. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/record.py +35 -36
  45. oep_client_python-0.0.38/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T160307.json +506 -0
  46. oep_client_python-0.0.38/tests/hw/results/9489dd2ae0953650-0.0.36+f8ac55a-0.0.36-20261022T161655.json +561 -0
  47. oep_client_python-0.0.38/tests/hw/results/9489dd2ae0953650-0.0.37+1031feb-0.0.37-20261023T214002.json +549 -0
  48. oep_client_python-0.0.38/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+12e1222-0.0.37-20261023T214016.json +655 -0
  49. oep_client_python-0.0.38/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.36+f8ac55a-0.0.36-20261022T160134.json +687 -0
  50. oep_client_python-0.0.38/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.37+1031feb-0.0.37-20261023T214230.json +685 -0
  51. oep_client_python-0.0.38/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T220718.json +914 -0
  52. oep_client_python-0.0.38/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb-0.0.37-20261023T221106.json +423 -0
  53. oep_client_python-0.0.38/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220856.json +276 -0
  54. oep_client_python-0.0.38/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220901.json +276 -0
  55. oep_client_python-0.0.38/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.37+1031feb__panic_at_11_s_-0.0.37-20261023T220915.json +235 -0
  56. oep_client_python-0.0.38/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.37-20261023T214102.json +121 -0
  57. oep_client_python-0.0.38/tests/hw/results/esp32-series-30eda0ea068b-0.0.36+f8ac55a-0.0.36-20261022T160503.json +464 -0
  58. oep_client_python-0.0.38/tests/hw/results/esp32-series-30eda0ea068b-0.0.37+1031feb-0.0.37-20261023T214005.json +451 -0
  59. oep_client_python-0.0.38/tests/hw/results/esp32-series-30eda0ea068b-unknown-0.0.36-20261022T160222.json +118 -0
  60. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/test_harness.py +38 -32
  61. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/test_probe.py +100 -89
  62. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/spec/oep-v1.toml +130 -90
  63. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_capabilities.py +9 -8
  64. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_capture.py +18 -0
  65. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_capture_blocks.py +6 -1
  66. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_capture_metadata.py +4 -11
  67. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_fixture_metadata.py +2 -2
  68. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_host_requests.py +6 -8
  69. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_host_wait.py +2 -2
  70. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_registered_ops.py +3 -4
  71. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_selected_metadata.py +6 -14
  72. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_console_queue_and_reset_settle.py +14 -12
  73. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_gpio_drive_and_serve_options.py +8 -11
  74. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_host_rules_2026_10_02.py +9 -18
  75. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_host_rules_2026_10_06.py +2 -2
  76. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_interfaces.py +13 -0
  77. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_no_resume.py +1 -1
  78. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_passthrough.py +80 -58
  79. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_pins.py +17 -19
  80. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_plan.py +2 -2
  81. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_request_tails.py +30 -32
  82. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_restart.py +6 -5
  83. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review4_small.py +0 -17
  84. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review5_core_a.py +8 -10
  85. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review5_debug_wires.py +2 -2
  86. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review6_debug_a.py +1 -1
  87. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review6_rest.py +0 -58
  88. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review7_state_resources.py +4 -4
  89. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_rvswd_rest.py +8 -6
  90. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_session.py +7 -5
  91. oep_client_python-0.0.38/tests/test_settings.py +558 -0
  92. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_spec_283e5b5.py +3 -2
  93. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_spec_3cc50c8.py +28 -21
  94. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_spec_vectors.py +76 -73
  95. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_tcp_discovery.py +4 -5
  96. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_trace_capture.py +15 -13
  97. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_trace_core.py +44 -35
  98. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_trace_core_names.py +9 -9
  99. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_trace_fixture.py +7 -7
  100. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_trace_transports.py +2 -2
  101. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_usb_identity.py +4 -4
  102. oep_client_python-0.0.38/tests/test_usb_stream.py +285 -0
  103. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_pin_constraints.py +5 -6
  104. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_rules_2026_10_02.py +53 -34
  105. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_rules_2026_10_06.py +35 -31
  106. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_serve_reboot.py +12 -7
  107. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_spec.py +6 -5
  108. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_wire_hold.py +6 -5
  109. oep_client_python-0.0.38/tests/vectors/SPEC_COMMIT +1 -0
  110. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/SPEC_SHA256 +6 -5
  111. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/interface_boundaries.json +10 -94
  112. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/interface_profiles.json +5 -7
  113. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/ops.json +225 -152
  114. oep_client_python-0.0.38/tests/vectors/settings_file.json +199 -0
  115. oep_client_python-0.0.36/docs/trace/probe-config.json +0 -1067
  116. oep_client_python-0.0.36/src/oep_client/config.py +0 -675
  117. oep_client_python-0.0.36/src/oep_client/conformance_config.py +0 -139
  118. oep_client_python-0.0.36/src/oep_client/conformance_config_execution.py +0 -84
  119. oep_client_python-0.0.36/src/oep_client/conformance_config_execution_sample.py +0 -13
  120. oep_client_python-0.0.36/src/oep_client/conformance_config_fallback.py +0 -72
  121. oep_client_python-0.0.36/src/oep_client/conformance_config_fallback_sample.py +0 -25
  122. oep_client_python-0.0.36/src/oep_client/conformance_config_paging.py +0 -87
  123. oep_client_python-0.0.36/src/oep_client/conformance_config_paging_sample.py +0 -29
  124. oep_client_python-0.0.36/src/oep_client/conformance_config_power_loss.py +0 -89
  125. oep_client_python-0.0.36/src/oep_client/conformance_config_power_loss_sample.py +0 -15
  126. oep_client_python-0.0.36/src/oep_client/conformance_config_sample.py +0 -13
  127. oep_client_python-0.0.36/src/oep_client/conformance_config_storage.py +0 -79
  128. oep_client_python-0.0.36/src/oep_client/conformance_config_storage_sample.py +0 -15
  129. oep_client_python-0.0.36/src/oep_client/usb_stream.py +0 -256
  130. oep_client_python-0.0.36/src/oep_client/virtual_config_execution_model.py +0 -68
  131. oep_client_python-0.0.36/src/oep_client/virtual_config_model.py +0 -176
  132. oep_client_python-0.0.36/src/oep_client/virtual_config_paging_model.py +0 -12
  133. oep_client_python-0.0.36/src/oep_client/virtual_config_power_loss_model.py +0 -77
  134. oep_client_python-0.0.36/src/oep_client/virtual_config_storage_model.py +0 -20
  135. oep_client_python-0.0.36/tests/test_config.py +0 -209
  136. oep_client_python-0.0.36/tests/test_config_disable.py +0 -199
  137. oep_client_python-0.0.36/tests/test_config_idle.py +0 -157
  138. oep_client_python-0.0.36/tests/test_config_network.py +0 -333
  139. oep_client_python-0.0.36/tests/test_conformance_config.py +0 -129
  140. oep_client_python-0.0.36/tests/test_conformance_config_execution.py +0 -124
  141. oep_client_python-0.0.36/tests/test_conformance_config_fallback.py +0 -99
  142. oep_client_python-0.0.36/tests/test_conformance_config_paging.py +0 -160
  143. oep_client_python-0.0.36/tests/test_conformance_config_power_loss.py +0 -118
  144. oep_client_python-0.0.36/tests/test_conformance_config_storage.py +0 -101
  145. oep_client_python-0.0.36/tests/test_trace_probe_config.py +0 -287
  146. oep_client_python-0.0.36/tests/test_usb_stream.py +0 -96
  147. oep_client_python-0.0.36/tests/vectors/SPEC_COMMIT +0 -1
  148. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/.gitignore +0 -0
  149. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/LICENSE +0 -0
  150. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/README.ja.md +0 -0
  151. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/allocator-conformance.ja.md +0 -0
  152. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/analog-conformance.ja.md +0 -0
  153. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/analog-payload-conformance.ja.md +0 -0
  154. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/arm-adi-conformance.ja.md +0 -0
  155. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/attach-conformance.ja.md +0 -0
  156. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/block-conformance.ja.md +0 -0
  157. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/capture-group-conformance.ja.md +0 -0
  158. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/capture-group-geometry-conformance.ja.md +0 -0
  159. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/capture-metadata-conformance.ja.md +0 -0
  160. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/capture-serial-conformance.ja.md +0 -0
  161. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/capture-timeline-conformance.ja.md +0 -0
  162. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/capture-timeline-lifecycle-conformance.ja.md +0 -0
  163. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/clock-conformance.ja.md +0 -0
  164. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/config-conformance.ja.md +0 -0
  165. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/config-execution-conformance.ja.md +0 -0
  166. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/config-fallback-conformance.ja.md +0 -0
  167. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/config-paging-conformance.ja.md +0 -0
  168. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/config-power-loss-conformance.ja.md +0 -0
  169. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/config-storage-conformance.ja.md +0 -0
  170. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/conformance-checks.ja.md +0 -0
  171. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/conformance-spec-compatibility.ja.md +0 -0
  172. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/core-fixed-fields-review.ja.md +0 -0
  173. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/core-smoke-conformance.ja.md +0 -0
  174. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/corr-conformance.ja.md +0 -0
  175. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/cut-conformance.ja.md +0 -0
  176. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/data-conformance.ja.md +0 -0
  177. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/debug-conformance.ja.md +0 -0
  178. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/dependency-conformance.ja.md +0 -0
  179. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/discovery-conformance.ja.md +0 -0
  180. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/dmseq-conformance.ja.md +0 -0
  181. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/dmseq-target-conformance.ja.md +0 -0
  182. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/execution-order-conformance.ja.md +0 -0
  183. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/exhausted-conformance.ja.md +0 -0
  184. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/fixture-metadata-conformance.ja.md +0 -0
  185. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/gpio-conformance.ja.md +0 -0
  186. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/gpio-lifecycle-conformance.ja.md +0 -0
  187. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/hardware-configuration.ja.md +0 -0
  188. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/hardware-quickstart.ja.md +0 -0
  189. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/hardware-schema.ja.md +0 -0
  190. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/host-core-shapes-conformance.ja.md +0 -0
  191. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/host-deadline-conformance.ja.md +0 -0
  192. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/host-notification-conformance.ja.md +0 -0
  193. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/host-request-conformance.ja.md +0 -0
  194. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/host-resend-conformance.ja.md +0 -0
  195. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/host-tlv-conformance.ja.md +0 -0
  196. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/host-value-conformance.ja.md +0 -0
  197. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/host-wait-conformance.ja.md +0 -0
  198. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/i2c-conformance.ja.md +0 -0
  199. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/interface-conformance.ja.md +0 -0
  200. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/interface-smoke-conformance.ja.md +0 -0
  201. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/lease-conformance.ja.md +0 -0
  202. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/link-routes-conformance.ja.md +0 -0
  203. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/link-transfer-conformance.ja.md +0 -0
  204. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/logic-conformance.ja.md +0 -0
  205. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/mailbox-conformance.ja.md +0 -0
  206. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/notification-output-sample.ja.md +0 -0
  207. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/notification-retention-conformance.ja.md +0 -0
  208. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/notification-sequence-conformance.ja.md +0 -0
  209. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/oep-declaration-conformance.ja.md +0 -0
  210. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/oep-example-smoke-conformance.ja.md +0 -0
  211. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/outcome-conformance.ja.md +0 -0
  212. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/pin-constraints-conformance.ja.md +0 -0
  213. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/pipeline-conformance.ja.md +0 -0
  214. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/port-speed-conformance.ja.md +0 -0
  215. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/probe-input-conformance.ja.md +0 -0
  216. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/recovery-conformance.ja.md +0 -0
  217. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/recovery-races-conformance.ja.md +0 -0
  218. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/refusal-order-conformance.ja.md +0 -0
  219. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/registered-ops-conformance.ja.md +0 -0
  220. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/replay-pressure-conformance.ja.md +0 -0
  221. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/reset-conformance.ja.md +0 -0
  222. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/resource-conformance.ja.md +0 -0
  223. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/response-race-conformance.ja.md +0 -0
  224. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/restart-conformance.ja.md +0 -0
  225. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/retention-conformance.ja.md +0 -0
  226. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/retention-lifecycle-conformance.ja.md +0 -0
  227. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/retry-conformance.ja.md +0 -0
  228. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/route-conformance.ja.md +0 -0
  229. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/run-conformance.ja.md +0 -0
  230. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/scan-conformance.ja.md +0 -0
  231. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/scan-options-conformance.ja.md +0 -0
  232. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/selected-metadata-conformance.ja.md +0 -0
  233. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/session-loss-conformance.ja.md +0 -0
  234. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/session-smoke-conformance.ja.md +0 -0
  235. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/spec-a09fa45-sections.ja.md +0 -0
  236. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/spi-conformance.ja.md +0 -0
  237. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/stage9-rule-trace.ja.md +0 -0
  238. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/step-conformance.ja.md +0 -0
  239. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/stream-conformance.ja.md +0 -0
  240. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/subscription-conformance.ja.md +0 -0
  241. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/tcp-recovery-conformance.ja.md +0 -0
  242. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/testing-consumers.ja.md +0 -0
  243. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/testing-policy.ja.md +0 -0
  244. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/tlv-request-conformance.ja.md +0 -0
  245. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/README.ja.md +0 -0
  246. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/capture.json +0 -0
  247. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/common.json +0 -0
  248. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/console.json +0 -0
  249. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/core.json +0 -0
  250. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/debug.json +0 -0
  251. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/fixture.json +0 -0
  252. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/link.json +0 -0
  253. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/plan.json +0 -0
  254. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/restart.json +0 -0
  255. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/capture.json +0 -0
  256. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/common.json +0 -0
  257. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/console.json +0 -0
  258. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/core.json +0 -0
  259. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/debug.json +0 -0
  260. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/fixture.json +0 -0
  261. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/link.json +0 -0
  262. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/plan.json +0 -0
  263. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/probe-config.json +0 -0
  264. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/restart.json +0 -0
  265. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/sample-audit.ja.md +0 -0
  266. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review/transports.json +0 -0
  267. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/capture.json +0 -0
  268. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/common.json +0 -0
  269. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/console.json +0 -0
  270. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/core.0.json +0 -0
  271. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/core.1-6.json +0 -0
  272. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/core.7-13.json +0 -0
  273. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/debug.json +0 -0
  274. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/fixture.json +0 -0
  275. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/link.json +0 -0
  276. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/plan.json +0 -0
  277. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/probe-config.json +0 -0
  278. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/restart.json +0 -0
  279. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review2/transports.json +0 -0
  280. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review3/capture.json +0 -0
  281. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review3/core-a.json +0 -0
  282. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review3/core-b.json +0 -0
  283. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review3/debug-a.json +0 -0
  284. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review3/debug-b.json +0 -0
  285. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review3/rest.json +0 -0
  286. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review4/capture.json +0 -0
  287. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review4/core-rest.json +0 -0
  288. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review4/core-sessions.json +0 -0
  289. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review4/debug.json +0 -0
  290. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review4/fixture-console.json +0 -0
  291. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review4/small.json +0 -0
  292. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review5/capture.json +0 -0
  293. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review5/core-a.json +0 -0
  294. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review5/core-b.json +0 -0
  295. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review5/debug-targets.json +0 -0
  296. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review5/debug-wires.json +0 -0
  297. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review5/small.json +0 -0
  298. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review6/capture-console.json +0 -0
  299. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review6/core-early.json +0 -0
  300. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review6/core-late.json +0 -0
  301. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review6/debug-a.json +0 -0
  302. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review6/debug-b.json +0 -0
  303. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review6/rest.json +0 -0
  304. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review7/exact-payload.json +0 -0
  305. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review7/host-recovery.json +0 -0
  306. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review7/optional-as-required.json +0 -0
  307. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review7/request-validation.json +0 -0
  308. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review7/state-and-resources.json +0 -0
  309. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review7/tlv-readers.json +0 -0
  310. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review8/core-1.json +0 -0
  311. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review8/core-2.json +0 -0
  312. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/review8/debug.json +0 -0
  313. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/trace/transports.json +0 -0
  314. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/uart-conformance.ja.md +0 -0
  315. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/uart-stream-conformance.ja.md +0 -0
  316. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/usb-conformance.ja.md +0 -0
  317. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/wire-options-conformance.ja.md +0 -0
  318. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/docs/writer-lease-conformance.ja.md +0 -0
  319. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/arm.py +0 -0
  320. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/capture_blocks.py +0 -0
  321. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/catalog.py +0 -0
  322. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/ch32_flash.py +0 -0
  323. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/cobs.py +0 -0
  324. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_allocator.py +0 -0
  325. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_allocator_sample.py +0 -0
  326. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_analog.py +0 -0
  327. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_analog_payload.py +0 -0
  328. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_analog_sample.py +0 -0
  329. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_arm_adi.py +0 -0
  330. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_arm_adi_blocks.py +0 -0
  331. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_arm_adi_sample.py +0 -0
  332. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_attach.py +0 -0
  333. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_attach_sample.py +0 -0
  334. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_block_sample.py +0 -0
  335. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_blocks.py +0 -0
  336. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_capture_group.py +0 -0
  337. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_capture_group_geometry.py +0 -0
  338. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_capture_group_sample.py +0 -0
  339. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_capture_serial.py +0 -0
  340. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_capture_serial_sample.py +0 -0
  341. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_capture_timeline.py +0 -0
  342. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_capture_timeline_lifecycle.py +0 -0
  343. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_capture_timeline_sample.py +0 -0
  344. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_clock.py +0 -0
  345. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_clock_sample.py +0 -0
  346. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_core_fixed_fields.py +0 -0
  347. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_core_smoke.py +0 -0
  348. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_corr.py +0 -0
  349. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_cut.py +0 -0
  350. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_cut_sample.py +0 -0
  351. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_data.py +0 -0
  352. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_data_sample.py +0 -0
  353. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_debug.py +0 -0
  354. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_debug_sample.py +0 -0
  355. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_dependencies.py +0 -0
  356. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_dependency_sample.py +0 -0
  357. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_discovery.py +0 -0
  358. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_dmseq.py +0 -0
  359. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_dmseq_sample.py +0 -0
  360. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_dmseq_target.py +0 -0
  361. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_dmseq_target_sample.py +0 -0
  362. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_execution_order.py +0 -0
  363. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_execution_order_sample.py +0 -0
  364. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_exhausted.py +0 -0
  365. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_exhausted_sample.py +0 -0
  366. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_fixture_metadata.py +0 -0
  367. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_gpio.py +0 -0
  368. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_gpio_lifecycle.py +0 -0
  369. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_gpio_lifecycle_sample.py +0 -0
  370. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_gpio_sample.py +0 -0
  371. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_core.py +0 -0
  372. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_core_sample.py +0 -0
  373. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_deadline.py +0 -0
  374. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_deadline_sample.py +0 -0
  375. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_notifications.py +0 -0
  376. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_notifications_sample.py +0 -0
  377. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_resend.py +0 -0
  378. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_resend_sample.py +0 -0
  379. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_tlv.py +0 -0
  380. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_tlv_sample.py +0 -0
  381. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_values.py +0 -0
  382. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_host_values_sample.py +0 -0
  383. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_i2c.py +0 -0
  384. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_i2c_sample.py +0 -0
  385. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_interface_smoke.py +0 -0
  386. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_interfaces.py +0 -0
  387. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_lease.py +0 -0
  388. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_lease_sample.py +0 -0
  389. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_link_routes.py +0 -0
  390. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_link_routes_sample.py +0 -0
  391. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_link_transfer_sample.py +0 -0
  392. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_link_transfers.py +0 -0
  393. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_logic.py +0 -0
  394. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_logic_sample.py +0 -0
  395. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_mailbox.py +0 -0
  396. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_mailbox_sample.py +0 -0
  397. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_notification_retention.py +0 -0
  398. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_notification_retention_sample.py +0 -0
  399. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_notification_sequence.py +0 -0
  400. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_notification_sequence_sample.py +0 -0
  401. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_oep_declarations.py +0 -0
  402. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_oep_smoke.py +0 -0
  403. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_outcome_sample.py +0 -0
  404. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_outcomes.py +0 -0
  405. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_pipeline.py +0 -0
  406. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_pipeline_sample.py +0 -0
  407. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_port_speed.py +0 -0
  408. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_port_speed_execution.py +0 -0
  409. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_port_speed_execution_sample.py +0 -0
  410. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_port_speed_lifecycle.py +0 -0
  411. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_port_speed_sample.py +0 -0
  412. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_probe_input.py +0 -0
  413. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_probe_input_sample.py +0 -0
  414. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_recovery.py +0 -0
  415. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_recovery_race_sample.py +0 -0
  416. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_recovery_races.py +0 -0
  417. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_recovery_sample.py +0 -0
  418. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_refusal_order.py +0 -0
  419. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_refusal_order_sample.py +0 -0
  420. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_replay_pressure.py +0 -0
  421. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_reset.py +0 -0
  422. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_reset_sample.py +0 -0
  423. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_resource_sample.py +0 -0
  424. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_resources.py +0 -0
  425. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_response_race.py +0 -0
  426. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_response_race_sample.py +0 -0
  427. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_restart.py +0 -0
  428. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_restart_sample.py +0 -0
  429. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_retention.py +0 -0
  430. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_retention_lifecycle.py +0 -0
  431. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_retention_lifecycle_sample.py +0 -0
  432. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_retention_sample.py +0 -0
  433. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_retry.py +0 -0
  434. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_retry_sample.py +0 -0
  435. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_route_sample.py +0 -0
  436. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_routes.py +0 -0
  437. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_run.py +0 -0
  438. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_run_sample.py +0 -0
  439. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_scan.py +0 -0
  440. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_scan_options.py +0 -0
  441. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_scan_options_sample.py +0 -0
  442. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_scan_sample.py +0 -0
  443. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_serial.py +0 -0
  444. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_session_loss.py +0 -0
  445. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_session_loss_sample.py +0 -0
  446. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_session_smoke.py +0 -0
  447. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_spi.py +0 -0
  448. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_spi_sample.py +0 -0
  449. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_step.py +0 -0
  450. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_step_sample.py +0 -0
  451. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_stream.py +0 -0
  452. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_stream_sample.py +0 -0
  453. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_subscription_sample.py +0 -0
  454. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_subscriptions.py +0 -0
  455. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_tcp.py +0 -0
  456. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_tcp_peers.py +0 -0
  457. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_tcp_recovery.py +0 -0
  458. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_tcp_recovery_sample.py +0 -0
  459. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_tlv_requests.py +0 -0
  460. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_uart.py +0 -0
  461. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_uart_sample.py +0 -0
  462. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_uart_stream.py +0 -0
  463. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_uart_stream_sample.py +0 -0
  464. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_usb.py +0 -0
  465. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_usb_cases.py +0 -0
  466. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_usb_model.py +0 -0
  467. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_wire_options.py +0 -0
  468. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_wire_options_sample.py +0 -0
  469. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_writer_lease.py +0 -0
  470. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/conformance_writer_lease_sample.py +0 -0
  471. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/console.py +0 -0
  472. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/decode.py +0 -0
  473. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/fixture.py +0 -0
  474. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/frames.py +0 -0
  475. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/hardware.py +0 -0
  476. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/kept_session.py +0 -0
  477. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/linktest.py +0 -0
  478. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/names.py +0 -0
  479. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/pytest_conformance.py +0 -0
  480. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/rp2350.py +0 -0
  481. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/speed_record.py +0 -0
  482. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/targets.py +0 -0
  483. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/uiapduino.py +0 -0
  484. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_allocator_model.py +0 -0
  485. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_arm_adi_model.py +0 -0
  486. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_attach_model.py +0 -0
  487. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_bench_capture.py +0 -0
  488. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_bench_mdns.py +0 -0
  489. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_bench_serial.py +0 -0
  490. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_bench_trigger.py +0 -0
  491. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_bench_usb.py +0 -0
  492. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_block_model.py +0 -0
  493. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_capture_group_geometry_model.py +0 -0
  494. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_clock_model.py +0 -0
  495. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_core.py +0 -0
  496. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_cut_model.py +0 -0
  497. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_data_model.py +0 -0
  498. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_debug_model.py +0 -0
  499. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_declaration_model.py +0 -0
  500. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_dependency_model.py +0 -0
  501. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_dmseq_model.py +0 -0
  502. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_dmseq_target_model.py +0 -0
  503. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_fixture_metadata_model.py +0 -0
  504. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_gpio_lifecycle_model.py +0 -0
  505. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_gpio_model.py +0 -0
  506. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_i2c_model.py +0 -0
  507. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_link_routes_model.py +0 -0
  508. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_link_transfer_model.py +0 -0
  509. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_logic_model.py +0 -0
  510. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_mailbox_model.py +0 -0
  511. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_names.py +0 -0
  512. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_notification_model.py +0 -0
  513. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_oep_declaration_model.py +0 -0
  514. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_outcome_model.py +0 -0
  515. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_pipeline_model.py +0 -0
  516. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_port_speed_execution_model.py +0 -0
  517. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_port_speed_model.py +0 -0
  518. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_reset_model.py +0 -0
  519. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_resource_model.py +0 -0
  520. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_restart_model.py +0 -0
  521. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_retention_model.py +0 -0
  522. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_retry_model.py +0 -0
  523. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_route_model.py +0 -0
  524. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_run_model.py +0 -0
  525. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_scan_model.py +0 -0
  526. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_scan_options_model.py +0 -0
  527. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_spi_model.py +0 -0
  528. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_step_model.py +0 -0
  529. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_stream_model.py +0 -0
  530. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_tlv_request_model.py +0 -0
  531. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_uart_model.py +0 -0
  532. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_wire_options_model.py +0 -0
  533. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/src/oep_client/virtual_writer_lease_model.py +0 -0
  534. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/conftest.py +0 -0
  535. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/equipment/.env.example +0 -0
  536. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/equipment/test_core_contract.py +0 -0
  537. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/equipment/test_preflight.py +0 -0
  538. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/fixtures/hardware.virtual.toml +0 -0
  539. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/.env.example +0 -0
  540. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/.env.virtual.example +0 -0
  541. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/__init__.py +0 -0
  542. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/firmware.py +0 -0
  543. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/flash.py +0 -0
  544. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/hardware.example.toml +0 -0
  545. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/hardware.resolved.example.toml +0 -0
  546. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/.gitignore +0 -0
  547. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.26+5bafb92-0.0.26.json +0 -0
  548. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.26+654b06a-0.0.26.json +0 -0
  549. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.27+ec1df99-0.0.27.json +0 -0
  550. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32+1491c13-0.0.31-20261016T133559.json +0 -0
  551. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32+672bf7b-0.0.32-20261016T164655.json +0 -0
  552. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131458.json +0 -0
  553. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131510.json +0 -0
  554. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131526.json +0 -0
  555. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131532.json +0 -0
  556. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131656.json +0 -0
  557. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131703.json +0 -0
  558. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T131708.json +0 -0
  559. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132050.json +0 -0
  560. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132057.json +0 -0
  561. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/9489dd2ae0953650-0.0.32-0.0.31-20261016T132104.json +0 -0
  562. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+4fad559-0.0.26.json +0 -0
  563. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.26+5bafb92-0.0.26.json +0 -0
  564. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+1491c13-0.0.31-20261016T133501.json +0 -0
  565. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32+672bf7b-0.0.32-20261016T164559.json +0 -0
  566. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T130922.json +0 -0
  567. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-d0wd-v3-0070070d9394-0.0.32-0.0.31-20261016T131024.json +0 -0
  568. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.25-0.0.26.json +0 -0
  569. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+5bafb92-0.0.26.json +0 -0
  570. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+654b06a-0.0.26.json +0 -0
  571. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.26+e877631-0.0.26.json +0 -0
  572. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ac80e07-0.0.27.json +0 -0
  573. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27+ec1df99-0.0.27.json +0 -0
  574. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.27-0.0.27.json +0 -0
  575. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-pico-d4-50029191fe34-0.0.28-0.0.28.json +0 -0
  576. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-pico-d4-50029191fe34-unknown-0.0.26.json +0 -0
  577. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+5bafb92-0.0.26.json +0 -0
  578. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0e31108-0.0.26+654b06a-0.0.26.json +0 -0
  579. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+5bafb92-0.0.26.json +0 -0
  580. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0e343c6-0.0.26+654b06a-0.0.26.json +0 -0
  581. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0e343c6-0.0.27+ec1df99-0.0.27.json +0 -0
  582. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28+ffe4eb1-0.0.28.json +0 -0
  583. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0e343c6-0.0.28-0.0.28.json +0 -0
  584. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+0f013b7-0.0.28.json +0 -0
  585. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+1c940ca-0.0.28.json +0 -0
  586. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+4ef21db+4ef21db-dirty-0.0.28.json +0 -0
  587. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+68d9694-0.0.28.json +0 -0
  588. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ec38b1d-0.0.28.json +0 -0
  589. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28+ffe4eb1-0.0.28.json +0 -0
  590. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/hw/results/esp32-series-30eda0ea068b-0.0.28-0.0.28.json +0 -0
  591. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/spec_names.py +0 -0
  592. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_cobs.py +0 -0
  593. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance.py +0 -0
  594. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_allocator.py +0 -0
  595. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_analog.py +0 -0
  596. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_analog_payload.py +0 -0
  597. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_arm_adi.py +0 -0
  598. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_arm_adi_blocks.py +0 -0
  599. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_attach.py +0 -0
  600. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_blocks.py +0 -0
  601. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_capture_group.py +0 -0
  602. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_capture_group_geometry.py +0 -0
  603. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_capture_serial.py +0 -0
  604. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_capture_timeline.py +0 -0
  605. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_capture_timeline_lifecycle.py +0 -0
  606. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_clock.py +0 -0
  607. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_core_fixed_fields.py +0 -0
  608. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_core_smoke.py +0 -0
  609. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_corr.py +0 -0
  610. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_cut.py +0 -0
  611. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_data.py +0 -0
  612. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_debug.py +0 -0
  613. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_dependencies.py +0 -0
  614. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_discovery.py +0 -0
  615. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_dmseq.py +0 -0
  616. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_dmseq_target.py +0 -0
  617. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_execution_order.py +0 -0
  618. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_exhausted.py +0 -0
  619. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_gpio.py +0 -0
  620. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_gpio_lifecycle.py +0 -0
  621. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_host_core.py +0 -0
  622. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_host_critical_calls.py +0 -0
  623. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_host_deadline.py +0 -0
  624. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_host_notifications.py +0 -0
  625. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_host_resend.py +0 -0
  626. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_host_tlv.py +0 -0
  627. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_host_values.py +0 -0
  628. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_i2c.py +0 -0
  629. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_interface_smoke.py +0 -0
  630. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_interfaces.py +0 -0
  631. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_lease.py +0 -0
  632. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_link_routes.py +0 -0
  633. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_link_transfers.py +0 -0
  634. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_logic.py +0 -0
  635. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_mailbox.py +0 -0
  636. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_notification_output.py +0 -0
  637. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_notification_retention.py +0 -0
  638. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_notification_sequence.py +0 -0
  639. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_oep_declarations.py +0 -0
  640. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_oep_smoke.py +0 -0
  641. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_outcomes.py +0 -0
  642. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_pipeline.py +0 -0
  643. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_port_speed.py +0 -0
  644. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_port_speed_execution.py +0 -0
  645. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_port_speed_lifecycle.py +0 -0
  646. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_probe_input.py +0 -0
  647. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_reconnect.py +0 -0
  648. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_recovery.py +0 -0
  649. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_recovery_races.py +0 -0
  650. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_refusal_order.py +0 -0
  651. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_replay_pressure.py +0 -0
  652. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_replay_records_optional.py +0 -0
  653. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_reset.py +0 -0
  654. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_resources.py +0 -0
  655. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_response_race.py +0 -0
  656. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_restart.py +0 -0
  657. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_retention.py +0 -0
  658. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_retention_lifecycle.py +0 -0
  659. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_retry.py +0 -0
  660. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_routes.py +0 -0
  661. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_run.py +0 -0
  662. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_scan.py +0 -0
  663. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_scan_options.py +0 -0
  664. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_serial.py +0 -0
  665. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_session_loss.py +0 -0
  666. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_session_smoke.py +0 -0
  667. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_spec_guard.py +0 -0
  668. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_spi.py +0 -0
  669. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_step.py +0 -0
  670. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_stream.py +0 -0
  671. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_subscriptions.py +0 -0
  672. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_tcp.py +0 -0
  673. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_tcp_peers.py +0 -0
  674. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_tcp_recovery.py +0 -0
  675. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_tlv_requests.py +0 -0
  676. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_uart.py +0 -0
  677. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_uart_stream.py +0 -0
  678. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_usb.py +0 -0
  679. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_wire_options.py +0 -0
  680. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_conformance_writer_lease.py +0 -0
  681. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_debug_attach.py +0 -0
  682. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_extension_patterns.py +0 -0
  683. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_fixture_targets.py +0 -0
  684. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_flash_console.py +0 -0
  685. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_hardware.py +0 -0
  686. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_hid_stream.py +0 -0
  687. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_host_boot_lifecycle.py +0 -0
  688. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_host_wait_bound.py +0 -0
  689. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_link_drop.py +0 -0
  690. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_link_host.py +0 -0
  691. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_link_serial.py +0 -0
  692. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_linktest.py +0 -0
  693. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_literals.py +0 -0
  694. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_minimal_ops.py +0 -0
  695. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_port_speed.py +0 -0
  696. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_resubscribe_after_reopen.py +0 -0
  697. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review4_capture.py +0 -0
  698. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review4_debug.py +0 -0
  699. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review5_capture.py +0 -0
  700. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review5_core_b.py +0 -0
  701. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review5_debug_targets.py +0 -0
  702. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review5_small.py +0 -0
  703. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review6_capture_console.py +0 -0
  704. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review6_core_early.py +0 -0
  705. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review6_core_late.py +0 -0
  706. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review6_debug_b.py +0 -0
  707. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review7_exact_payload.py +0 -0
  708. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review7_host_recovery.py +0 -0
  709. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review7_request_validation.py +0 -0
  710. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review7_tlv_readers.py +0 -0
  711. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review8_core_1.py +0 -0
  712. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review8_core_2.py +0 -0
  713. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_review8_debug.py +0 -0
  714. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_spec_2c6d18d.py +0 -0
  715. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_spec_sections.py +0 -0
  716. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_target_parts.py +0 -0
  717. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_trace_common.py +0 -0
  718. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_trace_console.py +0 -0
  719. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_trace_debug.py +0 -0
  720. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_trace_link.py +0 -0
  721. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_trace_plan.py +0 -0
  722. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_trace_restart.py +0 -0
  723. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_analog_roles.py +0 -0
  724. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_announce.py +0 -0
  725. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture.py +0 -0
  726. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_changing_trigger.py +0 -0
  727. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_channel_time.py +0 -0
  728. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_formats.py +0 -0
  729. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_initial_trigger_time.py +0 -0
  730. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_lifetime.py +0 -0
  731. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_notifications.py +0 -0
  732. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_one_shot_time.py +0 -0
  733. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_pretrigger.py +0 -0
  734. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_query.py +0 -0
  735. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_rates.py +0 -0
  736. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_requests.py +0 -0
  737. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_resume_calibration.py +0 -0
  738. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_trigger_modes.py +0 -0
  739. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_trigger_source.py +0 -0
  740. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_capture_waiting.py +0 -0
  741. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_serve_tcp_connections.py +0 -0
  742. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_bench_targets.py +0 -0
  743. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_core.py +0 -0
  744. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/test_virtual_core_bool.py +0 -0
  745. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/capture_formats.json +0 -0
  746. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/checks.json +0 -0
  747. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/cobs.json +0 -0
  748. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/confirm.json +0 -0
  749. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/core_extensions.json +0 -0
  750. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/core_lifecycle.json +0 -0
  751. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/core_policy.json +0 -0
  752. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/discovery.json +0 -0
  753. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/headers.json +0 -0
  754. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/logic_layout.json +0 -0
  755. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/ops_encoding.json +0 -0
  756. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/refusals.json +0 -0
  757. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/tests/vectors/sessions.json +0 -0
  758. {oep_client_python-0.0.36 → oep_client_python-0.0.38}/udev/70-oep-probe.rules +0 -0
@@ -2,6 +2,67 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.0.38
6
+ - (JA) 名前と初期値(oep-spec cc82b5e)に合わせた:
7
+ - 設定の値は出どころを持たない。get の値は fn number key len data で、`Value.origin` と `show()` の 4 つ目を無くした。書き出しは全部の値、
8
+ 入れ直しは unset を先に、全部の値と比べる。`unset_all` は全部の値を消す。`changeable()`(set / unset があるか。初期値だけの probe は get だけ)。
9
+ - 口と線(host ガイド §5.3): label `S.N` が口 S の線 N(S は英字で始まる英字・数字・`-` の 16 文字まで、N は英字・数字・`-`・`_`)。
10
+ 大小文字を区別せずに比べ、書いたとおりに見せる。裸の `nrst` は口の線にならない。`find_line(source, name, port=None)`(口を省くと名付けられた
11
+ 口が 1 つのときだけ)、`ports_named`、`port_line`。`core.firmware_labels` / `probe_labels` は無くした(固定の label が無いため)。
12
+ - `oep pins` は `<口>.nrst` / `<口>.power_hi` を勧める(口は `--name`、無ければ probe にある 1 つの口)。
13
+ - 仮想ベンチ: 出どころを無くし、profile の label は初期値(保存の無い起動で入る。`x035.swdio`、`v003.swio` などの `S.N` の形)。label は
14
+ 大小文字を区別せずに一意(重なる set は unavailable cause 5、保存に 2 つあれば channel の小さい方)。`with_settings(changeable=False)` で get だけ。
15
+
16
+ ## 0.0.37
17
+ - (JA) 設定を core(oep-spec core §13、9fc6ad9 / c4fbd6e)に合わせた。`oep_client.config`(`oep.probe.config`)を無くし、
18
+ `oep_client.settings` を足した:
19
+ - fn 0 の get / set / unset / save / state / network。値は(fn、項目番号、key)で運び、host には(カテゴリ、平らな名前、値、出どころ)で見せる。
20
+ - 設定のファイル(docs/oep-settings-file.ja.md)の書き出しと入れ直し(`export`、`plan_import`、`apply_import`)。secret は読まない。
21
+ - `oep config` を `oep settings`(show / items / set / unset / save / state / network / export / import)に置き換えた。
22
+ - 仮想ベンチは fn 0 の設定(各持ち主の項目、固定・既定の値、名前での保存)を持つ。共有ベクタの設定の場合と settings_file.json を通す。
23
+ - 線の名前の探し方(`find_line`)は、出どころによらず全部の `channel.{}.label` から探す(firmware の label も設定の固定の値)。
24
+ - (JA) libusb1 経由の HID(hidapi がない環境の経路)で、カーネルの HID ドライバを外して interface を claim してから、
25
+ レポート記述子を読むようにした。今までは claim の前に読んでいて、Linux の usbfs に LIBUSB_ERROR_IO で断られていた
26
+ (RP2 の HID は interface 3、2026-10-22)。OEP の記述子でなければ interface を戻し、ドライバを付け直す。
27
+ - (JA) `CaptureDrops` に dropped_bytes を足した。ストリームが落としたバイト数の合計で、理由を問わない(写す経路で区画を捨てた
28
+ 分も含む)。oep-probe-arduino e08687c 以降。それより前の形では None。
29
+ - (JA) USB(vendor bulk)の既定を `UsbProcessStream` にした(POSIX のみ)。
30
+ - wireskein の測定: 負荷 14 の host で、P4X の 40 MB/s・30 秒を取った。thread の版は 6 回中 3 回で欠損があり、process の
31
+ 版は 3 回とも欠損 0 だった。
32
+ - `OEP_USB_STREAM=thread` で、今までどおり UsbAsyncStream(このプロセスのスレッド)を使う。Windows は pipe を fd で
33
+ 渡せないので、今までどおり。
34
+ - 子プロセスが動かない(起動できない、準備の前に終わった、時間切れ)ときは、警告を出して UsbAsyncStream に戻す。機器が
35
+ 無いという答えはそのまま返す。
36
+ - 開くのに、子プロセスを起こす分だけ時間がかかる(約 0.6 秒)。
37
+ - (JA) `CaptureDrops` に spill_peak と spill_bytes を足した。P4 のファーム 826eee0 からの、ストリームの DMA リングの後ろの
38
+ 待避 FIFO(PSRAM、8 MiB)の最大使用量と大きさ。それより前のファームの形では None。
39
+ - (JA) `UsbAsyncStream` の既定を 32 KiB × 480 本にした(前は 64 KiB × 128)。
40
+ - probe は各転送を短いパケットで終えるので、URB の大きさによらず 1 本に 1 フレーム(40 MB/s の P4X で約 19 KB)しか入らない。
41
+ host が溜められるのは「本数 × 1 フレーム」になる(64 KiB × 128 は約 2.4 MB、40 MB/s で 60 ms)。wireskein の測定による。
42
+ - 480 × 32 KiB は 15 MiB で、usbfs_memory_mb の既定 16 に収まる。usbfs が途中で断ったら、そこまでの本数で続ける
43
+ (1 本も出せなければ例外)。
44
+ - `open_usb_host(urb_size=, depth=)` で選べる。UsbProcessStream は、このプロセスの URB_SIZE / DEPTH を引き継ぐ。
45
+ - (JA) `UsbProcessStream`: UsbAsyncStream を別のプロセス(`python -m oep_client.usb_stream`)で動かす。形は UsbAsyncStream と同じ
46
+ (read、in_waiting、write、reset_input_buffer、close、stats)。
47
+ - IN の転送の受け取りと出し直しは、そのプロセスの event のスレッドと GIL で行う。host の側のスレッドが GIL を長く持っても
48
+ (numpy、大きな bytes の結合など)、転送は止まらない。読まれていない分は、そのプロセスに溜まる。
49
+ - データはパイプで、write と stats は socket pair で受け渡す。multiprocessing の spawn は使わない(呼び出し側の __main__ を
50
+ もう一度走らせるため)。
51
+ - 環境変数 `OEP_USB_STREAM=process` で、open_host の USB がこれを使う(既定は今までどおり UsbAsyncStream)。
52
+ - wireskein の切り分けを受けた。負荷 14 のとき、event のスレッドが最大 6 秒止まり、40 MB/s の P4X で欠損が出ていた。
53
+ 実機では、まだ確かめていない。
54
+ - (JA) `UsbAsyncStream`: 戻った IN の転送は、データを写したらすぐ出し直し、ロック(read() と共有)はその後に取るようにした。
55
+ 前はロックを取ってから出し直していたので、read() がロックを持つ間は転送が戻らなかった。`stats()` を足した(callbacks、
56
+ inflight_min = callback の時点で出ていた転送の最少、gap_max_s = callback の間隔の最大、buffered_max、bytes、urb_size、
57
+ depth)。`open()` / コンストラクタで urb_size と depth を選べる(既定は URB_SIZE × DEPTH = 64 KiB × 128)。
58
+ wireskein の切り分け(負荷 14 で 40 MB/s に欠損。event のスレッドが時々数百 ms から数秒止まる)を受けた。
59
+ - (JA) `CaptureGroup.stream(link, tracks, seconds=, nbytes=, into=)` -> `{fn: Received}`: ストリーミングのトラックを集めた
60
+ capture-group で、1 本の経路に混ざって届く push をトラックごと(fn ごと)の Received に分けて集める。seq、generation、gap、
61
+ segment_info の扱いは `LogicCapture.stream()` と同じ(その内側を `_collect()` に切り出した)。nbytes は全トラックが届くまで待つ。
62
+ `CaptureGroup.finish()` は各トラックの `finish()` を呼ぶ。wireskein の依頼。
63
+ - (JA) `Wire.scan`: 1 回の要求に入れる組を、255 までかつ経路の max_frame に収まる数にした。前は 255 組を詰めていて、
64
+ max_frame 1024 の経路で候補が多いと(rp2350-pins の 812 組)1031 バイトの要求を送っていた(仮想ベンチはそれを受けていた)。JS への移植で見つかった。
65
+
5
66
  ## 0.0.36
6
67
  - (JA) 試験: segment_columns の試験は、numpy が無ければ飛ばす(numpy は任意の依存。numpy の無い CI で落ちていた)。
7
68
  - (JA) `CaptureGroup.trigger_caps()` -> `TriggerCaps | None`: capture-group の describe の trigger_caps(§4.4、0x41)を読む(max_stages、
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: oep-client-python
3
- Version: 0.0.36
3
+ Version: 0.0.38
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
@@ -84,7 +84,7 @@ names starting with `_`, may change. Check probe/client compatibility using the
84
84
  | `pins` | `oep pins`: classify the channels, hold-low search, scan, identify, confirm the reset line, suggest the connection profile and the labels (`PinFinder`) |
85
85
  | `console` | `oep.target.console` (position streams: read answers carry their length; marks carry `time_ns`, the common kinds lost / clear / host and the console's reset 0x40 / restart 0x41; the lock-free `streams()` list of stream, connection and mechanism; `open(conn, mechanism)` always makes a new stream (u32) on the connection - a second on a connection with a live one is unavailable cause 6 -; a stream is the session's - close, its connection's release and the session's end release it with its buffer, and its number answers no_resource after that; a write goes into the stream's send queue - its size is the probe's own, not declared -, accepted = min(count, its free space), 0 only when full; an SDI stream's write is unsupported; marks, clear, mark and write are optional) and `ConsoleIO`, read as bytes and written in chunks of at most one frame, on from each answer's accepted (`stall_s`: TimeoutError when nothing is taken for that long) |
86
86
  | `fixture` | `oep.fixture.gpio` (`set([(ch, mode)])` applied in order in one request, `read(channels)` the levels; the output strength is the probe's own - there is no drive selection) / `uart` (its stream is the plan's; nothing is received until `configure(baud, fmt)`; `status()` = `UartStatus(baud, format)` in force, baud 0 and format 0 while not configured; a configure the probe could not bring up raises `Failed` and leaves it not configured) / `i2c-target` (one form: `configure(address)` - the target made anew -, every controller write with data one frame for `read_rx`, reads answered from `preload_tx(data)` slots or 0xFF, `status()` = `I2cStatus(state, queued, rx_frames, tx_slots, errors)`, `stretch` when the ops offer it, `internal_pullups`: whether it enables pull-ups of its own; the reserved addresses 0x00-0x07 / 0x78-0x7F refused before sending) / `spi-target` (no reset: configure again; `cs_setup_ns`: how long after CS the first bit is sure; `oep dump` shows it) |
87
- | `config` | `oep.probe.config` (label / idle / disable items keyed by channel, get / set / unset with counts, save / erase / state when the probe has storage; `describe()` = the declarations, `state()` = `State(storage, saved_generation, reason)`; the generation counts the changes of a boot from 1: `same_items(a, b)` compares items, `needs_save()` says whether a save would change the storage, `apply(wanted, save=False)` sets / unsets what differs (host guide §15); `find_line(cfg, "nrst", profile=None)` = host guide §5.3's line lookup, the firmware's fixed labels as its last step) |
87
+ | `settings` | the core's settings (oep-spec core §13): fn 0's get / set / unset / save / state / network. `Settings(hst)`: `catalog()` = the names of this boot (each fn's category `core` / `name/instance`, items, choices, channel / route / netif names), `show()` = every value as (category, flat name, value) (no origin: the firmware's initial values are values like any other, core §13.4), `changeable()` (set / unset offered), `set_named(category, {flat: value})` / `unset_named` / `unset_all`, raw `set` / `unset` by (fn, number, key), `save()`, `state()`, `network()`; `export()` / `plan_import(doc)` / `apply_import(plan)` = the settings file (oep-spec docs/oep-settings-file.ja.md; secrets never read); `find_line(source, "nrst", port=None)` = host guide §5.3's line lookup: port S's line N is the label `S.N` (ignoring ASCII case; without a port the one port named), `ports_named(labels)` the ports as written |
88
88
  | `capture` | `oep.fixture.logic` / `analog` / `capture-group` (revision 1, oep-spec oep-if-capture). configure's TLVs follow core §2.3: a value the probe cannot honour is refused unsupported with the tag as sent (the table's TLVs go without the critical bit); the answer holds the actual values, its samples among them (analog: a scale for every role, a skew left out read as 0). Every `start()` returns a new generation (`LogicCapture.generation`, never re-used within a boot: past 0xFFFFFFFF a start is refused until a reboot) that read and release name - `read_segment(segment)` passes the segment's own - and every event carries (`events()` drops an earlier start's); streaming data frames carry their generation and their segment (segment_info, never crossing a segment: `Received.segments`); `status()` returns a `Status`. A capture-group binds configured tracks with an immediate trigger, all in one mode, and starts them at once (`CaptureGroup.start` -> the group's start_ns; the group's and each track's generation). Every segment read goes to the `Host.on_capture` callbacks as a `CaptureRecord` (the hook for run recorders; no wireskein dependency) |
89
89
  | `decode` | decoding capture channels (I2C) |
90
90
  | `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 |
@@ -135,10 +135,13 @@ A probe's CDC ports (`/dev/ttyACM*`) need no rule beyond the usual `dialout` gro
135
135
 
136
136
  ```sh
137
137
  oep dump --port <probe> # what the probe offers (--virtual p4-x035: no hardware)
138
- oep config show <probe> # the settings, the declarations and the storage state
139
- oep config state <probe> # the storage state alone (lock-free)
140
- oep config label <probe> 23 nrst # also: idle CH MODE, disable CH..., remove KIND CH (each takes --save)
141
- oep config save <probe> # kept over a restart (also: erase)
138
+ oep settings show <probe> # every value, and the storage state
139
+ oep settings items <probe> # what each owner declares (names, forms, choices)
140
+ oep settings set <probe> core channel.GPIO23.label=v003.nrst channel.GPIO20.idle=pull-up [--save]
141
+ oep settings unset <probe> core channel.GPIO20.idle [--save] # or --all (then --save empties the storage)
142
+ oep settings save <probe> # kept over a restart
143
+ oep settings export <probe> jig.oep-settings.json # every value by name (secrets as present only)
144
+ oep settings import <probe> jig.oep-settings.json [--save] # shows the changes, asks, then sets / unsets
142
145
  oep speed <probe> [921600,500000] [--verify] [--flows out:2] # port_speed: raise a UART bridge (default 500000), print the report (below)
143
146
  oep pins <probe> --power 5 --wire swio # where the target is wired: debug pins, reset line, labels (below)
144
147
  oep clock <probe> [-n 8] [--json] # fn 0's clock: uptime_ns and boot_id against this host's time (shortest of n)
@@ -150,7 +153,7 @@ oep linktest <probe> ... # --timeout: 0.3 s an answer by def
150
153
 
151
154
  `<probe>` is a serial port, `tcp://HOST:PORT`, `tcp://HOST` (the port DNS-SD finds for that host), `tcp:UNIT_ID` (the
152
155
  probe DNS-SD finds by its TXT unit_id; describe's unit_id must say the same, else it is closed) or
153
- `usb[:VID:PID[:SERIAL]]`. A change takes the lock (owner "oep config") and
156
+ `usb[:VID:PID[:SERIAL]]`. A change takes the lock (owner "oep settings") and
154
157
  ends the session after it; it takes effect at once and, after `save`, stays over a restart.
155
158
 
156
159
  ### A host run again: the kept session id
@@ -176,7 +179,7 @@ sets `hst.kept = kept_session.KeptSession()` on a Host it builds itself.
176
179
 
177
180
  ### TCP
178
181
 
179
- A probe that serves OEP over TCP is found by DNS-SD (its network settings are not oep.probe.config's).
182
+ A probe that serves OEP over TCP is found by DNS-SD (its network settings are the core's: transports §7).
180
183
 
181
184
  - `oep find` browses `_oep._tcp` (transports §3, host guide §4.1) and lists unit_id, host, port and address. The
182
185
  service name `oep` is not registered, so another service may advertise `_oep._tcp`: each instance is verified first
@@ -220,8 +223,8 @@ option-byte reader for the reset line, max_speed / idle_clock).
220
223
  NRST exists (read only, never written); then resume.
221
224
  5. **reset**: attach under reset through each candidate - the real line stops the hart at the reset vector.
222
225
  6. **labels**: the connection profile the host keeps (wire, pins, line settings: the probe keeps no wiring) and the
223
- labels `nrst` / `power_hi` (`<name>.nrst` / `<name>.power_hi` with `--name`, a probe serving several targets),
224
- checked with `config.find_line` against the probe's settings (a note when another channel already carries the name:
226
+ labels `<port>.nrst` / `<port>.power_hi` (the port: `--name`, else the one port the probe's labels name; neither:
227
+ a note asks for `--name`), checked with `settings.find_line` against the probe's settings (a note when another channel already carries the name:
225
228
  the line would not be found); `--save` writes the labels (set + save). Nothing is written without `--save`.
226
229
 
227
230
  Safety: a driven or active channel is never driven, scanned or held; the power channel is touched only with `--power`;
@@ -233,7 +236,7 @@ pulls; its "pulled-up" row (channel 4, the reset line's weak pull-up) is left ou
233
236
  alone that channel reads floating:
234
237
 
235
238
  ```
236
- $ oep pins /run/board-identify/by-id/esp32-series-30eda0ea068b --power 5 --wire swio
239
+ $ oep pins /run/board-identify/by-id/esp32-series-30eda0ea068b --power 5 --wire swio --name v003
237
240
  power: channel 5 low 300 ms (target off: read), then high 400 ms before the reads
238
241
  classify: 52 channels, 16 reads each under pull-up, pull-down
239
242
  floating 0-3,6,9-20,26-34,36-50,52-54
@@ -249,9 +252,9 @@ attach swio 19: target_id 00310510 (WCH DMI 0x7F) -> ch32v00x, halted at dpc 0x1
249
252
  option bytes (read only): RST_MODE 10 (USER 0xf7): NRST on PD7, 12 ms ignore window
250
253
  attach under reset through 4 (held 20 ms): dpc 0x0 -> the reset line
251
254
  profile: wire swio, pins 19 (the host's to keep: the probe keeps no wiring)
252
- label: oep config label ... 4 nrst (not written)
253
- label: oep config label ... 5 power_hi (not written)
254
- idle: oep config idle ... 5 output-high (keeps the target powered while no plan holds channel 5; not written by this tool)
255
+ label: oep settings set ... core channel.GPIO4.label=v003.nrst (not written)
256
+ label: oep settings set ... core channel.GPIO5.label=v003.power_hi (not written)
257
+ idle: oep settings set ... core channel.GPIO5.idle=high (keeps the target powered while no plan holds channel 5; not written by this tool)
255
258
  released every plan (channel 5 is back to its idle state: the target is powered only while something drives it)
256
259
  done in 7.3 s
257
260
  ```
@@ -394,10 +397,11 @@ halted or a riscv-dm request of that connection runs (`console_take(sid)` hands
394
397
  lines outside through `gpio_world`); uart receives nothing until configured, status baud and format; i2c-target one form
395
398
  (a write with data one frame, cut at max_length; reads from preload_tx slots, else 0xFF); spi-target without reset.
396
399
  Capture: configure's TLVs follow core §2.3 alone; a bound track's start / configure is unavailable cause 4, a bind short
397
- of resources cause 2 with the fn; a read at or past the write position answers write_pos and len 0. probe.config: label / idle /
398
- disable items (idle 3 bytes; an item of another length malformed); the generation counts the changes of a boot from 1;
399
- state is storage_state, saved_generation, reason; at boot the saved items are checked one by one, disable first, and what
400
- fails is left out (partial). port_speed: baud / step / verify_ms on the UART bridge the request came in on, within
400
+ of resources cause 2 with the fn; a read at or past the write position answers write_pos and len 0. The settings (core §13): each fn's items from its
401
+ describe, values without origin (the profile's initial values in on a boot without a save; labels unique but for ASCII
402
+ case, a probe of get alone with `changeable=False`); a value of another length
403
+ malformed; the generation counts the changes of a boot from 1; state is storage_state, saved_generation, reason; at boot
404
+ the saved values (by category and item name) are checked one by one, disable first, and what fails is left out (partial). port_speed: baud / step / verify_ms on the UART bridge the request came in on, within
401
405
  port_speed_tolerance_pct, phases 0-3 read by port_state; the virtual bench goes back after verify_ms, after
402
406
  port_speed_idle_ms with no good frame, or at the session's end - never on broken frames.
403
407
 
@@ -52,7 +52,7 @@ GitHub Release、PyPI(Trusted Publishing)へ出す。変更は CHANGELOG.md
52
52
  | `pins` | `oep pins`: channel の分類、low に保つ探索、scan、識別、リセットの線の確かめ、接続プロファイルと label の提案(`PinFinder`) |
53
53
  | `console` | `oep.target.console`(位置つきのストリーム: read の応答は長さを持ち、マークは `time_ns` と、共通の kind の lost / clear / host、コンソールの reset 0x40 / restart 0x41 を持つ。ロック不要の `streams()` は stream、connection、mechanism の並び。`open(conn, mechanism)` はいつもその connection に新しいストリーム(u32)を作る - 生きているストリームのある connection への 2 つ目は unavailable cause 6 -。ストリームはセッションのもので、close、connection の解放、セッションの終わりでバッファごと解放され、その番号はその後 no_resource。write はストリームの送りの列に入る - 列の大きさは probe が決め、宣言しない -。accepted = count と列の空きの小さい方で、0 は列が満ちたときだけ。SDI のストリームへの write は unsupported。marks、clear、mark、write は任意)と、バイト列として読み、多くても 1 フレームずつ、応答の accepted の続きから書く `ConsoleIO`(`stall_s`: その間何も受けなければ TimeoutError) |
54
54
  | `fixture` | `oep.fixture.gpio`(`set([(ch, mode)])` は 1 つの要求で順に当て、`read(channels)` は level を返す。出力の強さは probe 自身のもので、選ぶ手段は無い)/ `uart`(ストリームは plan が作る。`configure(baud, fmt)` までは何も受けない。`status()` = いま効いている `UartStatus(baud, format)` で、configure していなければ baud 0、format 0。probe が立ち上げられなかった configure は `Failed` を上げ、configure していない状態に戻る)/ `i2c-target`(1 つの形: `configure(address)` - target を作り直す -、データのある controller の書き込み 1 回が `read_rx` の 1 フレーム、読み出しには `preload_tx(data)` の置き場か 0xFF で答える、`status()` = `I2cStatus(state, queued, rx_frames, tx_slots, errors)`、ops にあれば `stretch`、`internal_pullups`: 自分の pull-up を入れるか。予約のアドレス 0x00〜0x07 / 0x78〜0x7F は送る前に断る)/ `spi-target`(reset は無く、configure し直す。`cs_setup_ns`: CS の後、最初のビットが確かになるまでの時間。`oep dump` が出す) |
55
- | `config` | `oep.probe.config`(channel ごとの label / idle / disable の項目、count 付きの get / set / unset、保存を持つ probe では save / erase / state。`describe()` = 宣言、`state()` = `State(storage, saved_generation, reason)`。generation は起動から 1 で数える変更の回数: `same_items(a, b)` は項目で比べ、`needs_save()` は保存すると保存が変わるかを言い、`apply(wanted, save=False)` は違う分を set / unset する(host ガイド §15)。`find_line(cfg, "nrst", profile=None)` = host ガイド §5.3 の線の探し方で、firmware の固定 label が最後の段) |
55
+ | `settings` | core の設定(oep-spec core §13): fn 0 の get / set / unset / save / state / network。`Settings(hst)`: `catalog()` = その起動の名前(各 fn のカテゴリ `core` / `name/instance`、項目、選択肢、channel・経路・netif の名前)、`show()` = 全部の値を(カテゴリ、平らな名前、値)で(出どころは無い。firmware の初期値もほかの値と同じ、core §13.4)、`changeable()`(set / unset があるか)、`set_named(category, {平らな名前: 値})` / `unset_named` / `unset_all`、番号での `set` / `unset`、`save()`、`state()`、`network()`。`export()` / `plan_import(doc)` / `apply_import(plan)` = 設定のファイル(oep-spec docs/oep-settings-file.ja.md。secret は読まない)。`find_line(source, "nrst", port=None)` = host ガイド §5.3 の線の探し方(口 S の線 N は label `S.N`、ASCII の大小文字を区別しない。口を省くと名付けられた口が 1 つのときだけそれ)、`ports_named(labels)` は口の名前を書いたとおりに |
56
56
  | `capture` | `oep.fixture.logic` / `analog` / `capture-group`(revision 1、oep-spec の oep-if-capture)。configure の TLV は core §2.3 に従う: probe が守れない値は送ったままの tag で unsupported で断られる(表の TLV は critical を付けずに送る)。応答が実際の値で、samples もそれが正しい(アナログ: scale は役割ごとに必ずあり、省かれた skew は 0 と読む)。`start()` はそのたびに新しい世代を返す(`LogicCapture.generation`。同じ起動の間は使い回さず、0xFFFFFFFF の後の start は再起動まで断られる)。read と release はその世代を付け(`read_segment(segment)` は区画自身の世代を付ける)、どの出来事も世代を持つ(`events()` は前の start のものを捨てる)。ストリーミングのデータフレームは世代と自分の区画を持ち、区画をまたがない(segment_info、`Received.segments`)。`status()` は `Status` を返す。capture-group は configure 済みで即時のトリガの、同じ mode のトラックを束ね、一度に始める(`CaptureGroup.start` -> group の start_ns。group と各トラックの世代)。読んだ区画は `Host.on_capture` の callback に `CaptureRecord` で渡る(記録の受け口。wireskein には依存しない) |
57
57
  | `decode` | キャプチャのチャネルの復号(I2C) |
58
58
  | `registry` | oep-spec の番号の表から生成したモジュール(編集しない。oep-spec から写し直す)。名前からインターフェースの番号を引く公開の入口は `registry.INTERFACES[name]`(`.revision`、`.op`、`.tlv`、`.enum`。例 `INTERFACES["oep.fixture.uart"].enum["role"]`)。`FIXTURE_UART` などのモジュールの名前は同じもの |
@@ -102,10 +102,13 @@ probe の CDC の口(`/dev/ttyACM*`)は、いつもの `dialout` グルー
102
102
 
103
103
  ```sh
104
104
  oep dump --port <probe> # 能力の一覧(--virtual p4-x035 でハードウェアなし)
105
- oep config show <probe> # 設定、宣言、保存の状態
106
- oep config state <probe> # 保存の状態だけ(ロック不要)
107
- oep config label <probe> 23 nrst # ほかに idle CH MODE、disable CH...、remove KIND CH(どれも --save を取る)
108
- oep config save <probe> # 再起動の後も残す(erase もある)
105
+ oep settings show <probe> # 全部の値と、保存の状態
106
+ oep settings items <probe> # 各持ち主が宣言する項目(名前、形、選択肢)
107
+ oep settings set <probe> core channel.GPIO23.label=v003.nrst channel.GPIO20.idle=pull-up [--save]
108
+ oep settings unset <probe> core channel.GPIO20.idle [--save] # --all なら全部(その後の --save で保存も空に)
109
+ oep settings save <probe> # 再起動の後も残す
110
+ oep settings export <probe> jig.oep-settings.json # 全部の値を名前で書き出す(secret はあることだけ)
111
+ oep settings import <probe> jig.oep-settings.json [--save] # 変わる所を見せ、確かめてから set / unset
109
112
  oep speed <probe> [921600,500000] [--verify] [--flows out:2] # port_speed: UART bridge を速くし(既定 500000)、結果を出す(下)
110
113
  oep pins <probe> --power 5 --wire swio # target のつながり方: debug のピン、リセットの線、label(下)
111
114
  oep clock <probe> [-n 8] [--json] # fn 0 の clock: uptime_ns と boot_id をこの host の時刻に合わせて(n 回のうち往復が最短のもの)
@@ -116,7 +119,7 @@ oep linktest <probe> ... # --timeout: 既定は応答 1 つ
116
119
  ```
117
120
 
118
121
  `<probe>` はシリアルの口、`tcp://HOST:PORT`、`tcp://HOST`(その host に DNS-SD が見つけた port)、`tcp:UNIT_ID`(TXT の unit_id で
119
- DNS-SD が見つけた probe。describe の unit_id が同じでなければ閉じる)、`usb[:VID:PID[:SERIAL]]`。変更はロックを取り(owner "oep config")、終わったら
122
+ DNS-SD が見つけた probe。describe の unit_id が同じでなければ閉じる)、`usb[:VID:PID[:SERIAL]]`。変更はロックを取り(owner "oep settings")、終わったら
120
123
  セッションを閉じる。変更はすぐ効き、`save` の後は再起動しても残る。
121
124
 
122
125
  ### 走り直す host: 残したセッションの id
@@ -141,7 +144,7 @@ Host に `hst.kept = kept_session.KeptSession()` を置く。
141
144
 
142
145
  ### TCP
143
146
 
144
- TCP で OEP を運ぶ probe は DNS-SD で見つける(ネットワークの設定は oep.probe.config のものではない)。
147
+ TCP で OEP を運ぶ probe は DNS-SD で見つける(ネットワークの設定は core のもの: transports §7)。
145
148
 
146
149
  - `oep find` は `_oep._tcp` を browse し(transports §3、host ガイド §4.1)、unit_id、host、port、アドレスを並べる。service の名前
147
150
  `oep` は登録した名前ではないので、別のサービスが `_oep._tcp` を広告しうる: どの instance もまず確かめる(`discovery.verify`、
@@ -180,9 +183,9 @@ TCP で OEP を運ぶ probe は DNS-SD で見つける(ネットワークの
180
183
  4. **identify**: 答えた線に attach(halt)し、target_id で系統を見る。CH32V00x は option bytes で NRST の有無を見る(読むだけ、
181
184
  書かない)。その後 resume。
182
185
  5. **reset**: 候補ごとにリセットをかけながら attach する。本物の線なら hart はリセットのベクタで止まる。
183
- 6. **labels**: host が持つ接続プロファイル(線、ピン、線の設定。probe は配線を持たない)と、label `nrst` / `power_hi`
184
- (`--name` を付けると `<名前>.nrst` / `<名前>.power_hi`。複数の target を受ける probe 向け)を勧める。label は probe の設定に
185
- 対して `config.find_line` で確かめる(別の channel がもうその名前を持っていれば、線が見つからなくなるので note で言う)。
186
+ 6. **labels**: host が持つ接続プロファイル(線、ピン、線の設定。probe は配線を持たない)と、label `<口>.nrst` / `<口>.power_hi`
187
+ (口は `--name`、無ければ probe の label が名付ける口が 1 つのときその口。どちらも無ければ note で `--name` を求める)を勧める。label は probe の設定に
188
+ 対して `settings.find_line` で確かめる(別の channel がもうその名前を持っていれば、線が見つからなくなるので note で言う)。
186
189
  `--save` で label を書く(set + save)。`--save` が無ければ何も書かない。
187
190
 
188
191
  安全: driven / active の channel は駆動も scan も保持もしない。電源の channel は `--power` のときだけ触る。low に保つのは
@@ -193,7 +196,7 @@ ESP32-P4 と CH32V003(電源は GPIO5)、2026-10-02。2026-10-07 の変更
193
196
  "pulled-up" の行(channel 4、リセットの線の弱い pull-up)はここでは除いた - pull-up と pull-down だけなら floating と読める:
194
197
 
195
198
  ```
196
- $ oep pins /run/board-identify/by-id/esp32-series-30eda0ea068b --power 5 --wire swio
199
+ $ oep pins /run/board-identify/by-id/esp32-series-30eda0ea068b --power 5 --wire swio --name v003
197
200
  power: channel 5 low 300 ms (target off: read), then high 400 ms before the reads
198
201
  classify: 52 channels, 16 reads each under pull-up, pull-down
199
202
  floating 0-3,6,9-20,26-34,36-50,52-54
@@ -209,9 +212,9 @@ attach swio 19: target_id 00310510 (WCH DMI 0x7F) -> ch32v00x, halted at dpc 0x1
209
212
  option bytes (read only): RST_MODE 10 (USER 0xf7): NRST on PD7, 12 ms ignore window
210
213
  attach under reset through 4 (held 20 ms): dpc 0x0 -> the reset line
211
214
  profile: wire swio, pins 19 (the host's to keep: the probe keeps no wiring)
212
- label: oep config label ... 4 nrst (not written)
213
- label: oep config label ... 5 power_hi (not written)
214
- idle: oep config idle ... 5 output-high (keeps the target powered while no plan holds channel 5; not written by this tool)
215
+ label: oep settings set ... core channel.GPIO4.label=v003.nrst (not written)
216
+ label: oep settings set ... core channel.GPIO5.label=v003.power_hi (not written)
217
+ idle: oep settings set ... core channel.GPIO5.idle=high (keeps the target powered while no plan holds channel 5; not written by this tool)
215
218
  released every plan (channel 5 is back to its idle state: the target is powered only while something drives it)
216
219
  done in 7.3 s
217
220
  ```
@@ -331,9 +334,9 @@ restart 0x41。DMDATA / dmseq のストリームの送りの列は poll ごと
331
334
  (外の線は `gpio_world`)。uart は configure するまで何も受けず、status は baud と format。i2c-target は 1 つの形(データのある書き込み
332
335
  1 回が 1 フレームで max_length で切る。読み出しは preload_tx の置き場から、無ければ 0xFF)。spi-target に reset は無い。capture:
333
336
  configure の TLV は core §2.3 だけに従う。bind されたトラックの start / configure は unavailable cause 4、資源の足りない bind は cause 2 と
334
- fn。書き込み位置以降の read は write_pos と len 0 を答える。probe.config: label / idle / disable の項目(idle は 3 byte。長さが形と違う
335
- 項目は malformed)。generation は起動から 1 で数える変更の回数。state は storage_state、saved_generation、reason。起動時は保存した項目を
336
- 1 つずつ確かめ、disable を先に当て、当てられないものは外す(部分適用)。port_speed: 要求が来た UART bridge の口への
337
+ fn。書き込み位置以降の read は write_pos と len 0 を答える。設定(core §13): 各 fn の項目は describe から、値は出どころを持たない(profile の初期値は保存の無い起動で入る。label は
338
+ ASCII の大小文字を区別せずに一意。`changeable=False` で get だけの probe)。長さが形と違う値は malformed。generation は起動から 1 で数える変更の回数。state は storage_state、saved_generation、reason。
339
+ 起動時は保存した値(カテゴリと項目の名前で)を 1 つずつ確かめ、disable を先に当て、当てられないものは外す(部分適用)。port_speed: 要求が来た UART bridge の口への
337
340
  baud / step / verify_ms で、port_speed_tolerance_pct の内、phase 0〜3 は port_state で読める。仮想ベンチが戻るのは verify_ms の後、正常な
338
341
  フレームの無い port_speed_idle_ms の後、セッションの終わり - 壊れたフレームでは戻らない。
339
342
 
@@ -59,7 +59,7 @@ names starting with `_`, may change. Check probe/client compatibility using the
59
59
  | `pins` | `oep pins`: classify the channels, hold-low search, scan, identify, confirm the reset line, suggest the connection profile and the labels (`PinFinder`) |
60
60
  | `console` | `oep.target.console` (position streams: read answers carry their length; marks carry `time_ns`, the common kinds lost / clear / host and the console's reset 0x40 / restart 0x41; the lock-free `streams()` list of stream, connection and mechanism; `open(conn, mechanism)` always makes a new stream (u32) on the connection - a second on a connection with a live one is unavailable cause 6 -; a stream is the session's - close, its connection's release and the session's end release it with its buffer, and its number answers no_resource after that; a write goes into the stream's send queue - its size is the probe's own, not declared -, accepted = min(count, its free space), 0 only when full; an SDI stream's write is unsupported; marks, clear, mark and write are optional) and `ConsoleIO`, read as bytes and written in chunks of at most one frame, on from each answer's accepted (`stall_s`: TimeoutError when nothing is taken for that long) |
61
61
  | `fixture` | `oep.fixture.gpio` (`set([(ch, mode)])` applied in order in one request, `read(channels)` the levels; the output strength is the probe's own - there is no drive selection) / `uart` (its stream is the plan's; nothing is received until `configure(baud, fmt)`; `status()` = `UartStatus(baud, format)` in force, baud 0 and format 0 while not configured; a configure the probe could not bring up raises `Failed` and leaves it not configured) / `i2c-target` (one form: `configure(address)` - the target made anew -, every controller write with data one frame for `read_rx`, reads answered from `preload_tx(data)` slots or 0xFF, `status()` = `I2cStatus(state, queued, rx_frames, tx_slots, errors)`, `stretch` when the ops offer it, `internal_pullups`: whether it enables pull-ups of its own; the reserved addresses 0x00-0x07 / 0x78-0x7F refused before sending) / `spi-target` (no reset: configure again; `cs_setup_ns`: how long after CS the first bit is sure; `oep dump` shows it) |
62
- | `config` | `oep.probe.config` (label / idle / disable items keyed by channel, get / set / unset with counts, save / erase / state when the probe has storage; `describe()` = the declarations, `state()` = `State(storage, saved_generation, reason)`; the generation counts the changes of a boot from 1: `same_items(a, b)` compares items, `needs_save()` says whether a save would change the storage, `apply(wanted, save=False)` sets / unsets what differs (host guide §15); `find_line(cfg, "nrst", profile=None)` = host guide §5.3's line lookup, the firmware's fixed labels as its last step) |
62
+ | `settings` | the core's settings (oep-spec core §13): fn 0's get / set / unset / save / state / network. `Settings(hst)`: `catalog()` = the names of this boot (each fn's category `core` / `name/instance`, items, choices, channel / route / netif names), `show()` = every value as (category, flat name, value) (no origin: the firmware's initial values are values like any other, core §13.4), `changeable()` (set / unset offered), `set_named(category, {flat: value})` / `unset_named` / `unset_all`, raw `set` / `unset` by (fn, number, key), `save()`, `state()`, `network()`; `export()` / `plan_import(doc)` / `apply_import(plan)` = the settings file (oep-spec docs/oep-settings-file.ja.md; secrets never read); `find_line(source, "nrst", port=None)` = host guide §5.3's line lookup: port S's line N is the label `S.N` (ignoring ASCII case; without a port the one port named), `ports_named(labels)` the ports as written |
63
63
  | `capture` | `oep.fixture.logic` / `analog` / `capture-group` (revision 1, oep-spec oep-if-capture). configure's TLVs follow core §2.3: a value the probe cannot honour is refused unsupported with the tag as sent (the table's TLVs go without the critical bit); the answer holds the actual values, its samples among them (analog: a scale for every role, a skew left out read as 0). Every `start()` returns a new generation (`LogicCapture.generation`, never re-used within a boot: past 0xFFFFFFFF a start is refused until a reboot) that read and release name - `read_segment(segment)` passes the segment's own - and every event carries (`events()` drops an earlier start's); streaming data frames carry their generation and their segment (segment_info, never crossing a segment: `Received.segments`); `status()` returns a `Status`. A capture-group binds configured tracks with an immediate trigger, all in one mode, and starts them at once (`CaptureGroup.start` -> the group's start_ns; the group's and each track's generation). Every segment read goes to the `Host.on_capture` callbacks as a `CaptureRecord` (the hook for run recorders; no wireskein dependency) |
64
64
  | `decode` | decoding capture channels (I2C) |
65
65
  | `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 |
@@ -110,10 +110,13 @@ A probe's CDC ports (`/dev/ttyACM*`) need no rule beyond the usual `dialout` gro
110
110
 
111
111
  ```sh
112
112
  oep dump --port <probe> # what the probe offers (--virtual p4-x035: no hardware)
113
- oep config show <probe> # the settings, the declarations and the storage state
114
- oep config state <probe> # the storage state alone (lock-free)
115
- oep config label <probe> 23 nrst # also: idle CH MODE, disable CH..., remove KIND CH (each takes --save)
116
- oep config save <probe> # kept over a restart (also: erase)
113
+ oep settings show <probe> # every value, and the storage state
114
+ oep settings items <probe> # what each owner declares (names, forms, choices)
115
+ oep settings set <probe> core channel.GPIO23.label=v003.nrst channel.GPIO20.idle=pull-up [--save]
116
+ oep settings unset <probe> core channel.GPIO20.idle [--save] # or --all (then --save empties the storage)
117
+ oep settings save <probe> # kept over a restart
118
+ oep settings export <probe> jig.oep-settings.json # every value by name (secrets as present only)
119
+ oep settings import <probe> jig.oep-settings.json [--save] # shows the changes, asks, then sets / unsets
117
120
  oep speed <probe> [921600,500000] [--verify] [--flows out:2] # port_speed: raise a UART bridge (default 500000), print the report (below)
118
121
  oep pins <probe> --power 5 --wire swio # where the target is wired: debug pins, reset line, labels (below)
119
122
  oep clock <probe> [-n 8] [--json] # fn 0's clock: uptime_ns and boot_id against this host's time (shortest of n)
@@ -125,7 +128,7 @@ oep linktest <probe> ... # --timeout: 0.3 s an answer by def
125
128
 
126
129
  `<probe>` is a serial port, `tcp://HOST:PORT`, `tcp://HOST` (the port DNS-SD finds for that host), `tcp:UNIT_ID` (the
127
130
  probe DNS-SD finds by its TXT unit_id; describe's unit_id must say the same, else it is closed) or
128
- `usb[:VID:PID[:SERIAL]]`. A change takes the lock (owner "oep config") and
131
+ `usb[:VID:PID[:SERIAL]]`. A change takes the lock (owner "oep settings") and
129
132
  ends the session after it; it takes effect at once and, after `save`, stays over a restart.
130
133
 
131
134
  ### A host run again: the kept session id
@@ -151,7 +154,7 @@ sets `hst.kept = kept_session.KeptSession()` on a Host it builds itself.
151
154
 
152
155
  ### TCP
153
156
 
154
- A probe that serves OEP over TCP is found by DNS-SD (its network settings are not oep.probe.config's).
157
+ A probe that serves OEP over TCP is found by DNS-SD (its network settings are the core's: transports §7).
155
158
 
156
159
  - `oep find` browses `_oep._tcp` (transports §3, host guide §4.1) and lists unit_id, host, port and address. The
157
160
  service name `oep` is not registered, so another service may advertise `_oep._tcp`: each instance is verified first
@@ -195,8 +198,8 @@ option-byte reader for the reset line, max_speed / idle_clock).
195
198
  NRST exists (read only, never written); then resume.
196
199
  5. **reset**: attach under reset through each candidate - the real line stops the hart at the reset vector.
197
200
  6. **labels**: the connection profile the host keeps (wire, pins, line settings: the probe keeps no wiring) and the
198
- labels `nrst` / `power_hi` (`<name>.nrst` / `<name>.power_hi` with `--name`, a probe serving several targets),
199
- checked with `config.find_line` against the probe's settings (a note when another channel already carries the name:
201
+ labels `<port>.nrst` / `<port>.power_hi` (the port: `--name`, else the one port the probe's labels name; neither:
202
+ a note asks for `--name`), checked with `settings.find_line` against the probe's settings (a note when another channel already carries the name:
200
203
  the line would not be found); `--save` writes the labels (set + save). Nothing is written without `--save`.
201
204
 
202
205
  Safety: a driven or active channel is never driven, scanned or held; the power channel is touched only with `--power`;
@@ -208,7 +211,7 @@ pulls; its "pulled-up" row (channel 4, the reset line's weak pull-up) is left ou
208
211
  alone that channel reads floating:
209
212
 
210
213
  ```
211
- $ oep pins /run/board-identify/by-id/esp32-series-30eda0ea068b --power 5 --wire swio
214
+ $ oep pins /run/board-identify/by-id/esp32-series-30eda0ea068b --power 5 --wire swio --name v003
212
215
  power: channel 5 low 300 ms (target off: read), then high 400 ms before the reads
213
216
  classify: 52 channels, 16 reads each under pull-up, pull-down
214
217
  floating 0-3,6,9-20,26-34,36-50,52-54
@@ -224,9 +227,9 @@ attach swio 19: target_id 00310510 (WCH DMI 0x7F) -> ch32v00x, halted at dpc 0x1
224
227
  option bytes (read only): RST_MODE 10 (USER 0xf7): NRST on PD7, 12 ms ignore window
225
228
  attach under reset through 4 (held 20 ms): dpc 0x0 -> the reset line
226
229
  profile: wire swio, pins 19 (the host's to keep: the probe keeps no wiring)
227
- label: oep config label ... 4 nrst (not written)
228
- label: oep config label ... 5 power_hi (not written)
229
- idle: oep config idle ... 5 output-high (keeps the target powered while no plan holds channel 5; not written by this tool)
230
+ label: oep settings set ... core channel.GPIO4.label=v003.nrst (not written)
231
+ label: oep settings set ... core channel.GPIO5.label=v003.power_hi (not written)
232
+ idle: oep settings set ... core channel.GPIO5.idle=high (keeps the target powered while no plan holds channel 5; not written by this tool)
230
233
  released every plan (channel 5 is back to its idle state: the target is powered only while something drives it)
231
234
  done in 7.3 s
232
235
  ```
@@ -369,10 +372,11 @@ halted or a riscv-dm request of that connection runs (`console_take(sid)` hands
369
372
  lines outside through `gpio_world`); uart receives nothing until configured, status baud and format; i2c-target one form
370
373
  (a write with data one frame, cut at max_length; reads from preload_tx slots, else 0xFF); spi-target without reset.
371
374
  Capture: configure's TLVs follow core §2.3 alone; a bound track's start / configure is unavailable cause 4, a bind short
372
- of resources cause 2 with the fn; a read at or past the write position answers write_pos and len 0. probe.config: label / idle /
373
- disable items (idle 3 bytes; an item of another length malformed); the generation counts the changes of a boot from 1;
374
- state is storage_state, saved_generation, reason; at boot the saved items are checked one by one, disable first, and what
375
- fails is left out (partial). port_speed: baud / step / verify_ms on the UART bridge the request came in on, within
375
+ of resources cause 2 with the fn; a read at or past the write position answers write_pos and len 0. The settings (core §13): each fn's items from its
376
+ describe, values without origin (the profile's initial values in on a boot without a save; labels unique but for ASCII
377
+ case, a probe of get alone with `changeable=False`); a value of another length
378
+ malformed; the generation counts the changes of a boot from 1; state is storage_state, saved_generation, reason; at boot
379
+ the saved values (by category and item name) are checked one by one, disable first, and what fails is left out (partial). port_speed: baud / step / verify_ms on the UART bridge the request came in on, within
376
380
  port_speed_tolerance_pct, phases 0-3 read by port_state; the virtual bench goes back after verify_ms, after
377
381
  port_speed_idle_ms with no good frame, or at the session's end - never on broken frames.
378
382
 
@@ -657,3 +657,27 @@ oep-client-python の `wip/rvswd-rest` ブランチ。
657
657
  - Arduino d92d988 は、追い越されたバイトと queue に入らなかった塊を落とし、position を飛ばす(隙間)。エラーにはしない。
658
658
  wireskein が §2.2 を「失った範囲を区画の外に置けるなら、理由によらず隙間。区画の中で失ったときだけエラー」に直す案を出している。
659
659
  → oep-spec bfbde01 でその案のとおりに直した(wireskein と合意)。実装と文面のずれは解消。
660
+
661
+ ## 2026-10-22 機能を選べるファームと、設定の項目の fn 番号
662
+
663
+ Firmware/OepProbe のインターフェースと transport を、ビルドオプションなしで選べるようにした(oep-probe-arduino
664
+ 009873d〜cff9253)。選び方を変えて焼き直すと、fn の番号と経路(transport)の index が変わる。
665
+
666
+ - probe.config の項目は、fn を番号で持つ。passthrough の fn、console-passthrough の wire_fn と console_fn がそれにあたる。
667
+ port も、fn 0 の経路の index で持つ。
668
+ - 選び方を変えて焼き直すと、保存済みの項目が別の fn や経路を指す。たいていは型の検査で unsupported になり、その項目が
669
+ 無効になるだけで済む。ただし同じ型の fn が別にあると、黙って別のものを指す。例は P4 の uart が 2 本ある場合。
670
+ - 今の実装の回避: 新しい fn は既存の fn の後ろに足し、同じ選び方なら番号が変わらないようにした。選び方そのものを
671
+ 変えた場合は防げない。
672
+ - 仕様への論点(未決。所有者の判断待ち): 項目の参照を fn の名前と instance で持つか。または、保存したときの
673
+ インターフェースの一覧(名前の並び)と一致しないときは、項目を unreadable にする規則を明記するか。
674
+ → oep-spec 9fc6ad9 で設定を core(§13)に移し、保存と書き出しは名前(カテゴリ、項目、key、参照)で持つことにして解消した。
675
+ fn の番号と経路の index は起動の間だけのもの。
676
+
677
+ ## 2026-10-22 core の設定(§13)を実装して当たったこと
678
+
679
+ - §13.3 の初版は「text の規則(§2.1)に合わない text も malformed」と書いていた。2026-10-07 のルールレビューで決めた
680
+ 「要求の text の中身は確かめない(host が見せるときに置き換える)」と食い違う。→ oep-spec c4fbd6e で「text は長さだけを
681
+ 確かめる」に直した。Arduino と仮想ベンチも長さだけを確かめる。
682
+ - 仮想ベンチの profile は、oep.probe.config が持っていた fn の番号を空けたままにした(後ろの fn の番号を変えないため)。
683
+ fn の番号に欠番があってよいかは core が明記していない(list は fn を並べるだけ)。実機の firmware は欠番を作らない。
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "oep-client-python"
7
- version = "0.0.36"
7
+ version = "0.0.38"
8
8
  description = "Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a virtual bench"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.0.36"
5
+ __version__ = "0.0.38"