Repository navigation
v0.0.24
0.0.24
- (EN) A serial link whose port a session holds sends a request again as soon as a broken frame arrives, instead of after the timeout: the probe sends no raw bytes on a held port (oep-core §3.4), so the broken frame was the reply, and the repeat is answered from the probe's retry table. A 60 KB logic capture read on an M5Stack ATOM went from 4.0 to 8.3 KB/s at 115200 and runs at 76 KB/s at 1.5 Mbaud (dogfooding port_speed, 2026-10-01).
- (JA) セッションが口を持っているシリアルの経路では、壊れたフレームが来たら時間切れを待たずにすぐ送り直す: 持たれている口には probe が生のバイトを送らない(oep-core §3.4)ので、壊れたフレームは応答で、送り直しには probe の送り直しの表が答える。M5Stack ATOM で 60 KB のロジックのキャプチャの読み出しが 115200 で 4.0 → 8.3 KB/s、1.5 Mbaud で 76 KB/s になった(port_speed のドッグフーディング、2026-10-01)。
- (EN)
raise_speed(used on an M5Stack ATOM, 2026-10-01): waits 20 ms after a baud change and finds the new rate with a confirm before measuring; verifies pipelined first and, when frames break with both ways busy (the ATOM's FTDI at 500 kbaud and up), once more one request at a time, then keeps that limit on the link (SpeedTrial.inflight,link.inflight_cap); a rate whose confirm never comes back says so. The ATOM now commits 1.5 Mbaud at 76 / 58 KB/s (in flight 1) where the first version rejected every rate. - (JA)
raise_speed(M5Stack ATOM で使った、2026-10-01): 速さを変えたら 20 ms 待ち、測る前に confirm で新しい速さを確かめる。まずパイプラインで確かめ、両方向が同時に動くとフレームが壊れる線(ATOM の FTDI の 500 kbaud 以上)では 1 つずつでもう一度確かめ、その上限を link に残す(SpeedTrial.inflight、link.inflight_cap)。confirm が返らない速さはそう書く。最初の版はどの速さも断ったが、今は ATOM で 1.5 Mbaud が 76 / 58 KB/s(同時 1)で決まる。 - (EN) port_speed (oep-spec 3b9311c, core §3.5, fn 0 op 0x14; registry synced), opt-in.
link.raise_speed(hst, rates, *, verify_bytes=32768, verify_s=1.0, verify_ms=None, idle_ms=0, port=None)tries the rates in order on the UART bridge this host opened: try -> the host switches its baud -> link_source / link_sink both ways with max_frame-sized frames (pipelined) for verify_bytes or verify_s, broken frames counted and KB/s measured each way -> commit when nothing broke, else revert (step 2) and back to the boot speed, re-confirmed (waiting out verify_ms). The first rate that passes is kept. TheSpeedReport(rate,chosen,in_kb_s/out_kb_s,trialsofSpeedTrial,to_text()) is kept aslink.speed.open_host(target, ..., baud=115200, port_speed=None | [rates], lease_ms=3000, owner=None): with port_speed it takes the lock and runs it (the session stays open). A completedendor revert puts the link back at the boot speed at once; a request unanswered at a raised rate (its resend too) goes back to the boot speed, confirms and goes once more (link.speed_lost). A probe without it (no describe port_speed, or unknown_operation) is reported not supported and stays at its speed; TCP / USB links are not this host's serial port. Serial ports open in pyserial's low-latency mode where the driver has it.oep speed <probe> <rate,rate,...>prints the report. Fake: the op and its state machine (try / commit / revert, verify_ms, idle_ms, a broken candidate while trying, 3 within 1 s when committed, the session's end, wrong port cause 6, unmakeable rates unsupported), on inesp32-v003(Endpoint.port_speed_base, None = off), the line modelled byEndpoint.broken_rates(BrokenRate(min_size, to_host, to_probe)),fake_serial.FakeSerialStream(an in-process pyserial-shaped port that garbles while the host's rate differs from the probe's),fake_serve --no-port-speed/--broken-rate RATE[:MIN][:in|out]. - (JA) port_speed(oep-spec 3b9311c、core §3.5、fn 0 の op 0x14。registry を写し直した)、使うときだけ。
link.raise_speed(hst, rates, *, verify_bytes=32768, verify_s=1.0, verify_ms=None, idle_ms=0, port=None)は、この host が開いた UART bridge で速さを順に試す: 試す → host が baud を切り替える → 両方向に max_frame の大きさで link_source / link_sink(パイプライン)を verify_bytes か verify_s の分流し、壊れたフレームを数え、向きごとの KB/s を測る → 何も壊れなければ決める、壊れれば戻す(step 2)して起動時の速さに戻り confirm し直す(verify_ms を待つ)。最初に通った速さを使う。SpeedReport(rate、chosen、in_kb_s/out_kb_s、SpeedTrialのtrials、to_text())はlink.speedに残る。open_host(target, ..., baud=115200, port_speed=None | [速さ], lease_ms=3000, owner=None): port_speed があればロックを取って行う(セッションは開いたまま)。完了したendと戻すでは link もすぐ起動時の速さに戻り、上げた速さで応答の来ない要求(送り直しも)は起動時の速さに戻って confirm し、もう一度送る(link.speed_lost)。機能の無い probe(describe に port_speed が無い、または unknown_operation)は not supported と報告し、速さは変えない。TCP / USB の link はこの host のシリアルの口ではない。シリアルの口はドライバにあれば pyserial の low-latency のモードで開く。oep speed <probe> <速さ,速さ,...>は結果を出す。偽の probe: op と状態の遷移(試す / 決める / 戻す、verify_ms、idle_ms、試しの間の壊れた候補、決めた後の 1 秒に 3 つ、セッションの終わり、違う口は cause 6、作れない速さは unsupported)。esp32-v003で ON(Endpoint.port_speed_base、None で OFF)。線はEndpoint.broken_rates(BrokenRate(min_size, to_host, to_probe))で表す。fake_serial.FakeSerialStream(同じプロセスの pyserial の形の口。host の速さが probe と違う間は壊す)、fake_serve --no-port-speed/--broken-rate RATE[:MIN][:in|out]。 - (EN)
oep.probe.configitemdisable(0x07, oep-spec 6088438; registry synced):config.Disable(channel), removed withremove("disable", ch)/unset([("disable", ch)]), in the canonical hash; CLIoep config disable <probe> <channel...> [--save].core.PinsTakennames a disabled channel. The fake probe follows it: any request naming a disabled channel (plan_apply, a settings plan, a slot's pins, an attach's pins / reset TLV, scan pairs, gpio set / read) is rejected unavailable cause 5 with the channel; scan's count-0 list and a pinless attach skip it; disabling a channel in use (a plan, a connection, a slot) is cause 1; idle and disable on one channel is malformed; the free pins' idle state (Endpoint.parked, set at boot after the saved items and whenever a pin is released) never touches a disabled channel; describe is unchanged. Following oep-spec 4842e95 (registry resynced): a cause 5 refusal for a disabled channel carries holder_kind 6disabled(Unavailable.holder_kind == "disabled"), and disabling a channel the probe does not declare is rejected unsupported (as idle). - (JA)
oep.probe.configの項目disable(0x07、oep-spec 6088438。registry を写し直した):config.Disable(channel)。remove("disable", ch)/unset([("disable", ch)])で消す。正規形の hash に入る。CLIoep config disable <probe> <channel...> [--save]。core.PinsTakenは無効にした channel を示す。fake の probe も追随した: 無効にした channel を指す要求(plan_apply、設定の plan、スロットのピン、attach の pins / reset TLV、scan の組、gpio の set / read)は channel 付きの rejected unavailable cause 5。scan の count 0 の並びとピンを指さない attach はそれを飛ばす。使われている channel(plan、接続、スロット)を無効にする set は cause 1。同じ channel の idle と disable は malformed。空きのピンの状態(Endpoint.parked。起動時は保存の項目の後に、ピンが解放されるたびに掛ける)は無効にした channel に触れない。describe は変わらない。oep-spec 4842e95 に追随(registry を写し直した): 無効にした channel の cause 5 の断りは holder_kind 6disabledを持ち(Unavailable.holder_kind == "disabled")、probe が宣言していない channel の disable は rejected unsupported(idle と同じ)。
Repository: https://github.com/Open-Embedded-Probe/oep-client-python
Full Changelog: v0.0.23...v0.0.24