4 #include "e_hal_private.h"
6 #define e_hal_manager_call_new(member) dbus_message_new_method_call(E_HAL_SENDER, E_HAL_MANAGER_PATH, E_HAL_MANAGER_INTERFACE, member)
11 unmarshal_string_list(DBusMessage *msg, DBusError *err)
13 E_Hal_String_List_Return *ret = NULL;
14 DBusMessageIter iter, sub;
16 if (!dbus_message_has_signature(msg, "as"))
18 dbus_set_error(err, DBUS_ERROR_INVALID_SIGNATURE, "");
22 ret = calloc(1, sizeof(E_Hal_String_List_Return));
25 dbus_set_error(err, DBUS_ERROR_NO_MEMORY, "");
31 dbus_message_iter_init(msg, &iter);
32 dbus_message_iter_recurse(&iter, &sub);
33 while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID)
37 dbus_message_iter_get_basic(&sub, &dev);
39 ret->strings = eina_list_append(ret->strings, eina_stringshare_add(dev));
40 dbus_message_iter_next(&sub);
47 free_string_list(void *data)
49 E_Hal_String_List_Return *ret = data;
53 EINA_LIST_FREE(ret->strings, str)
54 eina_stringshare_del(str);
58 EAPI DBusPendingCall *
59 e_hal_manager_get_all_devices(E_DBus_Connection *conn, E_DBus_Callback_Func cb_func, void *data)
64 msg = e_hal_manager_call_new("GetAllDevices");
65 ret = e_dbus_method_call_send(conn, msg, unmarshal_string_list, cb_func, free_string_list, -1, data);
66 dbus_message_unref(msg);
70 /* Manager.DeviceExists(string udi) */
73 unmarshal_manager_device_exists(DBusMessage *msg, DBusError *err)
75 E_Hal_Manager_Device_Exists_Return *ret = NULL;
78 ret = calloc(1, sizeof(E_Hal_Manager_Device_Exists_Return));
81 dbus_set_error(err, DBUS_ERROR_NO_MEMORY, "");
85 dbus_message_get_args(msg, err, DBUS_TYPE_BOOLEAN, &val, DBUS_TYPE_INVALID);
87 if (dbus_error_is_set(err))
98 free_manager_device_exists(void *data)
100 E_Hal_Manager_Device_Exists_Return *ret = data;
106 EAPI DBusPendingCall *
107 e_hal_manager_device_exists(E_DBus_Connection *conn, const char *udi, E_DBus_Callback_Func cb_func, void *data)
109 DBusPendingCall *ret;
112 msg = e_hal_manager_call_new("DeviceExists");
113 dbus_message_append_args(msg, DBUS_TYPE_STRING, &udi, DBUS_TYPE_INVALID);
114 ret = e_dbus_method_call_send(conn, msg, unmarshal_manager_device_exists, cb_func, free_manager_device_exists, -1, data);
115 dbus_message_unref(msg);
119 /* Manager.FindDeviceStringMatch */
120 EAPI DBusPendingCall *
121 e_hal_manager_find_device_string_match(E_DBus_Connection *conn, const char *key, const char *value, E_DBus_Callback_Func cb_func, void *data)
124 DBusPendingCall *ret;
126 msg = e_hal_manager_call_new("FindDeviceStringMatch");
127 dbus_message_append_args(msg, DBUS_TYPE_STRING, &key, DBUS_TYPE_STRING, &value, DBUS_TYPE_INVALID);
128 ret = e_dbus_method_call_send(conn, msg, unmarshal_string_list, cb_func, free_string_list, -1, data);
129 dbus_message_unref(msg);
133 /* Manager.FindDeviceByCapability */
135 EAPI DBusPendingCall *
136 e_hal_manager_find_device_by_capability(E_DBus_Connection *conn, const char *capability, E_DBus_Callback_Func cb_func, void *data)
139 DBusPendingCall *ret;
141 msg = e_hal_manager_call_new("FindDeviceByCapability");
142 dbus_message_append_args(msg, DBUS_TYPE_STRING, &capability, DBUS_TYPE_INVALID);
143 ret = e_dbus_method_call_send(conn, msg, unmarshal_string_list, cb_func, free_string_list, -1, data);
144 dbus_message_unref(msg);