libdisplay_info/
displayid2.rs1use std::marker::PhantomData;
6
7use libdisplay_info_derive::FFIFrom;
8
9use crate::{edid::ExtensionRef, ffi};
10
11pub struct DisplayId2<'ext> {
12 display_id: *const ffi::displayid2::di_displayid2,
13 phantom: PhantomData<&'ext ()>,
14}
15
16impl<'ext> DisplayId2<'ext> {
17 pub fn from_extension(extensions: &'ext ExtensionRef) -> Option<DisplayId2<'ext>> {
22 let display_id = unsafe { ffi::edid::di_edid_ext_get_displayid2(extensions.as_ptr()) };
23
24 if display_id.is_null() {
25 None
26 } else {
27 Some(Self {
28 display_id: display_id as *const ffi::displayid2::di_displayid2,
29 phantom: PhantomData,
30 })
31 }
32 }
33
34 pub fn revision(&self) -> i32 {
36 unsafe { ffi::displayid2::di_displayid2_get_revision(self.display_id) }
37 }
38
39 pub fn product_primary_use_case(&self) -> PrimaryUseCase {
41 PrimaryUseCase::from(unsafe {
42 ffi::displayid2::di_displayid2_get_product_primary_use_case(self.display_id)
43 })
44 }
45}
46
47#[derive(Debug, Clone, Copy, PartialEq, Eq, FFIFrom)]
49#[ffi(ffi::displayid2::di_displayid2_product_primary_use_case)]
50#[repr(u32)]
51pub enum PrimaryUseCase {
52 Extension = ffi::displayid2::di_displayid2_product_primary_use_case_DI_DISPLAYID2_PRODUCT_PRIMARY_USE_CASE_EXTENSION,
53 Test = ffi::displayid2::di_displayid2_product_primary_use_case_DI_DISPLAYID2_PRODUCT_PRIMARY_USE_CASE_TEST,
54 Generic = ffi::displayid2::di_displayid2_product_primary_use_case_DI_DISPLAYID2_PRODUCT_PRIMARY_USE_CASE_GENERIC,
55 TV = ffi::displayid2::di_displayid2_product_primary_use_case_DI_DISPLAYID2_PRODUCT_PRIMARY_USE_CASE_TV,
56 DesktopProductivity = ffi::displayid2::di_displayid2_product_primary_use_case_DI_DISPLAYID2_PRODUCT_PRIMARY_USE_CASE_DESKTOP_PRODUCTIVITY,
57 DesktopGaming = ffi::displayid2::di_displayid2_product_primary_use_case_DI_DISPLAYID2_PRODUCT_PRIMARY_USE_CASE_DESKTOP_GAMING,
58 Presentation = ffi::displayid2::di_displayid2_product_primary_use_case_DI_DISPLAYID2_PRODUCT_PRIMARY_USE_CASE_PRESENTATION,
59 HMDVR = ffi::displayid2::di_displayid2_product_primary_use_case_DI_DISPLAYID2_PRODUCT_PRIMARY_USE_CASE_HMD_VR,
60 HMDAR = ffi::displayid2::di_displayid2_product_primary_use_case_DI_DISPLAYID2_PRODUCT_PRIMARY_USE_CASE_HMD_AR,
61}