2 #include "e_hal_private.h"
4 #define e_hal_manager_call_new(member) dbus_message_new_method_call(E_HAL_SENDER, E_HAL_MANAGER_PATH, E_HAL_MANAGER_INTERFACE, member)
9 unmarshal_string_list(DBusMessage *msg, DBusError *err)
11 E_Hal_String_List_Return *ret = NULL;
12 DBusMessageIter iter, sub;
14 if (!dbus_message_has_signature(msg, "as"))
16 dbus_set_error(err, DBUS_ERROR_INVALID_SIGNATURE, "");
20 ret = calloc(1, sizeof(E_Hal_String_List_Return));
23 dbus_set_error(err, DBUS_ERROR_NO_MEMORY, "");
29 dbus_message_iter_init(msg, &iter);
30 dbus_message_iter_recurse(&iter, &sub);
31 while (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_INVALID)
35 dbus_message_iter_get_basic(&sub, &dev);
36 if (dev) ret->strings = eina_list_append(ret->strings, dev);
37 dbus_message_iter_next(&sub);
44 free_string_list(void *data)
46 E_Hal_String_List_Return *ret = data;
49 eina_list_free(ret->strings);
53 EAPI DBusPendingCall *
54 e_hal_manager_get_all_devices(E_DBus_Connection *conn, E_DBus_Callback_Func cb_func, void *data)
59 msg = e_hal_manager_call_new("GetAllDevices");
60 ret = e_dbus_method_call_send(conn, msg, unmarshal_string_list, cb_func, free_string_list, -1, data);
61 dbus_message_unref(msg);
65 /* Manager.DeviceExists(string udi) */
68 unmarshal_manager_device_exists(DBusMessage *msg, DBusError *err)
70 E_Hal_Manager_Device_Exists_Return *ret = NULL;
73 ret = calloc(1, sizeof(E_Hal_Manager_Device_Exists_Return));
76 dbus_set_error(err, DBUS_ERROR_NO_MEMORY, "");
80 dbus_message_get_args(msg, err, DBUS_TYPE_BOOLEAN, &val, DBUS_TYPE_INVALID);
82 if (dbus_error_is_set(err))
93 free_manager_device_exists(void *data)
95 E_Hal_Manager_Device_Exists_Return *ret = data;
101 EAPI DBusPendingCall *
102 e_hal_manager_device_exists(E_DBus_Connection *conn, const char *udi, E_DBus_Callback_Func cb_func, void *data)
104 DBusPendingCall *ret;
107 msg = e_hal_manager_call_new("DeviceExists");
108 dbus_message_append_args(msg, DBUS_TYPE_STRING, &udi, DBUS_TYPE_INVALID);
109 ret = e_dbus_method_call_send(conn, msg, unmarshal_manager_device_exists, cb_func, free_manager_device_exists, -1, data);
110 dbus_message_unref(msg);
114 /* Manager.FindDeviceStringMatch */
115 EAPI DBusPendingCall *
116 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)
119 DBusPendingCall *ret;
121 msg = e_hal_manager_call_new("FindDeviceStringMatch");
122 dbus_message_append_args(msg, DBUS_TYPE_STRING, &key, DBUS_TYPE_STRING, &value, DBUS_TYPE_INVALID);
123 ret = e_dbus_method_call_send(conn, msg, unmarshal_string_list, cb_func, free_string_list, -1, data);
124 dbus_message_unref(msg);
128 /* Manager.FindDeviceByCapability */
130 EAPI DBusPendingCall *
131 e_hal_manager_find_device_by_capability(E_DBus_Connection *conn, const char *capability, E_DBus_Callback_Func cb_func, void *data)
134 DBusPendingCall *ret;
136 msg = e_hal_manager_call_new("FindDeviceByCapability");
137 dbus_message_append_args(msg, DBUS_TYPE_STRING, &capability, DBUS_TYPE_INVALID);
138 ret = e_dbus_method_call_send(conn, msg, unmarshal_string_list, cb_func, free_string_list, -1, data);
139 dbus_message_unref(msg);