oep-client-python 0.0.45__py3-none-any.whl → 0.0.47__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 CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  __all__ = ["__version__"]
4
4
 
5
- __version__ = "0.0.45"
5
+ __version__ = "0.0.47"
oep_client/acquire.py CHANGED
@@ -11,14 +11,25 @@ probe's facts out.
11
11
 
12
12
  Logic channels go to oep.fixture.logic, analog ones to oep.fixture.analog; with both, oep.fixture.capture-group
13
13
  starts them together, a trigger on either track as the group's trigger source (capture §4.4). A line is named as a
14
- script keeps it - the probe's channel name (fn 0's channel_name, core §7.5) or a port's line label (S.N, host guide
15
- §5.3) - and looked up on the session (a channel number holds for one boot only); a track's channels are its plan roles
14
+ script keeps it - the probe's channel name (fn 0's channel_name, core §7.5) or a port's line label (host guide §5.3:
15
+ S.N by its role, S@P by the target pin) - and looked up on the session (a channel number holds for one boot only); a track's channels are its plan roles
16
16
  0..C-1 in the order given. The plans are released afterwards.
17
17
 
18
18
  Modes: "oneshot" (the probe's memory), "repeat" (`segments` acquisitions read and released as they come: with a
19
19
  trigger one part each, layout "segments"; without, a timeline), "stream" (for `seconds`, sent as taken,
20
20
  put together on disk while it runs: a timeline, cut where data was lost).
21
21
 
22
+ A stream can run while the script does its steps on the same session (marking sections, sending console commands):
23
+ `during=steps` in place of `seconds` streams until steps(wait) returns, `wait(seconds)` collecting while it waits.
24
+ Steps should call wait often (the probe holds only its stream buffer meanwhile); a loss with on_loss "stop" raises
25
+ StreamStopped out of wait, and the stream ends there.
26
+
27
+ def steps(wait):
28
+ for duty in (64, 128):
29
+ with rec.section(2, f"duty={duty}"):
30
+ console.write(f"PWM {duty}\n".encode()); wait(0.5)
31
+ res = acquire.capture(hst, acquire.Request(chans, 1_000_000, 0, mode="stream", during=steps))
32
+
22
33
  Times: tick 0 of a part is its first logic sample, `start_ns` on the probe's clock; an analog channel starts at
23
34
  t0_ticks = (its segment's start_ns - that) plus its skew_ns, in ticks. These are the probe's estimates; each track's
24
35
  uncertainty is kept. ADC values are kept raw with the probe's linear conversion; the input range, reference, Vrefint
@@ -37,13 +48,14 @@ import array
37
48
  import math
38
49
  import struct
39
50
  import sys
51
+ from collections.abc import Callable
40
52
  from dataclasses import dataclass, field
41
53
  from fractions import Fraction
42
54
  from pathlib import Path
43
55
 
44
56
  from . import registry as _reg
45
57
 
46
- __all__ = ["Analog", "Bits", "Changes", "OnDisk", "Part", "Request", "Result", "capture", "capture_at"]
58
+ __all__ = ["Analog", "Bits", "Changes", "OnDisk", "Part", "Request", "Result", "StreamStopped", "capture", "capture_at"]
47
59
 
48
60
  TRIGGERS = ("high", "low", "rise", "fall", "both")
49
61
  ANALOG_TRIGGERS = ("high", "low", "rise", "fall")
@@ -52,7 +64,8 @@ ANALOG_TRIGGERS = ("high", "low", "rise", "fall")
52
64
  @dataclass
53
65
  class Request:
54
66
  channels: list[tuple[str, str]] # logic: (name to record, the line): the probe's channel name (fn 0's
55
- # channel_name, GPIO47) or a port's line label (S.N, x035.swdio), in order
67
+ # channel_name, GPIO47) or a port's line label (S.N, x035.swdio; S@P,
68
+ # x035@pb9), in order
56
69
  rate: int # logic samples per second asked for (the probe may answer another)
57
70
  samples: int
58
71
  trigger: tuple | None = None # (logic channel, one of TRIGGERS) or (analog channel, rise / fall / high /
@@ -69,6 +82,8 @@ class Request:
69
82
  segments: int | None = None # repeat: how many acquisitions
70
83
  on_loss: str = "stop" # stream: "stop" at the first loss, or "continue" to the end
71
84
  spool_dir: str | None = None # stream: where its channels are put together on disk while it runs
85
+ during: Callable[[Callable[[float], None]], None] | None = None # stream: instead of `seconds`, runs until this
86
+ # returns - called with wait(seconds), which collects while it waits
72
87
 
73
88
  def __post_init__(self):
74
89
  names = [n for n, _ in self.channels] + [n for n, *_ in self.analog]
@@ -92,8 +107,10 @@ class Request:
92
107
  raise ValueError("repeat: logic channels only")
93
108
  elif self.segments is not None:
94
109
  raise ValueError("segments is for repeat only")
95
- if self.mode == "stream" and not (self.seconds and self.seconds > 0):
96
- raise ValueError("a stream needs seconds (how long)")
110
+ if self.during is not None and (self.mode != "stream" or self.seconds is not None):
111
+ raise ValueError("during is for a stream, in place of seconds")
112
+ if self.mode == "stream" and self.during is None and not (self.seconds and self.seconds > 0):
113
+ raise ValueError("a stream needs seconds (how long) or during")
97
114
  if self.arm not in ("pretrigger", "now"):
98
115
  raise ValueError(f"arm {self.arm!r}: pretrigger or now")
99
116
  logic = {n for n, _ in self.channels}
@@ -567,7 +584,8 @@ def _describe(core, hst, fn: int) -> list[tuple[int, bytes]]:
567
584
 
568
585
  def _channels(core, hst, lines: list[str]) -> list[int]:
569
586
  """The probe's channel numbers (valid for this boot) of lines named as kept in scripts: a channel name (fn 0's
570
- channel_name, core §7.5; GPIO47) or a port's line label (S.N, host guide §5.3; x035.swdio). ASCII case aside."""
587
+ channel_name, core §7.5; GPIO47) or a port's line label (host guide §5.3: S.N by its role, x035.swdio; S@P by the target pin, x035@pb9). ASCII
588
+ case aside."""
571
589
  if not lines:
572
590
  return []
573
591
  from . import registry, settings
@@ -581,11 +599,13 @@ def _channels(core, hst, lines: list[str]) -> list[int]:
581
599
  labels = None
582
600
  out = []
583
601
  for line in lines:
584
- port_line = settings.port_line(line)
585
- if port_line is not None:
602
+ label = settings.parse_label(line)
603
+ if label is not None:
586
604
  if labels is None:
587
605
  labels = settings.labels(hst)
588
- ch = settings.line_from_labels(labels, port_line[1], port_line[0])
606
+ port, role, pin = label
607
+ ch = (settings.line_from_labels(labels, role, port) if role
608
+ else settings.pin_from_labels(labels, pin, port))
589
609
  if ch is None:
590
610
  raise ValueError(f"{line}: no channel carries that label (host guide §5.3)")
591
611
  else:
@@ -1133,6 +1153,35 @@ STREAM_MAX_DELAY_MS = 20 # ... or after this long. With (0, 0) the P4X sent eac
1133
1153
  # quiet lines) as a transfer of its own, 2000 a second, and dropped 35 % it could not send
1134
1154
 
1135
1155
 
1156
+ class StreamStopped(Exception):
1157
+ """Raised by a stream's `wait` (Request.during) when data was lost and on_loss is "stop": the stream stops there."""
1158
+
1159
+
1160
+ def _drive(req: Request, poll, lost) -> None:
1161
+ """Collect a started stream: for req.seconds, or while req.during(wait) runs - its `wait(seconds)` collecting
1162
+ meanwhile. poll(seconds) takes what comes, lost() says whether anything was lost; with on_loss "stop" a loss ends
1163
+ it (a StreamStopped out of wait, caught here)."""
1164
+ import time
1165
+
1166
+ def wait(seconds: float) -> None:
1167
+ deadline = time.monotonic() + seconds
1168
+ while True:
1169
+ now = time.monotonic()
1170
+ if now >= deadline:
1171
+ return
1172
+ poll(min(STREAM_POLL_S, deadline - now))
1173
+ if req.on_loss == "stop" and lost():
1174
+ raise StreamStopped("data was lost while streaming")
1175
+
1176
+ try:
1177
+ if req.during is None:
1178
+ wait(req.seconds)
1179
+ else:
1180
+ req.during(wait)
1181
+ except StreamStopped:
1182
+ pass
1183
+
1184
+
1136
1185
  def _collect_group(group, tracks, link, req: Request, oc, spool=None):
1137
1186
  """_collect for a group's streaming tracks (capture §4.1: each subscribed, started at once): -> ({fn: Received},
1138
1187
  seconds). The first track's Received goes to the spool as it comes; a loss in any track stops it with "stop"."""
@@ -1141,20 +1190,22 @@ def _collect_group(group, tracks, link, req: Request, oc, spool=None):
1141
1190
  t.subscribe(STREAM_MIN_BYTES, STREAM_MAX_DELAY_MS)
1142
1191
  group.start(tracks)
1143
1192
  t_read = time.monotonic()
1144
- deadline, got = t_read + req.seconds, {t.fn: oc.Received() for t in tracks}
1193
+ got = {t.fn: oc.Received() for t in tracks}
1145
1194
  lead = tracks[0].fn
1146
- while True:
1147
- now = time.monotonic()
1148
- if now >= deadline:
1149
- break
1150
- got = group.stream(link, tracks, seconds=min(STREAM_POLL_S, deadline - now), into=got)
1195
+
1196
+ def poll(seconds):
1197
+ group.stream(link, tracks, seconds=seconds, into=got)
1151
1198
  if spool is not None:
1152
1199
  spool.take(got[lead])
1153
- lost = (spool is not None and spool.lost) or any(
1200
+
1201
+ def lost():
1202
+ return (spool is not None and spool.lost) or any(
1154
1203
  g.gaps or (g.start or 0) > 0 for fn, g in got.items() if spool is None or fn != lead)
1155
- if req.on_loss == "stop" and lost:
1156
- break
1157
- group.stop()
1204
+
1205
+ try:
1206
+ _drive(req, poll, lost)
1207
+ finally:
1208
+ group.stop() # also when the caller's `during` raised: the probe is left stopped
1158
1209
  got = group.finish(link, tracks, got)
1159
1210
  return got, time.monotonic() - t_read
1160
1211
 
@@ -1182,25 +1233,26 @@ def _analog_runs(an, acfg, got) -> tuple[list, list]:
1182
1233
 
1183
1234
 
1184
1235
  def _collect(track, link, req: Request, oc, spool=None):
1185
- """Subscribe, start, collect for req.seconds, stop and collect the rest -> (Received, seconds). A loss stops it
1186
- at once with on_loss "stop"."""
1236
+ """Subscribe, start, collect for req.seconds (or while req.during runs), stop and collect the rest -> (Received,
1237
+ seconds). A loss stops it at once with on_loss "stop"."""
1187
1238
  import time
1188
1239
  track.subscribe(STREAM_MIN_BYTES, STREAM_MAX_DELAY_MS) # batched: a capture wants bandwidth, not a frame per block
1189
1240
  track.start()
1190
1241
  t_read = time.monotonic()
1191
- deadline, got = t_read + req.seconds, oc.Received()
1192
- while True: # stream() renews the lease across calls on the same Received
1193
- now = time.monotonic()
1194
- if now >= deadline:
1195
- break
1196
- got = track.stream(link, seconds=min(STREAM_POLL_S, deadline - now), into=got)
1242
+ got = oc.Received()
1243
+
1244
+ def poll(seconds): # stream() renews the lease across calls on the same Received
1245
+ track.stream(link, seconds=seconds, into=got)
1197
1246
  if spool is not None: # put together as it comes: memory holds a poll's worth, not the stream
1198
1247
  spool.take(got)
1199
- if req.on_loss == "stop" and spool.lost:
1200
- break
1201
- elif req.on_loss == "stop" and (got.gaps or (got.start or 0) > 0):
1202
- break
1203
- track.stop()
1248
+
1249
+ def lost():
1250
+ return spool.lost if spool is not None else bool(got.gaps or (got.start or 0) > 0)
1251
+
1252
+ try:
1253
+ _drive(req, poll, lost)
1254
+ finally:
1255
+ track.stop()
1204
1256
  got = track.finish(link, got)
1205
1257
  return got, time.monotonic() - t_read
1206
1258
 
@@ -145,7 +145,7 @@ def checker_sources_sha256():
145
145
  for name in CHECKER_SOURCES}
146
146
 
147
147
 
148
- REVIEWED_CORE_SHA256 = 'b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a' # oep-spec docs/oep-core.ja.md
148
+ REVIEWED_CORE_SHA256 = '0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a' # oep-spec docs/oep-core.ja.md
149
149
 
150
150
 
151
151
  def require_reviewed_contract(registry, spec=None):
@@ -17,7 +17,7 @@ def refused_stale(reply):
17
17
  return reply[3:5]==b'\0\4' and refusal_carries('unavailable',reply[5:],b'\1\1\0\6')
18
18
  from .host_deadline import reviewed_identity as core_identity
19
19
 
20
- REVIEWED={'interfaces/oep-if-capture.ja.md':'9bab21bc5e8cdf069448dea059af459b6d7a46757554ca7aee4196b04e1dccd6',
20
+ REVIEWED={'interfaces/oep-if-capture.ja.md':'786bf349dfe322cee7b0d13e9d250cee2d0778bef3590ae751b2e87b11bb2fd3',
21
21
  'interfaces/oep-if-common.ja.md':'25fed0b1b8b7f246a8b71d02cea810249803b1c3c1e9c3df466c04f38687f70c'}
22
22
 
23
23
  def reviewed_identity(path):
@@ -8,7 +8,7 @@ import struct
8
8
  from . import ops, require, tlvs
9
9
  from .. import conformance as _helpers
10
10
 
11
- REVIEWED_CORE_SHA256 = 'b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a' # oep-spec docs/oep-core.ja.md
11
+ REVIEWED_CORE_SHA256 = '0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a' # oep-spec docs/oep-core.ja.md
12
12
 
13
13
 
14
14
  class CoreSmokeChecks:
@@ -4,7 +4,7 @@ from pathlib import Path
4
4
  import struct
5
5
  from . import require,spec_identity
6
6
 
7
- REVIEWED_CORE_SHA256='b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a'
7
+ REVIEWED_CORE_SHA256='0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a'
8
8
  CORE_OPS={'confirm':1,'list':2,'describe':3,'clock':4,'open':16,'end':17,'keepalive':18,'lock_state':19}
9
9
  # the settings' ops (core §13.5 / §13.7, transports §7.3): their numbers reviewed, their results not read here
10
10
  SETTINGS_OPS={'get':32,'set':33,'unset':34,'save':35,'state':36,'network':37}
@@ -9,7 +9,7 @@ from pathlib import Path
9
9
  from . import require,spec_identity
10
10
 
11
11
 
12
- REVIEWED={'docs/oep-core.ja.md':'b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a',
12
+ REVIEWED={'docs/oep-core.ja.md':'0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a',
13
13
  'docs/oep-transports.ja.md':'2e99bf8039a3d8f5b55c80b66ac97ac40ddf7ad4711079177ffc947c5790103f'}
14
14
  QUICK_MS=1000 # core_quick_op_max_ms
15
15
 
@@ -11,12 +11,12 @@ from . import require, spec_identity
11
11
 
12
12
  REVIEWED = {
13
13
  'interfaces/oep-if-plan.ja.md': 'da8bd60af53499573c07bc33dbd8c4df93eb61a93b91dc57907f26620ae36bbf',
14
- 'interfaces/oep-if-fixture.ja.md': '53c81882c1789f4e5dd055977066ebd1dedc6c282d772218e85a402a1ba65d39',
15
- 'docs/oep-core.ja.md': 'b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a',
14
+ 'interfaces/oep-if-fixture.ja.md': '777a972349a14d1efa6e4575d3118b4e0566b81a6f22320401d529e4dca585f1',
15
+ 'docs/oep-core.ja.md': '0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a',
16
16
  'interfaces/oep-if-debug.ja.md': '1f490ab984c5820b29acfee923b9400849a3d0011c9ed6bb7144397d8dd29d38',
17
- 'interfaces/oep-if-capture.ja.md': '9bab21bc5e8cdf069448dea059af459b6d7a46757554ca7aee4196b04e1dccd6',
17
+ 'interfaces/oep-if-capture.ja.md': '786bf349dfe322cee7b0d13e9d250cee2d0778bef3590ae751b2e87b11bb2fd3',
18
18
  }
19
- REVIEWED_REGISTRY_SHA256='46c9da661fcdf07b68e1240bcf03320673d7b418882f3481863e58d2843d00a1'
19
+ REVIEWED_REGISTRY_SHA256='5fccf16a1d0ea2857834f2f4d83deca2294b3d5ef65b80e06a3b9020f78224ae'
20
20
 
21
21
 
22
22
  def reviewed_identity(spec):
@@ -6,7 +6,7 @@ from .. import registry as _reg
6
6
  SAVE=_reg.CORE.op['save'] # fn 0's save (core §13.7)
7
7
 
8
8
 
9
- REVIEWED={'docs/oep-core.ja.md':'b90ae1b15f10442ff411929e80d8457e754d5f11f227167d3c142f54ff14768a',
9
+ REVIEWED={'docs/oep-core.ja.md':'0408d232e728bb9692ab1c24cefa1fdbf109c35aeebd378034d86c0f4d19789a',
10
10
  'docs/oep-transports.ja.md':'2e99bf8039a3d8f5b55c80b66ac97ac40ddf7ad4711079177ffc947c5790103f'}
11
11
  QUICK_MS=1000 # core_quick_op_max_ms
12
12
 
@@ -7,7 +7,7 @@ import struct
7
7
  from . import ops, require, tlvs
8
8
 
9
9
  REVIEWED_INTERFACES = { # oep-spec interfaces/
10
- 'oep-if-fixture.ja.md': '53c81882c1789f4e5dd055977066ebd1dedc6c282d772218e85a402a1ba65d39',
10
+ 'oep-if-fixture.ja.md': '777a972349a14d1efa6e4575d3118b4e0566b81a6f22320401d529e4dca585f1',
11
11
  'oep-if-plan.ja.md': 'da8bd60af53499573c07bc33dbd8c4df93eb61a93b91dc57907f26620ae36bbf',
12
12
  'oep-if-debug.ja.md': '1f490ab984c5820b29acfee923b9400849a3d0011c9ed6bb7144397d8dd29d38',
13
13
  'oep-if-common.ja.md': '25fed0b1b8b7f246a8b71d02cea810249803b1c3c1e9c3df466c04f38687f70c',
oep_client/fixture.py CHANGED
@@ -559,8 +559,11 @@ class SpiController(_TargetDeclarations, Interface):
559
559
 
560
560
  def transfer(self, items: list[SpiItem]) -> list[SpiDone]:
561
561
  rd = m.Reader(self._call(self.TRANSFER, self.transfer_body(items)).payload)
562
+ n = rd.u8() # the answer's count (core §2.3)
563
+ if n != len(items):
564
+ raise m.ProtocolError(f"spi-controller transfer: {n} answered for {len(items)} asked")
562
565
  done = []
563
- for _ in items:
566
+ for _ in range(n):
564
567
  gap, setup, hold = rd.take("III")
565
568
  done.append(SpiDone(gap_ns=gap, setup_ns=setup, hold_ns=hold, rx=rd.counted("H")))
566
569
  rd.tail()
@@ -631,7 +634,10 @@ class Pwm(_TargetDeclarations, Interface):
631
634
  """(role, hz, duty) each, in order -> what the probe made of each."""
632
635
  body = struct.pack("<B", len(outputs)) + b"".join(struct.pack("<BIH", r, hz, d) for r, hz, d in outputs)
633
636
  rd = m.Reader(self._call(self.SET, body).payload)
634
- made = self._outputs(rd, len(outputs))
637
+ n = rd.u8() # the answer's count (core §2.3)
638
+ if n != len(outputs):
639
+ raise m.ProtocolError(f"pwm set: {n} answered for {len(outputs)} asked")
640
+ made = self._outputs(rd, n)
635
641
  rd.tail()
636
642
  return made
637
643
 
oep_client/interfaces.py CHANGED
@@ -129,7 +129,7 @@ KNOWN: dict[str, Known] = {
129
129
  "oep.probe.link": Known("the link test (source, sink) and, when its ops offer it, port_speed on a UART bridge"),
130
130
  "oep.probe.memo": Known("the memo area: named objects the host keeps on the probe (list, read, write, delete)",
131
131
  tags=_d("oep.probe.memo", ("max_object", "max object bytes", _u32),
132
- ("max_objects", "max objects", _u32))),
132
+ ("max_objects", "max objects", _u16))),
133
133
  "oep.probe.plan": Known("the plan: which channel each role of an interface uses (plan_apply, plan_release)",
134
134
  tags=_d("oep.probe.plan", ("plan_roles", "plan roles", _u32))),
135
135
  "oep.probe.restart": Known("the probe restarts itself, answering first",
oep_client/memo.py CHANGED
@@ -51,7 +51,7 @@ class Memo:
51
51
  self.fn = core.find(hst, _R.name) if fn is None else fn
52
52
  found = dict(core.describe(hst, self.fn))
53
53
  self.max_object = struct.unpack("<I", found[_R.tlv["describe"]["max_object"]])[0]
54
- self.max_objects = struct.unpack("<I", found[_R.tlv["describe"]["max_objects"]])[0]
54
+ self.max_objects = struct.unpack("<H", found[_R.tlv["describe"]["max_objects"]])[0]
55
55
 
56
56
  def _frame(self) -> int:
57
57
  return getattr(self.h.link, "max_frame", reg.MIN_MAX_FRAME)
oep_client/registry.py CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  from types import SimpleNamespace as _NS
5
5
 
6
- REGISTRY_HASH = "46c9da661fcdf07b"
6
+ REGISTRY_HASH = "5fccf16a1d0ea285"
7
7
  SCHEMA = 1
8
8
  PROTOCOL_REVISION = 1
9
9
  CONFIRM_REQUEST_MAGIC = 'OEP?'
@@ -305,7 +305,7 @@ class FixtureDrive:
305
305
  if nanos // 1_000_000 > MAX_OP_MS:
306
306
  raise unsupported_fixed()
307
307
  up = lambda ns: -(-ns // step) * step # noqa: E731 the nearest step at or above
308
- out = b""
308
+ out = bytes([n]) # n first (core §2.3)
309
309
  for k, (gap, setup, hold, tx) in enumerate(items):
310
310
  wire = bytes(reverse_bits(b) for b in tx) if st.bit_order else tx # the order on MOSI (§4)
311
311
  miso = self.spi_device[fn](st.mode, wire)[:len(tx)] if tx else b""
@@ -336,7 +336,7 @@ class FixtureDrive:
336
336
  raise unsupported_fixed()
337
337
  if any(r not in planned for r in roles):
338
338
  raise unavailable("wrong_state")
339
- out = b""
339
+ out = bytes([n]) # n first (core §2.3)
340
340
  for role, hz, duty in rows:
341
341
  if hz == 0:
342
342
  made = (0, 1, 0) # stopped: the line driven low
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: oep-client-python
3
- Version: 0.0.45
3
+ Version: 0.0.47
4
4
  Summary: Open Embedded Probe (OEP) v1 host: serial / USB / TCP transports, the session rules, the standard interfaces, and a virtual bench
5
5
  Project-URL: Homepage, https://github.com/Open-Embedded-Probe/oep-client-python
6
6
  Project-URL: Repository, https://github.com/Open-Embedded-Probe/oep-client-python
@@ -1,6 +1,6 @@
1
- oep_client/__init__.py,sha256=L1lGh0IgsAVU2I3eVT8yuXcVgA39qtvsE95QxmdBgQQ,164
1
+ oep_client/__init__.py,sha256=SJtIdmZwlVWpTrZFXfUmNy4LSawSb5TuRDhPAnsFzcI,164
2
2
  oep_client/__main__.py,sha256=kbXBtEmFdhRXbVqXEbWCO-_5aDa-KyqMcW2HLZb5fjc,31510
3
- oep_client/acquire.py,sha256=O4jmz4llIlfBkw2bGb-5yRUe5IB4TLb9BnZtScqedIQ,100251
3
+ oep_client/acquire.py,sha256=js4hRYX2kG7JVfQuLgO6fveRF9t1nOjz7PozuRbkUU0,102529
4
4
  oep_client/arm.py,sha256=SszSLae8zErD4T-a1uQ6s6o3Lz7pe2SR8d3Qy-wi5rY,15633
5
5
  oep_client/capture.py,sha256=fvLqs4Ltot4pyOdQiCWIzf_v1j_iduCxU4rrX6oWfg8,76245
6
6
  oep_client/capture_blocks.py,sha256=dPrrZ8K-ISF80w6UumKVst5XNt0IjUk9lxbVvFnUEqg,20836
@@ -13,22 +13,22 @@ oep_client/decode.py,sha256=6pTFVBT0MLAKedZLVKyd5yT8hjrRw4fdDjnoDiE9XRs,2380
13
13
  oep_client/discovery.py,sha256=oES0_NkR1Hc9E_cgPcfW8qfevQcVuYmayMaHuqufdO8,20180
14
14
  oep_client/dump.py,sha256=9rfO07q1EOY4aLFZkm_9RO8awjxNQa75DIDeKAoF_ac,12995
15
15
  oep_client/endpoint.py,sha256=A4fCeCwMCXOpsY4zeVy1LG_rG5SvYfImKRP153dIC5I,237768
16
- oep_client/fixture.py,sha256=bEbW7JNIh6uqOq1enp6hRiZ0Ipu8YdzEzS37WaM3cd8,33977
16
+ oep_client/fixture.py,sha256=gMc6TRAlXBEMBFg6aCBkGGJvbIJsGBSfUdk0genD_Y8,34397
17
17
  oep_client/frames.py,sha256=FM1AGn5NY_e-r1yKBsDkEEOqNrk5XTrlKA5Mq6Ycqiw,4984
18
18
  oep_client/hardware.py,sha256=RboxkRxkQJ3DbNJEXyyiOFYlLFKGxrlcSwHho8zFC1U,30256
19
19
  oep_client/hid_stream.py,sha256=1dG1C5rSqSWs2f0WpzMOKdFd3oY_mzF7z9SxUztjpQA,14093
20
20
  oep_client/host.py,sha256=sVNbxZmG1jLj0NdzcepJh-NqouQX9Z7-_NOjhcqxJTQ,47875
21
- oep_client/interfaces.py,sha256=4yfPpxx94W-VoXZMPy3wkHoUX7Rj5kI88jGYzasnjo8,12222
21
+ oep_client/interfaces.py,sha256=11u--9TC658b39QpEDB5BLhZeNDJUtRvl-2UFV2Aaj4,12222
22
22
  oep_client/kept_session.py,sha256=S45NwNjeZry5kc5HAyk_orqXKAYf26MuyjJ2ojT51FQ,8084
23
23
  oep_client/link.py,sha256=w69EoUga16HPW5Vw-8YnQtND3QxhRbcoteJJ8bMYHUk,146085
24
24
  oep_client/linktest.py,sha256=zj9Ek28VkjyuIPsiU3iF-UEZmY_xMnNjNL-vK-jOQ3Q,10258
25
- oep_client/memo.py,sha256=y8UbPKNbB_-1RmgzUpivQGFzt7QCIwm3Ys_Efm3gwxQ,3710
25
+ oep_client/memo.py,sha256=UOrbgFg7MHK6VtHbddzaH6DXy1Gz6rjLZAyih7WsZpY,3710
26
26
  oep_client/message.py,sha256=Kw-PwkMCwa8VGUBd1HWTXe8Epe4FwNcBx8262mWx2rk,14152
27
27
  oep_client/names.py,sha256=ohrRvQNURraYyJ-BtjHRwxGt_GLq-t8IO0aOji9Dhe0,3531
28
28
  oep_client/pins.py,sha256=iXswbqvze0KED1WNHLnjG5sn-_SjoJrIvcjj84LU_jU,53670
29
29
  oep_client/probe_log.py,sha256=gAamfON2M7lMH3xOn4Wpmes_Wp0H4c2EBNbpXjIvCMM,4927
30
30
  oep_client/pytest_conformance.py,sha256=-bcJU2E1UE4xjQ7HZjaIgtp0l65cIibBTNFnaW2tews,2929
31
- oep_client/registry.py,sha256=TB5up92Rn76MqT2iifLxBEj5x5aAlB_5XNjYmhimToU,22611
31
+ oep_client/registry.py,sha256=zWT_wlKQ0Awet7hAbm_SGarBjRT1oXAvKEdExUJJ-pw,22611
32
32
  oep_client/riscv.py,sha256=o_YElQuJZoBUzqO7QV9VkWVeD4UE2pUx_ciR_TMHRWI,60419
33
33
  oep_client/rp2350.py,sha256=7OMyj270k3AY1e3-ljicPwOjf9jOlokbT6QNkA0b0yY,4227
34
34
  oep_client/settings.py,sha256=wVRpvAmcvDygVE9PCbo4-7k-tq6pIzKh7VRlmtLO1Fk,26391
@@ -45,9 +45,9 @@ oep_client/virtual_bench_serve.py,sha256=LPjvXcfVpixOyhGM1-oZpDqjJfD53eKOrhpAdoX
45
45
  oep_client/virtual_bench_trigger.py,sha256=2c3gGOM8wXucTXbc1bTKQ5haX7bAkGJeOryGghrtcRk,23874
46
46
  oep_client/virtual_bench_usb.py,sha256=cnewgbsl30b0PgwkfebwSf3xjKyPg9y8vTd5Jew5r9o,4001
47
47
  oep_client/virtual_core.py,sha256=F-UxtQIld4eE04_M8j4ANMlQ12jXANzfTnfn59kUWHk,10716
48
- oep_client/virtual_fixture_drive.py,sha256=_G3MVqkxpd1SfKPz1XRkYbPzAQvgBlJzVUNhjAhDdz4,21708
48
+ oep_client/virtual_fixture_drive.py,sha256=3i5ss_bxIJFsRDb5S-GJ0Nb9QDyOBv_SwF9CDP6nPfE,21844
49
49
  oep_client/virtual_names.py,sha256=p72ME65R9Jy56xmVYnVCtapK3Id8iFpAdI5xLe2tNZ0,1449
50
- oep_client/conformance/__init__.py,sha256=eZ_Gt00tpQeMIwtpk8y_-9eLCAUrOGOVuIyPlT_S0sE,64739
50
+ oep_client/conformance/__init__.py,sha256=P_RyiWnULdDQMKyo0eCnE7VLv3v7Ps7lnVCY1hfOjdA,64739
51
51
  oep_client/conformance/allocator.py,sha256=dYR5ZcCVW-LjoZVx4W9Ad76L8Ol8Pu1aOkj78A9UY1E,6251
52
52
  oep_client/conformance/allocator_model.py,sha256=j6l1E1Hlju1jNeFQ_N0a2mDaegaTeyk6iScqzMpvvTc,1563
53
53
  oep_client/conformance/allocator_sample.py,sha256=xtiXuZa3VDTilrZArIWOiRyOkuXJ98_rY2M65sIVvpo,855
@@ -72,7 +72,7 @@ oep_client/conformance/capture_group_model.py,sha256=mZV51aKXcmP0-hWes2QTjwU9siq
72
72
  oep_client/conformance/capture_group_sample.py,sha256=VA30d65lOp9KGIK2eaCnLA_4MJwF6QY4voCL8ByQ0lU,1022
73
73
  oep_client/conformance/capture_metadata.py,sha256=5IZufTjSu1g2yRu7yCdR6aPn0C78ujxLfJ2uJfUjgD0,4063
74
74
  oep_client/conformance/capture_metadata_model.py,sha256=m10SLdFzhOu53-dpkEaSLjCYtO3w1uu4zTamXkT7bX4,1511
75
- oep_client/conformance/capture_serial.py,sha256=rOr6dy0trbUTraOA-H7tE2M6Z1qiHK5hQfY-mbniNgQ,8667
75
+ oep_client/conformance/capture_serial.py,sha256=Gycz8TawI9lLkdxasblojuEKNGx3Ki1xXqFrjoelwJY,8667
76
76
  oep_client/conformance/capture_serial_sample.py,sha256=vJ8xNwZFH-_9V0LoAZU5tJ79yxO0KMgTFOQAXG3FPAI,4271
77
77
  oep_client/conformance/capture_timeline.py,sha256=FSzYmkqQ0JIDuWlpohM9kdI5pvCT7H4Zo3J2k73XuZo,21772
78
78
  oep_client/conformance/capture_timeline_lifecycle.py,sha256=CzxjyhmaRiBb_2qY9qo60A_qMkaz-Y9h7a8hFffMYrk,16034
@@ -82,7 +82,7 @@ oep_client/conformance/clock.py,sha256=bDqBjih71zg_mhkgCSryzKI_N8FEoGoGv9jO4PMYD
82
82
  oep_client/conformance/clock_model.py,sha256=jyB8oTVR5sqbzeJCCWxdQBnzNNl4_uITLLYQ-yx8pRU,2568
83
83
  oep_client/conformance/clock_sample.py,sha256=x24mSpQoOamrXrinmnF_Tk4NPk76LwS6ZhfuK2SCwCo,673
84
84
  oep_client/conformance/core_fixed_fields.py,sha256=LRFP9yGOjDHQM1diX1HMdwXh9jMgAOY6xIC-woCikSk,6297
85
- oep_client/conformance/core_smoke.py,sha256=4omTUcT9_RAfrdV5zLWqxb-cWLsnhNuFuNGvJusaHGk,10815
85
+ oep_client/conformance/core_smoke.py,sha256=np7SZ3yVdD0imiFyjBjAT_J8KK_EmtUiJAeplUNpYR8,10815
86
86
  oep_client/conformance/corr.py,sha256=P6ljdsXpBq-vyEXRWOB1MqACQjT6HRBXgfAxgkyPjl4,6552
87
87
  oep_client/conformance/cut.py,sha256=4B8szd6_QtcGtYMWgP86ABsXUDOFVgwWaWCpTWMDO80,7942
88
88
  oep_client/conformance/cut_model.py,sha256=bHPnK8vKoInKVslW0KlJXRRgpGK-7ktIVGUEXo60X34,4791
@@ -117,21 +117,21 @@ oep_client/conformance/gpio_lifecycle_model.py,sha256=K0nzlXf-43kj3jsfaAuzEWOftO
117
117
  oep_client/conformance/gpio_lifecycle_sample.py,sha256=Yk1WENQ-2tbPCM2yUY4Yk9dgWkjIfL42VtUSpx1qhhM,369
118
118
  oep_client/conformance/gpio_model.py,sha256=CXy42K8cdRSTBxLC44h-gTYhjh3HrduSehsgsbvmDpo,5633
119
119
  oep_client/conformance/gpio_sample.py,sha256=JHsOrjkYcM738IGSzP5q7v5vANETwKT6-csCTxH55MQ,490
120
- oep_client/conformance/host_core.py,sha256=MaaV8OcbpDE8Xvw8jkPFeMrbJW_r_Db21OX5tcqsoZ0,12634
120
+ oep_client/conformance/host_core.py,sha256=RaCD86ehLC1w35hjXu0ekQ6hKTtoljdnReYTttll4KE,12634
121
121
  oep_client/conformance/host_core_sample.py,sha256=egU8Xw-f3eHx_CmUooN1yW1lzltOam6IsJbnD8uOx9I,3803
122
- oep_client/conformance/host_deadline.py,sha256=nVgm4L-rKWVpCNoAVkLd-JSEagLZ19pzwCsyKZrahkk,6978
122
+ oep_client/conformance/host_deadline.py,sha256=P0Yh3lZrq35_zQkEPhXjjX2aORXGkpPJvgxWtfNPvFM,6978
123
123
  oep_client/conformance/host_deadline_sample.py,sha256=G471jEc2HxDIu52Acw_aHDSxFAEC72OBCuvn2YQtAdU,5136
124
124
  oep_client/conformance/host_notifications.py,sha256=LGRJhOS66_36MYG8fHLcyHroXtoZRQVJgammDieVhQY,9307
125
125
  oep_client/conformance/host_notifications_sample.py,sha256=auze2DdWtUOdQMHnfDF8WXLAiETv3OuODR6y77VmsTQ,1788
126
126
  oep_client/conformance/host_request_sample.py,sha256=Oq60q350EhDxhe2FESnUF04YhJ6HDjDSHTe4FR55H9M,1848
127
- oep_client/conformance/host_requests.py,sha256=rlLygmkjTLIRn1n3GYDGOycjfw4LrAXlgSLUshKw6D4,10718
127
+ oep_client/conformance/host_requests.py,sha256=rBpaPPuGF1qCXufvvLEBc1hQujDzUawIc6J4fWltUj8,10718
128
128
  oep_client/conformance/host_resend.py,sha256=P8tFWtr6TwQ33ph-JO0l8EXyJGxSjC6fBeyKQ4AhqxU,5519
129
129
  oep_client/conformance/host_resend_sample.py,sha256=nwaru9ZVcxpcTi1OEritp8PSF6Qfic_IRGuutH2aBA4,4808
130
130
  oep_client/conformance/host_tlv.py,sha256=h5SZT9r3DCsxMLcRacdyKOoZNQHSL8DzRgT1VPu_86A,6140
131
131
  oep_client/conformance/host_tlv_sample.py,sha256=V6ORb5E2i76dc8O73Bew0eO2CbjG-ZPc02JLi6w5vmY,743
132
132
  oep_client/conformance/host_values.py,sha256=VnjEB5TQbI34fuyAx0OGVbiyfI2ZH_of9I4TLT7Dyyk,4742
133
133
  oep_client/conformance/host_values_sample.py,sha256=7C58mSP9jjrkNSgSb3uNK44VrdPXOznof_oe5UCcZro,1532
134
- oep_client/conformance/host_wait.py,sha256=a7IpBoJKbqWs81oW5S-qyJVVL-Mu8U0EWsFpjXpk3Iw,5591
134
+ oep_client/conformance/host_wait.py,sha256=B9h0mjhIbo8DH9LwUwP8OXL1weeKkPOOeW_YGU4H-CA,5591
135
135
  oep_client/conformance/host_wait_sample.py,sha256=7SkJ8H_9ScMv8gLnT85xBKj_GXciPvAzmH-KxfMWYCg,3257
136
136
  oep_client/conformance/i2c.py,sha256=fNDweyCLlCsv7fCwmmQMC7di5AG1HzDCflW0miWwcjc,18041
137
137
  oep_client/conformance/i2c_model.py,sha256=HLYqRKdKMvlCGMcgYxSS3dy50Zf7aPojN_gO5fBvy6U,9759
@@ -160,7 +160,7 @@ oep_client/conformance/notification_sequence_sample.py,sha256=awSniydBvRoy03PCR5
160
160
  oep_client/conformance/notify_hw.py,sha256=Baf3XXgmW7f-t2x8ML6CGUQqQ6PiVigm69Xe1GSkcpA,14933
161
161
  oep_client/conformance/oep_declaration_model.py,sha256=_Zq_eLLkHNGcDfA0tPptWpqT4tZbCsVrdjE2k9lAcco,2947
162
162
  oep_client/conformance/oep_declarations.py,sha256=0DrrDdveGEiSMp5fjy-ZJjR0mjAxv2TQLylZl_hnqfo,7492
163
- oep_client/conformance/oep_smoke.py,sha256=fWNh4DZ8A_oDtbl1fmdYuHxjISyHalKukk1XEontu68,12488
163
+ oep_client/conformance/oep_smoke.py,sha256=GVXTShmEILQczq1KkoOHkA3-gMbDf4-HqxW71YIrYY0,12488
164
164
  oep_client/conformance/outcome_model.py,sha256=jnKDNvkLBsSFQqQQEqCDt3zliKZx0b5LiLCHafrBv4U,3697
165
165
  oep_client/conformance/outcome_sample.py,sha256=6dbEwddcY0z4jGZsazp_gGI_Vu0em-0rOrGN2BVUMzI,673
166
166
  oep_client/conformance/outcomes.py,sha256=FktfF9aaexnXCgSNDYU6OZeqRuLd3ppFMXE1UrW-H2o,10047
@@ -255,8 +255,8 @@ oep_client/conformance/wire_options_sample.py,sha256=dog-yvUcu693M8b51tA5TnhAnKr
255
255
  oep_client/conformance/writer_lease.py,sha256=5wDd4XIJWFPFlRY91wHlJs5U7ANp3xPpGgU2Eki7e8g,7331
256
256
  oep_client/conformance/writer_lease_model.py,sha256=FxhDqqzdFOa_SSHSvjdQFh49Wn3YuZ98ISSlRRxrq9E,1721
257
257
  oep_client/conformance/writer_lease_sample.py,sha256=oowRwYUNAE4f6rEE2HmYlSS9dDWE0TGegkcsqVH8Nak,455
258
- oep_client_python-0.0.45.dist-info/METADATA,sha256=vTZ0IAWoD_068ZJ7etyFLbfMwcu9emOkqXacUBv4dNE,55269
259
- oep_client_python-0.0.45.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
260
- oep_client_python-0.0.45.dist-info/entry_points.txt,sha256=XEt39Jz7oQyU9Hfg_tV6eDGofNxWYrjSfslxKP-fh70,135
261
- oep_client_python-0.0.45.dist-info/licenses/LICENSE,sha256=ntlalztb3L1OaNAxmQdHlubu5fVhjMc9oRZi3PeQhXg,1076
262
- oep_client_python-0.0.45.dist-info/RECORD,,
258
+ oep_client_python-0.0.47.dist-info/METADATA,sha256=e38LWsb7vSB_jpzlmyLWSQeBrHvSb9dREoKRv8V0nKQ,55269
259
+ oep_client_python-0.0.47.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
260
+ oep_client_python-0.0.47.dist-info/entry_points.txt,sha256=XEt39Jz7oQyU9Hfg_tV6eDGofNxWYrjSfslxKP-fh70,135
261
+ oep_client_python-0.0.47.dist-info/licenses/LICENSE,sha256=ntlalztb3L1OaNAxmQdHlubu5fVhjMc9oRZi3PeQhXg,1076
262
+ oep_client_python-0.0.47.dist-info/RECORD,,