# Updated but not checked in:
# (will commit)
#
# new file: fdi/policy/10osvendor/10-bluetooth-button.fdi
# modified: fdi/policy/10osvendor/Makefile.am
# modified: tools/.gitignore
# modified: tools/Makefile.am
# new file: tools/hal-system-bluetooth-get-power
# new file: tools/hal-system-bluetooth-set-power
# new file: tools/hal-system-sonypi.c
# modified: tools/linux/Makefile.am
# new file: tools/linux/hal-system-bluetooth-get-power-linux
# new file: tools/linux/hal-system-bluetooth-set-power-linux
# modified: tools/linux/hal-system-lcd-get-brightness-linux
# modified: tools/linux/hal-system-lcd-set-brightness-linux
#
diff --git a/fdi/policy/10osvendor/10-bluetooth-button.fdi b/fdi/policy/10osvendor/10-bluetooth-button.fdi
new file mode 100644
index 0000000..2d38173
--- /dev/null
+++ b/fdi/policy/10osvendor/10-bluetooth-button.fdi
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ bluetooth_switch
+ bluetooth_switch
+ Sony Bluetooth Switch
+ bluetooth
+ sonypi
+
+
+
+
+
+
+ org.freedesktop.Hal.Device.BluetoothKillSwitch
+
+ SetPower
+ b
+ power
+ hal-system-bluetooth-set-power
+
+ GetPower
+
+
+ hal-system-bluetooth-get-power
+
+
+
+
diff --git a/fdi/policy/10osvendor/Makefile.am b/fdi/policy/10osvendor/Makefile.am
index 734eead..8c09059 100644
--- a/fdi/policy/10osvendor/Makefile.am
+++ b/fdi/policy/10osvendor/Makefile.am
@@ -5,6 +5,7 @@ dist_fdi_DATA = \
10-keyboard-policy.fdi \
10-power-mgmt-policy.fdi \
10-toshiba-buttons.fdi \
+ 10-bluetooth-button.fdi \
10-laptop-panel-mgmt-policy.fdi \
15-storage-luks.fdi \
20-storage-methods.fdi
diff --git a/tools/.gitignore b/tools/.gitignore
index 94316c8..ad887a8 100644
--- a/tools/.gitignore
+++ b/tools/.gitignore
@@ -13,6 +13,7 @@ hal-device
hal-luks-remove
hal-luks-setup
hal-system-power-pmu
+hal-system-sonypi
hal-policy-is-privileged
hal-storage-mount
hal-storage-cleanup-all-mountpoints
diff --git a/tools/Makefile.am b/tools/Makefile.am
index d820cc8..8de52b5 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -56,7 +56,8 @@ libexec_PROGRAMS = \
hal-storage-closetray \
hal-storage-cleanup-mountpoint \
hal-storage-cleanup-all-mountpoints \
- hal-system-power-pmu
+ hal-system-power-pmu \
+ hal-system-sonypi
hal_storage_mount_SOURCES = hal-storage-mount.c hal-storage-shared.c hal-storage-shared.h
hal_storage_mount_LDADD = @GLIB_LIBS@ @POLKIT_LIBS@ @DBUS_LIBS@ $(top_builddir)/libhal/libhal.la $(top_builddir)/libhal-storage/libhal-storage.la
@@ -79,6 +80,9 @@ hal_storage_cleanup_all_mountpoints_LDADD = @GLIB_LIBS@ @POLKIT_LIBS@ @DBUS_LIBS
hal_system_power_pmu_SOURCES = hal-system-power-pmu.c
hal_system_power_pmu_LDADD = @DBUS_LIBS@ $(top_builddir)/libhal/libhal.la
+hal_system_sonypi_SOURCES = hal-system-sonypi.c
+hal_system_sonypi_LDADD = @DBUS_LIBS@ $(top_builddir)/libhal/libhal.la
+
scriptdir = $(libdir)/hal/scripts
script_SCRIPTS = \
@@ -91,7 +95,9 @@ script_SCRIPTS = \
hal-system-power-reboot \
hal-system-lcd-get-brightness \
hal-system-lcd-set-brightness \
- hal-system-power-set-power-save
+ hal-system-power-set-power-save \
+ hal-system-bluetooth-get-power \
+ hal-system-bluetooth-set-power
EXTRA_DIST=$(man_MANS) $(MAN_IN_FILES) gen-libgphoto-hal-fdi $(script_SCRIPTS)
diff --git a/tools/hal-system-bluetooth-get-power b/tools/hal-system-bluetooth-get-power
new file mode 100755
index 0000000..fc8f219
--- /dev/null
+++ b/tools/hal-system-bluetooth-get-power
@@ -0,0 +1,26 @@
+#!/bin/sh
+#
+# Copyright (C) 2007 Bastien Nocera
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# Check for environment variables
+if [ -z "$HAL_PROP_BLUETOOTH_SWITCH_ACCESS_METHOD" ]; then
+ echo "org.freedesktop.Hal.Device.UnknownError" >&2
+ echo "Missing or empty environment variable(s)." >&2
+ echo "This script should be started by hald." >&2
+ exit 1
+fi
+
+# TODO: check privilege
+
+if [ -n "$HALD_UNAME_S" -a -x ./$HALD_UNAME_S/hal-system-bluetooth-get-power-$HALD_UNAME_S ]; then
+ exec ./$HALD_UNAME_S/hal-system-bluetooth-get-power-$HALD_UNAME_S $@
+else
+ echo "org.freedesktop.Hal.Device.UnknownError" >&2
+ echo "No back-end for your operating system" >&2
+ exit 1
+fi
diff --git a/tools/hal-system-bluetooth-set-power b/tools/hal-system-bluetooth-set-power
new file mode 100755
index 0000000..2b52ab7
--- /dev/null
+++ b/tools/hal-system-bluetooth-set-power
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Copyright (C) 2007 Bastien Nocera
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# Check for environment variables
+if [ -z "$HAL_PROP_BLUETOOTH_SWITCH_ACCESS_METHOD" ] ; then
+ echo "org.freedesktop.Hal.Device.UnknownError" >&2
+ echo "Missing or empty environment variable(s)." >&2
+ echo "This script should be started by hald." >&2
+ exit 1
+fi
+
+# TODO: check privilege
+
+# read value for set bluetooth power
+read value
+export value
+
+if [ -n "$HALD_UNAME_S" -a -x ./$HALD_UNAME_S/hal-system-bluetooth-set-power-$HALD_UNAME_S ]; then
+ exec ./$HALD_UNAME_S/hal-system-bluetooth-set-power-$HALD_UNAME_S $@
+else
+ echo "org.freedesktop.Hal.Device.UnknownError" >&2
+ echo "No back-end for your operating system" >&2
+ exit 1
+fi
diff --git a/tools/hal-system-sonypi.c b/tools/hal-system-sonypi.c
new file mode 100644
index 0000000..26d588b
--- /dev/null
+++ b/tools/hal-system-sonypi.c
@@ -0,0 +1,243 @@
+/*! @file hal-system-sony.c
+ * @brief Issue ioctl's from methods invoked by HAL.
+ * @author Bastien Nocera
+ * @author Richard Hughes
+ * @date Thursday 08 February 2007
+ */
+/*
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include
+#endif
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#ifdef __linux__
+#include
+#endif
+#include
+
+#define SONYPI_DEV "/dev/sonypi"
+#define __u8 u_int8_t
+
+/**
+ * @defgroup HalSystemSonypi Use sonypi specific ioctls
+ * @ingroup HalMisc
+ *
+ * @brief A commandline tool for running sonypi specific ioctl's. Uses libhal
+ *
+ * @{
+ */
+
+/** Gets the LCD brightness
+ *
+ * @param val The returned brightness value, 0..255
+ * @return Success, TRUE or FALSE
+ */
+static int
+sonypi_get_lcd_brightness (__u8 *val)
+{
+#ifdef __FreeBSD__
+ return FALSE; /* FIXME implement */
+#elif sun
+ return FALSE; /* FIXME implement */
+#else
+ int fd;
+ int ret;
+
+ fd = open (SONYPI_DEV, O_RDONLY);
+ if (fd < 0) {
+ fprintf (stderr, "sonyi : Failed to open " SONYPI_DEV "\n");
+ return FALSE;
+ }
+ ret = ioctl (fd, SONYPI_IOCGBRT, val);
+ close (fd);
+
+ if (ret < 0) {
+ fprintf (stderr, "sonypi : SONYPI_IOCGBRT failed\n");
+ return FALSE;
+ }
+ return TRUE;
+#endif /* ! __FreeBSD__ */
+}
+
+/** Gets the builtin Bluetooth adapter's power
+ *
+ * @param val The returned power
+ * @return Success, TRUE or FALSE
+ */
+static int
+sonypi_get_bluetooth_power (int *val)
+{
+#ifdef __FreeBSD__
+ return FALSE; /* FIXME implement */
+#elif sun
+ return FALSE; /* FIXME implement */
+#else
+ //FIXME look through the HAL tree to find a bluetooth adapter matching
+ //ours
+ return FALSE;
+#endif /* ! __FreeBSD__ */
+}
+
+/** Sets the LCD brightness
+ *
+ * @param val The brightness value we want to set, 0..255
+ * @return Success, TRUE or FALSE
+ */
+static int
+sonypi_set_lcd_brightness (__u8 val)
+{
+#ifdef __FreeBSD__
+ return FALSE; /* FIXME implement */
+#elif sun
+ return FALSE; /* FIXME implement */
+#else
+ int ret;
+ int fd;
+
+ fd = open (SONYPI_DEV, O_RDWR);
+ if (fd < 0) {
+ fprintf (stderr, "sonypi : Failed to open " SONYPI_DEV "\n");
+ return FALSE;
+ }
+ ret = ioctl (fd, SONYPI_IOCSBRT, &val);
+ close (fd);
+
+ if (ret < 0) {
+ fprintf (stderr, "sonypi : SONYPI_IOCSBRT failed\n");
+ return FALSE;
+ }
+ return TRUE;
+#endif /* ! __FreeBSD__ */
+}
+
+/** Sets the builtin Bluetooth adapter's power
+ *
+ * @param val The power value we want to set
+ * @return Success, TRUE or FALSE
+ */
+static int
+sonypi_set_bluetooth_power (int val)
+{
+#ifdef __FreeBSD__
+ return FALSE; /* FIXME implement */
+#elif sun
+ return FALSE; /* FIXME implement */
+#else
+ int ret;
+ int fd;
+
+ fd = open (SONYPI_DEV, O_RDWR);
+ if (fd < 0) {
+ fprintf (stderr, "sonypi : Failed to open " SONYPI_DEV "\n");
+ return FALSE;
+ }
+ ret = ioctl (fd, SONYPI_IOCSBLUE, &val);
+ close (fd);
+
+ if (ret < 0) {
+ fprintf (stderr, "sonypi : SONYPI_IOCSBLUE failed\n");
+ return FALSE;
+ }
+ return TRUE;
+#endif /* ! __FreeBSD__ */
+}
+
+/** Print out program usage.
+ *
+ * @param argc Number of arguments given to program
+ * @param argv Arguments given to program
+ */
+static void
+usage (int argc, char *argv[])
+{
+ fprintf (stderr, "\nusage : hal-system-sonypi "
+ "[setlcd x] [getlcd] [setbluetooth x] [getbluetooth]\n");
+ fprintf (stderr,
+ "\n"
+ " setlcd x Sets the LCD to a range 0..14 (0 is off)\n"
+ " getlcd Gets the current LCD brightness value\n"
+ " setbluetooth x Sets the Bluetooth power\n"
+ " getbluetooth Gets the Bluetooth power\n"
+ " help Show this information and exit\n"
+ "\n"
+ "This program calls sonypi specific ioctls from within scripts run by HAL.\n");
+}
+
+/** Entry point
+ *
+ * @param argc Number of arguments given to program
+ * @param argv Arguments given to program
+ * @return Return code
+ */
+int
+main (int argc, char *argv[])
+{
+ __u8 brightness;
+ int power;
+ int ret;
+
+ if (argc == 2) {
+ if (strcmp (argv[1], "getlcd") == 0) {
+ ret = sonypi_get_lcd_brightness (&brightness);
+ if (ret == FALSE)
+ return EXIT_FAILURE;
+ /* we subtract 1 as 0 is backlight disable */
+ printf ("%i", brightness - 1);
+ return EXIT_SUCCESS;
+ }
+ if (strcmp (argv[1], "getbluetooth") == 0) {
+ ret = sonypi_get_bluetooth_power (&power);
+ if (ret == FALSE)
+ return EXIT_FAILURE;
+ printf ("%i", power);
+ return EXIT_SUCCESS;
+ }
+ } else if (argc == 3) {
+ if (strcmp (argv[1], "setlcd") == 0) {
+ brightness = atoi (argv[2]);
+ ret = sonypi_set_lcd_brightness (brightness);
+ if (ret == FALSE)
+ return EXIT_FAILURE;
+ return EXIT_SUCCESS;
+ }
+ if (strcmp (argv[1], "setbluetooth") == 0) {
+ power = atoi (argv[2]);
+ ret = sonypi_set_bluetooth_power (power);
+ if (ret == FALSE)
+ return EXIT_FAILURE;
+ return EXIT_SUCCESS;
+ }
+ }
+ usage (argc, argv);
+ return EXIT_SUCCESS;
+}
+
+/**
+ * @}
+ */
diff --git a/tools/linux/Makefile.am b/tools/linux/Makefile.am
index 2e8b4cb..d3bd975 100644
--- a/tools/linux/Makefile.am
+++ b/tools/linux/Makefile.am
@@ -15,7 +15,9 @@ script_SCRIPTS = \
hal-system-power-reboot-linux \
hal-system-lcd-get-brightness-linux \
hal-system-lcd-set-brightness-linux \
- hal-system-power-set-power-save-linux
+ hal-system-power-set-power-save-linux \
+ hal-system-bluetooth-get-power-linux \
+ hal-system-bluetooth-set-power-linux
EXTRA_DIST = 90-hal.rules $(script_SCRIPTS)
diff --git a/tools/linux/hal-system-bluetooth-get-power-linux b/tools/linux/hal-system-bluetooth-get-power-linux
new file mode 100755
index 0000000..d1efb3f
--- /dev/null
+++ b/tools/linux/hal-system-bluetooth-get-power-linux
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# Copyright (C) 2007 Bastien Nocera
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+if [ "$HAL_PROP_BLUETOOTH_SWITCH_ACCESS_METHOD" = "sonypi" ]; then
+ value="`hal-system-sonypi getpower`"
+ if [ $? -ne 0 ]; then
+ echo "org.freedesktop.Hal.Device.BluetoothButton.NotSupported" >&2
+ exit 1
+ fi
+ exit ${value}
+else
+ echo "org.freedesktop.Hal.Device.BluetoothButton.NotSupported" >&2
+ echo "Access type not supported" >&2
+ exit 1
+fi
+
diff --git a/tools/linux/hal-system-bluetooth-set-power-linux b/tools/linux/hal-system-bluetooth-set-power-linux
new file mode 100755
index 0000000..2bd5379
--- /dev/null
+++ b/tools/linux/hal-system-bluetooth-set-power-linux
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# Copyright (C) 2007 Bastien Nocera
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+if [ "$HAL_PROP_BLUETOOTH_BUTTON_SWITCH_METHOD" = "sonypi" ]; then
+ hal-system-sonypi setpower $value
+ if [ $? -ne 0 ]; then
+ echo "org.freedesktop.Hal.Device.BluetoothButton.NotSupported" >&2
+ exit 1
+ fi
+ exit 0
+else
+ echo "org.freedesktop.Hal.Device.BluetoothButton.NotSupported" >&2
+ echo "Access type not supported" >&2
+ exit 1
+fi
+
diff --git a/tools/linux/hal-system-lcd-get-brightness-linux b/tools/linux/hal-system-lcd-get-brightness-linux
index 673a41e..70829b2 100755
--- a/tools/linux/hal-system-lcd-get-brightness-linux
+++ b/tools/linux/hal-system-lcd-get-brightness-linux
@@ -20,6 +20,13 @@ if [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_METHOD" = "pmu" ]; then
exit 1
fi
exit ${value}
+elif [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_METHOD" = "sonypi" ]; then
+ value="`hal-system-sonypi getlcd`"
+ if [ $? -ne 0 ]; then
+ echo "org.freedesktop.Hal.Device.LaptopPanel.NotSupported" >&2
+ exit 1
+ fi
+ exit ${value}
fi
# Check for file existance and that it's readable
@@ -57,17 +64,6 @@ elif [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_METHOD" = "omnibook" ]; then
# cat /proc/omnibook/lcd
# LCD brightness: 7
value="`cat $HAL_PROP_LINUX_ACPI_PATH | awk '{print $3;}'`"
-elif [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_METHOD" = "sonypi" ]; then
- # spicctrl -B
- # 70
- # 0..255
- value="`/usr/sbin/spicctrl -B`"
- RETVAL=$?
- if [ $RETVAL != 0 ]; then
- echo "org.freedesktop.Hal.Device.LaptopPanel.NotSupported" >&2
- exit 1;
- fi
- exit ${value}
else
echo "org.freedesktop.Hal.Device.LaptopPanel.NotSupported" >&2
echo "No ACPI method found" >&2
diff --git a/tools/linux/hal-system-lcd-set-brightness-linux b/tools/linux/hal-system-lcd-set-brightness-linux
index 38e5730..fcd2204 100755
--- a/tools/linux/hal-system-lcd-set-brightness-linux
+++ b/tools/linux/hal-system-lcd-set-brightness-linux
@@ -20,6 +20,13 @@ if [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_METHOD" = "pmu" ]; then
exit 1
fi
exit 0
+elif [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_METHOD" = "sonypi" ]; then
+ hal-system-sonypi setlcd $value
+ if [ $? -ne 0 ]; then
+ echo "org.freedesktop.Hal.Device.LaptopPanel.NotSupported" >&2
+ exit 1
+ fi
+ exit 0
fi
# Check for file existance and that it's writable
@@ -52,17 +59,6 @@ elif [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_METHOD" = "omnibook" ]; then
# echo "{0..7}" > /proc/omnibook/lcd
# http://bugzilla.gnome.org/show_bug.cgi?id=331458
echo "$value" > $HAL_PROP_LINUX_ACPI_PATH
-elif [ "$HAL_PROP_LAPTOP_PANEL_ACCESS_METHOD" = "sonypi" ]; then
- # spicctrl -B
- # 70
- # 0..255
- value="`/usr/sbin/spicctrl -B`"
- RETVAL=$?
- if [ $RETVAL != 0 ]; then
- echo "org.freedesktop.Hal.Device.LaptopPanel.NotSupported" >&2
- exit 1;
- fi
- exit ${value}
else
echo "org.freedesktop.Hal.Device.LaptopPanel.NotSupported" >&2
echo "No ACPI method found" >&2