Skip to content

feat(plugin): byte-stream 接続 (stream-io) + kble 統合 #73

Description

@sksat

ステータス(2026-06-27): core と host bridge はマージ済み(raw stream-io WIT #84 / ws:// bridge + realtime serve loop #106 / stdio bridge #114)。live モードは動作する。残りは replay モードper-satellite tick の 2 点(詳細は この進捗コメント)。以下は当初の設計記録。


背景

実機通信は「上位レイヤ = パケット / 下位レイヤ = バイトストリーム」のことが多く、ArkEdge では現状 arkedge/kble(virtual harness, plug をバイトストリームで配線)で各コンポーネント・ツールを繋いでいる。orts をその harness に組み込めるよう、FSW(plugin) に バイトストリーム接続 を追加する。

RF/PHY(変調・BER・干渉・波形)は対象外。バイトストリーム層まで。msg-io(packet ベースの運用 C&T 模擬, orts-native)とは別物の兄弟として共存させる。orts は中身を解釈しない dumb byte conduit。framing (eb90) / C2A 変換は kble 側に委ねる。

kble 統合面(調査済み)

  • plug = 双方向バイトストリーム: PlugStream = Stream<Item=Result<Vec<u8>>> / PlugSink = Sink<Vec<u8>>(データ単位 = Vec<u8> チャンク)。
  • 外部プロセスの接続手段: ws://(binary WebSocket) / exec:(stdin/stdout のバイト) / serial(kble-serialport) / tcp(kble-tcp)。
  • framing/変換は pipeline 要素: kble-eb90(0xEB90 同期), kble-c2a(C2A FSW)。

設計方針

  • WIT stream-io(guest 側): FSW が read(max) -> list<u8> / write(list<u8>)。msg-io と同様に tick 境界で凍結 read バッファ + flush write(決定論を保つ)。複数の名前付きストリーム(comlink / debug UART 等)をサポート。
  • host bridge(2 トランスポート):
    • ws://: 衛星 × ストリームごとに binary WebSocket を公開 → kble の ws:// plug。多チャネル向き(既存 serve WS と相性可)。
    • stdio (exec:): kble が orts を起動し stdin/stdout をバイト conduit にする。単一チャネル(CSV 出力と排他の専用モードが要る)→ 単一リンク/単一衛星向け。
  • クロック: 外部 kble とは 実時間で繋ぐ SIL モードserve 系)。決定論 oracle/replay とは別経路。replay 用の byte-stream 記録は将来。

レイヤ整理(設計議論の結論)

PHY(RF/場)byte/bit stream(本 issue, kble)message(msg-io, packet, 運用)。message は最上段で「framing 済み」を前提。本 issue はその下の stream 層を足す。RF は更に下で別シミュレータ/co-sim(やるとしても)。

スコープ外

  • RF/PHY(変調・BER・干渉)
  • orts 内での framing 実装(kble/FSW 側)

関連: msg-io = #58

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions