backlight-control/internal/backlight/backlight.go

72 lines
1.5 KiB
Go

package backlight
import (
"fmt"
"os"
"path/filepath"
"strconv"
"strings"
"git.trj.tw/golang/utils"
)
type Backlight struct {
Directory string
}
const currentValueFile = "brightness"
const maxValueFile = "max_brightness"
func NewInstance(path string) (*Backlight, error) {
bl := &Backlight{Directory: path}
if !utils.CheckExists(path, true) {
return nil, fmt.Errorf("backlight class directory check fail")
}
// check brightness and max_brightness file exists
brightnessFile := filepath.Join(path, currentValueFile)
maxBrightnessFile := filepath.Join(path, maxValueFile)
if !utils.CheckExists(brightnessFile, false) {
return nil, fmt.Errorf("brightness file check fail")
}
if !utils.CheckExists(maxBrightnessFile, false) {
return nil, fmt.Errorf("max_brightness file check fail")
}
return bl, nil
}
func readBrightnessValue(file string) (val int, err error) {
cnt, err := os.ReadFile(file)
if err != nil {
return 0, err
}
val, err = strconv.Atoi(strings.TrimSpace(string(cnt)))
if err != nil {
return 0, err
}
return
}
func (b *Backlight) GetCurrent() (val int, err error) {
return readBrightnessValue(filepath.Join(b.Directory, currentValueFile))
}
func (b *Backlight) GetMax() (val int, err error) {
return readBrightnessValue(filepath.Join(b.Directory, maxValueFile))
}
func (b *Backlight) SetValue(val int) (err error) {
brightness := filepath.Join(b.Directory, "brightness")
if err := os.WriteFile(brightness, []byte(fmt.Sprintf("%d", val)), 0644); err != nil {
return err
}
return
}