pub struct DeviceManager {
devices: Mutex<BTreeMap<usize, SharedDevice>>,
device_by_name: Mutex<BTreeMap<String, SharedDevice>>,
name_to_id: Mutex<BTreeMap<String, usize>>,
drivers: Mutex<BTreeMap<DriverPriority, Vec<Box<dyn DeviceDriver>>>>,
next_device_id: AtomicUsize,
}
Expand description
DeviceManager
This struct is the main device management system. It handles all devices and drivers with priority-based initialization.
§Fields
devices
: A mutex-protected map of all registered devices by ID.device_by_name
: A mutex-protected map of devices by name.name_to_id
: A mutex-protected map from device name to device ID.drivers
: A mutex-protected map of device drivers organized by priority.next_device_id
: Atomic counter for generating unique device IDs.
Fields§
§devices: Mutex<BTreeMap<usize, SharedDevice>>
§device_by_name: Mutex<BTreeMap<String, SharedDevice>>
§name_to_id: Mutex<BTreeMap<String, usize>>
§drivers: Mutex<BTreeMap<DriverPriority, Vec<Box<dyn DeviceDriver>>>>
§next_device_id: AtomicUsize
Implementations§
Source§impl DeviceManager
impl DeviceManager
const fn new() -> Self
pub fn get_manager() -> &'static DeviceManager
pub fn get_mut_manager() -> &'static mut DeviceManager
Sourcepub fn register_device(&self, device: Arc<dyn Device>) -> usize
pub fn register_device(&self, device: Arc<dyn Device>) -> usize
Sourcepub fn register_device_with_name(
&self,
name: String,
device: Arc<dyn Device>,
) -> usize
pub fn register_device_with_name( &self, name: String, device: Arc<dyn Device>, ) -> usize
Sourcepub fn get_device(&self, id: usize) -> Option<SharedDevice>
pub fn get_device(&self, id: usize) -> Option<SharedDevice>
Sourcepub fn get_device_by_name(&self, name: &str) -> Option<SharedDevice>
pub fn get_device_by_name(&self, name: &str) -> Option<SharedDevice>
Sourcepub fn get_device_id_by_name(&self, name: &str) -> Option<usize>
pub fn get_device_id_by_name(&self, name: &str) -> Option<usize>
Sourcepub fn get_devices_count(&self) -> usize
pub fn get_devices_count(&self) -> usize
Sourcepub fn get_first_device_by_type(&self, device_type: DeviceType) -> Option<usize>
pub fn get_first_device_by_type(&self, device_type: DeviceType) -> Option<usize>
Sourcepub fn get_named_devices(&self) -> Vec<(String, SharedDevice)>
pub fn get_named_devices(&self) -> Vec<(String, SharedDevice)>
Get all devices registered by name
Returns an iterator over (name, device) pairs for all devices that were registered with explicit names.
§Returns
Vector of (name, device) tuples
pub fn borrow_drivers( &self, ) -> &Mutex<BTreeMap<DriverPriority, Vec<Box<dyn DeviceDriver>>>>
Sourcepub fn populate_devices(&mut self)
pub fn populate_devices(&mut self)
Populates devices from the FDT (Flattened Device Tree).
This function searches for the /soc
node in the FDT and iterates through its children.
For each child node, it checks if there is a compatible driver registered.
If a matching driver is found, it probes the device using the driver’s probe
method.
If the probe is successful, the device is registered with the driver.
Sourcepub fn populate_devices_by_priority(
&mut self,
priorities: Option<&[DriverPriority]>,
)
pub fn populate_devices_by_priority( &mut self, priorities: Option<&[DriverPriority]>, )
Populate devices using drivers of specific priority levels
§Arguments
priorities
- Optional slice of priority levels to use. If None, uses all priorities in order.
Sourcepub fn register_driver(
&mut self,
driver: Box<dyn DeviceDriver>,
priority: DriverPriority,
)
pub fn register_driver( &mut self, driver: Box<dyn DeviceDriver>, priority: DriverPriority, )
Registers a device driver with the device manager.
This function takes a boxed device driver and adds it to the list of registered drivers at the specified priority level.
§Arguments
driver
- A boxed device driver that implements theDeviceDriver
trait.priority
- The priority level for this driver.
§Example
let driver = Box::new(MyDeviceDriver::new());
DeviceManager::get_mut_manager().register_driver(driver, DriverPriority::Standard);
Sourcepub fn register_driver_default(&mut self, driver: Box<dyn DeviceDriver>)
pub fn register_driver_default(&mut self, driver: Box<dyn DeviceDriver>)
Registers a device driver with default Standard priority.
This is a convenience method for backward compatibility.
§Arguments
driver
- A boxed device driver that implements theDeviceDriver
trait.