54 lines
2.5 KiB
Rust
54 lines
2.5 KiB
Rust
use drm::Device;
|
|
use drm::control::Device as ControlDevice;
|
|
use std::os::fd::{AsFd, BorrowedFd};
|
|
use std::fmt::Debug;
|
|
|
|
pub struct Card(std::fs::File);
|
|
|
|
impl AsFd for Card {
|
|
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
self.0.as_fd()
|
|
}
|
|
}
|
|
|
|
impl Card {
|
|
pub fn open(path: &str) -> anyhow::Result<Self> {
|
|
let mut options = std::fs::OpenOptions::new();
|
|
options.read(true);
|
|
options.write(true);
|
|
|
|
let file = options.open(path)?;
|
|
|
|
Ok(Card(file))
|
|
}
|
|
}
|
|
|
|
impl drm::Device for Card {}
|
|
|
|
impl Debug for Card {
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
writeln!(f, "Driver version: {:?}\n", self.get_driver())?;
|
|
writeln!(f, "BUS ID: {:?}\n", self.get_bus_id())?;
|
|
|
|
writeln!(f, "Driver capatibilities:")?;
|
|
writeln!(f, "\tDumpBuffer: {:?}", self.get_driver_capability(drm::DriverCapability::DumbBuffer).ok())?;
|
|
writeln!(f, "\tVBlankHighCRTC: {:?}", self.get_driver_capability(drm::DriverCapability::VBlankHighCRTC).ok())?;
|
|
writeln!(f, "\tDumbPreferredDepth: {:?}", self.get_driver_capability(drm::DriverCapability::DumbPreferredDepth).ok())?;
|
|
writeln!(f, "\tDumbPreferShadow: {:?}", self.get_driver_capability(drm::DriverCapability::DumbPreferShadow).ok())?;
|
|
writeln!(f, "\tPrime: {:?}", self.get_driver_capability(drm::DriverCapability::Prime).ok())?;
|
|
writeln!(f, "\tMonotonicTimestamp: {:?}", self.get_driver_capability(drm::DriverCapability::MonotonicTimestamp).ok())?;
|
|
writeln!(f, "\tASyncPageFlip: {:?}", self.get_driver_capability(drm::DriverCapability::ASyncPageFlip).ok())?;
|
|
writeln!(f, "\tAtomicASyncPageFlip: {:?}", self.get_driver_capability(drm::DriverCapability::AtomicASyncPageFlip).ok())?;
|
|
writeln!(f, "\tCursorWidth: {:?}", self.get_driver_capability(drm::DriverCapability::CursorWidth).ok())?;
|
|
writeln!(f, "\tCursorHeight: {:?}", self.get_driver_capability(drm::DriverCapability::CursorHeight).ok())?;
|
|
writeln!(f, "\tAddFB2Modifiers: {:?}", self.get_driver_capability(drm::DriverCapability::AddFB2Modifiers).ok())?;
|
|
writeln!(f, "\tPageFlipTarget: {:?}", self.get_driver_capability(drm::DriverCapability::PageFlipTarget).ok())?;
|
|
writeln!(f, "\tCRTCInVBlankEvent: {:?}", self.get_driver_capability(drm::DriverCapability::CRTCInVBlankEvent).ok())?;
|
|
writeln!(f, "\tSyncObj: {:?}", self.get_driver_capability(drm::DriverCapability::SyncObj).ok())?;
|
|
writeln!(f, "\tTimelineSyncObj: {:?}", self.get_driver_capability(drm::DriverCapability::TimelineSyncObj).ok())?;
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl ControlDevice for Card {}
|