18c2aff776a775d34a4c9893a4c72e0434d68e36artem/***************************************************************************
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * CVSID: $Id$
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * hal_set_property.c : Set property for a device
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Copyright (C) 2003 David Zeuthen, <david@fubar.dk>
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Licensed under the Academic Free License version 2.1
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * This program is free software; you can redistribute it and/or modify
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * it under the terms of the GNU General Public License as published by
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * the Free Software Foundation; either version 2 of the License, or
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * (at your option) any later version.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * This program is distributed in the hope that it will be useful,
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * but WITHOUT ANY WARRANTY; without even the implied warranty of
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * GNU General Public License for more details.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * You should have received a copy of the GNU General Public License
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * along with this program; if not, write to the Free Software
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18c2aff776a775d34a4c9893a4c72e0434d68e36artem **************************************************************************/
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * @defgroup HalSetProperty Set HAL device property
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * @ingroup HalMisc
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * @brief A commandline tool setting a property of a device. Uses libhal
18c2aff776a775d34a4c9893a4c72e0434d68e36artem/** Print out program usage.
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * @param argc Number of arguments given to program
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * @param argv Arguments given to program
18c2aff776a775d34a4c9893a4c72e0434d68e36artem "usage : hal-set-property --udi <udi> --key <key>\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " (--int <value> | --string <value> | --bool <value> |\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --strlist-pre <value> | --strlist-post <value> |\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --strlist-rem <value> | --double <value> | --remove)\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " [--help] [--version]\n");
18c2aff776a775d34a4c9893a4c72e0434d68e36artem "\n" " --udi Unique Device Id\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --key Key of the property to set\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --int Set value to an integer. Accepts decimal and "
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " hexadecimal prefixed with 0x or x\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --uint64 Set value to an integer. Accepts decimal and "
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " hexadecimal prefixed with 0x or x\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --string Set value to a string\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --double Set value to a floating point number\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --bool Set value to a boolean, ie. true or false\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --strlist-pre Prepend a string to a list\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --strlist-post Append a string to a list\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --strlist-rem Remove a string from a list\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --remove Indicates that the property should be removed\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --version Show version and exit\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem " --help Show this information and exit\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem "This program attempts to set property for a device. Note that, due to\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem "security considerations, it may not be possible to set a property; on\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem "success this program exits with exit code 0. On error, the program exits\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem "with an exit code different from 0\n" "\n");
18c2aff776a775d34a4c9893a4c72e0434d68e36artem/** Entry point
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * @param argc Number of arguments given to program
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * @param argv Arguments given to program
18c2aff776a775d34a4c9893a4c72e0434d68e36artem * @return Return code
18c2aff776a775d34a4c9893a4c72e0434d68e36artem while (1) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (c == -1)
18c2aff776a775d34a4c9893a4c72e0434d68e36artem switch (c) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem /* must have at least one, but not neither or both */
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if ((remove && type != PROP_INVALID) || ((!remove) && type == PROP_INVALID)) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem if (!libhal_ctx_set_dbus_connection (hal_ctx, dbus_bus_get (DBUS_BUS_SYSTEM, &error))) {
18c2aff776a775d34a4c9893a4c72e0434d68e36artem fprintf (stderr, "error: libhal_ctx_set_dbus_connection: %s: %s\n", error.name, error.message);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem fprintf (stderr, "error: libhal_ctx_init: %s: %s\n", error.name, error.message);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem fprintf (stderr, "Could not initialise connection to hald.\n"
18c2aff776a775d34a4c9893a4c72e0434d68e36artem "Normally this means the HAL daemon (hald) is not running or not ready.\n");
de7d23d85e06f547e8cd4ed4bce494209d63612aLin Guo - Sun Microsystems /* check UDI exists */
de7d23d85e06f547e8cd4ed4bce494209d63612aLin Guo - Sun Microsystems udi_exists = libhal_device_exists (hal_ctx, udi, &error);
de7d23d85e06f547e8cd4ed4bce494209d63612aLin Guo - Sun Microsystems fprintf (stderr, "error: UDI %s does not exist\n", udi);
de7d23d85e06f547e8cd4ed4bce494209d63612aLin Guo - Sun Microsystems fprintf (stderr, "error: libhal_device_exists: %s: %s\n", error.name, error.message);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem rc = libhal_device_remove_property (hal_ctx, udi, key, &error);
de7d23d85e06f547e8cd4ed4bce494209d63612aLin Guo - Sun Microsystems fprintf (stderr, "error: libhal_device_remove_property: %s: %s\n", error.name, error.message);
de7d23d85e06f547e8cd4ed4bce494209d63612aLin Guo - Sun Microsystems fprintf (stderr, "error: libhal_device_remove_property: invalid params.\n");
18c2aff776a775d34a4c9893a4c72e0434d68e36artem rc = libhal_device_set_property_string (hal_ctx, udi, key, str_value, &error);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem rc = libhal_device_set_property_int (hal_ctx, udi, key, int_value, &error);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem rc = libhal_device_set_property_uint64 (hal_ctx, udi, key, uint64_value, &error);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem rc = libhal_device_set_property_double (hal_ctx, udi, key, double_value, &error);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem rc = libhal_device_set_property_bool (hal_ctx, udi, key, bool_value, &error);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem rc = libhal_device_property_strlist_prepend (hal_ctx, udi, key, str_value, &error);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem rc = libhal_device_property_strlist_append (hal_ctx, udi, key, str_value, &error);
18c2aff776a775d34a4c9893a4c72e0434d68e36artem rc = libhal_device_property_strlist_remove (hal_ctx, udi, key, str_value, &error);
de7d23d85e06f547e8cd4ed4bce494209d63612aLin Guo - Sun Microsystems fprintf (stderr, "error: libhal_device_set_property: %s: %s\n", error.name, error.message);
de7d23d85e06f547e8cd4ed4bce494209d63612aLin Guo - Sun Microsystems fprintf (stderr, "error: libhal_device_set_property: invalid params.\n");