1 /*************************************************************************** 2 * 3 * probe-acpi.c : Probe for ACPI device information 4 * 5 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 6 * Use is subject to license terms. 7 * 8 * Licensed under the Academic Free License version 2.1 9 * 10 **************************************************************************/ 11 12 #pragma ident "%Z%%M% %I% %E% SMI" 13 14 #ifdef HAVE_CONFIG_H 15 #include <config.h> 16 #endif 17 18 #include <errno.h> 19 #include <string.h> 20 #include <strings.h> 21 #include <ctype.h> 22 #include <stdlib.h> 23 #include <stdio.h> 24 #include <sys/ioctl.h> 25 #include <fcntl.h> 26 #include <unistd.h> 27 #include <glib.h> 28 29 #include <libhal.h> 30 #include <logger.h> 31 #include "../utils/acpi.h" 32 33 int 34 main(int argc, char *argv[]) 35 { 36 int ret = 1; 37 int fd = -1; 38 char *udi; 39 char device_file[HAL_PATH_MAX] = "/devices"; 40 char *devfs_path; 41 LibHalContext *ctx = NULL; 42 DBusError error; 43 44 if ((udi = getenv("UDI")) == NULL) 45 goto out; 46 if ((devfs_path = getenv("HAL_PROP_SOLARIS_DEVFS_PATH")) == NULL) 47 goto out; 48 strlcat(device_file, devfs_path, HAL_PATH_MAX); 49 50 setup_logger(); 51 52 dbus_error_init(&error); 53 if ((ctx = libhal_ctx_init_direct(&error)) == NULL) 54 goto out; 55 56 HAL_DEBUG(("Doing probe-acpi for %s (udi=%s)", 57 device_file, udi)); 58 59 if ((fd = open(device_file, O_RDONLY | O_NONBLOCK)) < 0) { 60 HAL_DEBUG(("Cannot open %s: %s", device_file, strerror(errno))); 61 goto out; 62 } 63 if (strstr(udi, "_ac")) { 64 ac_adapter_update(ctx, udi, fd); 65 } else if (strstr(udi, "_battery")) { 66 battery_update(ctx, udi, fd); 67 } else if (strstr(udi, "_lid")) { 68 lid_update(ctx, udi, fd); 69 } else if (strstr(udi, "_output")) { 70 laptop_panel_update(ctx, udi, fd); 71 } 72 73 ret = 0; 74 75 out: 76 if (fd >= 0) { 77 close(fd); 78 } 79 80 if (ctx != NULL) { 81 libhal_ctx_shutdown(ctx, &error); 82 libhal_ctx_free(ctx); 83 if (dbus_error_is_set(&error)) { 84 dbus_error_free(&error); 85 } 86 } 87 88 return (ret); 89 } 90