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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
package main
import (
"errors"
"log/slog"
"time"
)
// #include <errno.h>
// #include <fcntl.h>
// #include <stdio.h>
// #include <stdint.h>
// #include <string.h>
// #include <sys/ioctl.h>
//
// uint8_t ioctlData[9] = {0};
//
// int DISP_IOCTL_SET_BRIGHTNESS = 0x102;
//
// static int rgxxSetBrightness(uint8_t brightness) {
// int fd = open("/dev/disp", O_WRONLY);
// if (fd < 0) {
// printf("Error opening /dev/disp: %s\n", strerror(errno));
// return -1;
// }
//
// ioctlData[8] = brightness;
//
// int ret = ioctl(fd, DISP_IOCTL_SET_BRIGHTNESS, &ioctlData);
// if (ret < 0) {
// printf("Error from ioctl: %s\n", strerror(errno));
// return -2;
// }
//
// return 0;
// }
import "C"
func setBrightness(brightness uint8) error {
// var brightness uint8 = 200
// if level == 1 {
// brightness = 0x14
// } else if level == 2 {
// brightness = 0x32
// } else if level == 3 {
// brightness = 0x46
// } else if level == 4 {
// brightness = 0x8C
// }
// data := make([]byte, 9)
// data[8] = brightness
// dataPtr := (*[9]byte)(data)
//
// slog.Info("Setting brightness value", "value", brightness)
//
// tio := 0x102
//
// displayDevice, err := os.OpenFile("/dev/disp", os.O_WRONLY, 0)
// if err != nil {
// return err
// }
// defer func() {
// err := displayDevice.Close()
// if err != nil {
// slog.Error("Error closing display device", "error", err)
// }
// }()
//
// res, _, err := syscall.Syscall(
// syscall.SYS_IOCTL,
// displayDevice.Fd(),
// uintptr(tio),
// uintptr(unsafe.Pointer(dataPtr)),
// )
// if int(res) != 0 {
// return err
// }
result := int(C.rgxxSetBrightness(C.uint8_t(brightness)))
if result == -1 {
return errors.New("Error opening /dev/disp")
}
if result == -2 {
return errors.New("Error from ioctl")
}
return nil
}
func main() {
for brightness := range 256 {
if brightness%5 != 0 {
continue
}
err := setBrightness(uint8(brightness))
if err != nil {
slog.Info("Could not set brightness", "error", err)
} else {
slog.Info("Set brightness", "brightness", brightness)
}
time.Sleep(500 * time.Millisecond)
}
}
|