1#!/bin/sh
2
3CONTROL_MAX=100
4SENSOR_MAX=255
5ADJUSTMENT=30
6DEBUG=0
7
8update_brightness()
9(
10	BRIGHTNESS_RIGHT=$(( `sysctl -n dev.asmc.0.light.right` ))
11	BRIGHTNESS_LEFT=$(( `sysctl -n dev.asmc.0.light.left` ))
12	BRIGHTNESS=0;
13	if [ $BRIGHTNESS_LEFT -gt 0 ] & [ $BRIGHTNESS_RIGHT -gt 0 ]; then
14		BRIGHTNESS=$((($BRIGHTNESS_LEFT + $BRIGHTNESS_RIGHT) / 2))
15	elif [ $BRIGHTNESS_LEFT -gt 0 ]; then
16		BRIGHTNESS=$BRIGHTNESS_LEFT
17	elif [ $BRIGHTNESS_RIGHT -gt 0 ]; then
18		BRIGHTNESS=$BRIGHTNESS_RIGHT
19	fi
20
21	# Sensor value 0-255
22	# Convert to control value 0-100
23
24	BRIGHTNESS=$((($BRIGHTNESS * $CONTROL_MAX) / $SENSOR_MAX + $ADJUSTMENT))
25
26
27	if [ $BRIGHTNESS -lt 15 ]; then
28		BRIGHTNESS=15
29	fi
30	if [ $BRIGHTNESS -gt 100 ]; then
31		BRIGHTNESS=100
32	fi
33	return $BRIGHTNESS
34)
35
36update_brightness
37LAST=$?
38intel_backlight $LAST >/dev/null
39
40while sleep 1; do
41	update_brightness
42	NEW=$?
43	if [ $LAST -gt $NEW ]; then
44		DIFF=$(( $LAST - $NEW ))
45		if [ $DIFF -gt 4 ]; then
46			while [ $LAST -gt $NEW ]; do
47				LAST=$(( LAST - 2 ))
48				if [ $DEBUG -eq 1 ]; then
49					echo Setting value $LAST \(1\)
50				fi
51				intel_backlight $LAST >/dev/null
52				sleep 0.01
53			done
54		fi
55	else
56		DIFF=$(( $NEW - $LAST ))
57		if [ $DIFF -gt 4 ]; then
58			while [ $LAST -lt $NEW ]; do
59				LAST=$(( LAST + 2 ))
60				if [ $DEBUG -eq 1 ]; then
61					echo Setting value $LAST \(2\)
62				fi
63				intel_backlight $LAST >/dev/null
64				sleep 0.01
65			done
66		fi
67	fi
68done
69