@@ -24,6 +24,8 @@ pub(crate) trait BacklightDevice {
2424 fn name ( & self ) -> String ;
2525 fn set_brightness ( & mut self , percent : u8 ) -> anyhow:: Result < ( ) > ;
2626 fn get_brightness ( & self ) -> u8 ;
27+ fn turn_off ( & mut self ) -> anyhow:: Result < ( ) > ;
28+ fn turn_on ( & mut self ) -> anyhow:: Result < ( ) > ;
2729}
2830
2931pub ( crate ) fn auto_refresh_monitors_list ( ) -> ! {
@@ -164,6 +166,70 @@ pub(crate) fn decrease_brightness_percent(percent: u8) -> anyhow::Result<()> {
164166 }
165167}
166168
169+ pub ( crate ) fn turn_off ( ) -> anyhow:: Result < ( ) > {
170+ let mut last_error = None ;
171+
172+ for monitor in MONITORS . lock ( ) . unwrap ( ) . iter_mut ( ) {
173+ if let Err ( err) = monitor. turn_off ( ) {
174+ log:: error!( "Unable to turn OFF monitor: {err}" ) ;
175+ last_error = Some ( err) ;
176+ }
177+ }
178+
179+ if last_error. is_some ( ) {
180+ log:: info!( "Trying to refresh monitors list to fix the error and retry..." ) ;
181+ refresh_monitors_list ( ) ;
182+
183+ last_error = None ;
184+ for monitor in MONITORS . lock ( ) . unwrap ( ) . iter_mut ( ) {
185+ if let Err ( err) = monitor. turn_off ( ) {
186+ log:: error!( "Unable to turn OFF monitor: {err}" ) ;
187+ last_error = Some ( err) ;
188+ }
189+ }
190+
191+ if let Some ( err) = last_error {
192+ Err ( err)
193+ } else {
194+ Ok ( ( ) )
195+ }
196+ } else {
197+ Ok ( ( ) )
198+ }
199+ }
200+
201+ pub ( crate ) fn turn_on ( ) -> anyhow:: Result < ( ) > {
202+ let mut last_error = None ;
203+
204+ for monitor in MONITORS . lock ( ) . unwrap ( ) . iter_mut ( ) {
205+ if let Err ( err) = monitor. turn_on ( ) {
206+ log:: error!( "Unable to turn ON monitor: {err}" ) ;
207+ last_error = Some ( err) ;
208+ }
209+ }
210+
211+ if last_error. is_some ( ) {
212+ log:: info!( "Trying to refresh monitors list to fix the error and retry..." ) ;
213+ refresh_monitors_list ( ) ;
214+
215+ last_error = None ;
216+ for monitor in MONITORS . lock ( ) . unwrap ( ) . iter_mut ( ) {
217+ if let Err ( err) = monitor. turn_on ( ) {
218+ log:: error!( "Unable to turn ON monitor: {err}" ) ;
219+ last_error = Some ( err) ;
220+ }
221+ }
222+
223+ if let Some ( err) = last_error {
224+ Err ( err)
225+ } else {
226+ Ok ( ( ) )
227+ }
228+ } else {
229+ Ok ( ( ) )
230+ }
231+ }
232+
167233pub ( crate ) fn get_average_brightness ( ) -> u8 {
168234 let monitors = MONITORS . lock ( ) . unwrap ( ) ;
169235 let mut sum: usize = 0 ;
0 commit comments