Skip to content

为每个控制器创建独立 D-Bus 对象并暴露启用状态 #6

Description

@sanchuanhehe

What to build

从固定 slk0 对象改为按内核实际 controller registry 动态创建和移除 adapter D-Bus 对象,并明确区分 source registered、product enabled 与 runtime available。

每个对象拥有独立状态、事件订阅、设备列表、安全上下文、Profile 注册范围与 PHY policy;controller id 是内核、libsparklink、slkd 和 D-Bus 之间的稳定路由键。产品或 package 包含代码,不能被当成硬件存在或能力已启用。

State model

  • Supported:当前安装的内核和用户态版本具备 SparkLink Module。
  • Enabled:发行版、产品配置或管理员 policy 允许启动该能力。
  • Available:Controller Backend 真实 probe、channel open 和初始化成功。
  • Powered:已上电并可接受管理操作。

这些状态必须独立变化并可观察。不能复制 OpenHarmony 通用 HDI 中 CheckOnBoardState 硬编码 true 的做法。

Acceptance criteria

  • 启动时枚举所有真实 controller,并创建 /org/sparklink/adapterN 及其子 Interface。
  • Manager 和 Adapter 明确暴露 Supported、Enabled、Available、Powered 或等价状态及状态变化 signal。
  • 禁用产品 policy 时不打开 DLI channel、不启动扫描广播,也不把已编译 Module 报告为 operational。
  • 缺少 vendor Adapter、probe 失败、channel open 失败或 initialization timeout 会报告 unavailable,并保留可诊断原因。
  • hotplug 会原子地创建或移除对象;不会重用仍被客户端引用的 identity。
  • 所有事件按 controller id 更新正确对象,不依赖全局 active controller。
  • Connect、Security、ServiceManager、SSAP、PHY 与 Controller 调用显式路由到对象所属 controller,且只在 enabled/available 状态执行。
  • 一个 controller 故障或 reset 不会阻塞其他 controller 的 D-Bus 方法。
  • 双 controller 集成测试覆盖并行扫描与广播、同地址设备、单侧 hotplug、独立 Bond、product disable/enable 和 vendor Adapter 缺失。
  • 保留 slk0 兼容别名时,文档说明选择规则、弃用周期和歧义错误。

Reference evidence

OpenHarmony 的 productdefine PR 1133 只注册 drivers_peripheral_nearlink 与 drivers_interface_nearlink;nearlink_service 仍需具体产品 config 单独加入,并设置 const.nearlink.enable=1。这说明 source registration、product enable 与 runtime hardware presence 是不同事实。

Blocked by

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