From 2d27dd3d644c4050af44dc96e27abf709b996bbb Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Mon, 14 Jul 2025 16:52:35 +0200 Subject: [PATCH] head-management: add brightness-setter-v1 extension --- src/ifs/head_management.rs | 1 + .../head_management/head_management_macros.rs | 1 + src/ifs/head_management/jay_head_ext.rs | 1 + .../jay_head_ext_brightness_setter_v1.rs | 41 +++++++++++++++++++ .../jay_head_manager_session_v1.rs | 11 +++++ wire/jay_head_ext_brightness_setter_v1.txt | 11 +++++ ..._head_manager_ext_brightness_setter_v1.txt | 7 ++++ 7 files changed, 73 insertions(+) create mode 100644 src/ifs/head_management/jay_head_ext/jay_head_ext_brightness_setter_v1.rs create mode 100644 wire/jay_head_ext_brightness_setter_v1.txt create mode 100644 wire/jay_head_manager_ext_brightness_setter_v1.txt diff --git a/src/ifs/head_management.rs b/src/ifs/head_management.rs index 93facc4e..fbb30b70 100644 --- a/src/ifs/head_management.rs +++ b/src/ifs/head_management.rs @@ -134,6 +134,7 @@ enum HeadOp { SetFormat(&'static Format), SetTransferFunction(BackendTransferFunction), SetColorSpace(BackendColorSpace), + SetBrightness(Option), } #[derive(Copy, Clone, Debug, Eq, PartialEq, Default)] diff --git a/src/ifs/head_management/head_management_macros.rs b/src/ifs/head_management/head_management_macros.rs index 6c13a37c..8168e846 100644 --- a/src/ifs/head_management/head_management_macros.rs +++ b/src/ifs/head_management/head_management_macros.rs @@ -411,4 +411,5 @@ declare_extensions! { format_setter_v1: FormatSetterV1, drm_color_space_setter_v1: DrmColorSpaceSetterV1, brightness_info_v1: BrightnessInfoV1, + brightness_setter_v1: BrightnessSetterV1, } diff --git a/src/ifs/head_management/jay_head_ext.rs b/src/ifs/head_management/jay_head_ext.rs index 0f797e1e..d672e75f 100644 --- a/src/ifs/head_management/jay_head_ext.rs +++ b/src/ifs/head_management/jay_head_ext.rs @@ -1,4 +1,5 @@ pub(super) mod jay_head_ext_brightness_info_v1; +pub(super) mod jay_head_ext_brightness_setter_v1; pub(super) mod jay_head_ext_compositor_space_enabler_v1; pub(super) mod jay_head_ext_compositor_space_info_v1; pub(super) mod jay_head_ext_compositor_space_positioner_v1; diff --git a/src/ifs/head_management/jay_head_ext/jay_head_ext_brightness_setter_v1.rs b/src/ifs/head_management/jay_head_ext/jay_head_ext_brightness_setter_v1.rs new file mode 100644 index 00000000..309e9134 --- /dev/null +++ b/src/ifs/head_management/jay_head_ext/jay_head_ext_brightness_setter_v1.rs @@ -0,0 +1,41 @@ +use { + crate::{ + ifs::head_management::HeadOp, + wire::{ + jay_head_ext_brightness_setter_v1::{ + JayHeadExtBrightnessSetterV1RequestHandler, SetBrightness, UnsetBrightness, + }, + jay_head_manager_ext_brightness_setter_v1::JayHeadManagerExtBrightnessSetterV1RequestHandler, + }, + }, + std::rc::Rc, +}; + +impl_brightness_setter_v1! { + version = 1, +} + +impl JayHeadManagerExtBrightnessSetterV1RequestHandler for MgrName { + type Error = ErrorName; + + mgr_common_req!(); +} + +impl JayHeadExtBrightnessSetterV1RequestHandler for HeadName { + type Error = ErrorName; + + head_common_req!(); + + fn unset_brightness(&self, _req: UnsetBrightness, _slf: &Rc) -> Result<(), Self::Error> { + self.common.push_op(HeadOp::SetBrightness(None))?; + Ok(()) + } + + fn set_brightness(&self, req: SetBrightness, _slf: &Rc) -> Result<(), Self::Error> { + self.common + .push_op(HeadOp::SetBrightness(Some(f32::from_bits(req.lux) as f64)))?; + Ok(()) + } +} + +error!(); diff --git a/src/ifs/head_management/jay_head_manager_session_v1.rs b/src/ifs/head_management/jay_head_manager_session_v1.rs index 7fb77948..7053dfa4 100644 --- a/src/ifs/head_management/jay_head_manager_session_v1.rs +++ b/src/ifs/head_management/jay_head_manager_session_v1.rs @@ -459,6 +459,10 @@ impl JayHeadManagerSessionV1RequestHandler for JayHeadManagerSessionV1 { state.color_space = c; to_send |= DRM_COLOR_SPACE_INFO; } + HeadOp::SetBrightness(b) => { + state.brightness = b; + to_send |= BRIGHTNESS_INFO; + } } } if to_send.contains(CORE_INFO) @@ -517,6 +521,11 @@ impl JayHeadManagerSessionV1RequestHandler for JayHeadManagerSessionV1 { { i.send_state(state); } + if to_send.contains(BRIGHTNESS_INFO) + && let Some(i) = &head.ext.brightness_info_v1 + { + i.send_brightness(state); + } } slf.schedule_transaction_result(req.result, None)?; Ok(()) @@ -554,6 +563,7 @@ impl JayHeadManagerSessionV1RequestHandler for JayHeadManagerSessionV1 { node.update_transform(desired.transform); node.set_vrr_mode(VrrMode::from_config(desired.vrr_mode).unwrap()); node.set_tearing_mode(TearingMode::from_config(desired.tearing_mode).unwrap()); + node.set_brightness(desired.brightness); } else if let Some(mi) = &desired.monitor_info { let pos = &self.client.state.persistent_output_states; let pos = match pos.get(&mi.output_id) { @@ -579,6 +589,7 @@ impl JayHeadManagerSessionV1RequestHandler for JayHeadManagerSessionV1 { .set(VrrMode::from_config(desired.vrr_mode).unwrap()); pos.tearing_mode .set(TearingMode::from_config(desired.tearing_mode).unwrap()); + pos.brightness.set(desired.brightness); } } slf.schedule_transaction_result(req.result, None)?; diff --git a/wire/jay_head_ext_brightness_setter_v1.txt b/wire/jay_head_ext_brightness_setter_v1.txt new file mode 100644 index 00000000..99475121 --- /dev/null +++ b/wire/jay_head_ext_brightness_setter_v1.txt @@ -0,0 +1,11 @@ +request destroy (destructor) { + +} + +request unset_brightness { + +} + +request set_brightness { + lux: u32, +} diff --git a/wire/jay_head_manager_ext_brightness_setter_v1.txt b/wire/jay_head_manager_ext_brightness_setter_v1.txt new file mode 100644 index 00000000..ece58ce7 --- /dev/null +++ b/wire/jay_head_manager_ext_brightness_setter_v1.txt @@ -0,0 +1,7 @@ +request destroy (destructor) { + +} + +event head { + head: id(jay_head_ext_brightness_setter_v1) (new), +}