oep-client-python 0.0.1__py3-none-any.whl → 0.0.2__py3-none-any.whl
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.
- oep_client/__init__.py +2 -2
- oep_client/{v1/__main__.py → __main__.py} +4 -4
- oep_client/{v1/fake_serve.py → fake_serve.py} +54 -12
- {oep_client_python-0.0.1.dist-info → oep_client_python-0.0.2.dist-info}/METADATA +7 -7
- oep_client_python-0.0.2.dist-info/RECORD +35 -0
- oep_client_python-0.0.2.dist-info/entry_points.txt +2 -0
- oep_client/v1/__init__.py +0 -1
- oep_client_python-0.0.1.dist-info/RECORD +0 -36
- oep_client_python-0.0.1.dist-info/entry_points.txt +0 -2
- /oep_client/{v1/arm.py → arm.py} +0 -0
- /oep_client/{v1/capture.py → capture.py} +0 -0
- /oep_client/{v1/catalog.py → catalog.py} +0 -0
- /oep_client/{v1/ch32_flash.py → ch32_flash.py} +0 -0
- /oep_client/{v1/cobs.py → cobs.py} +0 -0
- /oep_client/{v1/console.py → console.py} +0 -0
- /oep_client/{v1/core.py → core.py} +0 -0
- /oep_client/{v1/decode.py → decode.py} +0 -0
- /oep_client/{v1/dump.py → dump.py} +0 -0
- /oep_client/{v1/endpoint.py → endpoint.py} +0 -0
- /oep_client/{v1/esp32_targets.py → esp32_targets.py} +0 -0
- /oep_client/{v1/fake.py → fake.py} +0 -0
- /oep_client/{v1/fake_serial.py → fake_serial.py} +0 -0
- /oep_client/{v1/fixture.py → fixture.py} +0 -0
- /oep_client/{v1/frames.py → frames.py} +0 -0
- /oep_client/{v1/hid_stream.py → hid_stream.py} +0 -0
- /oep_client/{v1/host.py → host.py} +0 -0
- /oep_client/{v1/interfaces.py → interfaces.py} +0 -0
- /oep_client/{v1/link.py → link.py} +0 -0
- /oep_client/{v1/message.py → message.py} +0 -0
- /oep_client/{v1/names.py → names.py} +0 -0
- /oep_client/{v1/registry.py → registry.py} +0 -0
- /oep_client/{v1/riscv.py → riscv.py} +0 -0
- /oep_client/{v1/rp2350.py → rp2350.py} +0 -0
- /oep_client/{v1/target.py → target.py} +0 -0
- /oep_client/{v1/uiapduino.py → uiapduino.py} +0 -0
- /oep_client/{v1/usb_stream.py → usb_stream.py} +0 -0
- {oep_client_python-0.0.1.dist-info → oep_client_python-0.0.2.dist-info}/WHEEL +0 -0
- {oep_client_python-0.0.1.dist-info → oep_client_python-0.0.2.dist-info}/licenses/LICENSE +0 -0
oep_client/__init__.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"""Open Embedded Probe (OEP) host client. `oep_client
|
|
1
|
+
"""Open Embedded Probe (OEP) host client. `oep_client` speaks the v1 protocol (oep-spec docs/oep-core.ja.md)."""
|
|
2
2
|
|
|
3
3
|
__all__ = ["__version__"]
|
|
4
4
|
|
|
5
|
-
__version__ = "0.0.
|
|
5
|
+
__version__ = "0.0.2"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"""Draft OEP capability discovery by name, on an in-process fake or a v1 draft probe.
|
|
2
2
|
|
|
3
|
-
uv run python -m oep_client
|
|
4
|
-
uv run python -m oep_client
|
|
5
|
-
uv run python -m oep_client
|
|
6
|
-
uv run python -m oep_client
|
|
3
|
+
uv run python -m oep_client dump --port /run/board-identify/by-id/<probe>
|
|
4
|
+
uv run python -m oep_client dump --fake p4-x035
|
|
5
|
+
uv run python -m oep_client dump --fake esp32-v003 --prefix oep.fixture
|
|
6
|
+
uv run python -m oep_client dump --fake p4-x035 --prefix oep.target --json
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
from __future__ import annotations
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Serve a fake probe (`endpoint.Endpoint`) on a pty or a TCP port, for other programs' tests.
|
|
2
2
|
|
|
3
|
-
python -m oep_client.
|
|
3
|
+
python -m oep_client.fake_serve [--pty | --tcp PORT] [options]
|
|
4
4
|
|
|
5
5
|
--pty (the default) opens a pseudo terminal that is the probe's serial port (oep-core §3.4): COBS frames
|
|
6
6
|
0x00 <COBS> 0x00 and the raw bytes of the port's bind on one line. The host opens the printed path itself (and
|
|
@@ -25,6 +25,9 @@ Options:
|
|
|
25
25
|
--bind MODE bind the serial port to every --slot: last-reset, manual or mixed
|
|
26
26
|
--target-id HEX the target_id every target's attach reports (wch_dmi_7f)
|
|
27
27
|
--absent N the N-th pin pair of the first wire has no target (repeatable)
|
|
28
|
+
--uart-plan the first oep.fixture.uart gets its RX / TX plan at boot, as if saved (the jig's "DUT TX" /
|
|
29
|
+
"DUT RX" labels when the profile has them, else the first free channels); configure then works
|
|
30
|
+
--uart-rx TEXT what arrives on that UART's RX every --every ms once it is configured (%d = a counter)
|
|
28
31
|
--run-hook SPEC what riscv-dm run does on every target: SPEC is module:function or path/file.py:function,
|
|
29
32
|
called as function(target, pc, regs) -> (stopped, dpc, elapsed_us). `target` is the
|
|
30
33
|
endpoint.FakeTarget (mem = word address -> value, regs = regno -> value, halted, dpc), so a
|
|
@@ -45,7 +48,7 @@ import sys
|
|
|
45
48
|
import time
|
|
46
49
|
import tty
|
|
47
50
|
|
|
48
|
-
from . import endpoint, fake, fake_serial, registry as reg
|
|
51
|
+
from . import catalog, endpoint, fake, fake_serial, registry as reg
|
|
49
52
|
|
|
50
53
|
_ITEM = reg.PROBE_CONFIG.tlv["item"]
|
|
51
54
|
_MODES = reg.PROBE_CONFIG.enum["bind_mode"]
|
|
@@ -82,11 +85,40 @@ def build(a: argparse.Namespace) -> endpoint.Endpoint:
|
|
|
82
85
|
for n in range(len(a.slot)))
|
|
83
86
|
value = struct.pack("<BBBB", a.port_index, _MODES[a.bind.replace("-", "_")], 0, len(a.slot)) + streams
|
|
84
87
|
items.append(bytes([_ITEM["bind"], len(value)]) + value)
|
|
88
|
+
if a.uart_plan:
|
|
89
|
+
fn = uart_fn(ep)
|
|
90
|
+
rx, tx = _uart_channels(ep, fn)
|
|
91
|
+
for role, ch in ((1, rx), (2, tx)):
|
|
92
|
+
items.append(bytes([_ITEM["plan"], 5]) + struct.pack("<HBH", fn, role, ch))
|
|
85
93
|
if items:
|
|
86
94
|
ep.load_config(items, saved=True)
|
|
87
95
|
return ep
|
|
88
96
|
|
|
89
97
|
|
|
98
|
+
def uart_fn(ep: endpoint.Endpoint) -> int:
|
|
99
|
+
fn = ep.fns.get("oep.fixture.uart")
|
|
100
|
+
if fn is None:
|
|
101
|
+
raise SystemExit("this profile offers no oep.fixture.uart")
|
|
102
|
+
return fn
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _uart_channels(ep: endpoint.Endpoint, fn: int) -> tuple[int, int]:
|
|
106
|
+
"""RX, TX for the UART's plan: the jig's DUT TX (probe RX) / DUT RX (probe TX) labels, else the first two free."""
|
|
107
|
+
labels = {name: ch for ch, name in ep.static_labels.items()}
|
|
108
|
+
if "DUT TX" in labels and "DUT RX" in labels:
|
|
109
|
+
return labels["DUT TX"], labels["DUT RX"]
|
|
110
|
+
allowed = []
|
|
111
|
+
for t in ep.static[fn]:
|
|
112
|
+
if t[0] == catalog.ROLE_CHANNELS and t[2] == 1:
|
|
113
|
+
base = struct.unpack_from("<H", t, 3)[0]
|
|
114
|
+
allowed = catalog.bitmap_to_channels(base, t[5:2 + t[1]])
|
|
115
|
+
taken = {p for s in ep.slots.values() for p in s.pair} | {a[2] for a in ep.plan}
|
|
116
|
+
free = [ch for ch in allowed if ch not in taken]
|
|
117
|
+
if len(free) < 2:
|
|
118
|
+
raise SystemExit("no two free channels for the UART's plan")
|
|
119
|
+
return free[0], free[1]
|
|
120
|
+
|
|
121
|
+
|
|
90
122
|
def _load_hook(spec: str):
|
|
91
123
|
where, _, name = spec.rpartition(":")
|
|
92
124
|
if not where or not name:
|
|
@@ -118,20 +150,28 @@ def _filter(a: argparse.Namespace):
|
|
|
118
150
|
return answer
|
|
119
151
|
|
|
120
152
|
|
|
153
|
+
def _text(fmt: str, count: int) -> bytes:
|
|
154
|
+
text = fmt.replace("%d", str(count)) if "%d" in fmt else fmt
|
|
155
|
+
return text.encode().decode("unicode_escape").encode("latin-1")
|
|
156
|
+
|
|
157
|
+
|
|
121
158
|
class Console:
|
|
122
|
-
|
|
123
|
-
|
|
159
|
+
"""Every `every_ms`: the targets write `fmt` to their consoles, and `uart_rx` arrives on the UART's RX (fn
|
|
160
|
+
`uart`) while it runs (configured)."""
|
|
161
|
+
|
|
162
|
+
def __init__(self, ep: endpoint.Endpoint, fmt: str | None, every_ms: int, uart_rx: str | None = None,
|
|
163
|
+
uart: int | None = None):
|
|
164
|
+
self.ep, self.fmt, self.every, self.uart_rx, self.uart = ep, fmt, every_ms, uart_rx, uart
|
|
124
165
|
self.next_ms, self.count = 0, 0
|
|
125
166
|
|
|
126
167
|
def tick(self) -> None:
|
|
127
|
-
if not self.fmt or self.ep.now() < self.next_ms:
|
|
168
|
+
if not (self.fmt or self.uart_rx) or self.ep.now() < self.next_ms:
|
|
128
169
|
return
|
|
129
170
|
self.next_ms = self.ep.now() + self.every
|
|
130
|
-
for i, tg in enumerate(self.ep.targets.values()):
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
self.ep.target_says(text.encode().decode("unicode_escape").encode("latin-1"), tg)
|
|
171
|
+
for i, tg in enumerate(self.ep.targets.values()) if self.fmt else ():
|
|
172
|
+
self.ep.target_says(_text(self.fmt.replace("{t}", str(i)), self.count), tg)
|
|
173
|
+
if self.uart_rx and self.uart in self.ep.uarts:
|
|
174
|
+
self.ep.uart_rx(self.uart, _text(self.uart_rx, self.count))
|
|
135
175
|
self.count += 1
|
|
136
176
|
|
|
137
177
|
|
|
@@ -257,7 +297,7 @@ def _serve_conn(a, ep, console, conn, watch_stdin) -> bool:
|
|
|
257
297
|
|
|
258
298
|
|
|
259
299
|
def main(argv: list[str] | None = None) -> None:
|
|
260
|
-
ap = argparse.ArgumentParser(prog="python -m oep_client.
|
|
300
|
+
ap = argparse.ArgumentParser(prog="python -m oep_client.fake_serve", description=__doc__.split("\n\n")[0])
|
|
261
301
|
where = ap.add_mutually_exclusive_group()
|
|
262
302
|
where.add_argument("--pty", action="store_true")
|
|
263
303
|
where.add_argument("--tcp", type=int, metavar="PORT")
|
|
@@ -273,6 +313,8 @@ def main(argv: list[str] | None = None) -> None:
|
|
|
273
313
|
ap.add_argument("--bind", choices=["last-reset", "manual", "mixed"])
|
|
274
314
|
ap.add_argument("--target-id")
|
|
275
315
|
ap.add_argument("--absent", type=int, action="append", default=[])
|
|
316
|
+
ap.add_argument("--uart-plan", action="store_true")
|
|
317
|
+
ap.add_argument("--uart-rx")
|
|
276
318
|
ap.add_argument("--run-hook")
|
|
277
319
|
ap.add_argument("--once", action="store_true")
|
|
278
320
|
a = ap.parse_args(argv)
|
|
@@ -285,7 +327,7 @@ def main(argv: list[str] | None = None) -> None:
|
|
|
285
327
|
probe_ep = endpoint.Endpoint(profile(), lambda: 0)
|
|
286
328
|
a.port_index = min(probe_ep.serial_ports) if probe_ep.serial_ports else 0
|
|
287
329
|
ep = build(a)
|
|
288
|
-
console = Console(ep, a.console, _ms(a.every))
|
|
330
|
+
console = Console(ep, a.console, _ms(a.every), a.uart_rx, uart_fn(ep) if a.uart_rx else None)
|
|
289
331
|
try:
|
|
290
332
|
if a.tcp is None:
|
|
291
333
|
serve_pty(a, ep, console)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: oep-client-python
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.2
|
|
4
4
|
Summary: Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a fake probe
|
|
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
|
|
@@ -23,7 +23,7 @@ Description-Content-Type: text/markdown
|
|
|
23
23
|
# OEP Python client
|
|
24
24
|
|
|
25
25
|
Open Embedded Probe の host 側。v1(oep-spec の `docs/oep-core.ja.md` と `docs/oep-if-*.ja.md`、固める候補の形)を話す。番号は oep-spec の
|
|
26
|
-
`generated/oep-v1/oep_v1_registry.py` をそのまま写した `oep_client.
|
|
26
|
+
`generated/oep-v1/oep_v1_registry.py` をそのまま写した `oep_client.registry` から取る。破壊的変更を前提とする
|
|
27
27
|
実験段階で、互換 API は約束しない。OEP を初めて読む人は oep-spec の `docs/review-guide.ja.md`(どこに何が書いてあるか)から。
|
|
28
28
|
|
|
29
29
|
target の知識は host にある、という OEP の分担に従う。probe は線と DMI / DP・AP の転送しか知らず、CH32 の flash
|
|
@@ -34,14 +34,14 @@ pip install oep-client-python # PyPI (import oep_client); a checkout: pip in
|
|
|
34
34
|
uv run pytest # in a checkout
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
`import oep_client
|
|
37
|
+
`import oep_client` だけで使える(`sys.path` に `src/` を足す使い方は不要になった)。番号の表は `tools/sync_registry.sh` で
|
|
38
38
|
oep-spec から写す。PyPI の `oep-client` は別のプロジェクトなので、配布名は `oep-client-python`。
|
|
39
39
|
|
|
40
40
|
リリースは GitHub Actions の Release(workflow_dispatch、version = X.Y.Z か X.Y.ZbN): `tools/prepare_release.py` が
|
|
41
41
|
pyproject.toml と `oep_client.__version__` を書き換え、CHANGELOG.md の Unreleased をその版にし、試験と build の後に commit と tag、
|
|
42
42
|
GitHub Release、PyPI(Trusted Publishing)へ出す。変更は CHANGELOG.md の Unreleased に (EN) / (JA) で書き足しておく。
|
|
43
43
|
|
|
44
|
-
## モジュール(`oep_client
|
|
44
|
+
## モジュール(`oep_client`)
|
|
45
45
|
|
|
46
46
|
| モジュール | 中身 |
|
|
47
47
|
|---|---|
|
|
@@ -66,7 +66,7 @@ GitHub Release、PyPI(Trusted Publishing)へ出す。変更は CHANGELOG.md
|
|
|
66
66
|
## 使い方の例
|
|
67
67
|
|
|
68
68
|
```python
|
|
69
|
-
from oep_client
|
|
69
|
+
from oep_client import core, link, riscv, ch32_flash
|
|
70
70
|
|
|
71
71
|
hst = link.open_host("/run/board-identify/by-id/esp32-series-30eda0e31108") # pipelining つき
|
|
72
72
|
# a serial port (always COBS), "tcp://127.0.0.1:PORT" (a broker), "usb" / "usb:303a:0002[:SERIAL]" (vendor, then HID)
|
|
@@ -81,7 +81,7 @@ wire.detach(conn)
|
|
|
81
81
|
hst.end()
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
能力の一覧は `uv run python -m oep_client
|
|
84
|
+
能力の一覧は `uv run python -m oep_client dump --port <probe>`(`--fake p4-x035` でハードウェアなし)。
|
|
85
85
|
実機での一通りの確認は ArduinoCore-CH32 の `tests/manual/oep_smoke/`(`oep_smoke.py`、`oep_probe_checks.py`)。
|
|
86
86
|
|
|
87
87
|
## 偽の probe(動く spec)
|
|
@@ -94,7 +94,7 @@ hst.end()
|
|
|
94
94
|
外のプログラムの試験には `fake_serve` を子プロセスで使う:
|
|
95
95
|
|
|
96
96
|
```sh
|
|
97
|
-
uv run python -m oep_client.
|
|
97
|
+
uv run python -m oep_client.fake_serve --pty --profile p4-bench --slot x035 --bind last-reset \
|
|
98
98
|
--console 'uptime %d\r\n' --every 100
|
|
99
99
|
# 最初の行: PTY /dev/pts/N(--tcp 0 なら PORT n)。stdin を閉じると終わる
|
|
100
100
|
```
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
oep_client/__init__.py,sha256=HPhV-26_OX0St4P3ftYE7PmaaGRAKN8qRUJvNMjHElc,163
|
|
2
|
+
oep_client/__main__.py,sha256=5pyY1hn03-bWMuMuo9iMf_KkyAeYc7EEn5KVNYLGTa4,1735
|
|
3
|
+
oep_client/arm.py,sha256=JLyUhLSPcmsk73schZcaJYoOKuHzrvnU8kPmfrEvVuo,12331
|
|
4
|
+
oep_client/capture.py,sha256=RZgDnWqr8Aqy49U7PqQpnKIQEL18djVuDJFydxrmv-c,17996
|
|
5
|
+
oep_client/catalog.py,sha256=EqAQnSgHFxGbCO2GQ_Ee-uheJKbBBUUpL1-0qHfNMXU,6574
|
|
6
|
+
oep_client/ch32_flash.py,sha256=Fc-6jEj15cQtMSKmfC5dmDetMXJ8hAdAuJ9d9odwrsA,12651
|
|
7
|
+
oep_client/cobs.py,sha256=hqddQI_X7rsBvBvcP_MBE3bXPyB13-Azjqp_9JfdQ1g,2288
|
|
8
|
+
oep_client/console.py,sha256=YYcuc9Qxe3kihla8wynYbDaLVr7wBLEvswrM-cMK3Tk,6859
|
|
9
|
+
oep_client/core.py,sha256=z0-mplQVLOmPyXj1lHc-U7HYl3Gd6o-b5YJhpQTvqKU,8789
|
|
10
|
+
oep_client/decode.py,sha256=M-bRARrA2qGZLoJn0BdXeTb4WjL_2Hb2nk_g1IGXIw4,2382
|
|
11
|
+
oep_client/dump.py,sha256=GAnmu2abuDmGmbWcbbEfC3EUuPp5Hady9vQVNcQ-724,6743
|
|
12
|
+
oep_client/endpoint.py,sha256=ay767evyw0QgM6oXOUcl94b_wxTHtXHxsc8sAUMi6u0,72014
|
|
13
|
+
oep_client/esp32_targets.py,sha256=b8tNH-nb2KC-XgNfWg5l3TO0cyhZOF-gJajaVxNVSGQ,4988
|
|
14
|
+
oep_client/fake.py,sha256=UzpB-A42Ma2QqJj0l-JmwCJkMn6DPVHHN77fcemT59U,13104
|
|
15
|
+
oep_client/fake_serial.py,sha256=6fhtrit9kWix-D83yYfUKFLHJ11pEiMDrlKNeJKvCfU,4314
|
|
16
|
+
oep_client/fake_serve.py,sha256=dIuYxhlAixSb8_OQ4b4UXTkWqW5Tpf_F9uuqMNWn0F4,14612
|
|
17
|
+
oep_client/fixture.py,sha256=653hCD-Iz0Lfs8dT4Hdg3QyubbbOGs1_xjq_3nb8foU,5564
|
|
18
|
+
oep_client/frames.py,sha256=xjgjnXmXUqNJZ5m0h91r4Cy48WoVK1mEMW4gRg-mlMI,3991
|
|
19
|
+
oep_client/hid_stream.py,sha256=99Dsm4Io1keukuETG_UNqjBGiVYZZeb__Pv4ytaKg9k,10695
|
|
20
|
+
oep_client/host.py,sha256=Y5oqE-pw5Ja9cG1dzdy8svIEgR4Kqhki0wuyrpP_xH8,15563
|
|
21
|
+
oep_client/interfaces.py,sha256=P4ehrIj4j-9eg4NjaVdV15pawI2vOqucJwVklSdR-As,5472
|
|
22
|
+
oep_client/link.py,sha256=J9VtBWfTgNoIgUQuj8SsH9hHesQM2uEN545IoxKVS8E,19406
|
|
23
|
+
oep_client/message.py,sha256=MEM1UT6KFM7AsT56jvBLt_FJK_6SJ7O_nGAiipW0_zo,9912
|
|
24
|
+
oep_client/names.py,sha256=ztCZFWs__aR-a5G14TnJP-Q4YfLhbyrzvOVOMJuG93k,3653
|
|
25
|
+
oep_client/registry.py,sha256=nRM-sQiAMs1OzuSZIajdsBfdFckYo3OfwgmcLkHzxqw,9867
|
|
26
|
+
oep_client/riscv.py,sha256=E0_C-4mBsrp9FUoZpMiqSH9e8sC8Q4EO5HRjFKE6_pc,21392
|
|
27
|
+
oep_client/rp2350.py,sha256=7OMyj270k3AY1e3-ljicPwOjf9jOlokbT6QNkA0b0yY,4227
|
|
28
|
+
oep_client/target.py,sha256=R8BvYfFfYNhZF0MysJkNb8b69YgBlmeGXNX8ReZIe5k,1068
|
|
29
|
+
oep_client/uiapduino.py,sha256=IEPG3LbZPksi8g3wmAf6T0CRWSfYKW1_qrH_GBVQdxY,6090
|
|
30
|
+
oep_client/usb_stream.py,sha256=1nvuRNLQkpp8054eG-JutBKh9y0F_8PHGDAfG0ZSbaY,8819
|
|
31
|
+
oep_client_python-0.0.2.dist-info/METADATA,sha256=-b91PthTivaMG_-Cyy-XdhMlPl1gDIx6cjVb4aMu4cs,7294
|
|
32
|
+
oep_client_python-0.0.2.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
33
|
+
oep_client_python-0.0.2.dist-info/entry_points.txt,sha256=h6_8QX89Ww1ogALEGG5g4kspT3IOV6O51lwKqf5BWco,49
|
|
34
|
+
oep_client_python-0.0.2.dist-info/licenses/LICENSE,sha256=ntlalztb3L1OaNAxmQdHlubu5fVhjMc9oRZi3PeQhXg,1076
|
|
35
|
+
oep_client_python-0.0.2.dist-info/RECORD,,
|
oep_client/v1/__init__.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"""Draft: capability discovery by name (oep-spec capability-*.ja.md). No hardware yet."""
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
oep_client/__init__.py,sha256=f5QEx-7qtfSSRnMCtAflZ2y0GvfX6lXa_AVjdc4SQfg,166
|
|
2
|
-
oep_client/v1/__init__.py,sha256=Aghb5g5wouqnDIUFv9S4dkimnzs5YZcWx9gzgxi7GPM,90
|
|
3
|
-
oep_client/v1/__main__.py,sha256=CytzDl1qI-sqXPS5ZqtvV07Riz2agQ7uK-Hlwmyz8fw,1747
|
|
4
|
-
oep_client/v1/arm.py,sha256=JLyUhLSPcmsk73schZcaJYoOKuHzrvnU8kPmfrEvVuo,12331
|
|
5
|
-
oep_client/v1/capture.py,sha256=RZgDnWqr8Aqy49U7PqQpnKIQEL18djVuDJFydxrmv-c,17996
|
|
6
|
-
oep_client/v1/catalog.py,sha256=EqAQnSgHFxGbCO2GQ_Ee-uheJKbBBUUpL1-0qHfNMXU,6574
|
|
7
|
-
oep_client/v1/ch32_flash.py,sha256=Fc-6jEj15cQtMSKmfC5dmDetMXJ8hAdAuJ9d9odwrsA,12651
|
|
8
|
-
oep_client/v1/cobs.py,sha256=hqddQI_X7rsBvBvcP_MBE3bXPyB13-Azjqp_9JfdQ1g,2288
|
|
9
|
-
oep_client/v1/console.py,sha256=YYcuc9Qxe3kihla8wynYbDaLVr7wBLEvswrM-cMK3Tk,6859
|
|
10
|
-
oep_client/v1/core.py,sha256=z0-mplQVLOmPyXj1lHc-U7HYl3Gd6o-b5YJhpQTvqKU,8789
|
|
11
|
-
oep_client/v1/decode.py,sha256=M-bRARrA2qGZLoJn0BdXeTb4WjL_2Hb2nk_g1IGXIw4,2382
|
|
12
|
-
oep_client/v1/dump.py,sha256=GAnmu2abuDmGmbWcbbEfC3EUuPp5Hady9vQVNcQ-724,6743
|
|
13
|
-
oep_client/v1/endpoint.py,sha256=ay767evyw0QgM6oXOUcl94b_wxTHtXHxsc8sAUMi6u0,72014
|
|
14
|
-
oep_client/v1/esp32_targets.py,sha256=b8tNH-nb2KC-XgNfWg5l3TO0cyhZOF-gJajaVxNVSGQ,4988
|
|
15
|
-
oep_client/v1/fake.py,sha256=UzpB-A42Ma2QqJj0l-JmwCJkMn6DPVHHN77fcemT59U,13104
|
|
16
|
-
oep_client/v1/fake_serial.py,sha256=6fhtrit9kWix-D83yYfUKFLHJ11pEiMDrlKNeJKvCfU,4314
|
|
17
|
-
oep_client/v1/fake_serve.py,sha256=B93k_fV0j0KpO8Qtyx8dQfffxn2EeRsURsdX_ScKEP0,12423
|
|
18
|
-
oep_client/v1/fixture.py,sha256=653hCD-Iz0Lfs8dT4Hdg3QyubbbOGs1_xjq_3nb8foU,5564
|
|
19
|
-
oep_client/v1/frames.py,sha256=xjgjnXmXUqNJZ5m0h91r4Cy48WoVK1mEMW4gRg-mlMI,3991
|
|
20
|
-
oep_client/v1/hid_stream.py,sha256=99Dsm4Io1keukuETG_UNqjBGiVYZZeb__Pv4ytaKg9k,10695
|
|
21
|
-
oep_client/v1/host.py,sha256=Y5oqE-pw5Ja9cG1dzdy8svIEgR4Kqhki0wuyrpP_xH8,15563
|
|
22
|
-
oep_client/v1/interfaces.py,sha256=P4ehrIj4j-9eg4NjaVdV15pawI2vOqucJwVklSdR-As,5472
|
|
23
|
-
oep_client/v1/link.py,sha256=J9VtBWfTgNoIgUQuj8SsH9hHesQM2uEN545IoxKVS8E,19406
|
|
24
|
-
oep_client/v1/message.py,sha256=MEM1UT6KFM7AsT56jvBLt_FJK_6SJ7O_nGAiipW0_zo,9912
|
|
25
|
-
oep_client/v1/names.py,sha256=ztCZFWs__aR-a5G14TnJP-Q4YfLhbyrzvOVOMJuG93k,3653
|
|
26
|
-
oep_client/v1/registry.py,sha256=nRM-sQiAMs1OzuSZIajdsBfdFckYo3OfwgmcLkHzxqw,9867
|
|
27
|
-
oep_client/v1/riscv.py,sha256=E0_C-4mBsrp9FUoZpMiqSH9e8sC8Q4EO5HRjFKE6_pc,21392
|
|
28
|
-
oep_client/v1/rp2350.py,sha256=7OMyj270k3AY1e3-ljicPwOjf9jOlokbT6QNkA0b0yY,4227
|
|
29
|
-
oep_client/v1/target.py,sha256=R8BvYfFfYNhZF0MysJkNb8b69YgBlmeGXNX8ReZIe5k,1068
|
|
30
|
-
oep_client/v1/uiapduino.py,sha256=IEPG3LbZPksi8g3wmAf6T0CRWSfYKW1_qrH_GBVQdxY,6090
|
|
31
|
-
oep_client/v1/usb_stream.py,sha256=1nvuRNLQkpp8054eG-JutBKh9y0F_8PHGDAfG0ZSbaY,8819
|
|
32
|
-
oep_client_python-0.0.1.dist-info/METADATA,sha256=PdTZlP4XrPcU_zZZZYofEqST_flj7AeoXHWF9iC06LQ,7312
|
|
33
|
-
oep_client_python-0.0.1.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
34
|
-
oep_client_python-0.0.1.dist-info/entry_points.txt,sha256=F9_WK-5S92fBuWSeCR0GXzmA5OXY6y0xvYpHseqY2R8,52
|
|
35
|
-
oep_client_python-0.0.1.dist-info/licenses/LICENSE,sha256=ntlalztb3L1OaNAxmQdHlubu5fVhjMc9oRZi3PeQhXg,1076
|
|
36
|
-
oep_client_python-0.0.1.dist-info/RECORD,,
|
/oep_client/{v1/arm.py → arm.py}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|