video: move drm object ids into type crate
This commit is contained in:
parent
524836bef3
commit
902853955b
5 changed files with 82 additions and 65 deletions
|
|
@ -8,8 +8,9 @@ use {
|
||||||
drm_feedback::DrmFeedback,
|
drm_feedback::DrmFeedback,
|
||||||
format::Format,
|
format::Format,
|
||||||
gfx_api::{FdSync, GfxApi, GfxFramebuffer},
|
gfx_api::{FdSync, GfxApi, GfxFramebuffer},
|
||||||
video::drm::{ConnectorType, DrmConnector, DrmError, DrmVersion},
|
video::drm::{ConnectorType, DrmError, DrmVersion},
|
||||||
},
|
},
|
||||||
|
jay_video_types::drm::DrmConnector,
|
||||||
std::{
|
std::{
|
||||||
any::Any,
|
any::Any,
|
||||||
error::Error,
|
error::Error,
|
||||||
|
|
|
||||||
|
|
@ -21,17 +21,15 @@ use {
|
||||||
drm::sys::{
|
drm::sys::{
|
||||||
DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP, DRM_CAP_CURSOR_HEIGHT, DRM_CAP_CURSOR_WIDTH,
|
DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP, DRM_CAP_CURSOR_HEIGHT, DRM_CAP_CURSOR_WIDTH,
|
||||||
DRM_DISPLAY_MODE_LEN, DRM_MODE_ATOMIC_TEST_ONLY, DRM_MODE_FB_MODIFIERS,
|
DRM_DISPLAY_MODE_LEN, DRM_MODE_ATOMIC_TEST_ONLY, DRM_MODE_FB_MODIFIERS,
|
||||||
DRM_MODE_OBJECT_BLOB, DRM_MODE_OBJECT_CONNECTOR, DRM_MODE_OBJECT_CRTC,
|
FORMAT_BLOB_CURRENT, auth_magic, create_lease, drm_event,
|
||||||
DRM_MODE_OBJECT_ENCODER, DRM_MODE_OBJECT_FB, DRM_MODE_OBJECT_PLANE,
|
|
||||||
DRM_MODE_OBJECT_PROPERTY, FORMAT_BLOB_CURRENT, auth_magic, create_lease, drm_event,
|
|
||||||
drm_event_crtc_sequence, drm_event_vblank, drm_format_modifier,
|
drm_event_crtc_sequence, drm_event_vblank, drm_format_modifier,
|
||||||
drm_format_modifier_blob, drop_master, gem_close, get_cap,
|
drm_format_modifier_blob, drop_master, gem_close, get_cap, get_device_name_from_fd2,
|
||||||
get_device_name_from_fd2, get_minor_name_from_fd, get_node_type_from_fd, get_nodes,
|
get_minor_name_from_fd, get_node_type_from_fd, get_nodes, get_version, mode_addfb2,
|
||||||
get_version, mode_addfb2, mode_atomic, mode_create_blob, mode_destroy_blob,
|
mode_atomic, mode_create_blob, mode_destroy_blob, mode_get_resources,
|
||||||
mode_get_resources, mode_getconnector, mode_getencoder, mode_getplane,
|
mode_getconnector, mode_getencoder, mode_getplane, mode_getplaneresources,
|
||||||
mode_getplaneresources, mode_getprobblob, mode_getproperty, mode_obj_getproperties,
|
mode_getprobblob, mode_getproperty, mode_obj_getproperties, mode_rmfb,
|
||||||
mode_rmfb, mode_supports_get_resources, prime_fd_to_handle, queue_sequence,
|
mode_supports_get_resources, prime_fd_to_handle, queue_sequence, revoke_lease,
|
||||||
revoke_lease, set_client_cap,
|
set_client_cap,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -51,6 +49,9 @@ use {
|
||||||
};
|
};
|
||||||
pub use {
|
pub use {
|
||||||
consts::*,
|
consts::*,
|
||||||
|
jay_video_types::drm::{
|
||||||
|
DrmBlob, DrmConnector, DrmCrtc, DrmEncoder, DrmFb, DrmObject, DrmPlane, DrmProperty,
|
||||||
|
},
|
||||||
sys::{
|
sys::{
|
||||||
DRM_CLIENT_CAP_ATOMIC, DRM_MODE_ATOMIC_ALLOW_MODESET, DRM_MODE_ATOMIC_NONBLOCK,
|
DRM_CLIENT_CAP_ATOMIC, DRM_MODE_ATOMIC_ALLOW_MODESET, DRM_MODE_ATOMIC_NONBLOCK,
|
||||||
DRM_MODE_PAGE_FLIP_ASYNC, DRM_MODE_PAGE_FLIP_EVENT, drm_mode_modeinfo,
|
DRM_MODE_PAGE_FLIP_ASYNC, DRM_MODE_PAGE_FLIP_EVENT, drm_mode_modeinfo,
|
||||||
|
|
@ -719,46 +720,6 @@ pub struct DrmPropertyValue {
|
||||||
pub value: u64,
|
pub value: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait DrmObject {
|
|
||||||
const TYPE: u32;
|
|
||||||
const NONE: Self;
|
|
||||||
fn id(&self) -> u32;
|
|
||||||
fn is_some(&self) -> bool;
|
|
||||||
fn is_none(&self) -> bool;
|
|
||||||
}
|
|
||||||
|
|
||||||
macro_rules! drm_obj {
|
|
||||||
($name:ident, $ty:expr) => {
|
|
||||||
#[repr(transparent)]
|
|
||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Ord, PartialOrd)]
|
|
||||||
pub struct $name(pub u32);
|
|
||||||
|
|
||||||
impl DrmObject for $name {
|
|
||||||
const TYPE: u32 = $ty;
|
|
||||||
const NONE: Self = Self(0);
|
|
||||||
|
|
||||||
fn id(&self) -> u32 {
|
|
||||||
self.0
|
|
||||||
}
|
|
||||||
|
|
||||||
fn is_some(&self) -> bool {
|
|
||||||
self.0 != 0
|
|
||||||
}
|
|
||||||
|
|
||||||
fn is_none(&self) -> bool {
|
|
||||||
self.0 == 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
drm_obj!(DrmCrtc, DRM_MODE_OBJECT_CRTC);
|
|
||||||
drm_obj!(DrmConnector, DRM_MODE_OBJECT_CONNECTOR);
|
|
||||||
drm_obj!(DrmEncoder, DRM_MODE_OBJECT_ENCODER);
|
|
||||||
drm_obj!(DrmProperty, DRM_MODE_OBJECT_PROPERTY);
|
|
||||||
drm_obj!(DrmFb, DRM_MODE_OBJECT_FB);
|
|
||||||
drm_obj!(DrmBlob, DRM_MODE_OBJECT_BLOB);
|
|
||||||
drm_obj!(DrmPlane, DRM_MODE_OBJECT_PLANE);
|
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct DrmCardResources {
|
pub struct DrmCardResources {
|
||||||
pub _min_width: u32,
|
pub _min_width: u32,
|
||||||
|
|
@ -1115,15 +1076,28 @@ num!(i64);
|
||||||
num!(u64);
|
num!(u64);
|
||||||
num!(bool);
|
num!(bool);
|
||||||
|
|
||||||
impl<T> ObjectChangeValue for T
|
macro_rules! drm_object_value {
|
||||||
where
|
($($ty:ty,)*) => {
|
||||||
T: DrmObject,
|
$(
|
||||||
{
|
impl ObjectChangeValue for $ty {
|
||||||
fn into_u64(self) -> u64 {
|
fn into_u64(self) -> u64 {
|
||||||
self.id() as u64
|
self.id() as u64
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
)*
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drm_object_value!(
|
||||||
|
DrmBlob,
|
||||||
|
DrmConnector,
|
||||||
|
DrmCrtc,
|
||||||
|
DrmEncoder,
|
||||||
|
DrmFb,
|
||||||
|
DrmPlane,
|
||||||
|
DrmProperty,
|
||||||
|
);
|
||||||
|
|
||||||
#[expect(non_camel_case_types)]
|
#[expect(non_camel_case_types)]
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
pub enum ConnectorType {
|
pub enum ConnectorType {
|
||||||
|
|
|
||||||
|
|
@ -408,13 +408,6 @@ pub fn mode_obj_getproperties(
|
||||||
Ok(props)
|
Ok(props)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const DRM_MODE_OBJECT_CRTC: u32 = 0xcccccccc;
|
|
||||||
pub const DRM_MODE_OBJECT_CONNECTOR: u32 = 0xc0c0c0c0;
|
|
||||||
pub const DRM_MODE_OBJECT_ENCODER: u32 = 0xe0e0e0e0;
|
|
||||||
pub const DRM_MODE_OBJECT_PROPERTY: u32 = 0xb0b0b0b0;
|
|
||||||
pub const DRM_MODE_OBJECT_FB: u32 = 0xfbfbfbfb;
|
|
||||||
pub const DRM_MODE_OBJECT_BLOB: u32 = 0xbbbbbbbb;
|
|
||||||
pub const DRM_MODE_OBJECT_PLANE: u32 = 0xeeeeeeee;
|
|
||||||
#[expect(dead_code)]
|
#[expect(dead_code)]
|
||||||
pub const DRM_MODE_OBJECT_ANY: u32 = 0;
|
pub const DRM_MODE_OBJECT_ANY: u32 = 0;
|
||||||
|
|
||||||
|
|
|
||||||
48
video-types/src/drm.rs
Normal file
48
video-types/src/drm.rs
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
pub const DRM_MODE_OBJECT_CRTC: u32 = 0xcccccccc;
|
||||||
|
pub const DRM_MODE_OBJECT_CONNECTOR: u32 = 0xc0c0c0c0;
|
||||||
|
pub const DRM_MODE_OBJECT_ENCODER: u32 = 0xe0e0e0e0;
|
||||||
|
pub const DRM_MODE_OBJECT_PROPERTY: u32 = 0xb0b0b0b0;
|
||||||
|
pub const DRM_MODE_OBJECT_FB: u32 = 0xfbfbfbfb;
|
||||||
|
pub const DRM_MODE_OBJECT_BLOB: u32 = 0xbbbbbbbb;
|
||||||
|
pub const DRM_MODE_OBJECT_PLANE: u32 = 0xeeeeeeee;
|
||||||
|
|
||||||
|
pub trait DrmObject {
|
||||||
|
const TYPE: u32;
|
||||||
|
const NONE: Self;
|
||||||
|
fn id(&self) -> u32;
|
||||||
|
fn is_some(&self) -> bool;
|
||||||
|
fn is_none(&self) -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! drm_obj {
|
||||||
|
($name:ident, $ty:expr) => {
|
||||||
|
#[repr(transparent)]
|
||||||
|
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Ord, PartialOrd)]
|
||||||
|
pub struct $name(pub u32);
|
||||||
|
|
||||||
|
impl DrmObject for $name {
|
||||||
|
const TYPE: u32 = $ty;
|
||||||
|
const NONE: Self = Self(0);
|
||||||
|
|
||||||
|
fn id(&self) -> u32 {
|
||||||
|
self.0
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_some(&self) -> bool {
|
||||||
|
self.0 != 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_none(&self) -> bool {
|
||||||
|
self.0 == 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
drm_obj!(DrmCrtc, DRM_MODE_OBJECT_CRTC);
|
||||||
|
drm_obj!(DrmConnector, DRM_MODE_OBJECT_CONNECTOR);
|
||||||
|
drm_obj!(DrmEncoder, DRM_MODE_OBJECT_ENCODER);
|
||||||
|
drm_obj!(DrmProperty, DRM_MODE_OBJECT_PROPERTY);
|
||||||
|
drm_obj!(DrmFb, DRM_MODE_OBJECT_FB);
|
||||||
|
drm_obj!(DrmBlob, DRM_MODE_OBJECT_BLOB);
|
||||||
|
drm_obj!(DrmPlane, DRM_MODE_OBJECT_PLANE);
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
pub mod drm;
|
||||||
pub mod dmabuf;
|
pub mod dmabuf;
|
||||||
|
|
||||||
pub type Modifier = u64;
|
pub type Modifier = u64;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue