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;
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;
*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;
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;
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;
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);