[PATCH v2] linux: Detect the battery of bluetooth input devices.
Peter Wu
lekensteyn at gmail.com
Mon Sep 2 02:34:01 PDT 2013
Hi,
This looks fine to me, but wouldn't the compiler give a notice about:
if (foo = bar)
(when it thinks that you meant foo == bar instead?)
On Monday 02 September 2013 16:53:14 Shih-Yuan Lee wrote:
> From: "Shih-Yuan Lee (FourDollars)" <sylee at canonical.com>
>
> First, checking the device path. If it contains 'bluetooth', it is a
> bluetooth devices. Second, checking if there is an input folder. If there
> is mouse folder under the input folder, it is a mouse device. Otherwise, it
> is a keyboard device.
> ---
> src/linux/up-device-supply.c | 51
> +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50
> insertions(+), 1 deletion(-)
>
> diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c
> index 98536f4..41a49ff 100644
> --- a/src/linux/up-device-supply.c
> +++ b/src/linux/up-device-supply.c
> @@ -861,10 +861,16 @@ up_device_supply_coldplug (UpDevice *device)
> {
> UpDeviceSupply *supply = UP_DEVICE_SUPPLY (device);
> gboolean ret = FALSE;
> + GUdevDevice *bluetooth;
> GUdevDevice *native;
> + const gchar *file;
> const gchar *native_path;
> const gchar *scope;
> gchar *device_type = NULL;
> + gchar *device_path = NULL;
> + gchar *input_path = NULL;
> + GDir *dir = NULL;
> + GError *error = NULL;
> UpDeviceKind type = UP_DEVICE_KIND_UNKNOWN;
>
> up_device_supply_reset_values (supply);
> @@ -894,7 +900,50 @@ up_device_supply_coldplug (UpDevice *device)
> if (g_ascii_strcasecmp (device_type, "mains") == 0) {
> type = UP_DEVICE_KIND_LINE_POWER;
> } else if (g_ascii_strcasecmp (device_type, "battery") == 0) {
> - type = UP_DEVICE_KIND_BATTERY;
> +
> + /* Detect if the battery comes from bluetooth keyboard or mouse.
*/
> + bluetooth = g_udev_device_get_parent_with_subsystem (native,
> "bluetooth", NULL); + if (bluetooth != NULL) {
> + device_path = g_udev_device_get_sysfs_path (bluetooth);
> + if (dir = g_dir_open (device_path, 0, &error)) {
Here
> + while (file = g_dir_read_name (dir)) {
and here
> + /* Check if it is an input device. */
> + if (g_str_has_prefix (file, "input")) {
> + input_path = g_build_filename (device_path,
file, NULL);
> + break;
> + }
> + }
> + g_dir_close (dir);
> + } else {
> + g_warning ("Can not open folder %s: %s", device_path,
error->message);
> + g_error_free (error);
> + }
> + g_object_unref (bluetooth);
> + }
> +
> + if (input_path != NULL) {
> + if (dir = g_dir_open (input_path, 0, &error)) {
and here
> + while (file = g_dir_read_name (dir)) {
and here.
> + /* Check if it is a mouse device. */
> + if (g_str_has_prefix (file, "mouse")) {
> + type = UP_DEVICE_KIND_MOUSE;
> + break;
> + }
> + }
> + g_dir_close (dir);
> + } else {
> + g_warning ("Can not open folder %s: %s", input_path,
error->message);
> + g_error_free (error);
> + }
> + g_free (input_path);
> + if (type == UP_DEVICE_KIND_UNKNOWN) {
> + type = UP_DEVICE_KIND_KEYBOARD;
> + }
> + }
> +
> + if (type == UP_DEVICE_KIND_UNKNOWN) {
> + type = UP_DEVICE_KIND_BATTERY;
> + }
> } else if (g_ascii_strcasecmp (device_type, "USB") == 0) {
>
> /* use a heuristic to find the device type */
Regards,
Peter
More information about the devkit-devel
mailing list