Repository navigation
v0.0.22
0.0.22
- (EN) Breaking: the wire follows oep-spec's zero-base rewrite of 2026-10-01 (docs/v1-zero-base-proposal.ja.md §3 / §7; registry synced). Every answer that ended in data or a list now carries its length and may be followed by TLVs: read answers
start flags len data [TLV](console, fixture UART; capturelenu32), gpio readn n×level, dmidone status nvals values, arm-adi transferdone status ack nvals values, runstatus stopped dpc elapsed_us nvals values(stopped 2 = the hart could not be halted:RunResult.not_halted), data framesposition len data [TLV], eventskind fixed-part [TLV]. TLVs have a long form (tag 0xFF len(u16) valuefor 255 bytes and more;message.tlv/split_tlvs, the long form with a short value ismessage.BadTlv). confirm answers the probe'sboot_id; subscribe'smax_delay_msis u32;rejected unsupportedis alwaystag [TLV](0x00 = a fixed-part value:Unsupported.tagNone,.tlvs). - (JA) 破壊的変更: wire を oep-spec の 2026-10-01 のゼロベース見直し(docs/v1-zero-base-proposal.ja.md §3 / §7。registry を写し直した)に揃えた。データや並びで終わっていた応答はすべて長さを持ち、後ろに TLV を置ける: read の応答
start flags len data [TLV](console、fixture UART。capture のlenは u32)、gpio readn n×level、dmidone status nvals values、arm-adi transferdone status ack nvals values、runstatus stopped dpc elapsed_us nvals values(stopped 2 = hart を止められなかった:RunResult.not_halted)、データフレームposition len data [TLV]、出来事kind 固定部 [TLV]。TLV に長い形(255 byte 以上はtag 0xFF len(u16) value。message.tlv/split_tlvs、短い値の長い形はmessage.BadTlv)。confirm は probe のboot_idを返す。subscribe のmax_delay_msは u32。rejected unsupportedは常にtag [TLV](0x00 = 固定部の値:Unsupported.tagは None、.tlvs)。 - (EN) Breaking: after the lease lapsed, the same session id's next request is
rejected expired(0x0E):host.Expired(Rejected)with.lease_ms, never re-opened silently;open()then answersOpened.resumed == 2(.swept) andHost.epochmoves (as it does onno_session- what an id forced out by another meets afterlocked).Wire.connections()andConsole.streams()page throughfirst/more. Subscriptions survive a same-id open while the lock is held; a subscribe to an fn that emits nothing is unsupported, an unsubscribe of nothing is ok. - (JA) 破壊的変更: lease が切れた後の同じ session_id の要求は
rejected expired(0x0E):host.Expired(Rejected)(.lease_msつき)。黙って open し直さない。その後のopen()はOpened.resumed == 2(.swept)を返し、Host.epochが進む(no_sessionでも進む。force で奪われた側は locked のあと no_session)。Wire.connections()とConsole.streams()はfirst/moreでページを辿る。保持中の同じ ID の open で購読は残る。送り出さない fn の subscribe は unsupported、購読の無い unsubscribe は ok。 - (EN) Breaking:
oep.probe.config- describe is declarations only (ProbeConfig.describe()->Declared: storagemax_bytesu32, items, slots_max, bind_modes u32); the live storage / slot / bind state is the lock-freestateop (0x06, paged;ProbeConfig.state()->State,SlotState.last_try_at_ns);unset(0x05) removes items by key (ProbeConfig.unset,config.remove()in asetlist goes as an unset - a key alone no longer removes); the newuartitem (config.Uart(fn, baud, format)) is applied whenever that UART's plan has RX or TX (a session's configure wins until the plan goes); slot fields areretry_ms(u32; the PythonSlot.retry_sstays, seconds) andmax_speed_hz(u32;Slot.max_speedstays, Hz); mechanismnone(0xFF) = a slot without a console; the hash is the CRC-32 of the canonical form (config.canonical/hash_of). CLI:oep config state,oep config uart,removefor every item kind. - (JA) 破壊的変更:
oep.probe.config- describe は宣言だけ(ProbeConfig.describe()->Declared: storage はmax_bytesu32、items、slots_max、bind_modes u32)。保存・スロット・bind の今の状態はロック不要のstateop(0x06、ページング。ProbeConfig.state()->State、SlotState.last_try_at_ns)。unset(0x05)はキーで項目を消す(ProbeConfig.unset。setの並びのconfig.remove()は unset として送る。キーだけの項目で消す規則は廃止)。新しいuart項目(config.Uart(fn, baud, format))は、その UART の plan に RX / TX が付くたびに掛かる(セッションの configure は plan を解くまで勝つ)。スロットのフィールドはretry_ms(u32。Python のSlot.retry_sは秒のまま)とmax_speed_hz(u32。Slot.max_speedは Hz のまま)。mechanismnone(0xFF)= コンソール無しのスロット。hash は正規形の CRC-32(config.canonical/hash_of)。CLI:oep config state、oep config uart、removeはすべての項目。 - (EN) Breaking: wires -
attach_under_reset(op 0x04) is gone:Wire.attach(reset=(channel, hold_ms))sends the attach's critical TLV 0x05 (theattach_under_reset()method stays as a wrapper and returns the dpc from the answer's TLV 0x11);max_speedis required by the probe, soattach()always sends one (None: the wire's declaredmax_clock_hz, else 1 MHz); the answer's flags are the commonattach_flags(Wire.halted/.dpc; swd's dormant bit moved to bit2); scan takesmax_speed/idle_clockTLVs and its skip is TLV 0x02;WireBase.connections()anddetach(force=).RiscvDm.run(timeout_ms=None)is the probe'smax_op_ms(core.max_op_ms), no longer 0xFFFFFFFF. - (JA) 破壊的変更: 線 -
attach_under_reset(op 0x04)は無くなり、Wire.attach(reset=(channel, hold_ms))が attach の critical TLV 0x05 を送る(attach_under_reset()メソッドは包みとして残り、応答の TLV 0x11 の dpc を返す)。probe はmax_speedを必須にしたのでattach()は常に送る(None: その線の宣言のmax_clock_hz、無ければ 1 MHz)。応答の flags は共通のattach_flags(Wire.halted/.dpc。swd の dormant は bit2 に移った)。scan はmax_speed/idle_clockの TLV を取り、skip は TLV 0x02。WireBase.connections()とdetach(force=)。RiscvDm.run(timeout_ms=None)は probe のmax_op_ms(core.max_op_ms)で、0xFFFFFFFF ではなくなった。 - (EN) Breaking: console - marks carry
time_ns(u64, the probe's one clock;Mark.time_ns, 22 bytes), a stream lives while anything uses it (the sessions that opened it, a bound slot;closetakes one share; a lapse takes the session's), one live stream per connection (another mechanism: unavailable cause 6), a closed stream of the same place and mechanism comes back under its old number, markclosed(0x09) with why, the lock-freestreamsop (Console.streams()->StreamInfo), a write that fits nothing is completed failed. Connections and streams share one u16 number space (wrapping); a number of the other kind is unavailable cause 6.registry.COMMON.enumholdsread_from,read_flags,mark_kindand the mark details (they left the console's enum). - (JA) 破壊的変更: console - マークは
time_ns(u64、probe の 1 本の時計。Mark.time_ns、22 byte)。ストリームは使っているもの(open したセッション、bind されたスロット)がある間生きる(closeは自分の分、lease 切れはセッションの分を外す)。1 つの connection に生きているストリームは 1 つ(別の mechanism は unavailable cause 6)。閉じたストリームは同じ場所・同じ mechanism の open で同じ番号で戻る。マークclosed(0x09)に理由。ロック不要のstreamsop(Console.streams()->StreamInfo)。何も入らなかった write は completed failed。connection とストリームは 1 つの u16 の番号空間(一周する)で、別の種類の番号は unavailable cause 6。registry.COMMON.enumにread_from、read_flags、mark_kindとマークの detail(console の enum から移った)。 - (EN) Breaking: capture - every start is a generation (u32): start answers
blocking_ms generation, statusstate serial_done write_pos flags generation [TLV error](LogicCapture.status()->Status, still iterable as the old 4-tuple), segment records are 37 bytes (Segment.generation), read isgeneration position max, releasegeneration serial(another generation: unavailable cause 6), streaming data frames carry TLV generation (stream()drops another generation's,Received.stale);LogicCapture.generation/read(..., generation=);read_segment(segment)passes the segment's own. Trigger values are u32; segments answers havemore; state 5 goes on by itself after release (no stopped 2 event); describechannelslayouts /triggertypes are u32,rate_list/ grouptracks/budgetcarryn;Calibration.vrefint_nominal_mv, factory data hasraw_len; the group's start answers each track's generation (CaptureGroup.generations), its events are triggered 0x03 / stopped 0x02. - (JA) 破壊的変更: capture - start ごとに世代(u32): start の応答
blocking_ms generation、statusstate serial_done write_pos flags generation [TLV error](LogicCapture.status()->Status。前の 4 つ組としても展開できる)、区画の情報は 37 byte(Segment.generation)、read はgeneration position max、release はgeneration serial(違う世代は unavailable cause 6)、ストリーミングのデータフレームは TLV generation を持つ(stream()は別の世代を捨てる。Received.stale)。LogicCapture.generation/read(..., generation=)。read_segment(segment)は区画の世代を付ける。trigger の value は u32。segments の応答にmore。state 5 は release で自動で再開(stopped 2 の出来事は無い)。describe のchannelsの layout /triggerの types は u32、rate_list/ 組のtracks/budgetはnを持つ。Calibration.vrefint_nominal_mv。factory にraw_len。組の start は各トラックの世代を返す(CaptureGroup.generations)、組の出来事は triggered 0x03 / stopped 0x02。 - (EN) Breaking: fixture - gpio read answers
n n×level, its describemodesis u32 (a mode the probe lacks is unsupported with channel / index TLVs; mode 8+ malformed); the UART's stream is made by the plan (RX or TX) and goes with it, its position never going back within a boot;FixtureUart.status()(op 0x07) ->UartStatus(configuredis a name: default / session / item / item_fallback, registryuart_configured); an undefined format bit is malformed, an undeclared format unsupported, a baud more than 5 % off unsupported; i2c / spierrorsare u32,read_rxreads its TLV tail (last_ns), describequeue_depth. - (JA) 破壊的変更: fixture - gpio read の応答は
n n×level、describe のmodesは u32(持たない mode は channel / index の TLV つきの unsupported。mode 8 以上は malformed)。UART のストリームは plan(RX か TX)が作り、plan と一緒に消える。位置は起動の中で戻らない。FixtureUart.status()(op 0x07)->UartStatus(configuredは名前: default / session / item / item_fallback、registry のuart_configured)。format の未定義のビットは malformed、宣言に無い format は unsupported、±5% を超える baud は unsupported。i2c / spi のerrorsは u32、read_rxは TLV の後ろを読む(last_ns)、describe にqueue_depth。 - (EN) The fake probe follows all of it (the working spec):
boot_idin confirm,expiredandresumed2, one resource number space, the heartbeatboot_id uptime_ns, the plan'splan_roleslimit and reason table, attach's reset TLV / required max_speed / scan TLVs, dmi / run answers with nvals (run'sFakeTarget.unstoppablefor stopped 2), the console's stream lifetime andstreams, gpio modes, the UART's plan-made stream /status/ formats, probe.config'sstate/unset/uartitem / canonical hash, capture generations and the group's generations TLV. Its describes declaremax_op_ms10000,plan_roles,discoverable(wasoep_pid), gpiomodes, UARTformats. USB: the vendor interface is told by class 0xFF, subclass 0x4F, protocol 0x45 and a probe by its iProductOEPalone (registry.USB). - (JA) fake の probe もすべてに追随した(動く spec): confirm の
boot_id、expiredとresumed2、資源番号の 1 つの空間、ハートビートboot_id uptime_ns、plan のplan_rolesの上限と断り方の表、attach の reset TLV / 必須の max_speed / scan の TLV、nvals を持つ dmi / run の応答(stopped 2 はFakeTarget.unstoppable)、console のストリームの寿命とstreams、gpio の modes、UART の plan が作るストリーム /status/ formats、probe.config のstate/unset/uart項目 / 正規形の hash、capture の世代と組の世代の TLV。describe はmax_op_ms10000、plan_roles、discoverable(oep_pidから改名)、gpio のmodes、UART のformatsを宣言する。USB: vendor の interface は class 0xFF・subclass 0x4F・protocol 0x45 で、probe は iProductOEPだけで見分ける(registry.USB)。
Repository: https://github.com/Open-Embedded-Probe/oep-client-python
Full Changelog: v0.0.21...v0.0.22