7#include <etl/singleton.h>
42 if (!result.has_value()) {
43 klog::Err(
"DeviceManager: bus '{}' enumeration failed: {}", B::GetName(),
44 result.error().message());
45 return std::unexpected(result.error());
48 size_t count = result.value();
49 for (
size_t i = 0; i < count; ++i) {
58 klog::Info(
"DeviceManager: bus '{}' enumerated {} device(s)", B::GetName(),
89 size_t max) -> size_t;
115 etl::flat_map<const char*, size_t, kMaxDevices, CStrLess>
name_index_;
static constexpr size_t kMaxDevices
auto FindDevicesByType(DeviceType type, DeviceNode **out, size_t max) -> size_t
按类型枚举设备。
auto operator=(DeviceManager &&) -> DeviceManager &=delete
auto FindDevice(const char *name) -> Expected< DeviceNode * >
根据名称查找设备。
etl::flat_map< const char *, size_t, kMaxDevices, CStrLess > name_index_
DeviceNode devices_[kMaxDevices]
auto operator=(const DeviceManager &) -> DeviceManager &=delete
auto ProbeAll() -> Expected< void >
匹配已注册的驱动程序并探测所有未绑定的设备。
DeviceManager(DeviceManager &&)=delete
auto RegisterBus(B &bus) -> Expected< void >
注册总线并立即枚举其设备。
DeviceManager(const DeviceManager &)=delete
auto GetRegistry() -> DriverRegistry &
访问驱动注册表。
驱动注册表 — 以 ETL vector 存储 DriverEntry,并附带 flat_map 兼容索引。
etl::singleton< DeviceManager > DeviceManagerSingleton
std::expected< T, Error > Expected
std::expected 别名模板
auto Err(etl::format_string< Args... > fmt, Args &&... args) -> void
以 ERROR 级别记录日志
auto Info(etl::format_string< Args... > fmt, Args &&... args) -> void
以 INFO 级别记录日志
uint32_t dev_id
由 DeviceManager 分配的全局设备 ID
char name[32]
可读的设备名称(来自 FDT 节点名)