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)
	}
}