summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--examples/comprehensive22
-rw-r--r--examples/sleepmode128
3 files changed, 140 insertions, 12 deletions
diff --git a/Makefile b/Makefile
index b2cb455..719c5bd 100644
--- a/Makefile
+++ b/Makefile
@@ -29,7 +29,7 @@ FLAGS = $$($(PKGCONFIG) --cflags --libs $(LIBS)) -std=$(STD) $(WARN) $(OPTIMISE)
DATAFILES = 2deg 10deg redshift redshift_old
PYFILES = __main__.py colour.py curve.py monitor.py solar.py
-EXAMPLES = comprehensive
+EXAMPLES = comprehensive sleepmode
.PHONY: default
diff --git a/examples/comprehensive b/examples/comprehensive
index f033d27..5f6675c 100644
--- a/examples/comprehensive
+++ b/examples/comprehensive
@@ -10,7 +10,7 @@
# (KTH computer laboratories in this example.)
latitude, longitude = 59.3472, 18.0728
-# Custom dayness by time settings
+# Custom dayness by time settings.
time_alpha = [['02:00', 0], ['08:00', 1], ['22:00', 1]]
@@ -37,11 +37,11 @@ def by_time():
return 1 # Error in `time_alpha` (probably)
-# Keep uncomment to use solar position
+# Keep uncomment to use solar position.
get_dayness = lambda : sun(latitude, longitude)
-# Uncomment to use time of day
+# Uncomment to use time of day.
#get_dayness = by_time
-# Uncomment if you do not want continuous mode, high night values are used
+# Uncomment if you do not want continuous mode, high night values are used.
#get_dayness = None
@@ -158,13 +158,13 @@ def periodically(year, month, day, hour, minute, second, weekday, fade):
global last_dayness, wait_period
dayness = get_dayness()
- # Do not do unnecessary work
+ # Do not do unnecessary work.
if fade is None:
if dayness == last_dayness:
return
last_dayness = dayness
- # Help functions for colour interpolation
+ # Help functions for colour interpolation.
interpol = lambda _day, _night : _day[m % len(_day)] * dayness + _night[m % len(_night)] * (1 - dayness)
purify = lambda current, pure : current * alpha + pure * (1 - alpha)
@@ -226,7 +226,7 @@ def periodically(year, month, day, hour, minute, second, weekday, fade):
else:
randr(m)
- # Lets wait only 5 seconds, instead of a minute before running again
+ # Lets wait only 5 seconds, instead of a minute before running again.
wait_period = 10
@@ -253,12 +253,12 @@ def reset():
if get_dayness is not None:
- # Set transition time, 0 on high day and 5 seconds on high night
+ # Set transition time, 0 on high day and 5 seconds on high night.
fadein_time = 5 * (1 - get_dayness())
- # Do 10 changes per second
+ # Do 10 changes per second.
fadein_steps = fadein_time * 10
- # Transition on exit in the same way, calculated on exit
+ # Transition on exit in the same way, calculated on exit.
old_signal_SIGTERM = signal_SIGTERM
def signal_SIGTERM(signum, frame):
global fadeout_time, fadeout_steps
@@ -266,7 +266,7 @@ if get_dayness is not None:
fadeout_steps = fadeout_time * 10
old_signal_SIGTERM(signum, frame)
else:
- # Do not use continuous mode
+ # Do not use continuous mode.
get_dayness = lambda : 0
def apply(fade):
t = datetime.datetime.now()
diff --git a/examples/sleepmode b/examples/sleepmode
new file mode 100644
index 0000000..22138e5
--- /dev/null
+++ b/examples/sleepmode
@@ -0,0 +1,128 @@
+# -*- python -*-
+
+# This example graciously fades out the screen on start and
+# in on exit. It is a nice alternative to turning off the
+# monitor, just press Control+C when you wake up.
+
+
+# The (zero-based) index of the monitors (CRTC:s) to apply
+# settings to. An empty list means that all monitors are used,
+# but all monitors will have the same settings.
+monitors = []
+
+
+# These settings are lists. This is to allow you to use different
+# settings on different monitors. For example, `gamma_red = [1]`,
+# this means that the red gamma is 1 on all monitors. But if we
+# change this to `gamma_red = [1.0, 1.1]`, the first monitor will
+# have the red gamma set to 1,0 and the second monitor will have
+# the red gamma set to 1,1. If you have more monitors than used
+# in the settings modulo division will be used. For instance, if
+# you have four monitors, the third monitor will have the same
+# settings as the first monitor, and the fourth monitor will have
+# the same settings as the second monitor.
+
+# Gamma correction for the red, green and blue components, respectively.
+gamma_red, gamma_green, gamma_blue = [1], [1], [1]
+
+# The red, green and blue brightness, respectively.
+redness, greenness, blueness = [0.25], [0], [0]
+
+
+# Set fade time at start to 15 seconds.
+fadein_time = 15
+# Do 10 changes per second at start.
+fadein_steps = fadein_time * 10
+
+# Set fade time at exit to 30 seconds.
+fadeout_time = 30
+# Do 10 changes per second at end.
+fadeout_steps = fadeout_time * 10
+
+
+# During sleep mode the changes will occur so we update one every hour.
+wait_period = 60 * 60
+
+
+def periodically(year, month, day, hour, minute, second, weekday, fade):
+ '''
+ :(int, int, int, int, int, int, int, float?)?→void Place holder for periodically invoked function
+
+ 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,
+ the 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
+ '''
+ purity = 0 if fade is None else 1 - abs(fade)
+ for m in [0] if len(monitors) == 0 else monitors:
+ # Remove settings from last run.
+ start_over()
+
+ # Fade out the blue colours component, then the green
+ # colours component and lastly the blue colours component.
+ r = min(max(0, purity * 3 - 0), 1)
+ g = min(max(0, purity * 3 - 1), 1)
+ b = min(max(0, purity * 3 - 2), 1)
+ r = redness [m % len(redness)] * (1 - r) + purity
+ r = greenness[m % len(greenness)] * (1 - g) + purity
+ r = blueness [m % len(blueness)] * (1 - b) + purity
+ rgb_brightness(r, g, b)
+
+ # Flush settings to monitor.
+ r = gamma_red [m % len(gamma_red)]
+ g = gamma_green[m % len(gamma_green)]
+ b = gamma_blue [m % len(gamma_blue)]
+ gamma(r, g, b)
+
+ # Flush settings to monitor.
+ if len(monitors) == 0:
+ randr()
+ else:
+ randr(m)
+
+
+def reset():
+ '''
+ Invoked to reset the displays
+ '''
+ for m in [0] if len(monitors) == 0 else monitors:
+ # Remove settings from last run.
+ start_over()
+
+ # Apply gamma correction to monitor.
+ r = gamma_red [m % len(gamma_red)]
+ g = gamma_green[m % len(gamma_green)]
+ b = gamma_blue [m % len(gamma_blue)]
+ gamma(r, g, b)
+
+ # Flush settings to monitor.
+ if len(monitors) == 0:
+ randr()
+ else:
+ randr(m)
+