d2ec54f7875f7e05edd56195adbeb593c947763fphitran/***************************************************************************
d2ec54f7875f7e05edd56195adbeb593c947763fphitran *
d2ec54f7875f7e05edd56195adbeb593c947763fphitran * hal-system-lcd-set-brightness-sunos.c : Set LCD brightness
d2ec54f7875f7e05edd56195adbeb593c947763fphitran *
d2ec54f7875f7e05edd56195adbeb593c947763fphitran * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
d2ec54f7875f7e05edd56195adbeb593c947763fphitran * Use is subject to license terms.
d2ec54f7875f7e05edd56195adbeb593c947763fphitran *
d2ec54f7875f7e05edd56195adbeb593c947763fphitran * Licensed under the Academic Free License version 2.1
d2ec54f7875f7e05edd56195adbeb593c947763fphitran *
d2ec54f7875f7e05edd56195adbeb593c947763fphitran **************************************************************************/
d2ec54f7875f7e05edd56195adbeb593c947763fphitran
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#pragma ident "%Z%%M% %I% %E% SMI"
d2ec54f7875f7e05edd56195adbeb593c947763fphitran
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#ifdef HAVE_CONFIG_H
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include <config.h>
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#endif
d2ec54f7875f7e05edd56195adbeb593c947763fphitran
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include <errno.h>
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include <string.h>
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include <strings.h>
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include <ctype.h>
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include <stdlib.h>
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include <stdio.h>
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include <sys/ioctl.h>
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include <fcntl.h>
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include <unistd.h>
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include <sys/acpi_drv.h>
d2ec54f7875f7e05edd56195adbeb593c947763fphitran#include "../../hald/util.h"
d2ec54f7875f7e05edd56195adbeb593c947763fphitran
d2ec54f7875f7e05edd56195adbeb593c947763fphitranint
d2ec54f7875f7e05edd56195adbeb593c947763fphitranmain(int argc, char *argv[])
d2ec54f7875f7e05edd56195adbeb593c947763fphitran{
d2ec54f7875f7e05edd56195adbeb593c947763fphitran char arg[10];
d2ec54f7875f7e05edd56195adbeb593c947763fphitran int level;
d2ec54f7875f7e05edd56195adbeb593c947763fphitran int fd = -1;
d2ec54f7875f7e05edd56195adbeb593c947763fphitran char *udi;
d2ec54f7875f7e05edd56195adbeb593c947763fphitran char device_file[HAL_PATH_MAX] = "/devices";
d2ec54f7875f7e05edd56195adbeb593c947763fphitran char *devfs_path;
d2ec54f7875f7e05edd56195adbeb593c947763fphitran
d2ec54f7875f7e05edd56195adbeb593c947763fphitran if ((udi = getenv("UDI")) == NULL) {
d2ec54f7875f7e05edd56195adbeb593c947763fphitran return (1);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran }
d2ec54f7875f7e05edd56195adbeb593c947763fphitran if ((devfs_path = getenv("HAL_PROP_SOLARIS_DEVFS_PATH")) == NULL) {
d2ec54f7875f7e05edd56195adbeb593c947763fphitran return (1);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran }
d2ec54f7875f7e05edd56195adbeb593c947763fphitran strlcat(device_file, devfs_path, HAL_PATH_MAX);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran fprintf(stderr, "Setting brightness on %s (udi=%s)",
d2ec54f7875f7e05edd56195adbeb593c947763fphitran device_file, udi);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran
d2ec54f7875f7e05edd56195adbeb593c947763fphitran if ((fd = open(device_file, O_RDONLY | O_NONBLOCK)) < 0) {
d2ec54f7875f7e05edd56195adbeb593c947763fphitran fprintf(stderr, "Cannot open %s: %s", device_file,
d2ec54f7875f7e05edd56195adbeb593c947763fphitran strerror(errno));
d2ec54f7875f7e05edd56195adbeb593c947763fphitran return (1);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran }
d2ec54f7875f7e05edd56195adbeb593c947763fphitran if (fgets(arg, sizeof (arg), stdin)) {
d2ec54f7875f7e05edd56195adbeb593c947763fphitran level = atoi(arg);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran }
d2ec54f7875f7e05edd56195adbeb593c947763fphitran if (ioctl(fd, ACPI_DRV_IOC_SET_BRIGHTNESS, &level) < 0) {
d2ec54f7875f7e05edd56195adbeb593c947763fphitran close(fd);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran return (1);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran } else {
d2ec54f7875f7e05edd56195adbeb593c947763fphitran close(fd);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran return (0);
d2ec54f7875f7e05edd56195adbeb593c947763fphitran }
d2ec54f7875f7e05edd56195adbeb593c947763fphitran}