static void input_device_enter_reconnect_mode(struct input_device *idev) { DBG("path=%s reconnect_mode=%s", idev->path, reconnect_mode_to_string(idev->reconnect_mode)); /* Only attempt an auto-reconnect when the device is required to accept * reconnections from the host. */ if (idev->reconnect_mode != RECONNECT_ANY && idev->reconnect_mode != RECONNECT_HOST) return; /* If the device is temporary we are not required to reconnect with the * device. This is likely the case of a removing device. */ if (device_is_temporary(idev->device) || btd_device_is_connected(idev->device)) return; if (idev->reconnect_timer > 0) g_source_remove(idev->reconnect_timer); DBG("registering auto-reconnect"); idev->reconnect_attempt = 0; idev->reconnect_timer = g_timeout_add_seconds(30, input_device_auto_reconnect, idev); }
static DBusMessage *input_device_get_properties(DBusConnection *conn, DBusMessage *msg, void *data) { struct input_device *idev = data; DBusMessage *reply; DBusMessageIter iter; DBusMessageIter dict; dbus_bool_t connected; const char *reconnect_mode = NULL; reply = dbus_message_new_method_return(msg); if (!reply) return NULL; dbus_message_iter_init_append(reply, &iter); dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict); /* Connected */ connected = !!g_slist_find_custom(idev->connections, NULL, (GCompareFunc) connected_cmp); dict_append_entry(&dict, "Connected", DBUS_TYPE_BOOLEAN, &connected); /* Reconnection mode */ reconnect_mode = reconnect_mode_to_string(idev->reconnect_mode); dict_append_entry(&dict, "ReconnectMode", DBUS_TYPE_STRING, &reconnect_mode); dbus_message_iter_close_container(&iter, &dict); return reply; }
static gboolean property_get_reconnect_mode( const GDBusPropertyTable *property, DBusMessageIter *iter, void *data) { struct input_device *idev = data; const char *str_mode = reconnect_mode_to_string(idev->reconnect_mode); dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str_mode); return TRUE; }