Re: [PATCH v3 02/13] Add redirecting state

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Aug 11, 2015, at 13:50 PM, Christophe Fergeau <cfergeau@xxxxxxxxxx> wrote:

On Mon, Aug 03, 2015 at 04:10:42PM +0300, Kirill Moizik wrote:
From: Kirill Moizik <kmoizik@xxxxxxxxxx>

Add redirecting property to UsbDeviceManager and redirecting field to GUdevCleint

"GUdevClient"

Please add more details as to when this property is supposed to be used
in the log, and in the property description ("It indicates when a
redirection operation is in progress on a device. It's set back to FALSE
once the device is fully redirected to the guest") or something like
that.

Done.



---
src/map-file             |  1 +
src/usb-device-manager.c | 31 +++++++++++++++++++++++++++++--
src/win-usb-dev.c        | 13 +++++++++++++
src/win-usb-dev.h        |  1 +
4 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/src/map-file b/src/map-file
index d5a073f..6d5a5ef 100644
--- a/src/map-file
+++ b/src/map-file
@@ -117,6 +117,7 @@ spice_uri_to_string;
spice_usb_device_get_description;
spice_usb_device_get_libusb_device;
spice_usb_device_get_type;
+spice_g_udev_set_redirecting;

I don't think this needs to be exported

Fixed in v4.


spice_usb_device_manager_can_redirect_device;
spice_usb_device_manager_connect_device_async;
spice_usb_device_manager_connect_device_finish;
diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
index 5b8151f..adf7acc 100644
--- a/src/usb-device-manager.c
+++ b/src/usb-device-manager.c
@@ -93,6 +93,7 @@ enum {
    PROP_AUTO_CONNECT,
    PROP_AUTO_CONNECT_FILTER,
    PROP_REDIRECT_ON_CONNECT,
+    PROP_REDIRECTING,
};

enum
@@ -130,6 +131,7 @@ struct _SpiceUsbDeviceManagerPrivate {
    SpiceWinUsbDriver     *installer;
#endif
    gboolean               use_usbclerk;
+    gboolean               redirecting;
#endif
    GPtrArray *devices;
    GPtrArray *channels;
@@ -421,13 +423,18 @@ static void spice_usb_device_manager_get_property(GObject     *gobject,
    case PROP_REDIRECT_ON_CONNECT:
        g_value_set_string(value, priv->redirect_on_connect);
        break;
+#ifdef USE_USBREDIR
+    case PROP_REDIRECTING:
+        g_value_set_boolean(value, priv->redirecting);
+        break;
+#endif
    default:
        G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
        break;
    }
}

-#ifdef G_OS_WIN32
+#if defined(USE_USBREDIR) && defined(G_OS_WIN32)

Is this related to this patch ?

You are right, moving to a separate patch.


static
void _usbdk_autoredir_enable(SpiceUsbDeviceManager *manager);
static
@@ -448,7 +455,7 @@ static void spice_usb_device_manager_set_property(GObject       *gobject,
        break;
    case PROP_AUTO_CONNECT:
        priv->auto_connect = g_value_get_boolean(value);
-#ifdef G_OS_WIN32
+#if defined(USE_USBREDIR) && defined(G_OS_WIN32)

ditto


ditto :)


        if (!priv->use_usbclerk) {
            if (priv->auto_connect) {
                _usbdk_autoredir_enable(self);
@@ -504,6 +511,11 @@ static void spice_usb_device_manager_set_property(GObject       *gobject,
        priv->redirect_on_connect = g_strdup(filter);
        break;
    }
+#ifdef USE_USBREDIR
+    case PROP_REDIRECTING:
+        priv->redirecting = g_value_get_boolean(value);
+        break;
+#endif
    default:
        G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
        break;
@@ -595,6 +607,21 @@ static void spice_usb_device_manager_class_init(SpiceUsbDeviceManagerClass *klas
                                    pspec);

    /**
+     * SpiceUsbDeviceManager:redirecting:
+     *
+     * Boolean variable specifying async usb redirection flow
+     *
+     * See #SpiceUsbDeviceManager:auto-connect-filter for the filter string
+     * format.

These last 2 lines should be removed, I'd like more details about the
exact meaning of the property in the comment.


Fixed.


+     */
+    pspec = g_param_spec_boolean("redirecting", "Redirecting",
+                                 "Usb redirection in progress",
+                                 FALSE,
+                                 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+    g_object_class_install_property(gobject_class, PROP_REDIRECTING,
+                                    pspec);
+
+    /**
     * SpiceUsbDeviceManager::device-added:
     * @manager: the #SpiceUsbDeviceManager that emitted the signal
     * @device: #SpiceUsbDevice boxed object corresponding to the added device
diff --git a/src/win-usb-dev.c b/src/win-usb-dev.c
index 1e4b2d6..875ef89 100644
--- a/src/win-usb-dev.c
+++ b/src/win-usb-dev.c
@@ -37,6 +37,7 @@ struct _GUdevClientPrivate {
    gssize udev_list_size;
    GList *udev_list;
    HWND hwnd;
+    gboolean redirecting;
};

#define G_UDEV_CLIENT_WINCLASS_NAME  TEXT("G_UDEV_CLIENT")
@@ -186,6 +187,7 @@ g_udev_client_initable_init(GInitable *initable, GCancellable *cancellable,
    self = G_UDEV_CLIENT(initable);
    priv = self->priv;

+    priv->redirecting = FALSE;

This is not needed, priv is set to 0 upon creation

Fixed.



    rc = libusb_init(&priv->ctx);
    if (rc < 0) {
        const char *errstr = spice_usbutil_libusb_strerror(rc);
@@ -334,6 +336,17 @@ static gboolean gudev_devices_are_equal(GUdevDevice *a, GUdevDevice *b)
    return (same_pid && same_vid);
}

+static void handle_dev_change(GUdevClient *self);
+
+void spice_g_udev_set_redirecting(gboolean val)
+{
+    GUdevClientPrivate *priv = singleton->priv;
+    gboolean redirecting_end;
+    redirecting_end = (priv->redirecting && !val);
+    priv->redirecting = val;
+    if (redirecting_end)
+        handle_dev_change(singleton);
+}

I would make this method
win_gudev_client_set_redirecting(GUdevClient *client, gboolean val);
or something like that. However, seeing how this is used then, I suspect
things would be cleaner with a GUdevClient::redirecting gobject property rather
than having it in usb-device-manager.c where it needs to be kept in sync
with the GUdevClient state.


Thanks for the idea, Christophe, indeed Udev property is better.
Changed in v4.


Christophe

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]