ss-new-driver

GitHub

用于在 Serial Studio 项目中生成新的 I/O 驱动骨架代码。指导 Agent 遵循参考实现,完成类继承、纯虚函数实现、枚举注册、构建配置及 QML UI 集成等全链路修改,确保新总线/传输协议正确接入系统。

.claude/skills/ss-new-driver/SKILL.md Serial-Studio/Serial-Studio

Trigger Scenarios

添加新的数据源支持 实现新的总线或传输协议驱动 为新硬件接口创建驱动

Install

npx skills add Serial-Studio/Serial-Studio --skill ss-new-driver -g -y
More Options

Non-standard path

npx skills add https://github.com/Serial-Studio/Serial-Studio/tree/master/.claude/skills/ss-new-driver -g -y

Use without installing

npx skills use Serial-Studio/Serial-Studio@ss-new-driver

指定 Agent (Claude Code)

npx skills add Serial-Studio/Serial-Studio --skill ss-new-driver -a claude-code -g -y

安装 repo 全部 skill

npx skills add Serial-Studio/Serial-Studio --all -g -y

预览 repo 内 skill

npx skills add Serial-Studio/Serial-Studio --list

SKILL.md

Frontmatter
{
    "name": "ss-new-driver",
    "description": "Scaffold a new Serial Studio I\/O driver (a new data source under core\/Devices\/IO\/Drivers\/). Use when adding support for a new bus\/transport — e.g. \"add a <X> driver\", \"support reading from <Y>\", \"new data source\". Encodes the canonical driver pattern and every registration touch-point so the new driver actually shows up in the UI, CLI, and connection manager.",
    "argument-hint": "[DriverName]"
}

Serial Studio — new I/O driver

Before writing anything, read core/Devices/IO/Drivers/BluetoothLE.h and BluetoothLE.cpp in full. They are the canonical reference for the driver contract — match their structure, signal/slot wiring, and driverProperties() shape rather than inventing a new layout. After the read, restate the driver contract in chat in 2-3 sentences (pure virtuals, publish path, timestamp-at-boundary) before scaffolding — a contract you've just named is one the new code follows, not one it drifts from (doc/claude/j-space.md).

A driver subclasses IO::HAL_Driver (core/Core/IO/HAL_Driver.h) and must implement the pure virtuals: close, isOpen, isReadable, isWritable, configurationOk, write, open, driverProperties, and setDriverProperty. Also consider the non-pure virtuals with default bodies — deviceIdentifier(), selectByIdentifier(), applyConnectionSettings() — which drive device selection and reconnection. Received bytes are published via publishReceivedData(...) — stamp the timestamp at the driver boundary (source owns time; see [ss-hotpath]). Never re-stamp downstream.

Touch-points to wire (verify each against an existing driver)

  1. core/Devices/IO/Drivers/<Name>.h / .cpp — the driver class, SPDX header, .h ordering rules.
  2. core/Core/SerialStudio.h — add the value to the BusType enum (QML uses SerialStudio.BusType.*, never integer literals).
  3. core/Devices/IO/ConnectionManager.{h,cpp} — accessor (e.g. network() / uart() analogue) plus signal forwarding; the bus lookups live in ConnectionManager/DriverUiRegistry.cpp (forBusType()) and the live-instance switch in ConnectionManager/DriverFactory.cpp (DriverFactory::create(), spec 0070). Update both.
  4. core/Devices/CMakeLists.txt — add IO/Drivers/<Name>.cpp to the source list (sources are listed explicitly, not globbed; commercial drivers go in the guarded if(BUILD_COMMERCIAL) block).
  5. QML configuration UI — the driver panes are bespoke forms (only the Project Editor renders driverProperties() generically; a row one mode does not use stays in the list and carries a visibleWhen rule, never a conditional append, because the list is also what a project persists): create app/qml/MainWindow/Panes/SetupPanes/Drivers/<Name>.qml, add its Loader to the StackLayout in SetupPanes/Hardware.qml at the bus's enum position (the layout indexes by Cpp_IO_Manager.busType), and register the new .qml in the QML_SOURCES list in app/CMakeLists.txt.
  6. core/Core/EnumLabels.cpp — add the bus to the busTypeSlug() and busTypeLabel() switches (the API's string names for the bus; commercial buses go inside the #ifdef BUILD_COMMERCIAL block).
  7. core/Ui/ProjectEditor/ProjectEditorIcons.h — add the bus to the busTypeIcon() switch, and core/Ui/ProjectEditor/EditorForms.cpp — add it to the busTypes combobox list in the source form model.
  8. Icon — add the driver SVG under app/rcc/icons/devices/<tier>/ (16/24/32) and register it with a <file> entry in app/rcc/rcc.qrc (busTypeIcon() returns its qrc:/ path).
  9. CLI (optional) — if it should be launchable headless, add options in app/src/Misc/CLI.{h,cpp} following the existing setupUartConnection / setupTcpConnection pattern.
  10. tests/utils/api_client.py (optional) — add the bus to bus_map if integration tests should reach it via io.setBusType (known drift: mqtt is missing from it today).

The list above drifts as the app grows. Before declaring done, grep a recently added bus value (e.g. grep -rn "BusType::HidDevice" app/src core) and mirror every switch/list it appears in.

Rules

  • This is a multi-file change (>3 files): state the plan and get confirmation before executing.
  • Follow doc/claude/code-style.md (header ordering, [[nodiscard]], no in-header member init, Q_EMIT not emit, Christmas-tree ordering).
  • Run python scripts/code-verify.py --check on the new files before handoff.
  • Do not build or run the app — leave compilation and runtime testing to the developer.

Version History

  • 44c9452 Current 2026-09-22 22:28

    重构核心模块层级结构,将共享代码下沉至 SerialStudioCore,引入严格分层验证机制,更新技能文档以适配新的目录树和依赖关系。

  • 615dff9 2026-08-28 20:00
  • cb2f5d2 2026-08-20 08:59

Same Skill Collection

.claude/skills/qt-cpp-review/SKILL.md
.claude/skills/qt-qml-review/SKILL.md
.claude/skills/ss-ai-audit/SKILL.md
.claude/skills/ss-hotpath/SKILL.md
.claude/skills/ss-implement/SKILL.md
.claude/skills/ss-log-mistake/SKILL.md
.claude/skills/ss-plan/SKILL.md
.claude/skills/ss-spec/SKILL.md
.claude/skills/ss-tasks/SKILL.md
.claude/skills/ss-verify/SKILL.md
.claude/skills/cpp-compiler-flags/SKILL.md
.claude/skills/qt-qml/SKILL.md
.claude/skills/ss-cpp-modern/SKILL.md
.claude/skills/ss-docs/SKILL.md

Metadata

Files
0
Version
89a23c2
Hash
24c710f8
Indexed
2026-08-20 08:59

Accueil - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-10-31 22:43
浙ICP备14020137号-1