Skip to content

v0.1.6

Choose a tag to compare

@github-actions github-actions released this 14 Aug 02:18
· 98 commits to main since this release

VOFA-NEXT Release Notes

v0.1.6

This release is a stability & pipeline fix release centered on the frame decoding and command sending chain: a new loopback mode for FrameDecoder (bytes injected via loopback edges instead of the live RX stream), send modes decoupled from loopback so manual / on-change / timer sending now work in any mode, loopback byte injection from CommandSender to connected decoders that works even without a serial connection, immediate graph feedback for input controls, and fixes for the RawData channel display (dynamic port id normalization) plus control / rendering stability (wheel handling, CustomWidget getSnapshot, node port refresh).


✨ New Features

1. Frame Decoder & Command Sender Loopback Rework

  • FrameDecoder loopback mode: a new loopback option adds a loopbackIn byte input port — the decoder then only receives bytes injected via loopback edges instead of the default live RX stream (independent of the live/manual data mode).
  • Loopback byte injection: in loopback mode, CommandSender routes the sent bytes along loopback edges to all connected FrameDecoders via a new inject_loopback_bytes command. It is decoupled from the serial port state — no connection needed for local parse-and-display.
  • Send modes decoupled from loopback: the send mode selector (manual / on-change / timer with interval) moved out of the loopback section and now applies to every send path; in timer mode a stable interval auto-sends, in on-change mode the final byte stream is auto-sent whenever it changes.
  • Loopback edge routing: edges targeting loopbackIn are collected separately as byte-routing edges and excluded from the f32 topological sort — connecting a Command var_ref input back to a decoder output no longer falsely triggers a cycle error.
  • Connection validation: loopbackOut (CommandSender byte output port) can only connect to loopbackIn and vice versa; regular numeric ports stay unrestricted.
  • send_and_capture independent of connection: when the transport is not connected it skips the hardware send and still performs the local protocol parse comparison.
  • FrameDecoder raw output port: emits the full raw frame bytes consumed by the decoder (non-f32 semantics) for RawData-style display of complete frames.

2. Immediate Graph Feedback for Inputs

  • set_input_value (Knob / Slider / Button / Radio / Checkbox) and submit_custom_output now trigger an immediate empty-frame graph evaluation, so value changes are reflected instantly on downstream widgets (Gauge etc.) and CommandSender on-change sending — no longer dependent on an active transport data stream.

3. RawData Channel Display Fixes

  • Introduced a unified dynamic port id convention src:<sourceId>:<handle> (rawDataPortId) for RawData input ports; both connection creation and snapshot import now rewrite the edge targetHandle to the derived port id, fixing the React Flow handle-not-found warning (#8) where edges failed to render.
  • Snapshot migration: importing older app snapshots that still carry the fallback data target handle is normalized automatically.

4. Control & Rendering Stability

  • Knob / Slider wheel handling: replaced the passive React onWheel (where preventDefault is ignored, causing the page to scroll while adjusting) with native non-passive wheel listeners.
  • CustomWidget infinite-loop fix: the missing-inputs fallback now uses a stable module-level empty object, preventing a getSnapshot should be cached re-render loop.
  • WidgetNode port refresh: when a widget's port set changes (var_ref add/remove, loopback toggle), updateNodeInternals is invoked so new handles are connectable immediately; widget cards also gained the nowheel class.
  • FrameDecoder settings UI: option toggles unified to the same button style as CommandSender, with the new loopback switch.

📦 Installers

  • macOS: .dmg — universal / arm64 / amd64
  • Linux: .deb / .AppImage / .rpm
  • Windows: .msi / .exe (NSIS)

VOFA-NEXT 发布说明

v0.1.6

本次发布是围绕 帧解码与命令发送链路稳定性与修复 版本:帧解码器新增 回环模式(通过回环边注入字节,不再默认接收实时 RX 流)、发送模式与回环解耦(手动 / 值变化 / 定时发送任意模式下均可使用)、CommandSender 到解码器的 回环字节注入(无需串口连接即可本地解析显示)、输入控件的 即时图反馈,以及 RawData 通道显示 的修复(动态端口 id 归一化)与控件 / 渲染稳定性改进(滚轮处理、CustomWidget getSnapshot、节点端口刷新)。


✨ 新特性

1. 帧解码器与命令发送链路回环重构

  • 帧解码器回环模式:新增 loopback 开关,开启后解码器显示 loopbackIn 字节输入口,只接收回环边注入的字节,不再默认接收实时 RX 流(与 live/manual 数据模式相互独立)。
  • 回环字节注入:回环模式下,CommandSender 发送的字节沿回环边路由到所有连线的帧解码器(新增 inject_loopback_bytes 命令);与串口开关无关——未连接时也能完成本地解析与对照显示。
  • 发送模式与回环解耦:发送模式选择(手动 / 值变化 / 定时,含定时间隔)从回环区块移出,对所有发送路径生效——定时模式按间隔自动发送,值变化模式在最终字节流变化时自动发送。
  • 回环边路由:以 loopbackIn 为目标的边单独收集为字节路由边,不参与 f32 拓扑排序——Command 的 var_ref 输入回连解码器输出时不再误判成环。
  • 连线校验loopbackOut(CommandSender 字节发送口)只能连 loopbackIn,反之亦然;普通数值口之间维持现状。
  • send_and_capture 与连接状态解耦:未连接串口时跳过硬件发送,仅做本地协议引擎解析对照。
  • 帧解码器 raw 输出端口:输出解码器消费的整帧原始字节(非 f32 语义),便于以 RawData 方式展示完整帧内容。

2. 输入控件即时图反馈

  • set_input_value(旋钮 / 滑块 / 按钮 / 单选 / 复选)与 submit_custom_output 提交后立即触发一次空帧图求值,值变化即时反映到下游控件(Gauge 等)与 CommandSender 值变化发送——不再依赖传输数据流。

3. RawData 通道显示修复

  • 统一 RawData 输入端口动态端口 id 约定 src:<sourceId>:<handle>rawDataPortId);新建连线与快照导入均会将边的 targetHandle 改写为派生端口 id,修复 React Flow 找不到 handle 的告警(#8)导致边无法渲染的问题。
  • 快照迁移:导入旧版快照时,仍携带回退端口 data 的边会被自动归一化。

4. 控件与渲染稳定性

  • 旋钮 / 滑块滚轮处理:将被动模式的 React onWheelpreventDefault 无效、调节时页面会跟随滚动)替换为原生非被动 wheel 监听。
  • CustomWidget 无限循环修复:缺失输入时的兜底对象改用模块级常量以保持引用稳定,避免 getSnapshot should be cached 导致的无限重渲染。
  • WidgetNode 端口刷新:控件端口集合变化(var_ref 增删、回环开关)时调用 updateNodeInternals,新端口立即可连线;控件卡片同时补充 nowheel 类。
  • 帧解码器设置界面:选项开关统一为与 CommandSender 同款的按钮样式,并新增回环模式开关。

📦 安装包

  • macOS: .dmg — universal / arm64 / amd64
  • Linux: .deb / .AppImage / .rpm
  • Windows: .msi / .exe (NSIS)