drm_test/src/card.rs

59 lines
2.7 KiB
Rust

use drm::Device;
use drm::control::Device as ControlDevice;
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(())
}
}
impl ControlDevice for Card {}