Vyntek
使用指南

示例(M6 入口)

本页为使用指南(无规格 ID);场景规格见 examples-scenarios(TC019)。示例索引见 示例。

实现边界:算法未实现。Run 成功不等于工具已算完——passthrough 是注册表契约夹具,基类 Tool::Run 只报 NotImplemented,而空工具组的 Run 仍可返回 Succeeded。

1. 示例清单

VYNTEK_BUILD_EXAMPLES=ON 时构建四个可执行(每个都是独立目标,产物同进 build/<preset>/bin/)。逐页说明见 示例。

文件作用
examples/headless_run.cpp入口 main():公开头建组 → 跑一次 → 停两端。相机接线已拆出到下两行文件
examples/headless_camera.hpp宿主侧相机接线声明(DEBT-IMG-004 宿主接线示范):ArmCamera / WireToolWorkHook / StopCameraExplicitly
examples/headless_camera.cpp上述三函数实现;错误码 6/7/8/9 与拆分前 headless_run.cpp 一致
examples/gray_mean_tool.cpp双工具串联:image_load(cv::imread 收图 → Copy 发 ImageGray8 句柄)→ Link → gray_mean(cv::mean 求均值);客户直链 opencv_world 的写法示范,需 VYNTEK_WITH_OPENCV=ON
examples/quota_ledger_demo.cppTC010 跨层配额总账:打印各层读数,4 轮启停验证字节平台与回基线
examples/serialize_roundtrip.cpp.avtg Save → Load 往返,校验工具数与顺序
examples/CMakeLists.txt四个 add_executable,统一 vyntek_example() 设置(输出目录 / C++17 / 警告);gray_mean_demo 额外链接 opencv_world(OFF 时跳过),其余链接 Vyntek::toolgroup 或 Vyntek::imaging

公开头用到的面:vyntek.h(版本)、toolgroup/registry.hpp(ToolRegistry::RegisterBuiltinTools / Create)、toolgroup/toolgroup.hpp(ToolGroup::Create / AddTool)、toolgroup/run_session.hpp(Run / GetOutput / RequestCancel / SetToolWorkDoneHook)、imaging/acquisition_session.hpp(Arm / Start / RequestStop / WaitStop)。

2. 构建

cmake --preset ninja-debug-all
cmake --build --preset ninja-debug-all --target headless_run

ninja-debug-all = tests + examples 联编(VYNTEK_BUILD_TESTS=ON + VYNTEK_BUILD_EXAMPLES=ON)。旧命令 cmake --preset ninja-debug -DVYNTEK_BUILD_EXAMPLES=ON 仍可用(VYNTEK_BUILD_EXAMPLES 默认 OFF,见根 CMakeLists.txt)。

3. 运行

产物:build/ninja-debug-all/bin/headless_run.exe(Windows)或 build/ninja-debug-all/bin/headless_run(Linux / macOS)。

vyntek 0.1.0 (commit <sha>)
headless_run ok

逐步行为与退出码(以源码为准;0 = 成功):

码触发点
0全部步骤通过,打印 headless_run ok
1ToolGroup::Create("headless") 返回空
2registry.Create("passthrough", "t1") 或 group->AddTool(...) 失败
3RunSession::Run() 结果不是 Succeeded
4session.GetOutput("t1.out") 非空——stub 必须仍为空(GetOutput 不是 KeepLatest 保留)
5RequestCancel() 后 cancel_requested() 未置位
6AcquisitionSession::Arm / Start 失败(headless::ArmCamera)
7Run 结束后采集端已不是 Running——工具工作钩不得自动停相机(M3-07 / TC-SESS-05)
8stop_progress().tool_work_done 为 false——Run 返回后工具工作必须已上报完成
9显式 RequestStop + WaitStop(StopTimeout{1000}) 未到达 Stopped

4. 示例实际钉住的语义

  • 注册表 → 组 → 会话最小闭环:RegisterBuiltinTools() 后 Create("passthrough", "t1"),AddTool 接管所有权。
  • 两端停止互不触碰:RunSession 不调 AcquisitionSession::RequestStop,采集端也不 RequestCancel 编排;钩子只把 SetToolWorkDone(bool) 送到采集端,显式停流是宿主的事(退出码 7/8/9 就是这条契约的断言)。
  • GetOutput ≠ 观察保留:GetOutput("t1.out") 返回空串;真正的 KeepLatest 保留语义在 toolgroup/output_inspector.hpp(output-inspection)。

5. 不覆盖(勿当成已验收)

  • serialize_roundtrip 只覆盖 Save→Load 往返与工具顺序;schema 门禁、未知 type_id、字段保真仍走 test-contracts TC-SER-* 与 tests/contracts_serialize.cpp。
  • 不接真实相机 SDK:AcquisitionSession 是骨架,无供应商适配器与归还泵压力(TC-ACQ 未关)。
  • 无渲染、无 ImageDisplay、无 C#:显示只在 C# Controls 轨(image-display)。
  • 无多工具链 / 嵌套 / 取消矩阵:那些走 tests/orchestration_contracts.cpp(编排契约)。
  • 有头 ≠ 验收完成:示例通过不代表任何 TC-* 勾选。

6. 场景与验证

场景目录:examples-scenarios(S01–S13,未验收;文末「实现现状」表把每个场景映射到本仓对应代码)。路线:validation-and-roadmap。测试去留:test-value-and-lifecycle。契约全文:test-contracts。

On this page