# -*- python -*- # This example demonstrates how to use adjust backlight # without interfering to much with manual adjustments. # The example with oscillate the backlight between 50 % # and 100 % but include any manual adjustments. # This file is dual-licensed under GNU General Public License # version 3 and GNU Free Documentation License version 1.3. # Copyright © 2014, 2015, 2016, 2017 Mattias Andrée (maandree@kth.se) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Copyright © 2014, 2015, 2016, 2017 Mattias Andrée (maandree@kth.se) # # Permission is granted to copy, distribute and/or modify this document # under the terms of the GNU Free Documentation License, Version 1.3 # or any later version published by the Free Software Foundation; # with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. # You should have received a copy of the GNU General Public License # along with this software package. If not, see . import math # Get backlight controller. controller = list_backlights()[0] controller = Backlight(controller, adjbacklight = True, minimum = 0) # `adjbacklight = True` requires the `adjbacklight` command/package # and lets us avoid hassling with permissions. # `minimum = 0` is optional. # The users brightness adjustment user_adjustment = controller.brightness / controller.maximum # Do not fade in or out, apply settings immediately. fadein_time, fadeout_time = None, None # Update the backlight ten times per second. wait_period = 0.1 cycle, adj, last = 0, 1, controller.brightness def periodically(year, month, day, hour, minute, second, weekday, fade): ''' Invoked periodically If you want to control at what to invoke this function next time you can set the value of the global variable `wait_period` to the number of seconds to wait before invoking this function again. The value does not need to be an integer. @param year:int The year @param month:int The month, 1 = January, 12 = December @param day:int The day, minimum value is 1, probable maximum value is 31 (*) @param hour:int The hour, minimum value is 0, maximum value is 23 @param minute:int The minute, minimum value is 0, maximum value is 59 @param second:int The second, minimum value is 0, probable maximum value is 60 (**) @param weekday:int The weekday, 1 = Monday, 7 = Sunday @param fade:float? Blueshift can use this function to fade into a state when it start or exits. `fade` can either be negative, zero or positive or `None`, but the magnitude of value cannot exceed 1. When Blueshift starts, this function will be invoked multiple with the time parameters of the time it is invoked and each time `fade` will increase towards 1, starting at 0, when the value is 1, the settings should be applied to 100 %. After this this function will be invoked once again with `fade` being `None`. When Blueshift exits the same behaviour is used except, `fade` decrease towards -1 but start slightly below 0, when -1 is reached all settings should be normal. Then Blueshift will NOT invoke this function with `fade` being `None`, instead it will by itself revert all settings and quit. (*) Can be exceeded if the calendar system is changed, like in 1712-(02)Feb-30 (**) See https://en.wikipedia.org/wiki/Leap_second ''' global cycle, adj, last, user_adjustment if not controller.brightness == last: user_adjustment = controller.brightness / (controller.maximum * adj) cycle = (cycle + 0.5) % 1 adj = (1 + math.cos(cycle * 2 * math.pi)) / 2 adj = (1 + adj) / 2 controller.brightness = adj * user_adjustment * controller.maximum last = controller.brightness def reset(): ''' Invoked to reset the displays ''' controller.brightness = round(user_adjustment * controller.maximum)