first commit
This commit is contained in:
commit
2d40952aab
5 changed files with 308 additions and 0 deletions
56
src/card.rs
Normal file
56
src/card.rs
Normal file
|
@ -0,0 +1,56 @@
|
|||
use drm::Device;
|
||||
use std::os::fd::{AsFd, BorrowedFd};
|
||||
use std::fmt::Debug;
|
||||
|
||||
// A simple wrapper for a device node.
|
||||
pub struct Card(std::fs::File);
|
||||
|
||||
/// Implementing [`AsFd`] is a prerequisite to implementing the traits found
|
||||
/// in this crate. Here, we are just calling [`File::as_fd()`] on the inner
|
||||
/// [`File`].
|
||||
impl AsFd for Card {
|
||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
||||
self.0.as_fd()
|
||||
}
|
||||
}
|
||||
|
||||
/// Simple helper methods for opening a `Card`.
|
||||
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(())
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue