capi-system-device: Battery api regards as disconnected in no battery model 75/35875/3
authorJiyoung Yun <jy910.yun@samsung.com>
Wed, 25 Feb 2015 12:18:44 +0000 (21:18 +0900)
committerJiyoung Yun <jy910.yun@samsung.com>
Fri, 27 Feb 2015 02:21:09 +0000 (11:21 +0900)
If there is no battery model,
below apis will work as disconnected battery.

device_battery_get_percent
device_battery_is_charging
device_battery_get_level_status

Change-Id: Icabaf30b85a99cdf5b09d1f624fb45fce00ac0db
Signed-off-by: Jiyoung Yun <jy910.yun@samsung.com>
src/battery.c
src/common.h
src/dbus.c

index a8c34af..fb0855e 100644 (file)
@@ -37,7 +37,10 @@ int device_battery_get_percent(int *percent)
        ret = dbus_method_sync(DEVICED_BUS_NAME,
                        DEVICED_PATH_BATTERY, DEVICED_INTERFACE_BATTERY,
                        METHOD_GET_PERCENT, NULL, NULL);
-       if (ret < 0)
+       /* regard not suppoted as disconnected */
+       if (ret == -ENOTSUP)
+               ret = 0;
+       else if (ret < 0)
                return errno_to_device_error(ret);
 
        *percent = ret;
@@ -52,7 +55,10 @@ int device_battery_is_charging(bool *charging)
                return DEVICE_ERROR_INVALID_PARAMETER;
 
        ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, &val);
-       if (ret < 0 || val < 0 || val > 1)
+       /* regard not supported as disconnected */
+       if (val == -ENOTSUP)
+               val = 0;
+       else if (ret < 0 || val < 0 || val > 1)
                return DEVICE_ERROR_OPERATION_FAILED;
 
        *charging = val;
@@ -80,6 +86,9 @@ int device_battery_get_level_status(device_battery_level_e *status)
                *status = DEVICE_BATTERY_LEVEL_HIGH;
        else if (val == VCONFKEY_SYSMAN_BAT_LEVEL_FULL)
                *status = DEVICE_BATTERY_LEVEL_FULL;
+       /* regard not supported as disconnected */
+       else if (val == -ENOTSUP)
+               *status = DEVICE_BATTERY_LEVEL_EMPTY;
        else
                return DEVICE_ERROR_OPERATION_FAILED;
 
index dd01165..2c1cbb8 100644 (file)
@@ -37,9 +37,9 @@
 
 static inline int errno_to_device_error(int err)
 {
-       if (err == -ECOMM)
+       if (err == -EACCES)
                return DEVICE_ERROR_PERMISSION_DENIED;
-       else if (err == -ENODEV || err == -ENOENT)
+       else if (err == -ENOTSUP || err == -ENODEV || err == -ENOENT)
                return DEVICE_ERROR_NOT_SUPPORTED;
        else if (err < 0)
                return DEVICE_ERROR_OPERATION_FAILED;
index bf54116..531a834 100644 (file)
@@ -33,6 +33,22 @@ struct pending_call_data {
        void *data;
 };
 
+static int convert_error_to_errno(const char *err)
+{
+       /**
+        * if device is not supported,
+        * deviced does not register the method call of the device.
+        * in this case, dbus will return UNKNOWN_METHOD error.
+        */
+       if (strncmp(err, DBUS_ERROR_UNKNOWN_METHOD,
+                               sizeof(DBUS_ERROR_UNKNOWN_METHOD)) == 0)
+               return -ENOTSUP;
+       else if (strncmp(err, DBUS_ERROR_ACCESS_DENIED,
+                               sizeof(DBUS_ERROR_ACCESS_DENIED)) == 0)
+               return -EACCES;
+       return -ECOMM;
+}
+
 static int append_variant(DBusMessageIter *iter, const char *sig, char *param[])
 {
        char *ch;
@@ -108,8 +124,9 @@ int dbus_method_sync(const char *dest, const char *path,
        if (!reply) {
                _E("dbus_connection_send error(%s:%s) %s %s:%s-%s",
                        err.name, err.message, dest, path, interface, method);
+               ret = convert_error_to_errno(err.name);
                dbus_error_free(&err);
-               return -ECOMM;
+               return ret;
        }
 
        ret = dbus_message_get_args(reply, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);