-
Notifications
You must be signed in to change notification settings - Fork 0
/
brightness.go
79 lines (67 loc) · 1.42 KB
/
brightness.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"fmt"
"log"
"math"
"strconv"
"sync"
"github.com/hchargois/brightness/drivers"
)
type BrightnessVal struct {
Relative bool
Value int
}
type Monitor struct {
Driver string
Gamma float64
Scale float64
DriverOpts drivers.Options
}
func (m *Monitor) normalizeValue(val int) float64 {
return math.Pow(float64(val)/100, 1/m.Gamma) * m.Scale
}
func (m *Monitor) SetBrightness(b int) {
drv, err := drivers.New(m.Driver, &m.DriverOpts)
if err != nil {
log.Printf(`Error with driver %v: %v`, m.Driver, err)
return
}
norm := m.normalizeValue(b)
drv.SetBrightness(norm)
}
func parseValue(v string) BrightnessVal {
var val BrightnessVal
var err error
val.Relative = v[0] == '+' || v[0] == '-'
val.Value, err = strconv.Atoi(v)
if err != nil {
die(fmt.Sprintf("Invalid brightness value \"%v\"", v), false)
}
return val
}
func setBrightness(valStr string, cfg *Config) {
var absVal int
val := parseValue(valStr)
if val.Relative {
absVal = LoadBrightness() + val.Value
} else {
absVal = val.Value
}
if absVal > 100 {
absVal = 100
}
if absVal < cfg.Min {
log.Printf("Asking for less than minimum brightness (%v < %v), setting %v", absVal, cfg.Min, cfg.Min)
absVal = cfg.Min
}
var wg sync.WaitGroup
for _, mon := range cfg.Monitors {
wg.Add(1)
go func(mon Monitor) {
mon.SetBrightness(absVal)
defer wg.Done()
}(mon)
}
wg.Wait()
SaveBrightness(absVal)
}