/* returns a value between 0-255 range, where higher is brighter */ static uint32_t get_normalized_backlight(struct backlight *backlight) { long brightness, max_brightness; long norm; brightness = backlight_get_brightness(backlight); max_brightness = backlight_get_max_brightness(backlight); /* convert it to a scale of 0 to 255 */ norm = (brightness * 255)/(max_brightness); return (int) norm; }
long backlight_set_brightness(struct backlight *backlight, long brightness) { char *path; char *buffer = NULL; int fd; long ret; if (asprintf(&path, "%s/%s", backlight->path, "brightness") < 0) return -ENOMEM; fd = open(path, O_RDWR); if (fd < 0) { ret = -1; goto out; } ret = read(fd, &buffer, sizeof(buffer)); if (ret < 1) { ret = -1; goto out; } if (asprintf(&buffer, "%ld", brightness) < 0) { ret = -1; goto out; } ret = write(fd, buffer, strlen(buffer)); if (ret < 0) { ret = -1; goto out; } ret = backlight_get_brightness(backlight); backlight->brightness = ret; out: if (buffer) free(buffer); if (path) free(path); close(fd); return ret; }
static void set_backlight(struct udev_device *drm_device, int connector_id, int blight) { int connector_type; long max_brightness, brightness, actual_brightness; struct backlight *backlight; long new_blight; connector_type = get_drm_connector_type(drm_device, connector_id); if (connector_type < 0) return; backlight = backlight_init(drm_device, connector_type); if (!backlight) { printf("backlight adjust failed\n"); return; } max_brightness = backlight_get_max_brightness(backlight); printf("Max backlight: %ld\n", max_brightness); brightness = backlight_get_brightness(backlight); printf("Cached backlight: %ld\n", brightness); actual_brightness = backlight_get_actual_brightness(backlight); printf("Hardware backlight: %ld\n", actual_brightness); printf("normalized current brightness: %d\n", get_normalized_backlight(backlight)); /* denormalized value */ new_blight = (blight * max_brightness) / 255; backlight_set_brightness(backlight, new_blight); printf("Setting brightness to: %ld (norm: %d)\n", new_blight, blight); backlight_destroy(backlight); }